platformx-boot/src/main/resources/application-dev.yml
@@ -37,11 +37,6 @@ swagger: token-url: ${swagger.gateway}/admin/oauth2/token # 文件上传配置 file: local: base-path: D:\\Users\\platformx\\Downloads\\img #bip 配置 bip: flag: false platformx-business-finance-api/src/main/java/com/by4cloud/platformx/business/constant/FlowNameEnum.java
@@ -13,6 +13,7 @@ public enum FlowNameEnum { 合同审批("合同审批"), 排产计划审批("排产计划审批"), 延期出货审批("延期出货审批"), 销售挂账审批("销售挂账审批"); private String name; platformx-business-finance-api/src/main/java/com/by4cloud/platformx/business/dto/ContracQueryDTO.java
New file @@ -0,0 +1,17 @@ package com.by4cloud.platformx.business.dto; import io.swagger.v3.oas.annotations.media.Schema; import lombok.Data; @Data public class ContracQueryDTO { @Schema(description = "合同名称") private String contractName; @Schema(description = "甲方名称") private String partyA; @Schema(description = "状态") private String contractStatus; } platformx-business-finance-api/src/main/java/com/by4cloud/platformx/business/dto/ContractAddDTO.java
@@ -141,6 +141,8 @@ @Schema(description = "开票通知在 个工作日内") private BigDecimal invoiceNotice; @Schema(description = "合同总价税率") private BigDecimal contractTax; private List<ContractPaymentScheduleAddDTO> contractPaymentSchedule; platformx-business-finance-api/src/main/java/com/by4cloud/platformx/business/dto/DelayOutApprovalDTO.java
New file @@ -0,0 +1,21 @@ package com.by4cloud.platformx.business.dto; import io.swagger.v3.oas.annotations.media.Schema; import lombok.Data; @Data public class DelayOutApprovalDTO { @Schema(description = "合同ID") private Long contractId; @Schema(description = "延期天数") private Integer delayDay; @Schema(description = "延期单据名称") private String delayAttNames; @Schema(description = "延期单据路径") private String delayAttPaths; } platformx-business-finance-api/src/main/java/com/by4cloud/platformx/business/dto/GenInvoiceInfoDTO.java
@@ -1,5 +1,6 @@ package com.by4cloud.platformx.business.dto; import com.by4cloud.platformx.business.vo.ContractOutBoundInvoiceVo; import lombok.Data; import java.util.List; @@ -7,6 +8,6 @@ @Data public class GenInvoiceInfoDTO { private List<Long> contractOutBoundIds; private List<ContractOutBoundInvoiceVo> outBoundInvoiceList; } platformx-business-finance-api/src/main/java/com/by4cloud/platformx/business/entity/BusinessCustomer.java
@@ -73,6 +73,10 @@ // 煤炭、有色、黑色、电力、其它、氧化铝、化工、水泥、船运 @Schema(description = "注册资本") @Column(columnDefinition = "VARCHAR(128) comment '注册资本'") private String registerName; @Schema(description = "开户银行") @Column(columnDefinition = "VARCHAR(20) comment '开户银行'") private String bankName; platformx-business-finance-api/src/main/java/com/by4cloud/platformx/business/entity/Contract.java
@@ -247,32 +247,8 @@ @Column(columnDefinition = "decimal(10,0) comment '开票通知在 个工作日内 一煤机采购合同用'") private BigDecimal invoiceNotice; /** * 临时字段 - 用于接收审批人名称等关联查询结果 */ @Transient @TableField(exist = false) private String approverName; /** * 标的物 */ @Transient @TableField(exist = false) private List<ContractSubjectMatter> contractSubjectMatterList; /** * 收款阶段 */ @Transient @TableField(exist = false) private List<ContractPaymentSchedule> contractPaymentScheduleList; /** * 临时字段 - 合同剩余天数 */ @Transient @TableField(exist = false) private Long remainingDays; @Schema(description = "合同总价税率") @Column(columnDefinition = "decimal(10,2) comment '开票通知在 个工作日内 一煤机采购合同用'") private BigDecimal contractTax; } platformx-business-finance-api/src/main/java/com/by4cloud/platformx/business/entity/ContractDelayOut.java
New file @@ -0,0 +1,49 @@ package com.by4cloud.platformx.business.entity; import com.by4cloud.platformx.common.data.mybatis.BaseModel; import io.swagger.v3.oas.annotations.media.Schema; import jakarta.persistence.Column; import jakarta.persistence.Entity; import lombok.Data; import org.hibernate.annotations.Table; import java.util.Date; /** * 2026年6月9日 13:57:15 * syt */ @Data @Entity//加了才能自动生成表 @Table(appliesTo="contract_delay_out",comment = "合同延期出货")//给表加注释 @jakarta.persistence.Table(name = "contract_delay_out")//数据库创建的表明 public class ContractDelayOut extends BaseModel<ContractDelayOut> { @Schema(description = "合同ID") @Column(columnDefinition = "bigint comment '合同ID'") private Long contractId; @Schema(description = "延期天数") @Column(columnDefinition = "int comment '延期天数'") private Integer delayDay; @Schema(description = "延期单据名称") @Column(columnDefinition="VARCHAR(256) comment '客商名称'") private String delayAttNames; @Schema(description = "延期单据路径") @Column(columnDefinition="VARCHAR(256) comment '客商名称'") private String delayAttPaths; @Schema(description = "提交账号") @Column(columnDefinition="VARCHAR(64) comment '提交账号'") private String applyName; @Schema(description = "提交时间") @Column(columnDefinition="datetime comment '提交时间'") private Date applyTime; @Schema(description = "状态") @Column(columnDefinition="char comment '0/审核中 1/审核通过 2/审核不通过'") private String delayStatus; } platformx-business-finance-api/src/main/java/com/by4cloud/platformx/business/entity/ContractInvoice.java
@@ -58,6 +58,10 @@ @Column(columnDefinition="text comment '合同出库单ID'") private String outBoundId; @Schema(description = "发票预览参数") @Column(columnDefinition="text comment '发票预览参数'") private String invoicePreviewParam; @Schema(description = "红冲标识") @Column(columnDefinition="char comment '红冲标识 1/是 0/否 2/审核中 3/红冲待确认'") private String redReversal; platformx-business-finance-api/src/main/java/com/by4cloud/platformx/business/entity/ContractOutBound.java
@@ -83,6 +83,11 @@ @Column(columnDefinition = "char default 0 comment '开票状态(0-未开票 1-开票中 2-已开票)'") private String invoiceStatus; @Schema(description = "已开票数量") @Column(columnDefinition="decimal(10,2) comment '已开票数量'") private BigDecimal invoiceNum; // //以下开票相关 // // @Schema(description = "结算id") platformx-business-finance-api/src/main/java/com/by4cloud/platformx/business/vo/ContractDetailVo.java
@@ -7,6 +7,7 @@ import lombok.Data; import org.springframework.format.annotation.DateTimeFormat; import java.math.BigDecimal; import java.util.List; @Data @@ -95,6 +96,63 @@ @Schema(description = "执行日期后多少天生成应收") private Integer execDay; @Schema(description = "环境") private String environment; @Schema(description = "标准") private String standard; @Schema(description = "质保期 使用月数") private BigDecimal useMonth; @Schema(description = "质保期 发货后月数") private BigDecimal afterShipMonth; @Schema(description = "货运方式") private String shipMethod; @Schema(description = "货运地址") private String shipAddress; @Schema(description = "包装") private String packaging; @Schema(description = "维修或换货期限") private BigDecimal repairPeriod; @Schema(description = "维修或换货 违约金") private BigDecimal repairBreachAmount; @Schema(description = "货物数量不足 补货天数") private BigDecimal goodsShort; @Schema(description = "货物数量不足 违约金") private BigDecimal goodsShortBreachAmount; @Schema(description = "每逾期一日,承担本合同总额 违约金") private BigDecimal overdueBreachAmount; @Schema(description = "逾期 日以上的,甲方有权解除合同") private BigDecimal terminateContract; @Schema(description = "双方均可向 人民法院") private String court; @Schema(description = "本合同附件包括:") private String contractAttchment; @Schema(description = "合同签订市") private String city; @Schema(description = "合同签订区") private String region; @Schema(description = "开票通知在 个工作日内") private BigDecimal invoiceNotice; @Schema(description = "合同总价税率") private BigDecimal contractTax; private List<ContractPaymentSchedule> contractPaymentSchedule; private List<ContractSubjectMatter> contractSubjectMatter; platformx-business-finance-api/src/main/java/com/by4cloud/platformx/business/vo/ContractInvoiceOutBoundVo.java
@@ -21,9 +21,14 @@ private String materialInternalName; @Schema(description = "出库数量") @Column(columnDefinition="decimal(10,0) comment '出库数量'") private BigDecimal outBoundNum; @Schema(description = "开票数量") private BigDecimal invoiceNum; @Schema(description = "拟开票数量") private BigDecimal toInvoiceNum; @Schema(description = "单价") private BigDecimal unitPrice; platformx-business-finance-api/src/main/java/com/by4cloud/platformx/business/vo/ContractOutBoundInvoiceVo.java
New file @@ -0,0 +1,14 @@ package com.by4cloud.platformx.business.vo; import lombok.Data; import java.math.BigDecimal; @Data public class ContractOutBoundInvoiceVo { private String contractOutBoundId; private BigDecimal invoiceNum; } platformx-business-finance-api/src/main/java/com/by4cloud/platformx/business/vo/ContractPageVo.java
New file @@ -0,0 +1,187 @@ package com.by4cloud.platformx.business.vo; import com.fasterxml.jackson.annotation.JsonFormat; import io.swagger.v3.oas.annotations.media.Schema; import jakarta.persistence.Column; import lombok.Data; import org.springframework.format.annotation.DateTimeFormat; import java.math.BigDecimal; import java.util.Date; @Data public class ContractPageVo { private Long id; @Schema(description = "合同编号") private String contractNo; @Schema(description = "合同名称") private String contractName; @Schema(description = "甲方id") private Long partyAId; @Schema(description = "甲方名称") private String partyA; @Schema(description = "乙方id") private Long partyBId; @Schema(description = "乙方名称") private String partyB; @Schema(description = "合同金额") private BigDecimal amount; @Schema(description = "币种(CNY/USD等)") private String currency; @Schema(description = "合同类型(0-生成式 1-备案式)") private Integer contractType; @Schema(description = "供应属性 0-成品 1-备件 2-大修 3-其他") private Integer supplyAttribute; @Schema(description = "合同状态(0-草稿 1-已生效 2-已终止 3-已过期)") @Column(columnDefinition = "tinyint(2) default 0 comment '合同状态'") private Integer contractStatus; @Schema(description = "合同服务属性(0-产品销售 1-无形服务)") private Integer contractAttribute; @DateTimeFormat(pattern = "yyyy-MM-dd") @JsonFormat(pattern = "yyyy-MM-dd") @Schema(description = "签署日期") private Date signDate; @Schema(description = "签订地点") private String signPlace; @DateTimeFormat(pattern = "yyyy-MM-dd") @JsonFormat(pattern = "yyyy-MM-dd") @Schema(description = "生效日期") private Date effectiveDate; @Schema(description = "交付周期") private Integer deliveryCycle; @DateTimeFormat(pattern = "yyyy-MM-dd") @JsonFormat(pattern = "yyyy-MM-dd") @Schema(description = "到期日期") private Date expirationDate; @Schema(description = "合同附件URL") private String attachmentUrl; @Schema(description = "备注") private String remark; @Schema(description = "关联父合同id(用于合同变更时指向原合同)") private Long parentId; @DateTimeFormat(pattern = "yyyy-MM-dd HH:mm") @JsonFormat(pattern = "yyyy-MM-dd HH:mm") @Schema(description = "审批时间") private Date approveTime; @Schema(description = "到货节点ID") private Long arrivalScheduleId; @Schema(description = "验收节点ID") private Long acceptScheduleId; @Schema(description = "erp推送标识") private String erpPushFlag; @Schema(description = "开票状态") private String billingStatus; @Schema(description = "已开票金额") private BigDecimal billingAmout; @Schema(description = "下一阶段") private String nextScheduleName; @Schema(description = "模版ID") private Long templateId; @Schema(description = "销售模式") private String salesModel; @Schema(description = "已付款金额") private BigDecimal paidAmount; @Schema(description = "合同分类") private String contractCategory; @Schema(description = "执行周期") private String execFrequency; @Schema(description = "执行次数") private Integer execTimes; @Schema(description = "执行日期后多少天生成应收") private Integer execDay; @Schema(description = "环境") private String environment; @Schema(description = "标准") private String standard; @Schema(description = "质保期 使用月数") private BigDecimal useMonth; @Schema(description = "质保期 发货后月数") private BigDecimal afterShipMonth; @Schema(description = "货运方式") private String shipMethod; @Schema(description = "货运地址") private String shipAddress; @Schema(description = "包装") private String packaging; @Schema(description = "维修或换货期限") private BigDecimal repairPeriod; @Schema(description = "维修或换货 违约金") private BigDecimal repairBreachAmount; @Schema(description = "货物数量不足 补货天数") private BigDecimal goodsShort; @Schema(description = "货物数量不足 违约金") private BigDecimal goodsShortBreachAmount; @Schema(description = "每逾期一日,承担本合同总额 违约金") private BigDecimal overdueBreachAmount; @Schema(description = "逾期 日以上的,甲方有权解除合同") private BigDecimal terminateContract; @Schema(description = "双方均可向 人民法院") private String court; @Schema(description = "本合同附件包括:") private String contractAttchment; @Schema(description = "合同签订市") private String city; @Schema(description = "合同签订区") private String region; @Schema(description = "开票通知在 个工作日内") private BigDecimal invoiceNotice; @Schema(description = "合同总价税率") private BigDecimal contractTax; @Schema(description = "出库金额") private BigDecimal outAmount; } platformx-business-finance-biz/src/main/java/com/by4cloud/platformx/business/controller/ContractController.java
@@ -6,8 +6,10 @@ import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; import com.baomidou.mybatisplus.core.toolkit.Wrappers; import com.baomidou.mybatisplus.extension.plugins.pagination.Page; import com.by4cloud.platformx.business.dto.ContracQueryDTO; import com.by4cloud.platformx.business.dto.ContractAddDTO; import com.by4cloud.platformx.business.dto.ContractUpdateDTO; import com.by4cloud.platformx.business.dto.DelayOutApprovalDTO; import com.by4cloud.platformx.business.entity.Contract; import com.by4cloud.platformx.common.core.util.R; import com.by4cloud.platformx.common.data.mybatis.BaseModel; @@ -55,13 +57,13 @@ @Operation(summary = "分页查询" , description = "分页查询" ) @GetMapping("/page" ) @PreAuthorize("@pms.hasPermission('business_contract_view')" ) public R getContractPage(@ParameterObject Page page, @ParameterObject Contract contract) { public R getContractPage(@ParameterObject Page page, @ParameterObject ContracQueryDTO queryDTO) { LambdaQueryWrapper<Contract> wrapper = Wrappers.lambdaQuery(); wrapper.like(StringUtils.isNotBlank(contract.getContractName()),Contract::getContractName,contract.getContractName()); wrapper.like(StringUtils.isNotBlank(contract.getPartyA()),Contract::getPartyA,contract.getPartyA()); wrapper.eq(ObjUtil.isNotNull(contract.getContractStatus()),Contract::getContractStatus,contract.getContractStatus()); wrapper.orderByDesc(BaseModel::getCreateTime); return R.ok(contractService.pageByScope(page, wrapper)); // wrapper.like(StringUtils.isNotBlank(contract.getContractName()),Contract::getContractName,contract.getContractName()); // wrapper.like(StringUtils.isNotBlank(contract.getPartyA()),Contract::getPartyA,contract.getPartyA()); // wrapper.eq(ObjUtil.isNotNull(contract.getContractStatus()),Contract::getContractStatus,contract.getContractStatus()); // wrapper.orderByDesc(Contract::getCreateTime); return R.ok(contractService.pageScope(page, queryDTO)); } @@ -228,4 +230,14 @@ public void exportContractYMJCGWord(@PathVariable("id" ) Long id, HttpServletResponse response) { contractService.exportContractYMJCGWord(id,response); } /** * 延期出货审批 */ @PostMapping("/delayOutApproval") public R delayOutApproval(@RequestBody DelayOutApprovalDTO dto) { return contractService.delayOutApproval(dto); } } platformx-business-finance-biz/src/main/java/com/by4cloud/platformx/business/controller/FlowCallBackController.java
@@ -1,6 +1,9 @@ package com.by4cloud.platformx.business.controller; import com.baomidou.mybatisplus.core.toolkit.Wrappers; import com.by4cloud.platformx.business.constant.FlowNameEnum; import com.by4cloud.platformx.business.entity.ContractDelayOut; import com.by4cloud.platformx.business.service.ContractDelayOutService; import com.by4cloud.platformx.business.service.ContractInvoiceService; import com.by4cloud.platformx.business.service.ContractService; import com.by4cloud.platformx.flow.task.constant.TaskStatusEnum; @@ -28,6 +31,7 @@ private final ContractService contractService; private final ContractInvoiceService contractInvoiceService; private final ContractDelayOutService delayOutService; /** * 开始节点事件 @@ -70,6 +74,16 @@ contractInvoiceService.refuseApproval(Long.valueOf(processInstanceParamDto.getParamMap().get("id")+"")); } } if (processInstanceParamDto.getFlowName().equals(FlowNameEnum.延期出货审批.getName())) { //通过后更新主表状态 if (processInstanceParamDto.getTaskStatus()== TaskStatusEnum.YJS.getCode()){ delayOutService.approvalPass(Long.valueOf(processInstanceParamDto.getParamMap().get("contractId")+"")); } //拒绝后回退主表状态 if (processInstanceParamDto.getTaskStatus()== TaskStatusEnum.JJ.getCode()){ delayOutService.refuseApproval(Long.valueOf(processInstanceParamDto.getParamMap().get("delayOutService")+"")); } } } } platformx-business-finance-biz/src/main/java/com/by4cloud/platformx/business/mapper/ContractDelayOutMapper.java
New file @@ -0,0 +1,11 @@ package com.by4cloud.platformx.business.mapper; import com.by4cloud.platformx.business.entity.ContractDelayOut; import com.by4cloud.platformx.common.data.datascope.PlatformxBaseMapper; import org.apache.ibatis.annotations.Mapper; @Mapper public interface ContractDelayOutMapper extends PlatformxBaseMapper<ContractDelayOut> { } platformx-business-finance-biz/src/main/java/com/by4cloud/platformx/business/mapper/ContractMapper.java
@@ -2,6 +2,7 @@ import com.baomidou.mybatisplus.extension.plugins.pagination.Page; import com.by4cloud.platformx.business.dto.AnalysisCommonDTO; import com.by4cloud.platformx.business.dto.ContracQueryDTO; import com.by4cloud.platformx.business.dto.CreditSalesQueryDTO; import com.by4cloud.platformx.business.entity.Contract; import com.by4cloud.platformx.business.vo.*; @@ -59,4 +60,6 @@ ,@Param("compIds")List<Long> compIds,@Param("smjCompId") Long smj, @Param("sgbCompId")Long sgb, @Param("jxcCompId")Long jxc, @Param("tfCompId") Long tfgs,@Param("ymjCompId") Long ymj); Page<ContractPageVo> pageScope(Page page,@Param("queryDTO") ContracQueryDTO queryDTO, DataScope comp_id); } platformx-business-finance-biz/src/main/java/com/by4cloud/platformx/business/service/ContractDelayOutService.java
New file @@ -0,0 +1,7 @@ package com.by4cloud.platformx.business.service; public interface ContractDelayOutService { void approvalPass(Long contractId); void refuseApproval(Long contractId); } platformx-business-finance-biz/src/main/java/com/by4cloud/platformx/business/service/ContractService.java
@@ -1,8 +1,11 @@ package com.by4cloud.platformx.business.service; import com.baomidou.mybatisplus.extension.plugins.pagination.Page; import com.by4cloud.platformx.business.dto.ContracQueryDTO; import com.by4cloud.platformx.business.dto.ContractAddDTO; import com.by4cloud.platformx.business.dto.ContractUpdateDTO; import com.by4cloud.platformx.business.dto.DelayOutApprovalDTO; import com.by4cloud.platformx.business.entity.Contract; import com.by4cloud.platformx.business.vo.ContractDetailVo; import com.by4cloud.platformx.common.core.util.R; @@ -44,4 +47,8 @@ void exportContractYMJGKCPMMWord(Long id, HttpServletResponse response); void exportContractYMJCGWord(Long id, HttpServletResponse response); R delayOutApproval(DelayOutApprovalDTO dto); Page pageScope(Page page, ContracQueryDTO queryDTO); } platformx-business-finance-biz/src/main/java/com/by4cloud/platformx/business/service/impl/ContractDelayOutServiceImpl.java
New file @@ -0,0 +1,54 @@ package com.by4cloud.platformx.business.service.impl; import cn.hutool.core.date.DateUtil; import cn.hutool.core.util.ObjUtil; import com.baomidou.mybatisplus.core.toolkit.Wrappers; import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; import com.by4cloud.platformx.business.entity.Contract; import com.by4cloud.platformx.business.entity.ContractDelayOut; import com.by4cloud.platformx.business.mapper.ContractDelayOutMapper; import com.by4cloud.platformx.business.mapper.ContractMapper; import com.by4cloud.platformx.business.service.ContractDelayOutService; import lombok.RequiredArgsConstructor; import lombok.extern.slf4j.Slf4j; import org.springframework.stereotype.Service; @Slf4j @Service @RequiredArgsConstructor public class ContractDelayOutServiceImpl extends ServiceImpl<ContractDelayOutMapper, ContractDelayOut> implements ContractDelayOutService { private final ContractMapper contractMapper; @Override public void approvalPass(Long contractId) { ContractDelayOut delayOut = baseMapper.selectOne(Wrappers.<ContractDelayOut>lambdaQuery().eq(ContractDelayOut::getContractId,contractId) .eq(ContractDelayOut::getDelayStatus,"0").last("limit 1")); if (ObjUtil.isNull(delayOut)){ log.error("合同延期发货审批同意后查询审批数据异常"); return; } delayOut.setDelayStatus("1"); baseMapper.updateById(delayOut); Contract contract = contractMapper.selectById(contractId); if (ObjUtil.isNull(contract)){ log.error("合同延期发货审批同意后查询合同数据异常"); return; } contract.setExpirationDate(DateUtil.offsetDay(contract.getExpirationDate(),delayOut.getDelayDay())); contractMapper.updateById(contract); } @Override public void refuseApproval(Long contractId) { ContractDelayOut delayOut = baseMapper.selectOne(Wrappers.<ContractDelayOut>lambdaQuery().eq(ContractDelayOut::getContractId,contractId) .eq(ContractDelayOut::getDelayStatus,"0").last("limit 1")); if (ObjUtil.isNull(delayOut)){ log.error("合同延期发货审批同意后查询审批数据异常"); return; } delayOut.setDelayStatus("2"); baseMapper.updateById(delayOut); } } platformx-business-finance-biz/src/main/java/com/by4cloud/platformx/business/service/impl/ContractInvoiceServiceImpl.java
@@ -25,10 +25,7 @@ import com.by4cloud.platformx.business.mapper.*; import com.by4cloud.platformx.business.service.ContractInvoiceService; import com.by4cloud.platformx.business.service.PaymentConfirmService; import com.by4cloud.platformx.business.vo.ContractInvoiceOutBoundVo; import com.by4cloud.platformx.business.vo.ContractOutBoundMergeVo; import com.by4cloud.platformx.business.vo.GenInvoiceInfoVo; import com.by4cloud.platformx.business.vo.InvoiceItemVo; import com.by4cloud.platformx.business.vo.*; import com.by4cloud.platformx.common.core.util.R; import com.by4cloud.platformx.common.data.mybatis.BaseModel; import com.by4cloud.platformx.common.security.util.SecurityUtils; @@ -88,15 +85,21 @@ .selectAll(ContractOutBound.class) .eq(ContractOutBound::getContractId, contractId); List<ContractInvoiceOutBoundVo> invoiceOutBoundVoList = contractOutBoundMapper.selectJoinList(ContractInvoiceOutBoundVo.class, wrapper); if (ArrayUtil.isNotEmpty(invoiceOutBoundVoList.toArray())){ invoiceOutBoundVoList.stream().forEach(contractInvoiceOutBoundVo -> { contractInvoiceOutBoundVo.setInvoiceNum(contractInvoiceOutBoundVo.getOutBoundNum().subtract(contractInvoiceOutBoundVo.getInvoiceNum())); contractInvoiceOutBoundVo.setToInvoiceNum(contractInvoiceOutBoundVo.getInvoiceNum()); }); } return R.ok(invoiceOutBoundVoList); } @Override public R genInvoiceInfo(GenInvoiceInfoDTO genInvoiceInfoDTO) { if (ArrayUtil.isEmpty(genInvoiceInfoDTO.getContractOutBoundIds())) { if (ArrayUtil.isEmpty(genInvoiceInfoDTO.getOutBoundInvoiceList())) { return R.failed("请选择开票出库单后再操作"); } ContractOutBound outBound = contractOutBoundMapper.selectById(genInvoiceInfoDTO.getContractOutBoundIds().get(0)); ContractOutBound outBound = contractOutBoundMapper.selectById(genInvoiceInfoDTO.getOutBoundInvoiceList().get(0).getContractOutBoundId()); Contract contract = contractMapper.selectById(outBound.getContractId()); if (ObjUtil.isNull(contract)) { return R.failed("合同信息异常,请联系技术人员"); @@ -125,16 +128,18 @@ List<InvoiceItemVo> invoiceItemVoList = new ArrayList<>(); List<String> erpCode = new ArrayList<>(); List<ContractOutBoundMergeVo> mergeOutBounds = new ArrayList<>(); List<ContractOutBound> outBounds = contractOutBoundMapper.selectList(Wrappers.<ContractOutBound>lambdaQuery() .in(ContractOutBound::getId, genInvoiceInfoDTO.getContractOutBoundIds())); if (ArrayUtil.isNotEmpty(outBounds.toArray())) { outBounds.stream().forEach(contractOutBound -> { // List<ContractOutBound> outBounds = contractOutBoundMapper.selectList(Wrappers.<ContractOutBound>lambdaQuery() // .in(ContractOutBound::getId, genInvoiceInfoDTO.getOutBoundInvoiceList().stream().map(item->item.getContractOutBoundId()).collect(Collectors.toList()))); if (ArrayUtil.isNotEmpty(genInvoiceInfoDTO.getOutBoundInvoiceList().toArray())) { genInvoiceInfoDTO.getOutBoundInvoiceList().stream().forEach(contractOutBoundInvoiceVo -> { ContractOutBound contractOutBound = contractOutBoundMapper.selectById(contractOutBoundInvoiceVo.getContractOutBoundId()); if (!ArrayUtil.contains(erpCode.toArray(), contractOutBound.getSubjectMatterCode())) { erpCode.add(contractOutBound.getSubjectMatterCode()); ContractOutBoundMergeVo mergeVo = new ContractOutBoundMergeVo(); mergeVo.setMaterialCode(contractOutBound.getSubjectMatterCode()); mergeVo.setMaterialInternalName(contractOutBound.getSubjectMatterName()); mergeVo.setQuantity(contractOutBound.getOutBoundNum()); mergeVo.setQuantity(contractOutBoundInvoiceVo.getInvoiceNum()); Product product = productMapper.selectOne(Wrappers.<Product>lambdaQuery().eq(Product::getErpCode, contractOutBound.getSubjectMatterCode()) .eq(Product::getCompId, SecurityUtils.getUser().getCompId()).last("limit 1")); if (ObjUtil.isNotNull(product)) { @@ -183,10 +188,10 @@ @Override public R toInvoice(GenInvoiceInfoDTO genInvoiceInfoDTO) { if (ArrayUtil.isEmpty(genInvoiceInfoDTO.getContractOutBoundIds().toArray())) { if (ArrayUtil.isEmpty(genInvoiceInfoDTO.getOutBoundInvoiceList().toArray())) { return R.failed("请选择开票出库单后再操作"); } ContractOutBound outBound = contractOutBoundMapper.selectById(genInvoiceInfoDTO.getContractOutBoundIds().get(0)); ContractOutBound outBound = contractOutBoundMapper.selectById(genInvoiceInfoDTO.getOutBoundInvoiceList().get(0).getContractOutBoundId()); Contract contract = contractMapper.selectById(outBound.getContractId()); if (ObjUtil.isNull(contract)) { return R.failed("合同信息异常,请联系技术人员"); @@ -198,7 +203,7 @@ SysDept b = r.getData(); GenInvoiceInfoVo vo = genInvoiceInfoVo(genInvoiceInfoDTO, contract, b); //发票保存 ContractInvoice invoice = saveContractInvoice(vo, contract, genInvoiceInfoDTO.getContractOutBoundIds(), DateUtil.current() + ""); ContractInvoice invoice = saveContractInvoice(vo, contract, genInvoiceInfoDTO.getOutBoundInvoiceList(), DateUtil.current() + ""); //启动流程 ProcessInstanceParamDto dto = new ProcessInstanceParamDto(); Map<String, Object> map = BeanUtil.beanToMap(invoice); @@ -209,9 +214,10 @@ return R.failed("流程启动失败"); } //更新合同出库单状态 genInvoiceInfoDTO.getContractOutBoundIds().stream().forEach(outBoundId -> { ContractOutBound bound = contractOutBoundMapper.selectById(outBoundId); genInvoiceInfoDTO.getOutBoundInvoiceList().stream().forEach(contractOutBoundInvoiceVo -> { ContractOutBound bound = contractOutBoundMapper.selectById(contractOutBoundInvoiceVo.getContractOutBoundId()); bound.setInvoiceStatus("1"); bound.setInvoiceNum(bound.getInvoiceNum().add(contractOutBoundInvoiceVo.getInvoiceNum())); contractOutBoundMapper.updateById(bound); }); return R.ok(); @@ -271,7 +277,7 @@ return jsonObject; } private ContractInvoice saveContractInvoice(GenInvoiceInfoVo genInvoiceInfoVo, Contract contract, List<Long> outBoundIds, String serialNo) { private ContractInvoice saveContractInvoice(GenInvoiceInfoVo genInvoiceInfoVo, Contract contract, List<ContractOutBoundInvoiceVo> outBoundInvoiceVoList, String serialNo) { ContractInvoice invoice = new ContractInvoice(); invoice.setContractId(contract.getId()); invoice.setInvoiceCategory("1"); @@ -286,9 +292,10 @@ invoice.setInvoicePreview(JSONObject.toJSONString(genInvoiceInfoVo)); invoice.setInvoiceStatus("1"); invoice.setApprovalStatus("0"); invoice.setOutBoundId(outBoundIds.stream() .map(String::valueOf) // 或者 .map(Object::toString) invoice.setOutBoundId(outBoundInvoiceVoList.stream() .map(item-> String.valueOf(item.getContractOutBoundId())) // 或者 .map(Object::toString) .collect(Collectors.joining(","))); invoice.setInvoicePreviewParam(JSONObject.toJSONString(outBoundInvoiceVoList)); baseMapper.insert(invoice); return invoice; } @@ -327,6 +334,7 @@ invoice.setSerialNo(DateUtil.current() + ""); invoice.setBlueInvoiceId(invoiceId); invoice.setApprovalStatus("0"); invoice.setInvoicePreviewParam(blueInvoice.getInvoicePreviewParam()); baseMapper.insert(invoice); //启动流程 ProcessInstanceParamDto dto = new ProcessInstanceParamDto(); @@ -625,12 +633,14 @@ contractMapper.updateById(contract); //更新合同出库单状态 String[] outBoundIds = blueInvoice.getOutBoundId().split(","); Arrays.stream(outBoundIds).forEach(outBoundId -> { ContractOutBound bound = contractOutBoundMapper.selectById(outBoundId); bound.setInvoiceStatus("0"); contractOutBoundMapper.updateById(bound); }); List<ContractOutBoundInvoiceVo> outBoundInvoiceVoList = BeanUtil.copyToList(JSONArray.parseArray(blueInvoice.getInvoicePreviewParam()),ContractOutBoundInvoiceVo.class); if (ArrayUtil.isNotEmpty(outBoundInvoiceVoList.toArray())){ outBoundInvoiceVoList.stream().forEach(contractOutBoundInvoiceVo -> { ContractOutBound contractOutBound = contractOutBoundMapper.selectById(contractOutBoundInvoiceVo.getContractOutBoundId()); contractOutBound.setInvoiceNum(contractOutBound.getInvoiceNum().subtract(contractOutBoundInvoiceVo.getInvoiceNum())); contractOutBoundMapper.updateById(contractOutBound); }); } } invoice.setApprovalStatus("1"); baseMapper.updateById(invoice); platformx-business-finance-biz/src/main/java/com/by4cloud/platformx/business/service/impl/ContractServiceImpl.java
@@ -8,19 +8,23 @@ import cn.hutool.core.util.ObjUtil; import cn.hutool.core.util.StrUtil; import com.baomidou.mybatisplus.core.toolkit.Wrappers; import com.baomidou.mybatisplus.extension.plugins.pagination.Page; import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; import com.by4cloud.platformx.admin.api.entity.SysDept; import com.by4cloud.platformx.admin.api.feign.RemoteDeptService; import com.by4cloud.platformx.business.api.feign.RemoteFlowProcessService; import com.by4cloud.platformx.business.constant.FlowNameEnum; import com.by4cloud.platformx.business.dto.ContracQueryDTO; import com.by4cloud.platformx.business.dto.ContractAddDTO; import com.by4cloud.platformx.business.dto.ContractUpdateDTO; import com.by4cloud.platformx.business.dto.DelayOutApprovalDTO; import com.by4cloud.platformx.business.entity.*; import com.by4cloud.platformx.business.mapper.*; import com.by4cloud.platformx.business.service.ContractService; import com.by4cloud.platformx.business.utils.ContractNumberGenerator; import com.by4cloud.platformx.business.vo.ContractDetailVo; import com.by4cloud.platformx.common.core.util.R; import com.by4cloud.platformx.common.data.datascope.DataScope; import com.by4cloud.platformx.common.security.util.SecurityUtils; import com.by4cloud.platformx.flow.task.dto.ProcessInstanceParamDto; import com.deepoove.poi.XWPFTemplate; @@ -61,9 +65,7 @@ private final RemoteFlowProcessService remoteFlowProcessService; private final ProductMapper productMapper; private final RemoteDeptService remoteDeptService; @Value("${file.local.base-path}") private String basePath; private final ContractDelayOutMapper contractDelayOutMapper; @Override public R add(ContractAddDTO addDTO) { @@ -74,8 +76,12 @@ contract.setPaidAmount(new BigDecimal("0")); contract.setBillingStatus("0"); contract.setErpPushFlag("0"); List<Contract> contracts; contracts = baseMapper.selectList(Wrappers.<Contract>lambdaQuery().eq(Contract::getContractNo, contract.getContractNo())); if (StrUtil.isNotEmpty(addDTO.getContractCategory()) && ( StrUtil.equals(addDTO.getContractCategory(), "ymjgkcpmm")||StrUtil.equals(addDTO.getContractCategory(), "ymjgypmm"))) { contract.setExpirationDate(DateUtil.offsetDay(contract.getSignDate(),contract.getDeliveryCycle())); } List<Contract> contracts = baseMapper.selectList(Wrappers.<Contract>lambdaQuery().eq(Contract::getContractNo, contract.getContractNo())); while (ArrayUtil.isNotEmpty(contracts.toArray())) { contract.setContractNo(ContractNumberGenerator.generateContractNumber()); contracts = baseMapper.selectList(Wrappers.<Contract>lambdaQuery().eq(Contract::getContractNo, contract.getContractNo())); @@ -102,6 +108,12 @@ record.setBusGuestName(contract.getPartyA()); record.setMeterReadTime(new Date()); meterReadRecordMapper.insert(record); } if (StrUtil.isNotEmpty(addDTO.getContractCategory()) && StrUtil.equals(addDTO.getContractCategory(), "ymjcg") &&ObjUtil.isNotNull(subjectMatter.getPlannedDeliveryDate())&&ObjUtil.isNotNull(contract.getExpirationDate()) &&DateUtil.compare(contract.getExpirationDate(),subjectMatter.getPlannedDeliveryDate())>0) { contract.setExpirationDate(subjectMatter.getPlannedDeliveryDate()); baseMapper.updateById(contract); } }); @@ -144,9 +156,6 @@ } if (StrUtil.isNotEmpty(addDTO.getContractCategory()) && StrUtil.equals(addDTO.getContractCategory(), "water_house")) { } return R.ok(); } @@ -267,58 +276,111 @@ if (StrUtil.isNotEmpty(contract.getContractCategory()) && StrUtil.equals(contract.getContractCategory(), "water_house")) { List<ContractSubjectMatter> subjectMatterList = contractSubjectMatterMapper.selectList(Wrappers.<ContractSubjectMatter>lambdaQuery() .eq(ContractSubjectMatter::getContractId,id)); if (ArrayUtil.isNotEmpty(subjectMatterList.toArray())) { subjectMatterList.stream().forEach(contractSubjectMatter -> { //循环日期 Date execDate0 = DateUtil.offsetDay(contract.getSignDate(), contract.getExecDay()); for (int i = 0; i < contract.getExecTimes(); i++) { if (StrUtil.equals(contract.getExecFrequency(), "1")) { if (StrUtil.equals(contract.getExecFrequency(), "1")) { Long weeksTrue = DateUtil.betweenWeek(DateUtil.beginOfWeek(contract.getEffectiveDate()), DateUtil.endOfWeek(contract.getExpirationDate()), true); //循环日期 Date execDate0 = DateUtil.offsetDay(DateUtil.beginOfWeek(contract.getEffectiveDate()), contract.getExecDay()); for (int i = 0; i < weeksTrue.intValue(); i++) { Date execDatei = DateUtil.offsetWeek(execDate0, i); ContractExecDate execDate = new ContractExecDate(); execDate.setContractId(contract.getId()); execDate.setMatterId(contractSubjectMatter.getId()); execDate.setExecDate(execDatei); execDate.setGenFlag("0"); contractExecDateMapper.insert(execDate); } if (StrUtil.equals(contract.getExecFrequency(), "2")) { Date execDatei = DateUtil.offsetMonth(execDate0, i ); ContractExecDate execDate = new ContractExecDate(); execDate.setContractId(contract.getId()); execDate.setMatterId(contractSubjectMatter.getId()); execDate.setExecDate(execDatei); execDate.setGenFlag("0"); contractExecDateMapper.insert(execDate); } if (StrUtil.equals(contract.getExecFrequency(), "3")) { Date execDatei = DateUtil.offsetMonth(execDate0, i * 3); ContractExecDate execDate = new ContractExecDate(); execDate.setContractId(contract.getId()); execDate.setMatterId(contractSubjectMatter.getId()); execDate.setExecDate(execDatei); execDate.setGenFlag("0"); contractExecDateMapper.insert(execDate); } if (StrUtil.equals(contract.getExecFrequency(), "4")) { Date execDatei = DateUtil.offsetMonth(execDate0, i * 6); ContractExecDate execDate = new ContractExecDate(); execDate.setContractId(contract.getId()); execDate.setMatterId(contractSubjectMatter.getId()); execDate.setExecDate(execDatei); execDate.setGenFlag("0"); contractExecDateMapper.insert(execDate); } if (StrUtil.equals(contract.getExecFrequency(), "5")) { Date execDatei = DateUtil.offsetYear(execDate0, i); ContractExecDate execDate = new ContractExecDate(); execDate.setContractId(contract.getId()); execDate.setMatterId(contractSubjectMatter.getId()); execDate.setExecDate(execDatei); execDate.setGenFlag("0"); contractExecDateMapper.insert(execDate); if (DateUtil.isIn(execDatei,contract.getEffectiveDate(),contract.getExpirationDate())) { contractExecDateMapper.insert(execDate); } } } if (StrUtil.equals(contract.getExecFrequency(), "2")) { Long weeksTrue = DateUtil.betweenMonth(DateUtil.beginOfMonth(contract.getEffectiveDate()), DateUtil.endOfMonth(contract.getExpirationDate()), true); //循环日期 Date execDate0 = DateUtil.offsetDay(DateUtil.beginOfMonth(contract.getEffectiveDate()), contract.getExecDay()); for (int i = 0; i < weeksTrue.intValue(); i++) { Date execDatei = DateUtil.offsetMonth(execDate0, i); ContractExecDate execDate = new ContractExecDate(); execDate.setContractId(contract.getId()); execDate.setMatterId(contractSubjectMatter.getId()); execDate.setExecDate(execDatei); execDate.setGenFlag("0"); if (DateUtil.isIn(execDatei,contract.getEffectiveDate(),contract.getExpirationDate())) { contractExecDateMapper.insert(execDate); } } } if (StrUtil.equals(contract.getExecFrequency(), "3")) { Long weeksTrue = DateUtil.betweenMonth(DateUtil.beginOfQuarter(contract.getEffectiveDate()), DateUtil.endOfQuarter(contract.getExpirationDate()), true)/3; //循环日期 Date execDate0 = DateUtil.offsetDay(DateUtil.beginOfWeek(contract.getExpirationDate()), contract.getExecDay()); for (int i = 0; i < weeksTrue.intValue(); i++) { Date execDatei = DateUtil.offsetMonth(execDate0, i*3); ContractExecDate execDate = new ContractExecDate(); execDate.setContractId(contract.getId()); execDate.setMatterId(contractSubjectMatter.getId()); execDate.setExecDate(execDatei); execDate.setGenFlag("0"); if (DateUtil.isIn(execDatei,contract.getEffectiveDate(),contract.getExpirationDate())) { contractExecDateMapper.insert(execDate); } } } if (StrUtil.equals(contract.getExecFrequency(), "4")) { Date startDate = contract.getEffectiveDate(); Date endDate = contract.getExpirationDate(); Integer startMonth = DateUtil.month(contract.getEffectiveDate()); Integer endMonth = DateUtil.month(contract.getExpirationDate()); if (1<=startMonth&&startMonth<=6){ startDate = DateUtil.beginOfYear(startDate); } if (7<=startMonth&&startMonth<=12){ startDate = DateUtil.offsetMonth(DateUtil.beginOfYear(startDate),6); } if (1<=endMonth&&endMonth<=6){ endDate = DateUtil.offsetMonth(DateUtil.endOfYear(endDate),-6); } if (7<=endMonth&&endMonth<=12){ endDate = DateUtil.endOfYear(endDate); } Long weeksTrue = DateUtil.betweenMonth(startDate,endDate, true)/6; //循环日期 Date execDate0 = DateUtil.offsetDay(DateUtil.beginOfWeek(contract.getExpirationDate()), contract.getExecDay()); for (int i = 0; i < weeksTrue.intValue(); i++) { Date execDatei = DateUtil.offsetMonth(execDate0, i*6); ContractExecDate execDate = new ContractExecDate(); execDate.setContractId(contract.getId()); execDate.setMatterId(contractSubjectMatter.getId()); execDate.setExecDate(execDatei); execDate.setGenFlag("0"); if (DateUtil.isIn(execDatei,contract.getEffectiveDate(),contract.getExpirationDate())) { contractExecDateMapper.insert(execDate); } } } if (StrUtil.equals(contract.getExecFrequency(), "5")) { Long weeksTrue = DateUtil.betweenWeek(DateUtil.beginOfYear(contract.getEffectiveDate()), DateUtil.endOfYear(contract.getExpirationDate()), true); //循环日期 Date execDate0 = DateUtil.offsetDay(DateUtil.beginOfYear(contract.getEffectiveDate()), contract.getExecDay()); for (int i = 0; i < weeksTrue.intValue(); i++) { Date execDatei = DateUtil.offsetWeek(execDate0, i); ContractExecDate execDate = new ContractExecDate(); execDate.setContractId(contract.getId()); execDate.setMatterId(contractSubjectMatter.getId()); execDate.setExecDate(execDatei); execDate.setGenFlag("0"); if (DateUtil.isIn(execDatei,contract.getEffectiveDate(),contract.getExpirationDate())) { contractExecDateMapper.insert(execDate); } } } }); } } else { @@ -972,6 +1034,8 @@ map.put("court",contract.getCourt()); map.put("contractAttchment",contract.getContractAttchment()); map.put("invoiceNotice",contract.getInvoiceNotice()); map.put("city",contract.getCity()); map.put("region",contract.getRegion()); //标的物 List<Map<String, Object>> items = new ArrayList<>(); @@ -1073,4 +1137,35 @@ e.printStackTrace(); } } @Override public R delayOutApproval(DelayOutApprovalDTO dto) { Contract contract = baseMapper.selectById(dto.getContractId()); ContractDelayOut delayOut = BeanUtil.copyProperties(dto,ContractDelayOut.class); delayOut.setApplyTime(new Date()); delayOut.setApplyName(SecurityUtils.getUser().getUsername()); delayOut.setDelayStatus("0"); Map<String,Object> map = new HashMap<>(); map.put("contractId",contract.getId()); map.put("contractName",contract.getContractName()); map.put("delayDay",dto.getDelayDay()); map.put("applyName",SecurityUtils.getUser().getUsername()); map.put("applyTime",DateUtil.format(delayOut.getApplyTime(),DatePattern.NORM_DATETIME_FORMAT)); //启动流程 ProcessInstanceParamDto paramDto = new ProcessInstanceParamDto(); paramDto.setParamMap(map); paramDto.setFlowName(FlowNameEnum.延期出货审批.name()); R r1 = remoteFlowProcessService.startProcessInstance(paramDto); if (r1.getCode() == 1) { return R.failed("流程启动失败"); } contractDelayOutMapper.insert(delayOut); return R.ok(); } @Override public Page pageScope(Page page, ContracQueryDTO queryDTO) { return baseMapper.pageScope(page,queryDTO, DataScope.of("comp_id")); } } platformx-business-finance-biz/src/main/java/com/by4cloud/platformx/business/service/impl/OutBoundServiceImpl.java
@@ -53,6 +53,7 @@ .in(ContractSubjectMatter::getMaterialCode, addDTO.getSubjectMatterList().stream().map(item -> item.getSubjectMatterCode()).collect(Collectors.toList())) .exists(Contract.class, contractQuery -> contractQuery.select(ContractSubjectMatter::getId) .eq(Contract::getContractStatus,2) .eq(Contract::getId, ContractSubjectMatter::getContractId) .eq(StrUtil.isNotBlank(addDTO.getBusGuestName()), Contract::getPartyA, addDTO.getBusGuestName()) .eq(ObjUtil.isNotNull(addDTO.getBusGuestId()), Contract::getPartyAId, addDTO.getBusGuestId()) @@ -93,7 +94,7 @@ if (subjectMatter.getDeliveredQuantity().compareTo(new BigDecimal("0")) > 0) { remainNum = remainNum.subtract(subjectMatter.getRemainingQuantity()); //部分交付状态下 全部出库 if (remainNum.compareTo(new BigDecimal("0")) >= 0) { if (remainNum.compareTo(new BigDecimal("0")) > 0) { BigDecimal currentOut = subjectMatter.getRemainingQuantity(); subjectMatter.setDeliveredQuantity(subjectMatter.getQuantity()); subjectMatter.setRemainingQuantity(new BigDecimal("0")); @@ -121,7 +122,7 @@ } else { //未交付状态下 remainNum = remainNum.subtract(subjectMatter.getQuantity()); if (remainNum.compareTo(new BigDecimal("0")) >= 0) { if (remainNum.compareTo(new BigDecimal("0")) > 0) { subjectMatter.setDeliveredQuantity(subjectMatter.getQuantity()); subjectMatter.setRemainingQuantity(new BigDecimal("0")); subjectMatter.setActualDeliveryDate(DateUtil.today()); @@ -385,6 +386,7 @@ contractOutBound.setOutBoundAttPaths(addDTO.getOutBoundAttPaths()); contractOutBound.setOutBoundId(outBoundId); contractOutBound.setInvoiceStatus("0"); contractOutBound.setInvoiceNum(new BigDecimal("0")); contractOutBoundMapper.insert(contractOutBound); if (StrUtil.isEmpty(contract.getContractCategory())){ if (DateUtil.compare(addDTO.getOutBoundTime(),contract.getExpirationDate())>0){ platformx-business-finance-biz/src/main/resources/mapper/ContractDelayOutMapper.xml
New file @@ -0,0 +1,23 @@ <?xml version="1.0" encoding="UTF-8"?> <!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd"> <mapper namespace="com.by4cloud.platformx.business.mapper.ContractDelayOutMapper"> <resultMap id="contractOutBoundMap" type="com.by4cloud.platformx.business.entity.ContractDelayOut"> <id property="id" column="id"/> <result property="compId" column="comp_id"/> <result property="contractId" column="contract_id"/> <result property="delayDay" column="contract_name"/> <result property="delayAttNames" column="delay_att_names"/> <result property="delayAttPaths" column="delay_att_paths"/> <result property="applyName" column="apply_name"/> <result property="applyTime" column="apply_time"/> <result property="delayStatus" column="delay_status"/> <result property="createBy" column="create_by"/> <result property="createTime" column="create_time"/> <result property="updateBy" column="update_by"/> <result property="updateTime" column="update_time"/> <result property="delFlag" column="del_flag"/> </resultMap> </mapper> platformx-business-finance-biz/src/main/resources/mapper/ContractMapper.xml
@@ -1008,4 +1008,83 @@ b.sales_model </select> <select id="pageScope" resultType="com.by4cloud.platformx.business.vo.ContractPageVo"> SELECT id, contract_no, contract_name, party_a_id, party_a, party_b_id, party_b, amount, currency, contract_type, supply_attribute, contract_status, contract_attribute, sign_date, sign_place, effective_date, delivery_cycle, expiration_date, attachment_url, remark, parent_id, approve_time, arrival_schedule_id, accept_schedule_id, erp_push_flag, billing_status, billing_amout, next_schedule_name, template_id, sales_model, paid_amount, contract_category, exec_frequency, exec_times, exec_day, environment, standard, use_month, after_ship_month, ship_method, ship_address, packaging, repair_period, repair_breach_amount, goods_short, goods_short_breach_amount, overdue_breach_amount, terminate_contract, court, contract_attchment, city, region, invoice_notice, contract_tax, create_by, update_by, create_time, update_time, del_flag, comp_id, (select sum(delivered_quantity*unit_price) from contract_subject_matter csm where csm.contract_id = c.id) outAmount FROM contract c WHERE del_flag = '0' <if test="queryDTO.contractName !=null and queryDTO.contractName !=''"> AND contract_name LIKE CONCAT('%', #{queryDTO.contractName}, '%') </if> <if test="queryDTO.partyA !=null and queryDTO.partyA !=''"> AND party_a LIKE CONCAT('%', #{queryDTO.partyA}, '%') </if> <if test="queryDTO.contractStatus !=null and queryDTO.contractStatus !=''"> AND contract_status = #{queryDTO.contractStatus} </if> ORDER BY create_time DESC </select> </mapper>