diff --git a/ServiceSite/facade/src/main/java/com/seasky/flowportal/dto/approval/ApprovalCmd.java b/ServiceSite/facade/src/main/java/com/seasky/flowportal/dto/approval/ApprovalCmd.java index 7b94db2f9a3c64087cdfb6c716c56ffd9d2d6a0d..a12d967b6d73319c99bbb91bcee5c19722f2daa8 100644 --- a/ServiceSite/facade/src/main/java/com/seasky/flowportal/dto/approval/ApprovalCmd.java +++ b/ServiceSite/facade/src/main/java/com/seasky/flowportal/dto/approval/ApprovalCmd.java @@ -99,6 +99,10 @@ public class ApprovalCmd extends BaseCmd { @ApiModelProperty(value = "椤圭洰缂栧彿") protected String fundsProject; + public void setFundsProject(String fundsProject) { + this.fundsProject = fundsProject; + getFundsProjectCodeList(); + } @ApiModelProperty(value = "椤圭洰鍚嶇О") protected String fundsProjectName; @@ -109,6 +113,12 @@ public class ApprovalCmd extends BaseCmd { return fundsProjectCode; } + protected List<String> fundsProjectCodeList; + public List<String> getFundsProjectCodeList() { + fundsProjectCodeList = Arrays.stream(ObjectUtils.defaultIfNull(fundsProject, "").split(",")).collect(Collectors.toList()); + return fundsProjectCodeList; + } + /**椤圭洰*/ protected String fundsProjectCodeAndName; diff --git a/ServiceSite/src/main/java/com/seasky/flowportal/service/VerifyReimbursementService.java b/ServiceSite/src/main/java/com/seasky/flowportal/service/VerifyReimbursementService.java index 39a30aeceac2f5fb88bed5fba8ecf527cf437bc4..b5ca18321bb0e03abe886ad06b0feb90507e3520 100644 --- a/ServiceSite/src/main/java/com/seasky/flowportal/service/VerifyReimbursementService.java +++ b/ServiceSite/src/main/java/com/seasky/flowportal/service/VerifyReimbursementService.java @@ -70,13 +70,16 @@ public abstract class VerifyReimbursementService { public List<String> getApproverUserNodeNameList(ExpenseReimbursementCmd cmd, List<String> counterSignerList) { Long instanceId = BaseInOutUtil.verifyInstanceId(cmd); - log.info(JSONObject.toJSONString(BeanUtil.beanToMap(cmd))); + log.info(String.format("getApproverUserNodeNameList: cmd: %s", JSONObject.toJSONString(BeanUtil.beanToMap(cmd)))); + log.info(String.format("getApproverUserNodeNameList: counterSignerList: %s", JSONObject.toJSONString(counterSignerList))); List<String> nodeNameList = new ArrayList<>(); List<String> orderStatusList = orderStatusList(cmd); + log.info(String.format("getApproverUserNodeNameList: orderStatusList: %s", JSONObject.toJSONString(orderStatusList))); if (ObjectUtils.isNotEmpty(orderStatusList) && ObjectUtils.isNotEmpty(counterSignerList)) { orderStatusList.retainAll(counterSignerList); nodeNameList = orderStatusList; } + log.info(String.format("getApproverUserNodeNameList: nodeNameList: %s", JSONObject.toJSONString(nodeNameList))); return nodeNameList; } @@ -472,7 +475,7 @@ public abstract class VerifyReimbursementService { Long instanceId = BaseInOutUtil.verifyInstanceId(cmd); List<String> projectChargeList = getProjectChargeList(cmd); if (ObjectUtils.isEmpty(projectChargeList)) - throw ExceptionUtil.getException(null, "鏌ヨ椤圭洰璐熻矗浜轰俊鎭け璐�,椤圭洰缂栧彿锛�" + cmd.getFundsProject()); + return false; return projectChargeList.contains(cmd.getApplicantNo()); } @@ -484,7 +487,7 @@ public abstract class VerifyReimbursementService { Long instanceId = BaseInOutUtil.verifyInstanceId(cmd); List<String> projectChargeList = getProjectSecondChargeOrFirstChangeList(cmd); if (ObjectUtils.isEmpty(projectChargeList)) - throw ExceptionUtil.getException(null, "鏌ヨ椤圭洰璐熻矗浜轰俊鎭け璐�,椤圭洰缂栧彿锛�" + cmd.getFundsProject()); + return false; return projectChargeList.contains(cmd.getApplicantNo()); } @@ -495,7 +498,7 @@ public abstract class VerifyReimbursementService { Long instanceId = BaseInOutUtil.verifyInstanceId(cmd); List<String> projectOrgChargeList = getProjectOrgChargeList(cmd); if (ObjectUtils.isEmpty(projectOrgChargeList)) - throw ExceptionUtil.getException(null, "鏌ヨ椤圭洰閮ㄩ棬璐熻矗浜轰俊鎭け璐�,椤圭洰缂栧彿锛�" + cmd.getFundsProject()); + return false; return projectOrgChargeList.contains(cmd.getApplicantNo()); } @@ -506,7 +509,7 @@ public abstract class VerifyReimbursementService { Long instanceId = BaseInOutUtil.verifyInstanceId(cmd); List<DepartmentInfoOut> departmentInfoList = ExternalDataUtil.INSTANCE.getDepartmentInfoListByOrgFilter(instanceId, cmd.getOrganizationCode()); if (ObjectUtils.isEmpty(departmentInfoList)) - throw ExceptionUtil.getException(null, "鏌ヨ鐢宠浜烘墍鍦ㄩ儴闂ㄨ礋璐d汉淇℃伅澶辫触,閮ㄩ棬缂栧彿锛�" + cmd.getOrganizationCode()); + return false; for (DepartmentInfoOut department : departmentInfoList) { boolean applyUserEqualsApplyOrgCharge = cmd.getApplicantNo().equals(department.getChargeNo()) && cmd.getApplicantName().equals(department.getChargeName()); if (applyUserEqualsApplyOrgCharge) @@ -572,7 +575,7 @@ public abstract class VerifyReimbursementService { String payeeNo = cmd.getPayeeNoList().get(0); List<String> projectChargeList = getProjectChargeList(cmd); if (ObjectUtils.isEmpty(projectChargeList)) - throw ExceptionUtil.getException(null, "鏌ヨ椤圭洰璐熻矗浜轰俊鎭け璐�,椤圭洰缂栧彿锛�" + cmd.getFundsProject()); + return false; return projectChargeList.contains(payeeNo); } @@ -586,7 +589,7 @@ public abstract class VerifyReimbursementService { String payeeNo = cmd.getPayeeNoList().get(0); List<String> projectOrgChargeList = getProjectOrgChargeList(cmd); if (ObjectUtils.isEmpty(projectOrgChargeList)) - throw ExceptionUtil.getException(null, "鏌ヨ椤圭洰閮ㄩ棬璐熻矗浜轰俊鎭け璐�,椤圭洰缂栧彿锛�" + cmd.getFundsProject()); + return false; return projectOrgChargeList.contains(payeeNo); } @@ -597,7 +600,7 @@ public abstract class VerifyReimbursementService { Long instanceId = BaseInOutUtil.verifyInstanceId(cmd); List<String> projectChargeList = getProjectChargeList(cmd); if (ObjectUtils.isEmpty(projectChargeList)) - throw ExceptionUtil.getException(null, "鏌ヨ椤圭洰璐熻矗浜轰俊鎭け璐�,椤圭洰缂栧彿锛�" + cmd.getFundsProject()); + return false; return !Collections.disjoint(cmd.getPayeeNoList(), projectChargeList); } @@ -608,7 +611,7 @@ public abstract class VerifyReimbursementService { Long instanceId = BaseInOutUtil.verifyInstanceId(cmd); List<String> projectOrgChargeList = getProjectOrgChargeList(cmd); if (ObjectUtils.isEmpty(projectOrgChargeList)) - throw ExceptionUtil.getException(null, "鏌ヨ椤圭洰閮ㄩ棬璐熻矗浜轰俊鎭け璐�,椤圭洰缂栧彿锛�" + cmd.getFundsProject()); + return false; return !Collections.disjoint(cmd.getPayeeNoList(), projectOrgChargeList); } @@ -637,7 +640,7 @@ public abstract class VerifyReimbursementService { List<String> travelPersonNoList = ObjectUtils.isEmpty(extendFieldCmd) ? new ArrayList<>() : extendFieldCmd.getTravelPersonNoList(); List<String> projectOrgChargeList = getProjectOrgChargeList(cmd); if (ObjectUtils.isEmpty(projectOrgChargeList)) - throw ExceptionUtil.getException(null, "鏌ヨ椤圭洰閮ㄩ棬璐熻矗浜轰俊鎭け璐�,椤圭洰缂栧彿锛�" + cmd.getFundsProject()); + return false; return !Collections.disjoint(travelPersonNoList, projectOrgChargeList); } @@ -663,7 +666,7 @@ public abstract class VerifyReimbursementService { List<String> travelPersonNoList = ObjectUtils.isEmpty(extendFieldCmd) ? new ArrayList<>() : extendFieldCmd.getTravelPersonNoList(); List<String> projectChargeList = getProjectChargeList(cmd); if (ObjectUtils.isEmpty(projectChargeList)) - throw ExceptionUtil.getException(null, "鏌ヨ椤圭洰璐熻矗浜轰俊鎭け璐�,椤圭洰缂栧彿锛�" + cmd.getFundsProject()); + return false; return !Collections.disjoint(travelPersonNoList, projectChargeList); } diff --git a/ServiceSite/src/main/java/com/seasky/flowportal/service/impl/WaiMao_VerifyReimbursementServiceImpl.java b/ServiceSite/src/main/java/com/seasky/flowportal/service/impl/WaiMao_VerifyReimbursementServiceImpl.java index 054b4c6c0d60cbea9a3f08c25dfc6b486ac095ba..a28bfb1a83205034f845a430d52e4f383389d0a2 100644 --- a/ServiceSite/src/main/java/com/seasky/flowportal/service/impl/WaiMao_VerifyReimbursementServiceImpl.java +++ b/ServiceSite/src/main/java/com/seasky/flowportal/service/impl/WaiMao_VerifyReimbursementServiceImpl.java @@ -5,30 +5,28 @@ import com.alibaba.fastjson.JSONObject; import com.baomidou.mybatisplus.extension.plugins.pagination.Page; import com.seasky.core.common.Pagination; import com.seasky.core.common.ResponseCode; -import com.seasky.core.ddd.utils.MapperUtils; import com.seasky.core.util.ExceptionUtil; import com.seasky.flowportal.constant.Constant; import com.seasky.flowportal.domain.po.ExpenseReimbursementPo; import com.seasky.flowportal.dto.approval.ApprovalCmd; -import com.seasky.flowportal.dto.approverUser.ApproverUserConfigOut; import com.seasky.flowportal.dto.approverUser.ApproverUserSFPOut; import com.seasky.flowportal.dto.approverUser.ApproverUserSFPQuery; import com.seasky.flowportal.dto.expenseReimbursement.ExpenseReimbursementCmd; import com.seasky.flowportal.dto.extendData.ExtendFieldCmd; -import com.seasky.flowportal.dto.preExpenseApply.PreExpenseApplyCmd; import com.seasky.flowportal.dto.user.UserInfoOut; import com.seasky.flowportal.dto.user.UserInfoQuery; -import com.seasky.flowportal.enums.ApplyCategoryEnum; -import com.seasky.flowportal.enums.OrderStatusEnum; -import com.seasky.flowportal.enums.PreExpenseTypeEnum; -import com.seasky.flowportal.enums.ReimbursementTypeEnum; +import com.seasky.flowportal.dto.userContainingVerification.UserContainingVerificationOut; +import com.seasky.flowportal.dto.userContainingVerification.UserContainingVerificationsOut; +import com.seasky.flowportal.enums.*; +import com.seasky.flowportal.service.FlowService; import com.seasky.flowportal.service.VerifyReimbursementService; -import com.seasky.flowportal.utils.ApprovalUtil; import com.seasky.flowportal.utils.BaseConfigUtil; import com.seasky.flowportal.utils.BaseInOutUtil; import com.seasky.flowportal.utils.ExternalDataUtil; import lombok.extern.slf4j.Slf4j; import org.apache.commons.lang3.ObjectUtils; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.context.annotation.Lazy; import org.springframework.stereotype.Service; import java.math.BigDecimal; @@ -43,6 +41,10 @@ import java.util.stream.Collectors; @Slf4j public class WaiMao_VerifyReimbursementServiceImpl extends VerifyReimbursementService { + @Autowired + @Lazy + private FlowService flowService; + private static List<String> laborCostList = Arrays.asList( "鏍″浜哄憳鍔冲姟璐�", "瀛︾敓鍔冲姟璐�"); @Override public Map<String, Object> getCreateFlowBusinessData(ApprovalCmd cmd) { @@ -50,10 +52,9 @@ public class WaiMao_VerifyReimbursementServiceImpl extends VerifyReimbursementSe if (ApplyCategoryEnum.isPreApply(cmd.getOrderType())) return businessData; - if (ObjectUtils.isNotEmpty(cmd.getFundsProject())) { - boolean payeeIsProjectCharge = Boolean.TRUE.equals(super.checkPayeeEqualsProjectCharge((ExpenseReimbursementCmd) cmd) && - super.checkApplyUserEqualsProjectCharge(cmd)); - businessData.put("payeeIsProjectCharge", payeeIsProjectCharge); + if (cmd instanceof ExpenseReimbursementCmd) { + boolean needAddSigner = needAddSigner((ExpenseReimbursementCmd) cmd); + businessData.put("needAddSigner", needAddSigner); } return businessData; } @@ -62,40 +63,39 @@ public class WaiMao_VerifyReimbursementServiceImpl extends VerifyReimbursementSe public String verifyReimbursementSelectUser(ExpenseReimbursementCmd cmd) { Long instanceId = BaseInOutUtil.verifyInstanceId(cmd); log.info(JSONObject.toJSONString(BeanUtil.beanToMap(cmd))); - List<ApproverUserConfigOut> approverUserConfigOutList = getApproverUserConfigList(cmd); - if (ObjectUtils.isNotEmpty(approverUserConfigOutList)) { - for (ApproverUserConfigOut config : approverUserConfigOutList) { - checkAddSignerInfo(config, cmd); - } + List<String> approverUserNodeNameList = getApproverUserNodeNameList(cmd); + List<UserInfoOut> addSignUserList = null; + if (approverUserNodeNameList.contains(AssigneeEnum.ClaimsEndorser.getNodeName())) { + addSignUserList = cmd.getClaimsEndorser().stream().map(s -> UserInfoOut.builder().userNo(s.getClaimsEndorserNo()).userName(s.getClaimsEndorserName()).build()).collect(Collectors.toList()); + checkAddSignerInfo(addSignUserList, AssigneeEnum.ClaimsEndorser, cmd); + } + if (approverUserNodeNameList.contains(AssigneeEnum.LeaderEndorser.getNodeName())) { + addSignUserList = cmd.getLeaderEndorser().stream().map(s -> UserInfoOut.builder().userNo(s.getLeaderEndorserNo()).userName(s.getLeaderEndorserName()).build()).collect(Collectors.toList()); + checkAddSignerInfo(addSignUserList, AssigneeEnum.LeaderEndorser, cmd); } return ""; } //鏍¢獙鍔犵浜轰俊鎭� - private void checkAddSignerInfo(ApproverUserConfigOut config, ExpenseReimbursementCmd cmd) { + private void checkAddSignerInfo(List<UserInfoOut> addSignUserList, AssigneeEnum assigneeEnum, ExpenseReimbursementCmd cmd) { Long instanceId = BaseInOutUtil.verifyInstanceId(cmd); - String assigneeName = config.getName(); - WaiMao_VerifyReimbursementServiceImpl.AssigneeEnum assigneeEnum = WaiMao_VerifyReimbursementServiceImpl.AssigneeEnum.getValueByName(assigneeName); if (ObjectUtils.isEmpty(assigneeEnum)) throw ExceptionUtil.getException(null, "鍔犵浜虹被鍨嬮敊璇�"); - List<UserInfoOut> addSignUserList = ApprovalUtil.getAddSignUserList(cmd, config.getFieldName()); - if (Boolean.TRUE.equals(config.getIsRequired()) && ObjectUtils.isEmpty(addSignUserList)) { - Integer number = ObjectUtils.defaultIfNull(config.getNumber(), 1); - throw ExceptionUtil.getException(ResponseCode.SERVER_INTERNAL_TOKEN_SAVE_FAILURE, String.format("闇€瑕�%s涓�%s瀹℃壒锛岃閲嶆柊閫夋嫨鍚庢彁浜わ紒", number, assigneeName)); + String assigneeName = assigneeEnum.getName(); + if (ObjectUtils.isEmpty(addSignUserList)) { + //钖祫鏍¢獙鍔犵浜哄繀濉� 澶勭悊閿欒鐮佷负4001 + throw ExceptionUtil.getException(ResponseCode.SERVER_INTERNAL_TOKEN_SAVE_FAILURE, "闇€瑕佷竴涓�" + assigneeName + "瀹℃壒锛岃閲嶆柊閫夋嫨鍚庢彁浜わ紒"); } if (addSignUserList.stream().anyMatch(s -> ObjectUtils.isEmpty(s.getUserNo()) || ObjectUtils.isEmpty(s.getUserName()))) { //钖祫鏍¢獙鍔犵浜哄繀濉� 澶勭悊閿欒鐮佷负4001 throw ExceptionUtil.getException(ResponseCode.SERVER_INTERNAL_TOKEN_SAVE_FAILURE, assigneeName + "缂哄皯宸ュ彿鎴栧鍚嶏紒"); } - if (WaiMao_VerifyReimbursementServiceImpl.AssigneeEnum.ClaimsEndorser.equals(assigneeEnum)) { + if (AssigneeEnum.ClaimsEndorser.equals(assigneeEnum)) { List<String> userNoList = addSignUserList.stream().map(UserInfoOut::getUserNo).collect(Collectors.toList()); for (UserInfoOut user : addSignUserList) { if (user.getUserNo().equals(cmd.getApplicantNo())) continue; - List<String> projectChargeList = super.getProjectChargeList(cmd); - if (projectChargeList.contains(user.getUserNo())) - continue; userNoList.remove(user.getUserNo()); } if (ObjectUtils.isNotEmpty(userNoList)) @@ -103,7 +103,7 @@ public class WaiMao_VerifyReimbursementServiceImpl extends VerifyReimbursementSe //return PortalResponse.ok(PortalResponseCode.INCOMPLETE_INFO, "闇€瑕佷竴涓�" + assigneeName + "瀹℃壒锛岃閲嶆柊閫夋嫨鍚庢彁浜わ紒"); throw ExceptionUtil.getException(ResponseCode.SERVER_INTERNAL_TOKEN_DEL_FAILURE, "閫夋嫨鐨�" + assigneeName + "鑼冨洿涓嶆纭紝璇烽噸鏂伴€夋嫨鍚庢彁浜わ紒"); } - if (WaiMao_VerifyReimbursementServiceImpl.AssigneeEnum.LeaderEndorser.equals(assigneeEnum)) { + if (AssigneeEnum.LeaderEndorser.equals(assigneeEnum)) { List<String> userNoList = addSignUserList.stream().map(UserInfoOut::getUserNo).collect(Collectors.toList()); UserInfoQuery query = UserInfoQuery.builder().roleName(assigneeEnum.getName()).pageSize(100).build(); query.setInstanceId(instanceId); @@ -121,95 +121,37 @@ public class WaiMao_VerifyReimbursementServiceImpl extends VerifyReimbursementSe } } - //鏍¢獙鍔犵浜轰俊鎭� - private void checkAddSignerInfo(List<UserInfoOut> addSignUserList, AssigneeEnum assigneeEnum, ExpenseReimbursementCmd expenseReimbursementCmd) { - Long instanceId = BaseInOutUtil.verifyInstanceId(expenseReimbursementCmd); - if (ObjectUtils.isEmpty(assigneeEnum)) - throw ExceptionUtil.getException(null, "鍔犵浜虹被鍨嬮敊璇�"); - String assigneeName = assigneeEnum.getName(); - if (ObjectUtils.isEmpty(addSignUserList)) { - //钖祫鏍¢獙鍔犵浜哄繀濉� 澶勭悊閿欒鐮佷负4001 - throw ExceptionUtil.getException(ResponseCode.SERVER_INTERNAL_TOKEN_SAVE_FAILURE, "闇€瑕佷竴涓�" + assigneeName + "瀹℃壒锛岃閲嶆柊閫夋嫨鍚庢彁浜わ紒"); - } - if (addSignUserList.stream().anyMatch(s -> ObjectUtils.isEmpty(s.getUserNo()) || ObjectUtils.isEmpty(s.getUserName()))) { - //钖祫鏍¢獙鍔犵浜哄繀濉� 澶勭悊閿欒鐮佷负4001 - throw ExceptionUtil.getException(ResponseCode.SERVER_INTERNAL_TOKEN_SAVE_FAILURE, assigneeName + "缂哄皯宸ュ彿鎴栧鍚嶏紒"); - } - - if (AssigneeEnum.ClaimsEndorser.equals(assigneeEnum)) { - List<UserInfoOut> claimsEndorserList = ExternalDataUtil.INSTANCE.getUserListInRole(instanceId, assigneeEnum.getName()); - List<String> userNoList = addSignUserList.stream().map(UserInfoOut::getUserNo).collect(Collectors.toList()); - for (UserInfoOut user : addSignUserList) { - boolean isContainUser = ObjectUtils.isNotEmpty(claimsEndorserList) && claimsEndorserList.stream().anyMatch(subSchoolLeader -> subSchoolLeader.getUserNo().equals(user.getUserNo())); - if (isContainUser) - userNoList.remove(user.getUserNo()); + private boolean needAddSigner(ExpenseReimbursementCmd cmd) { + boolean addSigner = cmd.getFundsProjectCodeList().stream().noneMatch(code -> + ObjectUtils.isNotEmpty(code) && code.length() >= 3 && 'C' == Character.toUpperCase(code.charAt(2)) + );; + if (!addSigner) + addSigner = checkApplyUserEqualsProjectCharge(cmd); + if (!addSigner) { + if (OrderTypesEnum.isSalary(cmd.getOrderType())) { + ExtendFieldCmd extendFieldCmd = cmd.getExtendFieldCmd(); + Map<String, Boolean> payeeContainingMap = ObjectUtils.isEmpty(extendFieldCmd) ? null : extendFieldCmd.getPayeeContainingMap(); + addSigner = ObjectUtils.isNotEmpty(payeeContainingMap) && payeeContainingMap.get("0"); } - if (ObjectUtils.isNotEmpty(userNoList)) - //钖祫鏍¢獙鍔犵浜哄繀濉� 澶勭悊閿欒鐮佷负4001 - //return PortalResponse.ok(PortalResponseCode.INCOMPLETE_INFO, "闇€瑕佷竴涓�" + assigneeName + "瀹℃壒锛岃閲嶆柊閫夋嫨鍚庢彁浜わ紒"); - throw ExceptionUtil.getException(ResponseCode.SERVER_INTERNAL_TOKEN_DEL_FAILURE, "閫夋嫨鐨�" + assigneeName + "鑼冨洿涓嶆纭紝璇烽噸鏂伴€夋嫨鍚庢彁浜わ紒"); + else + addSigner = super.checkPayeeEqualsProjectCharge(cmd); } - } - - @Override - public List<ApproverUserConfigOut> getApproverUserConfigList(ExpenseReimbursementCmd cmd) { - Long instanceId = BaseInOutUtil.verifyInstanceId(cmd); - List<ApproverUserConfigOut> list = new ArrayList<>(); - String orderCode = cmd.getReimbursementCode(); - BigDecimal amount = cmd.getOrderAmount(); - ReimbursementTypeEnum reimbursementTypeEnum = ReimbursementTypeEnum.getValueByName(cmd.getOrderType()); - if (ObjectUtils.isEmpty(reimbursementTypeEnum)) - throw ExceptionUtil.getException(null, "鍗曟嵁绫诲瀷閿欒"); - //#region 鍔犵浜洪厤缃畾涔� - ApproverUserConfigOut signator = ApproverUserConfigOut.builder() - .name(WaiMao_VerifyReimbursementServiceImpl.AssigneeEnum.ClaimsEndorser.getName()) - .note("鍙栭儴闂ㄧ殑鐢ㄦ埛") - .isRequired(true) - .isMultiSelected(true) - .reimbursementCode(orderCode) - .fieldName("ClaimsEndorser") - .build(); - ApproverUserConfigOut signatorNotRequired = MapperUtils.INSTANCE.map(ApproverUserConfigOut.class, signator); - signatorNotRequired.setIsRequired(false); - ApproverUserConfigOut subSchoolLeader = ApproverUserConfigOut.builder() - .name(WaiMao_VerifyReimbursementServiceImpl.AssigneeEnum.LeaderEndorser.getName()) - .note("鍙栬鑹蹭负鈥滃垎绠℃牎棰嗗鈥濈殑鐢ㄦ埛") - .isRequired(true) - .isMultiSelected(true) - .reimbursementCode(orderCode) - .fieldName("LeaderEndorser") - .build(); - //#endregion - switch (reimbursementTypeEnum) { - case DailyReimbursement: - case TravelBusinessReimbursement: - case DailyReimbursementV5: - case TravelBusinessReimbursementV5: - case LoanApply: - case LoanApplyV5: - if (Boolean.TRUE.equals(checkApplyUserEqualsProjectCharge(cmd)) || Boolean.TRUE.equals(checkPayeeEqualsProjectCharge(cmd))) { - list.add(signator); - } - if (amount.compareTo(Constant.Amount._10W) >= 0) - list.add(subSchoolLeader); - break; - case SalaryReimbursement: - ExtendFieldCmd extendFieldCmd = cmd.getExtendFieldCmd(); - String extendedField1 = ObjectUtils.isEmpty(extendFieldCmd) ? "" : extendFieldCmd.getExtendedfield1(); - if (laborCostList.stream().anyMatch(laborCost -> laborCost.equals(extendedField1))) { - Map<String, Boolean> payeeContainingMap = ObjectUtils.isEmpty(extendFieldCmd) ? null : extendFieldCmd.getPayeeContainingMap(); - boolean payeeIsProjectCharge = ObjectUtils.isNotEmpty(payeeContainingMap) && payeeContainingMap.get("0"); - if (checkApplyUserEqualsProjectCharge(cmd) || payeeIsProjectCharge) { - list.add(signator); + if (!addSigner) { + List<String> claimsEndorserNoList = cmd.getClaimsEndorserNoList(); + if (ObjectUtils.isEmpty(claimsEndorserNoList)) { + String processInstanceId = cmd.getProcessInstanceId(); + if (ObjectUtils.isNotEmpty(processInstanceId)) { + try { + String processVariable = flowService.getProcessVariableByProcessInstanceIdAndName(processInstanceId, "model"); + JSONObject jsonObject = JSONObject.parseObject(processVariable); + claimsEndorserNoList = jsonObject.getJSONArray("claimsEndorserNoList").toJavaList(String.class); } + catch (Exception ignored) { } } - if (amount.compareTo(Constant.Amount._10W) >= 0) - list.add(subSchoolLeader); - break; - default: - break; + } + addSigner = ObjectUtils.isNotEmpty(claimsEndorserNoList); } - return list; + return addSigner; } @Override @@ -232,14 +174,18 @@ public class WaiMao_VerifyReimbursementServiceImpl extends VerifyReimbursementSe throw ExceptionUtil.getException(null, "鍗曟嵁绫诲瀷閿欒"); switch (reimbursementTypeEnum) { case DailyReimbursement: - case TravelBusinessReimbursement: case LoanApply: - case SalaryReimbursement: case DailyReimbursementV5: - case TravelBusinessReimbursementV5: case LoanApplyV5: result = dailyReimbursementProcess(cmd); break; + case TravelBusinessReimbursement: + case TravelBusinessReimbursementV5: + result = travelBusinessReimbursementProcess(cmd); + break; + case SalaryReimbursement: + result = salaryProcess(cmd); + break; default: break; } @@ -257,7 +203,55 @@ public class WaiMao_VerifyReimbursementServiceImpl extends VerifyReimbursementSe List<String> result = new ArrayList<>(); ExpenseReimbursementCmd model = (ExpenseReimbursementCmd) cmd; - result.add(AssigneeEnum.ClaimsEndorser.getNodeName()); + boolean needAddSigner = needAddSigner(model); + if (needAddSigner) + result.add(AssigneeEnum.ClaimsEndorser.getNodeName()); + + List<String> fp3List = ObjectUtils.defaultIfNull(super.getProjectFixedPropertyValueList(instanceId, cmd.getFundsProject(), 3), new ArrayList<>()); + boolean needBigAmountAudit = fp3List.contains("鏁欒偛鍙戝睍鍩洪噾浼�") ? !"鍩洪噾浼�".equals(cmd.getOrganizationName()) : !fp3List.contains("鍏氳垂"); + if (needBigAmountAudit) { + BigDecimal amount = cmd.getOrderAmount(); + if (amount.compareTo(Constant.Amount._10W) >= 0) + result.add(AssigneeEnum.LeaderEndorser.getNodeName()); + } + result.add(OrderStatusEnum.FINISH.getName()); + return result; + } + + private List<String> travelBusinessReimbursementProcess(ApprovalCmd cmd) { + Long instanceId = BaseInOutUtil.verifyInstanceId(cmd); + List<String> result = new ArrayList<>(); + ExpenseReimbursementCmd model = (ExpenseReimbursementCmd) cmd; + + boolean needAddSigner = needAddSigner(model); + if (needAddSigner) + result.add(AssigneeEnum.ClaimsEndorser.getNodeName()); + BigDecimal amount = cmd.getOrderAmount(); + if (amount.compareTo(Constant.Amount._10W) >= 0) + result.add(AssigneeEnum.LeaderEndorser.getNodeName()); + result.add(OrderStatusEnum.FINISH.getName()); + return result; + } + + private List<String> salaryProcess(ApprovalCmd cmd) { + Long instanceId = BaseInOutUtil.verifyInstanceId(cmd); + List<String> result = new ArrayList<>(); + ExpenseReimbursementCmd model = (ExpenseReimbursementCmd) cmd; + + boolean needAddSigner = needAddSigner(model); + if (needAddSigner) + result.add(AssigneeEnum.ClaimsEndorser.getNodeName()); + + List<String> fp3List = ObjectUtils.defaultIfNull(super.getProjectFixedPropertyValueList(instanceId, cmd.getFundsProject(), 3), new ArrayList<>()); + ExtendFieldCmd extendFieldCmd = cmd.getExtendFieldCmd(); + String extendedfield1 = ObjectUtils.isEmpty(extendFieldCmd) ? null : extendFieldCmd.getExtendedfield1(); + boolean needBigAmountAudit = laborCostList.contains(extendedfield1) + && (fp3List.contains("鏁欒偛鍙戝睍鍩洪噾浼�") ? !"鍩洪噾浼�".equals(cmd.getOrganizationName()) : !fp3List.contains("鍏氳垂")); + if (needBigAmountAudit) { + BigDecimal amount = cmd.getOrderAmount(); + if (amount.compareTo(Constant.Amount._10W) >= 0) + result.add(AssigneeEnum.LeaderEndorser.getNodeName()); + } result.add(OrderStatusEnum.FINISH.getName()); return result; } @@ -265,7 +259,8 @@ public class WaiMao_VerifyReimbursementServiceImpl extends VerifyReimbursementSe @Override public List<String> getApproverUserNodeNameList(ExpenseReimbursementCmd cmd) { List<String> counterSignerList = Arrays.asList( - AssigneeEnum.ClaimsEndorser.getNodeName() + AssigneeEnum.ClaimsEndorser.getNodeName(), + AssigneeEnum.LeaderEndorser.getNodeName() ); return getApproverUserNodeNameList(cmd, counterSignerList); } @@ -296,20 +291,14 @@ public class WaiMao_VerifyReimbursementServiceImpl extends VerifyReimbursementSe UserInfoQuery userInfoQuery = UserInfoQuery.builder() .userNo(qry.getUserNo()) .userName(qry.getUserName()) - .roleName(assigneeEnum.getName()) .pageIndex(qry.getPageIndex()) .pageSize(qry.getPageSize()) .userType(BaseConfigUtil.getUserType(qry.getUserType())) .build(); userInfoQuery.setInstanceId(instanceId); - Pagination<UserInfoOut> userInfoPage = ExternalDataUtil.INSTANCE.getUserInfoPage(userInfoQuery); - List<UserInfoOut> userInfoList = userInfoPage.getRecords(); - if (ObjectUtils.isNotEmpty(userInfoList)) - approverUserSFPOutList = MapperUtils.INSTANCE.mapAsList(ApproverUserSFPOut.class, userInfoList); - page.setRecords(approverUserSFPOutList); - page.setTotal(userInfoPage.getTotal()); - page.setPages(userInfoPage.getPages()); - return Pagination.fromPage(page); + if (AssigneeEnum.LeaderEndorser.equals(assigneeEnum)) + userInfoQuery.setRoleName(assigneeEnum.getName()); + return getApproverUserList(userInfoQuery); } default: break; @@ -317,13 +306,30 @@ public class WaiMao_VerifyReimbursementServiceImpl extends VerifyReimbursementSe return Pagination.fromPage(page); } + @Override + public UserContainingVerificationsOut getContainingVerificationUserList(ExpenseReimbursementCmd cmd) { + Long instanceId = BaseInOutUtil.verifyInstanceId(cmd); + UserContainingVerificationsOut userContainingVerificationsOut = new UserContainingVerificationsOut(); + List<UserContainingVerificationOut> payeeContainingVerification = new ArrayList<>(); + //椤圭洰绗竴璐熻矗浜� + List<String> projectChargeList = super.getProjectChargeList(cmd); + UserContainingVerificationOut payeeContainingProjectCharge = UserContainingVerificationOut.builder() + .userType(UserContainingTypeEnum.PROJECT_FIRST_CHARGE.getIndex()) + .userNoList(projectChargeList) + .build(); + payeeContainingVerification.add(payeeContainingProjectCharge); + + userContainingVerificationsOut.setPayeeContainingVerification(payeeContainingVerification); + return userContainingVerificationsOut; + } + /** * 鑺傜偣 */ public enum AssigneeEnum { ClaimsEndorser("鍔犵浜�", "鍔犵浜哄鎵�"), - LeaderEndorser("鍒嗙鏍¢瀵�", "鍒嗙鏍″鎵�") + LeaderEndorser("鍒嗙鏍¢瀵�", "鍒嗙鏍¢瀵煎鎵�") ; /**