From 10849aff341ecc4f7ade1b20d0fffca3a7587b5b Mon Sep 17 00:00:00 2001 From: mx <1289317512@qq.com> Date: Wed, 25 Sep 2024 10:16:02 +0800 Subject: [PATCH] =?UTF-8?q?=E7=94=9F=E6=88=90=E5=90=88=E5=90=8C=E5=90=88?= =?UTF-8?q?=E5=90=8C=E5=88=97=E8=A1=A8=EF=BC=8C=E4=BB=BB=E5=8A=A1=E5=88=97?= =?UTF-8?q?=E8=A1=A8?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .gitignore | 1 + doc/report.ftl | 86 ++++--- .../pusong/common/doc/util/PdfGenerator.java | 2 +- .../PsApproverRecordController.java | 2 +- .../controller/PsContractInfoController.java | 29 +++ .../PsContractOperateController.java | 7 +- .../business/controller/PsTaskController.java | 5 +- .../business/domain/PsContractBusiness.java | 8 + .../business/domain/PsContractInfo.java | 19 +- .../pusong/business/domain/PsTaskMain.java | 10 + .../pusong/business/domain/bo/AppointBo.java | 4 +- .../business/domain/bo/PsCompanyInfoBo.java | 28 +++ .../domain/bo/PsContractBusinessBo.java | 10 + .../business/domain/bo/PsContractInfoBo.java | 41 +++- .../domain/bo/PsContractInfoQueryBo.java | 4 + .../business/domain/bo/PsInvoiceBo.java | 54 +++++ .../business/domain/vo/PsCompanyInfoVo.java | 15 ++ .../domain/vo/PsContractBusinessVo.java | 9 + .../business/domain/vo/PsContractInfoVo.java | 35 +++ .../business/domain/vo/PsInvoiceVo.java | 57 +++++ .../business/domain/vo/PsTaskMainVo.java | 10 + .../business/domain/vo/TaskContractVo.java | 5 + .../PsContractBusinessDetailMapper.java | 5 +- .../business/mapper/PsContractInfoMapper.java | 6 + .../service/IPsContractInfoService.java | 12 +- .../service/IPsContractOperateService.java | 2 +- .../business/service/IPsTaskService.java | 3 + .../impl/ApproverAbstractServiceImpl.java | 2 +- .../impl/PayContractApproverServiceImpl.java | 22 +- .../impl/SignApproverServiceImpl.java | 49 ++-- .../impl/IPsContractOperateServiceImpl.java | 21 +- .../impl/PsCompanyInfoServiceImpl.java | 12 +- .../impl/PsContractBusinessServiceImpl.java | 2 +- .../impl/PsContractInfoServiceImpl.java | 214 +++++++++++++----- .../service/impl/PsTaskServiceImpl.java | 34 ++- .../mapper/business/PsCompanyInfoMapper.xml | 26 ++- .../PsContractBusinessDetailMapper.xml | 9 + .../mapper/business/PsContractInfoMapper.xml | 11 +- .../mapper/business/PsTaskMainMapper.xml | 9 +- 茅厕酒业有限公司-2024092414386846.pdf | 2 + 40 files changed, 735 insertions(+), 147 deletions(-) create mode 100644 pusong-modules/pusong-business/src/main/java/com/pusong/business/domain/bo/PsInvoiceBo.java create mode 100644 pusong-modules/pusong-business/src/main/java/com/pusong/business/domain/vo/PsInvoiceVo.java create mode 100644 茅厕酒业有限公司-2024092414386846.pdf diff --git a/.gitignore b/.gitignore index 03e8193..c1110ea 100644 --- a/.gitignore +++ b/.gitignore @@ -2,3 +2,4 @@ *.iml */target/* */*/target/* +*.log diff --git a/doc/report.ftl b/doc/report.ftl index 3bef52e..666f047 100644 --- a/doc/report.ftl +++ b/doc/report.ftl @@ -55,52 +55,84 @@ + + + - <#list business as item> + <#list serviceCompany as company> + + + - - - @@ -136,7 +168,7 @@ -
+ 服务公司 + + 金额 + 服务类别 具体内容 + 是否代账 +
- ${item.businessTypeName} + ${company.companyName} + + ${company.businessAmount}元 + + <#list company.businessList as item> + <#if item_has_next> + ${item.businessTypeName}、 + <#else> + ${item.businessTypeName} + + -
+ <#list company.businessList as item> +

${item.businessTypeName}-金额:${item.businessAmount}元 - <#if item.businessDesc?? && item.businessDesc != ""> - -备注:${item.businessDesc} - + <#if item.businessDesc?? && item.businessDesc != ""> + -备注:${item.businessDesc} +

- <#list item.detailBos as detail> -

${detail.businessProjectLabel} - <#if detail.extentInfo?? && detail.extentInfo != ""> - <#assign extenInfo = detail.extentInfo?split("$")> - : - <#list extenInfo as exten> - ${exten?split("#")[1]} - <#if exten_has_next>, - - - <#if detail.amount??> - -金额:${detail.amount} - - <#if detail.amountDesc?? && detail.amountDesc != ""> - -备注:${detail.amountDesc} - -

+ <#list item.detailBos as detail> +

${detail.businessProjectLabel} + <#if detail.extentInfo?? && detail.extentInfo != ""> + <#assign extenInfo = detail.extentInfo?split("$")> + : + <#list extenInfo as exten> + ${exten?split("#")[1]} + <#if exten_has_next>, + + + <#if detail.amount??> + -金额:${detail.amount} + + <#if detail.amountDesc?? && detail.amountDesc != ""> + -备注:${detail.amountDesc} + +

+ + <#nt>
+ <#if company.isProxy?? && company.isProxy == "1"> + 是 + <#else> + 否 + + +
付款账号 +

公司名称:${main.name?if_exists}

@@ -113,7 +145,7 @@
+

合同金额:共计¥ @@ -127,7 +159,7 @@

付款方式 +

${contract.payModeDesc}

合同备注 +

<#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"> - + - - - - + + + + + select * + from ps_contract_business_detail where business_id = ${busId} + diff --git a/pusong-modules/pusong-business/src/main/resources/mapper/business/PsContractInfoMapper.xml b/pusong-modules/pusong-business/src/main/resources/mapper/business/PsContractInfoMapper.xml index 04d2a28..4525cd0 100644 --- a/pusong-modules/pusong-business/src/main/resources/mapper/business/PsContractInfoMapper.xml +++ b/pusong-modules/pusong-business/src/main/resources/mapper/business/PsContractInfoMapper.xml @@ -19,10 +19,12 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" com.company_name com_company_name, com.company_adress com_company_adress, com.company_account_bank com_company_account_bank, + com.legal_person_name com_legal_person_name, com.legal_person_idcard com_legal_person_idcard, com.legal_person_phone com_legal_person_phone, - cus.id cus_id, + com.customer_num com_customer_num, + cus.id cus_id, cus.custom_name cus_custom_name , cus.custom_mobile cus_custom_mobile, cus.custom_status cus_custom_status, @@ -42,6 +44,13 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" ${ew.getCustomSqlSegment} + +