Browse Source

Merge remote-tracking branch 'origin/master'

master
ligaode 2 months ago
parent
commit
b30ba5e83e
  1. 3
      anrui-base/anrui-base-api/src/main/java/com/yxt/anrui/base/api/basevehicle/BaseVehicle.java
  2. 4
      anrui-base/anrui-base-api/src/main/java/com/yxt/anrui/base/api/basevehicle/BaseVehicleDto.java
  3. 9
      anrui-base/anrui-base-api/src/main/java/com/yxt/anrui/base/api/basevehicle/BaseVehicleFeign.java
  4. 5
      anrui-base/anrui-base-api/src/main/java/com/yxt/anrui/base/api/basevehicle/BaseVehicleFeignFallback.java
  5. 5
      anrui-base/anrui-base-api/src/main/java/com/yxt/anrui/base/api/basevehicle/BaseVehicleVo.java
  6. 1
      anrui-base/anrui-base-biz/src/main/java/com/yxt/anrui/base/biz/basevehicle/BaseVehicleMapper.xml
  7. 5
      anrui-base/anrui-base-biz/src/main/java/com/yxt/anrui/base/biz/basevehicle/BaseVehicleRest.java
  8. 28
      anrui-base/anrui-base-biz/src/main/java/com/yxt/anrui/base/biz/basevehicle/BaseVehicleService.java
  9. 411
      anrui-flowable/anrui-flowable-biz/src/main/java/com/yxt/anrui/flowable/biz/flow3/Flow3Service.java
  10. 50
      anrui-gateway/src/main/resources/logback-spring.xml
  11. 22
      anrui-portal/anrui-portal-api/src/main/java/com/yxt/anrui/portal/api/sysstaffinfo/UserCommonVo.java
  12. 7
      anrui-portal/anrui-portal-biz/src/main/java/com/yxt/anrui/portal/biz/sysstaffinfo/SysStaffinfoMapper.java
  13. 27
      anrui-portal/anrui-portal-biz/src/main/java/com/yxt/anrui/portal/biz/sysstaffinfo/SysStaffinfoMapper.xml
  14. 12
      anrui-portal/anrui-portal-biz/src/main/java/com/yxt/anrui/portal/biz/sysstaffinfo/SysStaffinfoRest.java
  15. 30
      anrui-portal/anrui-portal-biz/src/main/java/com/yxt/anrui/portal/biz/sysstaffinfo/SysStaffinfoService.java
  16. 7
      anrui-portal/anrui-portal-biz/src/main/java/com/yxt/anrui/portal/biz/sysuser/SysUserRest.java
  17. 1
      anrui-portal/anrui-portal-biz/src/main/java/com/yxt/anrui/portal/biz/sysuser/SysUserService.java
  18. 152
      anrui-reportcenter/anrui-reportcenter-api/src/main/java/com/yxt/anrui/reportcenter/api/asmonthfittingsinventoryreport/AsMonthFittingsInventoryReport.java
  19. 74
      anrui-reportcenter/anrui-reportcenter-api/src/main/java/com/yxt/anrui/reportcenter/api/asmonthfittingsinventoryreport/AsMonthFittingsInventoryReportFeign.java
  20. 64
      anrui-reportcenter/anrui-reportcenter-api/src/main/java/com/yxt/anrui/reportcenter/api/asmonthfittingsinventoryreport/AsMonthFittingsInventoryReportFeignFallback.java
  21. 136
      anrui-reportcenter/anrui-reportcenter-api/src/main/java/com/yxt/anrui/reportcenter/api/asmonthfittingsinventoryreport/AsMonthFittingsInventoryReportVo.java
  22. 14
      anrui-reportcenter/anrui-reportcenter-api/src/main/java/com/yxt/anrui/reportcenter/api/asmonthfittingsinventoryreport/MonthFittingsReportListQuery.java
  23. 12
      anrui-reportcenter/anrui-reportcenter-api/src/main/java/com/yxt/anrui/reportcenter/api/asmonthfittingsinventoryreport/MonthFittingsReportListVo.java
  24. 71
      anrui-reportcenter/anrui-reportcenter-biz/src/main/java/com/yxt/anrui/reportcenter/biz/asmonthfittingsinventoryreport/AsMonthFittingsInventoryReportMapper.java
  25. 28
      anrui-reportcenter/anrui-reportcenter-biz/src/main/java/com/yxt/anrui/reportcenter/biz/asmonthfittingsinventoryreport/AsMonthFittingsInventoryReportMapper.xml
  26. 77
      anrui-reportcenter/anrui-reportcenter-biz/src/main/java/com/yxt/anrui/reportcenter/biz/asmonthfittingsinventoryreport/AsMonthFittingsInventoryReportRest.java
  27. 85
      anrui-reportcenter/anrui-reportcenter-biz/src/main/java/com/yxt/anrui/reportcenter/biz/asmonthfittingsinventoryreport/AsMonthFittingsInventoryReportService.java
  28. 1
      anrui-scm/anrui-scm-biz/src/main/java/com/yxt/anrui/scm/biz/scmapplyinbound/ScmApplyInboundService.java
  29. 1
      anrui-scm/anrui-scm-biz/src/main/java/com/yxt/anrui/scm/biz/scmvehicleenterlibrary/ScmVehicleEnterlibraryService.java
  30. 9
      anrui-scm/anrui-scm-ui/src/api/cheliang/basevehicle.js
  31. 83
      anrui-scm/anrui-scm-ui/src/views/cheliang/cheliangtaizhang/cheliangtaizhang.vue
  32. 5
      yxt-oa/src/main/java/com/yxt/anrui/oa/api/AdGroupSystemApplyRest.java
  33. 5
      yxt-oa/src/main/java/com/yxt/anrui/oa/biz/adgroupsystemapply/AdGroupSystemApply.java
  34. 6
      yxt-oa/src/main/java/com/yxt/anrui/oa/biz/adgroupsystemapply/AdGroupSystemApplyDto.java
  35. 107
      yxt-oa/src/main/java/com/yxt/anrui/oa/biz/adgroupsystemapply/AdGroupSystemApplyService.java
  36. 5
      yxt-oa/src/main/java/com/yxt/anrui/oa/biz/adgroupsystemapply/AdGroupSystemApplyVo.java
  37. 20
      yxt-oa/src/main/java/com/yxt/anrui/oa/biz/oaform/OaFormService.java
  38. 4
      yxt-oa/src/main/java/com/yxt/anrui/oa/biz/oaform/OaFormUrlEnum.java
  39. 4
      yxt-oa/src/main/java/com/yxt/anrui/oa/feign/flowable/flow/ProcDefEnum.java
  40. 9
      yxt-oa/src/main/java/com/yxt/anrui/oa/feign/flowable/flow3/Flow3Feign.java

3
anrui-base/anrui-base-api/src/main/java/com/yxt/anrui/base/api/basevehicle/BaseVehicle.java

@ -6,7 +6,6 @@ import io.swagger.annotations.ApiModel;
import io.swagger.annotations.ApiModelProperty;
import lombok.Data;
import javax.validation.constraints.NotBlank;
import java.util.Date;
/**
@ -78,6 +77,8 @@ public class BaseVehicle extends BaseEntity {
@ApiModelProperty(value = "指导价")
private Integer salePrice;
@ApiModelProperty(value = "厂家结算价")
private Integer settlePrice;
@ApiModelProperty("创建组织(陕汽必须的字段)")
private String createOrgSid;

4
anrui-base/anrui-base-api/src/main/java/com/yxt/anrui/base/api/basevehicle/BaseVehicleDto.java

@ -78,8 +78,10 @@ public class BaseVehicleDto implements Dto {
private String location;
@ApiModelProperty("存放地点名称(陕汽必须的字段)")
private String locationName;
@ApiModelProperty(value = "厂家结算价")
@ApiModelProperty(value = "入库价")
private Integer costPrice;
@ApiModelProperty(value = "厂家结算价")
private Integer settlePrice;
@ApiModelProperty(value = "厂家合同价")
private Integer contractPrice;
@ApiModelProperty(value = "成交价")

9
anrui-base/anrui-base-api/src/main/java/com/yxt/anrui/base/api/basevehicle/BaseVehicleFeign.java

@ -120,6 +120,15 @@ public interface BaseVehicleFeign {
@PostMapping("/update/{sid}")
public ResultBean update(@RequestBody BaseVehicleDto dto, @PathVariable("sid") String sid);
/**
* 修改厂家结算价
*
* @return
*/
@ApiOperation("修改厂家结算价")
@PostMapping("/updateSettlePrice")
public ResultBean updateSettlePrice(@RequestParam("sid") String sid, @RequestParam("settlePrice") String settlePrice);
/**
* 详情及修改回显
*

5
anrui-base/anrui-base-api/src/main/java/com/yxt/anrui/base/api/basevehicle/BaseVehicleFeignFallback.java

@ -72,6 +72,11 @@ public class BaseVehicleFeignFallback implements BaseVehicleFeign {
return ResultBean.fireFail().setMsg("接口anrui-base/basevehicle/update无法访问");
}
@Override
public ResultBean updateSettlePrice(String sid, String settlePrice) {
return null;
}
@Override
public ResultBean<BaseVehicleSelectVo> details(String sid) {
return null;

5
anrui-base/anrui-base-api/src/main/java/com/yxt/anrui/base/api/basevehicle/BaseVehicleVo.java

@ -54,8 +54,11 @@ public class BaseVehicleVo implements Vo {
private String locationName;
@ApiModelProperty(value = "厂家订单编号")
private String orderingNo;
@ApiModelProperty(value = "厂家结算价")
@ApiModelProperty(value = "入库价")
private Integer costPrice;
@ApiModelProperty(value = "厂家结算价")
private Integer settlePrice;
@ApiModelProperty(value = "运费")
private Integer freight;
@ApiModelProperty(value = "厂家合同价")

1
anrui-base/anrui-base-biz/src/main/java/com/yxt/anrui/base/biz/basevehicle/BaseVehicleMapper.xml

@ -44,6 +44,7 @@
bv.locationName,
bv.orderingNo,
bv.costPrice,
bv.settlePrice,
bv.freight,
bv.contractPrice,
bv.priceDate,

5
anrui-base/anrui-base-biz/src/main/java/com/yxt/anrui/base/biz/basevehicle/BaseVehicleRest.java

@ -685,6 +685,11 @@ public class BaseVehicleRest implements BaseVehicleFeign {
return rb.success().setMsg("修改成功");
}
@Override
public ResultBean updateSettlePrice(String sid, String settlePrice) {
return baseVehicleService.updateSettlePrice(sid,settlePrice);
}
@Override
public ResultBean<BaseVehicleSelectVo> details(String sid) {
ResultBean rb = ResultBean.fireFail();

28
anrui-base/anrui-base-biz/src/main/java/com/yxt/anrui/base/biz/basevehicle/BaseVehicleService.java

@ -86,6 +86,8 @@ import org.springframework.transaction.annotation.Transactional;
import java.text.ParseException;
import java.text.SimpleDateFormat;
import java.util.*;
import java.util.regex.Matcher;
import java.util.regex.Pattern;
/**
* Project: anrui-base(安瑞基础信息模块) <br/>
@ -4438,4 +4440,30 @@ public class BaseVehicleService extends MybatisBaseService<BaseVehicleMapper, Ba
baseMapper.updateVehicleYmd(vehiSid, settlementStatus, settlementStatusValue);
return rb.success();
}
public ResultBean updateSettlePrice(String sid, String settlePrice) {
ResultBean rb = ResultBean.fireFail();
if (StringUtils.isBlank(settlePrice)) {
return rb.setMsg("厂家结算价不能为空!");
}
if (!isNumeric(settlePrice)) {
return rb.setMsg("请填写整数");
}
BaseVehicle baseVehicle = fetchBySid(sid);
Integer i = Integer.valueOf(settlePrice);
baseVehicle.setSettlePrice(i);
baseMapper.updateById(baseVehicle);
return rb.success();
}
public boolean isNumeric(String str) {
Pattern pattern = Pattern.compile("[0-9]*");
System.out.println(str);
Matcher isNum = pattern.matcher(str);
if (!isNum.matches()) {
return false;
}
return true;
}
}

411
anrui-flowable/anrui-flowable-biz/src/main/java/com/yxt/anrui/flowable/biz/flow3/Flow3Service.java

@ -50,6 +50,7 @@ import org.springframework.stereotype.Service;
import org.springframework.web.bind.annotation.PostMapping;
import java.util.*;
import java.util.stream.Collectors;
import static org.junit.Assert.*;
@ -98,20 +99,346 @@ public class Flow3Service extends MybatisBaseService<FlowMapper, Flowable> {
public ResultBean<UpdateFlowFieldVo> businessStartProcessInstanceById(BusinessVariables bv) {
ResultBean<UpdateFlowFieldVo> rb = ResultBean.fireFail();
// 获取流程定义ID和发起人ID
//获取变量
String procDefId = bv.getModelId();
String userSid = bv.getUserSid();
// 获取传入的变量
Map<String, Object> variables = bv.getFormVariables();
Map<String, Object> variablesSeconds = bv.getFormVariables();
//下一环节待办人
String nextNodeUserSids = bv.getNextNodeUserSids();
//会签人员
List<String> approversList = Optional.ofNullable((List<String>) variables.get("approvers"))
.orElseGet(ArrayList::new);
List<String> userSidForNextNode = new ArrayList<>();
//如果指定的下一环节用户为空
if (StringUtils.isBlank(nextNodeUserSids)) {
userSidForNextNode = getNextNodeUser(bv).getData();
variables.put("approvers", userSidForNextNode);
//根据角色查询下一环节待办人
ResultBean<List<String>> listResultBean = getNextNodeUser(bv);
if (!listResultBean.getSuccess()) {
return rb.setMsg(listResultBean.getMsg());
}
userSidForNextNode = listResultBean.getData();
nextNodeUserSids = String.join(",", userSidForNextNode);
//如果会签人员为空
if (approversList.isEmpty()) {
approversList = userSidForNextNode;
variables.put("approvers", approversList);
}
} else {
userSidForNextNode.add(nextNodeUserSids);
}
// 根据流程定义ID查询最新的流程定义
ProcessDefinition processDefinition = repositoryService.createProcessDefinitionQuery()
.processDefinitionId(procDefId)
.latestVersion()
.singleResult();
// 如果流程被挂起,返回错误信息
if (Objects.nonNull(processDefinition) && processDefinition.isSuspended()) {
return rb.setMsg("流程已被挂起,请先激活流程");
}
// 设置发起人信息
ResultBean<SysUserVo> sysUserVoResultBean = sysUserFeign.fetchBySid(userSid);
SysUserVo sysUser = sysUserVoResultBean.getData();
identityService.setAuthenticatedUserId(sysUser.getSid());
variables.put(ProcessConstants.PROCESS_INITIATOR, userSid);
variables.put(ProcessConstants.USER_TYPE_ASSIGNEE, userSid);
// 启动流程实例
ProcessInstance processInstance = runtimeService.startProcessInstanceById(procDefId, variables);
// 获取第一步任务并设置任务执行人和意见
Task task = taskService.createTaskQuery().processInstanceId(processInstance.getProcessInstanceId()).singleResult();
if (Objects.nonNull(task)) {
taskService.addComment(task.getId(), processInstance.getProcessInstanceId(), FlowComment.START.getType(),
sysUser.getName() + "发起流程申请");
taskService.setAssignee(task.getId(), userSid);
taskService.complete(task.getId(), variables);
}
//设置是否是管理员自动审批,默认否
boolean adminContains = false;
String id_ = "", name_ = "", taskDefKey_ = "";
//查询当前实例最新的待办任务
List<Task> tasks = taskService.createTaskQuery().processInstanceId(processInstance.getId()).list();
for (int i = 0; i < tasks.size(); i++) {
Task task2 = tasks.get(i);
String isMultiInstanceTask = isMultiInstanceTask(task2);
if ("会签任务".equals(isMultiInstanceTask) || "或签任务".equals(isMultiInstanceTask)) {
userSidForNextNode = approversList;
String approver = getApproverForTask(userSidForNextNode, i);
approver = change(approver, bv.getInstanceId());
taskService.claim(task2.getId(), approver);
} else {
//单一审批
nextNodeUserSids = userSidForNextNode.get(0);
//查询下一环节是否有转办并添加评论
nextNodeUserSids = change(nextNodeUserSids, processInstance.getProcessInstanceId());
taskService.setAssignee(task2.getId(), nextNodeUserSids);
taskService.setVariablesLocal(task2.getId(), variables);
}
}
tasks = taskService.createTaskQuery().processInstanceId(processInstance.getId()).list();
//遍历待办任务
for (int i = 0; i < tasks.size(); i++) {
Task task2 = tasks.get(i);
String isMultiInstanceTask = isMultiInstanceTask(task2);
id_ = task2.getId();
taskDefKey_ = task2.getTaskDefinitionKey();
name_ = task2.getName();
if ("会签任务".equals(isMultiInstanceTask) || "或签任务".equals(isMultiInstanceTask)) {
if (ProcDefEnum.DEFAUL_TADMIN_SID.getProDefId().equals(task2.getAssignee())) {
adminContains = true;
break;
}
}
}
//提交前传入下一环节待办人
if (ProcDefEnum.DEFAUL_TADMIN_SID.getProDefId().equals(nextNodeUserSids) || adminContains) {
return handleAutomaticApproval(bv, task, id_, taskDefKey_, variables, processDefinition);
}
// 如果申请人与下一环节审批人相同,则自动审批
if (bv.getUserSid().equals(nextNodeUserSids)) {
return handleSelfApproval(bv, task, id_, taskDefKey_, variables, processDefinition);
}
// 实例化 UpdateFlowFieldVo
UpdateFlowFieldVo updateFlowFieldVo = new UpdateFlowFieldVo();
updateFlowFieldVo.setProcInsId(task.getProcessInstanceId());
updateFlowFieldVo.setNodeState(name_);
updateFlowFieldVo.setTaskId(id_);
updateFlowFieldVo.setTaskDefKey(taskDefKey_);
updateFlowFieldVo.setProcDefId(bv.getModelId());
updateFlowFieldVo.setSid(bv.getBusinessSid());
updateFlowFieldVo.setName(processDefinition.getName());
return rb.success().setData(updateFlowFieldVo).setMsg("流程启动成功");
}
public ResultBean<UpdateFlowFieldVo> handleProsess(BusinessVariables bv, boolean b) {
ResultBean<UpdateFlowFieldVo> rb = ResultBean.fireFail();
UpdateFlowFieldVo vo = new UpdateFlowFieldVo();
Map<String, Object> formVariables = Optional.ofNullable(bv.getFormVariables()).orElseGet(HashMap::new);
formVariables.put("businessSid", bv.getBusinessSid());
String taskId = bv.getTaskId(),
nextUserSid = bv.getNextNodeUserSids(),
userSid = bv.getUserSid(),
instanceId = bv.getInstanceId(),
comment = bv.getComment(),
orgPath = bv.getOrgSidPath(),
service = (String) formVariables.get("service"),
ydfOrgPath = (String) formVariables.get("ydfOrgPath"),
nodeState = "", taskDefKey = "";
//设置下一环节审批人是否自动审批通过,默认否
boolean contains = false,
//设置是否是管理员自动审批,默认否
adminContains = false;
//指定的会签用户
List<String> approversList = Optional.ofNullable((List<String>) formVariables.get("approvers"))
.orElseGet(ArrayList::new);
List<String> userSidForNextNode = new ArrayList<>();
// 根据流程定义ID查询最新的流程定义
ProcessDefinition processDefinition = repositoryService.createProcessDefinitionQuery()
.processDefinitionId(bv.getModelId())
.latestVersion()
.singleResult();
//查询任务id为taskId的任务是否存在
Task task = taskService.createTaskQuery().taskId(taskId).singleResult();
if (Objects.isNull(task)) {
return rb.setMsg("任务不存在");
}
String assignee = task.getAssignee();
if (b && (StringUtils.isNotBlank(assignee) && assignee.indexOf(userSid) < 0)) {
return rb.setMsg("当前用户不是环节的待办人,不能进行办理操作!");
}
//查询任务时单一审批还是或签还是会签?
String isMultiInstanceTask = isMultiInstanceTask(task);
//查询所有的待办任务
List<Task> tasks = taskService.createTaskQuery().processInstanceId(instanceId).list();
if (StringUtils.isBlank(nextUserSid)) {
if ("公司间调车".equals(service) && "Activity_0695qh4".equals(bv.getTaskDefKey())) {
bv.setOrgSidPath(ydfOrgPath);
}
if (!"会签任务".equals(isMultiInstanceTask) || tasks.size() == 1) {
//查询下一环节待办人
ResultBean<List<String>> listResultBean = getNextNodeUserSidsOfSubmit(bv);
if (!listResultBean.getSuccess()) {
//如果查询下一环节待办人为空,则默认为管理员
nextUserSid = ProcDefEnum.DEFAUL_TADMIN_SID.getProDefId();
userSidForNextNode.add(nextUserSid);
adminContains = true;
} else {
if (listResultBean.getData() != null && listResultBean.getData().size() != 0) {
userSidForNextNode = listResultBean.getData();
}
//如果会签人员为空,则查询下一环节人
if (approversList.isEmpty()) {
formVariables.put("approvers", userSidForNextNode);
}
}
}
} else {
userSidForNextNode.add(nextUserSid);
//若下一环节用户与系统管理员一致,则自动审批
if (ProcDefEnum.DEFAUL_TADMIN_SID.getProDefId().equals(nextUserSid)) {
adminContains = true;
}
}
if (DelegationState.PENDING.equals(task.getDelegationState())) {
adminContains = false;
//加签
Authentication.setAuthenticatedUserId(userSid);
taskService.addComment(taskId, instanceId,
FlowComment.DELEGATE.getType(), comment);
taskService.resolveTask(taskId, formVariables);
nodeState = task.getName();
taskDefKey = task.getTaskDefinitionKey();
} else {
//下一环节是否是多实例任务
boolean isMultiInstanceTaskNext = false;
tasks = taskService.createTaskQuery().processInstanceId(instanceId).list();
//是否要查询当前任务是否是会签环节
boolean checkTask = tasks.size() == 1 || "或签任务".equals(isMultiInstanceTask);
//当前任务办理完成
taskService.addComment(taskId, instanceId, FlowComment.NORMAL.getType(), comment);
log.error("taskid:{},userSid:{}", taskId, userSid);
log.error("formVariables:{}", JSON.toJSONString(formVariables));
taskService.setAssignee(taskId, userSid);
taskService.complete(taskId, formVariables);
//查询办理完后的最新待办任务
tasks = taskService.createTaskQuery().processInstanceId(instanceId).list();
if (tasks.size() > 0) {
for (int i = 0; i < tasks.size(); i++) {
Task task2 = tasks.get(i);
if (checkTask) {
isMultiInstanceTask = isMultiInstanceTask(task2);
if ("会签任务".equals(isMultiInstanceTask) || "或签任务".equals(isMultiInstanceTask)) {
userSidForNextNode = approversList;
String nextUserSidNext = userSidForNextNode.get(i);
nextUserSidNext = change(nextUserSidNext, bv.getInstanceId());
taskService.claim(task2.getId(), nextUserSidNext); // 由候选人认领任务
isMultiInstanceTaskNext = true;
} else {
nextUserSid = userSidForNextNode.get(0);
//查询下一环节用户是否有转办人
nextUserSid = change(nextUserSid, bv.getInstanceId());
taskService.setAssignee(task2.getId(), nextUserSid);//将下一环节用户放入流程中
}
}
}
List<String> taskIdList = tasks.stream().map(v -> v.getId()).collect(Collectors.toList());
String taskIds = String.join(",", taskIdList);
vo.setTaskId(taskIds);
//在act_ru_variable表中增加环节上的业务参数的变量
taskService.setVariablesLocal(tasks.get(0).getId(), formVariables);
nodeState = tasks.get(0).getName();
taskDefKey = tasks.get(0).getTaskDefinitionKey();
//遍历待办任务,将存在管理员的自动审批
for (int i = 0; i < tasks.size(); i++) {
Task task2 = tasks.get(i);
isMultiInstanceTask = isMultiInstanceTask(task2);
if ("会签任务".equals(isMultiInstanceTask) || "或签任务".equals(isMultiInstanceTask)) {
if (ProcDefEnum.DEFAUL_TADMIN_SID.getProDefId().equals(task2.getAssignee())) {
nextUserSid = ProcDefEnum.DEFAUL_TADMIN_SID.getProDefId();
adminContains = true;
vo.setTaskId(task2.getId());
nodeState = task2.getName();
taskDefKey = task2.getTaskDefinitionKey();
break;
}
}
}
} else {
nodeState = FlowComment.SETTLE.getRemark();
taskDefKey = "Event_end";
vo.setNodeState(FlowComment.SETTLE.getRemark());
}
if (!isMultiInstanceTaskNext) {
//获取该流程所有要走的环节节点
List<FlowElement> flowElements = calApprovePath(bv.getModelId(),
bv.getFormVariables());
for (int i = 0; i < flowElements.size(); i++) {
FlowElement flowElement = flowElements.get(i);
String id = flowElement.getId();
// 如果当前环节匹配taskDefKey,并且后续环节存在
if (taskDefKey.equals(id) && i + 1 < flowElements.size()) {
FlowElement nextFlowElement = flowElements.get(i + 1); // 获取下一个环节
List<SysUserVo> nextUserList = getUserListFromFlowElement(nextFlowElement, orgPath); // 获取下一个环节的用户列表
// 获取下下一个环节的用户列表(如果存在)
List<SysUserVo> nextNextUserList = new ArrayList<>();
if (i + 2 < flowElements.size()) {
FlowElement nextNextFlowElement = flowElements.get(i + 2); // 获取下下一个环节
nextNextUserList = getUserListFromFlowElement(nextNextFlowElement, orgPath); // 获取下下一个环节的用户列表
}
// 如果下一个环节只有一个用户,并且其sid与下一级相同,则设置contains为true
if (nextUserList.size() == 1 && nextUserList.get(0).getSid().equals(nextUserSid)) {
contains = true; // 确定自动审批
break; // 跳出循环,不再检查后续环节
}
// 如果下下一个环节没有用户,且下下下一个环节与下一级相同,设置contains为true
if (nextUserList.isEmpty() && nextNextUserList.size() == 1 && nextNextUserList.get(0).getSid().equals(nextUserSid)) {
contains = true; // 确定自动审批
break; // 跳出循环
}
}
}
}
}
//设置管理员是否自动审批的字段是否是是。//若下一环节用户与系统管理员一致,则自动审批
if (adminContains) {
bv.setUserSid(nextUserSid);
bv.setTaskId(vo.getTaskId());
bv.setTaskDefKey(taskDefKey);
bv.setComment("系统自动跳过");
bv.setNextNodeUserSids("");
return handleProsess(bv, false);
}
if (contains) {
bv.setUserSid(nextUserSid);
bv.setTaskId(vo.getTaskId());
bv.setTaskDefKey(taskDefKey);
bv.setComment("因与下一级审批人相同,系统自动处理,需以下一级审批人审批意见为准!");
return handleProsess(bv, false);
}
vo.setProcInsId(instanceId);
vo.setProcDefId(bv.getModelId());
vo.setNodeState(nodeState);
vo.setTaskDefKey(taskDefKey);
vo.setSid(bv.getBusinessSid());
vo.setName(processDefinition.getName());
return rb.success().setData(vo);
}
public ResultBean<UpdateFlowFieldVo> businessStartProcessInstanceById222(BusinessVariables bv) {
ResultBean<UpdateFlowFieldVo> rb = ResultBean.fireFail();
// 实例化 UpdateFlowFieldVo
UpdateFlowFieldVo updateFlowFieldVo = new UpdateFlowFieldVo();
String procDefId = bv.getModelId();
String userSid = bv.getUserSid();
String nextNodeUserSids = bv.getNextNodeUserSids();
Map<String, Object> variables = bv.getFormVariables();
Map<String, Object> variablesSeconds = bv.getFormVariables();
List<String> userSidForNextNode = new ArrayList<>();
List<String> approversList = Optional.ofNullable((List<String>) variables.get("approvers"))
.orElseGet(ArrayList::new);
if (StringUtils.isBlank(nextNodeUserSids)) {
userSidForNextNode = getNextNodeUser(bv).getData();
if (!approversList.isEmpty()) {
variables.put("approvers", approversList);
} else {
approversList = userSidForNextNode;
variables.put("approvers", approversList);
}
} else {
//下一环节审批人
userSidForNextNode.add(nextNodeUserSids);
}
// 根据流程定义ID查询最新的流程定义
ProcessDefinition processDefinition = repositoryService.createProcessDefinitionQuery()
.processDefinitionId(procDefId)
@ -157,6 +484,7 @@ public class Flow3Service extends MybatisBaseService<FlowMapper, Flowable> {
task_def_key_ = task2.getTaskDefinitionKey();
name_ = task2.getName();
if ("会签任务".equals(isMultiInstanceTask) || "或签任务".equals(isMultiInstanceTask)) {
userSidForNextNode = approversList;
String approver = getApproverForTask(userSidForNextNode, i);
approver = change(approver, bv.getInstanceId());
taskService.claim(task2.getId(), approver);
@ -177,7 +505,7 @@ public class Flow3Service extends MybatisBaseService<FlowMapper, Flowable> {
task_def_key_ = task2.getTaskDefinitionKey();
name_ = task2.getName();
if ("会签任务".equals(isMultiInstanceTask) || "或签任务".equals(isMultiInstanceTask)) {
if(ProcDefEnum.DEFAUL_TADMIN_SID.getProDefId().equals(task2.getAssignee())){
if (ProcDefEnum.DEFAUL_TADMIN_SID.getProDefId().equals(task2.getAssignee())) {
adminContains = true;
break;
}
@ -194,18 +522,15 @@ public class Flow3Service extends MybatisBaseService<FlowMapper, Flowable> {
taskService.setVariablesLocal(id_, variables);
}
//提交前传入下一环节待办人
if (ProcDefEnum.DEFAUL_TADMIN_SID.getProDefId().equals(nextNodeUserSids) || adminContains) {
return handleAutomaticApproval(bv, task, id_, task_def_key_, variables, variablesSeconds, processDefinition);
return handleAutomaticApproval(bv, task, id_, task_def_key_, variables, processDefinition);
}
// 如果申请人与下一环节审批人相同,则自动审批
if (bv.getUserSid().equals(nextNodeUserSids)) {
return handleSelfApproval(bv, task, id_, task_def_key_, variables, variablesSeconds, processDefinition);
return handleSelfApproval(bv, task, id_, task_def_key_, variables, processDefinition);
}
// 实例化 UpdateFlowFieldVo
UpdateFlowFieldVo updateFlowFieldVo = new UpdateFlowFieldVo();
updateFlowFieldVo.setProcInsId(task.getProcessInstanceId());
updateFlowFieldVo.setNodeState(name_);
updateFlowFieldVo.setTaskId(id_);
@ -216,7 +541,7 @@ public class Flow3Service extends MybatisBaseService<FlowMapper, Flowable> {
return rb.success().setData(updateFlowFieldVo).setMsg("流程启动成功");
}
public ResultBean<UpdateFlowFieldVo> handleProsess(BusinessVariables bv, boolean b) {
public ResultBean<UpdateFlowFieldVo> handleProsess222(BusinessVariables bv, boolean b) {
ResultBean<UpdateFlowFieldVo> rb = ResultBean.fireFail();
UpdateFlowFieldVo vo = new UpdateFlowFieldVo();
//获取表单中的参数
@ -249,6 +574,8 @@ public class Flow3Service extends MybatisBaseService<FlowMapper, Flowable> {
if (b && (StringUtils.isNotBlank(assignee) && assignee.indexOf(userSid) < 0)) {
return rb.setMsg("当前用户不是环节的待办人,不能进行办理操作!");
}
List<String> approversList = Optional.ofNullable((List<String>) formVariables.get("approvers"))
.orElseGet(ArrayList::new);
if (StringUtils.isBlank(nextUserSid)) {
if ("公司间调车".equals(service) && "Activity_0695qh4".equals(bv.getTaskDefKey())) {
bv.setOrgSidPath(ydfOrgPath);
@ -257,10 +584,10 @@ public class Flow3Service extends MybatisBaseService<FlowMapper, Flowable> {
if (!listResultBean.getSuccess()) {
nextUserSid = ProcDefEnum.DEFAUL_TADMIN_SID.getProDefId();
adminContains = true;
userSidForNextNode.add(nextUserSid);
} else {
if(listResultBean.getData() != null){
if (listResultBean.getData() != null) {
userSidForNextNode = listResultBean.getData();
formVariables.put("approvers", listResultBean.getData());
}
}
} else {
@ -269,6 +596,24 @@ public class Flow3Service extends MybatisBaseService<FlowMapper, Flowable> {
adminContains = true;
}
}
if (!approversList.isEmpty()) {
formVariables.put("approvers", approversList);
} else {
ResultBean<List<String>> listResultBean = getNextNodeUserSidsOfSubmit(bv);
if (!listResultBean.getSuccess()) {
nextUserSid = ProcDefEnum.DEFAUL_TADMIN_SID.getProDefId();
adminContains = true;
userSidForNextNode.add(nextUserSid);
} else {
if (listResultBean.getData() != null) {
approversList = listResultBean.getData();
formVariables.put("approvers", approversList);
}
}
}
//是否是多实例任务
String isMultiInstanceTask = isMultiInstanceTask(task);
boolean isMultiInstanceTaskNext = false;
@ -301,6 +646,7 @@ public class Flow3Service extends MybatisBaseService<FlowMapper, Flowable> {
Task task2 = tasks.get(i);
isMultiInstanceTask = isMultiInstanceTask(task2);
if ("会签任务".equals(isMultiInstanceTask) || "或签任务".equals(isMultiInstanceTask)) {
userSidForNextNode = approversList;
String nextUserSidNext = userSidForNextNode.get(i);
nextUserSidNext = change(nextUserSidNext, bv.getInstanceId());
taskService.claim(task2.getId(), nextUserSidNext); // 由候选人认领任务
@ -312,7 +658,9 @@ public class Flow3Service extends MybatisBaseService<FlowMapper, Flowable> {
nextUserSid = change(nextUserSid, bv.getInstanceId());
taskService.setAssignee(task2.getId(), nextUserSid);//将下一环节用户放入流程中
}
vo.setTaskId(task2.getId());
List<String> taskIdList = tasks.stream().map(v -> v.getId()).collect(Collectors.toList());
String taskIds = String.join(",", taskIdList);
vo.setTaskId(taskIds);
//在act_ru_variable表中增加环节上的业务参数的变量
taskService.setVariablesLocal(task2.getId(), formVariables);
nodeState = task2.getName();
@ -323,11 +671,11 @@ public class Flow3Service extends MybatisBaseService<FlowMapper, Flowable> {
for (int i = 0; i < tasks.size(); i++) {
Task task2 = tasks.get(i);
isMultiInstanceTask = isMultiInstanceTask(task2);
vo.setTaskId(task2.getId());
/* vo.setTaskId(task2.getId());
nodeState = task2.getName();
taskDefKey = task2.getTaskDefinitionKey();
taskDefKey = task2.getTaskDefinitionKey();*/
if ("会签任务".equals(isMultiInstanceTask) || "或签任务".equals(isMultiInstanceTask)) {
if(ProcDefEnum.DEFAUL_TADMIN_SID.getProDefId().equals(task2.getAssignee())){
if (ProcDefEnum.DEFAUL_TADMIN_SID.getProDefId().equals(task2.getAssignee())) {
nextUserSid = ProcDefEnum.DEFAUL_TADMIN_SID.getProDefId();
adminContains = true;
break;
@ -341,9 +689,12 @@ public class Flow3Service extends MybatisBaseService<FlowMapper, Flowable> {
}
}else{//会签
} else {//会签
Task task2 = tasks.get(0);
vo.setTaskId(task2.getId());
List<String> taskIdList = tasks.stream().map(v -> v.getId()).collect(Collectors.toList());
String taskIds = String.join(",", taskIdList);
// vo.setTaskId(task2.getId());
vo.setTaskId(taskIds);
nodeState = task2.getName();
taskDefKey = task2.getTaskDefinitionKey();
@ -408,7 +759,7 @@ public class Flow3Service extends MybatisBaseService<FlowMapper, Flowable> {
return rb.success().setData(vo);
}
public ResultBean<UpdateFlowFieldVo> businessStartProcessInstanceById222(BusinessVariables bv) {
public ResultBean<UpdateFlowFieldVo> businessStartProcessInstanceById111(BusinessVariables bv) {
ResultBean<UpdateFlowFieldVo> rb = ResultBean.fireFail();
// 或签任务候选人
/* List<String> userIds = Arrays.asList(
@ -497,12 +848,12 @@ public class Flow3Service extends MybatisBaseService<FlowMapper, Flowable> {
taskService.setVariablesLocal(id_, variables);
if (ProcDefEnum.DEFAUL_TADMIN_SID.getProDefId().equals(nextNodeUserSids)) {
return handleAutomaticApproval(bv, task, id_, task_def_key_, variables, variablesSeconds, processDefinition);
return handleAutomaticApproval(bv, task, id_, task_def_key_, variables, processDefinition);
}
// 如果申请人与下一环节审批人相同,则自动审批
if (bv.getUserSid().equals(nextNodeUserSids)) {
return handleSelfApproval(bv, task, id_, task_def_key_, variables, variablesSeconds, processDefinition);
return handleSelfApproval(bv, task, id_, task_def_key_, variables, processDefinition);
}
} else {
List<Task> tasks = taskService.createTaskQuery().processInstanceId(processInstance.getId()).list();
@ -514,7 +865,7 @@ public class Flow3Service extends MybatisBaseService<FlowMapper, Flowable> {
if (!ProcDefEnum.DEFAUL_TADMIN_SID.getProDefId().equals(task2.getAssignee())) {
continue;
} else {
return handleAutomaticApproval(bv, task, id_, task_def_key_, variables, variablesSeconds, processDefinition);
return handleAutomaticApproval(bv, task, id_, task_def_key_, variables, processDefinition);
}
}
@ -544,7 +895,7 @@ public class Flow3Service extends MybatisBaseService<FlowMapper, Flowable> {
* 处理自动审批逻辑当任务为转办时
*/
private ResultBean<UpdateFlowFieldVo> handleAutomaticApproval(BusinessVariables bv, Task task, String id_, String task_def_key_,
Map<String, Object> variables, Map<String, Object> variablesSeconds, ProcessDefinition processDefinition) {
Map<String, Object> variables, ProcessDefinition processDefinition) {
bv.setModelId(bv.getModelId());
bv.setInstanceId(task.getProcessInstanceId());
bv.setTaskId(id_);
@ -553,7 +904,6 @@ public class Flow3Service extends MybatisBaseService<FlowMapper, Flowable> {
bv.setTaskDefKey(task_def_key_);
bv.setFormVariables(variables);
bv.setOrgSidPath(bv.getOrgSidPath());
bv.setFormVariables(variablesSeconds);
bv.setComment("系统自动转办!");
bv.setNextNodeUserSids("");
@ -565,7 +915,7 @@ public class Flow3Service extends MybatisBaseService<FlowMapper, Flowable> {
* 处理自动审批逻辑当申请人与下一环节审批人相同
*/
private ResultBean<UpdateFlowFieldVo> handleSelfApproval(BusinessVariables bv, Task task, String id_, String task_def_key_,
Map<String, Object> variables, Map<String, Object> variablesSeconds, ProcessDefinition processDefinition) {
Map<String, Object> variables, ProcessDefinition processDefinition) {
bv.setModelId(bv.getModelId());
bv.setInstanceId(task.getProcessInstanceId());
bv.setTaskId(id_);
@ -574,7 +924,6 @@ public class Flow3Service extends MybatisBaseService<FlowMapper, Flowable> {
bv.setTaskDefKey(task_def_key_);
bv.setFormVariables(variables);
bv.setOrgSidPath(bv.getOrgSidPath());
bv.setFormVariables(variablesSeconds);
bv.setComment("因与申请人相同,系统自动处理,需以下一级审批人审批意见为准!");
bv.setNextNodeUserSids("");
@ -653,7 +1002,7 @@ public class Flow3Service extends MybatisBaseService<FlowMapper, Flowable> {
return userList == null ? new ArrayList<>() : userList; // 如果返回为null,则返回空列表
}
/* public ResultBean<UpdateFlowFieldVo> handleProsess222(BusinessVariables bv, boolean b) {
/* public ResultBean<UpdateFlowFieldVo> handleProsess111(BusinessVariables bv, boolean b) {
ResultBean<UpdateFlowFieldVo> rb = ResultBean.fireFail();
UpdateFlowFieldVo vo = new UpdateFlowFieldVo();
// 或签任务候选人
@ -925,7 +1274,7 @@ public class Flow3Service extends MybatisBaseService<FlowMapper, Flowable> {
if (sysUserVos == null || sysUserVos.size() < 1) {
log.error("下一环节无用户填充管理员用户");
return rb;
}else{
} else {
StringBuilder nextNodeUserSids = new StringBuilder();
for (SysUserVo su : sysUserVos) {
nextNodeUserSids.append(su.getSid()).append(",");

50
anrui-gateway/src/main/resources/logback-spring.xml

@ -0,0 +1,50 @@
<?xml version="1.0" encoding="UTF-8"?>
<configuration>
<property name="log.base" value="logs/anrui_gateway" />
<appender name="STDOUT" class="ch.qos.logback.core.ConsoleAppender">
<encoder>
<!--格式化输出:%d表示日期,%thread表示线程名,%-5level:级别从左显示5个字符宽度%msg:日志消息,%n是换行符 :
|%blue(%thread) 线程 如 :DiscoveryClient-CacheRefreshExecutor-0-->
<!--<pattern>%d{HH:mm:ss.SSS} [%thread] %-5level %logger{36} - %msg%n</pattern>-->
<pattern>%yellow(%date{yyyy-MM-dd HH:mm:ss}) |%highlight(%-5level) |%green(%logger:%line) |%blue(%msg%n)
</pattern>
<!--<charset>UTF-8</charset> -->
</encoder>
</appender>
<!-- 彩色日志 -->
<!-- 彩色日志依赖的渲染类 -->
<conversionRule conversionWord="clr" converterClass="org.springframework.boot.logging.logback.ColorConverter" />
<conversionRule conversionWord="wex" converterClass="org.springframework.boot.logging.logback.WhitespaceThrowableProxyConverter" />
<conversionRule conversionWord="wEx" converterClass="org.springframework.boot.logging.logback.ExtendedWhitespaceThrowableProxyConverter" />
<!-- 彩色日志格式 -->
<property name="CONSOLE_LOG_PATTERN" value="${CONSOLE_LOG_PATTERN:-%clr(%d{yyyy-MM-dd HH:mm:ss.SSS}){faint} %clr(${LOG_LEVEL_PATTERN:-%5p}) %clr(${PID:- }){magenta} %clr(---){faint} %clr([%15.15t]){faint} %clr(%-40.40logger{39}){cyan} %clr(:){faint} %m%n${LOG_EXCEPTION_CONVERSION_WORD:-%wEx}}"/>
<appender name="FILEOUT"
class="ch.qos.logback.core.rolling.RollingFileAppender">
<file>${log.base}.log</file>
<rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy">
<fileNamePattern>${log.base}.%d{yyyyMMdd}.%i.log.zip
</fileNamePattern>
<!-- 当文件大小超过10MB时触发滚动 -->
<timeBasedFileNamingAndTriggeringPolicy
class="ch.qos.logback.core.rolling.SizeAndTimeBasedFNATP">
<maxFileSize>1MB</maxFileSize>
</timeBasedFileNamingAndTriggeringPolicy>
</rollingPolicy>
<encoder>
<!--<pattern>%date [%thread] %-5level %logger{35} - %msg%n</pattern>-->
<Pattern>%d{yyyy-MM-dd HH:mm:ss.SSS} [%thread] %-5level %logger{36}
-%msg%n</Pattern>
<!--<charset>UTF-8</charset> -->
</encoder>
</appender>
<root level="INFO">
<appender-ref ref="STDOUT" />
<appender-ref ref="FILEOUT" />
</root>
</configuration>

22
anrui-portal/anrui-portal-api/src/main/java/com/yxt/anrui/portal/api/sysstaffinfo/UserCommonVo.java

@ -0,0 +1,22 @@
package com.yxt.anrui.portal.api.sysstaffinfo;
import com.fasterxml.jackson.annotation.JsonProperty;
import lombok.Data;
import java.util.HashMap;
import java.util.Map;
/**
* @description:
* @author: dimengzhe
* @date: 2025/3/3
**/
@Data
public class UserCommonVo {
@JsonProperty("id")
private String dictKey;
private String dictValue;
private Map<String, Object> extra = new HashMap<>();
}

7
anrui-portal/anrui-portal-biz/src/main/java/com/yxt/anrui/portal/biz/sysstaffinfo/SysStaffinfoMapper.java

@ -121,10 +121,15 @@ public interface SysStaffinfoMapper extends BaseMapper<SysStaffinfo> {
IPage<AppSysStaffVo> getUserList(IPage<SysStaffinfo> page, @Param(Constants.WRAPPER) QueryWrapper<AppSysStaffVo> qw, @Param("orgSid") String orgSid);
List<AppSysStaffVo> getGressionUserList(@Param("userOrgSid")String userOrgSid);
List<AppSysStaffVo> getGressionUserList(@Param("userOrgSid") String userOrgSid);
List<PcSysStaffVo> selectStaffLists();
List<PcSysStaffVo> selectStaffListss();
List<StaffByRole> getStaffNameByRoleCode(@Param("orgSidPath") String orgSidPath, @Param("list") List<String> list);
List<UserCommonVo> getCommonUser();
List<UserCommonVo> getCommonUserByRoleSid(@Param("roleSid") String s);
}

27
anrui-portal/anrui-portal-biz/src/main/java/com/yxt/anrui/portal/biz/sysstaffinfo/SysStaffinfoMapper.xml

@ -386,14 +386,17 @@
select su.sid userSid,
si.name staffName
from sys_user su
left join sys_staffinfo si on su.staffSid = si.sid where su.isAdmin is NULL
left join sys_staffinfo si on su.staffSid = si.sid
where su.isAdmin is NULL
</select>
<select id="selectStaffListss" resultType="com.yxt.anrui.portal.api.sysstaffinfo.PcSysStaffVo">
select su.sid userSid,
si.name staffName
from sys_user su
left join sys_staffinfo si on su.staffSid = si.sid where su.isAdmin is NULL and si.personTypeKey != '01'
left join sys_staffinfo si on su.staffSid = si.sid
where su.isAdmin is NULL
and si.personTypeKey != '01'
</select>
<select id="getStaffNameByRoleCode" resultType="com.yxt.anrui.portal.api.sysstaffinfo.StaffByRole">
SELECT DISTINCT
@ -412,4 +415,24 @@
#{item}
</foreach>
</select>
<select id="getCommonUser" resultType="com.yxt.anrui.portal.api.sysstaffinfo.UserCommonVo">
select su.sid dictKey,
si.name dictValue
from sys_user su
left join sys_staffinfo si on su.staffSid = si.sid
where su.isAdmin is NULL
and si.personTypeKey != '01'
</select>
<select id="getCommonUserByRoleSid" resultType="com.yxt.anrui.portal.api.sysstaffinfo.UserCommonVo">
select su.sid dictKey,
si.name dictValue
from sys_user su
left join sys_staffinfo si on su.staffSid = si.sid
left join sys_user_role sr on sr.userSid = su.sid
where su.isAdmin is NULL
and si.personTypeKey != '01'
and sr.roleSid = #{roleSid}
</select>
</mapper>

12
anrui-portal/anrui-portal-biz/src/main/java/com/yxt/anrui/portal/biz/sysstaffinfo/SysStaffinfoRest.java

@ -4,6 +4,7 @@ import com.baomidou.mybatisplus.core.metadata.IPage;
import com.yxt.anrui.portal.api.sysstaffinfo.*;
import com.yxt.anrui.portal.api.sysstaffinfo.app.AppSysStaffQuery;
import com.yxt.anrui.portal.api.sysstaffinfo.app.AppSysStaffVo;
import com.yxt.anrui.portal.api.sysstaffinfo.UserCommonVo;
import com.yxt.anrui.portal.biz.sysuser.SysUserService;
import com.yxt.common.base.config.component.FileUploadComponent;
import com.yxt.common.base.utils.PagerUtil;
@ -11,11 +12,10 @@ import com.yxt.common.core.query.PagerQuery;
import com.yxt.common.core.result.ResultBean;
import com.yxt.common.core.vo.PagerVo;
import io.swagger.annotations.Api;
import io.swagger.annotations.ApiOperation;
import org.apache.commons.lang3.StringUtils;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.RequestBody;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;
import org.springframework.web.bind.annotation.*;
import java.text.SimpleDateFormat;
import java.util.Collections;
@ -237,5 +237,9 @@ public class SysStaffinfoRest implements SysStaffinfoFeign {
return sysStaffinfoService.selectStaffListss();
}
@ApiOperation("获取用户")
@GetMapping({"/getCommonUser", "/getCommonUser/{roleSids}"})
ResultBean<List<UserCommonVo>> getCommonUser(@PathVariable(value = "roleSids", required = false) String roleSids) {
return sysStaffinfoService.getCommonUser(roleSids);
}
}

30
anrui-portal/anrui-portal-biz/src/main/java/com/yxt/anrui/portal/biz/sysstaffinfo/SysStaffinfoService.java

@ -40,6 +40,8 @@ import org.springframework.stereotype.Service;
import java.text.SimpleDateFormat;
import java.util.*;
import java.util.function.Function;
import java.util.stream.Collectors;
import static java.util.stream.Collectors.toList;
@ -624,10 +626,10 @@ public class SysStaffinfoService extends MybatisBaseService<SysStaffinfoMapper,
if (reduce1.size() > 0) {
//根据staffSid查询token
String token = sysUserService.selectByStaffsid(sid).getToken();
if(StringUtils.isNotBlank(token)){
if (StringUtils.isNotBlank(token)) {
//查询redis中是否包含该token
String userName = redisUtil.get(token);
if(StringUtils.isNotBlank(userName)){
if (StringUtils.isNotBlank(userName)) {
//清空该token
redisUtil.remove(token);
}
@ -826,7 +828,29 @@ public class SysStaffinfoService extends MybatisBaseService<SysStaffinfoMapper,
List<String> roleCode = query.getRoleCode();
SysOrganization sysOrganization = sysOrganizationService.fetchBySid(useOrgSid);
String orgSidPath = sysOrganization.getOrgSidPath();
List<StaffByRole> list = baseMapper.getStaffNameByRoleCode(orgSidPath,roleCode);
List<StaffByRole> list = baseMapper.getStaffNameByRoleCode(orgSidPath, roleCode);
return list;
}
public ResultBean<List<UserCommonVo>> getCommonUser(String roleSids) {
ResultBean<List<UserCommonVo>> rb = ResultBean.fireFail();
List<UserCommonVo> userCommonVoList = new ArrayList<>();
if (StringUtils.isBlank(roleSids)) {
//查询集团所有的人员
userCommonVoList = baseMapper.getCommonUser();
} else {
List<String> roleSidList = Arrays.asList(roleSids.split(","));
roleSidList.removeAll(Collections.singleton(null));
if (!roleSidList.isEmpty()) {
for (int i = 0; i < roleSidList.size(); i++) {
List<UserCommonVo> userList = baseMapper.getCommonUserByRoleSid(roleSidList.get(i));
userCommonVoList.addAll(userList);
}
}
}
List<UserCommonVo> uniqueList = new ArrayList<>(userCommonVoList.stream()
.collect(Collectors.toMap(UserCommonVo::getDictKey, Function.identity(), (existing, replacement) -> existing))
.values());
return rb.success().setData(uniqueList);
}
}

7
anrui-portal/anrui-portal-biz/src/main/java/com/yxt/anrui/portal/biz/sysuser/SysUserRest.java

@ -24,11 +24,10 @@ import com.yxt.common.core.query.PagerQuery;
import com.yxt.common.core.result.ResultBean;
import com.yxt.common.core.vo.PagerVo;
import io.swagger.annotations.Api;
import io.swagger.annotations.ApiOperation;
import org.apache.commons.lang3.StringUtils;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.RequestBody;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;
import org.springframework.web.bind.annotation.*;
import javax.servlet.http.HttpServletRequest;
import java.util.*;
@ -286,7 +285,7 @@ public class SysUserRest implements SysUserFeign {
if (i == 0) {
return ResultBean.fireFail().setMsg("修改失败");
}
if(StringUtils.isNotBlank(token)){
if (StringUtils.isNotBlank(token)) {
redisUtil.remove(token);
}
return ResultBean.fireSuccess().setMsg("修改成功");

1
anrui-portal/anrui-portal-biz/src/main/java/com/yxt/anrui/portal/biz/sysuser/SysUserService.java

@ -14,6 +14,7 @@ import com.yxt.anrui.portal.api.sysmobilemenu.SysMobileMenu;
import com.yxt.anrui.portal.api.sysorganization.SysOrganization;
import com.yxt.anrui.portal.api.sysstaffinfo.SysStaffinfo;
import com.yxt.anrui.portal.api.sysstaffinfo.SysStaffinfoVo;
import com.yxt.anrui.portal.api.sysstaffinfo.UserCommonVo;
import com.yxt.anrui.portal.api.sysstafforg.SysStaffOrg;
import com.yxt.anrui.portal.api.sysstafforg.SysStaffOrgVo;
import com.yxt.anrui.portal.api.sysstaffpost.SysStaffPostDetailsVo;

152
anrui-reportcenter/anrui-reportcenter-api/src/main/java/com/yxt/anrui/reportcenter/api/asmonthfittingsinventoryreport/AsMonthFittingsInventoryReport.java

@ -0,0 +1,152 @@
/*********************************************************
*********************************************************
******************** *******************
************* ************
******* _oo0oo_ *******
*** o8888888o ***
* 88" . "88 *
* (| -_- |) *
* 0\ = /0 *
* ___/`---'\___ *
* .' \\| |// '. *
* / \\||| : |||// \ *
* / _||||| -:- |||||- \ *
* | | \\\ - /// | | *
* | \_| ''\---/'' |_/ | *
* \ .-\__ '-' ___/-. / *
* ___'. .' /--.--\ `. .'___ *
* ."" '< `.___\_<|>_/___.' >' "". *
* | | : `- \`.;`\ _ /`;.`/ - ` : | | *
* \ \ `_. \_ __\ /__ _/ .-` / / *
* =====`-.____`.___ \_____/___.-`___.-'===== *
* `=---=' *
* ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ *
*********__佛祖保佑__永无BUG__验收通过__钞票多多__*********
*********************************************************/
package com.yxt.anrui.reportcenter.api.asmonthfittingsinventoryreport;
import com.baomidou.mybatisplus.annotation.TableName;
import com.yxt.common.core.domain.BaseEntity;
import io.swagger.annotations.ApiModel;
import io.swagger.annotations.ApiModelProperty;
import lombok.Data;
import java.math.BigDecimal;
/**
* Project: baobiao(baobiao) <br/>
* File: AsMonthFittingsInventoryReport.java <br/>
* Class: com.yxt.anrui.reportcenter.api.asmonthfittingsinventoryreport.AsMonthFittingsInventoryReport <br/>
* Description: 月度配件库存管理指标完成情况报表. <br/>
* Copyright: Copyright (c) 2011 <br/>
* Company: https://gitee.com/liuzp315 <br/>
* Makedate: 2025-03-05 14:43:41 <br/>
*
* @author liupopo
* @version 1.0
* @since 1.0
*/
@Data
@ApiModel(value = "月度配件库存管理指标完成情况报表", description = "月度配件库存管理指标完成情况报表")
@TableName("as_month_fittings_inventory_report")
public class AsMonthFittingsInventoryReport extends BaseEntity {
private static final long serialVersionUID = 1L;
@ApiModelProperty("生成年月(yyyy-MM)")
private String createDate; // 生成年月(yyyy-MM)
@ApiModelProperty("事业部sid")
private String busOrgSid; // 事业部sid
@ApiModelProperty("事业部名称")
private String busOrgName; // 事业部名称
@ApiModelProperty("分公司sid")
private String createOrgSid; // 分公司sid
@ApiModelProperty("分公司名称")
private String createOrgName; // 分公司名称
@ApiModelProperty("部门(服务站)sid")
private String useOrgSid; // 部门(服务站)sid
@ApiModelProperty("部门(服务站)")
private String useOrgName; // 部门(服务站)
@ApiModelProperty("品牌sid")
private String brandSid; // 品牌sid
@ApiModelProperty("品牌名")
private String brandName; // 品牌名
@ApiModelProperty("品名(区域)")
private String zoneName; // 品名(区域)
@ApiModelProperty("项目(仓库)")
private String houseName; // 项目(仓库)
@ApiModelProperty("在修车辆")
private BigDecimal repairVehAmount; // 在修车辆
@ApiModelProperty("品种(个)-库存总计")
private BigDecimal fittingsVarietyTotal; // 品种(个)-库存总计
@ApiModelProperty("金额(元)-库存总计")
private BigDecimal fittingsAmountTotal; // 金额(元)-库存总计
@ApiModelProperty("品种(个)-库龄1-60天")
private BigDecimal fittingsVarietyOne; // 品种(个)-库龄1-60天
@ApiModelProperty("金额(元)-库龄1-60天")
private BigDecimal fittingsAmountOne; // 金额(元)-库龄1-60天
@ApiModelProperty("占比-库龄1-60天")
private BigDecimal fittingsPercentOne; // 占比-库龄1-60天
@ApiModelProperty("品种(个)-库龄61-90天")
private BigDecimal fittingsVarietyTwo; // 品种(个)-库龄61-90天
@ApiModelProperty("金额(元)-库龄61-90天")
private BigDecimal fittingsAmountTwo; // 金额(元)-库龄61-90天
@ApiModelProperty("占比-库龄61-90天")
private BigDecimal fittingsPercentTwo; // 占比-库龄61-90天
@ApiModelProperty("品种(个)-库龄91-180天")
private BigDecimal fittingsVarietyThree; // 品种(个)-库龄91-180天
@ApiModelProperty("金额(元)-库龄91-180天")
private BigDecimal fittingsAmountThree; // 金额(元)-库龄91-180天
@ApiModelProperty("占比-库龄91-180天")
private BigDecimal fittingsPercentThree; // 占比-库龄91-180天
@ApiModelProperty("品种(个)-库龄150-180天")
private BigDecimal fittingsVarietyFour; // 品种(个)-库龄150-180天
@ApiModelProperty("金额(元)-库龄150-180天")
private BigDecimal fittingsAmountFour; // 金额(元)-库龄150-180天
@ApiModelProperty("占比-库龄150-180天")
private BigDecimal fittingsPercentFour; // 占比-库龄150-180天
@ApiModelProperty("品种(个)-库龄181-270天")
private BigDecimal fittingsVarietyFive; // 品种(个)-库龄181-270天
@ApiModelProperty("金额(元)-库龄181-270天")
private BigDecimal fittingsAmountFive; // 金额(元)-库龄181-270天
@ApiModelProperty("占比-库龄181-270天")
private BigDecimal fittingsPercentFive; // 占比-库龄181-270天
@ApiModelProperty("品种(个)-库龄240-270天")
private BigDecimal fittingsVarietySix; // 品种(个)-库龄240-270天
@ApiModelProperty("金额(元)-库龄240-270天")
private BigDecimal fittingsAmountSix; // 金额(元)-库龄240-270天
@ApiModelProperty("占比-库龄240-270天")
private BigDecimal fittingsPercentSix; // 占比-库龄240-270天
@ApiModelProperty("品种(个)-库龄271-360天")
private BigDecimal fittingsVarietySeven; // 品种(个)-库龄271-360天
@ApiModelProperty("金额(元)-库龄271-360天")
private BigDecimal fittingsAmountSeven; // 金额(元)-库龄271-360天
@ApiModelProperty("占比-库龄271-360天")
private BigDecimal fittingsPercentSeven; // 占比-库龄271-360天
@ApiModelProperty("品种(个)-库龄330-360天")
private BigDecimal fittingsVarietyEight; // 品种(个)-库龄330-360天
@ApiModelProperty("金额(元)-库龄330-360天")
private BigDecimal fittingsAmountEight; // 金额(元)-库龄330-360天
@ApiModelProperty("占比-库龄330-360天")
private BigDecimal fittingsPercentEight; // 占比-库龄330-360天
@ApiModelProperty("品种(个)-库龄361-720天")
private BigDecimal fittingsVarietyNine; // 品种(个)-库龄361-720天
@ApiModelProperty("金额(元)-库龄361-720天")
private BigDecimal fittingsAmountNine; // 金额(元)-库龄361-720天
@ApiModelProperty("占比-库龄361-720天")
private BigDecimal fittingsPercentNine; // 占比-库龄361-720天
@ApiModelProperty("品种(个)-库龄720天以上")
private BigDecimal fittingsVarietyTen; // 品种(个)-库龄720天以上
@ApiModelProperty("金额(元)-库龄720天以上")
private BigDecimal fittingsAmountTen; // 金额(元)-库龄720天以上
@ApiModelProperty("占比-库龄720天以上")
private BigDecimal fittingsPercentTen; // 占比-库龄720天以上
@ApiModelProperty("当月出库配件成本-金额")
private BigDecimal fittingsOutAmount; // 当月出库配件成本-金额
@ApiModelProperty("当月出库配件成本-占比")
private BigDecimal fittingsOutPercent; // 当月出库配件成本-占比
@ApiModelProperty("当月入库配件成本-金额")
private BigDecimal fittingsInAmount; // 当月入库配件成本-金额
@ApiModelProperty("当月入库配件成本-占比")
private BigDecimal fittingsInPercent; // 当月入库配件成本-占比
}

74
anrui-reportcenter/anrui-reportcenter-api/src/main/java/com/yxt/anrui/reportcenter/api/asmonthfittingsinventoryreport/AsMonthFittingsInventoryReportFeign.java

@ -0,0 +1,74 @@
/*********************************************************
*********************************************************
******************** *******************
************* ************
******* _oo0oo_ *******
*** o8888888o ***
* 88" . "88 *
* (| -_- |) *
* 0\ = /0 *
* ___/`---'\___ *
* .' \\| |// '. *
* / \\||| : |||// \ *
* / _||||| -:- |||||- \ *
* | | \\\ - /// | | *
* | \_| ''\---/'' |_/ | *
* \ .-\__ '-' ___/-. / *
* ___'. .' /--.--\ `. .'___ *
* ."" '< `.___\_<|>_/___.' >' "". *
* | | : `- \`.;`\ _ /`;.`/ - ` : | | *
* \ \ `_. \_ __\ /__ _/ .-` / / *
* =====`-.____`.___ \_____/___.-`___.-'===== *
* `=---=' *
* ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ *
*********__佛祖保佑__永无BUG__验收通过__钞票多多__*********
*********************************************************/
package com.yxt.anrui.reportcenter.api.asmonthfittingsinventoryreport;
import com.yxt.common.core.query.PagerQuery;
import com.yxt.common.core.result.ResultBean;
import com.yxt.common.core.vo.PagerVo;
import io.swagger.annotations.Api;
import io.swagger.annotations.ApiOperation;
import org.springframework.cloud.openfeign.FeignClient;
import org.springframework.web.bind.annotation.*;
import java.util.List;
/**
* Project: baobiao(baobiao) <br/>
* File: AsMonthFittingsInventoryReportFeign.java <br/>
* Class: com.yxt.anrui.reportcenter.api.asmonthfittingsinventoryreport.AsMonthFittingsInventoryReportFeign <br/>
* Description: 月度配件库存管理指标完成情况报表. <br/>
* Copyright: Copyright (c) 2011 <br/>
* Company: https://gitee.com/liuzp315 <br/>
* Makedate: 2025-03-05 14:43:41 <br/>
*
* @author liupopo
* @version 1.0
* @since 1.0
*/
@Api(tags = "月度配件库存管理指标完成情况报表")
@FeignClient(
contextId = "baobiao-AsMonthFittingsInventoryReport",
name = "baobiao",
path = "v1/MonthFittingsReport",
fallback = AsMonthFittingsInventoryReportFeignFallback.class)
public interface AsMonthFittingsInventoryReportFeign {
@ApiOperation("月度配件库存管理指标完成情况列表")
@PostMapping("/monthFittingsList")
@ResponseBody
public ResultBean<PagerVo<MonthFittingsReportListVo>> monthFittingsList(@RequestBody PagerQuery<MonthFittingsReportListQuery> pq);
@ApiOperation("月度配件库存管理指标完成情况列表明细")
@PostMapping("/monthFittingsListDetails")
@ResponseBody
public ResultBean<List<AsMonthFittingsInventoryReportVo>> monthFittingsListDetails(@RequestParam("createDate") String createDate,
@RequestParam("useOrgSid") String useOrgSid
);
}

64
anrui-reportcenter/anrui-reportcenter-api/src/main/java/com/yxt/anrui/reportcenter/api/asmonthfittingsinventoryreport/AsMonthFittingsInventoryReportFeignFallback.java

@ -0,0 +1,64 @@
/*********************************************************
*********************************************************
******************** *******************
************* ************
******* _oo0oo_ *******
*** o8888888o ***
* 88" . "88 *
* (| -_- |) *
* 0\ = /0 *
* ___/`---'\___ *
* .' \\| |// '. *
* / \\||| : |||// \ *
* / _||||| -:- |||||- \ *
* | | \\\ - /// | | *
* | \_| ''\---/'' |_/ | *
* \ .-\__ '-' ___/-. / *
* ___'. .' /--.--\ `. .'___ *
* ."" '< `.___\_<|>_/___.' >' "". *
* | | : `- \`.;`\ _ /`;.`/ - ` : | | *
* \ \ `_. \_ __\ /__ _/ .-` / / *
* =====`-.____`.___ \_____/___.-`___.-'===== *
* `=---=' *
* ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ *
*********__佛祖保佑__永无BUG__验收通过__钞票多多__*********
*********************************************************/
package com.yxt.anrui.reportcenter.api.asmonthfittingsinventoryreport;
import com.yxt.common.core.query.PagerQuery;
import com.yxt.common.core.result.ResultBean;
import com.yxt.common.core.vo.PagerVo;
import org.springframework.stereotype.Component;
import java.util.List;
/**
* Project: baobiao(baobiao) <br/>
* File: AsMonthFittingsInventoryReportFeignFallback.java <br/>
* Class: com.yxt.anrui.reportcenter.api.asmonthfittingsinventoryreport.AsMonthFittingsInventoryReportFeignFallback <br/>
* Description: 月度配件库存管理指标完成情况报表. <br/>
* Copyright: Copyright (c) 2011 <br/>
* Company: https://gitee.com/liuzp315 <br/>
* Makedate: 2025-03-05 14:43:41 <br/>
*
* @author liupopo
* @version 1.0
* @since 1.0
*/
@Component
public class AsMonthFittingsInventoryReportFeignFallback implements AsMonthFittingsInventoryReportFeign {
@Override
public ResultBean<PagerVo<MonthFittingsReportListVo>> monthFittingsList(PagerQuery<MonthFittingsReportListQuery> pq) {
return null;
}
@Override
public ResultBean<List<AsMonthFittingsInventoryReportVo>> monthFittingsListDetails(String createDate, String useOrgSid) {
return null;
}
}

136
anrui-reportcenter/anrui-reportcenter-api/src/main/java/com/yxt/anrui/reportcenter/api/asmonthfittingsinventoryreport/AsMonthFittingsInventoryReportVo.java

@ -0,0 +1,136 @@
/*********************************************************
*********************************************************
******************** *******************
************* ************
******* _oo0oo_ *******
*** o8888888o ***
* 88" . "88 *
* (| -_- |) *
* 0\ = /0 *
* ___/`---'\___ *
* .' \\| |// '. *
* / \\||| : |||// \ *
* / _||||| -:- |||||- \ *
* | | \\\ - /// | | *
* | \_| ''\---/'' |_/ | *
* \ .-\__ '-' ___/-. / *
* ___'. .' /--.--\ `. .'___ *
* ."" '< `.___\_<|>_/___.' >' "". *
* | | : `- \`.;`\ _ /`;.`/ - ` : | | *
* \ \ `_. \_ __\ /__ _/ .-` / / *
* =====`-.____`.___ \_____/___.-`___.-'===== *
* `=---=' *
* ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ *
*********__佛祖保佑__永无BUG__验收通过__钞票多多__*********
*********************************************************/
package com.yxt.anrui.reportcenter.api.asmonthfittingsinventoryreport;
import com.yxt.common.core.vo.Vo;
import io.swagger.annotations.ApiModel;
import io.swagger.annotations.ApiModelProperty;
import lombok.Data;
import java.math.BigDecimal;
/**
* Project: baobiao(baobiao) <br/>
* File: AsMonthFittingsInventoryReportVo.java <br/>
* Class: com.yxt.anrui.reportcenter.api.asmonthfittingsinventoryreport.AsMonthFittingsInventoryReportVo <br/>
* Description: 月度配件库存管理指标完成情况报表 视图数据对象. <br/>
* Copyright: Copyright (c) 2011 <br/>
* Company: https://gitee.com/liuzp315 <br/>
* Makedate: 2025-03-05 14:43:41 <br/>
*
* @author liupopo
* @version 1.0
* @since 1.0
*/
@Data
@ApiModel(value = "月度配件库存管理指标完成情况报表 视图数据对象", description = "月度配件库存管理指标完成情况报表 视图数据对象")
public class AsMonthFittingsInventoryReportVo implements Vo {
@ApiModelProperty("生成年月(yyyy-MM)")
private String createDate; // 生成年月(yyyy-MM)
@ApiModelProperty("品牌名")
private String brandName; // 品牌名
@ApiModelProperty("品名(区域)")
private String zoneName; // 品名(区域)
@ApiModelProperty("项目(仓库)")
private String houseName; // 项目(仓库)
@ApiModelProperty("在修车辆")
private String repairVehAmount; // 在修车辆
@ApiModelProperty("品种(个)-库存总计")
private String fittingsVarietyTotal; // 品种(个)-库存总计
@ApiModelProperty("金额(元)-库存总计")
private String fittingsAmountTotal; // 金额(元)-库存总计
@ApiModelProperty("品种(个)-库龄1-60天")
private String fittingsVarietyOne; // 品种(个)-库龄1-60天
@ApiModelProperty("金额(元)-库龄1-60天")
private String fittingsAmountOne; // 金额(元)-库龄1-60天
@ApiModelProperty("占比-库龄1-60天")
private String fittingsPercentOne; // 占比-库龄1-60天
@ApiModelProperty("品种(个)-库龄61-90天")
private String fittingsVarietyTwo; // 品种(个)-库龄61-90天
@ApiModelProperty("金额(元)-库龄61-90天")
private String fittingsAmountTwo; // 金额(元)-库龄61-90天
@ApiModelProperty("占比-库龄61-90天")
private String fittingsPercentTwo; // 占比-库龄61-90天
@ApiModelProperty("品种(个)-库龄91-180天")
private String fittingsVarietyThree; // 品种(个)-库龄91-180天
@ApiModelProperty("金额(元)-库龄91-180天")
private String fittingsAmountThree; // 金额(元)-库龄91-180天
@ApiModelProperty("占比-库龄91-180天")
private String fittingsPercentThree; // 占比-库龄91-180天
@ApiModelProperty("品种(个)-库龄150-180天")
private String fittingsVarietyFour; // 品种(个)-库龄150-180天
@ApiModelProperty("金额(元)-库龄150-180天")
private String fittingsAmountFour; // 金额(元)-库龄150-180天
@ApiModelProperty("占比-库龄150-180天")
private String fittingsPercentFour; // 占比-库龄150-180天
@ApiModelProperty("品种(个)-库龄181-270天")
private String fittingsVarietyFive; // 品种(个)-库龄181-270天
@ApiModelProperty("金额(元)-库龄181-270天")
private String fittingsAmountFive; // 金额(元)-库龄181-270天
@ApiModelProperty("占比-库龄181-270天")
private String fittingsPercentFive; // 占比-库龄181-270天
@ApiModelProperty("品种(个)-库龄240-270天")
private String fittingsVarietySix; // 品种(个)-库龄240-270天
@ApiModelProperty("金额(元)-库龄240-270天")
private String fittingsAmountSix; // 金额(元)-库龄240-270天
@ApiModelProperty("占比-库龄240-270天")
private String fittingsPercentSix; // 占比-库龄240-270天
@ApiModelProperty("品种(个)-库龄271-360天")
private String fittingsVarietySeven; // 品种(个)-库龄271-360天
@ApiModelProperty("金额(元)-库龄271-360天")
private String fittingsAmountSeven; // 金额(元)-库龄271-360天
@ApiModelProperty("占比-库龄271-360天")
private String fittingsPercentSeven; // 占比-库龄271-360天
@ApiModelProperty("品种(个)-库龄330-360天")
private String fittingsVarietyEight; // 品种(个)-库龄330-360天
@ApiModelProperty("金额(元)-库龄330-360天")
private String fittingsAmountEight; // 金额(元)-库龄330-360天
@ApiModelProperty("占比-库龄330-360天")
private String fittingsPercentEight; // 占比-库龄330-360天
@ApiModelProperty("品种(个)-库龄361-720天")
private String fittingsVarietyNine; // 品种(个)-库龄361-720天
@ApiModelProperty("金额(元)-库龄361-720天")
private String fittingsAmountNine; // 金额(元)-库龄361-720天
@ApiModelProperty("占比-库龄361-720天")
private String fittingsPercentNine; // 占比-库龄361-720天
@ApiModelProperty("品种(个)-库龄720天以上")
private String fittingsVarietyTen; // 品种(个)-库龄720天以上
@ApiModelProperty("金额(元)-库龄720天以上")
private String fittingsAmountTen; // 金额(元)-库龄720天以上
@ApiModelProperty("占比-库龄720天以上")
private String fittingsPercentTen; // 占比-库龄720天以上
@ApiModelProperty("当月出库配件成本-金额")
private String fittingsOutAmount; // 当月出库配件成本-金额
@ApiModelProperty("当月出库配件成本-占比")
private String fittingsOutPercent; // 当月出库配件成本-占比
@ApiModelProperty("当月入库配件成本-金额")
private String fittingsInAmount; // 当月入库配件成本-金额
@ApiModelProperty("当月入库配件成本-占比")
private String fittingsInPercent; // 当月入库配件成本-占比
}

14
anrui-reportcenter/anrui-reportcenter-api/src/main/java/com/yxt/anrui/reportcenter/api/asmonthfittingsinventoryreport/MonthFittingsReportListQuery.java

@ -0,0 +1,14 @@
package com.yxt.anrui.reportcenter.api.asmonthfittingsinventoryreport;
import com.yxt.common.core.query.Query;
import lombok.Data;
@Data
public class MonthFittingsReportListQuery implements Query {
private String startDate;
private String endDate;
private String useOrgName;
}

12
anrui-reportcenter/anrui-reportcenter-api/src/main/java/com/yxt/anrui/reportcenter/api/asmonthfittingsinventoryreport/MonthFittingsReportListVo.java

@ -0,0 +1,12 @@
package com.yxt.anrui.reportcenter.api.asmonthfittingsinventoryreport;
import com.yxt.common.core.vo.Vo;
import lombok.Data;
@Data
public class MonthFittingsReportListVo implements Vo {
private String createDate;
private String useOrgName;
private String useOrgSid;
}

71
anrui-reportcenter/anrui-reportcenter-biz/src/main/java/com/yxt/anrui/reportcenter/biz/asmonthfittingsinventoryreport/AsMonthFittingsInventoryReportMapper.java

@ -0,0 +1,71 @@
/*********************************************************
*********************************************************
******************** *******************
************* ************
******* _oo0oo_ *******
*** o8888888o ***
* 88" . "88 *
* (| -_- |) *
* 0\ = /0 *
* ___/`---'\___ *
* .' \\| |// '. *
* / \\||| : |||// \ *
* / _||||| -:- |||||- \ *
* | | \\\ - /// | | *
* | \_| ''\---/'' |_/ | *
* \ .-\__ '-' ___/-. / *
* ___'. .' /--.--\ `. .'___ *
* ."" '< `.___\_<|>_/___.' >' "". *
* | | : `- \`.;`\ _ /`;.`/ - ` : | | *
* \ \ `_. \_ __\ /__ _/ .-` / / *
* =====`-.____`.___ \_____/___.-`___.-'===== *
* `=---=' *
* ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ *
*********__佛祖保佑__永无BUG__验收通过__钞票多多__*********
*********************************************************/
package com.yxt.anrui.reportcenter.biz.asmonthfittingsinventoryreport;
import com.baomidou.mybatisplus.core.conditions.Wrapper;
import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
import com.baomidou.mybatisplus.core.metadata.IPage;
import com.baomidou.mybatisplus.core.mapper.BaseMapper;
import com.baomidou.mybatisplus.core.toolkit.Constants;
import com.yxt.anrui.reportcenter.api.asmonthfittingsinventoryreport.MonthFittingsReportListVo;
import org.apache.ibatis.annotations.Mapper;
import org.apache.ibatis.annotations.Param;
import org.apache.ibatis.annotations.Select;
import com.yxt.anrui.reportcenter.api.asmonthfittingsinventoryreport.AsMonthFittingsInventoryReport;
import com.yxt.anrui.reportcenter.api.asmonthfittingsinventoryreport.AsMonthFittingsInventoryReportVo;
import java.util.List;
/**
* Project: baobiao(baobiao) <br/>
* File: AsMonthFittingsInventoryReportMapper.java <br/>
* Class: com.yxt.anrui.reportcenter.biz.asmonthfittingsinventoryreport.AsMonthFittingsInventoryReportMapper <br/>
* Description: 月度配件库存管理指标完成情况报表. <br/>
* Copyright: Copyright (c) 2011 <br/>
* Company: https://gitee.com/liuzp315 <br/>
* Makedate: 2025-03-05 14:43:41 <br/>
*
* @author liupopo
* @version 1.0
* @since 1.0
*/
@Mapper
public interface AsMonthFittingsInventoryReportMapper extends BaseMapper<AsMonthFittingsInventoryReport> {
//@Update("update as_month_fittings_inventory_report set name=#{msg} where id=#{id}")
//IPage<AsMonthFittingsInventoryReportVo> voPage(IPage<AsMonthFittingsInventoryReport> page, @Param(Constants.WRAPPER) QueryWrapper<AsMonthFittingsInventoryReport> qw);
IPage<AsMonthFittingsInventoryReportVo> selectPageVo(IPage<AsMonthFittingsInventoryReport> page, @Param(Constants.WRAPPER) Wrapper<AsMonthFittingsInventoryReport> qw);
List<AsMonthFittingsInventoryReportVo> selectListAllVo(@Param(Constants.WRAPPER) Wrapper<AsMonthFittingsInventoryReport> qw);
@Select("select * from as_month_fittings_inventory_report")
List<AsMonthFittingsInventoryReportVo> selectListVo();
IPage<MonthFittingsReportListVo> monthFittingsList(IPage<AsMonthFittingsInventoryReport> page, @Param(Constants.WRAPPER) QueryWrapper<AsMonthFittingsInventoryReport> qw);
List<AsMonthFittingsInventoryReportVo> monthFittingsListDetails(@Param(Constants.WRAPPER)QueryWrapper<AsMonthFittingsInventoryReport> qw);
}

28
anrui-reportcenter/anrui-reportcenter-biz/src/main/java/com/yxt/anrui/reportcenter/biz/asmonthfittingsinventoryreport/AsMonthFittingsInventoryReportMapper.xml

@ -0,0 +1,28 @@
<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
<mapper namespace="com.yxt.anrui.reportcenter.biz.asmonthfittingsinventoryreport.AsMonthFittingsInventoryReportMapper">
<!-- <where> ${ew.sqlSegment} </where>-->
<!-- ${ew.customSqlSegment} -->
<select id="selectPageVo" resultType="com.yxt.anrui.reportcenter.api.asmonthfittingsinventoryreport.AsMonthFittingsInventoryReportVo">
SELECT * FROM as_month_fittings_inventory_report <where> ${ew.sqlSegment} </where>
</select>
<select id="selectListAllVo" resultType="com.yxt.anrui.reportcenter.api.asmonthfittingsinventoryreport.AsMonthFittingsInventoryReportVo">
SELECT * FROM as_month_fittings_inventory_report <where> ${ew.sqlSegment} </where>
</select>
<select id="monthFittingsList"
resultType="com.yxt.anrui.reportcenter.api.asmonthfittingsinventoryreport.MonthFittingsReportListVo">
SELECT
createDate,
useOrgSid,
useOrgName
FROM
as_month_fittings_inventory_report AS mf
<where> ${ew.sqlSegment} </where>
GROUP BY mf.createDate,mf.useOrgSid
</select>
<select id="monthFittingsListDetails"
resultType="com.yxt.anrui.reportcenter.api.asmonthfittingsinventoryreport.AsMonthFittingsInventoryReportVo">
SELECT * FROM as_month_fittings_inventory_report <where> ${ew.sqlSegment} </where>
</select>
</mapper>

77
anrui-reportcenter/anrui-reportcenter-biz/src/main/java/com/yxt/anrui/reportcenter/biz/asmonthfittingsinventoryreport/AsMonthFittingsInventoryReportRest.java

@ -0,0 +1,77 @@
/*********************************************************
*********************************************************
******************** *******************
************* ************
******* _oo0oo_ *******
*** o8888888o ***
* 88" . "88 *
* (| -_- |) *
* 0\ = /0 *
* ___/`---'\___ *
* .' \\| |// '. *
* / \\||| : |||// \ *
* / _||||| -:- |||||- \ *
* | | \\\ - /// | | *
* | \_| ''\---/'' |_/ | *
* \ .-\__ '-' ___/-. / *
* ___'. .' /--.--\ `. .'___ *
* ."" '< `.___\_<|>_/___.' >' "". *
* | | : `- \`.;`\ _ /`;.`/ - ` : | | *
* \ \ `_. \_ __\ /__ _/ .-` / / *
* =====`-.____`.___ \_____/___.-`___.-'===== *
* `=---=' *
* ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ *
*********__佛祖保佑__永无BUG__验收通过__钞票多多__*********
*********************************************************/
package com.yxt.anrui.reportcenter.biz.asmonthfittingsinventoryreport;
import com.yxt.anrui.reportcenter.api.asmonthfittingsinventoryreport.AsMonthFittingsInventoryReportFeign;
import com.yxt.anrui.reportcenter.api.asmonthfittingsinventoryreport.AsMonthFittingsInventoryReportVo;
import com.yxt.anrui.reportcenter.api.asmonthfittingsinventoryreport.MonthFittingsReportListQuery;
import com.yxt.anrui.reportcenter.api.asmonthfittingsinventoryreport.MonthFittingsReportListVo;
import com.yxt.common.core.query.PagerQuery;
import com.yxt.common.core.result.ResultBean;
import com.yxt.common.core.vo.PagerVo;
import io.swagger.annotations.Api;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;
import java.util.List;
/**
* Project: baobiao(baobiao) <br/>
* File: AsMonthFittingsInventoryReportFeignFallback.java <br/>
* Class: com.yxt.anrui.reportcenter.biz.asmonthfittingsinventoryreport.AsMonthFittingsInventoryReportRest <br/>
* Description: 月度配件库存管理指标完成情况报表. <br/>
* Copyright: Copyright (c) 2011 <br/>
* Company: https://gitee.com/liuzp315 <br/>
* Makedate: 2025-03-05 14:43:41 <br/>
*
* @author liupopo
* @version 1.0
* @since 1.0
*/
@Api(tags = "月度配件库存管理指标完成情况报表")
@RestController("com.yxt.anrui.reportcenter.biz.asmonthfittingsinventoryreport.AsMonthFittingsInventoryReportRest")
@RequestMapping("v1/MonthFittingsReport")
public class AsMonthFittingsInventoryReportRest implements AsMonthFittingsInventoryReportFeign {
@Autowired
private AsMonthFittingsInventoryReportService asMonthFittingsInventoryReportService;
@Override
public ResultBean<PagerVo<MonthFittingsReportListVo>> monthFittingsList(PagerQuery<MonthFittingsReportListQuery> pq) {
ResultBean rb = ResultBean.fireFail();
PagerVo<MonthFittingsReportListVo> pv = asMonthFittingsInventoryReportService.monthFittingsList(pq);
return rb.success().setData(pv);
}
@Override
public ResultBean<List<AsMonthFittingsInventoryReportVo>> monthFittingsListDetails(String createDate, String useOrgSid) {
ResultBean rb = ResultBean.fireFail();
List<AsMonthFittingsInventoryReportVo> pv = asMonthFittingsInventoryReportService.monthFittingsListDetails(createDate,useOrgSid);
return rb.success().setData(pv);
}
}

85
anrui-reportcenter/anrui-reportcenter-biz/src/main/java/com/yxt/anrui/reportcenter/biz/asmonthfittingsinventoryreport/AsMonthFittingsInventoryReportService.java

@ -0,0 +1,85 @@
/*********************************************************
*********************************************************
******************** *******************
************* ************
******* _oo0oo_ *******
*** o8888888o ***
* 88" . "88 *
* (| -_- |) *
* 0\ = /0 *
* ___/`---'\___ *
* .' \\| |// '. *
* / \\||| : |||// \ *
* / _||||| -:- |||||- \ *
* | | \\\ - /// | | *
* | \_| ''\---/'' |_/ | *
* \ .-\__ '-' ___/-. / *
* ___'. .' /--.--\ `. .'___ *
* ."" '< `.___\_<|>_/___.' >' "". *
* | | : `- \`.;`\ _ /`;.`/ - ` : | | *
* \ \ `_. \_ __\ /__ _/ .-` / / *
* =====`-.____`.___ \_____/___.-`___.-'===== *
* `=---=' *
* ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ *
*********__佛祖保佑__永无BUG__验收通过__钞票多多__*********
*********************************************************/
package com.yxt.anrui.reportcenter.biz.asmonthfittingsinventoryreport;
import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
import com.baomidou.mybatisplus.core.metadata.IPage;
import com.yxt.anrui.reportcenter.api.asmonthfittingsinventoryreport.*;
import com.yxt.common.base.service.MybatisBaseService;
import com.yxt.common.base.utils.PagerUtil;
import com.yxt.common.core.query.PagerQuery;
import com.yxt.common.core.vo.PagerVo;
import org.apache.commons.lang3.StringUtils;
import org.springframework.stereotype.Service;
import java.util.List;
/**
* Project: baobiao(baobiao) <br/>
* File: AsMonthFittingsInventoryReportService.java <br/>
* Class: com.yxt.anrui.reportcenter.biz.asmonthfittingsinventoryreport.AsMonthFittingsInventoryReportService <br/>
* Description: 月度配件库存管理指标完成情况报表 业务逻辑. <br/>
* Copyright: Copyright (c) 2011 <br/>
* Company: https://gitee.com/liuzp315 <br/>
* Makedate: 2025-03-05 14:43:41 <br/>
*
* @author liupopo
* @version 1.0
* @since 1.0
*/
@Service
public class AsMonthFittingsInventoryReportService extends MybatisBaseService<AsMonthFittingsInventoryReportMapper, AsMonthFittingsInventoryReport> {
public PagerVo<MonthFittingsReportListVo> monthFittingsList(PagerQuery<MonthFittingsReportListQuery> pq) {
MonthFittingsReportListQuery query = pq.getParams();
QueryWrapper<AsMonthFittingsInventoryReport> qw = new QueryWrapper<>();
//生成日期开始时间
String createTimeStart = query.getStartDate();
//生成日期结束时间
String createTimeEnd = query.getEndDate();
qw.apply(StringUtils.isNotEmpty(createTimeStart), "date_format (mf.createDate,'%Y-%m') >= date_format('" + createTimeStart + "','%Y-%m')").
apply(StringUtils.isNotEmpty(createTimeEnd), "date_format (mf.createDate,'%Y-%m') <= date_format('" + createTimeEnd + "','%Y-%m')"
);
if (StringUtils.isNotBlank(query.getUseOrgName())) {
qw.like("mf.useOrgName", query.getUseOrgName());
}
IPage<AsMonthFittingsInventoryReport> page = PagerUtil.queryToPage(pq);
IPage<MonthFittingsReportListVo> pagging = baseMapper.monthFittingsList(page, qw);
PagerVo<MonthFittingsReportListVo> p = PagerUtil.pageToVo(pagging, null);
return p;
}
public List<AsMonthFittingsInventoryReportVo> monthFittingsListDetails(String createDate, String useOrgSid) {
QueryWrapper<AsMonthFittingsInventoryReport> qw = new QueryWrapper<>();
qw.eq("createDate", createDate);
qw.eq("useOrgSid", useOrgSid);
List<AsMonthFittingsInventoryReportVo> list = baseMapper.monthFittingsListDetails(qw);
return list;
}
}

1
anrui-scm/anrui-scm-biz/src/main/java/com/yxt/anrui/scm/biz/scmapplyinbound/ScmApplyInboundService.java

@ -757,6 +757,7 @@ public class ScmApplyInboundService extends MybatisBaseService<ScmApplyInboundMa
// baseVehicleDto.setFreight(Integer.parseInt(booad.getOnceFreight().add(booad.getSecondaryFreight()).toString()));
//厂家结算价
baseVehicleDto.setCostPrice(Integer.parseInt(booad.getCostPrice().toString()));
baseVehicleDto.setSettlePrice(Integer.parseInt(booad.getCostPrice().toString()));
baseVehicleDto.setPriceDate(booad.getPriceDate());
baseVehicleDto.setDepartureDate(booad.getDepartureDate());

1
anrui-scm/anrui-scm-biz/src/main/java/com/yxt/anrui/scm/biz/scmvehicleenterlibrary/ScmVehicleEnterlibraryService.java

@ -549,6 +549,7 @@ public class ScmVehicleEnterlibraryService extends MybatisBaseService<ScmVehicle
baseVehicleDto.setInsideCode(baseVehicle.getInsideCode());
if (StringUtils.isNotBlank(vehicleDetailsVo.getWitPinMoney())) {
baseVehicleDto.setCostPrice(Integer.valueOf(vehicleDetailsVo.getWitPinMoney()));
baseVehicleDto.setSettlePrice(Integer.valueOf(vehicleDetailsVo.getWitPinMoney()));
baseVehicleDto.setSalePrice(Integer.valueOf(vehicleDetailsVo.getWitPinMoney()));
baseVehicleDto.setContractPrice(Integer.valueOf(vehicleDetailsVo.getWitPinMoney()));
}

9
anrui-scm/anrui-scm-ui/src/api/cheliang/basevehicle.js

@ -209,6 +209,15 @@ export function setManDate(data) {
})
}
// 车辆台账--修改厂家结算价
export function updateSettlePrice(data) {
return request({
url: '/base/v1/basevehicle/updateSettlePrice',
method: 'post',
params: data
})
}
// 获取厂家销售通路
export function actualList(data) {
return request({

83
anrui-scm/anrui-scm-ui/src/views/cheliang/cheliangtaizhang/cheliangtaizhang.vue

@ -320,6 +320,7 @@
<el-table-column prop="manufSaleAccessName" width="140" label="厂家销售通路" align="center"/>
<el-table-column prop="contractPrice" width="180" label="厂家合同价(含运费)" align="center"/>
<el-table-column prop="costPrice" width="180" label="车辆入库价(含运费)" align="center"/>
<el-table-column prop="settlePrice" width="150" label="厂家结算价" align="center"/>
<el-table-column prop="freight" width="130" label="运费" align="center"/>
<el-table-column prop="guidedPrice" width="180" label="全款销售指导价" align="center"/>
<el-table-column prop="manufactorSettlementPrice" width="180" label="贷款销售指导价" align="center"/>
@ -499,11 +500,30 @@
<el-button size="small" @click="handleDateQuXiao"> </el-button>
</div>
</el-dialog>
<!-- 修改厂家结算价 -->
<el-dialog :visible.sync="dialogPrice" width="50%" :close-on-click-modal="false">
<el-form :model="priceMap" class="formadd">
<el-row style="border-top: 1px solid #E0E3EB">
<el-col :span="4" class="tleftb">
<span>厂家结算价</span>
</el-col>
<el-col :span="20">
<el-form-item>
<el-input @keyup.native="priceMap.settlePrice = getNumber(priceMap.settlePrice, 2)" v-model="priceMap.settlePrice" clearable placeholder=""/>
</el-form-item>
</el-col>
</el-row>
</el-form>
<div slot="footer" class="dialog-footer">
<el-button type="primary" size="small" @click="handlePriceConfirm"> </el-button>
<el-button size="small" @click="handlePriceQuXiao"> </el-button>
</div>
</el-dialog>
</div>
</template>
<script>
import { basefinbankExportExcel, deleteBySids, pagerList, selectCarTransferListAll, updateVehRemarks, setManDate } from '@/api/cheliang/basevehicle'
import { basefinbankExportExcel, deleteBySids, pagerList, selectCarTransferListAll, updateVehRemarks, setManDate, updateSettlePrice } from '@/api/cheliang/basevehicle'
import { typeValues, brandDown, getOrgSidByPath, fetchByUseOrgSid, getButtonPermissions } from '@/api/cheliang/dictcommons'
import cheliangtaizhangAdd from './cheliangtaizhangAdd'
import Pagination from '@/components/pagination'
@ -537,6 +557,7 @@ export default {
dialogVisible: false,
dialogRemarks: false,
dialogDate: false,
dialogPrice: false,
index: 0,
activeNames: ['3'],
searchxianshitit: '显示查询条件',
@ -578,6 +599,13 @@ export default {
btnKey: 'setDate',
btnLabel: '设置厂家开票日期'
},
{
type: 'primary',
size: 'small',
icon: '',
btnKey: 'setPrice',
btnLabel: '修改厂家结算价'
},
{
type: 'primary',
size: 'small',
@ -712,6 +740,10 @@ export default {
vinSids: [],
manDate: ''
},
priceMap: {
sid: '',
settlePrice: ''
},
multipleSelection: [],
dialogFormVisible: false, //
dialogFormShowVisible: false, //
@ -799,6 +831,24 @@ export default {
// })
this.setDater()
},
getNumber(val, limit) {
val = val.replace(/[^0-9.]/g, '') //
val = val.replace(/^00/, '0.') // 0
val = val.replace(/^\./g, '0.') // 0.
val = val.replace(/\.{2,}/g, '.') //
val = val.replace('.', '$#$').replace(/\./g, '').replace('$#$', '.'); //
/^0\d+/.test(val) ? val = val.slice(1) : '' // 0
const str = '^(\\d+)\\.(\\d{' + limit + '}).*$'
const reg = new RegExp(str)
if (limit === 0) {
//
val = val.replace(reg, '$1')
} else {
//
val = val.replace(reg, '$1.$2')
}
return val
},
//
indexMethod(index) {
var pagestart = (this.listQuery.current - 1) * this.listQuery.size
@ -826,6 +876,9 @@ export default {
case 'setDate':
this.setDate()
break
case 'setPrice':
this.setPrice()
break
case 'doMaiduan':
this.doMaiduan()
break
@ -1256,6 +1309,34 @@ export default {
}
this.dialogDate = false
},
setPrice() {
if (this.sids.length === 1) {
this.dialogPrice = true
this.priceMap.sid = this.sids[0]
} else {
this.$message({ showClose: true, message: '请选择一条记录进行修改', type: 'error' })
}
},
handlePriceConfirm() {
if (this.priceMap.settlePrice !== '') {
updateSettlePrice({ sid: this.priceMap.sid, settlePrice: this.priceMap.settlePrice }).then((resp) => {
if (resp.success) {
this.$message({ showClose: true, type: 'success', message: '修改成功' })
this.handlePriceQuXiao()
this.getList()
}
})
} else {
this.$message({ showClose: true, type: 'error', message: '厂家结算价不能为空' })
}
},
handlePriceQuXiao() {
this.priceMap = {
sid: '',
settlePrice: ''
}
this.dialogPrice = false
},
//
doMaiduan() {
if (this.sids.length > 0) {

5
yxt-oa/src/main/java/com/yxt/anrui/oa/api/AdGroupSystemApplyRest.java

@ -28,6 +28,7 @@ import javax.validation.Valid;
public class AdGroupSystemApplyRest {
@Autowired
AdGroupSystemApplyService adGroupSystemApplyService;
@ApiOperation("根据条件分页查询数据的列表")
@PostMapping("/listPage")
public ResultBean<PagerVo<AdGroupSystemApplyVo>> listPage(@RequestBody PagerQuery<AdGroupSystemApplyQuery> pq) {
@ -41,6 +42,7 @@ public class AdGroupSystemApplyRest {
public ResultBean<String> saveOrUpdate(@RequestBody AdGroupSystemApplyDto dto) {
return adGroupSystemApplyService.saveOrUpdateDto(dto);
}
@ApiOperation("初始化(新增或修改)")
@GetMapping({"/getInit", "/getInit/{sid}"})
public ResultBean<AdGroupSystemApplyVo> getInit(
@ -64,7 +66,7 @@ public class AdGroupSystemApplyRest {
@GetMapping("/details/{sid}")
ResultBean<AdGroupSystemApplyVo> details(@PathVariable("sid") String sid
, @RequestParam(value = "application", required = false) String application) {
return adGroupSystemApplyService.details(sid,application);
return adGroupSystemApplyService.details(sid, application);
}
@ApiOperation("提交审批流程")
@ -84,6 +86,7 @@ public class AdGroupSystemApplyRest {
public ResultBean complete(@Valid @RequestBody CompleteDto dto) {
return adGroupSystemApplyService.complete(dto);
}
@ApiOperation("获取流程操作标题")
@GetMapping("/getFlowOperateTitle")
@ResponseBody

5
yxt-oa/src/main/java/com/yxt/anrui/oa/biz/adgroupsystemapply/AdGroupSystemApply.java

@ -14,6 +14,7 @@ import lombok.Data;
@ApiModel(value = "集团制度会签审批", description = "集团制度会签审批")
@TableName("ad_group_system_apply")
public class AdGroupSystemApply extends BaseEntity {
private static final long serialVersionUID = 1378089487690059793L;
@ApiModelProperty("拟发布制度标题")
private String title;
@ApiModelProperty("起草修订说明")
@ -22,4 +23,8 @@ public class AdGroupSystemApply extends BaseEntity {
private String content;
@ApiModelProperty("基础表单sid")
private String formSid;
@ApiModelProperty("选择的会签人员")
private String approversSid;
private String approversName;
}

6
yxt-oa/src/main/java/com/yxt/anrui/oa/biz/adgroupsystemapply/AdGroupSystemApplyDto.java

@ -1,5 +1,6 @@
package com.yxt.anrui.oa.biz.adgroupsystemapply;
import com.yxt.anrui.oa.biz.oaform.FormCommon;
import com.yxt.anrui.oa.biz.oaform.OaFormDto;
import io.swagger.annotations.ApiModel;
import io.swagger.annotations.ApiModelProperty;
@ -15,6 +16,7 @@ import java.util.List;
@Data
@ApiModel(value = "集团制度会签审批 数据传输对象", description = "集团制度会签审批 数据传输对象")
public class AdGroupSystemApplyDto extends OaFormDto {
private static final long serialVersionUID = -6434832123230021480L;
private String sid;
@ApiModelProperty("拟发布制度标题")
private String title;
@ -28,4 +30,8 @@ public class AdGroupSystemApplyDto extends OaFormDto {
private List<String> files = new ArrayList<>();
@ApiModelProperty("文件")
private List<String> appes = new ArrayList<>();
@ApiModelProperty("选择的会签人员")
// private List<String> approvers = new ArrayList<>();
private List<FormCommon> approvers = new ArrayList<>();
}

107
yxt-oa/src/main/java/com/yxt/anrui/oa/biz/adgroupsystemapply/AdGroupSystemApplyService.java

@ -10,6 +10,7 @@ import com.yxt.anrui.oa.feign.file.OaFileEnum;
import com.yxt.anrui.oa.feign.flowable.flow.ProcDefEnum;
import com.yxt.anrui.oa.feign.portal.sysorganization.SysOrganizationFeign;
import com.yxt.anrui.oa.feign.portal.sysorganization.SysOrganizationVo;
import com.yxt.anrui.oa.feign.sysuser.SysUserVo;
import com.yxt.common.base.service.MybatisBaseService;
import com.yxt.common.base.utils.PagerUtil;
import com.yxt.common.core.query.PagerQuery;
@ -19,10 +20,8 @@ import org.apache.commons.lang3.StringUtils;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import java.util.Collections;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import java.util.*;
import java.util.stream.Collectors;
/**
* @author wangpengfei
@ -37,7 +36,6 @@ public class AdGroupSystemApplyService extends MybatisBaseService<AdGroupSystem
@Autowired
OaAppendixService oaAppendixService;
public PagerVo<AdGroupSystemApplyVo> listPageVo(PagerQuery<AdGroupSystemApplyQuery> pq) {
AdGroupSystemApplyQuery query = pq.getParams();
QueryWrapper<AdGroupSystemApply> qw = new QueryWrapper<>();
@ -58,6 +56,12 @@ public class AdGroupSystemApplyService extends MybatisBaseService<AdGroupSystem
String sid = dto.getSid();
List<String> files = dto.getFiles();
List<String> appes = dto.getAppes();
List<FormCommon> approvers = dto.getApprovers();
if (approvers.isEmpty()) {
return rb.setMsg("请选择会签人员");
}
List<String> approversSid = approvers.stream().map(v -> v.getId()).collect(Collectors.toList());
List<String> approversName = approvers.stream().map(v -> v.getDictValue()).collect(Collectors.toList());
if (StringUtils.isBlank(sid)) {
// 新建操作
AdGroupSystemApply entity = new AdGroupSystemApply();
@ -71,23 +75,32 @@ public class AdGroupSystemApplyService extends MybatisBaseService<AdGroupSystem
}
entity.setFormSid(resultBean.getData());
entity.setCreateBySid(dto.getCreateBySid());
String approver = String.join(",", approversSid);
entity.setApproversSid(approver);
entity.setApproversName(String.join(",", approversName));
baseMapper.insert(entity);
sid = entity.getSid();
} else {
// 更新操作
AdGroupSystemApply entity = fetchBySid(sid);
BeanUtil.copyProperties(dto, entity, "id", "sid");
String approver = String.join(",", approversSid);
entity.setApproversSid(approver);
entity.setApproversName(String.join(",", approversName));
baseMapper.updateById(entity);
}
saveFiles(sid, files, OaFileEnum.GROUPSYSTEMAPPLY.getAttachType(), "图片");
saveFiles(sid, appes, OaFileEnum.GROUPSYSTEMAPPLY.getAttachType(), "文件");
return rb.success().setData(sid);
}
public ResultBean<AdGroupSystemApplyVo> getSaveInit(String userSid, String orgPath) {
ResultBean<AdGroupSystemApplyVo> rb = ResultBean.fireFail();
AdGroupSystemApplyVo AdGroupSystemApplyVo = new AdGroupSystemApplyVo();
AdGroupSystemApplyVo.setCreateBySid(userSid);
AdGroupSystemApplyVo.setOrgSidPath(orgPath);
String roleSids = getRoleSids();
AdGroupSystemApplyVo.setRoleSids(roleSids);
return rb.success().setData(AdGroupSystemApplyVo);
}
@ -98,7 +111,6 @@ public class AdGroupSystemApplyService extends MybatisBaseService<AdGroupSystem
if (AdGroupSystemApply == null) {
return rb.setMsg("该申请不存在");
}
// hrHireApplyVo.setTestPage(hrHireApply.getTestPage());
OaForm oaForm = oaFormService.fetchBySid(sid);
AdGroupSystemApplyVo.setTaskId(oaForm.getTaskId());
AdGroupSystemApplyVo.setProcInsId(oaForm.getProcInstId());
@ -108,14 +120,48 @@ public class AdGroupSystemApplyService extends MybatisBaseService<AdGroupSystem
AdGroupSystemApplyVo.setOrgSidPath(orgSidPath);
AdGroupSystemApplyVo.setCreateBySid(oaForm.getCreateBySid());
BeanUtil.copyProperties(AdGroupSystemApply, AdGroupSystemApplyVo);
// FormCommon isFinanceObj = FormCommon.of(AdGroupSystemApply.getIsFinanceKey(), AdGroupSystemApply.getIsFinanceValue());
// AdGroupSystemApplyVo.setIsFinanceObj(isFinanceObj);
List<String> files = oaAppendixService.selectByLinkSid(sid);
List<String> files = oaAppendixService.selectByLinkSid(AdGroupSystemApplyVo.getSid(), "图片");
List<String> appes = oaAppendixService.selectByLinkSid(AdGroupSystemApplyVo.getSid(), "文件");
AdGroupSystemApplyVo.setFiles(files);
AdGroupSystemApplyVo.setAppes(appes);
AdGroupSystemApplyVo.setSid(sid);
String approverSid = AdGroupSystemApply.getApproversSid();
String approverName = AdGroupSystemApply.getApproversName();
List<String> approversSid = Arrays.asList(approverSid.split(","));
List<String> approversName = Arrays.asList(approverName.split(","));
List<FormCommon> approverss = new ArrayList<>();
for (int i = 0; i < approversSid.size(); i++) {
FormCommon formCommon = FormCommon.of(approversSid.get(i), approversName.get(i));
approverss.add(formCommon);
}
AdGroupSystemApplyVo.setApprovers(approverss);
String roleSids = getRoleSids();
AdGroupSystemApplyVo.setRoleSids(roleSids);
return rb.success().setData(AdGroupSystemApplyVo);
}
public String getRoleSids() {
/**
* b3d51a89-2fe3-4d4e-a4e8-0ea436260dab 行政中心总经理
* b2bcdfd6-ac51-408c-9c7a-7e9818d23155 财务中心总经理
* e48f6ee4-c69e-401d-b386-ae111a1ecd68 财务中心核算经理
* 33eef15f-96ea-494b-9daa-2b1c17cf1717 业务中心总经理
* 7d82ea61-7033-497d-bf8b-4d5da464db64 业务中心服务经理
* 537bea8f-75e8-430c-9a5f-3140bda41f39 风控中心总经理
* 6bccde2a-6be7-4ebc-a9ba-380ea9b161e9 风控中心副总经理
* da5b21ab-10c1-49be-b168-01e96c7f51b3 财务中心分管
*/
String roleSids = "b3d51a89-2fe3-4d4e-a4e8-0ea436260dab," +
"b2bcdfd6-ac51-408c-9c7a-7e9818d23155," +
"e48f6ee4-c69e-401d-b386-ae111a1ecd68," +
"33eef15f-96ea-494b-9daa-2b1c17cf1717," +
"7d82ea61-7033-497d-bf8b-4d5da464db64," +
"537bea8f-75e8-430c-9a5f-3140bda41f39," +
"6bccde2a-6be7-4ebc-a9ba-380ea9b161e9," +
"da5b21ab-10c1-49be-b168-01e96c7f51b3";
return roleSids;
}
// 保存文件
private void saveFiles(String sid, List<String> files, String attachType, String fileType) {
files.removeAll(Collections.singleton(null));
@ -131,19 +177,31 @@ public class AdGroupSystemApplyService extends MybatisBaseService<AdGroupSystem
*/
public ResultBean<AdGroupSystemApplyVo> details(String sid, String application) {
ResultBean<AdGroupSystemApplyVo> rb = ResultBean.fireFail();
AdGroupSystemApply adGroupSystemApply = fetchBySid(sid);
AdGroupSystemApplyVo AdGroupSystemApplyVo = baseMapper.details(sid);
if (AdGroupSystemApplyVo == null) {
if (adGroupSystemApply == null) {
return rb.setMsg("该申请不存在");
}
List<String> files = oaAppendixService.selectByLinkSid(AdGroupSystemApplyVo.getSid(), "图片");
List<String> appes= oaAppendixService.selectByLinkSid(AdGroupSystemApplyVo.getSid(), "文件");
List<String> appes = oaAppendixService.selectByLinkSid(AdGroupSystemApplyVo.getSid(), "文件");
AdGroupSystemApplyVo.setFiles(files);
AdGroupSystemApplyVo.setAppes(appes);
//基础字段赋值
BeanUtil.copyProperties(oaFormService.getDetails(sid), AdGroupSystemApplyVo);
String approverSid = adGroupSystemApply.getApproversSid();
String approverName = adGroupSystemApply.getApproversName();
List<String> approversSid = Arrays.asList(approverSid.split(","));
List<String> approversName = Arrays.asList(approverName.split(","));
List<FormCommon> approverss = new ArrayList<>();
for (int i = 0; i < approversSid.size(); i++) {
FormCommon formCommon = FormCommon.of(approversSid.get(i), approversName.get(i));
approverss.add(formCommon);
}
AdGroupSystemApplyVo.setApprovers(approverss);
return rb.success().setData(AdGroupSystemApplyVo);
}
/**
* 提交
*
@ -154,17 +212,13 @@ public class AdGroupSystemApplyService extends MybatisBaseService<AdGroupSystem
ResultBean rb = ResultBean.fireFail();
ResultBean<String> stringResultBean = saveOrUpdateDto(dto);
if (!stringResultBean.getSuccess()) {
return rb.setMsg(stringResultBean.getData());
return rb.setMsg(stringResultBean.getMsg());
}
String businessSid = stringResultBean.getData();
SubmitDto submitDto = new SubmitDto();
submitDto.setUserSid(dto.getCreateBySid());
submitDto.setBusinessSid(businessSid);
Map<String, Object> formVariables = new HashMap<>();
Map<String, Object> appMap = new HashMap<>();
// appMap.put("sid", businessSid);
formVariables = getMap(formVariables, businessSid);
submitDto.setFormVariables(formVariables);
submitDto.setProcDefId(ProcDefEnum.GROUPSYSTEMAPPLY.getProDefId());
@ -172,6 +226,7 @@ public class AdGroupSystemApplyService extends MybatisBaseService<AdGroupSystem
submitDto.setRule(OaFormRuleEnum.DIRECTLY_UNDER.getRule());
return oaFormService.submit(submitDto);
}
/**
* 驳回
*
@ -228,8 +283,10 @@ public class AdGroupSystemApplyService extends MybatisBaseService<AdGroupSystem
// 返回成功的结果和获取到的节点名称
return rb.success().setData(data);
}
public Map<String, Object> getMap(Map<String, Object> formVariables, String sid) {
Map<String, Object> appMap = new HashMap<>();
AdGroupSystemApply adGroupSystemApply = fetchBySid(sid);
appMap.put("sid", sid);
/*appMap.put("editUrl", "approval/#/pages/EditOnboradingApplyActivity?sid=" + sid);
appMap.put("detailUrl", "approval/#/pages/DetailOnboradingApplyActivity?sid=" + sid);
@ -240,8 +297,8 @@ public class AdGroupSystemApplyService extends MybatisBaseService<AdGroupSystem
appMap.put("recallUrl", "oa/v1/oaform/revokeProcess");
appMap.put("signUrl", "oa/v1/oaform/delegate");
appMap.put("transferUrl", "oa/v1/oaform/assignTask");*/
appMap.put(OaFormUrlEnum.GROUPSYSTEM_EDIT.getType(), OaFormUrlEnum.GROUPSYSTEM_EDIT.getUrl() + sid);
appMap.put(OaFormUrlEnum.GROUPSYSTEM_DETAIL.getType(), OaFormUrlEnum.GROUPSYSTEM_DETAIL.getUrl() + sid);
appMap.put(OaFormUrlEnum.GROUPSYSTEM_EDIT.getType(), OaFormUrlEnum.GROUPSYSTEM_EDIT.getUrl() + "?sid=" + sid);
appMap.put(OaFormUrlEnum.GROUPSYSTEM_DETAIL.getType(), OaFormUrlEnum.GROUPSYSTEM_DETAIL.getUrl() + "?sid=" + sid);
appMap.put(OaFormUrlEnum.GROUPSYSTEM_FLOWOPERATEURL.getType(), OaFormUrlEnum.GROUPSYSTEM_FLOWOPERATEURL.getUrl());
appMap.put(OaFormUrlEnum.GROUPSYSTEM_AGREEURL.getType(), OaFormUrlEnum.GROUPSYSTEM_AGREEURL.getUrl());
appMap.put(OaFormUrlEnum.STOPURL.getType(), OaFormUrlEnum.STOPURL.getUrl());
@ -252,10 +309,16 @@ public class AdGroupSystemApplyService extends MybatisBaseService<AdGroupSystem
formVariables.put("app", appMap);
// //根据组织查询是否是分公司
OaForm oaForm = oaFormService.fetchBySid(sid);
AdGroupSystemApply adPermissionApply = fetchBySid(sid);
SysOrganizationVo sysOrganization = sysOrganizationFeign.fetchBySid(oaForm.getUseOrgSid()).getData();
//是否是分公司
// formVariables.put("isTrue", sysOrganization.getIsDept() == 0);
//是否需要总裁审批
formVariables.put("isTrue", false);
/* List<String> approversList = new ArrayList<>();
approversList.add("08d6f4a7-31f7-498f-a639-8c9abea4df35");
approversList.add("30b33cd2-610a-4917-ba46-80b09f52c4b9");
approversList.add("d76fe91e-8080-4344-89e7-3ea22dacfb16");*/
String approver = adGroupSystemApply.getApproversSid();
List<String> approvers = Arrays.asList(approver.split(","));
formVariables.put("approvers", approvers);
return formVariables;
}

5
yxt-oa/src/main/java/com/yxt/anrui/oa/biz/adgroupsystemapply/AdGroupSystemApplyVo.java

@ -34,4 +34,9 @@ public class AdGroupSystemApplyVo extends OaFormCommonVo {
private String taskId;
@ApiModelProperty("流程实例id")
private String procInsId;
@ApiModelProperty("选择的会签人员")
private List<FormCommon> approvers = new ArrayList<>();
@ApiModelProperty("会签角色")
private String roleSids;
}

20
yxt-oa/src/main/java/com/yxt/anrui/oa/biz/oaform/OaFormService.java

@ -14,6 +14,7 @@ import com.yxt.anrui.oa.feign.flowable.flow.FlowableFeign;
import com.yxt.anrui.oa.feign.flowable.flow.UpdateFlowFieldVo;
import com.yxt.anrui.oa.feign.flowable.flow2.FlowDelegateQuery;
import com.yxt.anrui.oa.feign.flowable.flow2.FlowFeign;
import com.yxt.anrui.oa.feign.flowable.flow3.Flow3Feign;
import com.yxt.anrui.oa.feign.flowable.flowtask.FlowTaskFeign;
import com.yxt.anrui.oa.feign.flowable.flowtask.FlowTaskVo;
import com.yxt.anrui.oa.feign.flowable.flowtask.LatestTaskVo;
@ -73,6 +74,9 @@ public class OaFormService extends MybatisBaseService<OaFormMapper, OaForm> {
@Autowired
private FileUploadComponent fileUploadComponent;
@Autowired
private Flow3Feign flow3Feign;
/**
* 保存oaform表单
*
@ -85,7 +89,7 @@ public class OaFormService extends MybatisBaseService<OaFormMapper, OaForm> {
// 创建OA表单对象
OaForm oaForm = new OaForm();
// 将DTO中部分属性复制到oaForm中,忽略不需要的字段(如billNo, orgSidPath)
BeanUtil.copyProperties(dto, oaForm, "billNo", "orgSidPath");
BeanUtil.copyProperties(dto, oaForm, "billNo", "orgSidPath", "title", "remarks");
try {
String orgSidPath = dto.getOrgSidPath();
// 获取组织信息,根据orgSidPath字段调用外部服务
@ -209,10 +213,10 @@ public class OaFormService extends MybatisBaseService<OaFormMapper, OaForm> {
if (!businessVariablesResultBean.getSuccess()) {
return rb.setMsg(businessVariablesResultBean.getMsg());
}
BeanUtil.copyProperties(businessVariablesResultBean.getData(), bv, "taskDefKey", "taskId");
BeanUtil.copyProperties(businessVariablesResultBean.getData(), bv, "taskDefKey", "taskId", "comment");
bv.setInstanceId(oaForm.getProcInstId());
if (bv.getTaskId().equals(oaForm.getTaskId())) {
ResultBean<UpdateFlowFieldVo> resultBean = flowFeign.handleProsess(bv);
if (oaForm.getTaskId().contains(bv.getTaskId())) {
ResultBean<UpdateFlowFieldVo> resultBean = flow3Feign.handleProsess(bv);
if (!resultBean.getSuccess()) {
return rb.setMsg(resultBean.getMsg());
}
@ -320,7 +324,7 @@ public class OaFormService extends MybatisBaseService<OaFormMapper, OaForm> {
}
String businessTaskId = oaForm.getTaskId();
if (StringUtils.isNotBlank(businessTaskId)) {
if (businessTaskId.equals(dto.getTaskId())) {
if (businessTaskId.contains(dto.getTaskId())) {
if (StringUtils.isBlank(dto.getComment())) {
return rb.setMsg("请填写意见");
}
@ -395,7 +399,7 @@ public class OaFormService extends MybatisBaseService<OaFormMapper, OaForm> {
OaForm oaForm = fetchBySid(dto.getBusinessSid());
String businessTaskId = oaForm.getTaskId();
if (StringUtils.isNotBlank(businessTaskId)) {
if (businessTaskId.equals(dto.getTaskId())) {
if (businessTaskId.contains(dto.getTaskId())) {
FlowTaskVo flowTaskVo = new FlowTaskVo();
BeanUtil.copyProperties(dto, flowTaskVo);
flowTaskVo.setInstanceId(dto.getProcInsId());
@ -445,7 +449,7 @@ public class OaFormService extends MybatisBaseService<OaFormMapper, OaForm> {
updateFlow(oaFormFlowDto);
return rb.success().setData(resultBean.getData());
} else {
if (businessTaskId.equals(dto.getTaskId())) {
if (businessTaskId.contains(dto.getTaskId())) {
FlowTaskVo flowTaskVo = new FlowTaskVo();
BeanUtil.copyProperties(dto, flowTaskVo);
flowTaskVo.setInstanceId(dto.getProcInsId());
@ -520,7 +524,7 @@ public class OaFormService extends MybatisBaseService<OaFormMapper, OaForm> {
int r = submitBusinessData(dto, oaForm.getTaskId());
if (r == 1) {
//启动流程
ResultBean<UpdateFlowFieldVo> voResultBean = flowFeign.startProcess(bv);
ResultBean<UpdateFlowFieldVo> voResultBean = flow3Feign.startProcess(bv);
if (voResultBean.getSuccess()) {
UpdateFlowFieldVo ufVo = voResultBean.getData();
OaFormFlowDto oaFormFlowDto = new OaFormFlowDto();

4
yxt-oa/src/main/java/com/yxt/anrui/oa/biz/oaform/OaFormUrlEnum.java

@ -34,11 +34,11 @@ public enum OaFormUrlEnum {
/**
* 集团制度会签详情
*/
GROUPSYSTEM_DETAIL(InnerEnum.rejectUrl.printValue(), "approval/#/pages/oa/DetailGroupSystemApplyActivity"),
GROUPSYSTEM_DETAIL(InnerEnum.detailUrl.printValue(), "approval/#/pages/oa/DetailGroupSystemApplyActivity"),
/**
* 集团制度会签修改
*/
GROUPSYSTEM_EDIT(InnerEnum.rejectUrl.printValue(), "approval/#/pages/oa/EditGroupSystemApplyActivity"),
GROUPSYSTEM_EDIT(InnerEnum.editUrl.printValue(), "approval/#/pages/oa/EditGroupSystemApplyActivity"),
/**
* 获取操作标题接口地址

4
yxt-oa/src/main/java/com/yxt/anrui/oa/feign/flowable/flow/ProcDefEnum.java

@ -9,8 +9,8 @@ public enum ProcDefEnum {
/***************************正式流程id***********************************/
OALEAVEAPPLY("请假申请", "process_su0yph7n:1:15957504"),
OAMENDAPPLY("补卡申请", "process_9suucr96:1:16072504"),
HIHIREAPPLY("招聘需求", "process_zy0m4jrp:1:16802504"),
GROUPSYSTEMAPPLY("集团制度", "process_6lnebpbi:1:16905004"),
HIHIREAPPLY("招聘需求", "process_zy0m4jrp:2:18045004"),
GROUPSYSTEMAPPLY("集团制度", "process_6nzob224:2:18045008"),
BGYPLYAPPLY("办公用品领用", ""),
GDZCCG_GS_APPLY("公司固定资产采购申请", ""),
GDZCCG_ZX_APPLY("中心固定资产采购申请", ""),

9
yxt-oa/src/main/java/com/yxt/anrui/oa/feign/flowable/flow3/Flow3Feign.java

@ -17,8 +17,13 @@ import org.springframework.web.bind.annotation.ResponseBody;
public interface Flow3Feign {
@ApiOperation(value = "启动流程")
@PostMapping(value = "/startProcess2")
@PostMapping(value = "/startProcess")
@ResponseBody
ResultBean<UpdateFlowFieldVo> startProcess2(@RequestBody BusinessVariables dto);
ResultBean<UpdateFlowFieldVo> startProcess(@RequestBody BusinessVariables dto);
@PostMapping("/handleProsess")
@ResponseBody
@ApiOperation("办理")
public ResultBean<UpdateFlowFieldVo> handleProsess(@RequestBody BusinessVariables dto);
}
Loading…
Cancel
Save