Browse Source

更新收付款单

jihs 4 years ago
parent
commit
72de192f77
31 changed files with 1299 additions and 268 deletions
  1. 3 0
      src/main/java/org/jeecg/common/dto/archives/ProArchivesAddReqDTO.java
  2. 3 0
      src/main/java/org/jeecg/common/dto/archives/ProArchivesAddRespDTO.java
  3. 2 0
      src/main/java/org/jeecg/common/dto/archives/ProBusinessOtherListRespDTO.java
  4. 17 0
      src/main/java/org/jeecg/common/dto/payment/SlieReqDTO.java
  5. 37 0
      src/main/java/org/jeecg/common/dto/payment/SlipAddReqDTO.java
  6. 40 0
      src/main/java/org/jeecg/common/dto/payment/SlipContentAddReqDTO.java
  7. 56 0
      src/main/java/org/jeecg/common/dto/payment/SlipContentRespDTO.java
  8. 56 0
      src/main/java/org/jeecg/common/dto/payment/SlipRespDTO.java
  9. 49 1
      src/main/java/org/jeecg/common/dto/prowork/ProWorkMilestoneAddReqDTO.java
  10. 18 0
      src/main/java/org/jeecg/common/dto/prowork/ProWorkMilestoneReqDTO.java
  11. 83 0
      src/main/java/org/jeecg/common/dto/prowork/ProWorkMilestoneRespDTO.java
  12. 21 0
      src/main/java/org/jeecg/common/dto/prowork/ProWorkUpdateFileAddReqDTO.java
  13. 29 0
      src/main/java/org/jeecg/common/dto/prowork/ProWorkUpdateFileRespDTO.java
  14. 2 0
      src/main/java/org/jeecg/modules/archives/entity/ProjectManageArchives.java
  15. 181 0
      src/main/java/org/jeecg/modules/payment/controller/ManagerPaymentAndReceiptSlipController.java
  16. 86 0
      src/main/java/org/jeecg/modules/payment/entity/ManagePaymentAndReceiptContent.java
  17. 80 0
      src/main/java/org/jeecg/modules/payment/entity/ManagerPaymentAndReceiptSlip.java
  18. 17 0
      src/main/java/org/jeecg/modules/payment/mapper/ManagePaymentAndReceiptContentMapper.java
  19. 17 0
      src/main/java/org/jeecg/modules/payment/mapper/ManagerPaymentAndReceiptSlipMapper.java
  20. 5 0
      src/main/java/org/jeecg/modules/payment/mapper/xml/ManagePaymentAndReceiptContentMapper.xml
  21. 5 0
      src/main/java/org/jeecg/modules/payment/mapper/xml/ManagerPaymentAndReceiptSlipMapper.xml
  22. 14 0
      src/main/java/org/jeecg/modules/payment/service/ManagePaymentAndReceiptContentService.java
  23. 31 0
      src/main/java/org/jeecg/modules/payment/service/ManagerPaymentAndReceiptSlipService.java
  24. 19 0
      src/main/java/org/jeecg/modules/payment/service/impl/ManagePaymentAndReceiptContentServiceImpl.java
  25. 130 0
      src/main/java/org/jeecg/modules/payment/service/impl/ManagerPaymentAndReceiptSlipServiceImpl.java
  26. 83 197
      src/main/java/org/jeecg/modules/prowork/controller/ProWorkMilestoneController.java
  27. 44 34
      src/main/java/org/jeecg/modules/prowork/entity/ProWorkUpdateFile.java
  28. 24 29
      src/main/java/org/jeecg/modules/prowork/entity/proWorkMilestone.java
  29. 2 2
      src/main/java/org/jeecg/modules/prowork/mapper/ProWorkMilestoneMapper.java
  30. 21 2
      src/main/java/org/jeecg/modules/prowork/service/ProWorkMilestoneService.java
  31. 124 3
      src/main/java/org/jeecg/modules/prowork/service/impl/ProWorkMilestoneServiceImpl.java

+ 3 - 0
src/main/java/org/jeecg/common/dto/archives/ProArchivesAddReqDTO.java

@@ -30,6 +30,9 @@ public class ProArchivesAddReqDTO {
     @ApiModelProperty("项目总金额")
     @NotEmpty(message = "参数totalPrice不为空")
     private BigDecimal totalPrice;
+    @ApiModelProperty("已回款金额")
+    @NotEmpty(message = "参数received不为空")
+    private BigDecimal received;
     @ApiModelProperty("销售经理id")
     private String saleManagerId;
     @ApiModelProperty("销售经理")

+ 3 - 0
src/main/java/org/jeecg/common/dto/archives/ProArchivesAddRespDTO.java

@@ -36,6 +36,8 @@ public class ProArchivesAddRespDTO {
     @ApiModelProperty("项目总金额")
     @NotEmpty(message = "参数totalPrice不为空")
     private BigDecimal totalPrice;
+    @ApiModelProperty("已回款金额")
+    private BigDecimal received;
     @ApiModelProperty("销售经理id")
     private String saleManagerId;
     @ApiModelProperty("销售经理")
@@ -109,5 +111,6 @@ public class ProArchivesAddRespDTO {
         this.seEngineerId = archives.getSeEngineerId();
         this.seEngineer = archives.getSeEngineer();
         this.pkOrg = archives.getPkOrg();
+        this.received = archives.getReceived();
     }
 }

+ 2 - 0
src/main/java/org/jeecg/common/dto/archives/ProBusinessOtherListRespDTO.java

@@ -1,6 +1,7 @@
 package org.jeecg.common.dto.archives;
 
 import com.fasterxml.jackson.annotation.JsonFormat;
+import io.swagger.annotations.ApiModel;
 import io.swagger.annotations.ApiModelProperty;
 import lombok.Data;
 import lombok.Getter;
@@ -15,6 +16,7 @@ import java.util.List;
    * @date 2021/2/25
    * @desc
    */
+@ApiModel("项目档案--计划表响应参数")
  @Data
 public class ProBusinessOtherListRespDTO {
     @ApiModelProperty( "id")

+ 17 - 0
src/main/java/org/jeecg/common/dto/payment/SlieReqDTO.java

@@ -0,0 +1,17 @@
+package org.jeecg.common.dto.payment;
+
+import io.swagger.annotations.ApiModel;
+import lombok.Data;
+
+ /**
+   * @Author jihaosen
+   * @date 2021/3/3
+   */
+@ApiModel("收付款单请求参数")
+@Data
+public class SlieReqDTO {
+    private String id;
+
+     public SlieReqDTO() {
+     }
+ }

+ 37 - 0
src/main/java/org/jeecg/common/dto/payment/SlipAddReqDTO.java

@@ -0,0 +1,37 @@
+package org.jeecg.common.dto.payment;
+
+import io.swagger.annotations.ApiModel;
+import io.swagger.annotations.ApiModelProperty;
+import lombok.Data;
+import javax.validation.constraints.NotEmpty;
+import java.util.List;
+
+@ApiModel("收付款单新增请求参数")
+@Data
+public class SlipAddReqDTO {
+    @ApiModelProperty("id")
+    private String id;
+    @ApiModelProperty("单据编号")
+    private String billcode;
+    @ApiModelProperty("1.收款单 2.付款单")
+    @NotEmpty(message = "参数type不能为空")
+    private String type;
+    @ApiModelProperty("项目id")
+    private String proId;
+    @ApiModelProperty("项目名称")
+    private String proName;
+    @ApiModelProperty("项目编码")
+    private String proCode;
+    @ApiModelProperty("客户档案id")
+    private String cusId;
+    @ApiModelProperty("客户档案编码")
+    private String cusCode;
+    @ApiModelProperty("客户档案名称")
+    private String cusName;
+    @ApiModelProperty("组织")
+    private String pkOrg;
+
+    private List<SlipContentAddReqDTO> detailList;
+    public SlipAddReqDTO() {
+    }
+}

+ 40 - 0
src/main/java/org/jeecg/common/dto/payment/SlipContentAddReqDTO.java

@@ -0,0 +1,40 @@
+package org.jeecg.common.dto.payment;
+
+import io.swagger.annotations.ApiModel;
+import io.swagger.annotations.ApiModelProperty;
+import lombok.Data;
+import java.math.BigDecimal;
+
+ /**
+   * @Author jihaosen
+   * @date 2021/3/3
+   */
+@ApiModel("收款单子表新增请求参数")
+@Data
+public class SlipContentAddReqDTO {
+    @ApiModelProperty("id")
+    private String id;
+    @ApiModelProperty("收款单id")
+    private String slipId;
+    @ApiModelProperty("项目档案id")
+    private String proArchivesId;
+    @ApiModelProperty("项目档案--里程碑")
+    private String proArchivesMilestone;
+    @ApiModelProperty("收款条线档案id")
+    private String coArchivesId;
+    @ApiModelProperty("收付款条线档案名称")
+    private String coArchivesName;
+    @ApiModelProperty("收款金额")
+    private BigDecimal coPrvice;
+    @ApiModelProperty("说明")
+    private String explain;
+     @ApiModelProperty("采购发票id")
+    private String invoiceId;
+    @ApiModelProperty("对应发票(采购发票)")
+    private String invoice;
+    @ApiModelProperty("组织")
+    private String pkOrg;
+
+     public SlipContentAddReqDTO() {
+     }
+ }

+ 56 - 0
src/main/java/org/jeecg/common/dto/payment/SlipContentRespDTO.java

@@ -0,0 +1,56 @@
+package org.jeecg.common.dto.payment;
+
+import io.swagger.annotations.ApiModel;
+import io.swagger.annotations.ApiModelProperty;
+import lombok.Data;
+import org.jeecg.modules.payment.entity.ManagePaymentAndReceiptContent;
+
+import java.math.BigDecimal;
+
+/**
+ * @Author jihaosen
+ * @date 2021/3/3
+ */
+@ApiModel("收款单子表新增响应参数")
+@Data
+public class SlipContentRespDTO {
+    @ApiModelProperty("id")
+    private String id;
+    @ApiModelProperty("收款单id")
+    private String slipId;
+    @ApiModelProperty("项目档案id")
+    private String proArchivesId;
+    @ApiModelProperty("项目档案--里程碑")
+    private String proArchivesMilestone;
+    @ApiModelProperty("收款条线档案id")
+    private String coArchivesId;
+    @ApiModelProperty("收付款条线档案名称")
+    private String coArchivesName;
+    @ApiModelProperty("收款金额")
+    private BigDecimal coPrvice;
+    @ApiModelProperty("说明")
+    private String explain;
+    @ApiModelProperty("采购发票id")
+    private String invoiceId;
+    @ApiModelProperty("对应发票(采购发票)")
+    private String invoice;
+    @ApiModelProperty("组织")
+    private String pkOrg;
+
+    public SlipContentRespDTO() {
+    }
+
+    public SlipContentRespDTO(ManagePaymentAndReceiptContent content) {
+        this.id = content.getId();
+        this.slipId = content.getSlipId();
+        this.proArchivesId = content.getProArchivesId();
+        this.proArchivesMilestone = content.getProArchivesMilestone();
+        this.coArchivesId = content.getCoArchivesId();
+        this.coArchivesName = content.getCoArchivesName();
+        this.coPrvice = content.getCoPrvice();
+        this.explain = content.getExplain();
+        this.invoice = content.getInvoice();
+        this.pkOrg = content.getPkOrg();
+        this.invoiceId = content.getInvoiceId();
+    }
+}

+ 56 - 0
src/main/java/org/jeecg/common/dto/payment/SlipRespDTO.java

@@ -0,0 +1,56 @@
+package org.jeecg.common.dto.payment;
+
+import io.swagger.annotations.ApiModel;
+import io.swagger.annotations.ApiModelProperty;
+import lombok.Data;
+import org.jeecg.modules.payment.entity.ManagerPaymentAndReceiptSlip;
+import javax.validation.constraints.NotEmpty;
+import java.util.List;
+
+/**
+ * @Author jihaosen
+ * @date 2021/3/3
+ */
+@ApiModel("收付款单响应参数")
+@Data
+public class SlipRespDTO {
+    @ApiModelProperty("id")
+    private String id;
+    @ApiModelProperty("单据编号")
+    private String billcode;
+    @ApiModelProperty("1.收款单 2.付款单")
+    @NotEmpty(message = "参数type不能为空")
+    private String type;
+    @ApiModelProperty("项目id")
+    private String proId;
+    @ApiModelProperty("项目名称")
+    private String proName;
+    @ApiModelProperty("项目编码")
+    private String proCode;
+    @ApiModelProperty("客户档案id")
+    private String cusId;
+    @ApiModelProperty("客户档案编码")
+    private String cusCode;
+    @ApiModelProperty("客户档案名称")
+    private String cusName;
+    @ApiModelProperty("组织")
+    private String pkOrg;
+
+    private List<SlipContentRespDTO> detailList;
+
+    public SlipRespDTO() {
+    }
+
+    public SlipRespDTO( ManagerPaymentAndReceiptSlip slip) {
+        this.id = slip.getId();
+        this.billcode = slip.getBillcode();
+        this.type = slip.getType();
+        this.proId = slip.getProId();
+        this.proName = slip.getProName();
+        this.proCode = slip.getProCode();
+        this.cusId = slip.getCusId();
+        this.cusCode = slip.getCusCode();
+        this.cusName = slip.getCusName();
+        this.pkOrg = slip.getPkOrg();
+    }
+}

+ 49 - 1
src/main/java/org/jeecg/common/dto/prowork/ProWorkMilestoneAddReqDTO.java

@@ -1,11 +1,59 @@
 package org.jeecg.common.dto.prowork;
 
+import com.baomidou.mybatisplus.annotation.IdType;
+import com.baomidou.mybatisplus.annotation.TableId;
+import com.fasterxml.jackson.annotation.JsonFormat;
 import io.swagger.annotations.ApiModel;
+import io.swagger.annotations.ApiModelProperty;
 import lombok.Data;
+import org.springframework.format.annotation.DateTimeFormat;
+import javax.validation.constraints.NotEmpty;
+import java.util.Date;
+import java.util.List;
 
 @ApiModel("里程碑确认单新增参数请求")
 @Data
 public class ProWorkMilestoneAddReqDTO {
-//    private
+    @ApiModelProperty("id")
+    @TableId(type = IdType.UUID)
+    private String id;
+    @ApiModelProperty("单据编号")
+    private String billcode;
+    @ApiModelProperty("1.开发 2.实施 3.服务")
+    @NotEmpty(message = "参数type不能为空")
+    private String type;
+    @ApiModelProperty("项目档案id")
+    private String proId;
+    @ApiModelProperty("项目档案编码")
+    private String proCode;
+    @ApiModelProperty("项目档案名称")
+    private String proName;
+    @ApiModelProperty("客户档案id")
+    private String cusId;
+    @ApiModelProperty("客户编码")
+    private String cusCode;
+    @ApiModelProperty("里程碑id")
+    private String mileId;
+    @ApiModelProperty("里程碑(计划)")
+    private String mileName;
+    @ApiModelProperty("里程碑确认(0,未确认 1,确认)")
+    private Integer mileConfirm;
+    @ApiModelProperty("确认时间")
+    @JsonFormat(timezone = "GMT+8",pattern = "yyyy-MM-dd HH:mm:ss")
+    @DateTimeFormat(pattern="yyyy-MM-dd HH:mm:ss")
+    private Date confirmTime;
+    @ApiModelProperty("工作内容")
+    private String content;
+    @ApiModelProperty("工作时长")
+    private Double duration;
+    @ApiModelProperty("填写人(当前用户)")
+    private String currentUser;
+    @ApiModelProperty("组织")
+    private String pkOrg;
+
+    private List<ProWorkUpdateFileAddReqDTO> fileList;
+
+    public ProWorkMilestoneAddReqDTO() {
+    }
 
 }

+ 18 - 0
src/main/java/org/jeecg/common/dto/prowork/ProWorkMilestoneReqDTO.java

@@ -0,0 +1,18 @@
+package org.jeecg.common.dto.prowork;
+
+import io.swagger.annotations.ApiModel;
+import lombok.Data;
+
+ /**
+   * @Author jihaosen
+   * @date 2021/3/3
+   */
+
+@ApiModel("文件路径新增参数请求")
+@Data
+public class ProWorkMilestoneReqDTO {
+    public String id;
+
+    public ProWorkMilestoneReqDTO() {
+    }
+}

+ 83 - 0
src/main/java/org/jeecg/common/dto/prowork/ProWorkMilestoneRespDTO.java

@@ -0,0 +1,83 @@
+package org.jeecg.common.dto.prowork;
+
+import com.baomidou.mybatisplus.annotation.IdType;
+import com.baomidou.mybatisplus.annotation.TableId;
+import com.fasterxml.jackson.annotation.JsonFormat;
+import io.swagger.annotations.ApiModel;
+import io.swagger.annotations.ApiModelProperty;
+import lombok.Data;
+import org.jeecg.modules.prowork.entity.ProWorkMilestone;
+import org.springframework.format.annotation.DateTimeFormat;
+import javax.validation.constraints.NotEmpty;
+import java.util.Date;
+import java.util.List;
+
+ /**
+   * @Author jihaosen
+   * @date 2021/3/3
+   */
+
+@ApiModel("文件路径新增参数响应")
+@Data
+public class ProWorkMilestoneRespDTO {
+    @ApiModelProperty("id")
+    @TableId(type = IdType.UUID)
+    private String id;
+    @ApiModelProperty("单据编号")
+    private String billcode;
+    @ApiModelProperty("1.开发 2.实施 3.服务")
+    @NotEmpty(message = "参数type不能为空")
+    private String type;
+    @ApiModelProperty("项目档案id")
+    private String proId;
+    @ApiModelProperty("项目档案编码")
+    private String proCode;
+    @ApiModelProperty("项目档案名称")
+    private String proName;
+    @ApiModelProperty("客户档案id")
+    private String cusId;
+    @ApiModelProperty("客户编码")
+    private String cusCode;
+    @ApiModelProperty("里程碑id")
+    private String mileId;
+    @ApiModelProperty("里程碑(计划)")
+    private String mileName;
+    @ApiModelProperty("里程碑确认(0,未确认 1,确认)")
+    private Integer mileConfirm;
+    @ApiModelProperty("确认时间")
+    @JsonFormat(timezone = "GMT+8",pattern = "yyyy-MM-dd HH:mm:ss")
+    @DateTimeFormat(pattern="yyyy-MM-dd HH:mm:ss")
+    private Date confirmTime;
+    @ApiModelProperty("工作内容")
+    private String content;
+    @ApiModelProperty("工作时长")
+    private Double duration;
+    @ApiModelProperty("填写人(当前用户)")
+    private String currentUser;
+    @ApiModelProperty("组织")
+    private String pkOrg;
+
+    private List<ProWorkUpdateFileRespDTO> fileList;
+
+    public ProWorkMilestoneRespDTO() {
+    }
+
+     public ProWorkMilestoneRespDTO(ProWorkMilestone proWorkMilestone) {
+         this.id = proWorkMilestone.getId();
+         this.billcode = proWorkMilestone.getBillcode();
+         this.type = proWorkMilestone.getType();
+         this.proId = proWorkMilestone.getProId();
+         this.proCode = proWorkMilestone.getProCode();
+         this.proName = proWorkMilestone.getProName();
+         this.cusId = proWorkMilestone.getCusId();
+         this.cusCode = proWorkMilestone.getCusCode();
+         this.mileId = proWorkMilestone.getMileId();
+         this.mileName = proWorkMilestone.getMileName();
+         this.mileConfirm = proWorkMilestone.getMileConfirm();
+         this.confirmTime = proWorkMilestone.getConfirmTime();
+         this.content = proWorkMilestone.getContent();
+         this.duration = proWorkMilestone.getDuration();
+         this.currentUser = proWorkMilestone.getCurrentUser();
+         this.pkOrg = proWorkMilestone.getPkOrg();
+     }
+ }

+ 21 - 0
src/main/java/org/jeecg/common/dto/prowork/ProWorkUpdateFileAddReqDTO.java

@@ -0,0 +1,21 @@
+package org.jeecg.common.dto.prowork;
+
+import io.swagger.annotations.ApiModel;
+import io.swagger.annotations.ApiModelProperty;
+import lombok.Data;
+
+@ApiModel("文件路径新增参数请求")
+@Data
+public class ProWorkUpdateFileAddReqDTO {
+    @ApiModelProperty("id")
+    private java.lang.String id;
+    @ApiModelProperty("里程碑确认单id")
+    private String workMileId;
+    @ApiModelProperty("文件名")
+    private String fileName;
+    @ApiModelProperty("文件名路径")
+    private java.lang.String fileUrl;
+
+    public ProWorkUpdateFileAddReqDTO() {
+    }
+}

+ 29 - 0
src/main/java/org/jeecg/common/dto/prowork/ProWorkUpdateFileRespDTO.java

@@ -0,0 +1,29 @@
+package org.jeecg.common.dto.prowork;
+
+import io.swagger.annotations.ApiModel;
+import io.swagger.annotations.ApiModelProperty;
+import lombok.Data;
+import org.jeecg.modules.prowork.entity.ProWorkUpdateFile;
+
+@ApiModel("文件信息响应")
+@Data
+public class ProWorkUpdateFileRespDTO {
+    @ApiModelProperty("id")
+    private java.lang.String id;
+    @ApiModelProperty("里程碑确认单id")
+    private String workMileId;
+    @ApiModelProperty("文件名")
+    private String fileName;
+    @ApiModelProperty("文件名路径")
+    private java.lang.String fileUrl;
+
+    public ProWorkUpdateFileRespDTO() {
+    }
+
+    public ProWorkUpdateFileRespDTO(ProWorkUpdateFile updateFilel) {
+        this.id = updateFilel.getId();
+        this.workMileId = updateFilel.getWorkMileId();
+        this.fileName = updateFilel.getFileName();
+        this.fileUrl = updateFilel.getFileUrl();
+    }
+}

+ 2 - 0
src/main/java/org/jeecg/modules/archives/entity/ProjectManageArchives.java

@@ -37,6 +37,8 @@ public class ProjectManageArchives implements Serializable {
     private String cusName;
     @ApiModelProperty("项目总金额")
     private BigDecimal totalPrice;
+    @ApiModelProperty("已回款金额")
+    private BigDecimal received;
     @ApiModelProperty("销售经理id")
     private String saleManagerId;
     @ApiModelProperty("销售经理")

+ 181 - 0
src/main/java/org/jeecg/modules/payment/controller/ManagerPaymentAndReceiptSlipController.java

@@ -0,0 +1,181 @@
+package org.jeecg.modules.payment.controller;
+
+import javax.servlet.http.HttpServletRequest;
+import javax.validation.Valid;
+
+import io.swagger.annotations.Api;
+import io.swagger.annotations.ApiImplicitParam;
+import io.swagger.annotations.ApiImplicitParams;
+import io.swagger.annotations.ApiOperation;
+import org.jeecg.common.api.vo.Result;
+import org.jeecg.common.dto.payment.SlieReqDTO;
+import org.jeecg.common.dto.payment.SlipAddReqDTO;
+import org.jeecg.common.dto.payment.SlipRespDTO;
+import org.jeecg.common.exception.JeecgBootException;
+import org.jeecg.common.system.query.QueryGenerator;
+import org.jeecg.modules.payment.entity.ManagerPaymentAndReceiptSlip;
+import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
+import com.baomidou.mybatisplus.core.metadata.IPage;
+import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
+import lombok.extern.slf4j.Slf4j;
+import org.jeecg.modules.payment.service.ManagerPaymentAndReceiptSlipService;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.util.CollectionUtils;
+import org.springframework.validation.BindingResult;
+import org.springframework.web.bind.annotation.DeleteMapping;
+import org.springframework.web.bind.annotation.GetMapping;
+import org.springframework.web.bind.annotation.PostMapping;
+import org.springframework.web.bind.annotation.PutMapping;
+import org.springframework.web.bind.annotation.RequestBody;
+import org.springframework.web.bind.annotation.RequestMapping;
+import org.springframework.web.bind.annotation.RequestParam;
+import org.springframework.web.bind.annotation.RestController;
+
+/**
+   * @Author jihaosen
+   * @date 2021/3/3
+   */
+@Api("收付款管理--收付款单")
+@RestController
+@RequestMapping("/payment/managerPaymentAndReceiptSlip")
+@Slf4j
+public class ManagerPaymentAndReceiptSlipController {
+	@Autowired
+	private ManagerPaymentAndReceiptSlipService managerPaymentAndReceiptSlipService;
+
+	 @ApiOperation(value = "分页查询接口", notes = "分页查询收付款单")
+	 @ApiImplicitParams({
+			 @ApiImplicitParam(name = "pkOrg", value = "组织", required = true, dataType = "String")
+	 })
+	@GetMapping(value = "/list")
+	public Result<IPage<ManagerPaymentAndReceiptSlip>> queryPageList(@Valid ManagerPaymentAndReceiptSlip managerPaymentAndReceiptSlip,
+		  @RequestParam(name="pageNo", defaultValue="1") Integer pageNo,
+		  @RequestParam(name="pageSize", defaultValue="10") Integer pageSize,
+		  HttpServletRequest req) {
+		Result<IPage<ManagerPaymentAndReceiptSlip>> result = new Result<IPage<ManagerPaymentAndReceiptSlip>>();
+		 managerPaymentAndReceiptSlip.setDelFlag(null);
+		QueryWrapper<ManagerPaymentAndReceiptSlip> queryWrapper = QueryGenerator.initQueryWrapper(managerPaymentAndReceiptSlip, req.getParameterMap());
+		Page<ManagerPaymentAndReceiptSlip> page = new Page<ManagerPaymentAndReceiptSlip>(pageNo, pageSize);
+		 queryWrapper.eq("del_flag", "0");
+		 queryWrapper.orderByDesc("create_time");
+		IPage<ManagerPaymentAndReceiptSlip> pageList = managerPaymentAndReceiptSlipService.page(page, queryWrapper);
+		result.setSuccess(true);
+		result.setResult(pageList);
+		return result;
+	}
+
+	 @ApiOperation(value = "新增", notes = "新增收付款单")
+	 @ApiImplicitParams({
+			 @ApiImplicitParam(name = "proId", value = "项目id", required = true, dataType = "String"),
+			 @ApiImplicitParam(name = "proName", value = "项目名称", required = true, dataType = "String"),
+			 @ApiImplicitParam(name = "proCode", value = "项目编码", required = true, dataType = "String"),
+			 @ApiImplicitParam(name = "cusId", value = "客户档案id", required = true, dataType = "String"),
+			 @ApiImplicitParam(name = "cusCode", value = "客户档案编码", required = true, dataType = "String"),
+			 @ApiImplicitParam(name = "cusName", value = "客户档案名称", required = true, dataType = "String"),
+			 @ApiImplicitParam(name = "pkOrg", value = "组织", required = true, dataType = "String"),
+			 @ApiImplicitParam(name = "proArchivesId", value = "项目档案id", required = true, dataType = "String"),
+			 @ApiImplicitParam(name = "proArchivesMilestone", value = "项目档案--里程碑", required = true, dataType = "String"),
+			 @ApiImplicitParam(name = "coArchivesId", value = "收款条线档案id", required = true, dataType = "String"),
+			 @ApiImplicitParam(name = "coArchivesName", value = "收付款条线档案名称", required = true, dataType = "String"),
+			 @ApiImplicitParam(name = "coPrvice", value = "收款金额", required = true, dataType = "String"),
+			 @ApiImplicitParam(name = "explain", value = "说明", required = true, dataType = "String"),
+			 @ApiImplicitParam(name = "invoice", value = "对应发票(采购发票)", required = true, dataType = "String"),
+	 })
+	@PostMapping(value = "/add")
+	public Result<ManagerPaymentAndReceiptSlip> add(@RequestBody SlipAddReqDTO reqDTO, BindingResult bindingResult) {
+		Result<ManagerPaymentAndReceiptSlip> result = new Result<ManagerPaymentAndReceiptSlip>();
+		try {
+			StringBuilder sb = new StringBuilder();
+			if (bindingResult.hasErrors()){
+				//记录错误信息
+				bindingResult.getAllErrors().stream().forEach(error -> sb.append(error.getDefaultMessage() + "<br/>"));
+				result.error500(sb.toString());
+				return result;
+			}
+			if(CollectionUtils.isEmpty(reqDTO.getDetailList())){
+				throw new JeecgBootException("子表数据不能为空");
+			}
+			managerPaymentAndReceiptSlipService.add(reqDTO);
+			result.success("添加成功!");
+		} catch (Exception e) {
+			e.printStackTrace();
+			log.info(e.getMessage());
+			result.error500("操作失败");
+		}
+		return result;
+	}
+
+	 @ApiOperation(value = "编辑", notes = "编辑收款单")
+	 @ApiImplicitParams({
+			 @ApiImplicitParam(name = "id", value = "id", required = true, dataType = "String"),
+			 @ApiImplicitParam(name = "proId", value = "项目id", required = true, dataType = "String"),
+			 @ApiImplicitParam(name = "proName", value = "项目名称", required = true, dataType = "String"),
+			 @ApiImplicitParam(name = "proCode", value = "项目编码", required = true, dataType = "String"),
+			 @ApiImplicitParam(name = "cusId", value = "客户档案id", required = true, dataType = "String"),
+			 @ApiImplicitParam(name = "cusCode", value = "客户档案编码", required = true, dataType = "String"),
+			 @ApiImplicitParam(name = "cusName", value = "客户档案名称", required = true, dataType = "String"),
+			 @ApiImplicitParam(name = "pkOrg", value = "组织", required = true, dataType = "String"),
+			 @ApiImplicitParam(name = "proArchivesId", value = "项目档案id", required = true, dataType = "String"),
+			 @ApiImplicitParam(name = "proArchivesMilestone", value = "项目档案--里程碑", required = true, dataType = "String"),
+			 @ApiImplicitParam(name = "coArchivesId", value = "收款条线档案id", required = true, dataType = "String"),
+			 @ApiImplicitParam(name = "coArchivesName", value = "收付款条线档案名称", required = true, dataType = "String"),
+			 @ApiImplicitParam(name = "coPrvice", value = "收款金额", required = true, dataType = "String"),
+			 @ApiImplicitParam(name = "explain", value = "说明", required = true, dataType = "String"),
+			 @ApiImplicitParam(name = "invoice", value = "对应发票(采购发票)", required = true, dataType = "String"),
+	 })
+	@PutMapping(value = "/edit")
+	public Result<ManagerPaymentAndReceiptSlip> edit(@RequestBody SlipAddReqDTO reqDTO) {
+		Result<ManagerPaymentAndReceiptSlip> result = new Result<ManagerPaymentAndReceiptSlip>();
+		ManagerPaymentAndReceiptSlip managerPaymentAndReceiptSlipEntity = managerPaymentAndReceiptSlipService.getById(reqDTO.getId());
+		if(managerPaymentAndReceiptSlipEntity==null) {
+			result.error500("未找到对应实体");
+		}else {
+			if(CollectionUtils.isEmpty(reqDTO.getDetailList())){
+				throw new JeecgBootException("子表数据不能为空");
+			}
+			boolean ok = managerPaymentAndReceiptSlipService.edit(reqDTO);
+			if(ok) {
+				result.success("修改成功!");
+			}
+		}
+		
+		return result;
+	}
+	
+	@ApiOperation(value = "通过id删除", notes = "通过id删除收付款单")
+	@ApiImplicitParams({
+			@ApiImplicitParam(name = "id", value = "id", required = true, dataType = "String"),
+	})
+	@DeleteMapping(value = "/delete")
+	public Result<ManagerPaymentAndReceiptSlip> delete(@RequestBody SlieReqDTO reqDTO) {
+		Result<ManagerPaymentAndReceiptSlip> result = new Result<ManagerPaymentAndReceiptSlip>();
+		ManagerPaymentAndReceiptSlip managerPaymentAndReceiptSlip = managerPaymentAndReceiptSlipService.getById(reqDTO.getId());
+		if(managerPaymentAndReceiptSlip==null) {
+			result.error500("未找到对应实体");
+		}else {
+			boolean ok = managerPaymentAndReceiptSlipService.dropById(managerPaymentAndReceiptSlip);
+			if(ok) {
+				result.success("删除成功!");
+			}
+		}
+		
+		return result;
+	}
+
+	 @ApiOperation(value = "通过id查询", notes = "通过id查询收付款单")
+	 @ApiImplicitParams({
+			 @ApiImplicitParam(name = "id", value = "id", required = true, dataType = "String"),
+	 })
+	@GetMapping(value = "/queryById")
+	public Result<SlipRespDTO> queryById(SlieReqDTO reqDTO) {
+		Result<SlipRespDTO> result = new Result<SlipRespDTO>();
+		 SlipRespDTO managerPaymentAndReceiptSlip = managerPaymentAndReceiptSlipService.queryById(reqDTO.getId());
+		if(managerPaymentAndReceiptSlip==null) {
+			result.error500("未找到对应实体");
+		}else {
+			result.setResult(managerPaymentAndReceiptSlip);
+			result.setSuccess(true);
+		}
+		return result;
+	}
+}

+ 86 - 0
src/main/java/org/jeecg/modules/payment/entity/ManagePaymentAndReceiptContent.java

@@ -0,0 +1,86 @@
+package org.jeecg.modules.payment.entity;
+
+import java.io.Serializable;
+import java.math.BigDecimal;
+import java.util.Date;
+import com.baomidou.mybatisplus.annotation.IdType;
+import com.baomidou.mybatisplus.annotation.TableField;
+import com.baomidou.mybatisplus.annotation.TableId;
+import com.baomidou.mybatisplus.annotation.TableName;
+import io.swagger.annotations.ApiModel;
+import io.swagger.annotations.ApiModelProperty;
+import lombok.Data;
+import com.fasterxml.jackson.annotation.JsonFormat;
+import org.jeecg.common.dto.payment.SlipContentAddReqDTO;
+import org.springframework.format.annotation.DateTimeFormat;
+
+/**
+ * @Author jihaosen
+ * @date 2021/3/3
+ */
+@ApiModel("收付款单子表")
+@Data
+@TableName("manage_payment_and_receipt_content")
+public class ManagePaymentAndReceiptContent implements Serializable {
+    private static final long serialVersionUID = 7509762288415911028L;
+    @ApiModelProperty("id")
+    @TableId(type = IdType.UUID)
+    private String id;
+    @ApiModelProperty("收款单id")
+    private String slipId;
+    @ApiModelProperty("项目档案id")
+    private String proArchivesId;
+    @ApiModelProperty("项目档案--里程碑")
+    private String proArchivesMilestone;
+    @ApiModelProperty("收款条线档案id")
+    private String coArchivesId;
+    @ApiModelProperty("收付款条线档案名称")
+    private String coArchivesName;
+    @ApiModelProperty("收款金额")
+    private BigDecimal coPrvice;
+    @ApiModelProperty("说明")
+    @TableField("`explain`")
+    private String explain;
+    @ApiModelProperty("采购发票id")
+    private String invoiceId;
+    @ApiModelProperty("对应发票(采购发票)")
+    private String invoice;
+    @ApiModelProperty("创建时间")
+    @JsonFormat(timezone = "GMT+8", pattern = "yyyy-MM-dd HH:mm:ss")
+    @DateTimeFormat(pattern = "yyyy-MM-dd HH:mm:ss")
+    private Date createTime;
+    @ApiModelProperty("创建人")
+    private String createBy;
+    @ApiModelProperty("修改时间")
+    @JsonFormat(timezone = "GMT+8", pattern = "yyyy-MM-dd HH:mm:ss")
+    @DateTimeFormat(pattern = "yyyy-MM-dd HH:mm:ss")
+    private Date updateTime;
+    @ApiModelProperty("修改人")
+    private String updateBy;
+    @ApiModelProperty("删除状态(0,正常,1已删除)")
+    private String delFlag;
+    @ApiModelProperty("组织")
+    private String pkOrg;
+
+    public ManagePaymentAndReceiptContent() {
+    }
+
+    public ManagePaymentAndReceiptContent(SlipContentAddReqDTO reqDTO ) {
+        this.id = reqDTO.getId();
+        this.slipId = reqDTO.getSlipId();
+        this.proArchivesId = reqDTO.getProArchivesId();
+        this.proArchivesMilestone = reqDTO.getProArchivesMilestone();
+        this.coArchivesId = reqDTO.getCoArchivesId();
+        this.coArchivesName = reqDTO.getCoArchivesName();
+        this.coPrvice = reqDTO.getCoPrvice();
+        this.explain = reqDTO.getExplain();
+        this.invoice = reqDTO.getInvoice();
+        this.delFlag = "0";
+        this.pkOrg = reqDTO.getPkOrg();
+        this.invoiceId = reqDTO.getInvoiceId();
+    }
+
+    public ManagePaymentAndReceiptContent(String delFlag ) {
+        this.delFlag = delFlag;
+    }
+}

+ 80 - 0
src/main/java/org/jeecg/modules/payment/entity/ManagerPaymentAndReceiptSlip.java

@@ -0,0 +1,80 @@
+package org.jeecg.modules.payment.entity;
+
+import java.io.Serializable;
+import java.util.Date;
+
+import com.baomidou.mybatisplus.annotation.IdType;
+import com.baomidou.mybatisplus.annotation.TableId;
+import com.baomidou.mybatisplus.annotation.TableName;
+import io.swagger.annotations.ApiModel;
+import io.swagger.annotations.ApiModelProperty;
+import lombok.Data;
+import com.fasterxml.jackson.annotation.JsonFormat;
+import org.jeecg.common.dto.payment.SlipAddReqDTO;
+import org.springframework.format.annotation.DateTimeFormat;
+
+import javax.validation.constraints.NotEmpty;
+
+/**
+ * @Author jihaosen
+ * @date 2021/3/3
+ */
+@ApiModel("收付款管理--收款单")
+@Data
+@TableName("manager_payment_and_receipt_slip")
+public class ManagerPaymentAndReceiptSlip implements Serializable {
+    private static final long serialVersionUID = 8999292675373952484L;
+    @ApiModelProperty("id")
+    @TableId(type = IdType.UUID)
+    private String id;
+    @ApiModelProperty("单据编号")
+    private String billcode;
+    @ApiModelProperty("1.收款单 2.付款单")
+    @NotEmpty(message = "参数type不能为空")
+    private String type;
+    @ApiModelProperty("项目id")
+    private String proId;
+    @ApiModelProperty("项目名称")
+    private String proName;
+    @ApiModelProperty("项目编码")
+    private String proCode;
+    @ApiModelProperty("客户档案id")
+    private String cusId;
+    @ApiModelProperty("客户档案编码")
+    private String cusCode;
+    @ApiModelProperty("客户档案名称")
+    private String cusName;
+    @ApiModelProperty("创建时间")
+    @JsonFormat(timezone = "GMT+8", pattern = "yyyy-MM-dd HH:mm:ss")
+    @DateTimeFormat(pattern = "yyyy-MM-dd HH:mm:ss")
+    private java.util.Date createTime;
+    @ApiModelProperty("创建人")
+    private String createBy;
+    @ApiModelProperty("修改时间")
+    @JsonFormat(timezone = "GMT+8", pattern = "yyyy-MM-dd HH:mm:ss")
+    @DateTimeFormat(pattern = "yyyy-MM-dd HH:mm:ss")
+    private java.util.Date updateTime;
+    @ApiModelProperty("修改人")
+    private String updateBy;
+    @ApiModelProperty("删除状态(0,正常,1已删除)")
+    private String delFlag;
+    @ApiModelProperty("组织")
+    private String pkOrg;
+
+    public ManagerPaymentAndReceiptSlip() {
+    }
+
+    public ManagerPaymentAndReceiptSlip(SlipAddReqDTO reqDTO) {
+        this.id = reqDTO.getId();
+        this.billcode = reqDTO.getBillcode();
+        this.type = reqDTO.getType();
+        this.proId = reqDTO.getProId();
+        this.proName = reqDTO.getProName();
+        this.proCode = reqDTO.getProCode();
+        this.cusId = reqDTO.getCusId();
+        this.cusCode = reqDTO.getCusCode();
+        this.cusName = reqDTO.getCusName();
+        this.delFlag = "0";
+        this.pkOrg = reqDTO.getPkOrg();
+    }
+}

+ 17 - 0
src/main/java/org/jeecg/modules/payment/mapper/ManagePaymentAndReceiptContentMapper.java

@@ -0,0 +1,17 @@
+package org.jeecg.modules.payment.mapper;
+
+import java.util.List;
+
+import org.apache.ibatis.annotations.Param;
+import org.jeecg.modules.payment.entity.ManagePaymentAndReceiptContent;
+import com.baomidou.mybatisplus.core.mapper.BaseMapper;
+
+/**
+ * @Description: 收付款管理--收款单
+ * @author: jeecg-boot
+ * @date2021-03-03
+ * @version: V1.0
+ */
+public interface ManagePaymentAndReceiptContentMapper extends BaseMapper<ManagePaymentAndReceiptContent> {
+
+}

+ 17 - 0
src/main/java/org/jeecg/modules/payment/mapper/ManagerPaymentAndReceiptSlipMapper.java

@@ -0,0 +1,17 @@
+package org.jeecg.modules.payment.mapper;
+
+import java.util.List;
+
+import org.apache.ibatis.annotations.Param;
+import org.jeecg.modules.payment.entity.ManagerPaymentAndReceiptSlip;
+import com.baomidou.mybatisplus.core.mapper.BaseMapper;
+
+/**
+ * @Description: 收付款管理--收款单
+ * @author: jeecg-boot
+ * @date2021-03-03
+ * @version: V1.0
+ */
+public interface ManagerPaymentAndReceiptSlipMapper extends BaseMapper<ManagerPaymentAndReceiptSlip> {
+
+}

+ 5 - 0
src/main/java/org/jeecg/modules/payment/mapper/xml/ManagePaymentAndReceiptContentMapper.xml

@@ -0,0 +1,5 @@
+<?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.jeecg.modules.payment.mapper.ManagePaymentAndReceiptContentMapper">
+
+</mapper>

+ 5 - 0
src/main/java/org/jeecg/modules/payment/mapper/xml/ManagerPaymentAndReceiptSlipMapper.xml

@@ -0,0 +1,5 @@
+<?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.jeecg.modules.payment.mapper.ManagerPaymentAndReceiptSlipMapper">
+
+</mapper>

+ 14 - 0
src/main/java/org/jeecg/modules/payment/service/ManagePaymentAndReceiptContentService.java

@@ -0,0 +1,14 @@
+package org.jeecg.modules.payment.service;
+
+import org.jeecg.modules.payment.entity.ManagePaymentAndReceiptContent;
+import com.baomidou.mybatisplus.extension.service.IService;
+
+/**
+ * @Description: 收付款管理--收款单
+ * @author: jeecg-boot
+ * @date2021-03-03
+ * @version: V1.0
+ */
+public interface ManagePaymentAndReceiptContentService extends IService<ManagePaymentAndReceiptContent> {
+
+}

+ 31 - 0
src/main/java/org/jeecg/modules/payment/service/ManagerPaymentAndReceiptSlipService.java

@@ -0,0 +1,31 @@
+package org.jeecg.modules.payment.service;
+
+import org.jeecg.common.dto.payment.SlipAddReqDTO;
+import org.jeecg.common.dto.payment.SlipRespDTO;
+import org.jeecg.modules.payment.entity.ManagerPaymentAndReceiptSlip;
+import com.baomidou.mybatisplus.extension.service.IService;
+
+/**
+ * @Description: 收付款管理--收款单
+ * @author: jeecg-boot
+ * @date2021-03-03
+ * @version: V1.0
+ */
+public interface ManagerPaymentAndReceiptSlipService extends IService<ManagerPaymentAndReceiptSlip> {
+    /**
+     * @desc 新增
+     */
+    void add(SlipAddReqDTO slipAddReqDTO);
+    /**
+     * @desc 编辑
+     */
+    boolean edit(SlipAddReqDTO reqDTO);
+    /**
+     * @desc 通过id查询
+     */
+    SlipRespDTO queryById(String id);
+    /**
+     * @desc 通过id删除
+     */
+    Boolean dropById(ManagerPaymentAndReceiptSlip managerPaymentAndReceiptSlip);
+}

+ 19 - 0
src/main/java/org/jeecg/modules/payment/service/impl/ManagePaymentAndReceiptContentServiceImpl.java

@@ -0,0 +1,19 @@
+package org.jeecg.modules.payment.service.impl;
+
+import org.jeecg.modules.payment.entity.ManagePaymentAndReceiptContent;
+import org.jeecg.modules.payment.mapper.ManagePaymentAndReceiptContentMapper;
+import org.jeecg.modules.payment.service.ManagePaymentAndReceiptContentService;
+import org.springframework.stereotype.Service;
+
+import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
+
+/**
+ * @Description: 收付款管理--收款单
+ * @author: jeecg-boot
+ * @date2021-03-03
+ * @version: V1.0
+ */
+@Service
+public class ManagePaymentAndReceiptContentServiceImpl extends ServiceImpl<ManagePaymentAndReceiptContentMapper, ManagePaymentAndReceiptContent> implements ManagePaymentAndReceiptContentService {
+
+}

+ 130 - 0
src/main/java/org/jeecg/modules/payment/service/impl/ManagerPaymentAndReceiptSlipServiceImpl.java

@@ -0,0 +1,130 @@
+package org.jeecg.modules.payment.service.impl;
+
+import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
+import com.google.common.collect.Lists;
+import org.jeecg.common.dto.payment.SlipAddReqDTO;
+import org.jeecg.common.dto.payment.SlipContentAddReqDTO;
+import org.jeecg.common.dto.payment.SlipContentRespDTO;
+import org.jeecg.common.dto.payment.SlipRespDTO;
+import org.jeecg.modules.payment.entity.ManagePaymentAndReceiptContent;
+import org.jeecg.modules.payment.entity.ManagerPaymentAndReceiptSlip;
+import org.jeecg.modules.payment.mapper.ManagerPaymentAndReceiptSlipMapper;
+import org.jeecg.modules.payment.service.ManagePaymentAndReceiptContentService;
+import org.jeecg.modules.payment.service.ManagerPaymentAndReceiptSlipService;
+import org.jeecg.modules.system.service.ISysSerialPatternService;
+import org.jeecg.modules.system.vo.CallResult;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.stereotype.Service;
+import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
+import org.springframework.transaction.annotation.Transactional;
+
+import java.util.List;
+
+/**
+ * @Description: 收付款管理--收款单
+ * @author: jeecg-boot
+ * @date2021-03-03
+ * @version: V1.0
+ */
+@Service
+@Transactional
+public class ManagerPaymentAndReceiptSlipServiceImpl extends ServiceImpl<ManagerPaymentAndReceiptSlipMapper, ManagerPaymentAndReceiptSlip> implements ManagerPaymentAndReceiptSlipService {
+
+    @Autowired
+    private ISysSerialPatternService sysSerialPatternService;
+    @Autowired
+    private ManagePaymentAndReceiptContentService managePaymentAndReceiptContentService;
+
+    /**
+     * @desc 新增
+     */
+    @Override
+    public void add(SlipAddReqDTO reqDTO) {
+        ManagerPaymentAndReceiptSlip slip = new ManagerPaymentAndReceiptSlip(reqDTO);
+        //设置编码
+        CallResult<String> nextSerial = sysSerialPatternService.getNextSerial(slip, "manager_payment_and_receipt_slip", "billcode", true);
+        if(!nextSerial.isSucceed()){
+            throw new RuntimeException("获取编号失败");
+        }
+        slip.setBillcode(nextSerial.getContent());
+        save(slip);
+        //添加子表
+        saveChildren(reqDTO, slip.getId());
+    }
+
+    /**
+     * @desc 编辑
+     */
+    @Override
+    public boolean edit(SlipAddReqDTO reqDTO) {
+        ManagerPaymentAndReceiptSlip slip = new ManagerPaymentAndReceiptSlip(reqDTO);
+            updateById(slip);
+       //删除子表
+        deleteChildren(slip.getId());
+        saveChildren(reqDTO, slip.getId());
+        return true;
+    }
+
+    /**
+     * @desc 通过id查询
+     */
+    @Override
+    public SlipRespDTO queryById(String id) {
+        ManagerPaymentAndReceiptSlip  slip = getById(id);
+        SlipRespDTO respDTO = new SlipRespDTO(slip);
+        List<SlipContentRespDTO> respDTOS = getChildren(id);
+        respDTO.setDetailList(respDTOS);
+        return respDTO;
+    }
+
+    /**
+     * @desc 通过id删除
+     */
+    @Override
+    public Boolean dropById(ManagerPaymentAndReceiptSlip managerPaymentAndReceiptSlip) {
+        managerPaymentAndReceiptSlip.setDelFlag("1");
+        updateById(managerPaymentAndReceiptSlip);
+        //删除子表
+        deleteChildren(managerPaymentAndReceiptSlip.getId());
+        return true;
+    }
+
+
+
+    /**
+     * @desc 获取子表数据
+     */
+    private List<SlipContentRespDTO> getChildren(String id) {
+        QueryWrapper<ManagePaymentAndReceiptContent> queryWrapper = new QueryWrapper<>();
+        queryWrapper.eq("del_flag", "0");
+        queryWrapper.eq("slip_id", id);
+        List<ManagePaymentAndReceiptContent> list = managePaymentAndReceiptContentService.list(queryWrapper);
+        List<SlipContentRespDTO> respDTOS = Lists.newArrayList();
+        for(ManagePaymentAndReceiptContent content : list){
+            respDTOS.add(new SlipContentRespDTO(content));
+        }
+        return  respDTOS;
+    }
+
+    //删除子表
+    private void deleteChildren(String id) {
+        QueryWrapper<ManagePaymentAndReceiptContent> queryWrapper = new QueryWrapper<>();
+        queryWrapper.eq("del_flag", "0");
+        queryWrapper.eq("slip_id", id);
+        managePaymentAndReceiptContentService.update(new ManagePaymentAndReceiptContent("1"), queryWrapper);
+
+    }
+
+    /**
+     * @desc 添加子表
+     */
+    private void saveChildren(SlipAddReqDTO slipAddReqDTO, String id) {
+        List<ManagePaymentAndReceiptContent> list = Lists.newArrayList();
+        for(SlipContentAddReqDTO reqDTO : slipAddReqDTO.getDetailList()){
+            ManagePaymentAndReceiptContent content = new ManagePaymentAndReceiptContent(reqDTO);
+            content.setSlipId(id);
+            list.add(content);
+        }
+        managePaymentAndReceiptContentService.saveBatch(list);
+    }
+}

+ 83 - 197
src/main/java/org/jeecg/modules/prowork/controller/ProWorkMilestoneController.java

@@ -1,48 +1,38 @@
 package org.jeecg.modules.prowork.controller;
 
-import java.util.Arrays;
-import java.util.List;
-import java.util.Map;
-import java.io.IOException;
-import java.io.UnsupportedEncodingException;
-import java.net.URLDecoder;
 import javax.servlet.http.HttpServletRequest;
-import javax.servlet.http.HttpServletResponse;
 import javax.validation.Valid;
-
+import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
+import com.baomidou.mybatisplus.core.metadata.IPage;
+import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
 import io.swagger.annotations.Api;
 import io.swagger.annotations.ApiImplicitParam;
 import io.swagger.annotations.ApiImplicitParams;
 import io.swagger.annotations.ApiOperation;
 import org.jeecg.common.api.vo.Result;
+import org.jeecg.common.dto.prowork.ProWorkMilestoneAddReqDTO;
+import org.jeecg.common.dto.prowork.ProWorkMilestoneReqDTO;
+import org.jeecg.common.dto.prowork.ProWorkMilestoneRespDTO;
 import org.jeecg.common.system.query.QueryGenerator;
-import org.jeecg.common.util.oConvertUtils;
-import org.jeecg.modules.prowork.entity.proWorkMilestone;
-import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
-import com.baomidou.mybatisplus.core.metadata.IPage;
-import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
+import org.jeecg.modules.prowork.entity.ProWorkMilestone;
 import lombok.extern.slf4j.Slf4j;
 import org.jeecg.modules.prowork.service.ProWorkMilestoneService;
-import org.jeecgframework.poi.excel.ExcelImportUtil;
-import org.jeecgframework.poi.excel.def.NormalExcelConstants;
-import org.jeecgframework.poi.excel.entity.ExportParams;
-import org.jeecgframework.poi.excel.entity.ImportParams;
-import org.jeecgframework.poi.excel.view.JeecgEntityExcelView;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.validation.BindingResult;
-import org.springframework.web.bind.annotation.*;
-import org.springframework.web.multipart.MultipartFile;
-import org.springframework.web.multipart.MultipartHttpServletRequest;
-import org.springframework.web.servlet.ModelAndView;
-import com.alibaba.fastjson.JSON;
+import org.springframework.web.bind.annotation.DeleteMapping;
+import org.springframework.web.bind.annotation.GetMapping;
+import org.springframework.web.bind.annotation.PostMapping;
+import org.springframework.web.bind.annotation.PutMapping;
+import org.springframework.web.bind.annotation.RequestBody;
+import org.springframework.web.bind.annotation.RequestMapping;
+import org.springframework.web.bind.annotation.RequestParam;
+import org.springframework.web.bind.annotation.RestController;
 
  /**
- * @Title: Controller
- * @Description: 项目工作--里程碑确认单
- * @author: jeecg-boot
- * @date2021-03-03
- * @version: V1.0
- */
+   * @Author jihaosen
+   * @date 2021/3/3
+   */
+
 @Api("里程碑确认单接口")
 @RestController
 @RequestMapping("/prowork/proWorkMilestone")
@@ -58,15 +48,17 @@ import com.alibaba.fastjson.JSON;
 			 @ApiImplicitParam(name="type", value="1.开发 2.实施 3.服务",required=true, dataType="String"),
 	 })
 	@GetMapping(value = "/list")
-	public Result<IPage<proWorkMilestone>> queryPageList(@Valid proWorkMilestone proWorkMilestone,
-	  @RequestParam(name="pageNo", defaultValue="1") Integer pageNo,
-	  @RequestParam(name="pageSize", defaultValue="10") Integer pageSize,
-	  HttpServletRequest req) {
-		Result<IPage<proWorkMilestone>> result = new Result<IPage<proWorkMilestone>>();
-		QueryWrapper<proWorkMilestone> queryWrapper = QueryGenerator.initQueryWrapper(proWorkMilestone, req.getParameterMap());
-		queryWrapper.orderByDesc("create_time");
-		Page<proWorkMilestone> page = new Page<proWorkMilestone>(pageNo, pageSize);
-		IPage<proWorkMilestone> pageList = proWorkMilestoneService.page(page, queryWrapper);
+	public Result<IPage<ProWorkMilestone>> queryPageList(@Valid ProWorkMilestone proWorkMilestone,
+		 @RequestParam(name="pageNo", defaultValue="1") Integer pageNo,
+		 @RequestParam(name="pageSize", defaultValue="10") Integer pageSize,
+		 HttpServletRequest req) {
+		Result<IPage<ProWorkMilestone>> result = new Result<IPage<ProWorkMilestone>>();
+		 proWorkMilestone.setDelFlag(null);
+		QueryWrapper<ProWorkMilestone> queryWrapper = QueryGenerator.initQueryWrapper(proWorkMilestone, req.getParameterMap());
+		 queryWrapper.eq("del_flag", "0");
+		 queryWrapper.orderByDesc("create_time");
+		Page<ProWorkMilestone> page = new Page<ProWorkMilestone>(pageNo, pageSize);
+		IPage<ProWorkMilestone> pageList = proWorkMilestoneService.page(page, queryWrapper);
 		result.setSuccess(true);
 		result.setResult(pageList);
 		return result;
@@ -85,51 +77,17 @@ import com.alibaba.fastjson.JSON;
 			 @ApiImplicitParam(name="mileId", value="里程碑id",required=true, dataType="String"),
 			 @ApiImplicitParam(name="mileName", value="里程碑(计划)",required=true, dataType="String"),
 			 @ApiImplicitParam(name="mileId", value="里程碑确认(0,未确认 1,确认)",required=true, dataType="String"),
-			 @ApiImplicitParam(name="mileId", value="里程碑id",required=true, dataType="String"),
-			 @ApiImplicitParam(name="mileId", value="里程碑id",required=true, dataType="String"),
+			 @ApiImplicitParam(name="confirmTime", value="确认时间",required=true, dataType="String"),
+			 @ApiImplicitParam(name="content", value="工作内容",required=true, dataType="String"),
+			 @ApiImplicitParam(name="duration", value="工作时长",required=true, dataType="String"),
+			 @ApiImplicitParam(name="updateFileId", value="文件id",required=true, dataType="String"),
+			 @ApiImplicitParam(name="currentUser", value="填写人(当前用户)",required=true, dataType="String"),
+			 @ApiImplicitParam(name="content", value="工作内容",required=true, dataType="String"),
 
-			 //	@ApiModelProperty("项目档案")
-			 //	private Integer cusId;
-			 //	@ApiModelProperty("客户编码")
-			 //	private String cusCode;
-			 //	@ApiModelProperty("里程碑id")
-			 //	private String mileId;
-			 //	@ApiModelProperty("里程碑(计划)")
-			 //	private String mileName;
-			 //	@ApiModelProperty("里程碑确认(0,未确认 1,确认)")
-			 //	private Integer mileConfirm;
-			 //	@ApiModelProperty("确认时间")
-			 //	@JsonFormat(timezone = "GMT+8",pattern = "yyyy-MM-dd HH:mm:ss")
-			 //    @DateTimeFormat(pattern="yyyy-MM-dd HH:mm:ss")
-			 //	private Date confirmTime;
-			 //	@ApiModelProperty("工作内容")
-			 //	private String content;
-			 //	@ApiModelProperty("工作时长")
-			 //	private Double duration;
-			 //	@ApiModelProperty("文件id")
-			 //	private String updateFileId;
-			 //	@ApiModelProperty("填写人(当前用户)")
-			 //	private String currentUser;
-			 //	@ApiModelProperty("创建时间")
-			 //	@JsonFormat(timezone = "GMT+8",pattern = "yyyy-MM-dd HH:mm:ss")
-			 //    @DateTimeFormat(pattern="yyyy-MM-dd HH:mm:ss")
-			 //	private Date createTime;
-			 //	@ApiModelProperty("创建人")
-			 //	private String createBy;
-			 //	@ApiModelProperty("修改时间")
-			 //	@JsonFormat(timezone = "GMT+8",pattern = "yyyy-MM-dd HH:mm:ss")
-			 //    @DateTimeFormat(pattern="yyyy-MM-dd HH:mm:ss")
-			 //	private Date updateTime;
-			 //	@ApiModelProperty("修改人")
-			 //	private String updateBy;
-			 //	@ApiModelProperty("删除状态(0,正常,1已删除)")
-			 //	private String delFlag;
-			 //	@ApiModelProperty("组织")
-			 //	private String pkOrg;
 	 })
 	@PostMapping(value = "/add")
-	public Result<proWorkMilestone> add(@RequestBody proWorkMilestone proWorkMilestone, BindingResult bindingResult) {
-		Result<proWorkMilestone> result = new Result<proWorkMilestone>();
+	public Result<ProWorkMilestone> add(@RequestBody ProWorkMilestoneAddReqDTO reqDTO, BindingResult bindingResult) {
+		Result<ProWorkMilestone> result = new Result<ProWorkMilestone>();
 		try {
 			StringBuilder sb = new StringBuilder();
 			if (bindingResult.hasErrors()){
@@ -138,7 +96,7 @@ import com.alibaba.fastjson.JSON;
 				result.error500(sb.toString());
 				return result;
 			}
-			proWorkMilestoneService.save(proWorkMilestone);
+			proWorkMilestoneService.add(reqDTO);
 			result.success("添加成功!");
 		} catch (Exception e) {
 			e.printStackTrace();
@@ -147,21 +105,37 @@ import com.alibaba.fastjson.JSON;
 		}
 		return result;
 	}
-	
-	/**
-	  *  编辑
-	 * @param proWorkMilestone
-	 * @return
-	 */
+
+	 @ApiOperation(value = "编辑", notes = "里程碑确认单编辑")
+	 @ApiImplicitParams({
+			 @ApiImplicitParam(name="id", value="id",required=true, dataType="String"),
+			 @ApiImplicitParam(name="pkOrg", value="组织",required=false, dataType="String"),
+			 @ApiImplicitParam(name="billcode", value="单据编号",required=true, dataType="String"),
+			 @ApiImplicitParam(name="type", value="1.开发 2.实施 3.服务",required=true, dataType="String"),
+			 @ApiImplicitParam(name="proId", value="项目档案id",required=true, dataType="String"),
+			 @ApiImplicitParam(name="proCode", value="项目档案编码",required=true, dataType="String"),
+			 @ApiImplicitParam(name="proName", value="项目档案名称",required=true, dataType="String"),
+			 @ApiImplicitParam(name="cusId", value="客户档案id",required=true, dataType="String"),
+			 @ApiImplicitParam(name="cusCode", value="客户编码",required=true, dataType="String"),
+			 @ApiImplicitParam(name="mileId", value="里程碑id",required=true, dataType="String"),
+			 @ApiImplicitParam(name="mileName", value="里程碑(计划)",required=true, dataType="String"),
+			 @ApiImplicitParam(name="mileId", value="里程碑确认(0,未确认 1,确认)",required=true, dataType="String"),
+			 @ApiImplicitParam(name="confirmTime", value="确认时间",required=true, dataType="String"),
+			 @ApiImplicitParam(name="content", value="工作内容",required=true, dataType="String"),
+			 @ApiImplicitParam(name="duration", value="工作时长",required=true, dataType="String"),
+			 @ApiImplicitParam(name="updateFileId", value="文件id",required=true, dataType="String"),
+			 @ApiImplicitParam(name="currentUser", value="填写人(当前用户)",required=true, dataType="String"),
+			 @ApiImplicitParam(name="content", value="工作内容",required=true, dataType="String"),
+
+	 })
 	@PutMapping(value = "/edit")
-	public Result<proWorkMilestone> edit(@RequestBody proWorkMilestone proWorkMilestone) {
-		Result<proWorkMilestone> result = new Result<proWorkMilestone>();
-		proWorkMilestone proWorkMilestoneEntity = proWorkMilestoneService.getById(proWorkMilestone.getId());
+	public Result<ProWorkMilestone> edit(@RequestBody ProWorkMilestoneAddReqDTO reqDTO) {
+		Result<ProWorkMilestone> result = new Result<ProWorkMilestone>();
+		ProWorkMilestone proWorkMilestoneEntity = proWorkMilestoneService.getById(reqDTO.getId());
 		if(proWorkMilestoneEntity==null) {
 			result.error500("未找到对应实体");
 		}else {
-			boolean ok = proWorkMilestoneService.updateById(proWorkMilestone);
-			//TODO 返回false说明什么?
+			boolean ok = proWorkMilestoneService.edit(reqDTO);
 			if(ok) {
 				result.success("修改成功!");
 			}
@@ -170,19 +144,18 @@ import com.alibaba.fastjson.JSON;
 		return result;
 	}
 	
-	/**
-	  *   通过id删除
-	 * @param id
-	 * @return
-	 */
+	@ApiOperation(value = "通过id删除", notes = "通过id删除主子表")
+	@ApiImplicitParams({
+			@ApiImplicitParam(name="id", value="id",required=true, dataType="String"),
+	})
 	@DeleteMapping(value = "/delete")
-	public Result<proWorkMilestone> delete(@RequestParam(name="id",required=true) String id) {
-		Result<proWorkMilestone> result = new Result<proWorkMilestone>();
-		proWorkMilestone proWorkMilestone = proWorkMilestoneService.getById(id);
+	public Result<ProWorkMilestone> delete(@RequestBody ProWorkMilestoneReqDTO  reqDTO) {
+		Result<ProWorkMilestone> result = new Result<ProWorkMilestone>();
+		ProWorkMilestone proWorkMilestone = proWorkMilestoneService.getById(reqDTO.getId());
 		if(proWorkMilestone==null) {
 			result.error500("未找到对应实体");
 		}else {
-			boolean ok = proWorkMilestoneService.removeById(id);
+			boolean ok = proWorkMilestoneService.dropById(proWorkMilestone);
 			if(ok) {
 				result.success("删除成功!");
 			}
@@ -190,33 +163,16 @@ import com.alibaba.fastjson.JSON;
 		
 		return result;
 	}
-	
-	/**
-	  *  批量删除
-	 * @param ids
-	 * @return
-	 */
-	@DeleteMapping(value = "/deleteBatch")
-	public Result<proWorkMilestone> deleteBatch(@RequestParam(name="ids",required=true) String ids) {
-		Result<proWorkMilestone> result = new Result<proWorkMilestone>();
-		if(ids==null || "".equals(ids.trim())) {
-			result.error500("参数不识别!");
-		}else {
-			this.proWorkMilestoneService.removeByIds(Arrays.asList(ids.split(",")));
-			result.success("删除成功!");
-		}
-		return result;
-	}
-	
-	/**
-	  * 通过id查询
-	 * @param id
-	 * @return
-	 */
+
+
+	 @ApiOperation(value = "通过id查询", notes = "通过id查询主子表")
+	 @ApiImplicitParams({
+			 @ApiImplicitParam(name="id", value="id",required=true, dataType="String"),
+	 })
 	@GetMapping(value = "/queryById")
-	public Result<proWorkMilestone> queryById(@RequestParam(name="id",required=true) String id) {
-		Result<proWorkMilestone> result = new Result<proWorkMilestone>();
-		proWorkMilestone proWorkMilestone = proWorkMilestoneService.getById(id);
+	public Result<ProWorkMilestoneRespDTO> queryById(ProWorkMilestoneReqDTO  reqDTO) {
+		Result<ProWorkMilestoneRespDTO> result = new Result<ProWorkMilestoneRespDTO>();
+		 ProWorkMilestoneRespDTO proWorkMilestone = proWorkMilestoneService.queryById(reqDTO.getId());
 		if(proWorkMilestone==null) {
 			result.error500("未找到对应实体");
 		}else {
@@ -225,74 +181,4 @@ import com.alibaba.fastjson.JSON;
 		}
 		return result;
 	}
-
-  /**
-      * 导出excel
-   *
-   * @param request
-   * @param response
-   */
-  @RequestMapping(value = "/exportXls")
-  public ModelAndView exportXls(HttpServletRequest request, HttpServletResponse response) {
-      // Step.1 组装查询条件
-      QueryWrapper<proWorkMilestone> queryWrapper = null;
-      try {
-          String paramsStr = request.getParameter("paramsStr");
-          if (oConvertUtils.isNotEmpty(paramsStr)) {
-              String deString = URLDecoder.decode(paramsStr, "UTF-8");
-              proWorkMilestone proWorkMilestone = JSON.parseObject(deString, proWorkMilestone.class);
-              queryWrapper = QueryGenerator.initQueryWrapper(proWorkMilestone, request.getParameterMap());
-          }
-      } catch (UnsupportedEncodingException e) {
-          e.printStackTrace();
-      }
-
-      //Step.2 AutoPoi 导出Excel
-      ModelAndView mv = new ModelAndView(new JeecgEntityExcelView());
-      List<proWorkMilestone> pageList = proWorkMilestoneService.list(queryWrapper);
-      //导出文件名称
-      mv.addObject(NormalExcelConstants.FILE_NAME, "项目工作--里程碑确认单列表");
-      mv.addObject(NormalExcelConstants.CLASS, proWorkMilestone.class);
-      mv.addObject(NormalExcelConstants.PARAMS, new ExportParams("项目工作--里程碑确认单列表数据", "导出人:Jeecg", "导出信息"));
-      mv.addObject(NormalExcelConstants.DATA_LIST, pageList);
-      return mv;
-  }
-
-  /**
-      * 通过excel导入数据
-   *
-   * @param request
-   * @param response
-   * @return
-   */
-  @RequestMapping(value = "/importExcel", method = RequestMethod.POST)
-  public Result<?> importExcel(HttpServletRequest request, HttpServletResponse response) {
-      MultipartHttpServletRequest multipartRequest = (MultipartHttpServletRequest) request;
-      Map<String, MultipartFile> fileMap = multipartRequest.getFileMap();
-      for (Map.Entry<String, MultipartFile> entity : fileMap.entrySet()) {
-          MultipartFile file = entity.getValue();// 获取上传文件对象
-          ImportParams params = new ImportParams();
-          params.setTitleRows(2);
-          params.setHeadRows(1);
-          params.setNeedSave(true);
-          try {
-              List<proWorkMilestone> listproWorkMilestones = ExcelImportUtil.importExcel(file.getInputStream(), proWorkMilestone.class, params);
-              for (proWorkMilestone proWorkMilestoneExcel : listproWorkMilestones) {
-                  proWorkMilestoneService.save(proWorkMilestoneExcel);
-              }
-              return Result.ok("文件导入成功!数据行数:" + listproWorkMilestones.size());
-          } catch (Exception e) {
-              log.error(e.getMessage());
-              return Result.error("文件导入失败!");
-          } finally {
-              try {
-                  file.getInputStream().close();
-              } catch (IOException e) {
-                  e.printStackTrace();
-              }
-          }
-      }
-      return Result.ok("文件导入失败!");
-  }
-
 }

+ 44 - 34
src/main/java/org/jeecg/modules/prowork/entity/ProWorkUpdateFile.java

@@ -2,51 +2,61 @@ package org.jeecg.modules.prowork.entity;
 
 import java.io.Serializable;
 import java.util.Date;
+
 import com.baomidou.mybatisplus.annotation.IdType;
 import com.baomidou.mybatisplus.annotation.TableId;
 import com.baomidou.mybatisplus.annotation.TableName;
+import io.swagger.annotations.ApiModel;
+import io.swagger.annotations.ApiModelProperty;
 import lombok.Data;
 import com.fasterxml.jackson.annotation.JsonFormat;
+import org.jeecg.common.dto.prowork.ProWorkUpdateFileAddReqDTO;
 import org.springframework.format.annotation.DateTimeFormat;
-import org.jeecgframework.poi.excel.annotation.Excel;
 
 /**
- * @Description: 项目工作--文件信息
- * @author: jeecg-boot
- * @date2021-02-26
- * @version: V1.0
+ * @Author jihaosen
+ * @date 2021/3/3
  */
+@ApiModel("文件信息")
 @Data
 @TableName("pro_work_update_file")
 public class ProWorkUpdateFile implements Serializable {
     private static final long serialVersionUID = 1L;
-    
-	/**id*/
-	@TableId(type = IdType.UUID)
-	private java.lang.String id;
-	/**文件路径*/
-	@Excel(name = "文件路径", width = 15)
-	private java.lang.String fileUrl;
-	/**创建时间*/
-	@Excel(name = "创建时间", width = 20, format = "yyyy-MM-dd HH:mm:ss")
-	@JsonFormat(timezone = "GMT+8",pattern = "yyyy-MM-dd HH:mm:ss")
-    @DateTimeFormat(pattern="yyyy-MM-dd HH:mm:ss")
-	private java.util.Date createTime;
-	/**创建人*/
-	@Excel(name = "创建人", width = 15)
-	private java.lang.String createBy;
-	/**修改时间*/
-	@Excel(name = "修改时间", width = 20, format = "yyyy-MM-dd HH:mm:ss")
-	@JsonFormat(timezone = "GMT+8",pattern = "yyyy-MM-dd HH:mm:ss")
-    @DateTimeFormat(pattern="yyyy-MM-dd HH:mm:ss")
-	private java.util.Date updateTime;
-	/**修改人*/
-	@Excel(name = "修改人", width = 15)
-	private java.lang.String updateBy;
-	/**删除状态(0,正常,1已删除)*/
-	@Excel(name = "删除状态(0,正常,1已删除)", width = 15)
-	private java.lang.String delFlag;
-	/**组织*/
-	@Excel(name = "组织", width = 15)
-	private java.lang.String pkOrg;
+
+    @ApiModelProperty("id")
+    @TableId(type = IdType.UUID)
+    private java.lang.String id;
+    @ApiModelProperty("里程碑确认单id")
+    private String workMileId;
+    @ApiModelProperty("文件名")
+    private String fileName;
+    @ApiModelProperty("fileUrl")
+    private java.lang.String fileUrl;
+    @ApiModelProperty("创建时间")
+    @JsonFormat(timezone = "GMT+8", pattern = "yyyy-MM-dd HH:mm:ss")
+    @DateTimeFormat(pattern = "yyyy-MM-dd HH:mm:ss")
+    private java.util.Date createTime;
+    @ApiModelProperty("创建人")
+    private java.lang.String createBy;
+    @ApiModelProperty("修改时间")
+    @JsonFormat(timezone = "GMT+8", pattern = "yyyy-MM-dd HH:mm:ss")
+    @DateTimeFormat(pattern = "yyyy-MM-dd HH:mm:ss")
+    private java.util.Date updateTime;
+    @ApiModelProperty("修改人")
+    private java.lang.String updateBy;
+    @ApiModelProperty("删除状态(0,正常,1已删除)")
+    private java.lang.String delFlag;
+    @ApiModelProperty("组织")
+    private java.lang.String pkOrg;
+
+    public ProWorkUpdateFile() {
+    }
+
+    public ProWorkUpdateFile(ProWorkUpdateFileAddReqDTO fileAddReqDTO ) {
+        this.fileUrl = fileAddReqDTO.getFileUrl();
+    }
+
+    public ProWorkUpdateFile(String delFlag ) {
+        this.delFlag = delFlag;
+    }
 }

+ 24 - 29
src/main/java/org/jeecg/modules/prowork/entity/proWorkMilestone.java

@@ -3,20 +3,21 @@ package org.jeecg.modules.prowork.entity;
 import java.io.Serializable;
 import java.util.Date;
 import com.baomidou.mybatisplus.annotation.IdType;
+import com.baomidou.mybatisplus.annotation.TableField;
 import com.baomidou.mybatisplus.annotation.TableId;
 import com.baomidou.mybatisplus.annotation.TableName;
 import io.swagger.annotations.ApiModel;
 import io.swagger.annotations.ApiModelProperty;
 import lombok.Data;
 import com.fasterxml.jackson.annotation.JsonFormat;
+import org.jeecg.common.dto.prowork.ProWorkMilestoneAddReqDTO;
 import org.springframework.format.annotation.DateTimeFormat;
-
 import javax.validation.constraints.NotEmpty;
 
 @ApiModel("里程碑确认单")
 @Data
 @TableName("pro_work_milestone")
-public class proWorkMilestone implements Serializable {
+public class ProWorkMilestone implements Serializable {
 	private static final long serialVersionUID = 3883624886849611941L;
 	@ApiModelProperty("id")
 	@TableId(type = IdType.UUID)
@@ -33,7 +34,7 @@ public class proWorkMilestone implements Serializable {
 	@ApiModelProperty("项目档案名称")
 	private String proName;
 	@ApiModelProperty("客户档案id")
-	private Integer cusId;
+	private String cusId;
 	@ApiModelProperty("客户编码")
 	private String cusCode;
 	@ApiModelProperty("里程碑id")
@@ -50,9 +51,8 @@ public class proWorkMilestone implements Serializable {
 	private String content;
 	@ApiModelProperty("工作时长")
 	private Double duration;
-	@ApiModelProperty("文件id")
-	private String updateFileId;
 	@ApiModelProperty("填写人(当前用户)")
+	@TableField("`current_user`")
 	private String currentUser;
 	@ApiModelProperty("创建时间")
 	@JsonFormat(timezone = "GMT+8",pattern = "yyyy-MM-dd HH:mm:ss")
@@ -71,31 +71,26 @@ public class proWorkMilestone implements Serializable {
 	@ApiModelProperty("组织")
 	private String pkOrg;
 
-	public proWorkMilestone() {
+	public ProWorkMilestone() {
 	}
 
-	public proWorkMilestone(String id, String billcode, String proId, String proCode, String proName, Integer cusId, String cusCode, String mileId, String mileName, Integer mileConfirm, Date confirmTime, String content, Double duration, String updateFileId, String currentUser, Date createTime, String createBy, Date updateTime, String updateBy, String delFlag, String pkOrg) {
-		this.id = id;
-		this.billcode = billcode;
-		this.type = type;
-		this.proId = proId;
-		this.proCode = proCode;
-		this.proName = proName;
-		this.cusId = cusId;
-		this.cusCode = cusCode;
-		this.mileId = mileId;
-		this.mileName = mileName;
-		this.mileConfirm = mileConfirm;
-		this.confirmTime = confirmTime;
-		this.content = content;
-		this.duration = duration;
-		this.updateFileId = updateFileId;
-		this.currentUser = currentUser;
-		this.createTime = createTime;
-		this.createBy = createBy;
-		this.updateTime = updateTime;
-		this.updateBy = updateBy;
-		this.delFlag = delFlag;
-		this.pkOrg = pkOrg;
+	public ProWorkMilestone(ProWorkMilestoneAddReqDTO reqDTO) {
+		this.id = reqDTO.getId();
+		this.billcode = reqDTO.getBillcode();
+		this.type = reqDTO.getType();
+		this.proId = reqDTO.getProId();
+		this.proCode = reqDTO.getProCode();
+		this.proName = reqDTO.getProName();
+		this.cusId = reqDTO.getCusId();
+		this.cusCode = reqDTO.getCusCode();
+		this.mileId = reqDTO.getMileId();
+		this.mileName = reqDTO.getMileName();
+		this.mileConfirm = reqDTO.getMileConfirm();
+		this.confirmTime = reqDTO.getConfirmTime();
+		this.content = reqDTO.getContent();
+		this.duration = reqDTO.getDuration();
+		this.currentUser = reqDTO.getCurrentUser();
+		this.delFlag = "0";
+		this.pkOrg = reqDTO.getPkOrg();
 	}
 }

+ 2 - 2
src/main/java/org/jeecg/modules/prowork/mapper/ProWorkMilestoneMapper.java

@@ -1,7 +1,7 @@
 package org.jeecg.modules.prowork.mapper;
 
-import org.jeecg.modules.prowork.entity.proWorkMilestone;
 import com.baomidou.mybatisplus.core.mapper.BaseMapper;
+import org.jeecg.modules.prowork.entity.ProWorkMilestone;
 
 /**
  * @Description: 项目工作--里程碑确认单
@@ -9,6 +9,6 @@ import com.baomidou.mybatisplus.core.mapper.BaseMapper;
  * @date2021-03-03
  * @version: V1.0
  */
-public interface ProWorkMilestoneMapper extends BaseMapper<proWorkMilestone> {
+public interface ProWorkMilestoneMapper extends BaseMapper<ProWorkMilestone> {
 
 }

+ 21 - 2
src/main/java/org/jeecg/modules/prowork/service/ProWorkMilestoneService.java

@@ -1,7 +1,10 @@
 package org.jeecg.modules.prowork.service;
 
-import org.jeecg.modules.prowork.entity.proWorkMilestone;
 import com.baomidou.mybatisplus.extension.service.IService;
+import org.jeecg.common.dto.prowork.ProWorkMilestoneAddReqDTO;
+import org.jeecg.common.dto.prowork.ProWorkMilestoneRespDTO;
+import org.jeecg.common.dto.prowork.ProWorkUpdateFileRespDTO;
+import org.jeecg.modules.prowork.entity.ProWorkMilestone;
 
 /**
  * @Description: 项目工作--里程碑确认单
@@ -9,6 +12,22 @@ import com.baomidou.mybatisplus.extension.service.IService;
  * @date2021-03-03
  * @version: V1.0
  */
-public interface ProWorkMilestoneService extends IService<proWorkMilestone> {
+public interface ProWorkMilestoneService extends IService<ProWorkMilestone> {
+    /**
+     * @desc 新增
+     */
+    void add(ProWorkMilestoneAddReqDTO reqDTO);
+    /**
+     * @desc 编辑
+     */
+    boolean edit(ProWorkMilestoneAddReqDTO reqDTO);
 
+    /**
+     * @desc 通过id删除
+     */
+    boolean dropById(ProWorkMilestone proWorkMilestone);
+    /**
+     * @desc 通过id查询
+     */
+    ProWorkMilestoneRespDTO queryById(String id);
 }

+ 124 - 3
src/main/java/org/jeecg/modules/prowork/service/impl/ProWorkMilestoneServiceImpl.java

@@ -1,10 +1,26 @@
 package org.jeecg.modules.prowork.service.impl;
 
-import org.jeecg.modules.prowork.entity.proWorkMilestone;
+import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
+import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
+import com.google.common.collect.Lists;
+import org.apache.commons.lang3.StringUtils;
+import org.jeecg.common.dto.prowork.ProWorkMilestoneAddReqDTO;
+import org.jeecg.common.dto.prowork.ProWorkMilestoneRespDTO;
+import org.jeecg.common.dto.prowork.ProWorkUpdateFileAddReqDTO;
+import org.jeecg.common.dto.prowork.ProWorkUpdateFileRespDTO;
+import org.jeecg.common.exception.JeecgBootException;
+import org.jeecg.modules.prowork.entity.ProWorkMilestone;
+import org.jeecg.modules.prowork.entity.ProWorkUpdateFile;
 import org.jeecg.modules.prowork.mapper.ProWorkMilestoneMapper;
 import org.jeecg.modules.prowork.service.ProWorkMilestoneService;
+import org.jeecg.modules.prowork.service.ProWorkUpdateFileService;
+import org.jeecg.modules.system.service.ISysSerialPatternService;
+import org.jeecg.modules.system.vo.CallResult;
+import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.stereotype.Service;
-import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
+import org.springframework.transaction.annotation.Transactional;
+import org.springframework.util.CollectionUtils;
+import java.util.List;
 
 /**
  * @Description: 项目工作--里程碑确认单
@@ -13,6 +29,111 @@ import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
  * @version: V1.0
  */
 @Service
-public class ProWorkMilestoneServiceImpl extends ServiceImpl<ProWorkMilestoneMapper, proWorkMilestone> implements ProWorkMilestoneService {
+@Transactional
+public class ProWorkMilestoneServiceImpl extends ServiceImpl<ProWorkMilestoneMapper, ProWorkMilestone> implements ProWorkMilestoneService {
+    @Autowired
+    private ISysSerialPatternService sysSerialPatternService;
+    @Autowired
+    private ProWorkUpdateFileService proWorkUpdateFileService;
+
+    /**
+     * @desc 新增
+     */
+    @Override
+    public void add(ProWorkMilestoneAddReqDTO reqDTO) {
+        ProWorkMilestone proWorkMilestone = new ProWorkMilestone(reqDTO);
+        CallResult<String> nextSerial = sysSerialPatternService.getNextSerial(proWorkMilestone, "pro_work_milestone", "billcode", true);
+        if(!nextSerial.isSucceed()){
+            throw new RuntimeException("获取编号失败");
+        }
+        proWorkMilestone.setBillcode(nextSerial.getContent());
+        save(proWorkMilestone);
+        //保存文件
+        saveChildren(reqDTO, proWorkMilestone.getId());
+    }
+
+    /**
+     * @desc 编辑
+     */
+    @Override
+    public boolean edit(ProWorkMilestoneAddReqDTO reqDTO) {
+        ProWorkMilestone proWorkMilestone= new ProWorkMilestone(reqDTO);
+        updateById(proWorkMilestone);
+        //删除子表
+        deleteChildren(reqDTO.getId());
+        //添加子表
+        saveChildren(reqDTO, proWorkMilestone.getId());
+        return true;
+    }
+
+    /**
+     * @desc 通过id删除
+     */
+    @Override
+    public boolean dropById(ProWorkMilestone proWorkMilestone) {
+        proWorkMilestone.setDelFlag("1");
+        updateById(proWorkMilestone);
+
+        //删除子表
+        deleteChildren(proWorkMilestone.getId());
+        return true;
+    }
+
+    /**
+     * @desc 通过id查询
+     */
+    @Override
+    public ProWorkMilestoneRespDTO queryById(String id) {
+        ProWorkMilestone proWorkMilestone = getById(id);
+        ProWorkMilestoneRespDTO proWorkMilestoneRespDTO = new ProWorkMilestoneRespDTO(proWorkMilestone);
+        List<ProWorkUpdateFileRespDTO> fileList = getChildern(id);
+        proWorkMilestoneRespDTO.setFileList(fileList);
+        return proWorkMilestoneRespDTO;
+    }
+
+
+
+    /**
+     * @desc 获取子表数据(文件信息)
+     */
+    private List<ProWorkUpdateFileRespDTO> getChildern(String id) {
+        QueryWrapper<ProWorkUpdateFile> queryWrapper = new QueryWrapper<>();
+        queryWrapper.eq("work_mile_id", id);
+        List<ProWorkUpdateFile> list = proWorkUpdateFileService.list();
+        List<ProWorkUpdateFileRespDTO> fileList = Lists.newArrayList();
+        for(ProWorkUpdateFile updateFile : list){
+            ProWorkUpdateFileRespDTO respDTO = new ProWorkUpdateFileRespDTO(updateFile);
+            fileList.add(respDTO);
+        }
+        return fileList;
+    }
+
+    /**
+     * @desc 删除子表
+     */
+    private void deleteChildren(String id) {
+        QueryWrapper<ProWorkUpdateFile> queryWrapper = new QueryWrapper<>();
+        queryWrapper.eq("del_flag", "0").eq("work_mile_id",id);
+        proWorkUpdateFileService.update(new ProWorkUpdateFile("1"), queryWrapper);
+
+    }
 
+    //保存文件
+    private void saveChildren(ProWorkMilestoneAddReqDTO reqDTO, String id) {
+        if(CollectionUtils.isEmpty(reqDTO.getFileList())){
+            throw new JeecgBootException("文件信息不能为空");
+        }
+        List<ProWorkUpdateFile> list = Lists.newArrayList();
+        for(ProWorkUpdateFileAddReqDTO fileAddReqDTO : reqDTO.getFileList()){
+            ProWorkUpdateFile proWorkUpdateFile = new ProWorkUpdateFile(fileAddReqDTO);
+            //截取文件名称
+            String[] filePath = fileAddReqDTO.getFileUrl().split("/");
+            int index = filePath.length;
+            String fileName = StringUtils.substringBefore(filePath[index - 1], ".");
+            proWorkUpdateFile.setFileName(fileName);
+            proWorkUpdateFile.setWorkMileId(id);
+            list.add(proWorkUpdateFile);
+        }
+        proWorkUpdateFileService.saveBatch(list);
+    }
 }