生成合同合同列表,任务列表

This commit is contained in:
mx 2024-09-25 10:16:02 +08:00
parent fb5c5e3cdf
commit 10849aff34
40 changed files with 735 additions and 147 deletions

1
.gitignore vendored
View File

@ -2,3 +2,4 @@
*.iml *.iml
*/target/* */target/*
*/*/target/* */*/target/*
*.log

View File

@ -55,19 +55,41 @@
<table style="width:526.55pt; margin-right:auto; margin-left:auto;"> <table style="width:526.55pt; margin-right:auto; margin-left:auto;">
<tbody> <tbody>
<tr > <tr >
<td style="width:88.2pt;height: 30pt">
服务公司
</td>
<td style="width:88.2pt;height: 30pt">
金额
</td>
<td style="width:88.2pt;height: 30pt"> <td style="width:88.2pt;height: 30pt">
服务类别 服务类别
</td> </td>
<td style="width:416pt;" colspan="2"> <td style="width:416pt;" colspan="2">
具体内容 具体内容
</td> </td>
<td style="width:88.2pt;height: 30pt">
是否代账
</td>
</tr> </tr>
<#list business as item> <#list serviceCompany as company>
<tr > <tr >
<td> <td>
${company.companyName}
</td>
<td>
${company.businessAmount}元
</td>
<td>
<#list company.businessList as item>
<#if item_has_next>
${item.businessTypeName}、
<#else>
${item.businessTypeName} ${item.businessTypeName}
</#if>
</#list>
</td> </td>
<td colspan="2"> <td colspan="2">
<#list company.businessList as item>
<div style="height: 5pt;width: 1pt"></div> <div style="height: 5pt;width: 1pt"></div>
<p class="content" style="text-indent:5pt"> <p class="content" style="text-indent:5pt">
${item.businessTypeName}-金额:${item.businessAmount}元 ${item.businessTypeName}-金额:${item.businessAmount}元
@ -93,6 +115,16 @@
</#if> </#if>
</p> </p>
</#list> </#list>
<#nt>
</#list>
</td>
<td>
<#if company.isProxy?? && company.isProxy == "1">
<#else>
</#if>
</td> </td>
</tr> </tr>
</#list> </#list>
@ -100,7 +132,7 @@
<td > <td >
付款账号 付款账号
</td> </td>
<td colspan="2" > <td colspan="5" >
<div style="height: 5pt;width: 1pt"></div> <div style="height: 5pt;width: 1pt"></div>
<div style="float: left;"> <div style="float: left;">
<p class="content" style="text-indent:5pt">公司名称:${main.name?if_exists}</p> <p class="content" style="text-indent:5pt">公司名称:${main.name?if_exists}</p>
@ -113,7 +145,7 @@
</td> </td>
</tr> </tr>
<tr > <tr >
<td colspan="3" style="width:515pt; "> <td colspan="6" style="width:515pt; ">
<div style="height: 5pt;width: 1pt"></div> <div style="height: 5pt;width: 1pt"></div>
<p style="margin:5pt; text-indent:18pt; text-align:justify; "> <p style="margin:5pt; text-indent:18pt; text-align:justify; ">
<span style="">合同金额:共计¥</span> <span style="">合同金额:共计¥</span>
@ -127,7 +159,7 @@
<td > <td >
付款方式 付款方式
</td> </td>
<td colspan="2"> <td colspan="5">
<div style="height: 5pt;width: 1pt"></div> <div style="height: 5pt;width: 1pt"></div>
<p class="content" style="text-indent:5pt">${contract.payModeDesc}</p> <p class="content" style="text-indent:5pt">${contract.payModeDesc}</p>
</td> </td>
@ -136,7 +168,7 @@
<td > <td >
合同备注 合同备注
</td> </td>
<td colspan="2"> <td colspan="5">
<div style="height: 5pt;width: 1pt"></div> <div style="height: 5pt;width: 1pt"></div>
<p class="content" style="text-indent:5pt"> <p class="content" style="text-indent:5pt">
<#if contract.signDesc?? && contract.signDesc != ""> <#if contract.signDesc?? && contract.signDesc != "">

View File

@ -72,7 +72,7 @@ public class PdfGenerator {
} }
public static void makePdf(Map<String, Object> data ,String pdfpath,String templateName) throws Exception{ public static void makePdf(Map<String, Object> data, String pdfpath, String templateName) throws Exception{
// 加载模板 // 加载模板
Template template = configuration.getTemplate(templateName); Template template = configuration.getTemplate(templateName);
data.put("imagePath",System.getProperty("user.dir")); data.put("imagePath",System.getProperty("user.dir"));

View File

@ -62,7 +62,7 @@ public class PsApproverRecordController extends BaseController {
@GetMapping("/approver") @GetMapping("/approver")
public R<Void> approver(@NotBlank(message = "操作类型不能为空") String operate, public R<Void> approver(@NotBlank(message = "操作类型不能为空") String operate,
@NotNull(message = "数据id不能为空") Long id, String desc) { @NotNull(message = "数据id不能为空") Long id, String desc) {
contractInfoService.finish(psApproverRecordService.approver(operate, id,desc)); contractInfoService.finish(psApproverRecordService.approver(operate, id, desc));
return R.ok(); return R.ok();
} }

View File

@ -4,6 +4,7 @@ import java.util.List;
import cn.dev33.satoken.annotation.SaIgnore; import cn.dev33.satoken.annotation.SaIgnore;
import com.pusong.business.domain.bo.PsContractInfoQueryBo; 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.PsContractBusinessVo;
import com.pusong.business.domain.vo.PsSalaryContractVo; import com.pusong.business.domain.vo.PsSalaryContractVo;
import com.pusong.business.domain.vo.ServiceScheduleVo; import com.pusong.business.domain.vo.ServiceScheduleVo;
@ -56,6 +57,13 @@ public class PsContractInfoController extends BaseController {
@RepeatSubmit() @RepeatSubmit()
@PostMapping("/create") @PostMapping("/create")
public R<Long> add(@Validated(AddGroup.class) @RequestBody PsContractInfoBo bo) { public R<Long> 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)); return R.ok(psContractInfoService.createContract(bo,2));
} }
/** /**
@ -97,6 +105,15 @@ public class PsContractInfoController extends BaseController {
return psContractInfoService.queryPageList(bo, pageQuery); return psContractInfoService.queryPageList(bo, pageQuery);
} }
/**
* 使用客户id 查询分页查询合同列表
*/
@SaCheckPermission("business:contractInfo:LIST")
@GetMapping("/queryPageListByCustomId")
public TableDataInfo<PsContractInfoVo> queryPageListByCustomId(@RequestParam Long customId, PageQuery pageQuery) {
return psContractInfoService.queryPageListByCustomId(customId, pageQuery);
}
/** /**
* 根据合同编码查询合同信息 * 根据合同编码查询合同信息
*/ */
@ -164,6 +181,18 @@ public class PsContractInfoController extends BaseController {
return R.ok(); return R.ok();
} }
/**
* 开发票开发票操作
*/
@SaCheckPermission("business:contractInfo:list")
@Log(title = "合同开发票", businessType = BusinessType.INSERT)
@RepeatSubmit()
@GetMapping("/invoice_new")
public R<Void> invoiceNew(@Validated(AddGroup.class) PsInvoiceBo psInvoiceBo) {
psContractInfoService.invoice(psInvoiceBo);
return R.ok();
}
/** /**
* 免费派单 * 免费派单

View File

@ -88,8 +88,11 @@ public class PsContractOperateController extends BaseController {
@RepeatSubmit() @RepeatSubmit()
@SaCheckPermission("business:contractOperate:rollBack") @SaCheckPermission("business:contractOperate:rollBack")
@PostMapping(value = "/rollBack", consumes = MediaType.MULTIPART_FORM_DATA_VALUE) @PostMapping(value = "/rollBack", consumes = MediaType.MULTIPART_FORM_DATA_VALUE)
public R<Void> rollBack(@RequestPart("file") MultipartFile file,@NotBlank String contractCode )throws Exception { public R<Void> rollBack(@RequestPart("file") MultipartFile file, @NotBlank String contractCode)throws Exception {
operateService.rollbackContract( file, contractCode); String s = operateService.rollbackContract(file, contractCode);
if (s != null){
return R.fail(s);
}
return R.ok(); return R.ok();
} }

View File

@ -119,7 +119,10 @@ public class PsTaskController extends BaseController {
@SaCheckPermission("business:task:list") @SaCheckPermission("business:task:list")
@GetMapping("/mainFinish") @GetMapping("/mainFinish")
public R<Void> mainFinish(@NotNull Long id) { public R<Void> 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(); return R.ok();
} }

View File

@ -64,4 +64,12 @@ public class PsContractBusiness extends TenantEntity {
*/ */
private Long companyId; private Long companyId;
/**
* 是否代账
*/
private String isProxy;
/**
* 是否老账新接
*/
private String isOld;
} }

View File

@ -46,6 +46,21 @@ public class PsContractInfo extends TenantEntity {
*/ */
private Long customId; private Long customId;
/**
* 签约个人时联系人姓名
*/
private String contactPersonName;
/**
* 签约个人时联系人手机号
*/
private String contactPersonPhone;
/**
* 签约个人时联系人身份证号
*/
private String contactPersonIdcard;
/** /**
* 公司id * 公司id
*/ */
@ -87,11 +102,11 @@ public class PsContractInfo extends TenantEntity {
private String customScene; private String customScene;
/** /**
* 是否代账 * 是否代账,废弃转移到服务公司的服务项目里
*/ */
private String isProxy; private String isProxy;
/** /**
* 是否老账新接 * 是否老账新接,废弃转移到服务公司的服务项目里
*/ */
private String isOld; private String isOld;

View File

@ -83,4 +83,14 @@ public class PsTaskMain extends TenantEntity {
* 任务完成时间 * 任务完成时间
*/ */
private Date finishDate; private Date finishDate;
/**
* 扩展: 类型为开发票时 发票内容
*/
private String extend;
/**
* 服务公司id
*/
private Long serviceCompanyId;
} }

View File

@ -9,6 +9,8 @@ import lombok.Data;
import lombok.EqualsAndHashCode; import lombok.EqualsAndHashCode;
import lombok.NoArgsConstructor; import lombok.NoArgsConstructor;
import java.util.List;
@Data @Data
@EqualsAndHashCode @EqualsAndHashCode
public class AppointBo { public class AppointBo {
@ -21,7 +23,7 @@ public class AppointBo {
* 执行者用户id * 执行者用户id
*/ */
@NotNull @NotNull
private Long userId; private List<Long> userIds;
/** /**
* 任务委派类型1内勤,2外勤,3特勤 * 任务委派类型1内勤,2外勤,3特勤

View File

@ -14,6 +14,7 @@ import jakarta.validation.constraints.*;
import java.math.BigDecimal; import java.math.BigDecimal;
import java.util.Date; import java.util.Date;
import java.util.List; import java.util.List;
import java.util.Objects;
/** /**
* 公司信息业务对象 ps_company_info * 公司信息业务对象 ps_company_info
@ -144,10 +145,37 @@ public class PsCompanyInfoBo {
* 公司类型1签约公司 2服务公司 * 公司类型1签约公司 2服务公司
*/ */
private String companyType; private String companyType;
/** /**
* 合同服务类别 * 合同服务类别
*/ */
@NotEmpty(message = "合同服务类别不能为空") @NotEmpty(message = "合同服务类别不能为空")
private List<PsContractBusinessBo> businessList; private List<PsContractBusinessBo> 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;
}
} }

View File

@ -73,4 +73,14 @@ public class PsContractBusinessBo {
* 合同服务项目 * 合同服务项目
*/ */
private List<PsContractBusinessDetailBo> detailBos; private List<PsContractBusinessDetailBo> detailBos;
/**
* 是否代账
*/
private String isProxy;
/**
* 是否老账新接
*/
private String isOld;
} }

View File

@ -6,6 +6,7 @@ import com.pusong.common.core.validate.EditGroup;
import com.pusong.common.core.validate.QueryGroup; import com.pusong.common.core.validate.QueryGroup;
import com.pusong.common.mybatis.core.domain.BaseEntity; import com.pusong.common.mybatis.core.domain.BaseEntity;
import io.github.linpeilie.annotations.AutoMapper; import io.github.linpeilie.annotations.AutoMapper;
import io.github.linpeilie.annotations.AutoMapping;
import lombok.Data; import lombok.Data;
import lombok.EqualsAndHashCode; import lombok.EqualsAndHashCode;
import jakarta.validation.constraints.*; import jakarta.validation.constraints.*;
@ -103,10 +104,29 @@ public class PsContractInfoBo {
*/ */
private String isDue; 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; private PsCompanyInfoBo companyInfoBo;
/** /**
@ -131,4 +151,23 @@ public class PsContractInfoBo {
* 合同状态 * 合同状态
*/ */
private String contractStatusCode; 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;
}
}
} }

View File

@ -42,6 +42,10 @@ public class PsContractInfoQueryBo {
*/ */
private String customName; private String customName;
/**
* 合同id
*/
private Long customId;
/** /**
* 客户电话 * 客户电话
*/ */

View File

@ -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;
}

View File

@ -152,4 +152,19 @@ public class PsCompanyInfoVo implements Serializable {
* 服务类别信息 * 服务类别信息
*/ */
private List<PsContractBusinessVo> businessVoList; private List<PsContractBusinessVo> businessVoList;
@JsonFormat(pattern = "yyyy-MM-dd")
private Date startServiceDate;
@JsonFormat(pattern = "yyyy-MM-dd")
private Date endServiceDate;
/**
* 是否代账
*/
private String isProxy;
/**
* 是否老账新接
*/
private String isOld;
} }

View File

@ -75,4 +75,13 @@ public class PsContractBusinessVo implements Serializable {
*/ */
private List<PsContractBusinessDetailVo> detailVoList; private List<PsContractBusinessDetailVo> detailVoList;
/**
* 是否代账
*/
private String isProxy;
/**
* 是否老账新接
*/
private String isOld;
} }

View File

@ -189,6 +189,22 @@ public class PsContractInfoVo implements Serializable {
* 是否续费 * 是否续费
*/ */
private String isDue; 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") @JsonFormat(pattern = "yyyy-MM-dd HH:mm")
private Date finishDate; 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;
}
} }

View File

@ -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;
}

View File

@ -138,5 +138,15 @@ public class PsTaskMainVo implements Serializable {
* 任务备注 * 任务备注
*/ */
private String taskContentDesc; private String taskContentDesc;
/**
* 扩展: 类型未开发票时 发票内容
*/
private String extend;
/**
* 发票信息
*/
private PsInvoiceVo psInvoiceVo;
} }

View File

@ -169,4 +169,9 @@ public class TaskContractVo implements Serializable {
* 是否续费 * 是否续费
*/ */
private String isDue; private String isDue;
/**
* 签约个人时联系人姓名
*/
private String contactPersonName;
} }

View File

@ -3,6 +3,9 @@ package com.pusong.business.mapper;
import com.pusong.business.domain.PsContractBusinessDetail; import com.pusong.business.domain.PsContractBusinessDetail;
import com.pusong.business.domain.vo.PsContractBusinessDetailVo; import com.pusong.business.domain.vo.PsContractBusinessDetailVo;
import com.pusong.common.mybatis.core.mapper.BaseMapperPlus; import com.pusong.common.mybatis.core.mapper.BaseMapperPlus;
import org.apache.ibatis.annotations.Param;
import java.util.List;
/** /**
* 合同服务明细Mapper接口 * 合同服务明细Mapper接口
@ -11,5 +14,5 @@ import com.pusong.common.mybatis.core.mapper.BaseMapperPlus;
* @date 2024-07-29 * @date 2024-07-29
*/ */
public interface PsContractBusinessDetailMapper extends BaseMapperPlus<PsContractBusinessDetail, PsContractBusinessDetailVo> { public interface PsContractBusinessDetailMapper extends BaseMapperPlus<PsContractBusinessDetail, PsContractBusinessDetailVo> {
List<PsContractBusinessDetailVo> selectByBusId(@Param("busId") Long busId);
} }

View File

@ -35,6 +35,12 @@ public interface PsContractInfoMapper extends BaseMapperPlus<PsContractInfo, PsC
}) })
Page<PsContractInfoVo> selectPageContractList(@Param("page") Page<PsContractInfo> page, @Param(Constants.WRAPPER) Wrapper<PsContractInfo> queryWrapper); Page<PsContractInfoVo> selectPageContractList(@Param("page") Page<PsContractInfo> page, @Param(Constants.WRAPPER) Wrapper<PsContractInfo> queryWrapper);
@DataPermission({
@DataColumn(key = "deptName", value = "info.create_dept"),
@DataColumn(key = "userName", value = "info.create_by")
})
Page<PsContractInfoVo> selectPageContractListByCustomId(@Param("page") Page<PsContractInfo> page, @Param("customId") Long customId);
@DataPermission({ @DataPermission({
@DataColumn(key = "deptName", value = "info.create_dept"), @DataColumn(key = "deptName", value = "info.create_dept"),
@DataColumn(key = "userName", value = "info.create_by") @DataColumn(key = "userName", value = "info.create_by")

View File

@ -2,6 +2,7 @@ package com.pusong.business.service;
import com.pusong.business.domain.PsContractInfo; import com.pusong.business.domain.PsContractInfo;
import com.pusong.business.domain.bo.PsContractInfoQueryBo; 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.vo.PsContractInfoVo;
import com.pusong.business.domain.bo.PsContractInfoBo; import com.pusong.business.domain.bo.PsContractInfoBo;
import com.pusong.business.domain.vo.PsSalaryContractVo; import com.pusong.business.domain.vo.PsSalaryContractVo;
@ -55,6 +56,13 @@ public interface IPsContractInfoService {
*/ */
TableDataInfo<PsContractInfoVo> queryPageList(PsContractInfoQueryBo bo, PageQuery pageQuery); TableDataInfo<PsContractInfoVo> queryPageList(PsContractInfoQueryBo bo, PageQuery pageQuery);
/**
* 根据客户id 查询相关合同
* @param pageQuery
* @return
*/
TableDataInfo<PsContractInfoVo> queryPageListByCustomId(Long customId, PageQuery pageQuery);
/** /**
* 根据合同编码查询合同详情信息 * 根据合同编码查询合同详情信息
* *
@ -104,7 +112,7 @@ public interface IPsContractInfoService {
* @return * @return
*/ */
void invoice(String contractCode); void invoice(String contractCode);
void invoice(PsInvoiceBo invoiceBo);
/** /**
* 免费工单 * 免费工单
* @param contractCode 合同编码 * @param contractCode 合同编码
@ -117,7 +125,7 @@ public interface IPsContractInfoService {
* 合同完成 * 合同完成
* @param contractCode 合同编码 * @param contractCode 合同编码
*/ */
void finish(String contractCode); String finish(String contractCode);
/** /**

View File

@ -32,7 +32,7 @@ public interface IPsContractOperateService {
* @param file 回传合同文件 * @param file 回传合同文件
* @param contractCode 合同编码 * @param contractCode 合同编码
*/ */
void rollbackContract( MultipartFile file, String contractCode); String rollbackContract( MultipartFile file, String contractCode);
/** /**
* 确认单 * 确认单

View File

@ -13,6 +13,7 @@ import com.pusong.common.mybatis.core.page.PageQuery;
import org.jetbrains.annotations.NotNull; import org.jetbrains.annotations.NotNull;
import org.springframework.web.multipart.MultipartFile; import org.springframework.web.multipart.MultipartFile;
import java.util.Collection;
import java.util.List; import java.util.List;
import java.util.Map; import java.util.Map;
@ -34,6 +35,8 @@ public interface IPsTaskService {
*/ */
Boolean insert(PsTaskMain bo); Boolean insert(PsTaskMain bo);
Boolean insertBatch(Collection<PsTaskMain> bos);
/** /**
* 分页查询主任务列表 * 分页查询主任务列表
* *

View File

@ -51,7 +51,7 @@ public abstract class ApproverAbstractServiceImpl implements ApproverService {
* @param desc * @param desc
* @param updateData * @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<PsApproverRecord> wq = Wrappers.<PsApproverRecord>lambdaQuery().eq(PsApproverRecord::getDelFlag, "0") LambdaQueryWrapper<PsApproverRecord> wq = Wrappers.<PsApproverRecord>lambdaQuery().eq(PsApproverRecord::getDelFlag, "0")
.eq(PsApproverRecord::getBusinessType, approverType()) .eq(PsApproverRecord::getBusinessType, approverType())

View File

@ -7,6 +7,7 @@ import com.pusong.business.domain.PsContractInfo;
import com.pusong.business.domain.PsContractPay; import com.pusong.business.domain.PsContractPay;
import com.pusong.business.domain.PsTaskMain; import com.pusong.business.domain.PsTaskMain;
import com.pusong.business.domain.bo.PsContractPayBo; 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.PsContractInfoVo;
import com.pusong.business.domain.vo.PsContractPayVo; import com.pusong.business.domain.vo.PsContractPayVo;
import com.pusong.business.enums.*; import com.pusong.business.enums.*;
@ -19,6 +20,7 @@ import lombok.RequiredArgsConstructor;
import lombok.extern.slf4j.Slf4j; import lombok.extern.slf4j.Slf4j;
import org.springframework.stereotype.Service; import org.springframework.stereotype.Service;
import java.util.ArrayList;
import java.util.List; import java.util.List;
/** /**
@ -79,16 +81,22 @@ public class PayContractApproverServiceImpl extends ApproverAbstractServiceImpl
List<PsContractPayVo> list = payService.queryListByContractCode(info.getContractCode(), PayBuinessStatusEnum.PAY.getCode(), PayStatusEnum.SUCCESS); List<PsContractPayVo> list = payService.queryListByContractCode(info.getContractCode(), PayBuinessStatusEnum.PAY.getCode(), PayStatusEnum.SUCCESS);
//如果没有过回款记录初始化任务主表,并修改合同状态 //如果没有过回款记录初始化任务主表,并修改合同状态
log.info("查询回款记录数量{}任务状态{}", list.size(),info.getContractStatus()); log.info("查询回款记录数量{}任务状态{}", list.size(),info.getContractStatus());
PsTaskMain task = taskMainService.queryByContractCode(psApproverRecord.getContractCode()); PsTaskMain task = taskMainService.queryByContractCode(psApproverRecord.getContractCode());
if(task == null || task.getId() == null){ if(task == null || task.getId() == null){
log.info("任务未初始化,初始化任务主表"); log.info("任务未初始化,初始化任务主表");
List<PsTaskMain> psTaskMainList = new ArrayList<>();
for (PsCompanyInfoVo psCompanyInfoVo : info.getPsCompanySerivceVo()) {
PsTaskMain psTaskMain = new PsTaskMain(); PsTaskMain psTaskMain = new PsTaskMain();
psTaskMain.setContractCode(psApproverRecord.getContractCode()); psTaskMain.setContractCode(psApproverRecord.getContractCode());
psTaskMain.setTaskType(TaskTypeEnum.CONTRACT.getCode()); psTaskMain.setTaskType(TaskTypeEnum.CONTRACT.getCode());
psTaskMain.setTaskStatus(TaskStatusEnum.INIT.getCode()); psTaskMain.setTaskStatus(TaskStatusEnum.INIT.getCode());
psTaskMain.setCompanyId(info.getCompanyId()); psTaskMain.setCompanyId(info.getCompanyId());
psTaskMain.setCustomId(info.getCustomId()); psTaskMain.setCustomId(info.getCustomId());
taskMainService.insert(psTaskMain); psTaskMain.setServiceCompanyId(psCompanyInfoVo.getId());
psTaskMainList.add(psTaskMain);
}
taskMainService.insertBatch(psTaskMainList);
} }

View File

@ -9,6 +9,8 @@ import com.pusong.business.domain.PsApproverRecord;
import com.pusong.business.domain.PsContractInfo; import com.pusong.business.domain.PsContractInfo;
import com.pusong.business.domain.bo.*; import com.pusong.business.domain.bo.*;
import com.pusong.business.domain.vo.PsApproverRecordVo; 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.domain.vo.PsContractInfoVo;
import com.pusong.business.enums.ApproverTypeEnum; import com.pusong.business.enums.ApproverTypeEnum;
import com.pusong.business.enums.CommonStatusEnum; import com.pusong.business.enums.CommonStatusEnum;
@ -50,31 +52,44 @@ public class SignApproverServiceImpl extends ApproverAbstractServiceImpl {
//1查询源数据 //1查询源数据
PsContractInfoVo vo = contractInfoService.queryContractByCode(psApproverRecord.getContractCode()); PsContractInfoVo vo = contractInfoService.queryContractByCode(psApproverRecord.getContractCode());
//合同信息bo //合同信息bo
PsContractInfoBo bo =new PsContractInfoBo(); PsContractInfoBo bo = new PsContractInfoBo();
//合同信息 //合同信息
PsContractInfo info = new PsContractInfo(); PsContractInfo info = new PsContractInfo();
BeanUtils.copyProperties(vo,info); BeanUtils.copyProperties(vo, info);
PsCompanyInfoBo companyInfo = new PsCompanyInfoBo(); PsCompanyInfoBo companyInfo = new PsCompanyInfoBo();
BeanUtils.copyProperties(vo.getPsCompanyInfoVo(), companyInfo); BeanUtils.copyProperties(vo.getPsCompanyInfoVo(), companyInfo);
bo.setCompanyInfoBo(companyInfo); bo.setCompanyInfoBo(companyInfo);
List<PsCompanyInfoBo> serviceCompanyInfoList = new ArrayList<>();
bo.setServiceCompanyInfoList(serviceCompanyInfoList);
for (PsCompanyInfoVo psCompanyInfoVo : vo.getPsCompanySerivceVo()) {
List<PsContractBusinessBo> businessBos = new ArrayList<>(); List<PsContractBusinessBo> businessBos = new ArrayList<>();
vo.getBusinessVoList().forEach(item->{ for (PsContractBusinessVo item : psCompanyInfoVo.getBusinessVoList()) {
List<PsContractBusinessDetailBo> detailBos = new ArrayList<>(); List<PsContractBusinessDetailBo> detailBos = new ArrayList<>();
item.getDetailVoList().forEach(it->{ item.getDetailVoList().forEach(it->{
PsContractBusinessDetailBo detailBo = new PsContractBusinessDetailBo(); PsContractBusinessDetailBo detailBo = new PsContractBusinessDetailBo();
BeanUtils.copyProperties(it,detailBo); BeanUtils.copyProperties(it, detailBo);
detailBos.add(detailBo); detailBos.add(detailBo);
}); });
PsContractBusinessBo businessBo = new PsContractBusinessBo(); PsContractBusinessBo businessBo = new PsContractBusinessBo();
BeanUtils.copyProperties(item,businessBo); BeanUtils.copyProperties(item, businessBo);
businessBo.setDetailBos(detailBos); businessBo.setDetailBos(detailBos);
businessBos.add(businessBo); businessBos.add(businessBo);
}); if ("1".equals(item.getIsProxy())){
bo.setBusinessList(businessBos); companyInfo.setIsProxy("1");
}
}
PsCompanyInfoBo psCompanyInfoBo = new PsCompanyInfoBo();
BeanUtils.copyProperties(psCompanyInfoVo, psCompanyInfoBo);
psCompanyInfoBo.setBusinessList(businessBos);
serviceCompanyInfoList.add(psCompanyInfoBo);
}
info.setSignStatus(CommonStatusEnum.SUCCESS.getCode()); info.setSignStatus(CommonStatusEnum.SUCCESS.getCode());
contractInfoService.updateByCode(info); contractInfoService.updateByCode(info);
//生成合同 //生成合同
contractInfoService.makePdf(info,bo,true); contractInfoService.makePdf(info, bo,true);
} }
//修改签章状态 //修改签章状态

View File

@ -3,6 +3,8 @@ package com.pusong.business.service.impl;
import com.pusong.business.domain.PsContractInfo; import com.pusong.business.domain.PsContractInfo;
import com.pusong.business.domain.PsContractPay; import com.pusong.business.domain.PsContractPay;
import com.pusong.business.domain.bo.PsContractPayBo; 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.domain.vo.PsContractInfoVo;
import com.pusong.business.enums.ApproverTypeEnum; import com.pusong.business.enums.ApproverTypeEnum;
import com.pusong.business.enums.CommonStatusEnum; import com.pusong.business.enums.CommonStatusEnum;
@ -50,11 +52,11 @@ public class IPsContractOperateServiceImpl implements IPsContractOperateService
* @return 合同基本信息 * @return 合同基本信息
*/ */
public void sign(String contractCode){ public void sign(String contractCode){
PsContractInfoVo info = contractInfoService.queryContractByCode(contractCode); // PsContractInfoVo info = contractInfoService.queryContractByCode(contractCode);
//后续添加校验可再次添加 //后续添加校验可再次添加
//合同签章 //合同签章
ApproverService service = container.getService(ApproverTypeEnum.SIGN.getCode()); ApproverService service = container.getService(ApproverTypeEnum.SIGN.getCode());
service.apply(contractCode,contractCode,null, null); service.apply(contractCode, contractCode,null, null);
PsContractInfo psContractInfo = new PsContractInfo(); PsContractInfo psContractInfo = new PsContractInfo();
psContractInfo.setContractCode(contractCode); psContractInfo.setContractCode(contractCode);
@ -69,8 +71,13 @@ public class IPsContractOperateServiceImpl implements IPsContractOperateService
* @param contractCode 合同编码 * @param contractCode 合同编码
*/ */
@Transactional @Transactional
public void rollbackContract( MultipartFile file, String contractCode){ public String rollbackContract( MultipartFile file, String contractCode){
PsContractInfoVo info = contractInfoService.queryContractByCode(contractCode); PsContractInfoVo info = contractInfoService.queryContractByCode(contractCode);
String checkStr = checkRollbackContract(info);
if (checkStr != null)
return checkStr;
//后续添加校验可再次添加 //后续添加校验可再次添加
SysOssVo vo = ossService.upload(file); 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;
}
/** /**

View File

@ -117,13 +117,13 @@ public class PsCompanyInfoServiceImpl implements IPsCompanyInfoService {
//公司类型默认签约公司 //公司类型默认签约公司
PsCompanyInfo add = MapstructUtils.convert(bo, PsCompanyInfo.class); 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); validEntityBeforeSave(add);
boolean flag = baseMapper.insertOrUpdate(add); boolean flag = baseMapper.insertOrUpdate(add);
if (flag) { if (flag) {
bo.setId(add.getId()); bo.setId(add.getId());
if(bo.getBusinessList() != null){//装填服务类型的公司id if(bo.getBusinessList() != null){//装填服务类型的公司id
bo.getBusinessList().forEach(b->b.setCompanyId(add.getId())); bo.getBusinessList().forEach(b -> b.setCompanyId(add.getId()));
} }
} }
return flag; return flag;
@ -191,8 +191,14 @@ public class PsCompanyInfoServiceImpl implements IPsCompanyInfoService {
*/ */
public List<PsCompanyInfoVo> getServiceCompany(String controctCode){ public List<PsCompanyInfoVo> getServiceCompany(String controctCode){
QueryWrapper<PsCompanyInfoVo> wq = Wrappers.<PsCompanyInfoVo>query().eq("pcc.del_flag", "0").eq("bus.del_flag","0") QueryWrapper<PsCompanyInfoVo> wq = Wrappers.<PsCompanyInfoVo>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<PsCompanyInfoVo> list = baseMapper.selectServiceCompanyList(wq); List<PsCompanyInfoVo> 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; return list;
} }
} }

View File

@ -43,7 +43,7 @@ public class PsContractBusinessServiceImpl implements IPsContractBusinessService
* @return 是否新增成功 * @return 是否新增成功
*/ */
@Override @Override
public void saveList(List<PsContractBusinessBo> boList,String contractCode) { public void saveList(List<PsContractBusinessBo> boList, String contractCode) {
//1.删除所有服务类型和服务项目 //1.删除所有服务类型和服务项目
baseMapper.delete(Wrappers.<PsContractBusiness>lambdaQuery() baseMapper.delete(Wrappers.<PsContractBusiness>lambdaQuery()
.eq(PsContractBusiness::getContractCode,contractCode)); .eq(PsContractBusiness::getContractCode,contractCode));

View File

@ -1,6 +1,7 @@
package com.pusong.business.service.impl; package com.pusong.business.service.impl;
import com.alibaba.fastjson.JSON; import com.alibaba.fastjson.JSON;
import com.alibaba.fastjson.JSONObject;
import com.baomidou.mybatisplus.core.conditions.Wrapper; import com.baomidou.mybatisplus.core.conditions.Wrapper;
import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
import com.baomidou.mybatisplus.core.toolkit.CollectionUtils; import com.baomidou.mybatisplus.core.toolkit.CollectionUtils;
@ -93,18 +94,29 @@ public class PsContractInfoServiceImpl implements IPsContractInfoService {
*/ */
@Override @Override
@Transactional//开启事务 @Transactional//开启事务
public Long createContract(PsContractInfoBo bo,Integer type) { public Long createContract(PsContractInfoBo bo, Integer type) {
//1校验 //1校验
PsContractInfo add = validEntity(bo,UserConstants.YES); PsContractInfo add = validEntity(bo, UserConstants.YES);
//2.插入签约公司信息
if (bo.getFirstPartyType() == PsContractInfoBo.FIRSTPARTYTYPE.COMPANY.getType()){
if(bo.getCompanyInfoBo().getCustomId() == null){ if(bo.getCompanyInfoBo().getCustomId() == null){
bo.getCompanyInfoBo().setCustomId(bo.getCustomId()); bo.getCompanyInfoBo().setCustomId(bo.getCustomId());
} }
//2.插入签约公司信息
companyInfoService.saveBo(bo.getCompanyInfoBo()); companyInfoService.saveBo(bo.getCompanyInfoBo());
}
//插入服务公司 //插入服务公司
for (PsCompanyInfoBo companyInfoBo : bo.getServiceCompanyInfoList()){ for (PsCompanyInfoBo companyInfoBo : bo.getServiceCompanyInfoList()){
companyInfoBo.setCompanyType("2"); companyInfoBo.setCompanyType("2");
companyInfoService.saveBo(companyInfoBo); 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.如果已存在合同则进行修改否则新增 //3.如果已存在合同则进行修改否则新增
@ -113,13 +125,19 @@ public class PsContractInfoServiceImpl implements IPsContractInfoService {
MapstructUtils.convert(bo, add); MapstructUtils.convert(bo, add);
add.setContractCode(getContractCode());//合同编码 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 add.setCustomManager(LoginHelper.getUserId());//所属销售经理id
}else{ }else{
MapstructUtils.convert(bo, add); MapstructUtils.convert(bo, add);
} }
if (bo.getFirstPartyType() == PsContractInfoBo.FIRSTPARTYTYPE.COMPANY.getType()) {
add.setCompanyId(bo.getCompanyInfoBo().getId());//公司id add.setCompanyId(bo.getCompanyInfoBo().getId());//公司id
}
List<PsContractBusinessBo> list = bo.getServiceCompanyInfoList().stream().flatMap(com -> com.getBusinessList().stream()).toList(); List<PsContractBusinessBo> list = bo.getServiceCompanyInfoList().stream().flatMap(com -> com.getBusinessList().stream()).toList();
list.forEach(item->{ list.forEach(item->{
BigDecimal mony = BigDecimal.ZERO; BigDecimal mony = BigDecimal.ZERO;
@ -135,13 +153,13 @@ public class PsContractInfoServiceImpl implements IPsContractInfoService {
companyInfoService.saveContractCompany(bo.getServiceCompanyInfoList(),add.getContractCode()); companyInfoService.saveContractCompany(bo.getServiceCompanyInfoList(),add.getContractCode());
BigDecimal sum = list.stream().map(PsContractBusinessBo::getBusinessAmount).filter(Objects::nonNull).reduce(BigDecimal.ZERO, BigDecimal::add); BigDecimal sum = list.stream().map(PsContractBusinessBo::getBusinessAmount).filter(Objects::nonNull).reduce(BigDecimal.ZERO, BigDecimal::add);
add.setContractAmount(sum);//合同总金额 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()); add.setIsCancel(CommonStatusEnum.INIT.getCode());
baseMapper.insertOrUpdate(add); baseMapper.insertOrUpdate(add);
//4.删除所有服务类型和服务项目,.插入服务类型 //4.删除所有服务类型和服务项目,.插入服务类型
businessService.saveList(list,add.getContractCode()); businessService.saveList(list, add.getContractCode());
//7.生成合同 //7.生成合同
return makePdf(add,bo,true); return makePdf(add, bo,true);
} }
/** /**
* 预览合同 * 预览合同
@ -246,6 +264,16 @@ public class PsContractInfoServiceImpl implements IPsContractInfoService {
return TableDataInfo.build(result); return TableDataInfo.build(result);
} }
public TableDataInfo<PsContractInfoVo> queryPageListByCustomId(Long customId, PageQuery pageQuery){
Page<PsContractInfoVo> 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{ }else{
//修改合同 //修改合同
PsContractInfo add = new PsContractInfo(); PsContractInfo add = new PsContractInfo();
MapstructUtils.convert(bo,add); MapstructUtils.convert(bo, add);
add.setCompanyId(bo.getCompanyInfoBo().getId());//公司id add.setCompanyId(bo.getCompanyInfoBo().getId());//公司id
this.updateByCode(add); this.updateByCode(add);
//4.删除所有服务类型和服务项目,.插入服务类型 //4.删除所有服务类型和服务项目,.插入服务类型
businessService.saveList(list,add.getContractCode()); businessService.saveList(list,add.getContractCode());
makePdf(add,bo,true); makePdf(add, bo,true);
} }
return true; return true;
} }
@ -402,37 +430,48 @@ public class PsContractInfoServiceImpl implements IPsContractInfoService {
* @param add * @param add
* @param bo * @param bo
*/ */
public Long makePdf(PsContractInfo add ,PsContractInfoBo bo,boolean isSave){ public Long makePdf(PsContractInfo add, PsContractInfoBo bo, boolean isSave){
//todo 合同pdf //todo 合同pdf
Long ossId = null; Long ossId = null;
SysDictData main = dictDataService.selectDict("contract_main", add.getContractMain()); SysDictData main = dictDataService.selectDict("contract_main", add.getContractMain());
bo.getBusinessList().forEach(item->{ List<PsContractBusinessBo> detailBos = new ArrayList<>();
for (PsCompanyInfoBo psCompanyInfoBo : bo.getServiceCompanyInfoList()) {
for (PsContractBusinessBo item : psCompanyInfoBo.getBusinessList()) {
item.setBusinessTypeName(dictDataService.selectDictLabel("contract_type",item.getBusinessType())); 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().}); // item.getDetailBos().forEach(it->{it.getExtentInfo().});
}); // });
try{ try{
//生成合同pdf //生成合同pdf
PsCustomInfo customer = customInfoService.listById(add.getCustomId()); PsCustomInfo customer = customInfoService.listById(add.getCustomId());
Map<String,Object> map = new HashMap<>(); Map<String,Object> map = new HashMap<>();
LoginUser user = LoginHelper.getLoginUser(); LoginUser user = LoginHelper.getLoginUser();
map.put("user",user); map.put("user", user);
map.put("contract",add); map.put("contract", add);
map.put("business",bo.getBusinessList()); map.put("business", detailBos);
map.put("main",JSON.parseObject(main.getRemark()));// 合同主体信息
map.put("company",bo.getCompanyInfoBo()); map.put("serviceCompany", bo.getServiceCompanyInfoList());
map.put("main", JSON.parseObject(main.getRemark()));// 合同主体信息
map.put("company", bo.getCompanyInfoBo());
map.put("customer",customer); map.put("customer",customer);
// 合同总金额大写 // 合同总金额大写
map.put("contractAmount", NumBerTool.digitUppercase(add.getContractAmount().setScale(2, RoundingMode.HALF_EVEN).toString())); 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)); log.info(JSON.toJSONString(map));
// path = "D:/王立帅/临时/output.pdf"; // path = "D:/王立帅/临时/output.pdf";
PdfGenerator.makePdf(map, path,TenplateEnum.CONTRACT.getName()); PdfGenerator.makePdf(map, path, TenplateEnum.CONTRACT.getName());
File file = new File(path); File file = new File(path);
//上传到oss服务 //上传到oss服务
SysOssVo sysOssVo = ossService.upload(new File(path)); SysOssVo sysOssVo = ossService.upload(new File(path));
@ -447,14 +486,14 @@ public class PsContractInfoServiceImpl implements IPsContractInfoService {
psContractInfo.setPdfId(sysOssVo.getOssId()); psContractInfo.setPdfId(sysOssVo.getOssId());
this.updateByCode(psContractInfo); 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<Long> a = Optional.ofNullable(add.getPdfId()); Optional<Long> a = Optional.ofNullable(add.getPdfId());
} }
}catch (Exception e){ }catch (Exception e){
log.error("生成pdf失败",e); log.error("生成pdf失败",e);
} }
return ossId; return ossId;
return null;
} }
/** /**
@ -473,6 +512,18 @@ public class PsContractInfoServiceImpl implements IPsContractInfoService {
psTaskMain.setTaskStatus(TaskStatusEnum.INIT.getCode()); psTaskMain.setTaskStatus(TaskStatusEnum.INIT.getCode());
taskMainService.insert(psTaskMain); 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 合同编码 * @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 合同编码 * @param contractCode 合同编码
*/ */
@Transactional @Transactional
public void finish(String contractCode){ public String finish(String contractCode) {
if(StringUtils.isBlank(contractCode)){ if (StringUtils.isBlank(contractCode)) {
return; return "contractCode 参数错误";
} }
Long num = taskMainMapper.selectCount(Wrappers.<PsTaskMain>lambdaQuery() Long num = taskMainMapper.selectCount(Wrappers.<PsTaskMain>lambdaQuery()
.eq(PsTaskMain::getContractCode, contractCode) .eq(PsTaskMain::getContractCode, contractCode)
@ -501,14 +565,55 @@ public class PsContractInfoServiceImpl implements IPsContractInfoService {
.notIn(PsTaskMain::getTaskStatus, TaskStatusEnum.returnFinish())); .notIn(PsTaskMain::getTaskStatus, TaskStatusEnum.returnFinish()));
PsContractInfoVo info = this.queryContractByCode(contractCode); PsContractInfoVo info = this.queryContractByCode(contractCode);
//任务已完成 合同已回传 回款已结束 //任务已完成 合同已回传 回款已结束
if(StringUtils.equals(info.getRollBackStatus(),CommonStatusEnum.SUCCESS.getCode()) boolean rollbackFlag = true;
&& num<=0 && info.getResidualMoney().compareTo(BigDecimal.ZERO)<=0){
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 psContractInfo = new PsContractInfo();
psContractInfo.setContractCode(contractCode); psContractInfo.setContractCode(contractCode);
psContractInfo.setContractStatus(ContractStatusEnum.SUCCESS.getCode()); psContractInfo.setContractStatus(ContractStatusEnum.SUCCESS.getCode());
psContractInfo.setFinishDate(new Date()); psContractInfo.setFinishDate(new Date());
this.updateByCode(psContractInfo); this.updateByCode(psContractInfo);
} return null;
} }
@ -537,7 +642,7 @@ public class PsContractInfoServiceImpl implements IPsContractInfoService {
PsTaskMain task = taskMainService.queryByContractCode(contractCode); PsTaskMain task = taskMainService.queryByContractCode(contractCode);
List<PsTaskAppoint> appointList = new ArrayList<>(); List<PsTaskAppoint> appointList = new ArrayList<>();
if(task!=null){ if(task != null){
appointList = taskAppointMapper.selectList(Wrappers.<PsTaskAppoint>lambdaQuery() appointList = taskAppointMapper.selectList(Wrappers.<PsTaskAppoint>lambdaQuery()
.eq(PsTaskAppoint::getContractCode, contractCode) .eq(PsTaskAppoint::getContractCode, contractCode)
.ne(PsTaskAppoint::getAppointStatus,AppointStatusEnum.CANCEL.getCode()) .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)){ if(CollectionUtils.isNotEmpty(appointList)){
appointList.forEach(item->{ appointList.forEach(item->{
if(StringUtils.equals("1",item.getAppointType())){ if(StringUtils.equals("1",item.getAppointType())){
@ -673,6 +778,11 @@ public class PsContractInfoServiceImpl implements IPsContractInfoService {
int num = DateUtils.differentDaysByMillisecond(new Date(), vo.getEndServiceDate()); int num = DateUtils.differentDaysByMillisecond(new Date(), vo.getEndServiceDate());
vo.setEndNum(Math.max(num, 0)); vo.setEndNum(Math.max(num, 0));
} }
//装填服务公司信息
List<PsCompanyInfoVo> list = companyInfoService.getServiceCompany(vo.getContractCode());
vo.setPsCompanySerivceVo(list);
return vo; return vo;
} }
public void fillMoney(PsContractInfoVo vo){ public void fillMoney(PsContractInfoVo vo){
@ -725,23 +835,23 @@ public class PsContractInfoServiceImpl implements IPsContractInfoService {
* isAdd:是否为增加/修改校验 * isAdd:是否为增加/修改校验
* 校验暂存的合同不止一个暂存的合同并且不是传入的合同-报错暂存的合同只能有一个 * 校验暂存的合同不止一个暂存的合同并且不是传入的合同-报错暂存的合同只能有一个
*/ */
private PsContractInfo validEntity( PsContractInfoBo bo,String... isAdd){ private PsContractInfo validEntity(PsContractInfoBo bo, String... isAdd){
PsContractInfo add =null; PsContractInfo add =null;
//插入或修改合同 //插入或修改合同
log.info("校验合同查询入参:{}",bo.getCustomId()); log.info("校验合同查询入参:{}", bo.getCustomId());
List<PsContractInfo> infos = this.queryByCode(bo.getCustomId(),null,ContractStatusEnum.INIT.getCode()); List<PsContractInfo> infos = this.queryByCode(bo.getCustomId(),null, ContractStatusEnum.INIT.getCode());
log.info("校验合同查询结果:{}",infos == null?null: infos.size() ); log.info("校验合同查询结果:{}", infos == null?null: infos.size());
//校验暂存的合同不止一个暂存的合同并且不是传入的合同-报错暂存的合同只能有一个 //校验暂存的合同不止一个暂存的合同并且不是传入的合同-报错暂存的合同只能有一个
if (CollectionUtils.isNotEmpty(infos) ) { if (CollectionUtils.isNotEmpty(infos)) {
if(infos.size()>1){ if(infos.size() > 1){
log.error("暂存的合同过多customerid:"+bo.getCustomId()); log.error("暂存的合同过多customerid:" + bo.getCustomId());
throw new ServiceException("系统异常,请联系管理员"); throw new ServiceException("系统异常,请联系管理员");
} }
add = infos.get(0); add = infos.get(0);
//新增时校验是否有暂存的合同 //新增时校验是否有暂存的合同
if(StringUtils.equals(isAdd.length<1?"":isAdd[0], UserConstants.YES) && if(StringUtils.equals(isAdd.length < 1 ? "" : isAdd[0], UserConstants.YES)
!StringUtils.equals(add.getContractCode(), bo.getContractCode())){ && !StringUtils.equals(add.getContractCode(), bo.getContractCode())){
log.error("此合已有暂存的合同customerid:"+bo.getCustomId()); log.error("此合已有暂存的合同customerid:" + bo.getCustomId());
throw new ServiceException("此合同状态已变更,请刷新页面重新操作"); throw new ServiceException("此合同状态已变更,请刷新页面重新操作");
} }
} }

View File

@ -1,6 +1,7 @@
package com.pusong.business.service.impl; package com.pusong.business.service.impl;
import cn.hutool.core.lang.Assert; 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.LambdaQueryWrapper;
import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
import com.baomidou.mybatisplus.core.toolkit.CollectionUtils; 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 com.pusong.system.service.ISysOssService;
import jakarta.annotation.Resource; import jakarta.annotation.Resource;
import lombok.RequiredArgsConstructor; import lombok.RequiredArgsConstructor;
import org.apache.ibatis.executor.BatchResult;
import org.jetbrains.annotations.NotNull; import org.jetbrains.annotations.NotNull;
import org.slf4j.Logger; import org.slf4j.Logger;
import org.slf4j.LoggerFactory; import org.slf4j.LoggerFactory;
@ -86,6 +88,11 @@ public class PsTaskServiceImpl implements IPsTaskService {
return flag; return flag;
} }
@Override
public Boolean insertBatch(Collection<PsTaskMain> bos){
List<BatchResult> insert = baseMapper.insert(bos);
return !insert.isEmpty();
}
/** /**
* 分页查询主任务列表 * 分页查询主任务列表
* *
@ -96,8 +103,13 @@ public class PsTaskServiceImpl implements IPsTaskService {
public TableDataInfo<PsTaskMainVo> queryPageList(PsTaskQueryBo bo, PageQuery pageQuery){ public TableDataInfo<PsTaskMainVo> queryPageList(PsTaskQueryBo bo, PageQuery pageQuery){
QueryWrapper<PsTaskMain> lqw = buildQueryWrapper(bo); QueryWrapper<PsTaskMain> lqw = buildQueryWrapper(bo);
Page<PsTaskMainVo> page; Page<PsTaskMainVo> page;
if(StringUtils.equals(TaskTypeEnum.INVOICE.getCode(),bo.getType())){//发票任务无需数据权限 if(StringUtils.equals(TaskTypeEnum.INVOICE.getCode(), bo.getType())){//发票任务无需数据权限
page = baseMapper.queryInvoiceTaskPageList(pageQuery.build(), lqw); 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{ }else{
page = baseMapper.queryTaskPageList(pageQuery.build(), lqw); page = baseMapper.queryTaskPageList(pageQuery.build(), lqw);
} }
@ -306,15 +318,19 @@ public class PsTaskServiceImpl implements IPsTaskService {
.eq(PsContractInfo::getContractCode,mainTask.getContractCode()).eq(PsContractInfo::getDelFlag,0)); .eq(PsContractInfo::getContractCode,mainTask.getContractCode()).eq(PsContractInfo::getDelFlag,0));
} }
for (Long userId : bo.getUserIds()) {
PsTaskAppoint psTaskAppoint = new PsTaskAppoint(); PsTaskAppoint psTaskAppoint = new PsTaskAppoint();
psTaskAppoint.setAppointStatus(AppointStatusEnum.ING.getCode()); psTaskAppoint.setAppointStatus(AppointStatusEnum.ING.getCode());
psTaskAppoint.setAppointType(bo.getAppointType()); psTaskAppoint.setAppointType(bo.getAppointType());
psTaskAppoint.setContractCode(mainTask.getContractCode()); psTaskAppoint.setContractCode(mainTask.getContractCode());
psTaskAppoint.setTaskId(mainTask.getId()); psTaskAppoint.setTaskId(mainTask.getId());
psTaskAppoint.setExecutor(bo.getUserId()); psTaskAppoint.setExecutor(userId);
psTaskAppoint.setTaskContentDesc(bo.getTaskContentDesc()); psTaskAppoint.setTaskContentDesc(bo.getTaskContentDesc());
appointMapper.insert(psTaskAppoint); appointMapper.insert(psTaskAppoint);
} }
}
/** /**
* 主任务完成 * 主任务完成
* *

View File

@ -4,14 +4,13 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
"http://mybatis.org/dtd/mybatis-3-mapper.dtd"> "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
<mapper namespace="com.pusong.business.mapper.PsCompanyInfoMapper"> <mapper namespace="com.pusong.business.mapper.PsCompanyInfoMapper">
<resultMap id="serviceCompanyServiceResult" type="com.pusong.business.domain.vo.PsCompanyInfoVo"> <resultMap id="serviceCompanyServiceResult" type="com.pusong.business.domain.vo.PsCompanyInfoVo">
<id column="ID" property="id"></id> <id column="id" property="id"></id>
<collection columnPrefix="bus_" property="businessVoList" ofType="com.pusong.business.domain.vo.PsContractBusinessVo" > <collection columnPrefix="bus_" property="businessVoList" ofType="com.pusong.business.domain.vo.PsContractBusinessVo" >
<collection columnPrefix="detail_" property="detailVoList" ofType="com.pusong.business.domain.vo.PsContractBusinessDetailVo" > <id column="id" property="id"></id>
<!-- <id column="ID" property="id"></id>--> <collection columnPrefix="det_" column="det" property="detailVoList" ofType="com.pusong.business.domain.vo.PsContractBusinessDetailVo" >
<!-- <result column="CUSTOMER_NAME" property="customerName" />-->
<!-- <result column="CUSTOMER_ID_NO" property="customerIdNo" />-->
</collection> </collection>
</collection> </collection>
</resultMap> </resultMap>
<select id="selectPageList" resultType="com.pusong.business.domain.vo.PsCompanyQueryVo"> <select id="selectPageList" resultType="com.pusong.business.domain.vo.PsCompanyQueryVo">
@ -31,6 +30,7 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
${ew.getCustomSqlSegment} ${ew.getCustomSqlSegment}
</select> </select>
<select id="selectServiceCompanyList" resultMap="serviceCompanyServiceResult"> <select id="selectServiceCompanyList" resultMap="serviceCompanyServiceResult">
select com.*, select com.*,
bus.business_amount bus_business_amount, bus.business_amount bus_business_amount,
@ -41,12 +41,16 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
bus.end_date bus_end_date, bus.end_date bus_end_date,
bus.id bus_id, bus.id bus_id,
bus.start_date bus_start_date, bus.start_date bus_start_date,
det.contract_code detail_contract_code, bus.is_proxy bus_is_proxy,
det.business_project detail_business_project, bus.is_old bus_is_old,
det.business_project_label detail_business_project_label, det.id det_id,
det.amount detail_amount, det.business_id bus_det_business_id,
det.amount_desc detail_amount_desc, det.contract_code bus_det_contract_code,
det.extent_info detail_extent_info det.business_project bus_det_business_project,
det.business_project_label bus_det_business_project_label,
det.amount bus_det_amount,
det.amount_desc bus_det_amount_desc,
det.extent_info bus_det_extent_info
from ps_contract_company pcc from ps_contract_company pcc
left join ps_company_info com on pcc.company_id = com.id left join ps_company_info com on pcc.company_id = com.id
left join ps_contract_business bus on bus.company_id = com.id and bus.contract_code = pcc.contract_code left join ps_contract_business bus on bus.company_id = com.id and bus.contract_code = pcc.contract_code

View File

@ -3,5 +3,14 @@
PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
"http://mybatis.org/dtd/mybatis-3-mapper.dtd"> "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
<mapper namespace="com.pusong.business.mapper.PsContractBusinessDetailMapper"> <mapper namespace="com.pusong.business.mapper.PsContractBusinessDetailMapper">
<resultMap id="detailResult" type="com.pusong.business.domain.vo.PsContractBusinessDetailVo">
</resultMap>
<select id="selectByBusId" resultMap="detailResult">
select *
from ps_contract_business_detail where business_id = ${busId}
</select>
</mapper> </mapper>

View File

@ -19,9 +19,11 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
com.company_name com_company_name, com.company_name com_company_name,
com.company_adress com_company_adress, com.company_adress com_company_adress,
com.company_account_bank com_company_account_bank, com.company_account_bank com_company_account_bank,
com.legal_person_name com_legal_person_name, com.legal_person_name com_legal_person_name,
com.legal_person_idcard com_legal_person_idcard, com.legal_person_idcard com_legal_person_idcard,
com.legal_person_phone com_legal_person_phone, com.legal_person_phone com_legal_person_phone,
com.customer_num com_customer_num,
cus.id cus_id, cus.id cus_id,
cus.custom_name cus_custom_name , cus.custom_name cus_custom_name ,
cus.custom_mobile cus_custom_mobile, cus.custom_mobile cus_custom_mobile,
@ -42,6 +44,13 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
${ew.getCustomSqlSegment} ${ew.getCustomSqlSegment}
</select> </select>
<select id="selectPageContractListByCustomId" resultMap="contractResult">
<include refid="queryContractList"/>
<where>
info.custom_id = #{customId}
</where>
</select>
<select id="selectContractList" resultMap="contractResult"> <select id="selectContractList" resultMap="contractResult">
<include refid="queryContractList"/> <include refid="queryContractList"/>
${ew.getCustomSqlSegment} ${ew.getCustomSqlSegment}

View File

@ -21,7 +21,13 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
main.task_status, main.task_status,
main.contract_code, main.contract_code,
main.invoice, main.invoice,
main.extend,
con.is_proxy con_is_proxy, 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.contract_amount con_contract_amount,
con.custom_scene con_custom_scene, con.custom_scene con_custom_scene,
con.custom_manager con_custom_manager, con.custom_manager con_custom_manager,
@ -48,7 +54,7 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
(select GROUP_CONCAT(appoint.executor SEPARATOR ',') (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, 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 ',') (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 from ps_task_main main
left join ps_contract_info con on main.contract_code = con.contract_code 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 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.task_status,
main.contract_code, main.contract_code,
main.id main_id, main.id main_id,
main.extend,
con.is_proxy con_is_proxy, con.is_proxy con_is_proxy,
con.custom_scene con_custom_scene, con.custom_scene con_custom_scene,
con.custom_manager con_custom_manager, con.custom_manager con_custom_manager,

View File

@ -0,0 +1,2 @@
%PDF-1.4
%粤マモ