From 786f439c72374adae5165b8696748316bc70fc15 Mon Sep 17 00:00:00 2001 From: "HAITIAN-TIM\\67349" <chenmin@seaskysh.com> Date: Mon, 26 Jun 2023 18:35:48 +0800 Subject: [PATCH 1/2] =?UTF-8?q?=E5=8A=A0=E7=AD=BE=E4=BA=BA=E6=A0=A1?= =?UTF-8?q?=E9=AA=8C=E6=94=B9=E9=80=A0?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../api/IApproverUserController.java | 3 + .../flowportal/api/IExternalController.java | 23 ++- .../approverUser/ApproverUserConfigOut.java | 48 ++++++ .../dto/approverUser/ApproverUserSFPOut.java | 35 +++++ .../approverUser/ApproverUserSFPQuery.java | 68 +++++++++ .../ApproverUserVerifySFPCmd.java | 60 ++++++++ .../seasky/flowportal/enums/UserTypeEnum.java | 45 ++++++ .../flowportal/pojo/ExternalPostPojo.java | 2 + .../controller/ApproverUserController.java | 12 +- .../controller/ExternalController.java | 36 +++++ .../service/ApproverUserService.java | 12 +- .../flowportal/service/FlowService.java | 7 + .../service/VerifyReimbursementService.java | 33 +++- .../service/impl/ApproverUserServiceImpl.java | 141 +++++++++++++++-- ...angWei_VerifyReimbursementServiceImpl.java | 15 ++ .../impl/ExpenseReimbursementServiceImpl.java | 1 + .../service/impl/ExternalDataServiceImpl.java | 1 + .../service/impl/FlowServiceImpl.java | 8 + ...JiaoYu_VerifyReimbursementServiceImpl.java | 14 ++ ...iaoWei_VerifyReimbursementServiceImpl.java | 143 ++++++++++++++++++ ...hengFa_VerifyReimbursementServiceImpl.java | 28 +++- ...XianDa_VerifyReimbursementServiceImpl.java | 15 ++ ...JiDian_VerifyReimbursementServiceImpl.java | 26 +++- .../seasky/flowportal/utils/ApprovalUtil.java | 11 ++ 24 files changed, 746 insertions(+), 41 deletions(-) create mode 100644 ServiceSite/facade/src/main/java/com/seasky/flowportal/dto/approverUser/ApproverUserConfigOut.java create mode 100644 ServiceSite/facade/src/main/java/com/seasky/flowportal/dto/approverUser/ApproverUserSFPOut.java create mode 100644 ServiceSite/facade/src/main/java/com/seasky/flowportal/dto/approverUser/ApproverUserSFPQuery.java create mode 100644 ServiceSite/facade/src/main/java/com/seasky/flowportal/dto/approverUser/ApproverUserVerifySFPCmd.java create mode 100644 ServiceSite/facade/src/main/java/com/seasky/flowportal/enums/UserTypeEnum.java diff --git a/ServiceSite/facade/src/main/java/com/seasky/flowportal/api/IApproverUserController.java b/ServiceSite/facade/src/main/java/com/seasky/flowportal/api/IApproverUserController.java index e47bf3c2..a52e1ab0 100644 --- a/ServiceSite/facade/src/main/java/com/seasky/flowportal/api/IApproverUserController.java +++ b/ServiceSite/facade/src/main/java/com/seasky/flowportal/api/IApproverUserController.java @@ -1,6 +1,8 @@ package com.seasky.flowportal.api; import com.seasky.flowportal.dto.approverUser.ApproverUserCmd; +import com.seasky.flowportal.dto.approverUser.ApproverUserConfigOut; +import com.seasky.flowportal.dto.approverUser.ApproverUserSFPQuery; import com.seasky.flowportal.dto.approverUser.ApproverUserQuery; import com.seasky.flowportal.dto.response.BaseResultModel; import com.seasky.flowportal.dto.user.UserInfoOut; @@ -42,4 +44,5 @@ public interface IApproverUserController { @ApiOperation("[Q]04.鏍¢獙鍔犵浜烘槸鍚︽纭�") @PostMapping("/CheckIsSelectUser") BaseResultModel<String> verifyReimbursementSelectUser(@RequestBody ExpenseReimbursementSFPCmd cmd) throws Exception; + } diff --git a/ServiceSite/facade/src/main/java/com/seasky/flowportal/api/IExternalController.java b/ServiceSite/facade/src/main/java/com/seasky/flowportal/api/IExternalController.java index 2ef08d16..efaf9c3d 100644 --- a/ServiceSite/facade/src/main/java/com/seasky/flowportal/api/IExternalController.java +++ b/ServiceSite/facade/src/main/java/com/seasky/flowportal/api/IExternalController.java @@ -1,11 +1,11 @@ package com.seasky.flowportal.api; -import com.seasky.core.common.Result; -import com.seasky.flowportal.dto.departmentInfo.DepartmentInfoOut; -import com.seasky.flowportal.dto.preApplyFinStatus.PreApplyFinStatusCmd; -import com.seasky.flowportal.dto.preExpenseApply.*; -import com.seasky.flowportal.dto.projectInfo.ProjectInfoOut; -import com.seasky.flowportal.dto.projectInfo.ProjectInfoQuery; +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.approverUser.ApproverUserVerifySFPCmd; +import com.seasky.flowportal.dto.expenseReimbursement.ExpenseReimbursementSFPCmd; +import com.seasky.flowportal.dto.preExpenseApply.PreExpenseApplyCmd; import com.seasky.flowportal.dto.response.BaseResultModel; import io.swagger.annotations.Api; import io.swagger.annotations.ApiOperation; @@ -13,8 +13,6 @@ import org.springframework.cloud.openfeign.FeignClient; import org.springframework.web.bind.annotation.PostMapping; import org.springframework.web.bind.annotation.RequestBody; import org.springframework.web.bind.annotation.RequestMapping; -import org.springframework.web.bind.annotation.RequestParam; -import org.springframework.web.multipart.MultipartFile; @FeignClient("seasky-flow-portal") @RequestMapping("External") @@ -24,4 +22,13 @@ public interface IExternalController { @ApiOperation("[C]01.淇濆瓨鍓嶇疆鐢宠鍗�") @PostMapping(path = "/SavePreApply") BaseResultModel<String> savePreApply(@RequestBody PreExpenseApplyCmd preExpenseApplyCmd); + + @ApiOperation("[Q]01.淇濆瓨鎶ラ攢鍗曚簳鑾峰彇鍔犵浜洪厤缃�") + @PostMapping("/ListApproverUserConfig") + BaseResultModel<ApproverUserConfigOut> getApproverUserConfigList(@RequestBody ExpenseReimbursementSFPCmd cmd) throws Exception; + + @ApiOperation("[Q]02.鑾峰彇鍔犵浜轰汉鍛樿寖鍥�") + @PostMapping("/ListApproverUser") + BaseResultModel<ApproverUserSFPOut> getApproverUserList(@RequestBody ApproverUserSFPQuery query) throws Exception; + } diff --git a/ServiceSite/facade/src/main/java/com/seasky/flowportal/dto/approverUser/ApproverUserConfigOut.java b/ServiceSite/facade/src/main/java/com/seasky/flowportal/dto/approverUser/ApproverUserConfigOut.java new file mode 100644 index 00000000..91e5b1a1 --- /dev/null +++ b/ServiceSite/facade/src/main/java/com/seasky/flowportal/dto/approverUser/ApproverUserConfigOut.java @@ -0,0 +1,48 @@ +package com.seasky.flowportal.dto.approverUser; + +import com.fasterxml.jackson.annotation.JsonProperty; +import io.swagger.annotations.ApiModel; +import io.swagger.annotations.ApiModelProperty; +import lombok.AllArgsConstructor; +import lombok.Builder; +import lombok.Data; +import lombok.NoArgsConstructor; +import lombok.experimental.Accessors; + +import java.io.Serializable; + +/** + * @author liyulu + * @since 2022/1/29 + */ +@ApiModel("Dto") +@Data +@Builder +@Accessors(chain = true) +@NoArgsConstructor +@AllArgsConstructor +public class ApproverUserConfigOut implements Serializable { + + @ApiModelProperty(value = "鍔犵浜哄悕绉�") + private String name; + + @ApiModelProperty(value = "鏄惁蹇呴€�") + private Boolean isRequired; + + @ApiModelProperty(value = "鏄惁鍙閫�") + private Boolean isMultiSelected; + + @ApiModelProperty(value = "澶氶€変釜鏁帮紝涓虹┖鍒欎笉闄愬埗涓暟") + private Integer number; + + @ApiModelProperty(value = "鍔犵浜鸿鏄�") + private String note; + + @ApiModelProperty(value = "鍔犵浜哄瓧娈�") + private String fieldName; + + @ApiModelProperty(value = "鎶ラ攢鍗曞彿") + @JsonProperty(value = "OrderNo") + private String reimbursementCode; + +} diff --git a/ServiceSite/facade/src/main/java/com/seasky/flowportal/dto/approverUser/ApproverUserSFPOut.java b/ServiceSite/facade/src/main/java/com/seasky/flowportal/dto/approverUser/ApproverUserSFPOut.java new file mode 100644 index 00000000..e89de177 --- /dev/null +++ b/ServiceSite/facade/src/main/java/com/seasky/flowportal/dto/approverUser/ApproverUserSFPOut.java @@ -0,0 +1,35 @@ +package com.seasky.flowportal.dto.approverUser; + +import com.fasterxml.jackson.annotation.JsonProperty; +import io.swagger.annotations.ApiModel; +import io.swagger.annotations.ApiModelProperty; +import lombok.AllArgsConstructor; +import lombok.Builder; +import lombok.Data; +import lombok.NoArgsConstructor; +import lombok.experimental.Accessors; + +import java.io.Serializable; + +/** + * @author liyulu + * @since 2022/1/29 + */ +@ApiModel("Dto") +@Data +@Builder +@Accessors(chain = true) +@NoArgsConstructor +@AllArgsConstructor +public class ApproverUserSFPOut implements Serializable { + + @ApiModelProperty(value = "鐢ㄦ埛ID", example = "123") + private String userId; + + @ApiModelProperty(value = "鐢ㄦ埛宸ュ彿") + private String userNo; + + @ApiModelProperty(value = "鐢ㄦ埛鍚嶇О") + private String userName; + +} diff --git a/ServiceSite/facade/src/main/java/com/seasky/flowportal/dto/approverUser/ApproverUserSFPQuery.java b/ServiceSite/facade/src/main/java/com/seasky/flowportal/dto/approverUser/ApproverUserSFPQuery.java new file mode 100644 index 00000000..c49ce4f8 --- /dev/null +++ b/ServiceSite/facade/src/main/java/com/seasky/flowportal/dto/approverUser/ApproverUserSFPQuery.java @@ -0,0 +1,68 @@ +package com.seasky.flowportal.dto.approverUser; + +import com.fasterxml.jackson.annotation.JsonProperty; +import com.seasky.flowportal.enums.UserTypeEnum; +import io.swagger.annotations.ApiModel; +import io.swagger.annotations.ApiModelProperty; +import lombok.AllArgsConstructor; +import lombok.Builder; +import lombok.Data; +import lombok.NoArgsConstructor; +import lombok.experimental.Accessors; +import org.apache.commons.lang3.ObjectUtils; + +import java.io.Serializable; + +/** + * @author liyulu + * @since 2022/1/29 + */ +@ApiModel("Dto") +@Data +@Builder +@Accessors(chain = true) +@NoArgsConstructor +@AllArgsConstructor +public class ApproverUserSFPQuery implements Serializable { + + @ApiModelProperty(value = "key") + @JsonProperty(value = "Key") + private String key; + + @ApiModelProperty(value = "token") + @JsonProperty(value = "Token") + private String token; + + @ApiModelProperty(value = "鍔犵浜哄悕绉�") + private String name; + + @ApiModelProperty(value = "鎶ラ攢鍗曞彿") + @JsonProperty(value = "OrderNo") + private String reimbursementCode; + + @ApiModelProperty(value = "鐢ㄦ埛宸ュ彿锛屾ā绯婃煡璇�") + private String userNo; + + @ApiModelProperty(value = "鐢ㄦ埛濮撳悕锛屾ā绯婃煡璇�") + private String userName; + + @ApiModelProperty(value = "鐢ㄦ埛绫诲瀷锛�1鏁欏伐銆�2瀛︾敓锛堜笉浼犳煡鎵€鏈夛級") + private Integer userType; + + private String userTypeStr; + + public String getUserTypeStr() { + userTypeStr = ""; + if (ObjectUtils.isEmpty(userType)) + return userTypeStr; + UserTypeEnum userTypeEnum = UserTypeEnum.getValueByIndex(userType); + userTypeStr = ObjectUtils.isNotEmpty(userTypeEnum) ? userTypeEnum.getName() : userType.toString(); + return userTypeStr; + } + + @Builder.Default + private Integer pageSize = 10; + @JsonProperty("pageNO") + @Builder.Default + private Integer pageIndex = 1; +} diff --git a/ServiceSite/facade/src/main/java/com/seasky/flowportal/dto/approverUser/ApproverUserVerifySFPCmd.java b/ServiceSite/facade/src/main/java/com/seasky/flowportal/dto/approverUser/ApproverUserVerifySFPCmd.java new file mode 100644 index 00000000..59ac52d0 --- /dev/null +++ b/ServiceSite/facade/src/main/java/com/seasky/flowportal/dto/approverUser/ApproverUserVerifySFPCmd.java @@ -0,0 +1,60 @@ +package com.seasky.flowportal.dto.approverUser; + +import com.fasterxml.jackson.annotation.JsonFormat; +import com.fasterxml.jackson.annotation.JsonProperty; +import com.seasky.flowportal.dto.extendData.BorrowerEndorserSFPCmd; +import com.seasky.flowportal.dto.extendData.ClaimsEndorserSFPCmd; +import com.seasky.flowportal.dto.extendData.LeaderEndorserSFPCmd; +import com.seasky.flowportal.dto.extendData.PayInfoSFPCmd; +import io.swagger.annotations.ApiModel; +import io.swagger.annotations.ApiModelProperty; +import lombok.AllArgsConstructor; +import lombok.Builder; +import lombok.Data; +import lombok.NoArgsConstructor; +import lombok.experimental.Accessors; +import org.springframework.format.annotation.DateTimeFormat; + +import javax.validation.constraints.NotEmpty; +import java.io.Serializable; +import java.math.BigDecimal; +import java.util.ArrayList; +import java.util.Date; +import java.util.List; + +/** + * @author liyulu + * @since 2022/1/29 + */ +@ApiModel("Dto") +@Data +@Builder +@Accessors(chain = true) +@NoArgsConstructor +@AllArgsConstructor +public class ApproverUserVerifySFPCmd implements Serializable { + + @ApiModelProperty(value = "key") + @JsonProperty(value = "Key") + private String key; + + @ApiModelProperty(value = "token") + @JsonProperty(value = "Token") + private String token; + + @ApiModelProperty(value = "鎶ラ攢鍗曞彿") + @JsonProperty(value = "OrderNo") + private String reimbursementCode; + + @ApiModelProperty(value = "鍔犵浜哄瓧娈�1") + @JsonProperty(value = "ClaimsEndorser") + private List<ClaimsEndorserSFPCmd> claimsEndorser; + + @ApiModelProperty(value = "鍔犵浜哄瓧娈�2") + @JsonProperty(value = "LeaderEndorser") + private List<LeaderEndorserSFPCmd> leaderEndorser; + + @ApiModelProperty(value = "鍔犵浜哄瓧娈�3") + @JsonProperty(value = "BorrowerEndorser") + private List<BorrowerEndorserSFPCmd> borrowerEndorser; +} diff --git a/ServiceSite/facade/src/main/java/com/seasky/flowportal/enums/UserTypeEnum.java b/ServiceSite/facade/src/main/java/com/seasky/flowportal/enums/UserTypeEnum.java new file mode 100644 index 00000000..57eb8a90 --- /dev/null +++ b/ServiceSite/facade/src/main/java/com/seasky/flowportal/enums/UserTypeEnum.java @@ -0,0 +1,45 @@ +package com.seasky.flowportal.enums; + +/** + * @author liyulu + * @since 2022/1/5 + */ +public enum UserTypeEnum { + + FACULTY("鏁欏伐", 1), + + STUDENT("瀛︾敓", 2); + + /** + * 鏋氫妇灞炴€ц鏄� + */ + private final String name; + private final int index; + + UserTypeEnum(String name, int index) { + this.name = name; + this.index = index; + } + + public String getName() { + return this.name; + } + + public int getIndex() { + return this.index; + } + + /** + * 閫氳繃key 鏌ユ壘鎻忚堪 鏂规硶 + * + * @param index + */ + public static UserTypeEnum getValueByIndex(int index) { + for (UserTypeEnum anEnum : UserTypeEnum.values()) { + if (anEnum.getIndex() == index) { + return anEnum; + } + } + return null; + } +} diff --git a/ServiceSite/facade/src/main/java/com/seasky/flowportal/pojo/ExternalPostPojo.java b/ServiceSite/facade/src/main/java/com/seasky/flowportal/pojo/ExternalPostPojo.java index 270ddb32..5be76276 100644 --- a/ServiceSite/facade/src/main/java/com/seasky/flowportal/pojo/ExternalPostPojo.java +++ b/ServiceSite/facade/src/main/java/com/seasky/flowportal/pojo/ExternalPostPojo.java @@ -32,6 +32,8 @@ public class ExternalPostPojo extends BaseDto implements Serializable { private String userName; + private String userType; + private String organizationID; private String organizationCode; diff --git a/ServiceSite/src/main/java/com/seasky/flowportal/controller/ApproverUserController.java b/ServiceSite/src/main/java/com/seasky/flowportal/controller/ApproverUserController.java index 59215996..8c90e89b 100644 --- a/ServiceSite/src/main/java/com/seasky/flowportal/controller/ApproverUserController.java +++ b/ServiceSite/src/main/java/com/seasky/flowportal/controller/ApproverUserController.java @@ -16,6 +16,7 @@ import com.seasky.flowportal.enums.PortalResponseCode; import com.seasky.flowportal.service.ApproverUserService; import com.seasky.flowportal.service.VerifyReimbursementService; import com.seasky.flowportal.service.factory.VerifyReimbursementFactory; +import com.seasky.flowportal.utils.ApprovalUtil; import lombok.SneakyThrows; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.web.bind.annotation.RestController; @@ -28,11 +29,6 @@ public class ApproverUserController implements IApproverUserController { private ApproverUserService approverUserService; @Autowired private VerifyReimbursementFactory verifyReimbursementFactory; - //@Autowired - //@Qualifier("XiNanZhengFa_VerifyReimbursementServiceImpl") //瑗垮崡鏀挎硶 - //@Qualifier("ShangLiGong_VerifyReimbursementServiceImpl") //涓婄悊宸� - //@Qualifier("XianDa_VerifyReimbursementServiceImpl") //璐よ揪 - //private VerifyReimbursementService verifyReimbursementService; @Override public BaseResultModel<String> saveApproverUser(ApproverUserCmd approverUserCmd) { @@ -58,11 +54,7 @@ public class ApproverUserController implements IApproverUserController { @Override @SneakyThrows public BaseResultModel<String> verifyReimbursementSelectUser(ExpenseReimbursementSFPCmd cmd) { - ExpenseReimbursementCmd expenseReimbursementCmd = MapperUtils.INSTANCE.map(ExpenseReimbursementCmd.class, cmd); - expenseReimbursementCmd.setExtendFieldCmd(JSONObject.parseObject(cmd.getExtendField(), ExtendFieldCmd.class)); - int length = expenseReimbursementCmd.getApplicantDepartment().indexOf('-'); - expenseReimbursementCmd.setOrganizationCode(expenseReimbursementCmd.getApplicantDepartment().substring(0, length)); - expenseReimbursementCmd.setOrganizationName(expenseReimbursementCmd.getApplicantDepartment().substring(length + 1)); + ExpenseReimbursementCmd expenseReimbursementCmd = ApprovalUtil.map(cmd); //宸ュ巶绫诲垱寤哄搴斿璞� VerifyReimbursementService verifyReimbursementService = verifyReimbursementFactory.createInstance(); return ok(PortalResponseCode.SUCCESS, verifyReimbursementService.verifyReimbursementSelectUser(expenseReimbursementCmd)); diff --git a/ServiceSite/src/main/java/com/seasky/flowportal/controller/ExternalController.java b/ServiceSite/src/main/java/com/seasky/flowportal/controller/ExternalController.java index 29d77858..5fed80bf 100644 --- a/ServiceSite/src/main/java/com/seasky/flowportal/controller/ExternalController.java +++ b/ServiceSite/src/main/java/com/seasky/flowportal/controller/ExternalController.java @@ -1,10 +1,20 @@ package com.seasky.flowportal.controller; import com.seasky.flowportal.api.IExternalController; +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.approverUser.ApproverUserVerifySFPCmd; +import com.seasky.flowportal.dto.expenseReimbursement.ExpenseReimbursementCmd; +import com.seasky.flowportal.dto.expenseReimbursement.ExpenseReimbursementSFPCmd; import com.seasky.flowportal.dto.preExpenseApply.PreExpenseApplyCmd; import com.seasky.flowportal.dto.response.BaseResultModel; import com.seasky.flowportal.enums.PortalResponseCode; +import com.seasky.flowportal.service.ApproverUserService; import com.seasky.flowportal.service.PreExpenseApplyService; +import com.seasky.flowportal.service.VerifyReimbursementService; +import com.seasky.flowportal.service.factory.VerifyReimbursementFactory; +import com.seasky.flowportal.utils.ApprovalUtil; import com.seasky.flowportal.utils.PortalUtil; import lombok.SneakyThrows; import org.springframework.beans.factory.annotation.Autowired; @@ -19,6 +29,14 @@ public class ExternalController implements IExternalController { @Lazy private PreExpenseApplyService preExpenseApplyService; + @Autowired + @Lazy + private ApproverUserService approverUserService; + + @Autowired + @Lazy + private VerifyReimbursementFactory verifyReimbursementFactory; + @Override @SneakyThrows public BaseResultModel<String> savePreApply(PreExpenseApplyCmd preExpenseApplyCmd) { @@ -26,4 +44,22 @@ public class ExternalController implements IExternalController { return ok(PortalResponseCode.SUCCESS, preExpenseApplyService.savePreExpenseApply(preExpenseApplyCmd)); } + + + @Override + @SneakyThrows + public BaseResultModel<ApproverUserConfigOut> getApproverUserConfigList(ExpenseReimbursementSFPCmd cmd) { + PortalUtil.verifyToken(cmd.getKey(), cmd.getToken()); + ExpenseReimbursementCmd expenseReimbursementCmd = ApprovalUtil.map(cmd); + return ok(PortalResponseCode.SUCCESS, approverUserService.getApproverUserConfigList(expenseReimbursementCmd)); + } + + @Override + @SneakyThrows + public BaseResultModel<ApproverUserSFPOut> getApproverUserList(ApproverUserSFPQuery query) { + PortalUtil.verifyToken(query.getKey(), query.getToken()); + return ok(PortalResponseCode.SUCCESS, approverUserService.getApproverUserList(query)); + } + + } \ No newline at end of file diff --git a/ServiceSite/src/main/java/com/seasky/flowportal/service/ApproverUserService.java b/ServiceSite/src/main/java/com/seasky/flowportal/service/ApproverUserService.java index c745c1d4..4f1e5467 100644 --- a/ServiceSite/src/main/java/com/seasky/flowportal/service/ApproverUserService.java +++ b/ServiceSite/src/main/java/com/seasky/flowportal/service/ApproverUserService.java @@ -1,10 +1,12 @@ package com.seasky.flowportal.service; import com.seasky.core.common.Pagination; -import com.seasky.flowportal.dto.approverUser.ApproverUserCmd; -import com.seasky.flowportal.dto.approverUser.ApproverUserOut; -import com.seasky.flowportal.dto.approverUser.ApproverUserQuery; +import com.seasky.flowportal.dto.approverUser.*; +import com.seasky.flowportal.dto.expenseReimbursement.ExpenseReimbursementCmd; +import com.seasky.flowportal.dto.expenseReimbursement.ExpenseReimbursementSFPCmd; +import com.seasky.flowportal.dto.response.BaseResultModel; import com.seasky.flowportal.dto.user.UserInfoOut; +import org.springframework.web.bind.annotation.RequestBody; import java.util.List; @@ -15,4 +17,8 @@ public interface ApproverUserService { Pagination<UserInfoOut> listApproverUser(ApproverUserQuery approverUserQuery); List<ApproverUserOut> listApproverUserByApplyCodeAndOrderStatus(String applyCode, String orderStatus); + + List<ApproverUserConfigOut> getApproverUserConfigList(ExpenseReimbursementCmd cmd); + + Pagination<ApproverUserSFPOut> getApproverUserList(ApproverUserSFPQuery query); } \ No newline at end of file diff --git a/ServiceSite/src/main/java/com/seasky/flowportal/service/FlowService.java b/ServiceSite/src/main/java/com/seasky/flowportal/service/FlowService.java index d22c8446..6574d8d0 100644 --- a/ServiceSite/src/main/java/com/seasky/flowportal/service/FlowService.java +++ b/ServiceSite/src/main/java/com/seasky/flowportal/service/FlowService.java @@ -202,6 +202,13 @@ public abstract class FlowService { */ public abstract ProcessDefinitionOut getProcessDefinitionInfo(String processInstanceId); + /** + * 鑾峰彇鍗曚釜娴佺▼瀹氫箟淇℃伅 + * @param processDefinitionKey + * @return + */ + public abstract ProcessDefinitionOut getProcessDefinitionInfoByKey(String processDefinitionKey); + public abstract String getProcessVariableByProcessInstanceIdAndName(String processInstanceId, String variableName); //public abstract FlowEngineEnum GetFlowEngine() { return FlowEngineEnum.MyApps; } 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 e9fa76e4..ee894b9c 100644 --- a/ServiceSite/src/main/java/com/seasky/flowportal/service/VerifyReimbursementService.java +++ b/ServiceSite/src/main/java/com/seasky/flowportal/service/VerifyReimbursementService.java @@ -1,8 +1,13 @@ package com.seasky.flowportal.service; +import com.baomidou.mybatisplus.extension.plugins.pagination.Page; import com.seasky.core.common.Pagination; +import com.seasky.core.ddd.utils.MapperUtils; import com.seasky.core.util.ExceptionUtil; import com.seasky.flowportal.dto.approval.ApprovalCmd; +import com.seasky.flowportal.dto.approverUser.ApproverUserSFPOut; +import com.seasky.flowportal.dto.approverUser.ApproverUserSFPQuery; +import com.seasky.flowportal.dto.approverUser.ApproverUserVerifySFPCmd; import com.seasky.flowportal.dto.departmentInfo.DepartmentInfoOut; import com.seasky.flowportal.dto.expenseReimbursement.ExpenseReimbursementCmd; import com.seasky.flowportal.dto.preExpenseApply.PreExpenseApplyCmd; @@ -27,13 +32,31 @@ public abstract class VerifyReimbursementService { @Autowired protected ExternalDataService externalDataService; - public String verifyReimbursementSelectUser(ExpenseReimbursementCmd expenseReimbursementCmd) { - return ""; - } + public String verifyReimbursementSelectUser(ExpenseReimbursementCmd expenseReimbursementCmd) { return ""; } + public String verifyPreExpenseApplySelectUser(PreExpenseApplyCmd preExpenseApplyCmd) { return ""; } public String verifyReimbursementFlow(ExpenseReimbursementCmd cmd) { return ""; } - - + public String getAssigneeNameByNodeName(String nodeName) { return ""; } + public List<String> getApproverUserNodeNameList(ExpenseReimbursementCmd expenseReimbursementCmd) { return new ArrayList<>(); } + public Pagination<ApproverUserSFPOut> getApproverUserList(ApproverUserSFPQuery query) { + List<ApproverUserSFPOut> approverUserSFPOutList = new ArrayList<>(); + Page page = new Page<>(query.getPageIndex(), query.getPageSize()); + UserInfoQuery userInfoQuery = UserInfoQuery.builder() + .userNo(query.getUserNo()) + .userName(query.getUserName()) + .pageIndex(query.getPageIndex()) + .pageSize(query.getPageSize()) + .userType(query.getUserTypeStr()) + .build(); + Pagination<UserInfoOut> userInfoPage = externalDataService.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); + } //鏍¢獙鎶ラ攢浜烘槸鍚︾瓑浜庨」鐩儴闂ㄨ礋璐d汉 public Boolean checkApplyUserEqualsOrgCharge(ApprovalCmd cmd) { diff --git a/ServiceSite/src/main/java/com/seasky/flowportal/service/impl/ApproverUserServiceImpl.java b/ServiceSite/src/main/java/com/seasky/flowportal/service/impl/ApproverUserServiceImpl.java index 5eae6cec..3b0d94b3 100644 --- a/ServiceSite/src/main/java/com/seasky/flowportal/service/impl/ApproverUserServiceImpl.java +++ b/ServiceSite/src/main/java/com/seasky/flowportal/service/impl/ApproverUserServiceImpl.java @@ -1,47 +1,73 @@ package com.seasky.flowportal.service.impl; +import com.alibaba.fastjson.JSON; import com.alibaba.fastjson.JSONArray; -import com.alibaba.fastjson.JSONObject; import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; import com.baomidou.mybatisplus.extension.plugins.pagination.Page; import com.seasky.core.common.Pagination; +import com.seasky.core.common.ResponseCode; +import com.seasky.core.common.Result; import com.seasky.core.ddd.utils.MapperUtils; import com.seasky.core.util.ExceptionUtil; +import com.seasky.flow.api.IRepositoryController; +import com.seasky.flow.dto.flow.FlowNode; +import com.seasky.flow.dto.processDefinition.ProcessDefinitionOut; +import com.seasky.flow.dto.repository.RepositoryQueryQry; +import com.seasky.flowportal.config.BaseConfigProperties; import com.seasky.flowportal.domain.po.ApproverUserPo; -import com.seasky.flowportal.dto.approverUser.ApproverUserCmd; -import com.seasky.flowportal.dto.approverUser.ApproverUserOut; -import com.seasky.flowportal.dto.approverUser.ApproverUserQuery; +import com.seasky.flowportal.domain.po.ExpenseReimbursementPo; +import com.seasky.flowportal.dto.approverUser.*; +import com.seasky.flowportal.dto.expenseReimbursement.ExpenseReimbursementCmd; import com.seasky.flowportal.dto.expenseReimbursement.ExpenseReimbursementOut; import com.seasky.flowportal.dto.expenseReimbursement.ExpenseReimbursementQuery; +import com.seasky.flowportal.dto.expenseReimbursement.ExpenseReimbursementSFPCmd; +import com.seasky.flowportal.dto.projectInfo.ProjectInfoOut; import com.seasky.flowportal.dto.user.UserInfoOut; +import com.seasky.flowportal.enums.ApplyCategoryEnum; +import com.seasky.flowportal.enums.OrderStatusEnum; +import com.seasky.flowportal.enums.PortalResponseCode; import com.seasky.flowportal.mapper.ApproverUserMapper; -import com.seasky.flowportal.service.ApproverUserService; -import com.seasky.flowportal.service.ExpenseReimbursementService; -import com.seasky.flowportal.service.ExternalDataService; -import com.seasky.flowportal.service.FlowService; +import com.seasky.flowportal.mapper.ExpenseReimbursementMapper; +import com.seasky.flowportal.service.*; +import com.seasky.flowportal.service.factory.VerifyReimbursementFactory; +import com.seasky.flowportal.utils.BaseConfigUtil; +import org.activiti.bpmn.model.ExtensionAttribute; 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.util.Collections; -import java.util.List; -import java.util.Objects; +import java.util.*; import java.util.stream.Collectors; +import static com.seasky.flowportal.dto.response.PortalResponse.ok; + @Service public class ApproverUserServiceImpl implements ApproverUserService { @Autowired + @Lazy private ApproverUserMapper approverUserMapper; @Autowired + @Lazy private ExternalDataService externalDataService; @Autowired + @Lazy private FlowService flowService; @Autowired + @Lazy private ExpenseReimbursementService expenseReimbursementService; + @Autowired + @Lazy + private VerifyReimbursementFactory verifyReimbursementFactory; + + @Autowired + @Lazy + private ExpenseReimbursementMapper expenseReimbursementMapper; + @Override public String saveApproverUser(ApproverUserCmd approverUserCmd) { if (ObjectUtils.isNotEmpty(approverUserCmd.getUserNo())) { @@ -109,4 +135,97 @@ public class ApproverUserServiceImpl implements ApproverUserService { List<ApproverUserPo> approverUserPoList = approverUserMapper.selectList(queryWrapper); return MapperUtils.INSTANCE.mapAsList(ApproverUserOut.class, approverUserPoList); } + + @Override + public List<ApproverUserConfigOut> getApproverUserConfigList(ExpenseReimbursementCmd cmd) { + if (ObjectUtils.isEmpty(cmd.getReimbursementCode())) + throw ExceptionUtil.getException(ResponseCode.DATA_VERIFY_EXCEPTION, "鍗曞彿涓嶈兘涓虹┖"); + QueryWrapper<ExpenseReimbursementPo> expenseReimbursementQueryWrapper = new QueryWrapper<>(); + expenseReimbursementQueryWrapper.eq("reimbursement_code", cmd.getReimbursementCode()); + expenseReimbursementQueryWrapper.eq("order_status", OrderStatusEnum.NOTAPPLY.getName()); + ExpenseReimbursementPo reimbursementPo = expenseReimbursementMapper.selectOne(expenseReimbursementQueryWrapper); + Long id = ObjectUtils.isNotEmpty(reimbursementPo) ? reimbursementPo.getId() : null; + cmd.setOrderStatus(OrderStatusEnum.NOTAPPLY.getName()); + reimbursementPo = MapperUtils.INSTANCE.map(ExpenseReimbursementPo.class, cmd); + reimbursementPo.setPayInfoJson(JSON.toJSONString(cmd.getPayInfo())); + reimbursementPo.setBackCount(0); + if (ObjectUtils.isEmpty(id)) { + expenseReimbursementMapper.insert(reimbursementPo); + } else { + reimbursementPo.setId(id); + expenseReimbursementMapper.updateById(reimbursementPo); + } + BaseConfigProperties baseConfigProperties = BaseConfigUtil.getBaseConfigProperties(); + String defKey = baseConfigProperties.getProcessDefinitionMap().get(cmd.getReimbursementType()); + if (ObjectUtils.isEmpty(defKey)) { + throw ExceptionUtil.getException(null, "鑾峰彇鍔犵浜洪厤缃け璐ワ紝鏈尮閰嶇殑娴佺▼瀹氫箟锛�" + cmd.getReimbursementType()); + } + ProcessDefinitionOut processDefinitionInfo = flowService.getProcessDefinitionInfoByKey(defKey); + List<FlowNode> approverNodeList = new ArrayList<>(); + List<FlowNode> flowNodeList = processDefinitionInfo.getFlowNodeList(); + if (ObjectUtils.isNotEmpty(flowNodeList)) + approverNodeList = flowNodeList.stream().filter(node -> + Boolean.parseBoolean(getExtensionAttributeValue(node, "isPreSelectApprover")) + ).collect(Collectors.toList()); + approverNodeList = approverNodeList.stream().collect(Collectors.collectingAndThen(Collectors.toCollection(() + -> new TreeSet<>(Comparator.comparing(FlowNode:: getName))), ArrayList::new)); + + List<ApproverUserConfigOut> approverUserConfigOutList = new ArrayList<>(); + try { + //宸ュ巶绫诲垱寤哄搴斿璞� + VerifyReimbursementService verifyReimbursementService = verifyReimbursementFactory.createInstance(); + List<String> approverUserNodeNameList = verifyReimbursementService.getApproverUserNodeNameList(cmd); + for (FlowNode node : approverNodeList) { + if (!approverUserNodeNameList.contains(node.getName())) + continue; + String assigneeName = verifyReimbursementService.getAssigneeNameByNodeName(node.getName()); + ApproverUserConfigOut approverUserConfigOut = ApproverUserConfigOut.builder() + .name(ObjectUtils.isEmpty(assigneeName) ? node.getName() : assigneeName) + .note(node.getDocumentation()) + .isRequired(false) + .isMultiSelected(false) + .reimbursementCode(cmd.getReimbursementCode()) + .build(); + approverUserConfigOut.setIsRequired(Boolean.parseBoolean(getExtensionAttributeValue(node, "isMustSelectApprover"))); + approverUserConfigOut.setIsMultiSelected(Boolean.parseBoolean(getExtensionAttributeValue(node, "isSelectApprovers"))); + approverUserConfigOut.setNumber(Integer.parseInt(getExtensionAttributeValue(node, "selectApproverNumber"))); + String assignee = node.getAssignee(); + if (assignee.contains("claimsEndorser")) + approverUserConfigOut.setFieldName("ClaimsEndorser"); + if (assignee.contains("leaderEndorser")) + approverUserConfigOut.setFieldName("LeaderEndorser"); + if (assignee.contains("borrowerEndorser")) + approverUserConfigOut.setFieldName("BorrowerEndorser"); + approverUserConfigOutList.add(approverUserConfigOut); + } + } catch (Exception e) { + throw ExceptionUtil.getException(null, "鑾峰彇鍔犵浜洪厤缃け璐�"); + } + return approverUserConfigOutList; + } + + private String getExtensionAttributeValue(FlowNode node, String key) { + Map<String, List<ExtensionAttribute>> attributesMap = node.getAttributes(); + if (ObjectUtils.isEmpty(attributesMap)) + return ""; + List<ExtensionAttribute> attributes = attributesMap.get(key); + if (ObjectUtils.isEmpty(attributes)) + return ""; + ExtensionAttribute attribute = attributes.get(0); + if (ObjectUtils.isEmpty(attribute)) + return ""; + return ObjectUtils.defaultIfNull(attribute.getValue(), ""); + } + + @Override + public Pagination<ApproverUserSFPOut> getApproverUserList(ApproverUserSFPQuery query) { + try { + //宸ュ巶绫诲垱寤哄搴斿璞� + VerifyReimbursementService verifyReimbursementService = verifyReimbursementFactory.createInstance(); + return verifyReimbursementService.getApproverUserList(query); + } catch (Exception e) { + throw ExceptionUtil.getException(null, "鑾峰彇鍔犵浜轰汉鍛樿寖鍥村け璐�"); + } + } + } \ No newline at end of file diff --git a/ServiceSite/src/main/java/com/seasky/flowportal/service/impl/DangWei_VerifyReimbursementServiceImpl.java b/ServiceSite/src/main/java/com/seasky/flowportal/service/impl/DangWei_VerifyReimbursementServiceImpl.java index 053159e2..da22e84d 100644 --- a/ServiceSite/src/main/java/com/seasky/flowportal/service/impl/DangWei_VerifyReimbursementServiceImpl.java +++ b/ServiceSite/src/main/java/com/seasky/flowportal/service/impl/DangWei_VerifyReimbursementServiceImpl.java @@ -120,6 +120,13 @@ public class DangWei_VerifyReimbursementServiceImpl extends VerifyReimbursementS throw ExceptionUtil.getException(ResponseCode.SERVER_INTERNAL_TOKEN_DEL_FAILURE, "閫夋嫨鐨�" + assigneeName + "鑼冨洿涓嶆纭紝璇烽噸鏂伴€夋嫨鍚庢彁浜わ紒"); } } + + @Override + public String getAssigneeNameByNodeName(String nodeName) { + AssigneeEnum assigneeEnum = AssigneeEnum.getValueByNodeName(nodeName); + return ObjectUtils.isEmpty(assigneeEnum) ? "" : assigneeEnum.getName(); + } + /**缁忚垂绫诲瀷*/ public enum FundsTypeEnum { CommunalExpense("鍏敤缁忚垂"), @@ -251,5 +258,13 @@ public class DangWei_VerifyReimbursementServiceImpl extends VerifyReimbursementS public String getNodeName(){ return this.nodeName; } + public static AssigneeEnum getValueByNodeName(String nodeName) { + for (AssigneeEnum anEnum : AssigneeEnum.values()) { + if (anEnum.getNodeName().equals(nodeName)) { + return anEnum; + } + } + return null; + } } } diff --git a/ServiceSite/src/main/java/com/seasky/flowportal/service/impl/ExpenseReimbursementServiceImpl.java b/ServiceSite/src/main/java/com/seasky/flowportal/service/impl/ExpenseReimbursementServiceImpl.java index 10557923..6d61427a 100644 --- a/ServiceSite/src/main/java/com/seasky/flowportal/service/impl/ExpenseReimbursementServiceImpl.java +++ b/ServiceSite/src/main/java/com/seasky/flowportal/service/impl/ExpenseReimbursementServiceImpl.java @@ -1262,6 +1262,7 @@ public class ExpenseReimbursementServiceImpl implements ExpenseReimbursementServ if (ObjectUtils.isNotEmpty(expenseReimbursementPo) && !OrderStatusEnum.BACK.getName().equals(expenseReimbursementPo.getOrderStatus()) && !OrderStatusEnum.FINISH.getName().equals(expenseReimbursementPo.getOrderStatus()) + && !OrderStatusEnum.NOTAPPLY.getName().equals(expenseReimbursementPo.getOrderStatus()) && !finstatus) { cmd.setId(expenseReimbursementPo.getId()); cmd.setProcessInstanceId(expenseReimbursementPo.getProcessInstanceId()); diff --git a/ServiceSite/src/main/java/com/seasky/flowportal/service/impl/ExternalDataServiceImpl.java b/ServiceSite/src/main/java/com/seasky/flowportal/service/impl/ExternalDataServiceImpl.java index a02dfaf6..aab619e6 100644 --- a/ServiceSite/src/main/java/com/seasky/flowportal/service/impl/ExternalDataServiceImpl.java +++ b/ServiceSite/src/main/java/com/seasky/flowportal/service/impl/ExternalDataServiceImpl.java @@ -166,6 +166,7 @@ public class ExternalDataServiceImpl implements ExternalDataService { baseExternalPost.setPageSize(userInfoQuery.getPageSize()); baseExternalPost.setUserNo(userInfoQuery.getUserNo()); baseExternalPost.setUserName(userInfoQuery.getUserName()); + baseExternalPost.setUserType(userInfoQuery.getUserType()); baseExternalPost.setRoleID(userInfoQuery.getRoleId()); String response = HttpUtil.post(BaseConfigUtil.getInterfaceUrl(InterfaceUrlConstant.BASE_DATA_LIST_USER_INFO), JSON.toJSONString(baseExternalPost), timeout); JSONObject userJsonObj = JSONObject.parseObject(response); diff --git a/ServiceSite/src/main/java/com/seasky/flowportal/service/impl/FlowServiceImpl.java b/ServiceSite/src/main/java/com/seasky/flowportal/service/impl/FlowServiceImpl.java index b3c9efdd..5820a7f4 100644 --- a/ServiceSite/src/main/java/com/seasky/flowportal/service/impl/FlowServiceImpl.java +++ b/ServiceSite/src/main/java/com/seasky/flowportal/service/impl/FlowServiceImpl.java @@ -822,6 +822,13 @@ public class FlowServiceImpl extends FlowService { throw ExceptionUtil.getException(null, processInstanceResult.getDescription()); } String processDefinitionKey = processInstanceResult.getData().get(0).getProcessDefinitionKey(); + processDefinitionInfo = getProcessDefinitionInfoByKey(processDefinitionKey); + return processDefinitionInfo; + } + + @Override + public ProcessDefinitionOut getProcessDefinitionInfoByKey(String processDefinitionKey) { + ProcessDefinitionOut processDefinitionInfo = null; Result<ProcessDefinitionOut> processDefinitionResult = iRepositoryController.getProcessDefinitionByKey(RepositoryQueryQry.builder().processDefinitionKey(processDefinitionKey).build()); if (ObjectUtils.isNotEmpty(processDefinitionResult) && ObjectUtils.isNotEmpty(processDefinitionResult.getData())) { processDefinitionInfo = processDefinitionResult.getData().get(0); @@ -829,6 +836,7 @@ public class FlowServiceImpl extends FlowService { return processDefinitionInfo; } + @Override public String getProcessVariableByProcessInstanceIdAndName(String processInstanceId, String variableName) { ProcessQueryQry processQueryQry = new ProcessQueryQry(); diff --git a/ServiceSite/src/main/java/com/seasky/flowportal/service/impl/JiaoShiJiaoYu_VerifyReimbursementServiceImpl.java b/ServiceSite/src/main/java/com/seasky/flowportal/service/impl/JiaoShiJiaoYu_VerifyReimbursementServiceImpl.java index 1b5f8846..b3399bef 100644 --- a/ServiceSite/src/main/java/com/seasky/flowportal/service/impl/JiaoShiJiaoYu_VerifyReimbursementServiceImpl.java +++ b/ServiceSite/src/main/java/com/seasky/flowportal/service/impl/JiaoShiJiaoYu_VerifyReimbursementServiceImpl.java @@ -105,6 +105,12 @@ public class JiaoShiJiaoYu_VerifyReimbursementServiceImpl extends VerifyReimburs throw ExceptionUtil.getException(ResponseCode.SERVER_INTERNAL_TOKEN_DEL_FAILURE, "閫夋嫨鐨�" + assigneeName + "鑼冨洿涓嶆纭紝璇烽噸鏂伴€夋嫨鍚庢彁浜わ紒"); } + @Override + public String getAssigneeNameByNodeName(String nodeName) { + AssigneeEnum assigneeEnum = AssigneeEnum.getValueByNodeName(nodeName); + return ObjectUtils.isEmpty(assigneeEnum) ? "" : assigneeEnum.getName(); + } + /**鑺傜偣*/ public enum AssigneeEnum { OriginalUnitSubLeader("鍘熷崟浣嶅垎绠¢瀵�", "鍘熷崟浣嶅垎绠¢瀵�"), @@ -129,5 +135,13 @@ public class JiaoShiJiaoYu_VerifyReimbursementServiceImpl extends VerifyReimburs public String getNodeName(){ return this.nodeName; } + public static AssigneeEnum getValueByNodeName(String nodeName) { + for (AssigneeEnum anEnum : AssigneeEnum.values()) { + if (anEnum.getNodeName().equals(nodeName)) { + return anEnum; + } + } + return null; + } } } diff --git a/ServiceSite/src/main/java/com/seasky/flowportal/service/impl/JiaoWei_VerifyReimbursementServiceImpl.java b/ServiceSite/src/main/java/com/seasky/flowportal/service/impl/JiaoWei_VerifyReimbursementServiceImpl.java index da90f375..d9312258 100644 --- a/ServiceSite/src/main/java/com/seasky/flowportal/service/impl/JiaoWei_VerifyReimbursementServiceImpl.java +++ b/ServiceSite/src/main/java/com/seasky/flowportal/service/impl/JiaoWei_VerifyReimbursementServiceImpl.java @@ -4,24 +4,41 @@ import cn.hutool.core.bean.BeanUtil; import com.alibaba.fastjson.JSON; import com.alibaba.fastjson.JSONArray; import com.alibaba.fastjson.JSONObject; +import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; +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.core.util.HttpUtil; +import com.seasky.flow.dto.flow.FlowNode; +import com.seasky.flow.dto.processDefinition.ProcessDefinitionOut; import com.seasky.flowportal.config.BaseConfigProperties; +import com.seasky.flowportal.domain.po.ExpenseReimbursementPo; +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.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.ReimbursementTypeEnum; +import com.seasky.flowportal.mapper.ExpenseReimbursementMapper; import com.seasky.flowportal.service.VerifyReimbursementService; import com.seasky.flowportal.utils.BaseConfigUtil; import com.seasky.flowportal.utils.PortalUtil; 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; +import java.util.ArrayList; +import java.util.Comparator; import java.util.List; +import java.util.TreeSet; import java.util.stream.Collectors; /** @@ -32,6 +49,10 @@ import java.util.stream.Collectors; @Slf4j public class JiaoWei_VerifyReimbursementServiceImpl extends VerifyReimbursementService { + @Autowired + @Lazy + private ExpenseReimbursementMapper expenseReimbursementMapper; + @Override public String verifyReimbursementSelectUser(ExpenseReimbursementCmd expenseReimbursementCmd) { @@ -126,6 +147,112 @@ public class JiaoWei_VerifyReimbursementServiceImpl extends VerifyReimbursementS throw ExceptionUtil.getException(ResponseCode.SERVER_INTERNAL_TOKEN_DEL_FAILURE, "閫夋嫨鐨�" + assigneeName + "鑼冨洿涓嶆纭紝璇烽噸鏂伴€夋嫨鍚庢彁浜わ紒"); } } + + + @Override + public String getAssigneeNameByNodeName(String nodeName) { + AssigneeEnum assigneeEnum = AssigneeEnum.getValueByNodeName(nodeName); + return ObjectUtils.isEmpty(assigneeEnum) ? "" : assigneeEnum.getName(); + } + + @Override + public List<String> getApproverUserNodeNameList(ExpenseReimbursementCmd cmd) { + log.info(JSONObject.toJSONString(BeanUtil.beanToMap(cmd))); + List<String> nodeNameList = new ArrayList<>(); + ReimbursementTypeEnum reimbursementTypeEnum = ReimbursementTypeEnum.getValueByName(cmd.getReimbursementType()); + if (ObjectUtils.isEmpty(reimbursementTypeEnum)) + throw ExceptionUtil.getException(null, "鎶ラ攢绫诲瀷閿欒"); + switch (reimbursementTypeEnum) { + case DailyReimbursement: + case TravelBusinessReimbursement: + case LoanApply: { + String eP3_FundsType = getProjectExtendPropertyValue(cmd.getFundsProject(), 3); + if (ObjectUtils.isEmpty(eP3_FundsType)) + throw ExceptionUtil.getException(null, "鏈煡璇㈠埌缁忚垂绫诲瀷锛岄」鐩紪鍙凤細" + cmd.getFundsProject()); + FundsTypeEnum fundsTypeEnum = FundsTypeEnum.getValueByName(eP3_FundsType); + if (ObjectUtils.isEmpty(fundsTypeEnum)) + break; + boolean isCommunalExpense = FundsTypeEnum.CommunalExpense.equals(fundsTypeEnum); + if (isCommunalExpense) { + String eP0_ReimbursementContent = getProjectExtendPropertyValue(cmd.getFundsProject(), 0); + if (ObjectUtils.isEmpty(eP0_ReimbursementContent)) + throw ExceptionUtil.getException(null, "鏈煡璇㈠埌鎶ラ攢鍐呭锛岄」鐩紪鍙凤細" + cmd.getFundsProject()); + ReimbursementContentEnum reimbursementContentEnum = ReimbursementContentEnum.getValueByName(eP0_ReimbursementContent); + if (ObjectUtils.isEmpty(reimbursementContentEnum)) + break; + switch (reimbursementContentEnum) { + case OfficeExpense: + case OfficialVehicle: + case WelfareExpense_Other: + case RetireeBenefitAndActivityExpense: + case ConferenceFee: + case OfficialReception: + nodeNameList.add(AssigneeEnum.SubCommitteeLeader.getNodeName()); + break; + case TrainingFee: + if (cmd.getReimbursementAmount().compareTo(BigDecimal.valueOf(20000)) >= 0) + nodeNameList.add(AssigneeEnum.SubCommitteeLeader.getNodeName()); + break; + case WelfareExpense_ChildcareOverhead: + if (checkApplyUserEqualsApplyOrgCharge(cmd)) + nodeNameList.add(AssigneeEnum.SubCommitteeLeader.getNodeName()); + break; + } + break; + } + + switch (fundsTypeEnum) { + case RecurringItem: + nodeNameList.add(AssigneeEnum.SubCommitteeLeader.getNodeName()); + break; + case OrgDailyOperatingExpense: + if (cmd.getReimbursementAmount().compareTo(BigDecimal.valueOf(5000)) > 0) + nodeNameList.add(AssigneeEnum.SubCommitteeLeader.getNodeName()); + break; + } + break; + } + default: + break; + } + return nodeNameList; + } + + @Override + public Pagination<ApproverUserSFPOut> getApproverUserList(ApproverUserSFPQuery query) { + if (ObjectUtils.isEmpty(query.getReimbursementCode())) + throw ExceptionUtil.getException(ResponseCode.DATA_VERIFY_EXCEPTION, "鍗曞彿涓嶈兘涓虹┖"); + QueryWrapper<ExpenseReimbursementPo> expenseReimbursementQueryWrapper = new QueryWrapper<>(); + expenseReimbursementQueryWrapper.eq("reimbursement_code", query.getReimbursementCode()); + expenseReimbursementQueryWrapper.eq("order_status", OrderStatusEnum.NOTAPPLY.getName()); + ExpenseReimbursementPo reimbursementPo = expenseReimbursementMapper.selectOne(expenseReimbursementQueryWrapper); + if (ObjectUtils.isEmpty(reimbursementPo)) + throw ExceptionUtil.getException(ResponseCode.DATA_VERIFY_EXCEPTION, "鏈煡璇㈠埌鍗曟嵁淇℃伅锛屽崟鍙凤細" + query.getReimbursementCode()); + ReimbursementTypeEnum reimbursementTypeEnum = ReimbursementTypeEnum.getValueByName(reimbursementPo.getReimbursementType()); + if (ObjectUtils.isEmpty(reimbursementTypeEnum)) + throw ExceptionUtil.getException(null, "鎶ラ攢绫诲瀷閿欒"); + + AssigneeEnum assigneeEnum = AssigneeEnum.getValueByName(query.getName()); + if (ObjectUtils.isEmpty(assigneeEnum)) + throw ExceptionUtil.getException(null, "鍔犵浜虹被鍨嬮敊璇�"); + + List<ApproverUserSFPOut> approverUserSFPOutList = new ArrayList<>(); + Page page = new Page<>(query.getPageIndex(), query.getPageSize()); + switch (reimbursementTypeEnum) { + case DailyReimbursement: + case TravelBusinessReimbursement: + case LoanApply: { + switch (assigneeEnum) { + case SubCommitteeLeader: + default: + return super.getApproverUserList(query); + } + } + default: + break; + } + return Pagination.fromPage(page); + } /**缁忚垂绫诲瀷*/ public enum FundsTypeEnum { CommunalExpense("鍏敤缁忚垂"), @@ -224,5 +351,21 @@ public class JiaoWei_VerifyReimbursementServiceImpl extends VerifyReimbursementS public String getNodeName(){ return this.nodeName; } + public static AssigneeEnum getValueByNodeName(String nodeName) { + for (AssigneeEnum anEnum : AssigneeEnum.values()) { + if (anEnum.getNodeName().equals(nodeName)) { + return anEnum; + } + } + return null; + } + public static AssigneeEnum getValueByName(String name) { + for (AssigneeEnum anEnum : AssigneeEnum.values()) { + if (anEnum.getName().equals(name)) { + return anEnum; + } + } + return null; + } } } diff --git a/ServiceSite/src/main/java/com/seasky/flowportal/service/impl/XiNanZhengFa_VerifyReimbursementServiceImpl.java b/ServiceSite/src/main/java/com/seasky/flowportal/service/impl/XiNanZhengFa_VerifyReimbursementServiceImpl.java index d35edd5d..0ef198a2 100644 --- a/ServiceSite/src/main/java/com/seasky/flowportal/service/impl/XiNanZhengFa_VerifyReimbursementServiceImpl.java +++ b/ServiceSite/src/main/java/com/seasky/flowportal/service/impl/XiNanZhengFa_VerifyReimbursementServiceImpl.java @@ -111,6 +111,14 @@ public class XiNanZhengFa_VerifyReimbursementServiceImpl extends VerifyReimburse } } } + + @Override + public String getAssigneeNameByNodeName(String nodeName) { + AssigneeEnum assigneeEnum = AssigneeEnum.getValueByNodeName(nodeName); + return ObjectUtils.isEmpty(assigneeEnum) ? "" : assigneeEnum.getName(); + } + + //璧勯噾鎬ц川 public enum Reserved1Enum { Flow1("娴佺▼1"), @@ -158,19 +166,35 @@ public class XiNanZhengFa_VerifyReimbursementServiceImpl extends VerifyReimburse //鑺傜偣 public enum AssigneeEnum { - SubjectLeaderOrInstructor("瀛︾甯﹀ご浜烘垨鎸囧鑰佸笀") + SubjectLeaderOrInstructor("瀛︾甯﹀ご浜烘垨鎸囧鑰佸笀", "瀛︾甯﹀ご浜烘垨鎸囧鑰佸笀"), + SubjectLeader("瀛︾甯﹀ご浜�", "瀛︾甯﹀ご浜�"), + Instructor("鎸囧鑰佸笀", "鎸囧鑰佸笀") ; /** * 鏋氫妇灞炴€ц鏄� */ private final String name; - AssigneeEnum(String name) { + private final String nodeName; + + AssigneeEnum(String name, String nodeName) { this.name = name; + this.nodeName = nodeName; } public String getName(){ return this.name; } + public String getNodeName(){ + return this.nodeName; + } + public static AssigneeEnum getValueByNodeName(String nodeName) { + for (AssigneeEnum anEnum : AssigneeEnum.values()) { + if (anEnum.getNodeName().equals(nodeName)) { + return anEnum; + } + } + return null; + } } } diff --git a/ServiceSite/src/main/java/com/seasky/flowportal/service/impl/XianDa_VerifyReimbursementServiceImpl.java b/ServiceSite/src/main/java/com/seasky/flowportal/service/impl/XianDa_VerifyReimbursementServiceImpl.java index 7cc18dd8..06d33768 100644 --- a/ServiceSite/src/main/java/com/seasky/flowportal/service/impl/XianDa_VerifyReimbursementServiceImpl.java +++ b/ServiceSite/src/main/java/com/seasky/flowportal/service/impl/XianDa_VerifyReimbursementServiceImpl.java @@ -208,6 +208,13 @@ public class XianDa_VerifyReimbursementServiceImpl extends VerifyReimbursementSe //return PortalResponse.ok(PortalResponseCode.INCOMPLETE_INFO, "闇€瑕佷竴涓�" + assigneeName + "瀹℃壒锛岃閲嶆柊閫夋嫨鍚庢彁浜わ紒"); throw ExceptionUtil.getException(ResponseCode.SERVER_INTERNAL_TOKEN_DEL_FAILURE, "閫夋嫨鐨�" + assigneeName + "鑼冨洿涓嶆纭紝璇烽噸鏂伴€夋嫨鍚庢彁浜わ紒"); } + + @Override + public String getAssigneeNameByNodeName(String nodeName) { + AssigneeEnum assigneeEnum = AssigneeEnum.getValueByNodeName(nodeName); + return ObjectUtils.isEmpty(assigneeEnum) ? "" : assigneeEnum.getName(); + } + /**瑙掕壊*/ public enum RoleEnum { SubSchoolLeader("鍒嗙鏍¢瀵�"), @@ -267,5 +274,13 @@ public class XianDa_VerifyReimbursementServiceImpl extends VerifyReimbursementSe public String getNodeName(){ return this.nodeName; } + public static AssigneeEnum getValueByNodeName(String nodeName) { + for (AssigneeEnum anEnum : AssigneeEnum.values()) { + if (anEnum.getNodeName().equals(nodeName)) { + return anEnum; + } + } + return null; + } } } diff --git a/ServiceSite/src/main/java/com/seasky/flowportal/service/impl/ZheJiangJiDian_VerifyReimbursementServiceImpl.java b/ServiceSite/src/main/java/com/seasky/flowportal/service/impl/ZheJiangJiDian_VerifyReimbursementServiceImpl.java index 720e130a..153c343a 100644 --- a/ServiceSite/src/main/java/com/seasky/flowportal/service/impl/ZheJiangJiDian_VerifyReimbursementServiceImpl.java +++ b/ServiceSite/src/main/java/com/seasky/flowportal/service/impl/ZheJiangJiDian_VerifyReimbursementServiceImpl.java @@ -143,6 +143,14 @@ public class ZheJiangJiDian_VerifyReimbursementServiceImpl extends VerifyReimbur } } + + @Override + public String getAssigneeNameByNodeName(String nodeName) { + AssigneeEnum assigneeEnum = AssigneeEnum.getValueByNodeName(nodeName); + return ObjectUtils.isEmpty(assigneeEnum) ? "" : assigneeEnum.getName(); + } + + //鏀嚭椤� public enum ExpenseDetailContentEnum { OfficialReception("鍏姟鎺ュ緟璐�"), @@ -215,19 +223,33 @@ public class ZheJiangJiDian_VerifyReimbursementServiceImpl extends VerifyReimbur //鑺傜偣 public enum AssigneeEnum { - CounterSigner("鍔犵浜�") + CounterSigner("鍔犵浜�", "鍔犵浜�") ; /** * 鏋氫妇灞炴€ц鏄� */ private final String name; - AssigneeEnum(String name) { + private final String nodeName; + + AssigneeEnum(String name, String nodeName) { this.name = name; + this.nodeName = nodeName; } public String getName(){ return this.name; } + public String getNodeName(){ + return this.nodeName; + } + public static AssigneeEnum getValueByNodeName(String nodeName) { + for (AssigneeEnum anEnum : AssigneeEnum.values()) { + if (anEnum.getNodeName().equals(nodeName)) { + return anEnum; + } + } + return null; + } } } diff --git a/ServiceSite/src/main/java/com/seasky/flowportal/utils/ApprovalUtil.java b/ServiceSite/src/main/java/com/seasky/flowportal/utils/ApprovalUtil.java index 7217b3af..02889c8f 100644 --- a/ServiceSite/src/main/java/com/seasky/flowportal/utils/ApprovalUtil.java +++ b/ServiceSite/src/main/java/com/seasky/flowportal/utils/ApprovalUtil.java @@ -1,6 +1,7 @@ package com.seasky.flowportal.utils; import com.alibaba.fastjson.JSON; +import com.seasky.core.ddd.utils.MapperUtils; import com.seasky.core.util.ExceptionUtil; import com.seasky.flow.dto.flow.HistoricActivityInstanceOut; import com.seasky.flow.dto.task.NodeOut; @@ -9,6 +10,8 @@ import com.seasky.flowportal.constant.Constant; import com.seasky.flowportal.domain.po.ExpenseReimbursementPo; import com.seasky.flowportal.domain.po.PreExpenseApplyPo; import com.seasky.flowportal.dto.approval.ApprovalCmd; +import com.seasky.flowportal.dto.expenseReimbursement.ExpenseReimbursementCmd; +import com.seasky.flowportal.dto.expenseReimbursement.ExpenseReimbursementSFPCmd; import com.seasky.flowportal.dto.flow.FlowOut; import com.seasky.flowportal.dto.flow.FlowQuery; import com.seasky.flowportal.dto.signature.SignatureCmd; @@ -58,6 +61,14 @@ public class ApprovalUtil { public void setExpenseReimbursementMapper(ExpenseReimbursementMapper expenseReimbursementMapper) { ApprovalUtil.expenseReimbursementMapper = expenseReimbursementMapper; } + public static ExpenseReimbursementCmd map(ExpenseReimbursementSFPCmd cmd){ + ExpenseReimbursementCmd expenseReimbursementCmd = MapperUtils.INSTANCE.map(ExpenseReimbursementCmd.class, cmd); + expenseReimbursementCmd.getExtendFieldCmd(); + int length = expenseReimbursementCmd.getApplicantDepartment().indexOf('-'); + expenseReimbursementCmd.setOrganizationCode(expenseReimbursementCmd.getApplicantDepartment().substring(0, length)); + expenseReimbursementCmd.setOrganizationName(expenseReimbursementCmd.getApplicantDepartment().substring(length + 1)); + return expenseReimbursementCmd; + } public static String claimsFlowLog(ApprovalCmd cmd){ UserInfoOut userInfo; try { -- GitLab From 06cee62108048a551dec4c3af86b95f020ab8128 Mon Sep 17 00:00:00 2001 From: "HAITIAN-TIM\\67349" <chenmin@seaskysh.com> Date: Wed, 28 Jun 2023 17:52:13 +0800 Subject: [PATCH 2/2] =?UTF-8?q?=E4=BF=9D=E5=AD=98=E7=AD=BE=E7=AB=A0?= =?UTF-8?q?=E8=AE=B0=E5=BD=95=E4=BF=AE=E6=94=B9?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../java/com/seasky/flowportal/utils/ApprovalUtil.java | 7 +++++-- 1 file changed, 5 insertions(+), 2 deletions(-) diff --git a/ServiceSite/src/main/java/com/seasky/flowportal/utils/ApprovalUtil.java b/ServiceSite/src/main/java/com/seasky/flowportal/utils/ApprovalUtil.java index 02889c8f..a6c3a033 100644 --- a/ServiceSite/src/main/java/com/seasky/flowportal/utils/ApprovalUtil.java +++ b/ServiceSite/src/main/java/com/seasky/flowportal/utils/ApprovalUtil.java @@ -368,11 +368,14 @@ public class ApprovalUtil { .applyName(cmd.getApplicantName()) .orderCode(cmd.getOrderCode()) .build(); + SignatureOut signatureOut = null; List<SignatureOut> signatureList = signatureService.getSignature(SignatureQuery.builder().orderCode(cmd.getOrderCode()).build()); - SignatureOut signatureOut = signatureList.stream().filter(s -> s.getUserNo().equals(approveUser.getUserNo())).findFirst().orElse(null); + if (ObjectUtils.isNotEmpty(signatureList)) + signatureOut = signatureList.stream().filter(s -> s.getUserNo().equals(approveUser.getUserNo())).findFirst().orElse(null); if (ObjectUtils.isEmpty(signatureOut)) { signatureList = signatureService.getSignatureByUserCode(approveUser.getUserNo()); - signatureOut = signatureList.stream().filter(s -> s.getUserNo().equals(approveUser.getUserNo())).findFirst().orElse(null); + if (ObjectUtils.isNotEmpty(signatureList)) + signatureOut = signatureList.stream().filter(s -> s.getUserNo().equals(approveUser.getUserNo())).findFirst().orElse(null); } if (ObjectUtils.isNotEmpty(signatureOut)) { signatureCmd.setKeySn(signatureOut.getKeySn()); -- GitLab