Browse Source

Merge remote-tracking branch 'origin/master'

luok 2 years ago
parent
commit
5a251a066d
30 changed files with 231 additions and 318 deletions
  1. 5 3
      blade-auth/src/main/java/org/springblade/auth/service/BladeUserDetailsServiceImpl.java
  2. 0 11
      blade-service-api/blade-control-api/src/main/java/org/springblade/control/dto/AttendanceTripInfoDTO.java
  3. 0 17
      blade-service-api/blade-control-api/src/main/java/org/springblade/control/dto/EMFinancialReimbursementInfoDTO.java
  4. 0 35
      blade-service-api/blade-control-api/src/main/java/org/springblade/control/dto/EMFinancialReimbursementInfoDTOBatch.java
  5. 0 42
      blade-service-api/blade-control-api/src/main/java/org/springblade/control/dto/EMFinancialReimbursementInfoDTODetailInfo.java
  6. 0 27
      blade-service-api/blade-control-api/src/main/java/org/springblade/control/dto/EMFinancialReimbursementInfoDTOTaskUser.java
  7. 0 11
      blade-service-api/blade-control-api/src/main/java/org/springblade/control/dto/EMInvoiceInfoDTO.java
  8. 0 17
      blade-service-api/blade-control-api/src/main/java/org/springblade/control/dto/EMLoanInfoDTO.java
  9. 0 17
      blade-service-api/blade-control-api/src/main/java/org/springblade/control/dto/EMOutsourcingPayInfoDTO.java
  10. 0 17
      blade-service-api/blade-control-api/src/main/java/org/springblade/control/dto/EMPayInfoDTO.java
  11. 0 18
      blade-service-api/blade-control-api/src/main/java/org/springblade/control/dto/EMPurchaseInfoDTO.java
  12. 0 11
      blade-service-api/blade-control-api/src/main/java/org/springblade/control/dto/EMUseCarInfoDTO.java
  13. 0 17
      blade-service-api/blade-control-api/src/main/java/org/springblade/control/entity/EMProcessTaskUser.java
  14. 14 0
      blade-service-api/blade-control-api/src/main/java/org/springblade/control/vo/UseCarDeptVO.java
  15. 13 0
      blade-service-api/blade-control-api/src/main/java/org/springblade/control/vo/UserControlVO.java
  16. 3 0
      blade-service-api/blade-manager-api/src/main/java/org/springblade/manager/feign/ArchiveTreeContractClient.java
  17. 6 0
      blade-service/blade-archive/src/main/java/org/springblade/archive/service/impl/ArchivesAutoServiceImpl.java
  18. 62 12
      blade-service/blade-control/src/main/java/org/springblade/control/controller/ExMaTwoController.java
  19. 0 2
      blade-service/blade-control/src/main/java/org/springblade/control/service/EMFinancialReimbursementService.java
  20. 8 1
      blade-service/blade-control/src/main/java/org/springblade/control/service/impl/EMUseCarServiceImpl.java
  21. 1 4
      blade-service/blade-control/src/main/java/org/springblade/control/service/impl/LogHistoryServiceImpl.java
  22. 28 23
      blade-service/blade-control/src/main/java/org/springblade/control/service/impl/TaskProcessServiceImpl.java
  23. 72 29
      blade-service/blade-manager/src/main/java/com/mixsmart/utils/CustomFunction.java
  24. 6 0
      blade-service/blade-manager/src/main/java/org/springblade/manager/feign/ArchiveTreeContractImpl.java
  25. 1 0
      blade-service/blade-manager/src/main/java/org/springblade/manager/mapper/ArchiveTreeContractMapper.java
  26. 7 0
      blade-service/blade-manager/src/main/java/org/springblade/manager/mapper/ArchiveTreeContractMapper.xml
  27. 2 1
      blade-service/blade-manager/src/main/java/org/springblade/manager/mapper/ContractInfoMapper.xml
  28. 0 1
      blade-service/blade-manager/src/main/java/org/springblade/manager/service/IContractInfoService.java
  29. 2 2
      blade-service/blade-manager/src/main/java/org/springblade/manager/service/impl/FormulaServiceImpl.java
  30. 1 0
      blade-service/blade-manager/src/main/java/org/springblade/manager/service/impl/WbsTreeContractServiceImpl.java

+ 5 - 3
blade-auth/src/main/java/org/springblade/auth/service/BladeUserDetailsServiceImpl.java

@@ -146,12 +146,14 @@ public class BladeUserDetailsServiceImpl implements UserDetailsService {
                 throw new UserDeniedAuthorizationException(TokenUtil.USER_HAS_NO_ROLE);
             }
 
-            /* 校验登陆账号权限,客户端填报、试验userType=1,app端userType=2,档案userType=3,后管userType=4 */
+            /* 校验登陆账号权限,客户端填报、试验userType=1,app端userType=2,档案userType=3,后管userType=4 ,管控userType=5 ,征拆userType=6 */
             if (user.getUserType().contains(("1"))
                     || user.getUserType().contains(("2"))
                     || user.getUserType().contains(("3"))
-                    || user.getUserType().contains(("4"))) {
-                if (!("1,2,3,4").equals(user.getUserType())) {
+                    || user.getUserType().contains(("4"))
+                    || user.getUserType().contains(("5"))
+                    || user.getUserType().contains(("6"))) {
+                if (!("1,2,3,4,5,6").equals(user.getUserType())) {
                     //如果不是全部权限,那么分批校验登陆平台权限
                     this.judgeLoginPermission(user);
                 }

+ 0 - 11
blade-service-api/blade-control-api/src/main/java/org/springblade/control/dto/AttendanceTripInfoDTO.java

@@ -3,9 +3,7 @@ package org.springblade.control.dto;
 import io.swagger.annotations.ApiModelProperty;
 import lombok.Data;
 import org.springblade.control.entity.AttendanceTripInfo;
-import org.springblade.control.entity.EMProcessTaskUser;
 
-import java.util.List;
 
 @Data
 public class AttendanceTripInfoDTO extends AttendanceTripInfo {
@@ -13,13 +11,4 @@ public class AttendanceTripInfoDTO extends AttendanceTripInfo {
     @ApiModelProperty(value = "提交状态 1=暂存 2=提交审批")
     private String submitStatus;
 
-    @ApiModelProperty(value = "部门负责人")
-    private EMProcessTaskUser responsibleUser;
-
-    @ApiModelProperty(value = "人事")
-    private EMProcessTaskUser personnelUser;
-
-    @ApiModelProperty(value = "抄送人列表")
-    private List<EMProcessTaskUser> ccUserList;
-
 }

+ 0 - 17
blade-service-api/blade-control-api/src/main/java/org/springblade/control/dto/EMFinancialReimbursementInfoDTO.java

@@ -3,9 +3,7 @@ package org.springblade.control.dto;
 import io.swagger.annotations.ApiModelProperty;
 import lombok.Data;
 import org.springblade.control.entity.EMFinancialReimbursementInfo;
-import org.springblade.control.entity.EMProcessTaskUser;
 
-import java.util.List;
 
 @Data
 public class EMFinancialReimbursementInfoDTO extends EMFinancialReimbursementInfo {
@@ -13,19 +11,4 @@ public class EMFinancialReimbursementInfoDTO extends EMFinancialReimbursementInf
     @ApiModelProperty(value = "提交状态 1=暂存 2=提交审批")
     private String submitStatus;
 
-    @ApiModelProperty(value = "部门负责人")
-    private EMProcessTaskUser responsibleUser;
-
-    @ApiModelProperty(value = "财务人员")
-    private EMProcessTaskUser financeUser;
-
-    @ApiModelProperty(value = "最终确认付款人")
-    private EMProcessTaskUser finalConfirmationUser;
-
-    @ApiModelProperty(value = "出纳人")
-    private EMProcessTaskUser cashierUser;
-
-    @ApiModelProperty(value = "抄送人列表")
-    private List<EMProcessTaskUser> ccUserList;
-
 }

+ 0 - 35
blade-service-api/blade-control-api/src/main/java/org/springblade/control/dto/EMFinancialReimbursementInfoDTOBatch.java

@@ -1,35 +0,0 @@
-package org.springblade.control.dto;
-
-import io.swagger.annotations.ApiModelProperty;
-import lombok.Data;
-
-import java.io.Serializable;
-import java.math.BigDecimal;
-import java.util.List;
-
-@Data
-public class EMFinancialReimbursementInfoDTOBatch implements Serializable {
-
-    @ApiModelProperty(value = "提交状态 1=暂存 2=提交审批")
-    private String submitStatus;
-
-    @ApiModelProperty(value = "明细信息")
-    private List<EMFinancialReimbursementInfoDTODetailInfo> detailInfo;
-
-    @ApiModelProperty(value = "审批人对象")
-    private EMFinancialReimbursementInfoDTOTaskUser taskUser;
-
-    @ApiModelProperty(value = "归属人id")
-    private Long userIdVesting;
-
-    @ApiModelProperty(value = "是否抵扣借款 0=否 1=是")
-    private Integer isDeductLoan;
-
-    @ApiModelProperty(value = "借款信息id")
-    private Long deductLoanId;
-
-    @ApiModelProperty(value = "实际报销金额")
-    private BigDecimal frMoneyActual;
-
-
-}

+ 0 - 42
blade-service-api/blade-control-api/src/main/java/org/springblade/control/dto/EMFinancialReimbursementInfoDTODetailInfo.java

@@ -1,42 +0,0 @@
-package org.springblade.control.dto;
-
-import com.fasterxml.jackson.annotation.JsonFormat;
-import io.swagger.annotations.ApiModelProperty;
-import lombok.Data;
-
-import java.io.Serializable;
-import java.math.BigDecimal;
-import java.util.Date;
-
-@Data
-public class EMFinancialReimbursementInfoDTODetailInfo implements Serializable {
-
-    @ApiModelProperty(value = "数据id")
-    private Long id;
-
-    @ApiModelProperty(value = "所属项目id")
-    private Long projectId;
-
-    @ApiModelProperty(value = "预算计划ids")
-    private String budgetPlanIds;
-
-    @ApiModelProperty(value = "报销类型")
-    private Integer frType;
-
-    @ApiModelProperty(value = "报销金额")
-    private BigDecimal frMoney;
-
-    @ApiModelProperty(value = "报销时间")
-    @JsonFormat(shape = JsonFormat.Shape.STRING, pattern = "yyyy-MM-dd", timezone = "GMT+8")
-    private Date frDate;
-
-    @ApiModelProperty(value = "费用说明")
-    private String frDesc;
-
-    @ApiModelProperty(value = "电子发票url地址")
-    private String frElectronicInvoiceUrl;
-
-    @ApiModelProperty(value = "附件url地址")
-    private String frAttachmentUrl;
-
-}

+ 0 - 27
blade-service-api/blade-control-api/src/main/java/org/springblade/control/dto/EMFinancialReimbursementInfoDTOTaskUser.java

@@ -1,27 +0,0 @@
-package org.springblade.control.dto;
-
-import io.swagger.annotations.ApiModelProperty;
-import lombok.Data;
-import org.springblade.control.entity.EMProcessTaskUser;
-
-import java.util.List;
-
-@Data
-public class EMFinancialReimbursementInfoDTOTaskUser {
-
-    @ApiModelProperty(value = "部门负责人")
-    private EMProcessTaskUser responsibleUser;
-
-    @ApiModelProperty(value = "财务人员")
-    private EMProcessTaskUser financeUser;
-
-    @ApiModelProperty(value = "最终确认付款人")
-    private EMProcessTaskUser finalConfirmationUser;
-
-    @ApiModelProperty(value = "出纳人")
-    private EMProcessTaskUser cashierUser;
-
-    @ApiModelProperty(value = "抄送人列表")
-    private List<EMProcessTaskUser> ccUserList;
-
-}

+ 0 - 11
blade-service-api/blade-control-api/src/main/java/org/springblade/control/dto/EMInvoiceInfoDTO.java

@@ -3,9 +3,7 @@ package org.springblade.control.dto;
 import io.swagger.annotations.ApiModelProperty;
 import lombok.Data;
 import org.springblade.control.entity.EMInvoiceInfo;
-import org.springblade.control.entity.EMProcessTaskUser;
 
-import java.util.List;
 
 @Data
 public class EMInvoiceInfoDTO extends EMInvoiceInfo {
@@ -13,13 +11,4 @@ public class EMInvoiceInfoDTO extends EMInvoiceInfo {
     @ApiModelProperty(value = "提交状态 1=暂存 2=提交审批")
     private String submitStatus;
 
-    @ApiModelProperty(value = "部门负责人")
-    private EMProcessTaskUser responsibleUser;
-
-    @ApiModelProperty(value = "财务人员")
-    private EMProcessTaskUser financeUser;
-
-    @ApiModelProperty(value = "抄送人列表")
-    private List<EMProcessTaskUser> ccUserList;
-
 }

+ 0 - 17
blade-service-api/blade-control-api/src/main/java/org/springblade/control/dto/EMLoanInfoDTO.java

@@ -3,9 +3,7 @@ package org.springblade.control.dto;
 import io.swagger.annotations.ApiModelProperty;
 import lombok.Data;
 import org.springblade.control.entity.EMLoanInfo;
-import org.springblade.control.entity.EMProcessTaskUser;
 
-import java.util.List;
 
 @Data
 public class EMLoanInfoDTO extends EMLoanInfo {
@@ -13,19 +11,4 @@ public class EMLoanInfoDTO extends EMLoanInfo {
     @ApiModelProperty(value = "提交状态 1=暂存 2=提交审批")
     private String submitStatus;
 
-    @ApiModelProperty(value = "部门负责人")
-    private EMProcessTaskUser responsibleUser;
-
-    @ApiModelProperty(value = "财务人员")
-    private EMProcessTaskUser financeUser;
-
-    @ApiModelProperty(value = "最终确认付款人")
-    private EMProcessTaskUser finalConfirmationUser;
-
-    @ApiModelProperty(value = "出纳人")
-    private EMProcessTaskUser cashierUser;
-
-    @ApiModelProperty(value = "抄送人列表")
-    private List<EMProcessTaskUser> ccUserList;
-
 }

+ 0 - 17
blade-service-api/blade-control-api/src/main/java/org/springblade/control/dto/EMOutsourcingPayInfoDTO.java

@@ -3,9 +3,7 @@ package org.springblade.control.dto;
 import io.swagger.annotations.ApiModelProperty;
 import lombok.Data;
 import org.springblade.control.entity.EMOutsourcingPayInfo;
-import org.springblade.control.entity.EMProcessTaskUser;
 
-import java.util.List;
 
 @Data
 public class EMOutsourcingPayInfoDTO extends EMOutsourcingPayInfo {
@@ -13,19 +11,4 @@ public class EMOutsourcingPayInfoDTO extends EMOutsourcingPayInfo {
     @ApiModelProperty(value = "提交状态 1=暂存 2=提交审批")
     private String submitStatus;
 
-    @ApiModelProperty(value = "部门负责人")
-    private EMProcessTaskUser responsibleUser;
-
-    @ApiModelProperty(value = "财务人员")
-    private EMProcessTaskUser financeUser;
-
-    @ApiModelProperty(value = "最终确认付款人")
-    private EMProcessTaskUser finalConfirmationUser;
-
-    @ApiModelProperty(value = "出纳人")
-    private EMProcessTaskUser cashierUser;
-
-    @ApiModelProperty(value = "抄送人列表")
-    private List<EMProcessTaskUser> ccUserList;
-
 }

+ 0 - 17
blade-service-api/blade-control-api/src/main/java/org/springblade/control/dto/EMPayInfoDTO.java

@@ -3,9 +3,7 @@ package org.springblade.control.dto;
 import io.swagger.annotations.ApiModelProperty;
 import lombok.Data;
 import org.springblade.control.entity.EMPayInfo;
-import org.springblade.control.entity.EMProcessTaskUser;
 
-import java.util.List;
 
 @Data
 public class EMPayInfoDTO extends EMPayInfo {
@@ -13,19 +11,4 @@ public class EMPayInfoDTO extends EMPayInfo {
     @ApiModelProperty(value = "提交状态 1=暂存 2=提交审批")
     private String submitStatus;
 
-    @ApiModelProperty(value = "部门负责人")
-    private EMProcessTaskUser responsibleUser;
-
-    @ApiModelProperty(value = "财务人员")
-    private EMProcessTaskUser financeUser;
-
-    @ApiModelProperty(value = "最终确认付款人")
-    private EMProcessTaskUser finalConfirmationUser;
-
-    @ApiModelProperty(value = "出纳人")
-    private EMProcessTaskUser cashierUser;
-
-    @ApiModelProperty(value = "抄送人列表")
-    private List<EMProcessTaskUser> ccUserList;
-
 }

+ 0 - 18
blade-service-api/blade-control-api/src/main/java/org/springblade/control/dto/EMPurchaseInfoDTO.java

@@ -2,30 +2,12 @@ package org.springblade.control.dto;
 
 import io.swagger.annotations.ApiModelProperty;
 import lombok.Data;
-import org.springblade.control.entity.EMProcessTaskUser;
 import org.springblade.control.entity.EMPurchaseInfo;
 
-import java.util.List;
 
 @Data
 public class EMPurchaseInfoDTO extends EMPurchaseInfo {
 
     @ApiModelProperty(value = "提交状态 1=暂存 2=提交审批")
     private String submitStatus;
-
-    @ApiModelProperty(value = "部门负责人")
-    private EMProcessTaskUser responsibleUser;
-
-    @ApiModelProperty(value = "财务人员")
-    private EMProcessTaskUser financeUser;
-
-    @ApiModelProperty(value = "最终确认付款人")
-    private EMProcessTaskUser finalConfirmationUser;
-
-    @ApiModelProperty(value = "出纳人")
-    private EMProcessTaskUser cashierUser;
-
-    @ApiModelProperty(value = "抄送人列表")
-    private List<EMProcessTaskUser> ccUserList;
-
 }

+ 0 - 11
blade-service-api/blade-control-api/src/main/java/org/springblade/control/dto/EMUseCarInfoDTO.java

@@ -2,10 +2,8 @@ package org.springblade.control.dto;
 
 import io.swagger.annotations.ApiModelProperty;
 import lombok.Data;
-import org.springblade.control.entity.EMProcessTaskUser;
 import org.springblade.control.entity.EMUseCarInfo;
 
-import java.util.List;
 
 @Data
 public class EMUseCarInfoDTO extends EMUseCarInfo {
@@ -13,13 +11,4 @@ public class EMUseCarInfoDTO extends EMUseCarInfo {
     @ApiModelProperty(value = "提交状态 1=暂存 2=提交审批")
     private String submitStatus;
 
-    @ApiModelProperty(value = "部门负责人")
-    private EMProcessTaskUser responsibleUser;
-
-    @ApiModelProperty(value = "人事")
-    private EMProcessTaskUser personnelUser;
-
-    @ApiModelProperty(value = "抄送人列表")
-    private List<EMProcessTaskUser> ccUserList;
-
 }

+ 0 - 17
blade-service-api/blade-control-api/src/main/java/org/springblade/control/entity/EMProcessTaskUser.java

@@ -1,17 +0,0 @@
-package org.springblade.control.entity;
-
-import io.swagger.annotations.ApiModelProperty;
-import lombok.Data;
-
-import java.io.Serializable;
-
-@Data
-public class EMProcessTaskUser implements Serializable {
-
-    @ApiModelProperty(value = "userId")
-    private String userId;
-
-    @ApiModelProperty(value = "名称")
-    private String userName;
-
-}

+ 14 - 0
blade-service-api/blade-control-api/src/main/java/org/springblade/control/vo/UseCarDeptVO.java

@@ -0,0 +1,14 @@
+package org.springblade.control.vo;
+
+import lombok.Data;
+
+import java.io.Serializable;
+
+@Data
+public class UseCarDeptVO implements Serializable {
+
+    private Long deptId;
+
+    private String deptName;
+
+}

+ 13 - 0
blade-service-api/blade-control-api/src/main/java/org/springblade/control/vo/UserControlVO.java

@@ -0,0 +1,13 @@
+package org.springblade.control.vo;
+
+import lombok.Data;
+
+import java.io.Serializable;
+
+@Data
+public class UserControlVO implements Serializable {
+
+    private Long id;
+    private String name;
+
+}

+ 3 - 0
blade-service-api/blade-manager-api/src/main/java/org/springblade/manager/feign/ArchiveTreeContractClient.java

@@ -44,4 +44,7 @@ public interface ArchiveTreeContractClient {
 
     @PostMapping(API_PREFIX + "/getFirstNodeByTreeCode")
     ArchiveTreeContract getFirstNodeByTreeCode(@RequestParam Long projectId,@RequestParam Integer type);
+
+    @PostMapping(API_PREFIX + "/getArchiveTreeContractByContractId")
+    ArchiveTreeContract getArchiveTreeContractByContractId(@RequestParam Long contractId);
 }

+ 6 - 0
blade-service/blade-archive/src/main/java/org/springblade/archive/service/impl/ArchivesAutoServiceImpl.java

@@ -704,6 +704,12 @@ public class ArchivesAutoServiceImpl extends BaseServiceImpl<ArchivesAutoMapper,
 			if (node.getAncestors().split(",").length <= 2){
 				//查询当前合同
 				ArchiveTreeContract archiveTreeContract = archiveTreeContractClient.getArchiveTreeContractByNodeName(contractInfo.getContractName());
+				if (archiveTreeContract == null){
+					archiveTreeContract = archiveTreeContractClient.getArchiveTreeContractByContractId(vo.getContractId());
+				}
+				if (archiveTreeContract == null){
+					throw new ServiceException("系统繁忙,请稍后再试");
+				}
 				vo.setNodeId(archiveTreeContract.getId());
 			}
 				list = baseMapper.pageByAuthenticate(page, vo);

+ 62 - 12
blade-service/blade-control/src/main/java/org/springblade/control/controller/ExMaTwoController.java

@@ -8,25 +8,22 @@ import com.github.xiaoymin.knife4j.annotations.ApiOperationSupport;
 import io.swagger.annotations.Api;
 import io.swagger.annotations.ApiOperation;
 import lombok.AllArgsConstructor;
-import org.springblade.control.entity.ContractReturnedInfo;
-import org.springblade.control.entity.ControlProjectInfo;
-import org.springblade.control.entity.EMLoanInfo;
-import org.springblade.control.entity.ProjectCostBudget;
+import org.springblade.control.entity.*;
 import org.springblade.control.service.impl.ContractReturnedInfoServiceImpl;
 import org.springblade.control.service.impl.EMLoanServiceImpl;
 import org.springblade.control.service.impl.ProjectCostBudgetServiceImpl;
 import org.springblade.control.service.impl.ProjectInfoServiceImpl;
 import org.springblade.control.utils.NumberToChinese;
-import org.springblade.control.vo.ExMaByContractReturnedInfoVO;
-import org.springblade.control.vo.ExMaByControlProjectInfoVO;
-import org.springblade.control.vo.ExMaByLoanVO;
-import org.springblade.control.vo.ExMaByProjectCostBudgetVO;
+import org.springblade.control.vo.*;
 import org.springblade.core.boot.ctrl.BladeController;
 import org.springblade.core.log.exception.ServiceException;
 import org.springblade.core.secure.utils.SecureUtil;
 import org.springblade.core.tool.api.R;
+import org.springblade.system.entity.Dept;
 import org.springblade.system.user.entity.User;
 import org.springblade.system.user.feign.IUserClient;
+import org.springframework.jdbc.core.BeanPropertyRowMapper;
+import org.springframework.jdbc.core.JdbcTemplate;
 import org.springframework.web.bind.annotation.GetMapping;
 import org.springframework.web.bind.annotation.RequestMapping;
 import org.springframework.web.bind.annotation.RequestParam;
@@ -34,9 +31,7 @@ import org.springframework.web.bind.annotation.RestController;
 
 import java.math.BigDecimal;
 import java.text.SimpleDateFormat;
-import java.util.Date;
-import java.util.List;
-import java.util.Map;
+import java.util.*;
 import java.util.stream.Collectors;
 
 @RestController
@@ -45,6 +40,7 @@ import java.util.stream.Collectors;
 @Api(value = "费用管理关联业务接口", tags = "费用管理关联业务接口")
 public class ExMaTwoController extends BladeController {
 
+    private final JdbcTemplate jdbcTemplate;
     private final IUserClient iUserClient;
     private final ProjectInfoServiceImpl projectInfoService;
     private final ProjectCostBudgetServiceImpl projectCostBudgetService;
@@ -140,7 +136,6 @@ public class ExMaTwoController extends BladeController {
         return R.data(collect);
     }
 
-
     @GetMapping("/getNumberToChinese")
     @ApiOperationSupport(order = 5)
     @ApiOperation(value = "将数字转换为汉语大写,支持小数点", notes = "传入字符串value")
@@ -151,4 +146,59 @@ public class ExMaTwoController extends BladeController {
         return R.data(null);
     }
 
+    @GetMapping("/getUserList")
+    @ApiOperationSupport(order = 6)
+    @ApiOperation(value = "获取管控系统用户列表(财务报销-归属人、发票管理-开票人)")
+    public R<List<UserControlVO>> getUserList() {
+        List<User> query = jdbcTemplate.query("select id,name,real_name from blade_user where tenant_id = 003077 and is_deleted = 0", new BeanPropertyRowMapper<>(User.class));
+        List<UserControlVO> result = new ArrayList<>();
+        for (User user : query) {
+            UserControlVO vo = new UserControlVO();
+            vo.setId(user.getId());
+            vo.setName(ObjectUtil.isNotEmpty(user.getName()) ? user.getName() : user.getRealName());
+            result.add(vo);
+        }
+        return R.data(result);
+    }
+
+    @GetMapping("/getPayeeUserNameList")
+    @ApiOperationSupport(order = 6)
+    @ApiOperation(value = "获取支付收款人列表")
+    public R<List<String>> getPayeeUserNameList() {
+        List<EMPayInfo> query = jdbcTemplate.query("select payee_user_name from c_expense_pay_info and is_deleted = 0 and is_temp = 1", new BeanPropertyRowMapper<>(EMPayInfo.class));
+        if (query.size() > 0) {
+            return R.data(query.stream().map(EMPayInfo::getPayeeUserName).collect(Collectors.toList()));
+        }
+        return R.data(null);
+    }
+
+    @GetMapping("/getLoanUserNameList")
+    @ApiOperationSupport(order = 6)
+    @ApiOperation(value = "获取借款申请人列表")
+    public R<List<String>> getLoanUserNameList() {
+        List<EMLoanInfo> query = jdbcTemplate.query("select loan_user_name from c_expense_loan_info and is_deleted = 0 and is_temp = 1", new BeanPropertyRowMapper<>(EMLoanInfo.class));
+        if (query.size() > 0) {
+            return R.data(query.stream().map(EMLoanInfo::getLoanUserName).collect(Collectors.toList()));
+        }
+        return R.data(null);
+    }
+
+    @GetMapping("/getUseCarDeptList")
+    @ApiOperationSupport(order = 6)
+    @ApiOperation(value = "获取用车部门列表")
+    public R<List<UseCarDeptVO>> getUseCarDeptList() {
+        List<Dept> query = jdbcTemplate.query("select id,dept_name from blade_dept where tenant_id = 003077 and dept_type = 2", new BeanPropertyRowMapper<>(Dept.class));
+        List<UseCarDeptVO> result = new ArrayList<>();
+        if (query.size() > 0) {
+            for (Dept dept : query) {
+                UseCarDeptVO vo = new UseCarDeptVO();
+                vo.setDeptId(dept.getId());
+                vo.setDeptName(dept.getDeptName());
+                result.add(vo);
+            }
+        }
+        return R.data(result);
+    }
+
+
 }

+ 0 - 2
blade-service/blade-control/src/main/java/org/springblade/control/service/EMFinancialReimbursementService.java

@@ -2,10 +2,8 @@ package org.springblade.control.service;
 
 import com.baomidou.mybatisplus.core.metadata.IPage;
 import org.springblade.control.dto.EMFinancialReimbursementInfoDTO;
-import org.springblade.control.dto.EMFinancialReimbursementInfoDTOBatch;
 import org.springblade.control.entity.EMFinancialReimbursementInfo;
 import org.springblade.control.vo.EMDraftGroupVO;
-import org.springblade.control.vo.EMDraftVO;
 import org.springblade.control.vo.EMFinancialReimbursementInfoVO;
 import org.springblade.core.mp.base.BaseService;
 

+ 8 - 1
blade-service/blade-control/src/main/java/org/springblade/control/service/impl/EMUseCarServiceImpl.java

@@ -20,6 +20,7 @@ import org.springblade.core.secure.utils.SecureUtil;
 import org.springblade.core.tool.utils.BeanUtil;
 import org.springblade.core.tool.utils.Func;
 import org.springblade.core.tool.utils.ObjectUtil;
+import org.springblade.system.entity.Dept;
 import org.springblade.system.user.entity.User;
 import org.springblade.system.user.feign.IUserClient;
 import org.springframework.beans.BeanUtils;
@@ -46,13 +47,19 @@ public class EMUseCarServiceImpl extends BaseServiceImpl<ExMUseCarMapper, EMUseC
         queryWrapper.lambda().eq(EMUseCarInfo::getIsTemp, 1);
         IPage<EMUseCarInfo> pages = this.page(page, queryWrapper.lambda().orderBy(true, true, EMUseCarInfo::getCreateTime));
         Map<Long, String> userMap = iUserClient.selectUserAll().stream().collect(Collectors.toMap(User::getId, User::getRealName));
+        List<Dept> deptList = jdbcTemplate.query("select id,dept_name from blade_dept where tenant_id = 003077 and dept_type = 2", new BeanPropertyRowMapper<>(Dept.class));
         return pages.convert(obj -> {
             EMUseCarInfoVO vo = new EMUseCarInfoVO();
             BeanUtils.copyProperties(obj, vo);
             vo.setCreateName(userMap.get(vo.getCreateUser()));
             vo.setApprovalStatusName(vo.getStatus().equals(1) ? "待审批" : (vo.getStatus().equals(2) ? "已审批" : (vo.getStatus().equals(3) ? "已驳回" : "未上报")));
             vo.setApprovalResultName(vo.getApprovalStatusName().equals("已审批") || vo.getApprovalStatusName().equals("已驳回") ? "已通过" : "未通过");
-            vo.setUcOrgName(""); //TODO 部门
+
+            for (Dept dept : deptList) {
+                if (ObjectUtil.isNotEmpty(obj.getUcOrgId()) && obj.getUcOrgId().equals(dept.getId())) {
+                    vo.setUcOrgName(dept.getDeptName());
+                }
+            }
 
             if (ObjectUtil.isNotEmpty(obj.getUseStartDate()) && ObjectUtil.isNotEmpty(obj.getUseEndDate())) {
                 SimpleDateFormat simpleDateFormat = new SimpleDateFormat("yyyy/MM/dd");

+ 1 - 4
blade-service/blade-control/src/main/java/org/springblade/control/service/impl/LogHistoryServiceImpl.java

@@ -324,10 +324,7 @@ public class LogHistoryServiceImpl extends BaseServiceImpl<LogHistoryMapper, Log
 
                 //审批人
                 List<String> auditUserIds = new LinkedList<>();
-                EMProcessTaskUser responsibleObj = new EMProcessTaskUser(); //部门负责人
-                responsibleObj.setUserId(departmentHead.getId() + "");
-                responsibleObj.setUserName(departmentHead.getRealName());
-                auditUserIds.add(responsibleObj.getUserId());
+                auditUserIds.add(departmentHead.getId() + "");
 
                 List<String> nonEmptyAuditUserIds = new LinkedList<>();
                 for (String userId : auditUserIds) {

+ 28 - 23
blade-service/blade-control/src/main/java/org/springblade/control/service/impl/TaskProcessServiceImpl.java

@@ -69,10 +69,7 @@ public class TaskProcessServiceImpl extends BaseServiceImpl<TaskProcessMapper, T
             queryWrapper.lambda().like(TaskProcessInfo::getAuditUserIds, SecureUtil.getUserId());
             queryWrapper.lambda().eq(TaskProcessInfo::getStatus, 1);
         } else if (dto.getSelectType().equals("2")) { //已审核、已驳回为已办任务
-            queryWrapper.lambda().like(TaskProcessInfo::getAuditUserIds, SecureUtil.getUserId())
-                    .or()
-                    .like(TaskProcessInfo::getAuditUserIdsComplete, SecureUtil.getUserId())
-                    .and(wrapper -> wrapper.in(TaskProcessInfo::getStatus, 2, 3));
+            queryWrapper.lambda().apply("(audit_user_ids_complete LIKE '%" + SecureUtil.getUserId() + "%' AND STATUS IN ( 2, 3 )) OR (audit_user_ids LIKE '%" + SecureUtil.getUserId() + "%' AND STATUS = 3)");
         } else if (dto.getSelectType().equals("3")) { //我发起的任务
             if (ObjectUtil.isNotEmpty(dto.getSelectStatus()) && !dto.getSelectStatus().equals("1")) {
                 queryWrapper.lambda().eq(TaskProcessInfo::getStatus, dto.getSelectStatus());
@@ -332,7 +329,7 @@ public class TaskProcessServiceImpl extends BaseServiceImpl<TaskProcessMapper, T
                 if (!firstUserId.equals(SecureUtil.getUserId() + "")) {
                     User user = iUserClient.userInfoById(Long.parseLong(firstUserId)).getData();
                     bladeRedis.del("user:id=" + SecureUtil.getUserId());//解锁
-                    throw new ServiceException("当前任务的审批人【" + user.getRealName() + "】还未完成审批流程,请稍后再试");
+                    throw new ServiceException("当前任务的审批人【" + user.getRealName() + "】还未完成审批,请稍后再试");
                 }
             }
 
@@ -494,10 +491,7 @@ public class TaskProcessServiceImpl extends BaseServiceImpl<TaskProcessMapper, T
 
                         //审批人
                         List<String> auditUserIds = new LinkedList<>();
-                        EMProcessTaskUser responsibleObj = new EMProcessTaskUser(); //部门负责人
-                        responsibleObj.setUserId(departmentHead.getId() + "");
-                        responsibleObj.setUserName(departmentHead.getRealName());
-                        auditUserIds.add(responsibleObj.getUserId());
+                        auditUserIds.add(departmentHead.getId() + "");
 
                         List<String> nonEmptyAuditUserIds = new LinkedList<>();
                         for (String userId : auditUserIds) {
@@ -530,10 +524,7 @@ public class TaskProcessServiceImpl extends BaseServiceImpl<TaskProcessMapper, T
 
                         //审批人
                         List<String> auditUserIds = new LinkedList<>();
-                        EMProcessTaskUser responsibleObj = new EMProcessTaskUser(); //部门负责人
-                        responsibleObj.setUserId(departmentHead.getId() + "");
-                        responsibleObj.setUserName(departmentHead.getRealName());
-                        auditUserIds.add(responsibleObj.getUserId());
+                        auditUserIds.add(departmentHead.getId() + "");
 
                         List<String> nonEmptyAuditUserIds = new LinkedList<>();
                         for (String userId : auditUserIds) {
@@ -768,15 +759,17 @@ public class TaskProcessServiceImpl extends BaseServiceImpl<TaskProcessMapper, T
         if (user != null && ObjectUtil.isEmpty(user.getIsLeader())) {
             //负责人getIsLeader字段=null,证明不是负责人,那么获取当前部门负责人
             User departmentHead = this.getDepartmentHead(Long.parseLong(SecureUtil.getUser().getDeptId()));
-            auditUserIds.add(departmentHead.getId() + "");
+            if (departmentHead != null) {
+                auditUserIds.add(departmentHead.getId() + "");
+            }
         }
 
-        //获取审批人信息
+        //获取审批人、抄送人信息
         Map<String, List<User>> approveUserMaps = this.getApproveUserMaps(type);
 
         //审批人
-        List<User> spUserList = approveUserMaps.get("SP");
-        if (spUserList.size() == 0) {
+        List<User> spUserList = approveUserMaps.getOrDefault("SP", null);
+        if (spUserList == null || spUserList.size() == 0) {
             throw new ServiceException("获取当前审批流程人员信息失败,请联系管理员");
         }
         auditUserIds.addAll(spUserList.stream().map(User::getId).map(String::valueOf).collect(Collectors.toList()));
@@ -794,8 +787,8 @@ public class TaskProcessServiceImpl extends BaseServiceImpl<TaskProcessMapper, T
         }
 
         //抄送人
-        List<User> zcUserList = approveUserMaps.get("ZC");
-        if (zcUserList.size() > 0) {
+        List<User> zcUserList = approveUserMaps.getOrDefault("ZC", null);
+        if (zcUserList != null && zcUserList.size() > 0) {
             List<String> zcUserIds = zcUserList.stream().map(User::getId).map(String::valueOf).collect(Collectors.toList());
             taskProcessInfo.setCcUserIds(StringUtils.join(zcUserIds, ","));
         }
@@ -915,10 +908,22 @@ public class TaskProcessServiceImpl extends BaseServiceImpl<TaskProcessMapper, T
             }
         }
 
-        List<User> spUserList = jdbcTemplate.query("select * from blade_user where tenant_id = 003077 and dept_id in(" + StringUtils.join(spPostIds, ",") + ")", new BeanPropertyRowMapper<>(User.class));
-        List<User> zcUserList = jdbcTemplate.query("select * from blade_user where tenant_id = 003077 and dept_id in(" + StringUtils.join(zcPostIds, ",") + ")", new BeanPropertyRowMapper<>(User.class));
-        resultMaps.put("SP", spUserList);
-        resultMaps.put("ZC", zcUserList);
+        if (spPostIds.size() > 0) {
+            List<User> spUserListAll = new LinkedList<>();
+            for (String spPostId : spPostIds) {
+                List<User> spUserList = jdbcTemplate.query("select * from blade_user where tenant_id = 003077 and dept_id =" + spPostId, new BeanPropertyRowMapper<>(User.class));
+                spUserListAll.addAll(spUserList);
+            }
+            if (spUserListAll.size() > 0) {
+                resultMaps.put("SP", spUserListAll);
+            }
+        }
+        if (zcPostIds.size() > 0) {
+            List<User> zcUserList = jdbcTemplate.query("select * from blade_user where tenant_id = 003077 and dept_id in(" + StringUtils.join(zcPostIds, ",") + ")", new BeanPropertyRowMapper<>(User.class));
+            if (zcUserList.size() > 0) {
+                resultMaps.put("ZC", zcUserList);
+            }
+        }
         return resultMaps;
     }
 

+ 72 - 29
blade-service/blade-manager/src/main/java/com/mixsmart/utils/CustomFunction.java

@@ -22,6 +22,7 @@ import java.io.FileInputStream;
 import java.math.BigDecimal;
 import java.text.ParseException;
 import java.text.SimpleDateFormat;
+import java.time.LocalDateTime;
 import java.util.*;
 import java.util.concurrent.atomic.AtomicInteger;
 import java.util.regex.Matcher;
@@ -967,40 +968,82 @@ public class CustomFunction {
      * @Date 2021.07.01 09:57
      **/
     public static Object timePassed(Object t1, Object t2, Object mode, Object scale, Object format) {
+        List<Object> result=new ArrayList<>();
         if (t1 != null && t2 != null && StringUtils.isNotEmpty(mode) && StringUtils.isNotEmpty(scale) && StringUtils.isNotEmpty(format)) {
-//			Date d1 = parseDate(t1,handleNull(format));
-//			Date d2 = parseDate(t2,handleNull(format));
-            DateTime d1 = new DateTime(t1.toString());
-            DateTime d2 = new DateTime(t2.toString());
-//			if(d1.after(d2)&&StringUtils.isEquals("H",mode)){
-//				/*假如是计算相差单位是小时,当开始时间大于结束时间,需要考虑跨年的情况*/
-//                   Calendar c =Calendar.getInstance();
-//                   c.setTime(d1);
-//				   c.add(Calendar.YEAR, -1);
-//				   d1=new DateTime(c.getTime());
-//			}
-            long range = d2.getTime() - d1.getTime();
-            long r = 0;
-            if (StringUtils.isEquals("Y", mode.toString())) {
-                r = range / (1000L * 3600 * 24 * 365);
-            } else if (StringUtils.isEquals("M", mode.toString())) {
-                r = range / (1000L * 3600 * 24 * 30);
-            } else if (StringUtils.isEquals("D", mode.toString())) {
-                r = range / (1000L * 3600 * 24);
-            } else if (StringUtils.isEquals("H", mode.toString())) {
-                r = range / (1000L * 3600);
-            } else if (StringUtils.isEquals("m", mode.toString())) {
-                r = range / (1000L * 60);
-            }
-            BigDecimal b = new BigDecimal(r);
-            if (!StringUtils.isNumber(scale)) {
-                scale = 0;
+            LinkedList<Object> list1,list2;
+            if(t1 instanceof  List){
+                 list1 = new LinkedList<Object>((List) t1);
+            }else{
+                 list1= new LinkedList<>();
+                 list1.add(t1);
             }
-            return b.setScale(Integer.parseInt(scale.toString()), ROUND_HALF_UP);
+            if(t2 instanceof  List){
+                list2 = new LinkedList<Object>((List) t2);
+            }else{
+                list2= new LinkedList<>();
+                list2.add(t2);
+            }
+            int n =Math.max(list1.size(),list2.size());
+            for(int i=0;i<n;i++){
+                Object o1=list1.size()>i?list1.get(i):list1.getLast();
+                Object o2=list2.size()>i?list2.get(i):list2.getLast();
+                long range=timeStamp(o1,o2);
+                long r = 0;
+                if (StringUtils.isEquals("Y", mode.toString())) {
+                    r = range / (1000L * 3600 * 24 * 365);
+                } else if (StringUtils.isEquals("M", mode.toString())) {
+                    r = range / (1000L * 3600 * 24 * 30);
+                } else if (StringUtils.isEquals("D", mode.toString())) {
+                    r = range / (1000L * 3600 * 24);
+                } else if (StringUtils.isEquals("H", mode.toString())) {
+                    r = range / (1000L * 3600);
+                } else if (StringUtils.isEquals("m", mode.toString())) {
+                    r = range / (1000L * 60);
+                }
+                BigDecimal b = new BigDecimal(r);
+                if (!StringUtils.isNumber(scale)) {
+                    scale = 0;
+                }
+                if(BigDecimal.ZERO.equals(b)){
+                    result.add("");
+                }else {
+                    result.add(b.setScale(Integer.parseInt(scale.toString()), ROUND_HALF_UP));
+                }
+            }
+
         }
-        return "";
+        return result;
     }
+    public static long timeStamp(Object t1,Object t2){
+        if(StringUtils.isNotEmpty(t1,t2)) {
+            String s1 = t1.toString();
+            String s2 = t2.toString();
+            List<Integer> lsa1= Arrays.stream(s1.replaceAll("[\\s]+","").replaceAll("[\\D]+$","").split("[\\D]+")).map(Integer::parseInt).collect(Collectors.toList());
+            List<Integer> lsa2= Arrays.stream(s2.replaceAll( "[\\s]+","").replaceAll("[\\D]+$", "").split("[\\D]+")).map(Integer::parseInt).collect(Collectors.toList());
+            return list2Stamp(lsa2)-list2Stamp(lsa1);
+        }
+         return 0;
+    }
+    public static long list2Stamp(List<Integer>list){
+        LocalDateTime localDateTime;
+        if(list.size()==6||list.size()==5){
+             localDateTime=LocalDateTime.of(list.get(0),list.get(1),list.get(2),list.get(3),list.get(4),0,0);
+        }else if(list.size()==2){
+            localDateTime=LocalDateTime.now().withHour(list.get(0)).withMinute(list.get(1)).withSecond(0).withNano(0);
+        }else{
+            localDateTime= LocalDateTime.now();
+        }
+      return localDateTime.atZone(java.time.ZoneOffset.UTC)
+              .toInstant()
+              .toEpochMilli();
+    }
+
+/*    public static void main(String[] args) {
+             List<Object> l1 = Arrays.asList("16:00","2023年6月29日 16:10:31","2023年6月29日 16:09");
+             List<Object> l2 = Arrays.asList("2023年6月29日16:50");
+        System.out.println(minutesPassed(l1,l2));
 
+    }*/
 
     public static Object k2d(Object k) {
         Matcher mt = RegexUtils.matcher("[A-Z]*(\\d*)\\+([\\d|\\.]*)", k.toString());

+ 6 - 0
blade-service/blade-manager/src/main/java/org/springblade/manager/feign/ArchiveTreeContractImpl.java

@@ -6,6 +6,7 @@ import org.springblade.archive.vo.ArchivesAutoVO;
 import org.springblade.manager.entity.ArchiveTreeContract;
 import org.springblade.manager.mapper.ArchiveTreeContractMapper;
 import org.springblade.manager.service.IArchiveTreeContractService;
+import org.springframework.web.bind.annotation.RequestParam;
 import org.springframework.web.bind.annotation.RestController;
 
 import java.util.ArrayList;
@@ -96,5 +97,10 @@ public class ArchiveTreeContractImpl implements ArchiveTreeContractClient {
         return contract;
     }
 
+    @Override
+    public ArchiveTreeContract getArchiveTreeContractByContractId(@RequestParam Long contractId) {
+        return archiveTreeContractMapper.getArchiveTreeContractByContractId(contractId);
+    }
+
 
 }

+ 1 - 0
blade-service/blade-manager/src/main/java/org/springblade/manager/mapper/ArchiveTreeContractMapper.java

@@ -107,4 +107,5 @@ public interface ArchiveTreeContractMapper extends BaseMapper<ArchiveTreeContrac
                                               @feign.Param("ancestors") String ancestors,
                                               @feign.Param("fileNumberPrefix") String fileNumberPrefix);
 
+    ArchiveTreeContract getArchiveTreeContractByContractId(@Param("contractId") Long contractId);
 }

+ 7 - 0
blade-service/blade-manager/src/main/java/org/springblade/manager/mapper/ArchiveTreeContractMapper.xml

@@ -466,6 +466,13 @@
         select count(*) from m_archive_tree_contract
         WHERE project_id = #{projectId}) and is_deleted = 0 and from_id is null and like concat('%',#{id},'%')
     </select>
+    <select id="getArchiveTreeContractByContractId"
+            resultType="org.springblade.manager.entity.ArchiveTreeContract">
+        select id from m_archive_tree_contract
+        where contract_id = #{contractId} and is_deleted = 0
+        order by ancestors
+            limit 1
+    </select>
 
     <update id="updateAllSonNodeIdsForArchiveAutoRule">
 

+ 2 - 1
blade-service/blade-manager/src/main/java/org/springblade/manager/mapper/ContractInfoMapper.xml

@@ -276,7 +276,8 @@
         d.wbs_type AS "wbsType",
         d.id,
         d.parent_id AS "parentId",
-        IFNULL(if(length(trim(full_name)) > 0, full_name, node_name),node_name) AS title,
+        -- IFNULL(if(length(trim(full_name)) > 0, full_name, node_name),node_name) AS title,
+        d.node_name AS title,
         d.node_name AS "nodeName",
         d.full_name AS "fullName",
         d.import_matching_info AS "importMatchingInfo",

+ 0 - 1
blade-service/blade-manager/src/main/java/org/springblade/manager/service/IContractInfoService.java

@@ -77,7 +77,6 @@ public interface IContractInfoService extends BaseService<ContractInfo> {
 
     List<WbsTreeContractVO> addNodeTree(String pKeyId);
 
-
     List<ContractInfo> getContractListByProjectId(Long projectId);
 
     R getTreeNodeByValueAndContractId(String queryValue, String contractId);

+ 2 - 2
blade-service/blade-manager/src/main/java/org/springblade/manager/service/impl/FormulaServiceImpl.java

@@ -751,7 +751,7 @@ public class FormulaServiceImpl extends BaseServiceImpl<FormulaMapper, Formula>
                                     for(Map.Entry<String,ElementData> se:tip.entrySet()){
                                         Object value=se.getValue().getValue();
                                         if(CustomFunction.isNumber(value)){
-                                            if(StringUtils.isDouble(value)){
+                                            if(StringUtils.isDouble(value)||f.contains("/")){
                                                 em.put(se.getKey(), new BigDecimal(value.toString()));
                                             }else{
                                                 em.put(se.getKey(),StringUtils.handleObj2Integer(value));
@@ -1183,7 +1183,7 @@ public  List<ElementData> setScale(Integer scale,List<ElementData> data){
         for(FormData fd:tec.formDataList){
             if(fd.verify()){
                 /*保留小数位*/
-                if(fd.getFormula()!=null&&!fd.empty()&&fd.getValues().stream().map(ElementData::getValue).anyMatch(StringUtils::isDouble)){
+                if(fd.getFormula()!=null&&!fd.empty()&&fd.getValues().stream().map(ElementData::getValue).anyMatch(StringUtils::isNumber)){
                     Formula f = fd.getFormula();
                     fd.setValues(setScale(f.getScale(),fd.getValues()));
                 }

+ 1 - 0
blade-service/blade-manager/src/main/java/org/springblade/manager/service/impl/WbsTreeContractServiceImpl.java

@@ -259,6 +259,7 @@ public class WbsTreeContractServiceImpl extends BaseServiceImpl<WbsTreeContractM
                         wbsTreeContract.setContractId(pawDTO.getContractId());
                         wbsTreeContract.setIsConcealedWorksNode(0);
                         wbsTreeContract.setIsTypePrivatePid(wbsTreePrivate.getPKeyId());
+                        wbsTreeContract.setCreateTime(new Date());
                         if (wbsTreePrivate.getType() == 2) {
                             wbsTreeContract.setIsTypePrivatePid(wbsTreePrivate.getPKeyId());
                         }