Browse Source

内控任务相关

liuyc 2 năm trước cách đây
mục cha
commit
569472099d
40 tập tin đã thay đổi với 774 bổ sung397 xóa
  1. 4 0
      blade-service-api/blade-control-api/src/main/java/org/springblade/control/entity/EMFinancialReimbursementInfo.java
  2. 6 0
      blade-service-api/blade-control-api/src/main/java/org/springblade/control/entity/EMInvoiceInfo.java
  3. 5 0
      blade-service-api/blade-control-api/src/main/java/org/springblade/control/entity/EMLoanInfo.java
  4. 4 0
      blade-service-api/blade-control-api/src/main/java/org/springblade/control/entity/EMOutsourcingPayInfo.java
  5. 4 0
      blade-service-api/blade-control-api/src/main/java/org/springblade/control/entity/EMPayInfo.java
  6. 4 2
      blade-service-api/blade-control-api/src/main/java/org/springblade/control/entity/EMProcessTaskUser.java
  7. 4 0
      blade-service-api/blade-control-api/src/main/java/org/springblade/control/entity/EMPurchaseInfo.java
  8. 4 0
      blade-service-api/blade-control-api/src/main/java/org/springblade/control/entity/EMUseCarInfo.java
  9. 1 0
      blade-service-api/blade-control-api/src/main/java/org/springblade/control/entity/ExpenseTaskRecord.java
  10. 1 1
      blade-service-api/blade-control-api/src/main/java/org/springblade/control/vo/TaskProcessDetailBasicsVO.java
  11. 6 5
      blade-service-api/blade-control-api/src/main/java/org/springblade/control/vo/TaskProcessInfoDetailVO.java
  12. 0 46
      blade-service-api/blade-control-api/src/main/java/org/springblade/control/vo/TypeToEMFDetailVO.java
  13. 0 34
      blade-service-api/blade-control-api/src/main/java/org/springblade/control/vo/TypeToTaskPlanDetailVO.java
  14. 9 11
      blade-service/blade-control/src/main/java/org/springblade/control/controller/ExpenseManagerController.java
  15. 1 1
      blade-service/blade-control/src/main/java/org/springblade/control/controller/TaskProcessController.java
  16. 1 1
      blade-service/blade-control/src/main/java/org/springblade/control/mapper/ExMFinancialReimbursementMapper.java
  17. 1 1
      blade-service/blade-control/src/main/java/org/springblade/control/mapper/ExMFinancialReimbursementMapper.xml
  18. 1 1
      blade-service/blade-control/src/main/java/org/springblade/control/mapper/ExMInvoiceMapper.java
  19. 1 1
      blade-service/blade-control/src/main/java/org/springblade/control/mapper/ExMInvoiceMapper.xml
  20. 1 1
      blade-service/blade-control/src/main/java/org/springblade/control/mapper/ExMLoanMapper.java
  21. 1 1
      blade-service/blade-control/src/main/java/org/springblade/control/mapper/ExMLoanMapper.xml
  22. 1 1
      blade-service/blade-control/src/main/java/org/springblade/control/mapper/ExMOutsourcingPayMapper.java
  23. 1 1
      blade-service/blade-control/src/main/java/org/springblade/control/mapper/ExMOutsourcingPayMapper.xml
  24. 1 1
      blade-service/blade-control/src/main/java/org/springblade/control/mapper/ExMPayMapper.java
  25. 1 1
      blade-service/blade-control/src/main/java/org/springblade/control/mapper/ExMPayMapper.xml
  26. 1 1
      blade-service/blade-control/src/main/java/org/springblade/control/mapper/ExMPurchaseMapper.java
  27. 1 1
      blade-service/blade-control/src/main/java/org/springblade/control/mapper/ExMPurchaseMapper.xml
  28. 1 1
      blade-service/blade-control/src/main/java/org/springblade/control/mapper/ExMUseCarMapper.java
  29. 1 1
      blade-service/blade-control/src/main/java/org/springblade/control/mapper/ExMUseCarMapper.xml
  30. 1 1
      blade-service/blade-control/src/main/java/org/springblade/control/service/EMInvoiceService.java
  31. 49 17
      blade-service/blade-control/src/main/java/org/springblade/control/service/impl/AttendanceTripServiceImpl.java
  32. 87 26
      blade-service/blade-control/src/main/java/org/springblade/control/service/impl/EMFinancialReimbursementServiceImpl.java
  33. 97 79
      blade-service/blade-control/src/main/java/org/springblade/control/service/impl/EMInvoiceServiceImpl.java
  34. 90 23
      blade-service/blade-control/src/main/java/org/springblade/control/service/impl/EMLoanServiceImpl.java
  35. 57 26
      blade-service/blade-control/src/main/java/org/springblade/control/service/impl/EMOutsourcingPayServiceImpl.java
  36. 57 26
      blade-service/blade-control/src/main/java/org/springblade/control/service/impl/EMPayServiceImpl.java
  37. 57 26
      blade-service/blade-control/src/main/java/org/springblade/control/service/impl/EMPurchaseServiceImpl.java
  38. 58 28
      blade-service/blade-control/src/main/java/org/springblade/control/service/impl/EMUseCarServiceImpl.java
  39. 122 31
      blade-service/blade-control/src/main/java/org/springblade/control/service/impl/TaskProcessServiceImpl.java
  40. 32 0
      blade-service/blade-control/src/main/java/org/springblade/control/utils/BuildSerialUtils.java

+ 4 - 0
blade-service-api/blade-control-api/src/main/java/org/springblade/control/entity/EMFinancialReimbursementInfo.java

@@ -61,4 +61,8 @@ public class EMFinancialReimbursementInfo extends BaseEntity {
     @ApiModelProperty(value = "实际报销金额")
     private BigDecimal frMoneyActual;
 
+    @ApiModelProperty(value = "暂存草稿数据 0=暂存 1=提交")
+    private Integer isTemp;
+
+
 }

+ 6 - 0
blade-service-api/blade-control-api/src/main/java/org/springblade/control/entity/EMInvoiceInfo.java

@@ -18,6 +18,9 @@ public class EMInvoiceInfo extends BaseEntity {
 
     private static final long serialVersionUID = 1L;
 
+    @ApiModelProperty(value = "发票编号")
+    private String invoiceNumber;
+
     @ApiModelProperty(value = "申请日期")
     @JsonFormat(shape = JsonFormat.Shape.STRING, pattern = "yyyy-MM-dd", timezone = "GMT+8")
     private Date invoiceDate;
@@ -43,4 +46,7 @@ public class EMInvoiceInfo extends BaseEntity {
     @ApiModelProperty(value = "发票pdf")
     private String invoicePdfUrl;
 
+    @ApiModelProperty(value = "暂存草稿数据 0=暂存 1=提交")
+    private Integer isTemp;
+
 }

+ 5 - 0
blade-service-api/blade-control-api/src/main/java/org/springblade/control/entity/EMLoanInfo.java

@@ -17,6 +17,9 @@ public class EMLoanInfo extends BaseEntity {
 
     private static final long serialVersionUID = 1L;
 
+    @ApiModelProperty(value = "借款编号")
+    private String loanNumber;
+
     @ApiModelProperty(value = "申请人")
     private String loanUserName;
 
@@ -37,5 +40,7 @@ public class EMLoanInfo extends BaseEntity {
     @ApiModelProperty(value = "备注")
     private String remarks;
 
+    @ApiModelProperty(value = "暂存草稿数据 0=暂存 1=提交")
+    private Integer isTemp;
 
 }

+ 4 - 0
blade-service-api/blade-control-api/src/main/java/org/springblade/control/entity/EMOutsourcingPayInfo.java

@@ -36,4 +36,8 @@ public class EMOutsourcingPayInfo extends BaseEntity {
     @ApiModelProperty(value = "外包类型")
     private Integer outsourcingType;
 
+    @ApiModelProperty(value = "暂存草稿数据 0=暂存 1=提交")
+    private Integer isTemp;
+
+
 }

+ 4 - 0
blade-service-api/blade-control-api/src/main/java/org/springblade/control/entity/EMPayInfo.java

@@ -61,4 +61,8 @@ public class EMPayInfo extends BaseEntity {
     @ApiModelProperty(value = "备注")
     private String remarks;
 
+    @ApiModelProperty(value = "暂存草稿数据 0=暂存 1=提交")
+    private Integer isTemp;
+
+
 }

+ 4 - 2
blade-service-api/blade-control-api/src/main/java/org/springblade/control/entity/EMProcessTaskUser.java

@@ -3,10 +3,12 @@ package org.springblade.control.entity;
 import io.swagger.annotations.ApiModelProperty;
 import lombok.Data;
 
+import java.io.Serializable;
+
 @Data
-public class EMProcessTaskUser {
+public class EMProcessTaskUser implements Serializable {
 
-    @ApiModelProperty(value = "id")
+    @ApiModelProperty(value = "userId")
     private String userId;
 
     @ApiModelProperty(value = "名称")

+ 4 - 0
blade-service-api/blade-control-api/src/main/java/org/springblade/control/entity/EMPurchaseInfo.java

@@ -48,4 +48,8 @@ public class EMPurchaseInfo extends BaseEntity {
     @ApiModelProperty(value = "备注")
     private String remarks;
 
+    @ApiModelProperty(value = "暂存草稿数据 0=暂存 1=提交")
+    private Integer isTemp;
+
+
 }

+ 4 - 0
blade-service-api/blade-control-api/src/main/java/org/springblade/control/entity/EMUseCarInfo.java

@@ -52,4 +52,8 @@ public class EMUseCarInfo extends BaseEntity {
     @ApiModelProperty(value = "照片url")
     private String photoUrl;
 
+    @ApiModelProperty(value = "暂存草稿数据 0=暂存 1=提交")
+    private Integer isTemp;
+
+
 }

+ 1 - 0
blade-service-api/blade-control-api/src/main/java/org/springblade/control/entity/ExpenseTaskRecord.java

@@ -12,5 +12,6 @@ public class ExpenseTaskRecord implements Serializable {
     private Long id;
     private Long taskId;
     private Long expenseInfoId;
+    private Integer expenseInfoType;
 
 }

+ 1 - 1
blade-service-api/blade-control-api/src/main/java/org/springblade/control/vo/TypeToTaskProcessDetailBasicsVO.java → blade-service-api/blade-control-api/src/main/java/org/springblade/control/vo/TaskProcessDetailBasicsVO.java

@@ -10,7 +10,7 @@ import java.util.Date;
  * 审批详情-基础信息vo
  */
 @Data
-public class TypeToTaskProcessDetailBasicsVO implements Serializable {
+public class TaskProcessDetailBasicsVO implements Serializable {
 
     @ApiModelProperty(value = "审批任务id")
     private Long taskId;

+ 6 - 5
blade-service-api/blade-control-api/src/main/java/org/springblade/control/vo/TaskProcessInfoDetailVO.java

@@ -4,6 +4,7 @@ import io.swagger.annotations.ApiModelProperty;
 import lombok.Data;
 
 import java.io.Serializable;
+import java.util.List;
 
 
 /**
@@ -13,12 +14,12 @@ import java.io.Serializable;
 public class TaskProcessInfoDetailVO implements Serializable {
 
     @ApiModelProperty(value = "审批任务详情-基础信息")
-    private TypeToTaskProcessDetailBasicsVO basicsInfo;
+    private TaskProcessDetailBasicsVO basicsInfo;
 
-    @ApiModelProperty(value = "审批任务详情-计划类型任务")
-    private TypeToTaskPlanDetailVO toTaskPlanDetailVO;
+    @ApiModelProperty(value = "计划任务信息集合")
+    private List<TaskPlanInfoVO> planTaskInfoList;
 
-    @ApiModelProperty(value = "审批任务详情-财务、采购、外包、支付、借款类型任务")
-    private TypeToEMFDetailVO typeToEMFDetailVO;
+    @ApiModelProperty(value = "其他信息")
+    private Object otherInfo;
 
 }

+ 0 - 46
blade-service-api/blade-control-api/src/main/java/org/springblade/control/vo/TypeToEMFDetailVO.java

@@ -1,46 +0,0 @@
-package org.springblade.control.vo;
-
-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;
-import java.util.List;
-
-/**
- * 审批详情-财务、采购、外包、支付、借款vo
- */
-@Data
-public class TypeToEMFDetailVO implements Serializable {
-
-    @ApiModelProperty(value = "计划任务信息")
-    private List<TaskPlanInfoVO> TaskInfoList;
-
-    @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 frTypeName;
-
-    @ApiModelProperty(value = "费用说明")
-    private String frDesc;
-
-    @ApiModelProperty(value = "电子发票url地址")
-    private String frElectronicInvoiceUrl;
-
-    @ApiModelProperty(value = "附件url地址")
-    private String frAttachmentUrl;
-
-    @ApiModelProperty(value = "归属人")
-    private String userNameVesting;
-
-    @ApiModelProperty(value = "备注")
-    private String remark;
-
-}

+ 0 - 34
blade-service-api/blade-control-api/src/main/java/org/springblade/control/vo/TypeToTaskPlanDetailVO.java

@@ -1,34 +0,0 @@
-package org.springblade.control.vo;
-
-import com.fasterxml.jackson.annotation.JsonFormat;
-import io.swagger.annotations.ApiModelProperty;
-import lombok.Data;
-
-import java.io.Serializable;
-import java.util.Date;
-import java.util.List;
-
-
-/**
- * 审批详情-计划任务类型vo
- */
-@Data
-public class TypeToTaskPlanDetailVO implements Serializable {
-
-    @ApiModelProperty(value = "计划任务信息")
-    private List<TaskPlanInfoVO> TaskInfoList;
-
-    @ApiModelProperty(value = "变更类型")
-    private String statusTypeName;
-
-    @ApiModelProperty(value = "转移时间")
-    @JsonFormat(shape = JsonFormat.Shape.STRING, pattern = "yyyy-MM-dd", timezone = "GMT+8")
-    private Date toUpdateTime;
-
-    @ApiModelProperty(value = "转移对象")
-    private String toUserName;
-
-    @ApiModelProperty(value = "转移原因")
-    private String toDesc;
-
-}

+ 9 - 11
blade-service/blade-control/src/main/java/org/springblade/control/controller/ExpenseManagerController.java

@@ -13,9 +13,7 @@ import org.springblade.core.mp.support.Condition;
 import org.springblade.core.mp.support.Query;
 import org.springblade.core.tool.api.R;
 import org.springframework.web.bind.annotation.*;
-import org.springframework.web.multipart.MultipartFile;
 
-import java.io.IOException;
 import java.util.List;
 
 @RestController
@@ -35,7 +33,7 @@ public class ExpenseManagerController extends BladeController {
     @PostMapping("/financial/page")
     @ApiOperationSupport(order = 1)
     @ApiOperation(value = "财务报销分页查询", notes = "传入EMFinancialReimbursementInfoDTO、Query")
-    public R<IPage<EMFinancialReimbursementInfoVO>> financialPage(EMFinancialReimbursementInfoDTO dto, Query query) {
+    public R<IPage<EMFinancialReimbursementInfoVO>> financialPage(@RequestBody EMFinancialReimbursementInfoDTO dto, Query query) {
         return R.data(financialReimbursementService.financialPage(Condition.getPage(query), dto));
     }
 
@@ -77,7 +75,7 @@ public class ExpenseManagerController extends BladeController {
     @PostMapping("/pay/page")
     @ApiOperationSupport(order = 7)
     @ApiOperation(value = "支付申请分页查询", notes = "传入EMPayInfoDTO、Query")
-    public R<IPage<EMPayInfoVO>> payPage(EMPayInfoDTO dto, Query query) {
+    public R<IPage<EMPayInfoVO>> payPage(@RequestBody EMPayInfoDTO dto, Query query) {
         return R.data(payService.payPage(Condition.getPage(query), dto));
     }
 
@@ -119,7 +117,7 @@ public class ExpenseManagerController extends BladeController {
     @PostMapping("/loan/page")
     @ApiOperationSupport(order = 13)
     @ApiOperation(value = "借款申请分页查询", notes = "传入EMLoanInfoDTO、Query")
-    public R<IPage<EMLoanInfoVO>> loanPage(EMLoanInfoDTO dto, Query query) {
+    public R<IPage<EMLoanInfoVO>> loanPage(@RequestBody EMLoanInfoDTO dto, Query query) {
         return R.data(loanService.loanPage(Condition.getPage(query), dto));
     }
 
@@ -161,7 +159,7 @@ public class ExpenseManagerController extends BladeController {
     @PostMapping("/purchase/page")
     @ApiOperationSupport(order = 19)
     @ApiOperation(value = "采购申请分页查询", notes = "传入EMPurchaseInfoDTO、Query")
-    public R<IPage<EMPurchaseInfoVO>> purchasePage(EMPurchaseInfoDTO dto, Query query) {
+    public R<IPage<EMPurchaseInfoVO>> purchasePage(@RequestBody EMPurchaseInfoDTO dto, Query query) {
         return R.data(purchaseService.purchasePage(Condition.getPage(query), dto));
     }
 
@@ -203,7 +201,7 @@ public class ExpenseManagerController extends BladeController {
     @PostMapping("/car/page")
     @ApiOperationSupport(order = 25)
     @ApiOperation(value = "用车申请分页查询", notes = "传入EMUseCarInfoDTO、Query")
-    public R<IPage<EMUseCarInfoVO>> carPage(EMUseCarInfoDTO dto, Query query) {
+    public R<IPage<EMUseCarInfoVO>> carPage(@RequestBody EMUseCarInfoDTO dto, Query query) {
         return R.data(useCarService.carPage(Condition.getPage(query), dto));
     }
 
@@ -245,7 +243,7 @@ public class ExpenseManagerController extends BladeController {
     @PostMapping("/invoice/page")
     @ApiOperationSupport(order = 31)
     @ApiOperation(value = "发票申请分页查询", notes = "传入EMInvoiceInfoDTO、Query")
-    public R<IPage<EMInvoiceInfoVO>> invoicePage(EMInvoiceInfoDTO dto, Query query) {
+    public R<IPage<EMInvoiceInfoVO>> invoicePage(@RequestBody EMInvoiceInfoDTO dto, Query query) {
         return R.data(invoiceService.invoicePage(Condition.getPage(query), dto));
     }
 
@@ -287,8 +285,8 @@ public class ExpenseManagerController extends BladeController {
     @GetMapping("/invoice/upload")
     @ApiOperationSupport(order = 37)
     @ApiOperation(value = "发票pdf上传", notes = "传入发票申请信息id、文件file")
-    public R<Object> invoiceUpload(@RequestParam Long id, @RequestParam MultipartFile file) throws IOException {
-        return R.status(invoiceService.invoiceUpload(id, file));
+    public R<Object> invoiceUpload(@RequestParam Long id, @RequestParam String pdfUrl) {
+        return R.status(invoiceService.invoiceUpload(id, pdfUrl));
     }
 
     @GetMapping("/invoice/pdf")
@@ -301,7 +299,7 @@ public class ExpenseManagerController extends BladeController {
     @PostMapping("/outsourcing/page")
     @ApiOperationSupport(order = 39)
     @ApiOperation(value = "外包支付申请分页查询", notes = "传入EMOutsourcingPayInfoDTO、Query")
-    public R<IPage<EMOutsourcingPayInfoVO>> outsourcingPage(EMOutsourcingPayInfoDTO dto, Query query) {
+    public R<IPage<EMOutsourcingPayInfoVO>> outsourcingPage(@RequestBody EMOutsourcingPayInfoDTO dto, Query query) {
         return R.data(outsourcingPayService.outsourcingPage(Condition.getPage(query), dto));
     }
 

+ 1 - 1
blade-service/blade-control/src/main/java/org/springblade/control/controller/TaskProcessController.java

@@ -27,7 +27,7 @@ public class TaskProcessController extends BladeController {
     @PostMapping("/task/page")
     @ApiOperationSupport(order = 1)
     @ApiOperation(value = "审批管理任务分页查询", notes = "传入TaskProcessInfoDTO、Query")
-    public R<IPage<TaskProcessInfoVO>> taskPage(TaskProcessInfoDTO dto, Query query) {
+    public R<IPage<TaskProcessInfoVO>> taskPage(@RequestBody TaskProcessInfoDTO dto, Query query) {
         return R.data(taskProcessService.taskPage(Condition.getPage(query), dto));
     }
 

+ 1 - 1
blade-service/blade-control/src/main/java/org/springblade/control/mapper/EMFinancialReimbursementMapper.java → blade-service/blade-control/src/main/java/org/springblade/control/mapper/ExMFinancialReimbursementMapper.java

@@ -3,6 +3,6 @@ package org.springblade.control.mapper;
 import com.baomidou.mybatisplus.core.mapper.BaseMapper;
 import org.springblade.control.entity.EMFinancialReimbursementInfo;
 
-public interface EMFinancialReimbursementMapper extends BaseMapper<EMFinancialReimbursementInfo> {
+public interface ExMFinancialReimbursementMapper extends BaseMapper<EMFinancialReimbursementInfo> {
 
 }

+ 1 - 1
blade-service/blade-control/src/main/java/org/springblade/control/mapper/EMFinancialReimbursementMapper.xml → blade-service/blade-control/src/main/java/org/springblade/control/mapper/ExMFinancialReimbursementMapper.xml

@@ -1,6 +1,6 @@
 <?xml version="1.0" encoding="UTF-8"?>
 <!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
-<mapper namespace="org.springblade.control.mapper.EMFinancialReimbursementMapper">
+<mapper namespace="org.springblade.control.mapper.ExMFinancialReimbursementMapper">
 
     <!-- 通用查询映射结果 -->
     <resultMap id="resultMap" type="org.springblade.control.entity.EMFinancialReimbursementInfo">

+ 1 - 1
blade-service/blade-control/src/main/java/org/springblade/control/mapper/EMInvoiceMapper.java → blade-service/blade-control/src/main/java/org/springblade/control/mapper/ExMInvoiceMapper.java

@@ -3,5 +3,5 @@ package org.springblade.control.mapper;
 import com.baomidou.mybatisplus.core.mapper.BaseMapper;
 import org.springblade.control.entity.EMInvoiceInfo;
 
-public interface EMInvoiceMapper extends BaseMapper<EMInvoiceInfo> {
+public interface ExMInvoiceMapper extends BaseMapper<EMInvoiceInfo> {
 }

+ 1 - 1
blade-service/blade-control/src/main/java/org/springblade/control/mapper/EMInvoiceMapper.xml → blade-service/blade-control/src/main/java/org/springblade/control/mapper/ExMInvoiceMapper.xml

@@ -1,6 +1,6 @@
 <?xml version="1.0" encoding="UTF-8"?>
 <!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
-<mapper namespace="org.springblade.control.mapper.EMInvoiceMapper">
+<mapper namespace="org.springblade.control.mapper.ExMInvoiceMapper">
 
     <!-- 通用查询映射结果 -->
     <resultMap id="resultMap" type="org.springblade.control.entity.EMInvoiceInfo">

+ 1 - 1
blade-service/blade-control/src/main/java/org/springblade/control/mapper/EMLoanMapper.java → blade-service/blade-control/src/main/java/org/springblade/control/mapper/ExMLoanMapper.java

@@ -3,5 +3,5 @@ package org.springblade.control.mapper;
 import com.baomidou.mybatisplus.core.mapper.BaseMapper;
 import org.springblade.control.entity.EMLoanInfo;
 
-public interface EMLoanMapper extends BaseMapper<EMLoanInfo> {
+public interface ExMLoanMapper extends BaseMapper<EMLoanInfo> {
 }

+ 1 - 1
blade-service/blade-control/src/main/java/org/springblade/control/mapper/EMLoanMapper.xml → blade-service/blade-control/src/main/java/org/springblade/control/mapper/ExMLoanMapper.xml

@@ -1,6 +1,6 @@
 <?xml version="1.0" encoding="UTF-8"?>
 <!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
-<mapper namespace="org.springblade.control.mapper.EMLoanMapper">
+<mapper namespace="org.springblade.control.mapper.ExMLoanMapper">
 
     <!-- 通用查询映射结果 -->
     <resultMap id="resultMap" type="org.springblade.control.entity.EMLoanInfo">

+ 1 - 1
blade-service/blade-control/src/main/java/org/springblade/control/mapper/EMOutsourcingPayMapper.java → blade-service/blade-control/src/main/java/org/springblade/control/mapper/ExMOutsourcingPayMapper.java

@@ -3,5 +3,5 @@ package org.springblade.control.mapper;
 import com.baomidou.mybatisplus.core.mapper.BaseMapper;
 import org.springblade.control.entity.EMOutsourcingPayInfo;
 
-public interface EMOutsourcingPayMapper extends BaseMapper<EMOutsourcingPayInfo> {
+public interface ExMOutsourcingPayMapper extends BaseMapper<EMOutsourcingPayInfo> {
 }

+ 1 - 1
blade-service/blade-control/src/main/java/org/springblade/control/mapper/EMOutsourcingPayMapper.xml → blade-service/blade-control/src/main/java/org/springblade/control/mapper/ExMOutsourcingPayMapper.xml

@@ -1,6 +1,6 @@
 <?xml version="1.0" encoding="UTF-8"?>
 <!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
-<mapper namespace="org.springblade.control.mapper.EMOutsourcingPayMapper">
+<mapper namespace="org.springblade.control.mapper.ExMOutsourcingPayMapper">
 
     <!-- 通用查询映射结果 -->
     <resultMap id="resultMap" type="org.springblade.control.entity.EMOutsourcingPayInfo">

+ 1 - 1
blade-service/blade-control/src/main/java/org/springblade/control/mapper/EMPayMapper.java → blade-service/blade-control/src/main/java/org/springblade/control/mapper/ExMPayMapper.java

@@ -3,6 +3,6 @@ package org.springblade.control.mapper;
 import com.baomidou.mybatisplus.core.mapper.BaseMapper;
 import org.springblade.control.entity.EMPayInfo;
 
-public interface EMPayMapper extends BaseMapper<EMPayInfo> {
+public interface ExMPayMapper extends BaseMapper<EMPayInfo> {
 
 }

+ 1 - 1
blade-service/blade-control/src/main/java/org/springblade/control/mapper/EMPayMapper.xml → blade-service/blade-control/src/main/java/org/springblade/control/mapper/ExMPayMapper.xml

@@ -1,6 +1,6 @@
 <?xml version="1.0" encoding="UTF-8"?>
 <!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
-<mapper namespace="org.springblade.control.mapper.EMPayMapper">
+<mapper namespace="org.springblade.control.mapper.ExMPayMapper">
 
     <!-- 通用查询映射结果 -->
     <resultMap id="resultMap" type="org.springblade.control.entity.EMPayInfo">

+ 1 - 1
blade-service/blade-control/src/main/java/org/springblade/control/mapper/EMPurchaseMapper.java → blade-service/blade-control/src/main/java/org/springblade/control/mapper/ExMPurchaseMapper.java

@@ -3,5 +3,5 @@ package org.springblade.control.mapper;
 import com.baomidou.mybatisplus.core.mapper.BaseMapper;
 import org.springblade.control.entity.EMPurchaseInfo;
 
-public interface EMPurchaseMapper extends BaseMapper<EMPurchaseInfo> {
+public interface ExMPurchaseMapper extends BaseMapper<EMPurchaseInfo> {
 }

+ 1 - 1
blade-service/blade-control/src/main/java/org/springblade/control/mapper/EMPurchaseMapper.xml → blade-service/blade-control/src/main/java/org/springblade/control/mapper/ExMPurchaseMapper.xml

@@ -1,6 +1,6 @@
 <?xml version="1.0" encoding="UTF-8"?>
 <!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
-<mapper namespace="org.springblade.control.mapper.EMPurchaseMapper">
+<mapper namespace="org.springblade.control.mapper.ExMPurchaseMapper">
 
     <!-- 通用查询映射结果 -->
     <resultMap id="resultMap" type="org.springblade.control.entity.EMPurchaseInfo">

+ 1 - 1
blade-service/blade-control/src/main/java/org/springblade/control/mapper/EMUseCarMapper.java → blade-service/blade-control/src/main/java/org/springblade/control/mapper/ExMUseCarMapper.java

@@ -3,5 +3,5 @@ package org.springblade.control.mapper;
 import com.baomidou.mybatisplus.core.mapper.BaseMapper;
 import org.springblade.control.entity.EMUseCarInfo;
 
-public interface EMUseCarMapper extends BaseMapper<EMUseCarInfo> {
+public interface ExMUseCarMapper extends BaseMapper<EMUseCarInfo> {
 }

+ 1 - 1
blade-service/blade-control/src/main/java/org/springblade/control/mapper/EMUseCarMapper.xml → blade-service/blade-control/src/main/java/org/springblade/control/mapper/ExMUseCarMapper.xml

@@ -1,6 +1,6 @@
 <?xml version="1.0" encoding="UTF-8"?>
 <!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
-<mapper namespace="org.springblade.control.mapper.EMUseCarMapper">
+<mapper namespace="org.springblade.control.mapper.ExMUseCarMapper">
 
     <!-- 通用查询映射结果 -->
     <resultMap id="resultMap" type="org.springblade.control.entity.EMUseCarInfo">

+ 1 - 1
blade-service/blade-control/src/main/java/org/springblade/control/service/EMInvoiceService.java

@@ -25,7 +25,7 @@ public interface EMInvoiceService extends BaseService<EMInvoiceInfo> {
 
     boolean invoiceCancel(Long id);
 
-    boolean invoiceUpload(Long id, MultipartFile file) throws IOException;
+    boolean invoiceUpload(Long id, String pdfUrl);
 
     Object invoicePdf(Long id);
 

+ 49 - 17
blade-service/blade-control/src/main/java/org/springblade/control/service/impl/AttendanceTripServiceImpl.java

@@ -58,7 +58,7 @@ public class AttendanceTripServiceImpl extends BaseServiceImpl<AttendanceTripMap
             vo.setFellowTravelerUserNames(StringUtils.join(names, "、"));
             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.setApprovalResultName(vo.getApprovalStatusName().equals("已审批") || vo.getApprovalStatusName().equals("已驳回") ? "已通过" : "未通过");
             return vo;
         });
     }
@@ -82,7 +82,7 @@ public class AttendanceTripServiceImpl extends BaseServiceImpl<AttendanceTripMap
         for (AttendanceTripInfo obj : list) {
             EMDraftVO vo = new EMDraftVO();
             vo.setId(obj.getId());
-            userMaps.get(obj.getCreateUser()).stream().findAny().ifPresent(user -> vo.setTitle((ObjectUtil.isNotEmpty(user) && ObjectUtil.isNotEmpty(user.getRealName())) ? user.getRealName() + obj.getCreateUser() + "提交的商旅出差" : ""));
+            userMaps.get(obj.getCreateUser()).stream().findAny().ifPresent(user -> vo.setTitle((ObjectUtil.isNotEmpty(user) && ObjectUtil.isNotEmpty(user.getRealName())) ? user.getRealName() + "提交的商旅出差" : ""));
             vo.setUpdateTime(obj.getUpdateTime());
             resultVOS.add(vo);
         }
@@ -101,17 +101,40 @@ public class AttendanceTripServiceImpl extends BaseServiceImpl<AttendanceTripMap
 
     @Override
     public boolean tripSubmit(AttendanceTripInfoDTO dto) {
+        if (ObjectUtil.isEmpty(SecureUtil.getUser())) {
+            throw new ServiceException("获取当前用户信息失败,请联系管理员");
+        }
+        boolean var = false;
         if (("1").equals(dto.getSubmitStatus())) {
+            if (ObjectUtil.isNotEmpty(dto.getId())) {
+                AttendanceTripInfo obj = baseMapper.selectById(dto.getId());
+                if (obj != null && obj.getStatus() == 3) {
+                    //如果是已驳回任务,那么重新生成新的记录信息
+                    dto.setId(SnowFlakeUtil.getId());
+                    var = true;
+                }
+            }
             dto.setIsDeleted(1); //暂存
             dto.setStatus(0); //未上报
-            this.saveOrUpdate(dto);
+            if (var) {
+                this.save(dto);
+            } else {
+                this.saveOrUpdate(dto);
+            }
             return true;
 
         } else if (("2").equals(dto.getSubmitStatus())) { //提交审批
-            if (ObjectUtil.isNotEmpty(dto.getId()) && !new Integer(0).equals(dto.getStatus())) {
-                throw new ServiceException("当前填报的信息不是未上报状态,不允许操作!");
+            if (ObjectUtil.isNotEmpty(dto.getId())) {
+                AttendanceTripInfo obj = baseMapper.selectById(dto.getId());
+                if (obj != null && (obj.getStatus() != 0 && obj.getStatus() != 3)) {
+                    throw new ServiceException("当前填报的信息不是未上报、已驳回状态,不允许操作!");
+                } else if (obj != null && obj.getStatus() == 3) {
+                    //如果是已驳回任务,那么重新生成新的记录信息
+                    dto.setId(SnowFlakeUtil.getId());
+                    var = true;
+                }
             }
-            if (ObjectUtil.isNotEmpty(dto.getResponsibleUser()) && ObjectUtil.isNotEmpty(dto.getCcUserList())) {
+            if (ObjectUtil.isNotEmpty(dto.getResponsibleUser()) && ObjectUtil.isNotEmpty(dto.getPersonnelUser())) {
                 //新增审批任务
                 if (ObjectUtil.isEmpty(SecureUtil.getUserName())) {
                     throw new ServiceException("获取当前用户信息失败,请联系管理员");
@@ -134,17 +157,23 @@ public class AttendanceTripServiceImpl extends BaseServiceImpl<AttendanceTripMap
                 taskProcessInfo.setAuditUserIds(StringUtils.join(auditUserIds, ","));
 
                 //抄送人
-                List<String> ccUserObjList = dto.getCcUserList().stream().map(EMProcessTaskUser::getUserId).collect(Collectors.toList());
-                taskProcessInfo.setCcUserIds(StringUtils.join(ccUserObjList, ","));
+                if (ObjectUtil.isNotEmpty(dto.getCcUserList())) {
+                    List<String> ccUserObjList = dto.getCcUserList().stream().map(EMProcessTaskUser::getUserId).collect(Collectors.toList());
+                    taskProcessInfo.setCcUserIds(StringUtils.join(ccUserObjList, ","));
+                }
                 taskProcessService.save(taskProcessInfo);
 
                 //新增信息
                 dto.setIsDeleted(0); //提交
                 dto.setStatus(1); //待审批
-                this.saveOrUpdate(dto);
+                if (var) {
+                    this.save(dto);
+                } else {
+                    this.saveOrUpdate(dto);
+                }
 
                 //新增审批任务关联信息
-                jdbcTemplate.execute("insert into c_expense_task_record(id,task_id,expense_info_id) values (" + SnowFlakeUtil.getId() + "," + taskProcessInfo.getId() + "," + dto.getId() + ")");
+                jdbcTemplate.execute("delete from c_expense_task_record where task_id = " + taskProcessInfo.getId() + " and expense_info_id = " + dto.getId() + " ; insert into c_expense_task_record(id,task_id,expense_info_id,expense_info_type) values (" + SnowFlakeUtil.getId() + "," + taskProcessInfo.getId() + "," + dto.getId() + ",9)");
 
                 //关联项目id,项目计划预算等,在任务闭环时计算推送 TODO
 
@@ -167,13 +196,16 @@ public class AttendanceTripServiceImpl extends BaseServiceImpl<AttendanceTripMap
         AttendanceTripInfo obj = baseMapper.selectById(id);
         if (obj != null && obj.getStatus().equals(1)) {
             //查询记录任务关联信息
-            ExpenseTaskRecord record = jdbcTemplate.query("select * from c_expense_task_record where expense_info_id = " + id, new BeanPropertyRowMapper<>(ExpenseTaskRecord.class)).stream().findAny().orElse(null);
-            if (record != null) {
-                //删除上报的审批任务
-                jdbcTemplate.execute("delete from c_task_process_info where id = " + record.getTaskId());
-
-                //删除记录任务关联信息
-                jdbcTemplate.execute("delete from c_expense_task_record where expense_info_id = " + id + " and task_id = " + record.getTaskId());
+            //查询记录任务关联信息
+            List<ExpenseTaskRecord> records = jdbcTemplate.query("select * from c_expense_task_record where expense_info_id = " + id, new BeanPropertyRowMapper<>(ExpenseTaskRecord.class));
+            if (records.size() > 0) {
+                for (ExpenseTaskRecord record : records) {
+                    //删除上报的审批任务
+                    jdbcTemplate.execute("delete from c_task_process_info where id = " + record.getTaskId());
+
+                    //删除记录任务关联信息
+                    jdbcTemplate.execute("delete from c_expense_task_record where expense_info_id = " + id + " and task_id = " + record.getTaskId());
+                }
 
                 //修改当前记录为未上报状态,且暂存
                 this.update(Wrappers.<AttendanceTripInfo>lambdaUpdate().set(AttendanceTripInfo::getStatus, 0).set(AttendanceTripInfo::getIsDeleted, 1).eq(AttendanceTripInfo::getId, id));

+ 87 - 26
blade-service/blade-control/src/main/java/org/springblade/control/service/impl/EMFinancialReimbursementServiceImpl.java

@@ -9,8 +9,9 @@ import org.apache.commons.lang.StringUtils;
 import org.springblade.common.utils.SnowFlakeUtil;
 import org.springblade.control.dto.EMFinancialReimbursementInfoDTO;
 import org.springblade.control.entity.*;
-import org.springblade.control.mapper.EMFinancialReimbursementMapper;
+import org.springblade.control.mapper.ExMFinancialReimbursementMapper;
 import org.springblade.control.service.EMFinancialReimbursementService;
+import org.springblade.control.utils.BuildSerialUtils;
 import org.springblade.control.vo.EMDraftVO;
 import org.springblade.control.vo.EMFinancialReimbursementInfoVO;
 import org.springblade.core.log.exception.ServiceException;
@@ -33,7 +34,7 @@ import java.util.stream.Collectors;
 
 @Service
 @AllArgsConstructor
-public class EMFinancialReimbursementServiceImpl extends BaseServiceImpl<EMFinancialReimbursementMapper, EMFinancialReimbursementInfo> implements EMFinancialReimbursementService {
+public class EMFinancialReimbursementServiceImpl extends BaseServiceImpl<ExMFinancialReimbursementMapper, EMFinancialReimbursementInfo> implements EMFinancialReimbursementService {
 
     private final IUserClient iUserClient;
     private final JdbcTemplate jdbcTemplate;
@@ -42,6 +43,7 @@ public class EMFinancialReimbursementServiceImpl extends BaseServiceImpl<EMFinan
     @Override
     public IPage<EMFinancialReimbursementInfoVO> financialPage(IPage<EMFinancialReimbursementInfo> page, EMFinancialReimbursementInfoDTO dto) {
         QueryWrapper<EMFinancialReimbursementInfo> queryWrapper = Condition.getQueryWrapper(dto);
+        queryWrapper.lambda().eq(EMFinancialReimbursementInfo::getIsTemp, 1); //提交的数据
         IPage<EMFinancialReimbursementInfo> pages = this.page(page, queryWrapper.lambda().orderBy(true, true, EMFinancialReimbursementInfo::getCreateTime));
         List<DictInfo> dictInfoList = jdbcTemplate.query("select dict_name,dict_value from c_dict_info where code = 'expense_fr_type'", new BeanPropertyRowMapper<>(DictInfo.class));
         Map<Long, String> userMap = iUserClient.selectUserAll().stream().collect(Collectors.toMap(User::getId, User::getRealName));
@@ -51,7 +53,7 @@ public class EMFinancialReimbursementServiceImpl extends BaseServiceImpl<EMFinan
             vo.setUserNameVesting(userMap.get(vo.getCreateUser()));
             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.setApprovalResultName(vo.getApprovalStatusName().equals("已审批") || vo.getApprovalStatusName().equals("已驳回") ? "已通过" : "未通过");
             for (DictInfo dictInfo : dictInfoList) {
                 if (dictInfo.getDictValue().equals(vo.getFrType() + "")) {
                     vo.setFrTypeName(dictInfo.getDictName());
@@ -75,14 +77,14 @@ public class EMFinancialReimbursementServiceImpl extends BaseServiceImpl<EMFinan
         //计算三个月前的时间
         LocalDateTime threeMonthsAgo = now.minusMonths(3);
         queryWrapper.between(EMFinancialReimbursementInfo::getCreateTime, threeMonthsAgo, now);
-        queryWrapper.eq(EMFinancialReimbursementInfo::getIsDeleted, 1); //暂存
+        queryWrapper.eq(EMFinancialReimbursementInfo::getIsTemp, 0); //暂存
         List<EMFinancialReimbursementInfo> list = baseMapper.selectList(queryWrapper);
         Map<Long, List<User>> userMaps = iUserClient.selectUserAll().stream().collect(Collectors.groupingBy(User::getId));
         List<EMDraftVO> resultVOS = new ArrayList<>();
         for (EMFinancialReimbursementInfo obj : list) {
             EMDraftVO vo = new EMDraftVO();
             vo.setId(obj.getId());
-            userMaps.get(obj.getCreateUser()).stream().findAny().ifPresent(user -> vo.setTitle((ObjectUtil.isNotEmpty(user) && ObjectUtil.isNotEmpty(user.getRealName())) ? user.getRealName() + obj.getCreateUser() + "提交的日常报销" : ""));
+            userMaps.get(obj.getCreateUser()).stream().findAny().ifPresent(user -> vo.setTitle((ObjectUtil.isNotEmpty(user) && ObjectUtil.isNotEmpty(user.getRealName())) ? user.getRealName() + "提交的日常报销" : ""));
             vo.setUpdateTime(obj.getUpdateTime());
             resultVOS.add(vo);
         }
@@ -101,21 +103,51 @@ public class EMFinancialReimbursementServiceImpl extends BaseServiceImpl<EMFinan
 
     @Override
     public boolean financialSubmit(EMFinancialReimbursementInfoDTO dto) {
+        if (ObjectUtil.isEmpty(SecureUtil.getUser())) {
+            throw new ServiceException("获取当前用户信息失败,请联系管理员");
+        }
+        boolean var = false;
+        dto.setCreateUser(SecureUtil.getUserId());
+
         if (("1").equals(dto.getSubmitStatus())) {
-            dto.setIsDeleted(1); //暂存
+            if (ObjectUtil.isEmpty(dto.getId()) && ObjectUtil.isEmpty(dto.getFrNumber())) {
+                dto.setFrNumber(this.getNumber());
+            } else if (ObjectUtil.isNotEmpty(dto.getId())) {
+                EMFinancialReimbursementInfo obj = baseMapper.selectById(dto.getId());
+                if (obj != null && obj.getStatus() == 3) {
+                    //如果是已驳回任务,那么重新生成新的记录信息
+                    dto.setId(SnowFlakeUtil.getId());
+                    dto.setFrNumber(this.getNumber());
+                    var = true;
+                }
+            }
+            dto.setIsTemp(0); //暂存
             dto.setStatus(0); //未上报
-            this.saveOrUpdate(dto);
+            if (var) {
+                this.save(dto);
+            } else {
+                this.saveOrUpdate(dto);
+            }
             return true;
 
         } else if (("2").equals(dto.getSubmitStatus())) { //提交审批
-            if (ObjectUtil.isNotEmpty(dto.getId()) && !new Integer(0).equals(dto.getStatus())) {
-                throw new ServiceException("当前填报的信息不是未上报状态,不允许操作!");
+            if (ObjectUtil.isNotEmpty(dto.getId())) {
+                EMFinancialReimbursementInfo obj = baseMapper.selectById(dto.getId());
+                if (obj != null && (obj.getStatus() != 0 && obj.getStatus() != 3)) {
+                    throw new ServiceException("当前填报的信息不是未上报、已驳回状态,不允许操作!");
+                } else if (obj != null && obj.getStatus() == 3) {
+                    //如果是已驳回任务,那么重新生成新的记录信息
+                    dto.setId(SnowFlakeUtil.getId());
+                    dto.setFrNumber(this.getNumber());
+                    var = true;
+                }
+            } else {
+                if (ObjectUtil.isEmpty(dto.getFrNumber())) {
+                    dto.setFrNumber(this.getNumber());
+                }
             }
-            if (ObjectUtil.isNotEmpty(dto.getResponsibleUser()) && ObjectUtil.isNotEmpty(dto.getFinanceUser()) && ObjectUtil.isNotEmpty(dto.getCashierUser()) && ObjectUtil.isNotEmpty(dto.getCcUserList())) {
+            if (ObjectUtil.isNotEmpty(dto.getResponsibleUser()) && ObjectUtil.isNotEmpty(dto.getFinanceUser()) && ObjectUtil.isNotEmpty(dto.getCashierUser())) {
                 //新增审批任务
-                if (ObjectUtil.isEmpty(SecureUtil.getUserName())) {
-                    throw new ServiceException("获取当前用户信息失败,请联系管理员");
-                }
                 TaskProcessInfo taskProcessInfo = new TaskProcessInfo();
                 taskProcessInfo.setId(SnowFlakeUtil.getId());
                 taskProcessInfo.setStatus(1); //待审批
@@ -140,17 +172,23 @@ public class EMFinancialReimbursementServiceImpl extends BaseServiceImpl<EMFinan
                 taskProcessInfo.setAuditUserIds(StringUtils.join(auditUserIds, ","));
 
                 //抄送人
-                List<String> ccUserObjList = dto.getCcUserList().stream().map(EMProcessTaskUser::getUserId).collect(Collectors.toList());
-                taskProcessInfo.setCcUserIds(StringUtils.join(ccUserObjList, ","));
+                if (ObjectUtil.isNotEmpty(dto.getCcUserList())) {
+                    List<String> ccUserObjList = dto.getCcUserList().stream().map(EMProcessTaskUser::getUserId).collect(Collectors.toList());
+                    taskProcessInfo.setCcUserIds(StringUtils.join(ccUserObjList, ","));
+                }
                 taskProcessService.save(taskProcessInfo);
 
                 //新增信息
-                dto.setIsDeleted(0); //提交
+                dto.setIsTemp(1); //提交
                 dto.setStatus(1); //待审批
-                this.saveOrUpdate(dto);
+                if (var) {
+                    this.save(dto);
+                } else {
+                    this.saveOrUpdate(dto);
+                }
 
                 //新增审批任务关联信息
-                jdbcTemplate.execute("insert into c_expense_task_record(id,task_id,expense_info_id) values (" + SnowFlakeUtil.getId() + "," + taskProcessInfo.getId() + "," + dto.getId() + ")");
+                jdbcTemplate.execute("delete from c_expense_task_record where task_id = " + taskProcessInfo.getId() + " and expense_info_id = " + dto.getId() + " ; insert into c_expense_task_record(id,task_id,expense_info_id,expense_info_type) values (" + SnowFlakeUtil.getId() + "," + taskProcessInfo.getId() + "," + dto.getId() + ",2)");
 
                 //关联项目预算budgetPlanIds目前只做存储,在审批完成后闭环时再进行计算推送 TODO
                 return true;
@@ -172,16 +210,18 @@ public class EMFinancialReimbursementServiceImpl extends BaseServiceImpl<EMFinan
         EMFinancialReimbursementInfo obj = baseMapper.selectById(id);
         if (obj != null && obj.getStatus().equals(1)) {
             //查询记录任务关联信息
-            ExpenseTaskRecord record = jdbcTemplate.query("select * from c_expense_task_record where expense_info_id = " + id, new BeanPropertyRowMapper<>(ExpenseTaskRecord.class)).stream().findAny().orElse(null);
-            if (record != null) {
-                //删除上报的审批任务
-                jdbcTemplate.execute("delete from c_task_process_info where id = " + record.getTaskId());
-
-                //删除记录任务关联信息
-                jdbcTemplate.execute("delete from c_expense_task_record where expense_info_id = " + id + " and task_id = " + record.getTaskId());
+            List<ExpenseTaskRecord> records = jdbcTemplate.query("select * from c_expense_task_record where expense_info_id = " + id, new BeanPropertyRowMapper<>(ExpenseTaskRecord.class));
+            if (records.size() > 0) {
+                for (ExpenseTaskRecord record : records) {
+                    //删除上报的审批任务
+                    jdbcTemplate.execute("delete from c_task_process_info where id = " + record.getTaskId());
+
+                    //删除记录任务关联信息
+                    jdbcTemplate.execute("delete from c_expense_task_record where expense_info_id = " + id + " and task_id = " + record.getTaskId());
+                }
 
                 //修改当前记录为未上报状态,且暂存
-                this.update(Wrappers.<EMFinancialReimbursementInfo>lambdaUpdate().set(EMFinancialReimbursementInfo::getStatus, 0).set(EMFinancialReimbursementInfo::getIsDeleted, 1).eq(EMFinancialReimbursementInfo::getId, id));
+                this.update(Wrappers.<EMFinancialReimbursementInfo>lambdaUpdate().set(EMFinancialReimbursementInfo::getStatus, 0).set(EMFinancialReimbursementInfo::getIsTemp, 0).eq(EMFinancialReimbursementInfo::getId, id));
 
                 return true;
             }
@@ -189,4 +229,25 @@ public class EMFinancialReimbursementServiceImpl extends BaseServiceImpl<EMFinan
         return false;
     }
 
+    /**
+     * 获取编号
+     *
+     * @return
+     */
+    private String getNumber() {
+        List<EMFinancialReimbursementInfo> emFinancialReimbursementInfos = baseMapper.selectList(Wrappers.<EMFinancialReimbursementInfo>lambdaQuery().select(EMFinancialReimbursementInfo::getFrNumber).isNotNull(EMFinancialReimbursementInfo::getFrNumber));
+        Set<Integer> numberSet = new HashSet<>();
+        for (EMFinancialReimbursementInfo obj : emFinancialReimbursementInfos) {
+            String number = obj.getFrNumber().split("-")[1];
+            numberSet.add(Integer.parseInt(number));
+        }
+
+        int maxValue = Integer.MIN_VALUE;
+        for (int value : numberSet) {
+            if (value > maxValue) {
+                maxValue = value;
+            }
+        }
+        return "BX-" + BuildSerialUtils.buildSerial(maxValue + 1, 4);
+    }
 }

+ 97 - 79
blade-service/blade-control/src/main/java/org/springblade/control/service/impl/EMInvoiceServiceImpl.java

@@ -9,8 +9,9 @@ import org.apache.commons.lang.StringUtils;
 import org.springblade.common.utils.SnowFlakeUtil;
 import org.springblade.control.dto.EMInvoiceInfoDTO;
 import org.springblade.control.entity.*;
-import org.springblade.control.mapper.EMInvoiceMapper;
+import org.springblade.control.mapper.ExMInvoiceMapper;
 import org.springblade.control.service.EMInvoiceService;
+import org.springblade.control.utils.BuildSerialUtils;
 import org.springblade.control.vo.EMDraftVO;
 import org.springblade.control.vo.EMInvoiceInfoVO;
 import org.springblade.core.log.exception.ServiceException;
@@ -25,27 +26,23 @@ import org.springframework.beans.BeanUtils;
 import org.springframework.jdbc.core.BeanPropertyRowMapper;
 import org.springframework.jdbc.core.JdbcTemplate;
 import org.springframework.stereotype.Service;
-import org.springframework.web.multipart.MultipartFile;
 
-import java.io.IOException;
 import java.time.LocalDateTime;
 import java.util.*;
 import java.util.stream.Collectors;
 
 @Service
 @AllArgsConstructor
-public class EMInvoiceServiceImpl extends BaseServiceImpl<EMInvoiceMapper, EMInvoiceInfo> implements EMInvoiceService {
+public class EMInvoiceServiceImpl extends BaseServiceImpl<ExMInvoiceMapper, EMInvoiceInfo> implements EMInvoiceService {
 
     private final IUserClient iUserClient;
     private final JdbcTemplate jdbcTemplate;
-    /*private final OssBuilder ossBuilder;
-    private final CommonFileClient commonFileClient;
-    private final IAttachService attachService;*/
     private final TaskProcessServiceImpl taskProcessService;
 
     @Override
     public IPage<EMInvoiceInfoVO> invoicePage(IPage<EMInvoiceInfo> page, EMInvoiceInfoDTO dto) {
         QueryWrapper<EMInvoiceInfo> queryWrapper = Condition.getQueryWrapper(dto);
+        queryWrapper.lambda().eq(EMInvoiceInfo::getIsTemp, 1); //提交的数据
         IPage<EMInvoiceInfo> pages = this.page(page, queryWrapper.lambda().orderBy(true, true, EMInvoiceInfo::getCreateTime));
         Map<Long, String> userMap = iUserClient.selectUserAll().stream().collect(Collectors.toMap(User::getId, User::getRealName));
         List<DictInfo> dictInfoList1 = jdbcTemplate.query("select dict_name,dict_value from c_dict_info where code = 'invoice_type'", new BeanPropertyRowMapper<>(DictInfo.class));
@@ -54,7 +51,7 @@ public class EMInvoiceServiceImpl extends BaseServiceImpl<EMInvoiceMapper, EMInv
             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.setApprovalResultName(vo.getApprovalStatusName().equals("已审批") || vo.getApprovalStatusName().equals("已驳回") ? "已通过" : "未通过");
             for (DictInfo dictInfo : dictInfoList1) {
                 if (dictInfo.getDictValue().equals(vo.getInvoiceType() + "")) {
                     vo.setInvoiceTypeName(dictInfo.getDictName());
@@ -81,14 +78,14 @@ public class EMInvoiceServiceImpl extends BaseServiceImpl<EMInvoiceMapper, EMInv
         //计算三个月前的时间
         LocalDateTime threeMonthsAgo = now.minusMonths(3);
         queryWrapper.between(EMInvoiceInfo::getCreateTime, threeMonthsAgo, now);
-        queryWrapper.eq(EMInvoiceInfo::getIsDeleted, 1); //暂存
+        queryWrapper.eq(EMInvoiceInfo::getIsTemp, 0); //暂存
         List<EMInvoiceInfo> list = baseMapper.selectList(queryWrapper);
         Map<Long, List<User>> userMaps = iUserClient.selectUserAll().stream().collect(Collectors.groupingBy(User::getId));
         List<EMDraftVO> resultVOS = new ArrayList<>();
         for (EMInvoiceInfo obj : list) {
             EMDraftVO vo = new EMDraftVO();
             vo.setId(obj.getId());
-            userMaps.get(obj.getCreateUser()).stream().findAny().ifPresent(user -> vo.setTitle((ObjectUtil.isNotEmpty(user) && ObjectUtil.isNotEmpty(user.getRealName())) ? user.getRealName() + obj.getCreateUser() + "提交的开票申请" : ""));
+            userMaps.get(obj.getCreateUser()).stream().findAny().ifPresent(user -> vo.setTitle((ObjectUtil.isNotEmpty(user) && ObjectUtil.isNotEmpty(user.getRealName())) ? user.getRealName() + "提交的开票申请" : ""));
             vo.setUpdateTime(obj.getUpdateTime());
             resultVOS.add(vo);
         }
@@ -107,21 +104,51 @@ public class EMInvoiceServiceImpl extends BaseServiceImpl<EMInvoiceMapper, EMInv
 
     @Override
     public boolean invoiceSubmit(EMInvoiceInfoDTO dto) {
+        if (ObjectUtil.isEmpty(SecureUtil.getUser())) {
+            throw new ServiceException("获取当前用户信息失败,请联系管理员");
+        }
+        boolean var = false;
+        dto.setCreateUser(SecureUtil.getUserId());
+
         if (("1").equals(dto.getSubmitStatus())) {
-            dto.setIsDeleted(1); //暂存
+            if (ObjectUtil.isEmpty(dto.getId()) && ObjectUtil.isEmpty(dto.getInvoiceNumber())) {
+                dto.setInvoiceNumber(this.getNumber());
+            } else if (ObjectUtil.isNotEmpty(dto.getId())) {
+                EMInvoiceInfo obj = baseMapper.selectById(dto.getId());
+                if (obj != null && obj.getStatus() == 3) {
+                    //如果是已驳回任务,那么重新生成新的记录信息
+                    dto.setId(SnowFlakeUtil.getId());
+                    dto.setInvoiceNumber(this.getNumber());
+                    var = true;
+                }
+            }
+            dto.setIsTemp(0); //暂存
             dto.setStatus(0); //未上报
-            this.saveOrUpdate(dto);
+            if (var) {
+                this.save(dto);
+            } else {
+                this.saveOrUpdate(dto);
+            }
             return true;
 
         } else if (("2").equals(dto.getSubmitStatus())) { //提交审批
-            if (ObjectUtil.isNotEmpty(dto.getId()) && !new Integer(0).equals(dto.getStatus())) {
-                throw new ServiceException("当前填报的信息不是未上报状态,不允许操作!");
+            if (ObjectUtil.isNotEmpty(dto.getId())) {
+                EMInvoiceInfo obj = baseMapper.selectById(dto.getId());
+                if (obj != null && (obj.getStatus() != 0 && obj.getStatus() != 3)) {
+                    throw new ServiceException("当前填报的信息不是未上报、已驳回状态,不允许操作!");
+                } else if (obj != null && obj.getStatus() == 3) {
+                    //如果是已驳回任务,那么重新生成新的记录信息
+                    dto.setId(SnowFlakeUtil.getId());
+                    dto.setInvoiceNumber(this.getNumber());
+                    var = true;
+                }
+            } else {
+                if (ObjectUtil.isEmpty(dto.getInvoiceNumber())) {
+                    dto.setInvoiceNumber(this.getNumber());
+                }
             }
-            if (ObjectUtil.isNotEmpty(dto.getResponsibleUser()) && ObjectUtil.isNotEmpty(dto.getFinanceUser()) && ObjectUtil.isNotEmpty(dto.getCcUserList())) {
+            if (ObjectUtil.isNotEmpty(dto.getResponsibleUser()) && ObjectUtil.isNotEmpty(dto.getFinanceUser())) {
                 //新增审批任务
-                if (ObjectUtil.isEmpty(SecureUtil.getUserName())) {
-                    throw new ServiceException("获取当前用户信息失败,请联系管理员");
-                }
                 TaskProcessInfo taskProcessInfo = new TaskProcessInfo();
                 taskProcessInfo.setId(SnowFlakeUtil.getId());
                 taskProcessInfo.setStatus(1); //待审批
@@ -140,17 +167,23 @@ public class EMInvoiceServiceImpl extends BaseServiceImpl<EMInvoiceMapper, EMInv
                 taskProcessInfo.setAuditUserIds(StringUtils.join(auditUserIds, ","));
 
                 //抄送人
-                List<String> ccUserObjList = dto.getCcUserList().stream().map(EMProcessTaskUser::getUserId).collect(Collectors.toList());
-                taskProcessInfo.setCcUserIds(StringUtils.join(ccUserObjList, ","));
+                if (ObjectUtil.isNotEmpty(dto.getCcUserList())) {
+                    List<String> ccUserObjList = dto.getCcUserList().stream().map(EMProcessTaskUser::getUserId).collect(Collectors.toList());
+                    taskProcessInfo.setCcUserIds(StringUtils.join(ccUserObjList, ","));
+                }
                 taskProcessService.save(taskProcessInfo);
 
                 //新增信息
-                dto.setIsDeleted(0); //提交
+                dto.setIsTemp(1); //提交
                 dto.setStatus(1); //待审批
-                this.saveOrUpdate(dto);
+                if (var) {
+                    this.save(dto);
+                } else {
+                    this.saveOrUpdate(dto);
+                }
 
                 //新增审批任务关联信息
-                jdbcTemplate.execute("insert into c_expense_task_record(id,task_id,expense_info_id) values (" + SnowFlakeUtil.getId() + "," + taskProcessInfo.getId() + "," + dto.getId() + ")");
+                jdbcTemplate.execute("delete from c_expense_task_record where task_id = " + taskProcessInfo.getId() + " and expense_info_id = " + dto.getId() + " ; insert into c_expense_task_record(id,task_id,expense_info_id,expense_info_type) values (" + SnowFlakeUtil.getId() + "," + taskProcessInfo.getId() + "," + dto.getId() + ",7)");
 
                 //存储关联项目id,审批闭环后处理项目相关业务 TODO
 
@@ -173,16 +206,18 @@ public class EMInvoiceServiceImpl extends BaseServiceImpl<EMInvoiceMapper, EMInv
         EMInvoiceInfo obj = baseMapper.selectById(id);
         if (obj != null && obj.getStatus().equals(1)) {
             //查询记录任务关联信息
-            ExpenseTaskRecord record = jdbcTemplate.query("select * from c_expense_task_record where expense_info_id = " + id, new BeanPropertyRowMapper<>(ExpenseTaskRecord.class)).stream().findAny().orElse(null);
-            if (record != null) {
-                //删除上报的审批任务
-                jdbcTemplate.execute("delete from c_task_process_info where id = " + record.getTaskId());
-
-                //删除记录任务关联信息
-                jdbcTemplate.execute("delete from c_expense_task_record where expense_info_id = " + id + " and task_id = " + record.getTaskId());
+            List<ExpenseTaskRecord> records = jdbcTemplate.query("select * from c_expense_task_record where expense_info_id = " + id, new BeanPropertyRowMapper<>(ExpenseTaskRecord.class));
+            if (records.size() > 0) {
+                for (ExpenseTaskRecord record : records) {
+                    //删除上报的审批任务
+                    jdbcTemplate.execute("delete from c_task_process_info where id = " + record.getTaskId());
+
+                    //删除记录任务关联信息
+                    jdbcTemplate.execute("delete from c_expense_task_record where expense_info_id = " + id + " and task_id = " + record.getTaskId());
+                }
 
                 //修改当前记录为未上报状态,且暂存
-                this.update(Wrappers.<EMInvoiceInfo>lambdaUpdate().set(EMInvoiceInfo::getStatus, 0).set(EMInvoiceInfo::getIsDeleted, 1).eq(EMInvoiceInfo::getId, id));
+                this.update(Wrappers.<EMInvoiceInfo>lambdaUpdate().set(EMInvoiceInfo::getStatus, 0).set(EMInvoiceInfo::getIsTemp, 0).eq(EMInvoiceInfo::getId, id));
 
                 return true;
             }
@@ -191,58 +226,18 @@ public class EMInvoiceServiceImpl extends BaseServiceImpl<EMInvoiceMapper, EMInv
     }
 
     @Override
-    public boolean invoiceUpload(Long id, MultipartFile file) throws IOException {
+    public boolean invoiceUpload(Long id, String pdfUrl) {
+        if (StringUtils.isNotEmpty(pdfUrl)) {
+            throw new ServiceException("未获取到当前pdf路径信息,上传失败!");
+        }
         EMInvoiceInfo obj = baseMapper.selectById(id);
         if (obj != null && obj.getStatus().equals(2)) { //已通过(已审批)
-            //上传原图
-            /*ByteArrayInputStream inputStream = new ByteArrayInputStream(file.getBytes());
-            BladeFile bladeFile = ossBuilder.template().putFile(file.getOriginalFilename(), inputStream);
-
-            //处理PDF文件
-            NewBladeFile newBladeFile = new NewBladeFile();
-            if (Objects.requireNonNull(file.getOriginalFilename()).contains("xlsx")) {
-                newBladeFile = this.commonFileClient.excelToPdf(file);
-
-            } else if (file.getOriginalFilename().contains("xls")) {
-                newBladeFile = this.commonFileClient.excelToPdf(file);
-
-            } else if (file.getOriginalFilename().contains("docx")) {
-                newBladeFile = this.commonFileClient.wordToPdf(file);
-
-            } else if (file.getOriginalFilename().contains("png") || file.getOriginalFilename().contains("jpg")) {
-                newBladeFile = this.commonFileClient.pngOrJpgToPdf(file);
-
-            } else if (file.getOriginalFilename().contains("pdf")) {
-                //获取PDF文件
-                PDDocument document = PDDocument.load(file.getInputStream());
-                //获取文件页数
-                newBladeFile.setPage(document.getPages().getCount());
-                //pdf的路径就是文件上传的路径
-                newBladeFile.setPdfUrl(bladeFile.getLink());
-            }
-
-            BeanUtils.copyProperties(bladeFile, newBladeFile);
-            newBladeFile.setFileSize(file.getSize() / 1024);
-
-            //入库
-            String fileExtension = FileUtil.getFileExtension(bladeFile.getOriginalName());
-            Attach attach = new Attach();
-            attach.setDomainUrl(bladeFile.getDomain());
-            attach.setLink(newBladeFile.getPdfUrl());
-            attach.setName(bladeFile.getName());
-            attach.setOriginalName(bladeFile.getOriginalName());
-            attach.setAttachSize(newBladeFile.getFileSize());
-            attach.setExtension(fileExtension);
-
-            if (attachService.save(attach)) {
-                //修改pdf路径
-                this.update(Wrappers.<EMInvoiceInfo>lambdaUpdate().set(EMInvoiceInfo::getInvoicePdfUrl, newBladeFile.getPdfUrl()).eq(EMInvoiceInfo::getId, id));
-                return true;
-            }*/
+            //修改pdf路径
+            this.update(Wrappers.<EMInvoiceInfo>lambdaUpdate().set(EMInvoiceInfo::getInvoicePdfUrl, pdfUrl).eq(EMInvoiceInfo::getId, id));
+            return true;
         } else {
-            throw new ServiceException("当前发票记录信息不是已审批通过状态,无法上传!");
+            throw new ServiceException("当前发票记录信息不是已审批通过状态,上传失败!");
         }
-        return false;
     }
 
     @Override
@@ -254,4 +249,27 @@ public class EMInvoiceServiceImpl extends BaseServiceImpl<EMInvoiceMapper, EMInv
         return null;
     }
 
+
+    /**
+     * 获取编号
+     *
+     * @return
+     */
+    private String getNumber() {
+        List<EMInvoiceInfo> emFinancialReimbursementInfos = baseMapper.selectList(Wrappers.<EMInvoiceInfo>lambdaQuery().select(EMInvoiceInfo::getInvoiceNumber).isNotNull(EMInvoiceInfo::getInvoiceNumber));
+        Set<Integer> numberSet = new HashSet<>();
+        for (EMInvoiceInfo obj : emFinancialReimbursementInfos) {
+            String number = obj.getInvoiceNumber().split("-")[1];
+            numberSet.add(Integer.parseInt(number));
+        }
+
+        int maxValue = Integer.MIN_VALUE;
+        for (int value : numberSet) {
+            if (value > maxValue) {
+                maxValue = value;
+            }
+        }
+        return "FP-" + BuildSerialUtils.buildSerial((maxValue + 1), 4);
+    }
+
 }

+ 90 - 23
blade-service/blade-control/src/main/java/org/springblade/control/service/impl/EMLoanServiceImpl.java

@@ -9,8 +9,9 @@ import org.apache.commons.lang.StringUtils;
 import org.springblade.common.utils.SnowFlakeUtil;
 import org.springblade.control.dto.EMLoanInfoDTO;
 import org.springblade.control.entity.*;
-import org.springblade.control.mapper.EMLoanMapper;
+import org.springblade.control.mapper.ExMLoanMapper;
 import org.springblade.control.service.EMLoanService;
+import org.springblade.control.utils.BuildSerialUtils;
 import org.springblade.control.vo.EMDraftVO;
 import org.springblade.control.vo.EMLoanInfoVO;
 import org.springblade.core.log.exception.ServiceException;
@@ -33,7 +34,7 @@ import java.util.stream.Collectors;
 
 @Service
 @AllArgsConstructor
-public class EMLoanServiceImpl extends BaseServiceImpl<EMLoanMapper, EMLoanInfo> implements EMLoanService {
+public class EMLoanServiceImpl extends BaseServiceImpl<ExMLoanMapper, EMLoanInfo> implements EMLoanService {
 
     private final IUserClient iUserClient;
     private final JdbcTemplate jdbcTemplate;
@@ -42,6 +43,7 @@ public class EMLoanServiceImpl extends BaseServiceImpl<EMLoanMapper, EMLoanInfo>
     @Override
     public IPage<EMLoanInfoVO> loanPage(IPage<EMLoanInfo> page, EMLoanInfoDTO dto) {
         QueryWrapper<EMLoanInfo> queryWrapper = Condition.getQueryWrapper(dto);
+        queryWrapper.lambda().eq(EMLoanInfo::getIsTemp, 1);
         IPage<EMLoanInfo> pages = this.page(page, queryWrapper.lambda().orderBy(true, true, EMLoanInfo::getCreateTime));
         Map<Long, String> userMap = iUserClient.selectUserAll().stream().collect(Collectors.toMap(User::getId, User::getRealName));
         return pages.convert(obj -> {
@@ -53,7 +55,7 @@ public class EMLoanServiceImpl extends BaseServiceImpl<EMLoanMapper, EMLoanInfo>
 
             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.setApprovalResultName(vo.getApprovalStatusName().equals("已审批") || vo.getApprovalStatusName().equals("已驳回") ? "已通过" : "未通过");
             vo.setUseReturnDate(vo.getUseDate() + "-" + vo.getReturnDate());
             return vo;
         });
@@ -71,14 +73,14 @@ public class EMLoanServiceImpl extends BaseServiceImpl<EMLoanMapper, EMLoanInfo>
         //计算三个月前的时间
         LocalDateTime threeMonthsAgo = now.minusMonths(3);
         queryWrapper.between(EMLoanInfo::getCreateTime, threeMonthsAgo, now);
-        queryWrapper.eq(EMLoanInfo::getIsDeleted, 1); //暂存
+        queryWrapper.eq(EMLoanInfo::getIsTemp, 0); //暂存
         List<EMLoanInfo> list = baseMapper.selectList(queryWrapper);
         Map<Long, List<User>> userMaps = iUserClient.selectUserAll().stream().collect(Collectors.groupingBy(User::getId));
         List<EMDraftVO> resultVOS = new ArrayList<>();
         for (EMLoanInfo obj : list) {
             EMDraftVO vo = new EMDraftVO();
             vo.setId(obj.getId());
-            userMaps.get(obj.getCreateUser()).stream().findAny().ifPresent(user -> vo.setTitle((ObjectUtil.isNotEmpty(user) && ObjectUtil.isNotEmpty(user.getRealName())) ? user.getRealName() + obj.getCreateUser() + "提交的借款申请" : ""));
+            userMaps.get(obj.getCreateUser()).stream().findAny().ifPresent(user -> vo.setTitle((ObjectUtil.isNotEmpty(user) && ObjectUtil.isNotEmpty(user.getRealName())) ? user.getRealName() + "提交的借款申请" : ""));
             vo.setUpdateTime(obj.getUpdateTime());
             resultVOS.add(vo);
         }
@@ -97,17 +99,50 @@ public class EMLoanServiceImpl extends BaseServiceImpl<EMLoanMapper, EMLoanInfo>
 
     @Override
     public boolean loanSubmit(EMLoanInfoDTO dto) {
+        if (ObjectUtil.isEmpty(SecureUtil.getUser())) {
+            throw new ServiceException("获取当前用户信息失败,请联系管理员");
+        }
+        boolean var = false;
+        dto.setCreateUser(SecureUtil.getUserId());
+
         if (("1").equals(dto.getSubmitStatus())) {
-            dto.setIsDeleted(1); //暂存
+            if (ObjectUtil.isEmpty(dto.getId()) && ObjectUtil.isEmpty(dto.getLoanNumber())) {
+                dto.setLoanNumber(this.getNumber());
+            } else if (ObjectUtil.isNotEmpty(dto.getId())) {
+                EMLoanInfo obj = baseMapper.selectById(dto.getId());
+                if (obj != null && obj.getStatus() == 3) {
+                    //如果是已驳回任务,那么重新生成新的记录信息
+                    dto.setId(SnowFlakeUtil.getId());
+                    dto.setLoanNumber(this.getNumber());
+                    var = true;
+                }
+            }
+            dto.setIsTemp(0); //暂存
             dto.setStatus(0); //未上报
-            this.saveOrUpdate(dto);
+            if (var) {
+                this.save(dto);
+            } else {
+                this.saveOrUpdate(dto);
+            }
             return true;
 
         } else if (("2").equals(dto.getSubmitStatus())) { //提交审批
-            if (ObjectUtil.isNotEmpty(dto.getId()) && !new Integer(0).equals(dto.getStatus())) {
-                throw new ServiceException("当前填报的信息不是未上报状态,不允许操作!");
+            if (ObjectUtil.isNotEmpty(dto.getId())) {
+                EMLoanInfo obj = baseMapper.selectById(dto.getId());
+                if (obj != null && (obj.getStatus() != 0 && obj.getStatus() != 3)) {
+                    throw new ServiceException("当前填报的信息不是未上报、已驳回状态,不允许操作!");
+                } else if (obj != null && obj.getStatus() == 3) {
+                    //如果是已驳回任务,那么重新生成新的记录信息
+                    dto.setId(SnowFlakeUtil.getId());
+                    dto.setLoanNumber(this.getNumber());
+                    var = true;
+                }
+            } else {
+                if (ObjectUtil.isEmpty(dto.getLoanNumber())) {
+                    dto.setLoanNumber(this.getNumber());
+                }
             }
-            if (ObjectUtil.isNotEmpty(dto.getResponsibleUser()) && ObjectUtil.isNotEmpty(dto.getFinanceUser()) && ObjectUtil.isNotEmpty(dto.getCashierUser()) && ObjectUtil.isNotEmpty(dto.getCcUserList())) {
+            if (ObjectUtil.isNotEmpty(dto.getResponsibleUser()) && ObjectUtil.isNotEmpty(dto.getFinanceUser()) && ObjectUtil.isNotEmpty(dto.getCashierUser())) {
                 //新增审批任务
                 if (ObjectUtil.isEmpty(SecureUtil.getUserName())) {
                     throw new ServiceException("获取当前用户信息失败,请联系管理员");
@@ -136,17 +171,23 @@ public class EMLoanServiceImpl extends BaseServiceImpl<EMLoanMapper, EMLoanInfo>
                 taskProcessInfo.setAuditUserIds(StringUtils.join(auditUserIds, ","));
 
                 //抄送人
-                List<String> ccUserObjList = dto.getCcUserList().stream().map(EMProcessTaskUser::getUserId).collect(Collectors.toList());
-                taskProcessInfo.setCcUserIds(StringUtils.join(ccUserObjList, ","));
+                if (ObjectUtil.isNotEmpty(dto.getCcUserList())) {
+                    List<String> ccUserObjList = dto.getCcUserList().stream().map(EMProcessTaskUser::getUserId).collect(Collectors.toList());
+                    taskProcessInfo.setCcUserIds(StringUtils.join(ccUserObjList, ","));
+                }
                 taskProcessService.save(taskProcessInfo);
 
                 //新增信息
-                dto.setIsDeleted(0); //提交
+                dto.setIsTemp(1); //提交
                 dto.setStatus(1); //待审批
-                this.saveOrUpdate(dto);
+                if (var) {
+                    this.save(dto);
+                } else {
+                    this.saveOrUpdate(dto);
+                }
 
                 //新增审批任务关联信息
-                jdbcTemplate.execute("insert into c_expense_task_record(id,task_id,expense_info_id) values (" + SnowFlakeUtil.getId() + "," + taskProcessInfo.getId() + "," + dto.getId() + ")");
+                jdbcTemplate.execute("delete from c_expense_task_record where task_id = " + taskProcessInfo.getId() + " and expense_info_id = " + dto.getId() + " ; insert into c_expense_task_record(id,task_id,expense_info_id,expense_info_type) values (" + SnowFlakeUtil.getId() + "," + taskProcessInfo.getId() + "," + dto.getId() + ",4)");
 
                 return true;
 
@@ -167,20 +208,46 @@ public class EMLoanServiceImpl extends BaseServiceImpl<EMLoanMapper, EMLoanInfo>
         EMLoanInfo obj = baseMapper.selectById(id);
         if (obj != null && obj.getStatus().equals(1)) {
             //查询记录任务关联信息
-            ExpenseTaskRecord record = jdbcTemplate.query("select * from c_expense_task_record where expense_info_id = " + id, new BeanPropertyRowMapper<>(ExpenseTaskRecord.class)).stream().findAny().orElse(null);
-            if (record != null) {
-                //删除上报的审批任务
-                jdbcTemplate.execute("delete from c_task_process_info where id = " + record.getTaskId());
-
-                //删除记录任务关联信息
-                jdbcTemplate.execute("delete from c_expense_task_record where expense_info_id = " + id + " and task_id = " + record.getTaskId());
+            List<ExpenseTaskRecord> records = jdbcTemplate.query("select * from c_expense_task_record where expense_info_id = " + id, new BeanPropertyRowMapper<>(ExpenseTaskRecord.class));
+            if (records.size() > 0) {
+                for (ExpenseTaskRecord record : records) {
+                    //删除上报的审批任务
+                    jdbcTemplate.execute("delete from c_task_process_info where id = " + record.getTaskId());
+
+                    //删除记录任务关联信息
+                    jdbcTemplate.execute("delete from c_expense_task_record where expense_info_id = " + id + " and task_id = " + record.getTaskId());
+                }
 
                 //修改当前记录为未上报状态,且暂存
-                this.update(Wrappers.<EMLoanInfo>lambdaUpdate().set(EMLoanInfo::getStatus, 0).set(EMLoanInfo::getIsDeleted, 1).eq(EMLoanInfo::getId, id));
+                this.update(Wrappers.<EMLoanInfo>lambdaUpdate().set(EMLoanInfo::getStatus, 0).set(EMLoanInfo::getIsTemp, 0).eq(EMLoanInfo::getId, id));
 
                 return true;
             }
         }
         return false;
     }
+
+
+    /**
+     * 获取编号
+     *
+     * @return
+     */
+    private String getNumber() {
+        List<EMLoanInfo> emFinancialReimbursementInfos = baseMapper.selectList(Wrappers.<EMLoanInfo>lambdaQuery().select(EMLoanInfo::getLoanNumber).isNotNull(EMLoanInfo::getLoanNumber));
+        Set<Integer> numberSet = new HashSet<>();
+        for (EMLoanInfo obj : emFinancialReimbursementInfos) {
+            String number = obj.getLoanNumber().split("-")[1];
+            numberSet.add(Integer.parseInt(number));
+        }
+
+        int maxValue = Integer.MIN_VALUE;
+        for (int value : numberSet) {
+            if (value > maxValue) {
+                maxValue = value;
+            }
+        }
+        return "JK-" + BuildSerialUtils.buildSerial((maxValue + 1), 4);
+    }
+
 }

+ 57 - 26
blade-service/blade-control/src/main/java/org/springblade/control/service/impl/EMOutsourcingPayServiceImpl.java

@@ -9,7 +9,7 @@ import org.apache.commons.lang.StringUtils;
 import org.springblade.common.utils.SnowFlakeUtil;
 import org.springblade.control.dto.EMOutsourcingPayInfoDTO;
 import org.springblade.control.entity.*;
-import org.springblade.control.mapper.EMOutsourcingPayMapper;
+import org.springblade.control.mapper.ExMOutsourcingPayMapper;
 import org.springblade.control.service.EMOutsourcingPayService;
 import org.springblade.control.vo.EMDraftVO;
 import org.springblade.control.vo.EMOutsourcingPayInfoVO;
@@ -32,7 +32,7 @@ import java.util.stream.Collectors;
 
 @Service
 @AllArgsConstructor
-public class EMOutsourcingPayServiceImpl extends BaseServiceImpl<EMOutsourcingPayMapper, EMOutsourcingPayInfo> implements EMOutsourcingPayService {
+public class EMOutsourcingPayServiceImpl extends BaseServiceImpl<ExMOutsourcingPayMapper, EMOutsourcingPayInfo> implements EMOutsourcingPayService {
 
     private final IUserClient iUserClient;
     private final JdbcTemplate jdbcTemplate;
@@ -41,6 +41,7 @@ public class EMOutsourcingPayServiceImpl extends BaseServiceImpl<EMOutsourcingPa
     @Override
     public IPage<EMOutsourcingPayInfoVO> outsourcingPage(IPage<EMOutsourcingPayInfo> page, EMOutsourcingPayInfoDTO dto) {
         QueryWrapper<EMOutsourcingPayInfo> queryWrapper = Condition.getQueryWrapper(dto);
+        queryWrapper.lambda().eq(EMOutsourcingPayInfo::getIsTemp, 1);
         IPage<EMOutsourcingPayInfo> pages = this.page(page, queryWrapper.lambda().orderBy(true, true, EMOutsourcingPayInfo::getCreateTime));
         Map<Long, String> userMap = iUserClient.selectUserAll().stream().collect(Collectors.toMap(User::getId, User::getRealName));
         List<DictInfo> dictInfoList = jdbcTemplate.query("select dict_name,dict_value from c_dict_info where code = 'outsourcing_type'", new BeanPropertyRowMapper<>(DictInfo.class));
@@ -49,7 +50,7 @@ public class EMOutsourcingPayServiceImpl extends BaseServiceImpl<EMOutsourcingPa
             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.setApprovalResultName(vo.getApprovalStatusName().equals("已审批") || vo.getApprovalStatusName().equals("已驳回") ? "已通过" : "未通过");
             vo.setProjectName(""); //TODO 项目名
 
             for (DictInfo dictInfo : dictInfoList) {
@@ -76,14 +77,14 @@ public class EMOutsourcingPayServiceImpl extends BaseServiceImpl<EMOutsourcingPa
         //计算三个月前的时间
         LocalDateTime threeMonthsAgo = now.minusMonths(3);
         queryWrapper.between(EMOutsourcingPayInfo::getCreateTime, threeMonthsAgo, now);
-        queryWrapper.eq(EMOutsourcingPayInfo::getIsDeleted, 1); //暂存
+        queryWrapper.eq(EMOutsourcingPayInfo::getIsTemp, 0); //暂存
         List<EMOutsourcingPayInfo> list = baseMapper.selectList(queryWrapper);
         Map<Long, List<User>> userMaps = iUserClient.selectUserAll().stream().collect(Collectors.groupingBy(User::getId));
         List<EMDraftVO> resultVOS = new ArrayList<>();
         for (EMOutsourcingPayInfo obj : list) {
             EMDraftVO vo = new EMDraftVO();
             vo.setId(obj.getId());
-            userMaps.get(obj.getCreateUser()).stream().findAny().ifPresent(user -> vo.setTitle((ObjectUtil.isNotEmpty(user) && ObjectUtil.isNotEmpty(user.getRealName())) ? user.getRealName() + obj.getCreateUser() + "提交的外包支付" : ""));
+            userMaps.get(obj.getCreateUser()).stream().findAny().ifPresent(user -> vo.setTitle((ObjectUtil.isNotEmpty(user) && ObjectUtil.isNotEmpty(user.getRealName())) ? user.getRealName() + "提交的外包支付" : ""));
             vo.setUpdateTime(obj.getUpdateTime());
             resultVOS.add(vo);
         }
@@ -102,21 +103,43 @@ public class EMOutsourcingPayServiceImpl extends BaseServiceImpl<EMOutsourcingPa
 
     @Override
     public boolean outsourcingSubmit(EMOutsourcingPayInfoDTO dto) {
+        if (ObjectUtil.isEmpty(SecureUtil.getUser())) {
+            throw new ServiceException("获取当前用户信息失败,请联系管理员");
+        }
+        boolean var = false;
+        dto.setCreateUser(SecureUtil.getUserId());
+
         if (("1").equals(dto.getSubmitStatus())) {
-            dto.setIsDeleted(1); //暂存
+            if (ObjectUtil.isNotEmpty(dto.getId())) {
+                EMOutsourcingPayInfo obj = baseMapper.selectById(dto.getId());
+                if (obj != null && obj.getStatus() == 3) {
+                    //如果是已驳回任务,那么重新生成新的记录信息
+                    dto.setId(SnowFlakeUtil.getId());
+                    var = true;
+                }
+            }
+            dto.setIsTemp(0); //暂存
             dto.setStatus(0); //未上报
-            this.saveOrUpdate(dto);
+            if (var) {
+                this.save(dto);
+            } else {
+                this.saveOrUpdate(dto);
+            }
             return true;
 
         } else if (("2").equals(dto.getSubmitStatus())) { //提交审批
-            if (ObjectUtil.isNotEmpty(dto.getId()) && !new Integer(0).equals(dto.getStatus())) {
-                throw new ServiceException("当前填报的信息不是未上报状态,不允许操作!");
+            if (ObjectUtil.isNotEmpty(dto.getId())) {
+                EMOutsourcingPayInfo obj = baseMapper.selectById(dto.getId());
+                if (obj != null && (obj.getStatus() != 0 && obj.getStatus() != 3)) {
+                    throw new ServiceException("当前填报的信息不是未上报、已驳回状态,不允许操作!");
+                } else if (obj != null && obj.getStatus() == 3) {
+                    //如果是已驳回任务,那么重新生成新的记录信息
+                    dto.setId(SnowFlakeUtil.getId());
+                    var = true;
+                }
             }
-            if (ObjectUtil.isNotEmpty(dto.getResponsibleUser()) && ObjectUtil.isNotEmpty(dto.getFinanceUser()) && ObjectUtil.isNotEmpty(dto.getCashierUser()) && ObjectUtil.isNotEmpty(dto.getCcUserList())) {
+            if (ObjectUtil.isNotEmpty(dto.getResponsibleUser()) && ObjectUtil.isNotEmpty(dto.getFinanceUser()) && ObjectUtil.isNotEmpty(dto.getCashierUser())) {
                 //新增审批任务
-                if (ObjectUtil.isEmpty(SecureUtil.getUserName())) {
-                    throw new ServiceException("获取当前用户信息失败,请联系管理员");
-                }
                 TaskProcessInfo taskProcessInfo = new TaskProcessInfo();
                 taskProcessInfo.setId(SnowFlakeUtil.getId());
                 taskProcessInfo.setStatus(1); //待审批
@@ -141,17 +164,23 @@ public class EMOutsourcingPayServiceImpl extends BaseServiceImpl<EMOutsourcingPa
                 taskProcessInfo.setAuditUserIds(StringUtils.join(auditUserIds, ","));
 
                 //抄送人
-                List<String> ccUserObjList = dto.getCcUserList().stream().map(EMProcessTaskUser::getUserId).collect(Collectors.toList());
-                taskProcessInfo.setCcUserIds(StringUtils.join(ccUserObjList, ","));
+                if (ObjectUtil.isNotEmpty(dto.getCcUserList())) {
+                    List<String> ccUserObjList = dto.getCcUserList().stream().map(EMProcessTaskUser::getUserId).collect(Collectors.toList());
+                    taskProcessInfo.setCcUserIds(StringUtils.join(ccUserObjList, ","));
+                }
                 taskProcessService.save(taskProcessInfo);
 
                 //新增信息
-                dto.setIsDeleted(0); //提交
+                dto.setIsTemp(1); //提交
                 dto.setStatus(1); //待审批
-                this.saveOrUpdate(dto);
+                if (var) {
+                    this.save(dto);
+                } else {
+                    this.saveOrUpdate(dto);
+                }
 
                 //新增审批任务关联信息
-                jdbcTemplate.execute("insert into c_expense_task_record(id,task_id,expense_info_id) values (" + SnowFlakeUtil.getId() + "," + taskProcessInfo.getId() + "," + dto.getId() + ")");
+                jdbcTemplate.execute("delete from c_expense_task_record where task_id = " + taskProcessInfo.getId() + " and expense_info_id = " + dto.getId() + " ; insert into c_expense_task_record(id,task_id,expense_info_id,expense_info_type) values (" + SnowFlakeUtil.getId() + "," + taskProcessInfo.getId() + "," + dto.getId() + ",8)");
 
                 //关联项目id只做存储,任务闭环时在进行业务计算 TODO
 
@@ -174,16 +203,18 @@ public class EMOutsourcingPayServiceImpl extends BaseServiceImpl<EMOutsourcingPa
         EMOutsourcingPayInfo obj = baseMapper.selectById(id);
         if (obj != null && obj.getStatus().equals(1)) {
             //查询记录任务关联信息
-            ExpenseTaskRecord record = jdbcTemplate.query("select * from c_expense_task_record where expense_info_id = " + id, new BeanPropertyRowMapper<>(ExpenseTaskRecord.class)).stream().findAny().orElse(null);
-            if (record != null) {
-                //删除上报的审批任务
-                jdbcTemplate.execute("delete from c_task_process_info where id = " + record.getTaskId());
-
-                //删除记录任务关联信息
-                jdbcTemplate.execute("delete from c_expense_task_record where expense_info_id = " + id + " and task_id = " + record.getTaskId());
+            List<ExpenseTaskRecord> records = jdbcTemplate.query("select * from c_expense_task_record where expense_info_id = " + id, new BeanPropertyRowMapper<>(ExpenseTaskRecord.class));
+            if (records.size() > 0) {
+                for (ExpenseTaskRecord record : records) {
+                    //删除上报的审批任务
+                    jdbcTemplate.execute("delete from c_task_process_info where id = " + record.getTaskId());
+
+                    //删除记录任务关联信息
+                    jdbcTemplate.execute("delete from c_expense_task_record where expense_info_id = " + id + " and task_id = " + record.getTaskId());
+                }
 
                 //修改当前记录为未上报状态,且暂存
-                this.update(Wrappers.<EMOutsourcingPayInfo>lambdaUpdate().set(EMOutsourcingPayInfo::getStatus, 0).set(EMOutsourcingPayInfo::getIsDeleted, 1).eq(EMOutsourcingPayInfo::getId, id));
+                this.update(Wrappers.<EMOutsourcingPayInfo>lambdaUpdate().set(EMOutsourcingPayInfo::getStatus, 0).set(EMOutsourcingPayInfo::getIsTemp, 0).eq(EMOutsourcingPayInfo::getId, id));
 
                 return true;
             }

+ 57 - 26
blade-service/blade-control/src/main/java/org/springblade/control/service/impl/EMPayServiceImpl.java

@@ -9,7 +9,7 @@ import org.apache.commons.lang.StringUtils;
 import org.springblade.common.utils.SnowFlakeUtil;
 import org.springblade.control.dto.EMPayInfoDTO;
 import org.springblade.control.entity.*;
-import org.springblade.control.mapper.EMPayMapper;
+import org.springblade.control.mapper.ExMPayMapper;
 import org.springblade.control.service.EMPayService;
 import org.springblade.control.vo.EMDraftVO;
 import org.springblade.control.vo.EMPayInfoVO;
@@ -32,7 +32,7 @@ import java.util.stream.Collectors;
 
 @Service
 @AllArgsConstructor
-public class EMPayServiceImpl extends BaseServiceImpl<EMPayMapper, EMPayInfo> implements EMPayService {
+public class EMPayServiceImpl extends BaseServiceImpl<ExMPayMapper, EMPayInfo> implements EMPayService {
 
     private final IUserClient iUserClient;
     private final JdbcTemplate jdbcTemplate;
@@ -41,6 +41,7 @@ public class EMPayServiceImpl extends BaseServiceImpl<EMPayMapper, EMPayInfo> im
     @Override
     public IPage<EMPayInfoVO> payPage(IPage<EMPayInfo> page, EMPayInfoDTO dto) {
         QueryWrapper<EMPayInfo> queryWrapper = Condition.getQueryWrapper(dto);
+        queryWrapper.lambda().eq(EMPayInfo::getIsTemp, 1);
         IPage<EMPayInfo> pages = this.page(page, queryWrapper.lambda().orderBy(true, true, EMPayInfo::getCreateTime));
         Map<Long, String> userMap = iUserClient.selectUserAll().stream().collect(Collectors.toMap(User::getId, User::getRealName));
         return pages.convert(obj -> {
@@ -49,7 +50,7 @@ public class EMPayServiceImpl extends BaseServiceImpl<EMPayMapper, EMPayInfo> im
             vo.setPayeeUserName(userMap.get(vo.getPayeeUserId()));
             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.setApprovalResultName(vo.getApprovalStatusName().equals("已审批") || vo.getApprovalStatusName().equals("已驳回") ? "已通过" : "未通过");
             return vo;
         });
     }
@@ -66,14 +67,14 @@ public class EMPayServiceImpl extends BaseServiceImpl<EMPayMapper, EMPayInfo> im
         //计算三个月前的时间
         LocalDateTime threeMonthsAgo = now.minusMonths(3);
         queryWrapper.between(EMPayInfo::getCreateTime, threeMonthsAgo, now);
-        queryWrapper.eq(EMPayInfo::getIsDeleted, 1); //暂存
+        queryWrapper.eq(EMPayInfo::getIsTemp, 0); //暂存
         List<EMPayInfo> list = baseMapper.selectList(queryWrapper);
         Map<Long, List<User>> userMaps = iUserClient.selectUserAll().stream().collect(Collectors.groupingBy(User::getId));
         List<EMDraftVO> resultVOS = new ArrayList<>();
         for (EMPayInfo obj : list) {
             EMDraftVO vo = new EMDraftVO();
             vo.setId(obj.getId());
-            userMaps.get(obj.getCreateUser()).stream().findAny().ifPresent(user -> vo.setTitle((ObjectUtil.isNotEmpty(user) && ObjectUtil.isNotEmpty(user.getRealName())) ? user.getRealName() + obj.getCreateUser() + "提交的支付申请" : ""));
+            userMaps.get(obj.getCreateUser()).stream().findAny().ifPresent(user -> vo.setTitle((ObjectUtil.isNotEmpty(user) && ObjectUtil.isNotEmpty(user.getRealName())) ? user.getRealName() + "提交的支付申请" : ""));
             vo.setUpdateTime(obj.getUpdateTime());
             resultVOS.add(vo);
         }
@@ -92,21 +93,43 @@ public class EMPayServiceImpl extends BaseServiceImpl<EMPayMapper, EMPayInfo> im
 
     @Override
     public boolean paySubmit(EMPayInfoDTO dto) {
+        if (ObjectUtil.isEmpty(SecureUtil.getUser())) {
+            throw new ServiceException("获取当前用户信息失败,请联系管理员");
+        }
+        boolean var = false;
+        dto.setCreateUser(SecureUtil.getUserId());
+
         if (("1").equals(dto.getSubmitStatus())) {
-            dto.setIsDeleted(1); //暂存
+            if (ObjectUtil.isNotEmpty(dto.getId())) {
+                EMPayInfo obj = baseMapper.selectById(dto.getId());
+                if (obj != null && obj.getStatus() == 3) {
+                    //如果是已驳回任务,那么重新生成新的记录信息
+                    dto.setId(SnowFlakeUtil.getId());
+                    var = true;
+                }
+            }
+            dto.setIsTemp(0); //暂存
             dto.setStatus(0); //未上报
-            this.saveOrUpdate(dto);
+            if (var) {
+                this.save(dto);
+            } else {
+                this.saveOrUpdate(dto);
+            }
             return true;
 
         } else if (("2").equals(dto.getSubmitStatus())) { //提交审批
-            if (ObjectUtil.isNotEmpty(dto.getId()) && !new Integer(0).equals(dto.getStatus())) {
-                throw new ServiceException("当前填报的信息不是未上报状态,不允许操作!");
+            if (ObjectUtil.isNotEmpty(dto.getId())) {
+                EMPayInfo obj = baseMapper.selectById(dto.getId());
+                if (obj != null && (obj.getStatus() != 0 && obj.getStatus() != 3)) {
+                    throw new ServiceException("当前填报的信息不是未上报、已驳回状态,不允许操作!");
+                } else if (obj != null && obj.getStatus() == 3) {
+                    //如果是已驳回任务,那么重新生成新的记录信息
+                    dto.setId(SnowFlakeUtil.getId());
+                    var = true;
+                }
             }
-            if (ObjectUtil.isNotEmpty(dto.getResponsibleUser()) && ObjectUtil.isNotEmpty(dto.getFinanceUser()) && ObjectUtil.isNotEmpty(dto.getCashierUser()) && ObjectUtil.isNotEmpty(dto.getCcUserList())) {
+            if (ObjectUtil.isNotEmpty(dto.getResponsibleUser()) && ObjectUtil.isNotEmpty(dto.getFinanceUser()) && ObjectUtil.isNotEmpty(dto.getCashierUser())) {
                 //新增审批任务
-                if (ObjectUtil.isEmpty(SecureUtil.getUserName())) {
-                    throw new ServiceException("获取当前用户信息失败,请联系管理员");
-                }
                 TaskProcessInfo taskProcessInfo = new TaskProcessInfo();
                 taskProcessInfo.setId(SnowFlakeUtil.getId());
                 taskProcessInfo.setStatus(1); //待审批
@@ -131,17 +154,23 @@ public class EMPayServiceImpl extends BaseServiceImpl<EMPayMapper, EMPayInfo> im
                 taskProcessInfo.setAuditUserIds(StringUtils.join(auditUserIds, ","));
 
                 //抄送人
-                List<String> ccUserObjList = dto.getCcUserList().stream().map(EMProcessTaskUser::getUserId).collect(Collectors.toList());
-                taskProcessInfo.setCcUserIds(StringUtils.join(ccUserObjList, ","));
+                if (ObjectUtil.isNotEmpty(dto.getCcUserList())) {
+                    List<String> ccUserObjList = dto.getCcUserList().stream().map(EMProcessTaskUser::getUserId).collect(Collectors.toList());
+                    taskProcessInfo.setCcUserIds(StringUtils.join(ccUserObjList, ","));
+                }
                 taskProcessService.save(taskProcessInfo);
 
                 //新增信息
-                dto.setIsDeleted(0); //提交
+                dto.setIsTemp(1); //提交
                 dto.setStatus(1); //待审批
-                this.saveOrUpdate(dto);
+                if (var) {
+                    this.save(dto);
+                } else {
+                    this.saveOrUpdate(dto);
+                }
 
                 //新增审批任务关联信息
-                jdbcTemplate.execute("insert into c_expense_task_record(id,task_id,expense_info_id) values (" + SnowFlakeUtil.getId() + "," + taskProcessInfo.getId() + "," + dto.getId() + ")");
+                jdbcTemplate.execute("delete from c_expense_task_record where task_id = " + taskProcessInfo.getId() + " and expense_info_id = " + dto.getId() + " ; insert into c_expense_task_record(id,task_id,expense_info_id,expense_info_type) values (" + SnowFlakeUtil.getId() + "," + taskProcessInfo.getId() + "," + dto.getId() + ",3)");
 
                 //关联项目、合同项目提成等目前只做存储,在审批完成后闭环时再进行计算推送 TODO
                 return true;
@@ -163,16 +192,18 @@ public class EMPayServiceImpl extends BaseServiceImpl<EMPayMapper, EMPayInfo> im
         EMPayInfo obj = baseMapper.selectById(id);
         if (obj != null && obj.getStatus().equals(1)) {
             //查询记录任务关联信息
-            ExpenseTaskRecord record = jdbcTemplate.query("select * from c_expense_task_record where expense_info_id = " + id, new BeanPropertyRowMapper<>(ExpenseTaskRecord.class)).stream().findAny().orElse(null);
-            if (record != null) {
-                //删除上报的审批任务
-                jdbcTemplate.execute("delete from c_task_process_info where id = " + record.getTaskId());
-
-                //删除记录任务关联信息
-                jdbcTemplate.execute("delete from c_expense_task_record where expense_info_id = " + id + " and task_id = " + record.getTaskId());
+            List<ExpenseTaskRecord> records = jdbcTemplate.query("select * from c_expense_task_record where expense_info_id = " + id, new BeanPropertyRowMapper<>(ExpenseTaskRecord.class));
+            if (records.size() > 0) {
+                for (ExpenseTaskRecord record : records) {
+                    //删除上报的审批任务
+                    jdbcTemplate.execute("delete from c_task_process_info where id = " + record.getTaskId());
+
+                    //删除记录任务关联信息
+                    jdbcTemplate.execute("delete from c_expense_task_record where expense_info_id = " + id + " and task_id = " + record.getTaskId());
+                }
 
                 //修改当前记录为未上报状态,且暂存
-                this.update(Wrappers.<EMPayInfo>lambdaUpdate().set(EMPayInfo::getStatus, 0).set(EMPayInfo::getIsDeleted, 1).eq(EMPayInfo::getId, id));
+                this.update(Wrappers.<EMPayInfo>lambdaUpdate().set(EMPayInfo::getStatus, 0).set(EMPayInfo::getIsTemp, 0).eq(EMPayInfo::getId, id));
 
                 return true;
             }

+ 57 - 26
blade-service/blade-control/src/main/java/org/springblade/control/service/impl/EMPurchaseServiceImpl.java

@@ -9,7 +9,7 @@ import org.apache.commons.lang.StringUtils;
 import org.springblade.common.utils.SnowFlakeUtil;
 import org.springblade.control.dto.EMPurchaseInfoDTO;
 import org.springblade.control.entity.*;
-import org.springblade.control.mapper.EMPurchaseMapper;
+import org.springblade.control.mapper.ExMPurchaseMapper;
 import org.springblade.control.service.EMPurchaseService;
 import org.springblade.control.vo.EMDraftVO;
 import org.springblade.control.vo.EMPurchaseInfoVO;
@@ -32,7 +32,7 @@ import java.util.stream.Collectors;
 
 @Service
 @AllArgsConstructor
-public class EMPurchaseServiceImpl extends BaseServiceImpl<EMPurchaseMapper, EMPurchaseInfo> implements EMPurchaseService {
+public class EMPurchaseServiceImpl extends BaseServiceImpl<ExMPurchaseMapper, EMPurchaseInfo> implements EMPurchaseService {
 
     private final IUserClient iUserClient;
     private final JdbcTemplate jdbcTemplate;
@@ -41,6 +41,7 @@ public class EMPurchaseServiceImpl extends BaseServiceImpl<EMPurchaseMapper, EMP
     @Override
     public IPage<EMPurchaseInfoVO> purchasePage(IPage<EMPurchaseInfo> page, EMPurchaseInfoDTO dto) {
         QueryWrapper<EMPurchaseInfo> queryWrapper = Condition.getQueryWrapper(dto);
+        queryWrapper.lambda().eq(EMPurchaseInfo::getIsTemp, 1);
         IPage<EMPurchaseInfo> pages = this.page(page, queryWrapper.lambda().orderBy(true, true, EMPurchaseInfo::getCreateTime));
         Map<Long, String> userMap = iUserClient.selectUserAll().stream().collect(Collectors.toMap(User::getId, User::getRealName));
         List<DictInfo> dictInfoList = jdbcTemplate.query("select dict_name,dict_value from c_dict_info where code = 'purchase_type'", new BeanPropertyRowMapper<>(DictInfo.class));
@@ -55,7 +56,7 @@ public class EMPurchaseServiceImpl extends BaseServiceImpl<EMPurchaseMapper, EMP
             }
             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.setApprovalResultName(vo.getApprovalStatusName().equals("已审批") || vo.getApprovalStatusName().equals("已驳回") ? "已通过" : "未通过");
             return vo;
         });
     }
@@ -72,14 +73,14 @@ public class EMPurchaseServiceImpl extends BaseServiceImpl<EMPurchaseMapper, EMP
         //计算三个月前的时间
         LocalDateTime threeMonthsAgo = now.minusMonths(3);
         queryWrapper.between(EMPurchaseInfo::getCreateTime, threeMonthsAgo, now);
-        queryWrapper.eq(EMPurchaseInfo::getIsDeleted, 1); //暂存
+        queryWrapper.eq(EMPurchaseInfo::getIsTemp, 0); //暂存
         List<EMPurchaseInfo> list = baseMapper.selectList(queryWrapper);
         Map<Long, List<User>> userMaps = iUserClient.selectUserAll().stream().collect(Collectors.groupingBy(User::getId));
         List<EMDraftVO> resultVOS = new ArrayList<>();
         for (EMPurchaseInfo obj : list) {
             EMDraftVO vo = new EMDraftVO();
             vo.setId(obj.getId());
-            userMaps.get(obj.getCreateUser()).stream().findAny().ifPresent(user -> vo.setTitle((ObjectUtil.isNotEmpty(user) && ObjectUtil.isNotEmpty(user.getRealName())) ? user.getRealName() + obj.getCreateUser() + "提交的采购申请" : ""));
+            userMaps.get(obj.getCreateUser()).stream().findAny().ifPresent(user -> vo.setTitle((ObjectUtil.isNotEmpty(user) && ObjectUtil.isNotEmpty(user.getRealName())) ? user.getRealName() + "提交的采购申请" : ""));
             vo.setUpdateTime(obj.getUpdateTime());
             resultVOS.add(vo);
         }
@@ -98,21 +99,43 @@ public class EMPurchaseServiceImpl extends BaseServiceImpl<EMPurchaseMapper, EMP
 
     @Override
     public boolean purchaseSubmit(EMPurchaseInfoDTO dto) {
+        if (ObjectUtil.isEmpty(SecureUtil.getUser())) {
+            throw new ServiceException("获取当前用户信息失败,请联系管理员");
+        }
+        boolean var = false;
+        dto.setCreateUser(SecureUtil.getUserId());
+
         if (("1").equals(dto.getSubmitStatus())) {
-            dto.setIsDeleted(1); //暂存
+            if (ObjectUtil.isNotEmpty(dto.getId())) {
+                EMPurchaseInfo obj = baseMapper.selectById(dto.getId());
+                if (obj != null && obj.getStatus() == 3) {
+                    //如果是已驳回任务,那么重新生成新的记录信息
+                    dto.setId(SnowFlakeUtil.getId());
+                    var = true;
+                }
+            }
+            dto.setIsTemp(0); //暂存
             dto.setStatus(0); //未上报
-            this.saveOrUpdate(dto);
+            if (var) {
+                this.save(dto);
+            } else {
+                this.saveOrUpdate(dto);
+            }
             return true;
 
         } else if (("2").equals(dto.getSubmitStatus())) { //提交审批
-            if (ObjectUtil.isNotEmpty(dto.getId()) && !new Integer(0).equals(dto.getStatus())) {
-                throw new ServiceException("当前填报的信息不是未上报状态,不允许操作!");
+            if (ObjectUtil.isNotEmpty(dto.getId())) {
+                EMPurchaseInfo obj = baseMapper.selectById(dto.getId());
+                if (obj != null && (obj.getStatus() != 0 && obj.getStatus() != 3)) {
+                    throw new ServiceException("当前填报的信息不是未上报、已驳回状态,不允许操作!");
+                } else if (obj != null && obj.getStatus() == 3) {
+                    //如果是已驳回任务,那么重新生成新的记录信息
+                    dto.setId(SnowFlakeUtil.getId());
+                    var = true;
+                }
             }
-            if (ObjectUtil.isNotEmpty(dto.getResponsibleUser()) && ObjectUtil.isNotEmpty(dto.getFinanceUser()) && ObjectUtil.isNotEmpty(dto.getCashierUser()) && ObjectUtil.isNotEmpty(dto.getCcUserList())) {
+            if (ObjectUtil.isNotEmpty(dto.getResponsibleUser()) && ObjectUtil.isNotEmpty(dto.getFinanceUser()) && ObjectUtil.isNotEmpty(dto.getCashierUser())) {
                 //新增审批任务
-                if (ObjectUtil.isEmpty(SecureUtil.getUserName())) {
-                    throw new ServiceException("获取当前用户信息失败,请联系管理员");
-                }
                 TaskProcessInfo taskProcessInfo = new TaskProcessInfo();
                 taskProcessInfo.setId(SnowFlakeUtil.getId());
                 taskProcessInfo.setStatus(1); //待审批
@@ -137,17 +160,23 @@ public class EMPurchaseServiceImpl extends BaseServiceImpl<EMPurchaseMapper, EMP
                 taskProcessInfo.setAuditUserIds(StringUtils.join(auditUserIds, ","));
 
                 //抄送人
-                List<String> ccUserObjList = dto.getCcUserList().stream().map(EMProcessTaskUser::getUserId).collect(Collectors.toList());
-                taskProcessInfo.setCcUserIds(StringUtils.join(ccUserObjList, ","));
+                if (ObjectUtil.isNotEmpty(dto.getCcUserList())) {
+                    List<String> ccUserObjList = dto.getCcUserList().stream().map(EMProcessTaskUser::getUserId).collect(Collectors.toList());
+                    taskProcessInfo.setCcUserIds(StringUtils.join(ccUserObjList, ","));
+                }
                 taskProcessService.save(taskProcessInfo);
 
                 //新增信息
-                dto.setIsDeleted(0); //提交
+                dto.setIsTemp(1); //提交
                 dto.setStatus(1); //待审批
-                this.saveOrUpdate(dto);
+                if (var) {
+                    this.save(dto);
+                } else {
+                    this.saveOrUpdate(dto);
+                }
 
                 //新增审批任务关联信息
-                jdbcTemplate.execute("insert into c_expense_task_record(id,task_id,expense_info_id) values (" + SnowFlakeUtil.getId() + "," + taskProcessInfo.getId() + "," + dto.getId() + ")");
+                jdbcTemplate.execute("delete from c_expense_task_record where task_id = " + taskProcessInfo.getId() + " and expense_info_id = " + dto.getId() + " ; insert into c_expense_task_record(id,task_id,expense_info_id,expense_info_type) values (" + SnowFlakeUtil.getId() + "," + taskProcessInfo.getId() + "," + dto.getId() + ",5)");
 
                 return true;
 
@@ -168,16 +197,18 @@ public class EMPurchaseServiceImpl extends BaseServiceImpl<EMPurchaseMapper, EMP
         EMPurchaseInfo obj = baseMapper.selectById(id);
         if (obj != null && obj.getStatus().equals(1)) {
             //查询记录任务关联信息
-            ExpenseTaskRecord record = jdbcTemplate.query("select * from c_expense_task_record where expense_info_id = " + id, new BeanPropertyRowMapper<>(ExpenseTaskRecord.class)).stream().findAny().orElse(null);
-            if (record != null) {
-                //删除上报的审批任务
-                jdbcTemplate.execute("delete from c_task_process_info where id = " + record.getTaskId());
-
-                //删除记录任务关联信息
-                jdbcTemplate.execute("delete from c_expense_task_record where expense_info_id = " + id + " and task_id = " + record.getTaskId());
+            List<ExpenseTaskRecord> records = jdbcTemplate.query("select * from c_expense_task_record where expense_info_id = " + id, new BeanPropertyRowMapper<>(ExpenseTaskRecord.class));
+            if (records.size() > 0) {
+                for (ExpenseTaskRecord record : records) {
+                    //删除上报的审批任务
+                    jdbcTemplate.execute("delete from c_task_process_info where id = " + record.getTaskId());
+
+                    //删除记录任务关联信息
+                    jdbcTemplate.execute("delete from c_expense_task_record where expense_info_id = " + id + " and task_id = " + record.getTaskId());
+                }
 
                 //修改当前记录为未上报状态,且暂存
-                this.update(Wrappers.<EMPurchaseInfo>lambdaUpdate().set(EMPurchaseInfo::getStatus, 0).set(EMPurchaseInfo::getIsDeleted,1).eq(EMPurchaseInfo::getId, id));
+                this.update(Wrappers.<EMPurchaseInfo>lambdaUpdate().set(EMPurchaseInfo::getStatus, 0).set(EMPurchaseInfo::getIsTemp, 0).eq(EMPurchaseInfo::getId, id));
 
                 return true;
             }

+ 58 - 28
blade-service/blade-control/src/main/java/org/springblade/control/service/impl/EMUseCarServiceImpl.java

@@ -9,7 +9,7 @@ import org.apache.commons.lang.StringUtils;
 import org.springblade.common.utils.SnowFlakeUtil;
 import org.springblade.control.dto.EMUseCarInfoDTO;
 import org.springblade.control.entity.*;
-import org.springblade.control.mapper.EMUseCarMapper;
+import org.springblade.control.mapper.ExMUseCarMapper;
 import org.springblade.control.service.EMUseCarService;
 import org.springblade.control.vo.EMDraftVO;
 import org.springblade.control.vo.EMUseCarInfoVO;
@@ -32,16 +32,16 @@ import java.util.stream.Collectors;
 
 @Service
 @AllArgsConstructor
-public class EMUseCarServiceImpl extends BaseServiceImpl<EMUseCarMapper, EMUseCarInfo> implements EMUseCarService {
+public class EMUseCarServiceImpl extends BaseServiceImpl<ExMUseCarMapper, EMUseCarInfo> implements EMUseCarService {
 
     private final IUserClient iUserClient;
     private final JdbcTemplate jdbcTemplate;
     private final TaskProcessServiceImpl taskProcessService;
 
-
     @Override
     public IPage<EMUseCarInfoVO> carPage(IPage<EMUseCarInfo> page, EMUseCarInfoDTO dto) {
         QueryWrapper<EMUseCarInfo> queryWrapper = Condition.getQueryWrapper(dto);
+        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));
         return pages.convert(obj -> {
@@ -49,7 +49,7 @@ public class EMUseCarServiceImpl extends BaseServiceImpl<EMUseCarMapper, EMUseCa
             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.setApprovalResultName(vo.getApprovalStatusName().equals("已审批") || vo.getApprovalStatusName().equals("已驳回") ? "已通过" : "未通过");
             vo.setUcOrgName(""); //TODO 部门
             vo.setUseReturnDate(vo.getUseStartDate() + "-" + vo.getUseEndDate());
             return vo;
@@ -68,14 +68,14 @@ public class EMUseCarServiceImpl extends BaseServiceImpl<EMUseCarMapper, EMUseCa
         //计算三个月前的时间
         LocalDateTime threeMonthsAgo = now.minusMonths(3);
         queryWrapper.between(EMUseCarInfo::getCreateTime, threeMonthsAgo, now);
-        queryWrapper.eq(EMUseCarInfo::getIsDeleted, 1); //暂存
+        queryWrapper.eq(EMUseCarInfo::getIsTemp, 0); //暂存
         List<EMUseCarInfo> list = baseMapper.selectList(queryWrapper);
         Map<Long, List<User>> userMaps = iUserClient.selectUserAll().stream().collect(Collectors.groupingBy(User::getId));
         List<EMDraftVO> resultVOS = new ArrayList<>();
         for (EMUseCarInfo obj : list) {
             EMDraftVO vo = new EMDraftVO();
             vo.setId(obj.getId());
-            userMaps.get(obj.getCreateUser()).stream().findAny().ifPresent(user -> vo.setTitle((ObjectUtil.isNotEmpty(user) && ObjectUtil.isNotEmpty(user.getRealName())) ? user.getRealName() + obj.getCreateUser() + "提交的用车申请" : ""));
+            userMaps.get(obj.getCreateUser()).stream().findAny().ifPresent(user -> vo.setTitle((ObjectUtil.isNotEmpty(user) && ObjectUtil.isNotEmpty(user.getRealName())) ? user.getRealName() + "提交的用车申请" : ""));
             vo.setUpdateTime(obj.getUpdateTime());
             resultVOS.add(vo);
         }
@@ -94,21 +94,43 @@ public class EMUseCarServiceImpl extends BaseServiceImpl<EMUseCarMapper, EMUseCa
 
     @Override
     public boolean carSubmit(EMUseCarInfoDTO dto) {
+        if (ObjectUtil.isEmpty(SecureUtil.getUser())) {
+            throw new ServiceException("获取当前用户信息失败,请联系管理员");
+        }
+        boolean var = false;
+        dto.setCreateUser(SecureUtil.getUserId());
+
         if (("1").equals(dto.getSubmitStatus())) {
-            dto.setIsDeleted(1); //暂存
+            if (ObjectUtil.isNotEmpty(dto.getId())) {
+                EMUseCarInfo obj = baseMapper.selectById(dto.getId());
+                if (obj != null && obj.getStatus() == 3) {
+                    //如果是已驳回任务,那么重新生成新的记录信息
+                    dto.setId(SnowFlakeUtil.getId());
+                    var = true;
+                }
+            }
+            dto.setIsTemp(0); //暂存
             dto.setStatus(0); //未上报
-            this.saveOrUpdate(dto);
+            if (var) {
+                this.save(dto);
+            } else {
+                this.saveOrUpdate(dto);
+            }
             return true;
 
         } else if (("2").equals(dto.getSubmitStatus())) { //提交审批
-            if (ObjectUtil.isNotEmpty(dto.getId()) && !new Integer(0).equals(dto.getStatus())) {
-                throw new ServiceException("当前填报的信息不是未上报状态,不允许操作!");
+            if (ObjectUtil.isNotEmpty(dto.getId())) {
+                EMUseCarInfo obj = baseMapper.selectById(dto.getId());
+                if (obj != null && (obj.getStatus() != 0 && obj.getStatus() != 3)) {
+                    throw new ServiceException("当前填报的信息不是未上报、已驳回状态,不允许操作!");
+                } else if (obj != null && obj.getStatus() == 3) {
+                    //如果是已驳回任务,那么重新生成新的记录信息
+                    dto.setId(SnowFlakeUtil.getId());
+                    var = true;
+                }
             }
-            if (ObjectUtil.isNotEmpty(dto.getResponsibleUser()) && ObjectUtil.isNotEmpty(dto.getPersonnelUser()) && ObjectUtil.isNotEmpty(dto.getCcUserList())) {
+            if (ObjectUtil.isNotEmpty(dto.getResponsibleUser()) && ObjectUtil.isNotEmpty(dto.getPersonnelUser())) {
                 //新增审批任务
-                if (ObjectUtil.isEmpty(SecureUtil.getUserName())) {
-                    throw new ServiceException("获取当前用户信息失败,请联系管理员");
-                }
                 TaskProcessInfo taskProcessInfo = new TaskProcessInfo();
                 taskProcessInfo.setId(SnowFlakeUtil.getId());
                 taskProcessInfo.setStatus(1); //待审批
@@ -127,17 +149,23 @@ public class EMUseCarServiceImpl extends BaseServiceImpl<EMUseCarMapper, EMUseCa
                 taskProcessInfo.setAuditUserIds(StringUtils.join(auditUserIds, ","));
 
                 //抄送人
-                List<String> ccUserObjList = dto.getCcUserList().stream().map(EMProcessTaskUser::getUserId).collect(Collectors.toList());
-                taskProcessInfo.setCcUserIds(StringUtils.join(ccUserObjList, ","));
+                if (ObjectUtil.isNotEmpty(dto.getCcUserList())) {
+                    List<String> ccUserObjList = dto.getCcUserList().stream().map(EMProcessTaskUser::getUserId).collect(Collectors.toList());
+                    taskProcessInfo.setCcUserIds(StringUtils.join(ccUserObjList, ","));
+                }
                 taskProcessService.save(taskProcessInfo);
 
                 //新增信息
-                dto.setIsDeleted(0); //提交
+                dto.setIsTemp(1); //提交
                 dto.setStatus(1); //待审批
-                this.saveOrUpdate(dto);
+                if (var) {
+                    this.save(dto);
+                } else {
+                    this.saveOrUpdate(dto);
+                }
 
                 //新增审批任务关联信息
-                jdbcTemplate.execute("insert into c_expense_task_record(id,task_id,expense_info_id) values (" + SnowFlakeUtil.getId() + "," + taskProcessInfo.getId() + "," + dto.getId() + ")");
+                jdbcTemplate.execute("delete from c_expense_task_record where task_id = " + taskProcessInfo.getId() + " and expense_info_id = " + dto.getId() + " ; insert into c_expense_task_record(id,task_id,expense_info_id,expense_info_type) values (" + SnowFlakeUtil.getId() + "," + taskProcessInfo.getId() + "," + dto.getId() + ",6)");
 
                 return true;
 
@@ -150,7 +178,7 @@ public class EMUseCarServiceImpl extends BaseServiceImpl<EMUseCarMapper, EMUseCa
 
     @Override
     public boolean carRemove(Long id) {
-        return false;
+        return this.removeById(id);
     }
 
     @Override
@@ -158,16 +186,18 @@ public class EMUseCarServiceImpl extends BaseServiceImpl<EMUseCarMapper, EMUseCa
         EMUseCarInfo obj = baseMapper.selectById(id);
         if (obj != null && obj.getStatus().equals(1)) {
             //查询记录任务关联信息
-            ExpenseTaskRecord record = jdbcTemplate.query("select * from c_expense_task_record where expense_info_id = " + id, new BeanPropertyRowMapper<>(ExpenseTaskRecord.class)).stream().findAny().orElse(null);
-            if (record != null) {
-                //删除上报的审批任务
-                jdbcTemplate.execute("delete from c_task_process_info where id = " + record.getTaskId());
-
-                //删除记录任务关联信息
-                jdbcTemplate.execute("delete from c_expense_task_record where expense_info_id = " + id + " and task_id = " + record.getTaskId());
+            List<ExpenseTaskRecord> records = jdbcTemplate.query("select * from c_expense_task_record where expense_info_id = " + id, new BeanPropertyRowMapper<>(ExpenseTaskRecord.class));
+            if (records.size() > 0) {
+                for (ExpenseTaskRecord record : records) {
+                    //删除上报的审批任务
+                    jdbcTemplate.execute("delete from c_task_process_info where id = " + record.getTaskId());
+
+                    //删除记录任务关联信息
+                    jdbcTemplate.execute("delete from c_expense_task_record where expense_info_id = " + id + " and task_id = " + record.getTaskId());
+                }
 
                 //修改当前记录为未上报状态
-                this.update(Wrappers.<EMUseCarInfo>lambdaUpdate().set(EMUseCarInfo::getStatus, 0).set(EMUseCarInfo::getIsDeleted, 1).eq(EMUseCarInfo::getId, id));
+                this.update(Wrappers.<EMUseCarInfo>lambdaUpdate().set(EMUseCarInfo::getStatus, 0).set(EMUseCarInfo::getIsTemp, 0).eq(EMUseCarInfo::getId, id));
 
                 return true;
             }

+ 122 - 31
blade-service/blade-control/src/main/java/org/springblade/control/service/impl/TaskProcessServiceImpl.java

@@ -3,12 +3,14 @@ package org.springblade.control.service.impl;
 import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
 import com.baomidou.mybatisplus.core.metadata.IPage;
 import com.baomidou.mybatisplus.core.toolkit.Wrappers;
+import com.fasterxml.jackson.core.JsonProcessingException;
+import com.fasterxml.jackson.core.type.TypeReference;
+import com.fasterxml.jackson.databind.ObjectMapper;
 import lombok.AllArgsConstructor;
 import org.apache.commons.lang.StringUtils;
 import org.apache.commons.lang.time.DateUtils;
 import org.springblade.control.dto.TaskProcessInfoDTO;
-import org.springblade.control.entity.DictInfo;
-import org.springblade.control.entity.TaskProcessInfo;
+import org.springblade.control.entity.*;
 import org.springblade.control.mapper.TaskProcessMapper;
 import org.springblade.control.service.TaskProcessService;
 import org.springblade.control.vo.*;
@@ -40,7 +42,7 @@ public class TaskProcessServiceImpl extends BaseServiceImpl<TaskProcessMapper, T
 
     @Override
     public IPage<TaskProcessInfoVO> taskPage(IPage<TaskProcessInfo> page, TaskProcessInfoDTO dto) {
-        if (ObjectUtil.isEmpty(SecureUtil.getUserId())) {
+        if (ObjectUtil.isEmpty(SecureUtil.getUser())) {
             throw new ServiceException("未获取到当前用户信息,请联系管理员");
         }
         QueryWrapper<TaskProcessInfo> queryWrapper = Condition.getQueryWrapper(dto);
@@ -98,13 +100,14 @@ public class TaskProcessServiceImpl extends BaseServiceImpl<TaskProcessMapper, T
         TaskProcessInfoDetailVO vo = new TaskProcessInfoDetailVO();
         TaskProcessInfo taskProcessInfo = baseMapper.selectById(id);
         if (taskProcessInfo != null) {
-            //封装基础信息
+            //构造基础信息
             Map<Long, String> userMap = iUserClient.selectUserAll().stream().collect(Collectors.toMap(User::getId, User::getRealName));
-            List<DictInfo> dictInfoList = jdbcTemplate.query("select dict_name,dict_value from c_dict_info where code = 'report_type'", new BeanPropertyRowMapper<>(DictInfo.class));
-            TypeToTaskProcessDetailBasicsVO basicsVO = new TypeToTaskProcessDetailBasicsVO();
+            List<DictInfo> dictInfoList1 = jdbcTemplate.query("select dict_name,dict_value from c_dict_info where code = 'report_type'", new BeanPropertyRowMapper<>(DictInfo.class));
+            List<DictInfo> dictInfoList2 = jdbcTemplate.query("select dict_name,dict_value from c_dict_info where code = 'expense_fr_type'", new BeanPropertyRowMapper<>(DictInfo.class));
+            TaskProcessDetailBasicsVO basicsVO = new TaskProcessDetailBasicsVO();
             basicsVO.setTaskId(taskProcessInfo.getId());
             basicsVO.setTaskName(taskProcessInfo.getTaskName());
-            for (DictInfo dictInfo : dictInfoList) {
+            for (DictInfo dictInfo : dictInfoList1) {
                 if ((taskProcessInfo.getTaskType() + "").equals(dictInfo.getDictValue())) {
                     basicsVO.setReportTypeName(dictInfo.getDictName());
                     break;
@@ -115,29 +118,78 @@ public class TaskProcessServiceImpl extends BaseServiceImpl<TaskProcessMapper, T
             basicsVO.setReportDate(taskProcessInfo.getReportDate());
             vo.setBasicsInfo(basicsVO);
 
-            if ("1".equals((taskProcessInfo.getTaskType() + ""))) {
-                //计划任务类型1
-                TypeToTaskPlanDetailVO toTaskPlanDetailVO = new TypeToTaskPlanDetailVO();
-
-                toTaskPlanDetailVO.setTaskInfoList(null); //获取计划任务List TODO
-
-                //其他属性 TODO
-
-                vo.setToTaskPlanDetailVO(toTaskPlanDetailVO);
-
-            } else if (("2,3,4,5,6").contains(taskProcessInfo.getTaskType() + "")) {
-                //财务2、支付3、借款4、采购5、外包6类型
-                TypeToEMFDetailVO toEMFDetailVO = new TypeToEMFDetailVO();
-
-                toEMFDetailVO.setTaskInfoList(null); //获取计划任务List
-
-                //其他属性
-
-                vo.setTypeToEMFDetailVO(toEMFDetailVO);
-
-            } else {
-                //其他类型
-
+            //查询审批任务与业务数据关系,构造其他信息
+            List<ExpenseTaskRecord> expenseTaskRecords = jdbcTemplate.query("select * from c_expense_task_record where task_id = " + id, new BeanPropertyRowMapper<>(ExpenseTaskRecord.class));
+            if (expenseTaskRecords.size() > 0) {
+                Object data = null;
+                for (ExpenseTaskRecord record : expenseTaskRecords) {
+                    if (ObjectUtil.isNotEmpty(record.getExpenseInfoType())) {
+                        Integer type = record.getExpenseInfoType();
+                        switch (type) {
+                            case 1: //计划任务
+                                //TODO 处理计划任务List
+                                vo.setPlanTaskInfoList(null);
+                                break;
+
+                            case 2: //财务
+                                data = jdbcTemplate.query("select * from c_expense_financial_reimbursement_info where id = " + record.getExpenseInfoId(), new BeanPropertyRowMapper<>(EMFinancialReimbursementInfo.class)).stream().findAny().orElse(null);
+
+                                EMFinancialReimbursementInfoVO voCW = BeanUtil.copyProperties(data, EMFinancialReimbursementInfoVO.class);
+                                if (voCW != null){
+                                    for (DictInfo dictInfo : dictInfoList2) {
+                                        if (dictInfo.getDictValue().equals(voCW.getFrType() + "")) {
+                                            voCW.setFrTypeName(dictInfo.getDictName());
+                                            break;
+                                        }
+                                    }
+                                    voCW.setUserNameVesting(userMap.get(voCW.getCreateUser()));
+                                    data = voCW;
+                                }
+
+                                vo.setPlanTaskInfoList(null); //TODO 处理计划任务List
+
+                                break;
+                            case 3: //支付
+                                data = jdbcTemplate.query("select * from c_expense_pay_info where id = " + record.getExpenseInfoId(), new BeanPropertyRowMapper<>(EMPayInfo.class)).stream().findAny().orElse(null);
+                                break;
+                            case 4: //借款
+                                data = jdbcTemplate.query("select * from c_expense_loan_info where id = " + record.getExpenseInfoId(), new BeanPropertyRowMapper<>(EMLoanInfo.class)).stream().findAny().orElse(null);
+                                break;
+                            case 5: //采购
+                                data = jdbcTemplate.query("select * from c_expense_purchase_info where id = " + record.getExpenseInfoId(), new BeanPropertyRowMapper<>(EMPurchaseInfo.class)).stream().findAny().orElse(null);
+                                break;
+                            case 6: //用车
+                                data = jdbcTemplate.query("select * from c_expense_use_car_info where id = " + record.getExpenseInfoId(), new BeanPropertyRowMapper<>(EMUseCarInfo.class)).stream().findAny().orElse(null);
+                                break;
+                            case 7: //发票
+                                data = jdbcTemplate.query("select * from c_expense_invoice_info where id = " + record.getExpenseInfoId(), new BeanPropertyRowMapper<>(EMInvoiceInfo.class)).stream().findAny().orElse(null);
+
+                                //TODO 此处根据invoiceContentType查询发票字典,封装vo
+
+                                break;
+                            case 8: //外包
+                                data = jdbcTemplate.query("select * from c_expense_outsourcing_pay_info where id = " + record.getExpenseInfoId(), new BeanPropertyRowMapper<>(EMOutsourcingPayInfo.class)).stream().findAny().orElse(null);
+                                break;
+                            case 9: //出差
+                                data = jdbcTemplate.query("select * from c_attendance_trip_info where id = " + record.getExpenseInfoId(), new BeanPropertyRowMapper<>(AttendanceTripInfo.class)).stream().findAny().orElse(null);
+
+                                vo.setPlanTaskInfoList(null); //TODO 处理计划任务List
+
+                                break;
+                        }
+                    }
+                }
+                if (data != null) {
+                    ObjectMapper objectMapper = new ObjectMapper();
+                    try {
+                        String json = objectMapper.writeValueAsString(data);
+                        Map<String, Object> map = objectMapper.readValue(json, new TypeReference<Map<String, Object>>() {
+                        });
+                        vo.setOtherInfo(map);
+                    } catch (JsonProcessingException e) {
+                        e.printStackTrace();
+                    }
+                }
             }
         }
         return vo;
@@ -145,7 +197,46 @@ public class TaskProcessServiceImpl extends BaseServiceImpl<TaskProcessMapper, T
 
     @Override
     public boolean taskReject(TaskProcessInfoDTO dto) {
-        return this.update(Wrappers.<TaskProcessInfo>lambdaUpdate().set(TaskProcessInfo::getStatus, 3).set(TaskProcessInfo::getRejectDesc, dto.getRejectDesc()).eq(TaskProcessInfo::getId, dto.getId()));
+        //修改业务数据状态为已驳回
+        List<ExpenseTaskRecord> records = jdbcTemplate.query("select * from task_id = " + dto.getId(), new BeanPropertyRowMapper<>(ExpenseTaskRecord.class));
+        for (ExpenseTaskRecord record : records) {
+            if (ObjectUtil.isNotEmpty(record.getExpenseInfoType())) {
+                Integer type = record.getExpenseInfoType();
+                switch (type) {
+                    case 1: //计划任务
+                        //TODO 修改计划任务状态
+                        break;
+
+                    case 2: //财务
+                        jdbcTemplate.execute("update c_expense_financial_reimbursement_info set status = 3 where id = " + record.getExpenseInfoId());
+                        break;
+                    case 3: //支付
+                        jdbcTemplate.execute("update c_expense_pay_info set status = 3 where id = " + record.getExpenseInfoId());
+                        break;
+                    case 4: //借款
+                        jdbcTemplate.execute("update c_expense_loan_info set status = 3 where id = " + record.getExpenseInfoId());
+                        break;
+                    case 5: //采购
+                        jdbcTemplate.execute("update c_expense_purchase_info set status = 3 where id = " + record.getExpenseInfoId());
+                        break;
+                    case 6: //用车
+                        jdbcTemplate.execute("update c_expense_use_car_info set status = 3 where id = " + record.getExpenseInfoId());
+                        break;
+                    case 7: //发票
+                        jdbcTemplate.execute("update c_expense_invoice_info set status = 3 where id = " + record.getExpenseInfoId());
+                        break;
+                    case 8: //外包
+                        jdbcTemplate.execute("update c_expense_outsourcing_pay_info set status = 3 where id = " + record.getExpenseInfoId());
+                        break;
+                    case 9: //出差
+                        jdbcTemplate.execute("update c_attendance_trip_info set status = 3 where id = " + record.getExpenseInfoId());
+                        break;
+                }
+            }
+        }
+        //修改审批任务状态为已驳回
+        this.update(Wrappers.<TaskProcessInfo>lambdaUpdate().set(TaskProcessInfo::getStatus, 3).set(TaskProcessInfo::getRejectDesc, dto.getRejectDesc()).eq(TaskProcessInfo::getId, dto.getId()));
+        return true;
     }
 
     @Override

+ 32 - 0
blade-service/blade-control/src/main/java/org/springblade/control/utils/BuildSerialUtils.java

@@ -0,0 +1,32 @@
+package org.springblade.control.utils;
+
+public class BuildSerialUtils {
+
+    /***
+     * 按格式生成序号,如0001,0002...9999
+     * @param num 数字
+     * @param scale 位数
+     * @return 按位数格式化的序号,如0019
+     */
+    public static String buildSerial(int num, int scale) {
+        if (scale <= 0) {
+            throw new IllegalArgumentException("scale:" + scale);
+        }
+        int count = 0;
+        int aIdx = num;
+        while ((aIdx = aIdx / 10) > 0) {
+            count++;
+        }
+        count++;
+        if (count > scale || num <= 0) {
+            throw new IllegalArgumentException("idx:" + num);
+        }
+        StringBuilder buf = new StringBuilder(scale);
+        for (int i = scale - count; --i >= 0; ) {
+            buf.append(0);
+        }
+        buf.append(num);
+        return buf.toString();
+    }
+
+}