-
+ |
合同金额:共计¥
@@ -127,7 +159,7 @@
|
付款方式
|
-
+ |
${contract.payModeDesc}
|
@@ -136,7 +168,7 @@
合同备注
|
-
+ |
<#if contract.signDesc?? && contract.signDesc != "">
diff --git a/pusong-common/pusong-common-doc/src/main/java/com/pusong/common/doc/util/PdfGenerator.java b/pusong-common/pusong-common-doc/src/main/java/com/pusong/common/doc/util/PdfGenerator.java
index 4e1cbb9..dd9fd9c 100644
--- a/pusong-common/pusong-common-doc/src/main/java/com/pusong/common/doc/util/PdfGenerator.java
+++ b/pusong-common/pusong-common-doc/src/main/java/com/pusong/common/doc/util/PdfGenerator.java
@@ -72,7 +72,7 @@ public class PdfGenerator {
}
- public static void makePdf(Map data ,String pdfpath,String templateName) throws Exception{
+ public static void makePdf(Map data, String pdfpath, String templateName) throws Exception{
// 加载模板
Template template = configuration.getTemplate(templateName);
data.put("imagePath",System.getProperty("user.dir"));
diff --git a/pusong-modules/pusong-business/src/main/java/com/pusong/business/controller/PsApproverRecordController.java b/pusong-modules/pusong-business/src/main/java/com/pusong/business/controller/PsApproverRecordController.java
index 72fc700..835fc88 100644
--- a/pusong-modules/pusong-business/src/main/java/com/pusong/business/controller/PsApproverRecordController.java
+++ b/pusong-modules/pusong-business/src/main/java/com/pusong/business/controller/PsApproverRecordController.java
@@ -62,7 +62,7 @@ public class PsApproverRecordController extends BaseController {
@GetMapping("/approver")
public R approver(@NotBlank(message = "操作类型不能为空") String operate,
@NotNull(message = "数据id不能为空") Long id, String desc) {
- contractInfoService.finish(psApproverRecordService.approver(operate, id,desc));
+ contractInfoService.finish(psApproverRecordService.approver(operate, id, desc));
return R.ok();
}
diff --git a/pusong-modules/pusong-business/src/main/java/com/pusong/business/controller/PsContractInfoController.java b/pusong-modules/pusong-business/src/main/java/com/pusong/business/controller/PsContractInfoController.java
index 092c2f9..c14bd48 100644
--- a/pusong-modules/pusong-business/src/main/java/com/pusong/business/controller/PsContractInfoController.java
+++ b/pusong-modules/pusong-business/src/main/java/com/pusong/business/controller/PsContractInfoController.java
@@ -4,6 +4,7 @@ import java.util.List;
import cn.dev33.satoken.annotation.SaIgnore;
import com.pusong.business.domain.bo.PsContractInfoQueryBo;
+import com.pusong.business.domain.bo.PsInvoiceBo;
import com.pusong.business.domain.vo.PsContractBusinessVo;
import com.pusong.business.domain.vo.PsSalaryContractVo;
import com.pusong.business.domain.vo.ServiceScheduleVo;
@@ -56,6 +57,13 @@ public class PsContractInfoController extends BaseController {
@RepeatSubmit()
@PostMapping("/create")
public R add(@Validated(AddGroup.class) @RequestBody PsContractInfoBo bo) {
+ if (bo.getFirstPartyType() == PsContractInfoBo.FIRSTPARTYTYPE.INDIVIDUALS.getType()){
+ bo.setContactPersonName(bo.getCompanyInfoBo().getLegalPersonName());
+ bo.setContactPersonPhone(bo.getCompanyInfoBo().getLegalPersonPhone());
+ bo.setContactPersonIdcard(bo.getCompanyInfoBo().getLegalPersonIdcard());
+ bo.setCompanyInfoBo(null);
+ }
+
return R.ok(psContractInfoService.createContract(bo,2));
}
/**
@@ -97,6 +105,15 @@ public class PsContractInfoController extends BaseController {
return psContractInfoService.queryPageList(bo, pageQuery);
}
+ /**
+ * 使用客户id 查询分页查询合同列表
+ */
+ @SaCheckPermission("business:contractInfo:LIST")
+ @GetMapping("/queryPageListByCustomId")
+ public TableDataInfo queryPageListByCustomId(@RequestParam Long customId, PageQuery pageQuery) {
+ return psContractInfoService.queryPageListByCustomId(customId, pageQuery);
+ }
+
/**
* 根据合同编码查询合同信息
*/
@@ -164,6 +181,18 @@ public class PsContractInfoController extends BaseController {
return R.ok();
}
+ /**
+ * 开发票(开发票操作)
+ */
+ @SaCheckPermission("business:contractInfo:list")
+ @Log(title = "合同开发票", businessType = BusinessType.INSERT)
+ @RepeatSubmit()
+ @GetMapping("/invoice_new")
+ public R invoiceNew(@Validated(AddGroup.class) PsInvoiceBo psInvoiceBo) {
+ psContractInfoService.invoice(psInvoiceBo);
+ return R.ok();
+ }
+
/**
* 免费派单
diff --git a/pusong-modules/pusong-business/src/main/java/com/pusong/business/controller/PsContractOperateController.java b/pusong-modules/pusong-business/src/main/java/com/pusong/business/controller/PsContractOperateController.java
index 73ff7bc..d4f5ea0 100644
--- a/pusong-modules/pusong-business/src/main/java/com/pusong/business/controller/PsContractOperateController.java
+++ b/pusong-modules/pusong-business/src/main/java/com/pusong/business/controller/PsContractOperateController.java
@@ -88,8 +88,11 @@ public class PsContractOperateController extends BaseController {
@RepeatSubmit()
@SaCheckPermission("business:contractOperate:rollBack")
@PostMapping(value = "/rollBack", consumes = MediaType.MULTIPART_FORM_DATA_VALUE)
- public R rollBack(@RequestPart("file") MultipartFile file,@NotBlank String contractCode )throws Exception {
- operateService.rollbackContract( file, contractCode);
+ public R rollBack(@RequestPart("file") MultipartFile file, @NotBlank String contractCode)throws Exception {
+ String s = operateService.rollbackContract(file, contractCode);
+ if (s != null){
+ return R.fail(s);
+ }
return R.ok();
}
diff --git a/pusong-modules/pusong-business/src/main/java/com/pusong/business/controller/PsTaskController.java b/pusong-modules/pusong-business/src/main/java/com/pusong/business/controller/PsTaskController.java
index 9e5301b..aa37fd9 100644
--- a/pusong-modules/pusong-business/src/main/java/com/pusong/business/controller/PsTaskController.java
+++ b/pusong-modules/pusong-business/src/main/java/com/pusong/business/controller/PsTaskController.java
@@ -119,7 +119,10 @@ public class PsTaskController extends BaseController {
@SaCheckPermission("business:task:list")
@GetMapping("/mainFinish")
public R mainFinish(@NotNull Long id) {
- contractInfoService.finish(psTaskMainService.finishMain(id));
+ String finish = contractInfoService.finish(psTaskMainService.finishMain(id));
+ if (finish != null){
+ return R.fail(finish);
+ }
return R.ok();
}
diff --git a/pusong-modules/pusong-business/src/main/java/com/pusong/business/domain/PsContractBusiness.java b/pusong-modules/pusong-business/src/main/java/com/pusong/business/domain/PsContractBusiness.java
index 0ad49dd..672de4c 100644
--- a/pusong-modules/pusong-business/src/main/java/com/pusong/business/domain/PsContractBusiness.java
+++ b/pusong-modules/pusong-business/src/main/java/com/pusong/business/domain/PsContractBusiness.java
@@ -64,4 +64,12 @@ public class PsContractBusiness extends TenantEntity {
*/
private Long companyId;
+ /**
+ * 是否代账
+ */
+ private String isProxy;
+ /**
+ * 是否老账新接
+ */
+ private String isOld;
}
diff --git a/pusong-modules/pusong-business/src/main/java/com/pusong/business/domain/PsContractInfo.java b/pusong-modules/pusong-business/src/main/java/com/pusong/business/domain/PsContractInfo.java
index da130f1..34ca933 100644
--- a/pusong-modules/pusong-business/src/main/java/com/pusong/business/domain/PsContractInfo.java
+++ b/pusong-modules/pusong-business/src/main/java/com/pusong/business/domain/PsContractInfo.java
@@ -46,6 +46,21 @@ public class PsContractInfo extends TenantEntity {
*/
private Long customId;
+ /**
+ * 签约个人时联系人姓名
+ */
+ private String contactPersonName;
+
+ /**
+ * 签约个人时联系人手机号
+ */
+ private String contactPersonPhone;
+
+ /**
+ * 签约个人时联系人身份证号
+ */
+ private String contactPersonIdcard;
+
/**
* 公司id
*/
@@ -87,11 +102,11 @@ public class PsContractInfo extends TenantEntity {
private String customScene;
/**
- * 是否代账
+ * 是否代账,废弃,转移到服务公司的服务项目里
*/
private String isProxy;
/**
- * 是否老账新接
+ * 是否老账新接,废弃,转移到服务公司的服务项目里
*/
private String isOld;
diff --git a/pusong-modules/pusong-business/src/main/java/com/pusong/business/domain/PsTaskMain.java b/pusong-modules/pusong-business/src/main/java/com/pusong/business/domain/PsTaskMain.java
index 93d8888..e1f126f 100644
--- a/pusong-modules/pusong-business/src/main/java/com/pusong/business/domain/PsTaskMain.java
+++ b/pusong-modules/pusong-business/src/main/java/com/pusong/business/domain/PsTaskMain.java
@@ -83,4 +83,14 @@ public class PsTaskMain extends TenantEntity {
* 任务完成时间
*/
private Date finishDate;
+
+ /**
+ * 扩展: 类型为开发票时 发票内容
+ */
+ private String extend;
+
+ /**
+ * 服务公司id
+ */
+ private Long serviceCompanyId;
}
diff --git a/pusong-modules/pusong-business/src/main/java/com/pusong/business/domain/bo/AppointBo.java b/pusong-modules/pusong-business/src/main/java/com/pusong/business/domain/bo/AppointBo.java
index 01b1e4d..4f4aecc 100644
--- a/pusong-modules/pusong-business/src/main/java/com/pusong/business/domain/bo/AppointBo.java
+++ b/pusong-modules/pusong-business/src/main/java/com/pusong/business/domain/bo/AppointBo.java
@@ -9,6 +9,8 @@ import lombok.Data;
import lombok.EqualsAndHashCode;
import lombok.NoArgsConstructor;
+import java.util.List;
+
@Data
@EqualsAndHashCode
public class AppointBo {
@@ -21,7 +23,7 @@ public class AppointBo {
* 执行者用户id
*/
@NotNull
- private Long userId;
+ private List userIds;
/**
* 任务委派类型(1内勤,2外勤,3特勤)
diff --git a/pusong-modules/pusong-business/src/main/java/com/pusong/business/domain/bo/PsCompanyInfoBo.java b/pusong-modules/pusong-business/src/main/java/com/pusong/business/domain/bo/PsCompanyInfoBo.java
index eeb9b7c..f4f49a6 100644
--- a/pusong-modules/pusong-business/src/main/java/com/pusong/business/domain/bo/PsCompanyInfoBo.java
+++ b/pusong-modules/pusong-business/src/main/java/com/pusong/business/domain/bo/PsCompanyInfoBo.java
@@ -14,6 +14,7 @@ import jakarta.validation.constraints.*;
import java.math.BigDecimal;
import java.util.Date;
import java.util.List;
+import java.util.Objects;
/**
* 公司信息业务对象 ps_company_info
@@ -144,10 +145,37 @@ public class PsCompanyInfoBo {
* 公司类型1签约公司 2服务公司
*/
private String companyType;
+
+
+
+
/**
* 合同服务类别
*/
@NotEmpty(message = "合同服务类别不能为空")
private List businessList;
+ @JsonFormat(pattern = "yyyy-MM-dd")
+ private Date startServiceDate;
+
+ @JsonFormat(pattern = "yyyy-MM-dd")
+ private Date endServiceDate;
+
+ /**
+ * 是否代账
+ */
+ private String isProxy;
+ /**
+ * 是否老账新接
+ */
+ private String isOld;
+
+ /**
+ * 服务总金额
+ */
+ BigDecimal businessAmount;
+ public BigDecimal getContractAmount(){
+ this.businessAmount = businessList == null ? new BigDecimal(0) : businessList.stream().map(PsContractBusinessBo::getBusinessAmount).filter(Objects::nonNull).reduce(BigDecimal.ZERO, BigDecimal::add);
+ return this.businessAmount;
+ }
}
diff --git a/pusong-modules/pusong-business/src/main/java/com/pusong/business/domain/bo/PsContractBusinessBo.java b/pusong-modules/pusong-business/src/main/java/com/pusong/business/domain/bo/PsContractBusinessBo.java
index c22a5bd..769f47c 100644
--- a/pusong-modules/pusong-business/src/main/java/com/pusong/business/domain/bo/PsContractBusinessBo.java
+++ b/pusong-modules/pusong-business/src/main/java/com/pusong/business/domain/bo/PsContractBusinessBo.java
@@ -73,4 +73,14 @@ public class PsContractBusinessBo {
* 合同服务项目
*/
private List detailBos;
+
+ /**
+ * 是否代账
+ */
+ private String isProxy;
+ /**
+ * 是否老账新接
+ */
+ private String isOld;
+
}
diff --git a/pusong-modules/pusong-business/src/main/java/com/pusong/business/domain/bo/PsContractInfoBo.java b/pusong-modules/pusong-business/src/main/java/com/pusong/business/domain/bo/PsContractInfoBo.java
index 3f4a6ed..061213d 100644
--- a/pusong-modules/pusong-business/src/main/java/com/pusong/business/domain/bo/PsContractInfoBo.java
+++ b/pusong-modules/pusong-business/src/main/java/com/pusong/business/domain/bo/PsContractInfoBo.java
@@ -6,6 +6,7 @@ import com.pusong.common.core.validate.EditGroup;
import com.pusong.common.core.validate.QueryGroup;
import com.pusong.common.mybatis.core.domain.BaseEntity;
import io.github.linpeilie.annotations.AutoMapper;
+import io.github.linpeilie.annotations.AutoMapping;
import lombok.Data;
import lombok.EqualsAndHashCode;
import jakarta.validation.constraints.*;
@@ -103,10 +104,29 @@ public class PsContractInfoBo {
*/
private String isDue;
+
+ /**
+ * 签约个人时联系人姓名
+ */
+ @AutoMapping(target = "contactPersonName")
+ private String contactPersonName;
+
+ /**
+ * 签约个人时联系人手机号
+ */
+ @AutoMapping(target = "contactPersonPhone")
+ private String contactPersonPhone;
+
+ /**
+ * 签约个人时联系人身份证号
+ */
+ @AutoMapping(target = "contactPersonIdcard")
+ private String contactPersonIdcard;
+
/**
* 签约公司信息
*/
- @NotEmpty(message = "公司信息不能为空")
+// @NotEmpty(message = "公司信息不能为空")
private PsCompanyInfoBo companyInfoBo;
/**
@@ -131,4 +151,23 @@ public class PsContractInfoBo {
* 合同状态
*/
private String contractStatusCode;
+
+ /**
+ * 签约主体 1 企业 2个人
+ */
+ private int firstPartyType;
+
+ public enum FIRSTPARTYTYPE{
+ COMPANY(1),
+ INDIVIDUALS(2);
+
+ int type;
+ FIRSTPARTYTYPE(int type){
+ this.type = type;
+ }
+ public int getType(){
+ return this.type;
+ }
+
+ }
}
diff --git a/pusong-modules/pusong-business/src/main/java/com/pusong/business/domain/bo/PsContractInfoQueryBo.java b/pusong-modules/pusong-business/src/main/java/com/pusong/business/domain/bo/PsContractInfoQueryBo.java
index 7a5a9e8..effe852 100644
--- a/pusong-modules/pusong-business/src/main/java/com/pusong/business/domain/bo/PsContractInfoQueryBo.java
+++ b/pusong-modules/pusong-business/src/main/java/com/pusong/business/domain/bo/PsContractInfoQueryBo.java
@@ -42,6 +42,10 @@ public class PsContractInfoQueryBo {
*/
private String customName;
+ /**
+ * 合同id
+ */
+ private Long customId;
/**
* 客户电话
*/
diff --git a/pusong-modules/pusong-business/src/main/java/com/pusong/business/domain/bo/PsInvoiceBo.java b/pusong-modules/pusong-business/src/main/java/com/pusong/business/domain/bo/PsInvoiceBo.java
new file mode 100644
index 0000000..f7bde3b
--- /dev/null
+++ b/pusong-modules/pusong-business/src/main/java/com/pusong/business/domain/bo/PsInvoiceBo.java
@@ -0,0 +1,54 @@
+package com.pusong.business.domain.bo;
+
+import com.alibaba.excel.annotation.ExcelIgnoreUnannotated;
+import com.pusong.common.core.validate.AddGroup;
+import jakarta.validation.constraints.NotBlank;
+import lombok.Data;
+import lombok.EqualsAndHashCode;
+
+import java.io.Serial;
+import java.io.Serializable;
+
+
+/**
+ * task表的extend存储的发票字段
+ */
+@Data
+@EqualsAndHashCode
+public class PsInvoiceBo {
+
+ /**
+ * 购方名称
+ */
+ @NotBlank(message = "购方名称不能为空",groups = {AddGroup.class})
+ private String name;
+ /**
+ * 税号
+ */
+ private String taxNum;
+ /**
+ * 金额
+ */
+ @NotBlank(message = "金额不能为空",groups = {AddGroup.class})
+ private String amount;
+ /**
+ * 发票电话
+ */
+ private String invoicePhone;
+
+ /**
+ * 其他
+ */
+ private String other;
+ /**
+ * 抬头
+ */
+ @NotBlank(message = "抬头不能为空",groups = {AddGroup.class})
+ private String invoiceTitle;
+ /**
+ * 合同编码
+ */
+ @NotBlank(message = "合同编码不能为空",groups = {AddGroup.class})
+ private String contractCode;
+}
+
diff --git a/pusong-modules/pusong-business/src/main/java/com/pusong/business/domain/vo/PsCompanyInfoVo.java b/pusong-modules/pusong-business/src/main/java/com/pusong/business/domain/vo/PsCompanyInfoVo.java
index 029fe30..243a182 100644
--- a/pusong-modules/pusong-business/src/main/java/com/pusong/business/domain/vo/PsCompanyInfoVo.java
+++ b/pusong-modules/pusong-business/src/main/java/com/pusong/business/domain/vo/PsCompanyInfoVo.java
@@ -152,4 +152,19 @@ public class PsCompanyInfoVo implements Serializable {
* 服务类别信息
*/
private List businessVoList;
+
+
+ @JsonFormat(pattern = "yyyy-MM-dd")
+ private Date startServiceDate;
+
+ @JsonFormat(pattern = "yyyy-MM-dd")
+ private Date endServiceDate;
+ /**
+ * 是否代账
+ */
+ private String isProxy;
+ /**
+ * 是否老账新接
+ */
+ private String isOld;
}
diff --git a/pusong-modules/pusong-business/src/main/java/com/pusong/business/domain/vo/PsContractBusinessVo.java b/pusong-modules/pusong-business/src/main/java/com/pusong/business/domain/vo/PsContractBusinessVo.java
index d83db45..d8697e5 100644
--- a/pusong-modules/pusong-business/src/main/java/com/pusong/business/domain/vo/PsContractBusinessVo.java
+++ b/pusong-modules/pusong-business/src/main/java/com/pusong/business/domain/vo/PsContractBusinessVo.java
@@ -75,4 +75,13 @@ public class PsContractBusinessVo implements Serializable {
*/
private List detailVoList;
+ /**
+ * 是否代账
+ */
+ private String isProxy;
+ /**
+ * 是否老账新接
+ */
+ private String isOld;
+
}
diff --git a/pusong-modules/pusong-business/src/main/java/com/pusong/business/domain/vo/PsContractInfoVo.java b/pusong-modules/pusong-business/src/main/java/com/pusong/business/domain/vo/PsContractInfoVo.java
index bba69e8..f74e668 100644
--- a/pusong-modules/pusong-business/src/main/java/com/pusong/business/domain/vo/PsContractInfoVo.java
+++ b/pusong-modules/pusong-business/src/main/java/com/pusong/business/domain/vo/PsContractInfoVo.java
@@ -189,6 +189,22 @@ public class PsContractInfoVo implements Serializable {
* 是否续费
*/
private String isDue;
+
+ /**
+ * 签约个人时联系人姓名
+ */
+ private String contactPersonName;
+
+ /**
+ * 签约个人时联系人手机号
+ */
+ private String contactPersonPhone;
+
+ /**
+ * 签约个人时联系人身份证号
+ */
+ private String contactPersonIdcard;
+
/**
* 签约公司信息(不会有服务类别)
*/
@@ -243,4 +259,23 @@ public class PsContractInfoVo implements Serializable {
*/
@JsonFormat(pattern = "yyyy-MM-dd HH:mm")
private Date finishDate;
+
+ @JsonFormat(pattern = "yyyy-MM-dd HH:mm")
+ private Long createBy;
+
+
+ /**
+ * 服务项目里是否为 托管服务
+ * @return
+ */
+ public boolean isTuoguanService(){
+ for (PsCompanyInfoVo psCompanyInfoVo : this.getPsCompanySerivceVo()) {
+ for (PsContractBusinessVo psContractBusinessVo : psCompanyInfoVo.getBusinessVoList()) {
+ if (psContractBusinessVo.getBusinessType().equals("2")){//2托管服务,没找到枚举,暂时写死2
+ return true;
+ }
+ }
+ }
+ return false;
+ }
}
diff --git a/pusong-modules/pusong-business/src/main/java/com/pusong/business/domain/vo/PsInvoiceVo.java b/pusong-modules/pusong-business/src/main/java/com/pusong/business/domain/vo/PsInvoiceVo.java
new file mode 100644
index 0000000..060ed0c
--- /dev/null
+++ b/pusong-modules/pusong-business/src/main/java/com/pusong/business/domain/vo/PsInvoiceVo.java
@@ -0,0 +1,57 @@
+package com.pusong.business.domain.vo;
+
+import com.alibaba.excel.annotation.ExcelIgnoreUnannotated;
+import com.fasterxml.jackson.annotation.JsonFormat;
+import com.pusong.business.domain.PsTaskMain;
+import com.pusong.common.translation.annotation.Translation;
+import com.pusong.common.translation.constant.TransConstant;
+import io.github.linpeilie.annotations.AutoMapper;
+import lombok.Data;
+
+import java.io.Serial;
+import java.io.Serializable;
+import java.util.Date;
+import java.util.List;
+
+
+/**
+ * task表的extend存储的发票字段
+ */
+@Data
+@ExcelIgnoreUnannotated
+public class PsInvoiceVo implements Serializable {
+
+ @Serial
+ private static final long serialVersionUID = 1L;
+
+ /**
+ * 购方名称
+ */
+ private String name;
+ /**
+ * 税号
+ */
+ private String taxNum;
+ /**
+ * 金额
+ */
+ private String amount;
+ /**
+ * 发票电话
+ */
+ private String invoicePhone;
+
+ /**
+ * 其他
+ */
+ private String other;
+ /**
+ * 抬头
+ */
+ private String invoiceTitle;
+ /**
+ * 合同编码
+ */
+ private String contractCode;
+}
+
diff --git a/pusong-modules/pusong-business/src/main/java/com/pusong/business/domain/vo/PsTaskMainVo.java b/pusong-modules/pusong-business/src/main/java/com/pusong/business/domain/vo/PsTaskMainVo.java
index 7153737..89ebbdf 100644
--- a/pusong-modules/pusong-business/src/main/java/com/pusong/business/domain/vo/PsTaskMainVo.java
+++ b/pusong-modules/pusong-business/src/main/java/com/pusong/business/domain/vo/PsTaskMainVo.java
@@ -138,5 +138,15 @@ public class PsTaskMainVo implements Serializable {
* 任务备注
*/
private String taskContentDesc;
+
+ /**
+ * 扩展: 类型未开发票时 发票内容
+ */
+ private String extend;
+
+ /**
+ * 发票信息
+ */
+ private PsInvoiceVo psInvoiceVo;
}
diff --git a/pusong-modules/pusong-business/src/main/java/com/pusong/business/domain/vo/TaskContractVo.java b/pusong-modules/pusong-business/src/main/java/com/pusong/business/domain/vo/TaskContractVo.java
index f85f710..876a5ec 100644
--- a/pusong-modules/pusong-business/src/main/java/com/pusong/business/domain/vo/TaskContractVo.java
+++ b/pusong-modules/pusong-business/src/main/java/com/pusong/business/domain/vo/TaskContractVo.java
@@ -169,4 +169,9 @@ public class TaskContractVo implements Serializable {
* 是否续费
*/
private String isDue;
+
+ /**
+ * 签约个人时联系人姓名
+ */
+ private String contactPersonName;
}
diff --git a/pusong-modules/pusong-business/src/main/java/com/pusong/business/mapper/PsContractBusinessDetailMapper.java b/pusong-modules/pusong-business/src/main/java/com/pusong/business/mapper/PsContractBusinessDetailMapper.java
index fa1abf1..4f82008 100644
--- a/pusong-modules/pusong-business/src/main/java/com/pusong/business/mapper/PsContractBusinessDetailMapper.java
+++ b/pusong-modules/pusong-business/src/main/java/com/pusong/business/mapper/PsContractBusinessDetailMapper.java
@@ -3,6 +3,9 @@ package com.pusong.business.mapper;
import com.pusong.business.domain.PsContractBusinessDetail;
import com.pusong.business.domain.vo.PsContractBusinessDetailVo;
import com.pusong.common.mybatis.core.mapper.BaseMapperPlus;
+import org.apache.ibatis.annotations.Param;
+
+import java.util.List;
/**
* 合同服务明细Mapper接口
@@ -11,5 +14,5 @@ import com.pusong.common.mybatis.core.mapper.BaseMapperPlus;
* @date 2024-07-29
*/
public interface PsContractBusinessDetailMapper extends BaseMapperPlus {
-
+ List selectByBusId(@Param("busId") Long busId);
}
diff --git a/pusong-modules/pusong-business/src/main/java/com/pusong/business/mapper/PsContractInfoMapper.java b/pusong-modules/pusong-business/src/main/java/com/pusong/business/mapper/PsContractInfoMapper.java
index 15f0f7d..323d03e 100644
--- a/pusong-modules/pusong-business/src/main/java/com/pusong/business/mapper/PsContractInfoMapper.java
+++ b/pusong-modules/pusong-business/src/main/java/com/pusong/business/mapper/PsContractInfoMapper.java
@@ -35,6 +35,12 @@ public interface PsContractInfoMapper extends BaseMapperPlus selectPageContractList(@Param("page") Page page, @Param(Constants.WRAPPER) Wrapper queryWrapper);
+ @DataPermission({
+ @DataColumn(key = "deptName", value = "info.create_dept"),
+ @DataColumn(key = "userName", value = "info.create_by")
+ })
+ Page selectPageContractListByCustomId(@Param("page") Page page, @Param("customId") Long customId);
+
@DataPermission({
@DataColumn(key = "deptName", value = "info.create_dept"),
@DataColumn(key = "userName", value = "info.create_by")
diff --git a/pusong-modules/pusong-business/src/main/java/com/pusong/business/service/IPsContractInfoService.java b/pusong-modules/pusong-business/src/main/java/com/pusong/business/service/IPsContractInfoService.java
index 7c468f4..f6b6186 100644
--- a/pusong-modules/pusong-business/src/main/java/com/pusong/business/service/IPsContractInfoService.java
+++ b/pusong-modules/pusong-business/src/main/java/com/pusong/business/service/IPsContractInfoService.java
@@ -2,6 +2,7 @@ package com.pusong.business.service;
import com.pusong.business.domain.PsContractInfo;
import com.pusong.business.domain.bo.PsContractInfoQueryBo;
+import com.pusong.business.domain.bo.PsInvoiceBo;
import com.pusong.business.domain.vo.PsContractInfoVo;
import com.pusong.business.domain.bo.PsContractInfoBo;
import com.pusong.business.domain.vo.PsSalaryContractVo;
@@ -55,6 +56,13 @@ public interface IPsContractInfoService {
*/
TableDataInfo queryPageList(PsContractInfoQueryBo bo, PageQuery pageQuery);
+ /**
+ * 根据客户id 查询相关合同
+ * @param pageQuery
+ * @return
+ */
+ TableDataInfo queryPageListByCustomId(Long customId, PageQuery pageQuery);
+
/**
* 根据合同编码查询合同详情信息
*
@@ -104,7 +112,7 @@ public interface IPsContractInfoService {
* @return
*/
void invoice(String contractCode);
-
+ void invoice(PsInvoiceBo invoiceBo);
/**
* 免费工单
* @param contractCode 合同编码
@@ -117,7 +125,7 @@ public interface IPsContractInfoService {
* 合同完成
* @param contractCode 合同编码
*/
- void finish(String contractCode);
+ String finish(String contractCode);
/**
diff --git a/pusong-modules/pusong-business/src/main/java/com/pusong/business/service/IPsContractOperateService.java b/pusong-modules/pusong-business/src/main/java/com/pusong/business/service/IPsContractOperateService.java
index c612db4..de45428 100644
--- a/pusong-modules/pusong-business/src/main/java/com/pusong/business/service/IPsContractOperateService.java
+++ b/pusong-modules/pusong-business/src/main/java/com/pusong/business/service/IPsContractOperateService.java
@@ -32,7 +32,7 @@ public interface IPsContractOperateService {
* @param file 回传合同文件
* @param contractCode 合同编码
*/
- void rollbackContract( MultipartFile file, String contractCode);
+ String rollbackContract( MultipartFile file, String contractCode);
/**
* 确认单
diff --git a/pusong-modules/pusong-business/src/main/java/com/pusong/business/service/IPsTaskService.java b/pusong-modules/pusong-business/src/main/java/com/pusong/business/service/IPsTaskService.java
index b6172d1..09ab3fc 100644
--- a/pusong-modules/pusong-business/src/main/java/com/pusong/business/service/IPsTaskService.java
+++ b/pusong-modules/pusong-business/src/main/java/com/pusong/business/service/IPsTaskService.java
@@ -13,6 +13,7 @@ import com.pusong.common.mybatis.core.page.PageQuery;
import org.jetbrains.annotations.NotNull;
import org.springframework.web.multipart.MultipartFile;
+import java.util.Collection;
import java.util.List;
import java.util.Map;
@@ -34,6 +35,8 @@ public interface IPsTaskService {
*/
Boolean insert(PsTaskMain bo);
+ Boolean insertBatch(Collection bos);
+
/**
* 分页查询主任务列表
*
diff --git a/pusong-modules/pusong-business/src/main/java/com/pusong/business/service/approver/impl/ApproverAbstractServiceImpl.java b/pusong-modules/pusong-business/src/main/java/com/pusong/business/service/approver/impl/ApproverAbstractServiceImpl.java
index 015f48c..a8a9cf8 100644
--- a/pusong-modules/pusong-business/src/main/java/com/pusong/business/service/approver/impl/ApproverAbstractServiceImpl.java
+++ b/pusong-modules/pusong-business/src/main/java/com/pusong/business/service/approver/impl/ApproverAbstractServiceImpl.java
@@ -51,7 +51,7 @@ public abstract class ApproverAbstractServiceImpl implements ApproverService {
* @param desc
* @param updateData
*/
- public void apply(String bussinessId,String contractCode, String desc, String updateData){
+ public void apply(String bussinessId, String contractCode, String desc, String updateData){
//退款,回款审批时用 合同编号进行查询校验
LambdaQueryWrapper wq = Wrappers.lambdaQuery().eq(PsApproverRecord::getDelFlag, "0")
.eq(PsApproverRecord::getBusinessType, approverType())
diff --git a/pusong-modules/pusong-business/src/main/java/com/pusong/business/service/approver/impl/PayContractApproverServiceImpl.java b/pusong-modules/pusong-business/src/main/java/com/pusong/business/service/approver/impl/PayContractApproverServiceImpl.java
index 522ab5a..9ef0284 100644
--- a/pusong-modules/pusong-business/src/main/java/com/pusong/business/service/approver/impl/PayContractApproverServiceImpl.java
+++ b/pusong-modules/pusong-business/src/main/java/com/pusong/business/service/approver/impl/PayContractApproverServiceImpl.java
@@ -7,6 +7,7 @@ import com.pusong.business.domain.PsContractInfo;
import com.pusong.business.domain.PsContractPay;
import com.pusong.business.domain.PsTaskMain;
import com.pusong.business.domain.bo.PsContractPayBo;
+import com.pusong.business.domain.vo.PsCompanyInfoVo;
import com.pusong.business.domain.vo.PsContractInfoVo;
import com.pusong.business.domain.vo.PsContractPayVo;
import com.pusong.business.enums.*;
@@ -19,6 +20,7 @@ import lombok.RequiredArgsConstructor;
import lombok.extern.slf4j.Slf4j;
import org.springframework.stereotype.Service;
+import java.util.ArrayList;
import java.util.List;
/**
@@ -79,16 +81,22 @@ public class PayContractApproverServiceImpl extends ApproverAbstractServiceImpl
List list = payService.queryListByContractCode(info.getContractCode(), PayBuinessStatusEnum.PAY.getCode(), PayStatusEnum.SUCCESS);
//如果没有过回款记录初始化任务主表,并修改合同状态
log.info("查询回款记录数量{}任务状态{}", list.size(),info.getContractStatus());
+
PsTaskMain task = taskMainService.queryByContractCode(psApproverRecord.getContractCode());
if(task == null || task.getId() == null){
log.info("任务未初始化,初始化任务主表");
- PsTaskMain psTaskMain = new PsTaskMain();
- psTaskMain.setContractCode(psApproverRecord.getContractCode());
- psTaskMain.setTaskType(TaskTypeEnum.CONTRACT.getCode());
- psTaskMain.setTaskStatus(TaskStatusEnum.INIT.getCode());
- psTaskMain.setCompanyId(info.getCompanyId());
- psTaskMain.setCustomId(info.getCustomId());
- taskMainService.insert(psTaskMain);
+ List psTaskMainList = new ArrayList<>();
+ for (PsCompanyInfoVo psCompanyInfoVo : info.getPsCompanySerivceVo()) {
+ PsTaskMain psTaskMain = new PsTaskMain();
+ psTaskMain.setContractCode(psApproverRecord.getContractCode());
+ psTaskMain.setTaskType(TaskTypeEnum.CONTRACT.getCode());
+ psTaskMain.setTaskStatus(TaskStatusEnum.INIT.getCode());
+ psTaskMain.setCompanyId(info.getCompanyId());
+ psTaskMain.setCustomId(info.getCustomId());
+ psTaskMain.setServiceCompanyId(psCompanyInfoVo.getId());
+ psTaskMainList.add(psTaskMain);
+ }
+ taskMainService.insertBatch(psTaskMainList);
}
diff --git a/pusong-modules/pusong-business/src/main/java/com/pusong/business/service/approver/impl/SignApproverServiceImpl.java b/pusong-modules/pusong-business/src/main/java/com/pusong/business/service/approver/impl/SignApproverServiceImpl.java
index a3b0f1d..bbf9613 100644
--- a/pusong-modules/pusong-business/src/main/java/com/pusong/business/service/approver/impl/SignApproverServiceImpl.java
+++ b/pusong-modules/pusong-business/src/main/java/com/pusong/business/service/approver/impl/SignApproverServiceImpl.java
@@ -9,6 +9,8 @@ import com.pusong.business.domain.PsApproverRecord;
import com.pusong.business.domain.PsContractInfo;
import com.pusong.business.domain.bo.*;
import com.pusong.business.domain.vo.PsApproverRecordVo;
+import com.pusong.business.domain.vo.PsCompanyInfoVo;
+import com.pusong.business.domain.vo.PsContractBusinessVo;
import com.pusong.business.domain.vo.PsContractInfoVo;
import com.pusong.business.enums.ApproverTypeEnum;
import com.pusong.business.enums.CommonStatusEnum;
@@ -50,31 +52,44 @@ public class SignApproverServiceImpl extends ApproverAbstractServiceImpl {
//1查询源数据
PsContractInfoVo vo = contractInfoService.queryContractByCode(psApproverRecord.getContractCode());
//合同信息bo
- PsContractInfoBo bo =new PsContractInfoBo();
+ PsContractInfoBo bo = new PsContractInfoBo();
//合同信息
PsContractInfo info = new PsContractInfo();
- BeanUtils.copyProperties(vo,info);
+ BeanUtils.copyProperties(vo, info);
PsCompanyInfoBo companyInfo = new PsCompanyInfoBo();
BeanUtils.copyProperties(vo.getPsCompanyInfoVo(), companyInfo);
bo.setCompanyInfoBo(companyInfo);
- List businessBos = new ArrayList<>();
- vo.getBusinessVoList().forEach(item->{
- List detailBos = new ArrayList<>();
- item.getDetailVoList().forEach(it->{
- PsContractBusinessDetailBo detailBo = new PsContractBusinessDetailBo();
- BeanUtils.copyProperties(it,detailBo);
- detailBos.add(detailBo);
- });
- PsContractBusinessBo businessBo = new PsContractBusinessBo();
- BeanUtils.copyProperties(item,businessBo);
- businessBo.setDetailBos(detailBos);
- businessBos.add(businessBo);
- });
- bo.setBusinessList(businessBos);
+ List serviceCompanyInfoList = new ArrayList<>();
+ bo.setServiceCompanyInfoList(serviceCompanyInfoList);
+
+ for (PsCompanyInfoVo psCompanyInfoVo : vo.getPsCompanySerivceVo()) {
+ List businessBos = new ArrayList<>();
+ for (PsContractBusinessVo item : psCompanyInfoVo.getBusinessVoList()) {
+ List detailBos = new ArrayList<>();
+ item.getDetailVoList().forEach(it->{
+ PsContractBusinessDetailBo detailBo = new PsContractBusinessDetailBo();
+ BeanUtils.copyProperties(it, detailBo);
+ detailBos.add(detailBo);
+ });
+ PsContractBusinessBo businessBo = new PsContractBusinessBo();
+ BeanUtils.copyProperties(item, businessBo);
+ businessBo.setDetailBos(detailBos);
+ businessBos.add(businessBo);
+ if ("1".equals(item.getIsProxy())){
+ companyInfo.setIsProxy("1");
+ }
+ }
+
+ PsCompanyInfoBo psCompanyInfoBo = new PsCompanyInfoBo();
+ BeanUtils.copyProperties(psCompanyInfoVo, psCompanyInfoBo);
+ psCompanyInfoBo.setBusinessList(businessBos);
+ serviceCompanyInfoList.add(psCompanyInfoBo);
+ }
+
info.setSignStatus(CommonStatusEnum.SUCCESS.getCode());
contractInfoService.updateByCode(info);
//生成合同
- contractInfoService.makePdf(info,bo,true);
+ contractInfoService.makePdf(info, bo,true);
}
//修改签章状态
diff --git a/pusong-modules/pusong-business/src/main/java/com/pusong/business/service/impl/IPsContractOperateServiceImpl.java b/pusong-modules/pusong-business/src/main/java/com/pusong/business/service/impl/IPsContractOperateServiceImpl.java
index f339064..e38956e 100644
--- a/pusong-modules/pusong-business/src/main/java/com/pusong/business/service/impl/IPsContractOperateServiceImpl.java
+++ b/pusong-modules/pusong-business/src/main/java/com/pusong/business/service/impl/IPsContractOperateServiceImpl.java
@@ -3,6 +3,8 @@ package com.pusong.business.service.impl;
import com.pusong.business.domain.PsContractInfo;
import com.pusong.business.domain.PsContractPay;
import com.pusong.business.domain.bo.PsContractPayBo;
+import com.pusong.business.domain.vo.PsCompanyInfoVo;
+import com.pusong.business.domain.vo.PsContractBusinessVo;
import com.pusong.business.domain.vo.PsContractInfoVo;
import com.pusong.business.enums.ApproverTypeEnum;
import com.pusong.business.enums.CommonStatusEnum;
@@ -50,11 +52,11 @@ public class IPsContractOperateServiceImpl implements IPsContractOperateService
* @return 合同基本信息
*/
public void sign(String contractCode){
- PsContractInfoVo info = contractInfoService.queryContractByCode(contractCode);
+// PsContractInfoVo info = contractInfoService.queryContractByCode(contractCode);
//后续添加校验可再次添加
//合同签章:
ApproverService service = container.getService(ApproverTypeEnum.SIGN.getCode());
- service.apply(contractCode,contractCode,null, null);
+ service.apply(contractCode, contractCode,null, null);
PsContractInfo psContractInfo = new PsContractInfo();
psContractInfo.setContractCode(contractCode);
@@ -69,8 +71,13 @@ public class IPsContractOperateServiceImpl implements IPsContractOperateService
* @param contractCode 合同编码
*/
@Transactional
- public void rollbackContract( MultipartFile file, String contractCode){
+ public String rollbackContract( MultipartFile file, String contractCode){
PsContractInfoVo info = contractInfoService.queryContractByCode(contractCode);
+
+ String checkStr = checkRollbackContract(info);
+ if (checkStr != null)
+ return checkStr;
+
//后续添加校验可再次添加
SysOssVo vo = ossService.upload(file);
//发起回传合同审批
@@ -90,10 +97,16 @@ public class IPsContractOperateServiceImpl implements IPsContractOperateService
}
}
-
+ return null;
}
+ private static String checkRollbackContract(PsContractInfoVo info) {
+ if (!info.getSignStatus().equals(CommonStatusEnum.SUCCESS.getCode())){//没盖电子章
+ return "未盖电子章,无法回传合同";
+ }
+ return null;
+ }
/**
diff --git a/pusong-modules/pusong-business/src/main/java/com/pusong/business/service/impl/PsCompanyInfoServiceImpl.java b/pusong-modules/pusong-business/src/main/java/com/pusong/business/service/impl/PsCompanyInfoServiceImpl.java
index 158cf85..6c9281e 100644
--- a/pusong-modules/pusong-business/src/main/java/com/pusong/business/service/impl/PsCompanyInfoServiceImpl.java
+++ b/pusong-modules/pusong-business/src/main/java/com/pusong/business/service/impl/PsCompanyInfoServiceImpl.java
@@ -117,13 +117,13 @@ public class PsCompanyInfoServiceImpl implements IPsCompanyInfoService {
//公司类型默认签约公司
PsCompanyInfo add = MapstructUtils.convert(bo, PsCompanyInfo.class);
//新增时公司类型默认为签约公司
- add.setCompanyType(add.getId() == null && StringUtils.isBlank(add.getCompanyType())?"1":add.getCompanyType());
+ add.setCompanyType(add.getId() == null && StringUtils.isBlank(add.getCompanyType()) ? "1" : add.getCompanyType());
validEntityBeforeSave(add);
boolean flag = baseMapper.insertOrUpdate(add);
if (flag) {
bo.setId(add.getId());
if(bo.getBusinessList() != null){//装填服务类型的公司id
- bo.getBusinessList().forEach(b->b.setCompanyId(add.getId()));
+ bo.getBusinessList().forEach(b -> b.setCompanyId(add.getId()));
}
}
return flag;
@@ -191,8 +191,14 @@ public class PsCompanyInfoServiceImpl implements IPsCompanyInfoService {
*/
public List getServiceCompany(String controctCode){
QueryWrapper wq = Wrappers.query().eq("pcc.del_flag", "0").eq("bus.del_flag","0")
- .eq("det.del_flag","0").eq("pcc.controct_code", controctCode);
+ .eq("det.del_flag","0").eq("pcc.contract_code", controctCode);
List list = baseMapper.selectServiceCompanyList(wq);
+ for (PsCompanyInfoVo psCompanyInfoVo : list) {
+ psCompanyInfoVo.setStartServiceDate(psCompanyInfoVo.getBusinessVoList().get(0).getStartDate());
+ psCompanyInfoVo.setEndServiceDate(psCompanyInfoVo.getBusinessVoList().get(0).getEndDate());
+ psCompanyInfoVo.setIsOld(psCompanyInfoVo.getBusinessVoList().get(0).getIsOld());
+ psCompanyInfoVo.setIsProxy(psCompanyInfoVo.getBusinessVoList().get(0).getIsProxy());
+ }
return list;
}
}
diff --git a/pusong-modules/pusong-business/src/main/java/com/pusong/business/service/impl/PsContractBusinessServiceImpl.java b/pusong-modules/pusong-business/src/main/java/com/pusong/business/service/impl/PsContractBusinessServiceImpl.java
index a02aa49..98065ac 100644
--- a/pusong-modules/pusong-business/src/main/java/com/pusong/business/service/impl/PsContractBusinessServiceImpl.java
+++ b/pusong-modules/pusong-business/src/main/java/com/pusong/business/service/impl/PsContractBusinessServiceImpl.java
@@ -43,7 +43,7 @@ public class PsContractBusinessServiceImpl implements IPsContractBusinessService
* @return 是否新增成功
*/
@Override
- public void saveList(List boList,String contractCode) {
+ public void saveList(List boList, String contractCode) {
//1.删除所有服务类型和服务项目
baseMapper.delete(Wrappers.lambdaQuery()
.eq(PsContractBusiness::getContractCode,contractCode));
diff --git a/pusong-modules/pusong-business/src/main/java/com/pusong/business/service/impl/PsContractInfoServiceImpl.java b/pusong-modules/pusong-business/src/main/java/com/pusong/business/service/impl/PsContractInfoServiceImpl.java
index b75de5b..840f107 100644
--- a/pusong-modules/pusong-business/src/main/java/com/pusong/business/service/impl/PsContractInfoServiceImpl.java
+++ b/pusong-modules/pusong-business/src/main/java/com/pusong/business/service/impl/PsContractInfoServiceImpl.java
@@ -1,6 +1,7 @@
package com.pusong.business.service.impl;
import com.alibaba.fastjson.JSON;
+import com.alibaba.fastjson.JSONObject;
import com.baomidou.mybatisplus.core.conditions.Wrapper;
import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
import com.baomidou.mybatisplus.core.toolkit.CollectionUtils;
@@ -93,18 +94,29 @@ public class PsContractInfoServiceImpl implements IPsContractInfoService {
*/
@Override
@Transactional//开启事务
- public Long createContract(PsContractInfoBo bo,Integer type) {
+ public Long createContract(PsContractInfoBo bo, Integer type) {
//1校验
- PsContractInfo add = validEntity(bo,UserConstants.YES);
- if(bo.getCompanyInfoBo().getCustomId() == null){
- bo.getCompanyInfoBo().setCustomId(bo.getCustomId());
- }
+ PsContractInfo add = validEntity(bo, UserConstants.YES);
+
//2.插入签约公司信息
- companyInfoService.saveBo(bo.getCompanyInfoBo());
+ if (bo.getFirstPartyType() == PsContractInfoBo.FIRSTPARTYTYPE.COMPANY.getType()){
+ if(bo.getCompanyInfoBo().getCustomId() == null){
+ bo.getCompanyInfoBo().setCustomId(bo.getCustomId());
+ }
+ companyInfoService.saveBo(bo.getCompanyInfoBo());
+ }
+
//插入服务公司
for (PsCompanyInfoBo companyInfoBo : bo.getServiceCompanyInfoList()){
companyInfoBo.setCompanyType("2");
companyInfoService.saveBo(companyInfoBo);
+
+ for (PsContractBusinessBo psContractBusinessBo : companyInfoBo.getBusinessList()) {
+ psContractBusinessBo.setStartDate(companyInfoBo.getStartServiceDate());
+ psContractBusinessBo.setEndDate(companyInfoBo.getEndServiceDate());
+ psContractBusinessBo.setIsOld(companyInfoBo.getIsOld());
+ psContractBusinessBo.setIsProxy(companyInfoBo.getIsProxy());
+ }
}
//3.如果已存在合同,则进行修改,否则新增
@@ -113,13 +125,19 @@ public class PsContractInfoServiceImpl implements IPsContractInfoService {
MapstructUtils.convert(bo, add);
add.setContractCode(getContractCode());//合同编码
// 合同名称:公司名+合同编码
- add.setContractName(bo.getCompanyInfoBo().getCompanyName()+add.getContractCode());
+ if (bo.getFirstPartyType() == PsContractInfoBo.FIRSTPARTYTYPE.COMPANY.getType()){
+ add.setContractName(bo.getCompanyInfoBo().getCompanyName() + add.getContractCode());
+ }else{
+ add.setContractName(bo.getContactPersonName() + add.getContractCode());
+ }
+
add.setCustomManager(LoginHelper.getUserId());//所属销售经理id
}else{
MapstructUtils.convert(bo, add);
}
- add.setCompanyId(bo.getCompanyInfoBo().getId());//公司id
-
+ if (bo.getFirstPartyType() == PsContractInfoBo.FIRSTPARTYTYPE.COMPANY.getType()) {
+ add.setCompanyId(bo.getCompanyInfoBo().getId());//公司id
+ }
List list = bo.getServiceCompanyInfoList().stream().flatMap(com -> com.getBusinessList().stream()).toList();
list.forEach(item->{
BigDecimal mony = BigDecimal.ZERO;
@@ -135,13 +153,13 @@ public class PsContractInfoServiceImpl implements IPsContractInfoService {
companyInfoService.saveContractCompany(bo.getServiceCompanyInfoList(),add.getContractCode());
BigDecimal sum = list.stream().map(PsContractBusinessBo::getBusinessAmount).filter(Objects::nonNull).reduce(BigDecimal.ZERO, BigDecimal::add);
add.setContractAmount(sum);//合同总金额
- add.setContractStatus(type == 1?ContractStatusEnum.INIT.getCode():ContractStatusEnum.CREATE.getCode());//合同状态
+ add.setContractStatus(type == 1 ? ContractStatusEnum.INIT.getCode():ContractStatusEnum.CREATE.getCode());//合同状态
add.setIsCancel(CommonStatusEnum.INIT.getCode());
baseMapper.insertOrUpdate(add);
//4.删除所有服务类型和服务项目,.插入服务类型
- businessService.saveList(list,add.getContractCode());
+ businessService.saveList(list, add.getContractCode());
//7.生成合同
- return makePdf(add,bo,true);
+ return makePdf(add, bo,true);
}
/**
* 预览合同
@@ -246,6 +264,16 @@ public class PsContractInfoServiceImpl implements IPsContractInfoService {
return TableDataInfo.build(result);
}
+ public TableDataInfo queryPageListByCustomId(Long customId, PageQuery pageQuery){
+ Page result = baseMapper.selectPageContractListByCustomId(pageQuery.build(), customId);
+ if(CollectionUtils.isEmpty(result.getRecords())){
+ return TableDataInfo.build(result);
+ }
+ //装填信息
+ result.getRecords().forEach(this::fillContractInfo);
+ return TableDataInfo.build(result);
+ }
+
/**
* 根据合同编码查询合同详情信息
*
@@ -314,12 +342,12 @@ public class PsContractInfoServiceImpl implements IPsContractInfoService {
}else{
//修改合同
PsContractInfo add = new PsContractInfo();
- MapstructUtils.convert(bo,add);
+ MapstructUtils.convert(bo, add);
add.setCompanyId(bo.getCompanyInfoBo().getId());//公司id
this.updateByCode(add);
//4.删除所有服务类型和服务项目,.插入服务类型
businessService.saveList(list,add.getContractCode());
- makePdf(add,bo,true);
+ makePdf(add, bo,true);
}
return true;
}
@@ -402,37 +430,48 @@ public class PsContractInfoServiceImpl implements IPsContractInfoService {
* @param add
* @param bo
*/
- public Long makePdf(PsContractInfo add ,PsContractInfoBo bo,boolean isSave){
+ public Long makePdf(PsContractInfo add, PsContractInfoBo bo, boolean isSave){
//todo 合同pdf
Long ossId = null;
SysDictData main = dictDataService.selectDict("contract_main", add.getContractMain());
- bo.getBusinessList().forEach(item->{
- item.setBusinessTypeName(dictDataService.selectDictLabel("contract_type",item.getBusinessType()));
+ List detailBos = new ArrayList<>();
+ for (PsCompanyInfoBo psCompanyInfoBo : bo.getServiceCompanyInfoList()) {
+ for (PsContractBusinessBo item : psCompanyInfoBo.getBusinessList()) {
+ item.setBusinessTypeName(dictDataService.selectDictLabel("contract_type",item.getBusinessType()));
+ detailBos.add(item);
+ }
+ }
+
+// bo.getBusinessList().forEach(item->{
+// item.setBusinessTypeName(dictDataService.selectDictLabel("contract_type",item.getBusinessType()));
// item.getDetailBos().forEach(it->{it.getExtentInfo().});
- });
+// });
try{
//生成合同pdf
PsCustomInfo customer = customInfoService.listById(add.getCustomId());
Map map = new HashMap<>();
LoginUser user = LoginHelper.getLoginUser();
- map.put("user",user);
- map.put("contract",add);
- map.put("business",bo.getBusinessList());
- map.put("main",JSON.parseObject(main.getRemark()));// 合同主体信息
- map.put("company",bo.getCompanyInfoBo());
+ map.put("user", user);
+ map.put("contract", add);
+ map.put("business", detailBos);
+
+ map.put("serviceCompany", bo.getServiceCompanyInfoList());
+
+ map.put("main", JSON.parseObject(main.getRemark()));// 合同主体信息
+ map.put("company", bo.getCompanyInfoBo());
map.put("customer",customer);
// 合同总金额大写
map.put("contractAmount", NumBerTool.digitUppercase(add.getContractAmount().setScale(2, RoundingMode.HALF_EVEN).toString()));
- String head = "合同编号:PS-"+add.getContractCode()+" 客户编号:"+customer.getId();
+ String head = "合同编号:PS-" + add.getContractCode()+" 客户编号:" + customer.getId();
//合同标题
- map.put(PdfGenerator.HEAD,head);
+ map.put(PdfGenerator.HEAD, head);
//是否签章
- map.put(PdfGenerator.SIGN,StringUtils.equals(CommonStatusEnum.SUCCESS.getCode(),add.getSignStatus()));
+ map.put(PdfGenerator.SIGN, StringUtils.equals(CommonStatusEnum.SUCCESS.getCode(),add.getSignStatus()));
- String path = System.getProperty("user.dir")+"/"+(StringUtils.isBlank(bo.getCompanyInfoBo().getCompanyName())?"":bo.getCompanyInfoBo().getCompanyName()+"-")+add.getContractCode()+".pdf";
+ String path = System.getProperty("user.dir") + "/" + (StringUtils.isBlank(bo.getCompanyInfoBo().getCompanyName()) ? "" : bo.getCompanyInfoBo().getCompanyName() + "-")+add.getContractCode()+".pdf";
log.info(JSON.toJSONString(map));
// path = "D:/王立帅/临时/output.pdf";
- PdfGenerator.makePdf(map, path,TenplateEnum.CONTRACT.getName());
+ PdfGenerator.makePdf(map, path, TenplateEnum.CONTRACT.getName());
File file = new File(path);
//上传到oss服务
SysOssVo sysOssVo = ossService.upload(new File(path));
@@ -447,14 +486,14 @@ public class PsContractInfoServiceImpl implements IPsContractInfoService {
psContractInfo.setPdfId(sysOssVo.getOssId());
this.updateByCode(psContractInfo);
//删除原合同
- if(add.getPdfId() != null)ossService.deleteWithValidByIds(List.of(add.getPdfId()),false);
+ if(add.getPdfId() != null)
+ ossService.deleteWithValidByIds(List.of(add.getPdfId()),false);
Optional a = Optional.ofNullable(add.getPdfId());
}
}catch (Exception e){
log.error("生成pdf失败",e);
}
return ossId;
- return null;
}
/**
@@ -473,6 +512,18 @@ public class PsContractInfoServiceImpl implements IPsContractInfoService {
psTaskMain.setTaskStatus(TaskStatusEnum.INIT.getCode());
taskMainService.insert(psTaskMain);
}
+ public void invoice(PsInvoiceBo invoiceBo){
+ log.info("合同未回款过,初始化任务主表");
+ PsContractInfoVo info = this.queryContractByCode(invoiceBo.getContractCode());
+ PsTaskMain psTaskMain = new PsTaskMain();
+ psTaskMain.setCompanyId(info.getCompanyId());
+ psTaskMain.setCustomId(info.getCustomId());
+ psTaskMain.setContractCode(invoiceBo.getContractCode());
+ psTaskMain.setTaskType(TaskTypeEnum.INVOICE.getCode());
+ psTaskMain.setTaskStatus(TaskStatusEnum.INIT.getCode());
+ psTaskMain.setExtend(JSONObject.toJSONString(invoiceBo));
+ taskMainService.insert(psTaskMain);
+ }
/**
* 免费工单
* @param contractCode 合同编码
@@ -488,12 +539,25 @@ public class PsContractInfoServiceImpl implements IPsContractInfoService {
/**
* 合同完成
+ * 一、回传合同的条件
+ * 1. 生成合同,所选【服务类别】不包含【托管服务】(即【非托管业务】):包括【新签】和【续费】
+ * 1. 合同金额 > = 8000元,必须回传合同,【电子签章】申请成功后才能回传合同
+ * 2. 合同金额< 8000元,无需回传合同,【电子签章】申请成功后,必须回传合同
+ * 2. 生成合同,所选【服务类别】包含【托管服务】:
+ * 1. 新签:不论合同金额大小,必须回传合同
+ * 2. 续费:
+ * 1. 合同金额 > = 8000元,必须回传合同,【电子签章】申请成功后才能回传合同
+ * 2. 合同金额< 8000元,无需回传合同,【电子签章】申请成功后,必须回传合同
+ * 二、合同完成的条件
+ * 1. 回款全部完成
+ * 2. 任务全部完成
+ * 3. 回传合同:根据【回传合同的条件】进行判断,必须回传合同的,需回传合同后审批通过,才能算完成。
* @param contractCode 合同编码
*/
@Transactional
- public void finish(String contractCode){
- if(StringUtils.isBlank(contractCode)){
- return;
+ public String finish(String contractCode) {
+ if (StringUtils.isBlank(contractCode)) {
+ return "contractCode 参数错误";
}
Long num = taskMainMapper.selectCount(Wrappers.lambdaQuery()
.eq(PsTaskMain::getContractCode, contractCode)
@@ -501,14 +565,55 @@ public class PsContractInfoServiceImpl implements IPsContractInfoService {
.notIn(PsTaskMain::getTaskStatus, TaskStatusEnum.returnFinish()));
PsContractInfoVo info = this.queryContractByCode(contractCode);
//任务已完成 合同已回传 回款已结束
- if(StringUtils.equals(info.getRollBackStatus(),CommonStatusEnum.SUCCESS.getCode())
- && num<=0 && info.getResidualMoney().compareTo(BigDecimal.ZERO)<=0){
- PsContractInfo psContractInfo = new PsContractInfo();
- psContractInfo.setContractCode(contractCode);
- psContractInfo.setContractStatus(ContractStatusEnum.SUCCESS.getCode());
- psContractInfo.setFinishDate(new Date());
- this.updateByCode(psContractInfo);
+ boolean rollbackFlag = true;
+
+ if (!StringUtils.equals(info.getRollBackStatus(), CommonStatusEnum.SUCCESS.getCode())) {
+ if (!info.isTuoguanService()) {//非托管服务
+ if (info.getContractAmount().doubleValue() >= 8000) {
+ //1. 合同金额 > = 8000元,必须回传合同,【电子签章】申请成功后才能回传合同
+ rollbackFlag = false;
+ } else {
+ //合同金额< 8000元,无需回传合同,【电子签章】申请成功后,必须回传合同
+ if (CommonStatusEnum.ING.getCode().equals(info.getSignStatus())
+ || info.getSignStatus().equals(CommonStatusEnum.SUCCESS.getCode())) {//申请了电子章
+ rollbackFlag = false;
+ }
+ }
+ }else{//托管服务
+ if (info.getIsDue().equals("0")){//新签
+ //不论合同金额大小,必须回传合同
+ rollbackFlag = false;
+ } else{//续费
+ if (info.getContractAmount().doubleValue() >= 8000) {
+ //1. 合合同金额 > = 8000元,必须回传合同,【电子签章】申请成功后才能回传合同
+ rollbackFlag = false;
+ } else {
+ //合同金额< 8000元,无需回传合同,【电子签章】申请成功后,必须回传合同
+ if (CommonStatusEnum.ING.getCode().equals(info.getSignStatus())
+ || info.getSignStatus().equals(CommonStatusEnum.SUCCESS.getCode())) {//申请了电子章
+ rollbackFlag = false;
+ }
+ }
+ }
+
+ }
}
+ if (!rollbackFlag){
+ return "未回传合同";
+ }
+
+ if(num > 0){
+ return "还有未完任务";
+ }
+ if (info.getResidualMoney().compareTo(BigDecimal.ZERO) <= 0){
+ return "还有未回款";
+ }
+ PsContractInfo psContractInfo = new PsContractInfo();
+ psContractInfo.setContractCode(contractCode);
+ psContractInfo.setContractStatus(ContractStatusEnum.SUCCESS.getCode());
+ psContractInfo.setFinishDate(new Date());
+ this.updateByCode(psContractInfo);
+ return null;
}
@@ -537,7 +642,7 @@ public class PsContractInfoServiceImpl implements IPsContractInfoService {
PsTaskMain task = taskMainService.queryByContractCode(contractCode);
List appointList = new ArrayList<>();
- if(task!=null){
+ if(task != null){
appointList = taskAppointMapper.selectList(Wrappers.lambdaQuery()
.eq(PsTaskAppoint::getContractCode, contractCode)
.ne(PsTaskAppoint::getAppointStatus,AppointStatusEnum.CANCEL.getCode())
@@ -545,7 +650,7 @@ public class PsContractInfoServiceImpl implements IPsContractInfoService {
}
//派单者
- serviceScheduleVo.setAppoint(task == null?null:task.getOperateUser());
+ serviceScheduleVo.setAppoint(task == null ? null : task.getOperateUser());
if(CollectionUtils.isNotEmpty(appointList)){
appointList.forEach(item->{
if(StringUtils.equals("1",item.getAppointType())){
@@ -673,6 +778,11 @@ public class PsContractInfoServiceImpl implements IPsContractInfoService {
int num = DateUtils.differentDaysByMillisecond(new Date(), vo.getEndServiceDate());
vo.setEndNum(Math.max(num, 0));
}
+
+ //装填服务公司信息
+ List list = companyInfoService.getServiceCompany(vo.getContractCode());
+ vo.setPsCompanySerivceVo(list);
+
return vo;
}
public void fillMoney(PsContractInfoVo vo){
@@ -725,23 +835,23 @@ public class PsContractInfoServiceImpl implements IPsContractInfoService {
* isAdd:是否为增加/修改校验
* 校验:暂存的合同不止一个,暂存的合同并且不是传入的合同-》报错(暂存的合同只能有一个)
*/
- private PsContractInfo validEntity( PsContractInfoBo bo,String... isAdd){
+ private PsContractInfo validEntity(PsContractInfoBo bo, String... isAdd){
PsContractInfo add =null;
//插入或修改合同
- log.info("校验合同查询入参:{}",bo.getCustomId());
- List infos = this.queryByCode(bo.getCustomId(),null,ContractStatusEnum.INIT.getCode());
- log.info("校验合同查询结果:{}",infos == null?null: infos.size() );
+ log.info("校验合同查询入参:{}", bo.getCustomId());
+ List infos = this.queryByCode(bo.getCustomId(),null, ContractStatusEnum.INIT.getCode());
+ log.info("校验合同查询结果:{}", infos == null?null: infos.size());
//校验:暂存的合同不止一个,暂存的合同并且不是传入的合同-》报错(暂存的合同只能有一个)
- if (CollectionUtils.isNotEmpty(infos) ) {
- if(infos.size()>1){
- log.error("暂存的合同过多,customerid:"+bo.getCustomId());
+ if (CollectionUtils.isNotEmpty(infos)) {
+ if(infos.size() > 1){
+ log.error("暂存的合同过多,customerid:" + bo.getCustomId());
throw new ServiceException("系统异常,请联系管理员");
}
add = infos.get(0);
//新增时校验是否有暂存的合同
- if(StringUtils.equals(isAdd.length<1?"":isAdd[0], UserConstants.YES) &&
- !StringUtils.equals(add.getContractCode(), bo.getContractCode())){
- log.error("此合已有暂存的合同,customerid:"+bo.getCustomId());
+ if(StringUtils.equals(isAdd.length < 1 ? "" : isAdd[0], UserConstants.YES)
+ && !StringUtils.equals(add.getContractCode(), bo.getContractCode())){
+ log.error("此合已有暂存的合同,customerid:" + bo.getCustomId());
throw new ServiceException("此合同状态已变更,请刷新页面重新操作");
}
}
diff --git a/pusong-modules/pusong-business/src/main/java/com/pusong/business/service/impl/PsTaskServiceImpl.java b/pusong-modules/pusong-business/src/main/java/com/pusong/business/service/impl/PsTaskServiceImpl.java
index e2f4d4d..14e24a1 100644
--- a/pusong-modules/pusong-business/src/main/java/com/pusong/business/service/impl/PsTaskServiceImpl.java
+++ b/pusong-modules/pusong-business/src/main/java/com/pusong/business/service/impl/PsTaskServiceImpl.java
@@ -1,6 +1,7 @@
package com.pusong.business.service.impl;
import cn.hutool.core.lang.Assert;
+import com.alibaba.fastjson.JSONObject;
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
import com.baomidou.mybatisplus.core.toolkit.CollectionUtils;
@@ -37,6 +38,7 @@ import com.pusong.system.domain.vo.SysOssVo;
import com.pusong.system.service.ISysOssService;
import jakarta.annotation.Resource;
import lombok.RequiredArgsConstructor;
+import org.apache.ibatis.executor.BatchResult;
import org.jetbrains.annotations.NotNull;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
@@ -86,6 +88,11 @@ public class PsTaskServiceImpl implements IPsTaskService {
return flag;
}
+ @Override
+ public Boolean insertBatch(Collection bos){
+ List insert = baseMapper.insert(bos);
+ return !insert.isEmpty();
+ }
/**
* 分页查询主任务列表
*
@@ -96,8 +103,13 @@ public class PsTaskServiceImpl implements IPsTaskService {
public TableDataInfo queryPageList(PsTaskQueryBo bo, PageQuery pageQuery){
QueryWrapper lqw = buildQueryWrapper(bo);
Page page;
- if(StringUtils.equals(TaskTypeEnum.INVOICE.getCode(),bo.getType())){//发票任务无需数据权限
+ if(StringUtils.equals(TaskTypeEnum.INVOICE.getCode(), bo.getType())){//发票任务无需数据权限
page = baseMapper.queryInvoiceTaskPageList(pageQuery.build(), lqw);
+ for (PsTaskMainVo vo : page.getRecords()) {
+ PsInvoiceVo psInvoiceVo = JSONObject.parseObject(vo.getExtend(), PsInvoiceVo.class);
+ vo.setPsInvoiceVo(psInvoiceVo);
+ vo.setExtend(null);
+ }
}else{
page = baseMapper.queryTaskPageList(pageQuery.build(), lqw);
}
@@ -306,14 +318,18 @@ public class PsTaskServiceImpl implements IPsTaskService {
.eq(PsContractInfo::getContractCode,mainTask.getContractCode()).eq(PsContractInfo::getDelFlag,0));
}
- PsTaskAppoint psTaskAppoint = new PsTaskAppoint();
- psTaskAppoint.setAppointStatus(AppointStatusEnum.ING.getCode());
- psTaskAppoint.setAppointType(bo.getAppointType());
- psTaskAppoint.setContractCode(mainTask.getContractCode());
- psTaskAppoint.setTaskId(mainTask.getId());
- psTaskAppoint.setExecutor(bo.getUserId());
- psTaskAppoint.setTaskContentDesc(bo.getTaskContentDesc());
- appointMapper.insert(psTaskAppoint);
+
+ for (Long userId : bo.getUserIds()) {
+ PsTaskAppoint psTaskAppoint = new PsTaskAppoint();
+ psTaskAppoint.setAppointStatus(AppointStatusEnum.ING.getCode());
+ psTaskAppoint.setAppointType(bo.getAppointType());
+ psTaskAppoint.setContractCode(mainTask.getContractCode());
+ psTaskAppoint.setTaskId(mainTask.getId());
+ psTaskAppoint.setExecutor(userId);
+ psTaskAppoint.setTaskContentDesc(bo.getTaskContentDesc());
+ appointMapper.insert(psTaskAppoint);
+ }
+
}
/**
* 主任务完成
diff --git a/pusong-modules/pusong-business/src/main/resources/mapper/business/PsCompanyInfoMapper.xml b/pusong-modules/pusong-business/src/main/resources/mapper/business/PsCompanyInfoMapper.xml
index 1d96e0b..4cef65f 100644
--- a/pusong-modules/pusong-business/src/main/resources/mapper/business/PsCompanyInfoMapper.xml
+++ b/pusong-modules/pusong-business/src/main/resources/mapper/business/PsCompanyInfoMapper.xml
@@ -4,14 +4,13 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
"http://mybatis.org/dtd/mybatis-3-mapper.dtd">
-
+
-
-
-
-
+
+
+
+
+
+
+
+ info.custom_id = #{customId}
+
+
+
${ew.getCustomSqlSegment}
diff --git a/pusong-modules/pusong-business/src/main/resources/mapper/business/PsTaskMainMapper.xml b/pusong-modules/pusong-business/src/main/resources/mapper/business/PsTaskMainMapper.xml
index d932df8..c1af19b 100644
--- a/pusong-modules/pusong-business/src/main/resources/mapper/business/PsTaskMainMapper.xml
+++ b/pusong-modules/pusong-business/src/main/resources/mapper/business/PsTaskMainMapper.xml
@@ -21,7 +21,13 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
main.task_status,
main.contract_code,
main.invoice,
+ main.extend,
con.is_proxy con_is_proxy,
+ con.apply_date con_apply_date,
+ con.is_due con_is_due,
+ con.contact_person_name con_contact_person_name,
+ con.roll_back_pdf con_roll_back_pdf,
+ con.is_due con_is_due,
con.contract_amount con_contract_amount,
con.custom_scene con_custom_scene,
con.custom_manager con_custom_manager,
@@ -48,7 +54,7 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
(select GROUP_CONCAT(appoint.executor SEPARATOR ',')
from ps_task_appoint appoint where appoint.task_id = main.id and appoint.appoint_status != '50' and appoint.del_flag = '0') as executors,
(select GROUP_CONCAT(business.business_type SEPARATOR ',')
- from ps_contract_business business where business.contract_code = con.contract_code and business.del_flag = '0') as business_type_name
+ from ps_contract_business business where business.contract_code = con.contract_code and business.company_id = main.service_company_id and business.del_flag = '0') as business_type_name
from ps_task_main main
left join ps_contract_info con on main.contract_code = con.contract_code
left join ps_company_info com on con.company_id = com.id
@@ -70,6 +76,7 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
main.task_status,
main.contract_code,
main.id main_id,
+ main.extend,
con.is_proxy con_is_proxy,
con.custom_scene con_custom_scene,
con.custom_manager con_custom_manager,
diff --git a/茅厕酒业有限公司-2024092414386846.pdf b/茅厕酒业有限公司-2024092414386846.pdf
new file mode 100644
index 0000000..be5830c
--- /dev/null
+++ b/茅厕酒业有限公司-2024092414386846.pdf
@@ -0,0 +1,2 @@
+%PDF-1.4
+%
|