diff --git a/pusong-modules/pusong-business/src/main/java/com/pusong/business/controller/PsContractPayController.java b/pusong-modules/pusong-business/src/main/java/com/pusong/business/controller/PsContractPayController.java index 2606d5f..f6e9930 100644 --- a/pusong-modules/pusong-business/src/main/java/com/pusong/business/controller/PsContractPayController.java +++ b/pusong-modules/pusong-business/src/main/java/com/pusong/business/controller/PsContractPayController.java @@ -2,6 +2,7 @@ package com.pusong.business.controller; import java.util.List; +import com.pusong.business.domain.vo.PsRefundVo; import lombok.RequiredArgsConstructor; import jakarta.servlet.http.HttpServletResponse; import jakarta.validation.constraints.*; @@ -21,6 +22,7 @@ import com.pusong.business.domain.vo.PsContractPayVo; import com.pusong.business.domain.bo.PsContractPayBo; import com.pusong.business.service.IPsContractPayService; import com.pusong.common.mybatis.core.page.TableDataInfo; +import org.springframework.web.multipart.MultipartFile; /** * 合同回款记录 @@ -59,15 +61,38 @@ public class PsContractPayController extends BaseController { /** * 修改合同回款记录 */ -// @SaCheckPermission("business:contractPay:edit") -// @Log(title = "合同回款记录", businessType = BusinessType.UPDATE) -// @RepeatSubmit() -// @PutMapping() -// public R edit(@Validated(EditGroup.class) @RequestBody PsContractPayBo bo) { -// return toAjax(psContractPayService.updateById(bo)); -// } - + @SaCheckPermission("business:contractPay:edit") + @Log(title = "合同回款记录", businessType = BusinessType.UPDATE) + @RepeatSubmit() + @PutMapping() + public R edit(@Validated(EditGroup.class) @RequestBody PsContractPayBo bo) { + psContractPayService.updateByBo(bo); + return R.ok(); + } + /** + * 退款列表查询 + * @param payStatus 支付状态 + * @param pageQuery + * @return + */ + @SaCheckPermission("business:contractPay:query") + @GetMapping("/queryRefundList") + public TableDataInfo queryRefundList( String payStatus,PageQuery pageQuery) { + return psContractPayService.queryRefundList(pageQuery,payStatus); + } + /** + * 完成退款 + * @param files 附件图片 + * @param id 任务id + * @return + */ + @SaCheckPermission("business:contractPay:query") + @GetMapping("/refundFinish") + public R refundFinish(@RequestPart("files") List files, @NotNull Long id) { + psContractPayService.refundFinish(files,id); + return R.ok(); + } /** * 导出合同回款记录列表 *//* diff --git a/pusong-modules/pusong-business/src/main/java/com/pusong/business/domain/PsApproverRecord.java b/pusong-modules/pusong-business/src/main/java/com/pusong/business/domain/PsApproverRecord.java index 5515885..c48a439 100644 --- a/pusong-modules/pusong-business/src/main/java/com/pusong/business/domain/PsApproverRecord.java +++ b/pusong-modules/pusong-business/src/main/java/com/pusong/business/domain/PsApproverRecord.java @@ -34,6 +34,10 @@ public class PsApproverRecord extends TenantEntity { * 关联业务id */ private String businessId; + /** + * 客户来源 + */ + private String customSource; /** * 合同编码 */ @@ -51,7 +55,7 @@ public class PsApproverRecord extends TenantEntity { /** * 审批日期 */ - private String approverType; + private Date approverDate; /** * 审批状态(1待审批,2成功,3失败) diff --git a/pusong-modules/pusong-business/src/main/java/com/pusong/business/domain/bo/PsApproverRecordBo.java b/pusong-modules/pusong-business/src/main/java/com/pusong/business/domain/bo/PsApproverRecordBo.java index a9360c5..a6c9482 100644 --- a/pusong-modules/pusong-business/src/main/java/com/pusong/business/domain/bo/PsApproverRecordBo.java +++ b/pusong-modules/pusong-business/src/main/java/com/pusong/business/domain/bo/PsApproverRecordBo.java @@ -32,7 +32,7 @@ public class PsApproverRecordBo { * 关联业务id */ @NotNull(message = "关联业务id不能为空") - private Long businessId; + private String businessId; /** * 合同编码 */ @@ -53,7 +53,7 @@ public class PsApproverRecordBo { * 审批日期 */ @NotBlank(message = "审批日期不能为空") - private String approverType; + private Date approverDate; /** * 审批状态(1待审批,2成功,3失败) diff --git a/pusong-modules/pusong-business/src/main/java/com/pusong/business/domain/bo/PsContractPayBo.java b/pusong-modules/pusong-business/src/main/java/com/pusong/business/domain/bo/PsContractPayBo.java index f61291c..040daa2 100644 --- a/pusong-modules/pusong-business/src/main/java/com/pusong/business/domain/bo/PsContractPayBo.java +++ b/pusong-modules/pusong-business/src/main/java/com/pusong/business/domain/bo/PsContractPayBo.java @@ -78,5 +78,10 @@ public class PsContractPayBo { */ private String payDesc; + /** + * 回款备注 + */ + private String updateDesc; + } diff --git a/pusong-modules/pusong-business/src/main/java/com/pusong/business/domain/vo/PsApproverRecordVo.java b/pusong-modules/pusong-business/src/main/java/com/pusong/business/domain/vo/PsApproverRecordVo.java index d052a0d..cc1ce46 100644 --- a/pusong-modules/pusong-business/src/main/java/com/pusong/business/domain/vo/PsApproverRecordVo.java +++ b/pusong-modules/pusong-business/src/main/java/com/pusong/business/domain/vo/PsApproverRecordVo.java @@ -1,12 +1,19 @@ package com.pusong.business.domain.vo; +import java.math.BigDecimal; import java.util.Date; + +import com.alibaba.fastjson.JSONObject; +import com.baomidou.mybatisplus.annotation.FieldFill; +import com.baomidou.mybatisplus.annotation.TableField; import com.fasterxml.jackson.annotation.JsonFormat; import com.pusong.business.domain.PsApproverRecord; import com.alibaba.excel.annotation.ExcelIgnoreUnannotated; import com.alibaba.excel.annotation.ExcelProperty; import com.pusong.common.excel.annotation.ExcelDictFormat; import com.pusong.common.excel.convert.ExcelDictConvert; +import com.pusong.common.translation.annotation.Translation; +import com.pusong.common.translation.constant.TransConstant; import io.github.linpeilie.annotations.AutoMapper; import jakarta.validation.constraints.NotBlank; import lombok.Data; @@ -14,7 +21,7 @@ import lombok.Data; import java.io.Serial; import java.io.Serializable; import java.util.Date; - +import java.util.List; /** @@ -31,21 +38,16 @@ public class PsApproverRecordVo implements Serializable { @Serial private static final long serialVersionUID = 1L; + /** + * 客户id + */ + private Long customId; /** * 主键id */ @ExcelProperty(value = "主键id") private Long id; - /** - * 关联业务id - */ - @ExcelProperty(value = "关联业务id") - private Long businessId; - /** - * 合同编码 - */ - private String contractCode; /** * 审批业务类型 */ @@ -55,14 +57,14 @@ public class PsApproverRecordVo implements Serializable { /** * 申请日期 */ - @ExcelProperty(value = "申请日期") + @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss") private Date applyDate; /** * 审批日期 */ - @ExcelProperty(value = "审批日期") - private String approverType; + @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss") + private Date approverDate; /** * 审批状态(1待审批,2成功,3失败) @@ -87,4 +89,92 @@ public class PsApproverRecordVo implements Serializable { * 修改后数据 */ private String updateData; + /** + * 修改后数据(object类型) + */ + private JSONObject updateDataObject; + /** + * 创建者 + */ + @Translation(type = TransConstant.USER_ID_TO_NICKNAME) + private Long createBy; + /** + * 更新者 + */ + @Translation(type = TransConstant.USER_ID_TO_NICKNAME) + private Long updateBy; + + /** + * 更新时间 + */ + @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss") + private Date updateTime; + + /** + * 合同文件id + */ + private String pdfId; + /** + * 合同所属销售经理 + */ + @Translation(type = TransConstant.USER_ID_TO_NICKNAME) + private Long customManager; + /** + * 公司名 + */ + private String companyName; + /** + * 客户名 + */ + private String customName; + /** + * 客户电话 + */ + private String customMobile; + + /** + * 回传合同文件id + */ + private String rollBackPdf; + /** + * 服务类别名(多个是用逗号分隔) + */ + @Translation(type = TransConstant.DICT_TYPE_TO_LABEL,other = "contract_type") + private String businessTypeName; + /** + * 合同总金额 + */ + private BigDecimal contractAmount; + /** + * 已付金额 + */ + private BigDecimal payMoney; + + /** + * 未付金额 + */ + private BigDecimal residualMoney; + /** + * 回款周期(天) + */ + private Integer period; + /** + * 介绍人 + */ + @Translation(type = TransConstant.USER_ID_TO_NICKNAME) + private Long customIntroducer; + /** + * 客户来源 + */ + private String customSource; + + /** + * 公司集合(公海审批使用) + */ + private List companyInfoList; + /** + * 公司数量 + */ + private Integer companyNum; + } diff --git a/pusong-modules/pusong-business/src/main/java/com/pusong/business/domain/vo/PsContractPayVo.java b/pusong-modules/pusong-business/src/main/java/com/pusong/business/domain/vo/PsContractPayVo.java index cf9a517..f72e4c7 100644 --- a/pusong-modules/pusong-business/src/main/java/com/pusong/business/domain/vo/PsContractPayVo.java +++ b/pusong-modules/pusong-business/src/main/java/com/pusong/business/domain/vo/PsContractPayVo.java @@ -87,6 +87,10 @@ public class PsContractPayVo implements Serializable { */ private String payDesc; + /** + * 支付状态 PayStatusEnum + */ + private String payStatus; /** * 创建时间 */ diff --git a/pusong-modules/pusong-business/src/main/java/com/pusong/business/domain/vo/PsRefundVo.java b/pusong-modules/pusong-business/src/main/java/com/pusong/business/domain/vo/PsRefundVo.java new file mode 100644 index 0000000..0e6e22a --- /dev/null +++ b/pusong-modules/pusong-business/src/main/java/com/pusong/business/domain/vo/PsRefundVo.java @@ -0,0 +1,82 @@ +package com.pusong.business.domain.vo; + +import com.alibaba.excel.annotation.ExcelIgnoreUnannotated; +import com.pusong.business.domain.PsCustomPrice; +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.math.BigDecimal; + +/** + * 退款列表查询vo + */ +@Data +public class PsRefundVo { + + private Long id; + /** + * 合同编码 + */ + private String contractCode; + + /** + * 服务类别名(多个是用逗号分隔) + */ + @Translation(type = TransConstant.DICT_TYPE_TO_LABEL,other = "contract_type") + private String businessTypeName; + + /** + * 所属客户经理 + */ + private String customManager; + + /** + * 客户姓名 + */ + private String customName; + /** + * 客户电话客户电话(多个用英文逗号分割) + */ + private String customMobile; + /** + * 公司名称 + */ + private String companyName; + + /** + * 支付方式(1扫码,2对公,3现金,4对私) + */ + private String payMode; + /** + * 已付金额 + */ + private BigDecimal payMoney; + /** + * 合同总金额 + */ + private BigDecimal contractAmount; + /** + * 退款金额 + */ + private BigDecimal returnMoney; + /** + * 账号信息 + */ + private String gathMain; + + /** + * 支付状态 PayStatusEnum + */ + private String payStatus; + + /** + * 凭证(多个时用逗号分隔) + */ + private String payCertification; + /** + * 合同文件id + */ + private String pdfid; +} diff --git a/pusong-modules/pusong-business/src/main/java/com/pusong/business/enums/PayStatusEnum.java b/pusong-modules/pusong-business/src/main/java/com/pusong/business/enums/PayStatusEnum.java index 47fd9a6..84a0631 100644 --- a/pusong-modules/pusong-business/src/main/java/com/pusong/business/enums/PayStatusEnum.java +++ b/pusong-modules/pusong-business/src/main/java/com/pusong/business/enums/PayStatusEnum.java @@ -12,8 +12,6 @@ import java.util.List; @AllArgsConstructor public enum PayStatusEnum { PAYAPPO("3","退款支付审批中"), - PAYAPPOSUCC("4","退款支付审批成功"), - PAYAPPOFIL("5","退款支付审批失败"), PAYING("0","支付中"), SUCCESS("1","成功"), FILE("2","失败"); @@ -25,6 +23,6 @@ public enum PayStatusEnum { * @return */ public static List getStatus() { - return List.of(PAYAPPO.getCode(),PAYAPPOSUCC.getCode(),PAYAPPOFIL.getCode()); + return List.of(PAYAPPO.getCode(),FILE.getCode()); } } diff --git a/pusong-modules/pusong-business/src/main/java/com/pusong/business/mapper/PsApproverRecordMapper.java b/pusong-modules/pusong-business/src/main/java/com/pusong/business/mapper/PsApproverRecordMapper.java index f8426d7..14694c7 100644 --- a/pusong-modules/pusong-business/src/main/java/com/pusong/business/mapper/PsApproverRecordMapper.java +++ b/pusong-modules/pusong-business/src/main/java/com/pusong/business/mapper/PsApproverRecordMapper.java @@ -1,8 +1,14 @@ package com.pusong.business.mapper; +import com.baomidou.mybatisplus.core.conditions.Wrapper; +import com.baomidou.mybatisplus.core.toolkit.Constants; +import com.baomidou.mybatisplus.extension.plugins.pagination.Page; import com.pusong.business.domain.PsApproverRecord; +import com.pusong.business.domain.PsContractInfo; import com.pusong.business.domain.vo.PsApproverRecordVo; +import com.pusong.business.domain.vo.PsContractInfoVo; import com.pusong.common.mybatis.core.mapper.BaseMapperPlus; +import org.apache.ibatis.annotations.Param; /** * 审批记录Mapper接口 @@ -12,4 +18,7 @@ import com.pusong.common.mybatis.core.mapper.BaseMapperPlus; */ public interface PsApproverRecordMapper extends BaseMapperPlus { + Page selectPageApproverList(@Param("page") Page page, @Param(Constants.WRAPPER) Wrapper queryWrapper); + + Page selectPagePublicList(@Param("page") Page page, @Param(Constants.WRAPPER) Wrapper queryWrapper); } diff --git a/pusong-modules/pusong-business/src/main/java/com/pusong/business/mapper/PsContractPayMapper.java b/pusong-modules/pusong-business/src/main/java/com/pusong/business/mapper/PsContractPayMapper.java index 5368efc..cd33b05 100644 --- a/pusong-modules/pusong-business/src/main/java/com/pusong/business/mapper/PsContractPayMapper.java +++ b/pusong-modules/pusong-business/src/main/java/com/pusong/business/mapper/PsContractPayMapper.java @@ -1,8 +1,16 @@ package com.pusong.business.mapper; +import com.baomidou.mybatisplus.core.conditions.Wrapper; +import com.baomidou.mybatisplus.core.toolkit.Constants; +import com.baomidou.mybatisplus.extension.plugins.pagination.Page; +import com.pusong.business.domain.PsContractInfo; import com.pusong.business.domain.PsContractPay; import com.pusong.business.domain.vo.PsContractPayVo; +import com.pusong.business.domain.vo.PsRefundVo; import com.pusong.common.mybatis.core.mapper.BaseMapperPlus; +import org.apache.ibatis.annotations.Param; + +import java.util.List; /** * 合同回款记录Mapper接口 @@ -11,5 +19,5 @@ import com.pusong.common.mybatis.core.mapper.BaseMapperPlus; * @date 2024-08-01 */ public interface PsContractPayMapper extends BaseMapperPlus { - + Page queryRefundList(@Param("page") Page page, @Param(Constants.WRAPPER) Wrapper queryWrapper); } diff --git a/pusong-modules/pusong-business/src/main/java/com/pusong/business/service/IPsContractPayService.java b/pusong-modules/pusong-business/src/main/java/com/pusong/business/service/IPsContractPayService.java index a40c8a9..0098bc3 100644 --- a/pusong-modules/pusong-business/src/main/java/com/pusong/business/service/IPsContractPayService.java +++ b/pusong-modules/pusong-business/src/main/java/com/pusong/business/service/IPsContractPayService.java @@ -3,9 +3,12 @@ package com.pusong.business.service; import com.pusong.business.domain.PsContractPay; import com.pusong.business.domain.vo.PsContractPayVo; import com.pusong.business.domain.bo.PsContractPayBo; +import com.pusong.business.domain.vo.PsRefundVo; import com.pusong.business.enums.PayStatusEnum; +import com.pusong.common.core.utils.MapstructUtils; import com.pusong.common.mybatis.core.page.TableDataInfo; import com.pusong.common.mybatis.core.page.PageQuery; +import jakarta.validation.constraints.NotNull; import org.springframework.web.multipart.MultipartFile; import java.util.Collection; @@ -57,6 +60,31 @@ public interface IPsContractPayService { * @return 是否修改成功 */ Boolean updateById(PsContractPay pay); + + + /** + * 修改合同回款记录 + * + * @param bo 合同回款记录 + * @return 是否修改成功 + */ + void updateByBo(PsContractPayBo bo); + + /** + * 退款列表查询 + * + * @return 合同回款记录列表 + */ + TableDataInfo queryRefundList(PageQuery pageQuery,String payStatus); + + /** + * 完成退款 + * @param files 附件图片 + * @param id 任务id + * @return + */ + void refundFinish(List files, Long id); + /* *//** * 查询合同回款记录 * diff --git a/pusong-modules/pusong-business/src/main/java/com/pusong/business/service/approver/ApproverService.java b/pusong-modules/pusong-business/src/main/java/com/pusong/business/service/approver/ApproverService.java index d8d1eec..12287a5 100644 --- a/pusong-modules/pusong-business/src/main/java/com/pusong/business/service/approver/ApproverService.java +++ b/pusong-modules/pusong-business/src/main/java/com/pusong/business/service/approver/ApproverService.java @@ -1,7 +1,11 @@ package com.pusong.business.service.approver; +import com.baomidou.mybatisplus.extension.plugins.pagination.Page; import com.pusong.business.domain.PsApproverRecord; +import com.pusong.business.domain.bo.PsApproverRecordBo; +import com.pusong.business.domain.vo.PsApproverRecordVo; import com.pusong.business.enums.ApproverTypeEnum; +import com.pusong.common.mybatis.core.page.PageQuery; public interface ApproverService { /** @@ -21,5 +25,9 @@ public interface ApproverService { * 失败 */ public void fail(PsApproverRecord psApproverRecord); + /** + * 查询列表 + */ + public Page queryList(PsApproverRecordBo bo, PageQuery pageQuery); } diff --git a/pusong-modules/pusong-business/src/main/java/com/pusong/business/service/approver/impl/ApproverAbstractServiceImpl.java b/pusong-modules/pusong-business/src/main/java/com/pusong/business/service/approver/impl/ApproverAbstractServiceImpl.java index edc1dc3..56e8f25 100644 --- a/pusong-modules/pusong-business/src/main/java/com/pusong/business/service/approver/impl/ApproverAbstractServiceImpl.java +++ b/pusong-modules/pusong-business/src/main/java/com/pusong/business/service/approver/impl/ApproverAbstractServiceImpl.java @@ -1,19 +1,31 @@ package com.pusong.business.service.approver.impl; import com.alibaba.fastjson.JSON; +import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; import com.baomidou.mybatisplus.core.toolkit.CollectionUtils; import com.baomidou.mybatisplus.core.toolkit.Wrappers; +import com.baomidou.mybatisplus.extension.plugins.pagination.Page; import com.pusong.business.domain.PsApproverRecord; +import com.pusong.business.domain.PsContractPay; +import com.pusong.business.domain.bo.PsApproverRecordBo; +import com.pusong.business.domain.vo.PsApproverRecordVo; +import com.pusong.business.domain.vo.PsContractPayVo; import com.pusong.business.enums.ApproverStatusEnum; import com.pusong.business.enums.ApproverTypeEnum; +import com.pusong.business.enums.PayStatusEnum; import com.pusong.business.mapper.PsApproverRecordMapper; +import com.pusong.business.mapper.PsContractPayMapper; import com.pusong.business.service.IPsApproverRecordService; import com.pusong.business.service.approver.ApproverContainer; import com.pusong.business.service.approver.ApproverService; import com.pusong.common.core.exception.ServiceException; +import com.pusong.common.core.utils.DateUtils; +import com.pusong.common.core.utils.StringUtils; +import com.pusong.common.mybatis.core.page.PageQuery; import jakarta.annotation.PostConstruct; import jakarta.annotation.Resource; +import java.util.ArrayList; import java.util.Date; import java.util.List; @@ -28,6 +40,10 @@ public abstract class ApproverAbstractServiceImpl implements ApproverService { private PsApproverRecordMapper approverRecordMapper; @Resource private ApproverContainer approverContainer; + @Resource + private PsApproverRecordMapper recordMapper; + @Resource + private PsContractPayMapper baseMapper; /** * 通用申请方法 * @param bussinessId @@ -59,4 +75,42 @@ public abstract class ApproverAbstractServiceImpl implements ApproverService { public void register() { approverContainer.registerService(approverType(), this); } + + /** + * 查询列表 + */ + @Override + public Page queryList(PsApproverRecordBo bo, PageQuery pageQuery){ + QueryWrapper lqw = Wrappers.query().eq("app.business_type",approverType()); + Page res = recordMapper.selectPageApproverList(pageQuery.build(), lqw); + if(CollectionUtils.isNotEmpty(res.getRecords())){ + res.getRecords().forEach(item->{ + item.setResidualMoney(item.getContractAmount().subtract(item.getPayMoney())); + //装填回款记录 + List payList = queryListByContractCode(bo.getBusinessId(),null, PayStatusEnum.SUCCESS); + item.setPeriod(DateUtils.calWorkDate(payList.get(0).getPayDate(),payList.get(payList.size()-1).getPayDate()) + 1); + item.setUpdateDataObject(JSON.parseObject(item.getUpdateData())); + }); + } + return res; + } + + + + /** + * 查询合同回款记录列表 + * + * @param contractCode 合同编码 + * @return + */ + public List queryListByContractCode(String contractCode,String business,PayStatusEnum enu){ + if(StringUtils.isBlank(contractCode)){return new ArrayList<>();} + List list = baseMapper.selectVoList(Wrappers.lambdaQuery(). + eq(PsContractPay::getContractCode, contractCode).eq(PsContractPay::getDelFlag,0) + .eq(StringUtils.isNotBlank(business),PsContractPay::getBusinessType,business) + .eq(enu != null ,PsContractPay::getPayStatus, enu.getCode()) + .notIn(PsContractPay::getPayStatus, PayStatusEnum.getStatus())//去掉无用的状态 + .orderByAsc(PsContractPay::getPayDate)); + return list == null?new ArrayList<>():list; + } } diff --git a/pusong-modules/pusong-business/src/main/java/com/pusong/business/service/approver/impl/PayContractApproverServiceImpl.java b/pusong-modules/pusong-business/src/main/java/com/pusong/business/service/approver/impl/PayContractApproverServiceImpl.java index 3223a2c..7c6da86 100644 --- a/pusong-modules/pusong-business/src/main/java/com/pusong/business/service/approver/impl/PayContractApproverServiceImpl.java +++ b/pusong-modules/pusong-business/src/main/java/com/pusong/business/service/approver/impl/PayContractApproverServiceImpl.java @@ -1,16 +1,19 @@ package com.pusong.business.service.approver.impl; +import com.alibaba.fastjson.JSON; import com.baomidou.mybatisplus.core.toolkit.CollectionUtils; import com.pusong.business.domain.PsApproverRecord; import com.pusong.business.domain.PsContractInfo; import com.pusong.business.domain.PsContractPay; import com.pusong.business.domain.PsTaskMain; +import com.pusong.business.domain.bo.PsContractPayBo; import com.pusong.business.domain.vo.PsContractInfoVo; import com.pusong.business.domain.vo.PsContractPayVo; import com.pusong.business.enums.*; import com.pusong.business.service.IPsContractInfoService; import com.pusong.business.service.IPsContractPayService; import com.pusong.business.service.IPsTaskService; +import com.pusong.common.core.utils.MapstructUtils; import com.pusong.common.core.utils.StringUtils; import lombok.RequiredArgsConstructor; import lombok.extern.slf4j.Slf4j; @@ -45,6 +48,10 @@ public class PayContractApproverServiceImpl extends ApproverAbstractServiceImpl PsContractInfoVo info = psContractInfoService.queryContractByCode(psApproverRecord.getContractCode()); //修改回款记录状态 PsContractPay update = new PsContractPay(); + if(StringUtils.isNotBlank(psApproverRecord.getUpdateData())){ + PsContractPayBo upda = JSON.parseObject(psApproverRecord.getUpdateData(), PsContractPayBo.class); + MapstructUtils.convert(upda,update); + } update.setId(Long.valueOf(psApproverRecord.getBusinessId())); update.setPayStatus(PayStatusEnum.SUCCESS.getCode()); payService.updateById(update); @@ -70,10 +77,15 @@ public class PayContractApproverServiceImpl extends ApproverAbstractServiceImpl @Override public void fail(PsApproverRecord psApproverRecord) { - //修改回款记录状态 - PsContractPay update = new PsContractPay(); - update.setId(Long.valueOf(psApproverRecord.getBusinessId())); - update.setPayStatus(PayStatusEnum.FILE.getCode()); - payService.updateById(update); + //如果是修改不做处理 + if(StringUtils.isNotBlank(psApproverRecord.getUpdateData())){ + + }else {//如果是新增则修改状态 + //修改回款记录状态 + PsContractPay update = new PsContractPay(); + update.setId(Long.valueOf(psApproverRecord.getBusinessId())); + update.setPayStatus(PayStatusEnum.FILE.getCode()); + payService.updateById(update); + } } } diff --git a/pusong-modules/pusong-business/src/main/java/com/pusong/business/service/approver/impl/PublicApproverServiceImpl.java b/pusong-modules/pusong-business/src/main/java/com/pusong/business/service/approver/impl/PublicApproverServiceImpl.java index 2561746..d298c9e 100644 --- a/pusong-modules/pusong-business/src/main/java/com/pusong/business/service/approver/impl/PublicApproverServiceImpl.java +++ b/pusong-modules/pusong-business/src/main/java/com/pusong/business/service/approver/impl/PublicApproverServiceImpl.java @@ -1,17 +1,38 @@ package com.pusong.business.service.approver.impl; +import com.alibaba.fastjson.JSON; +import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; +import com.baomidou.mybatisplus.core.toolkit.CollectionUtils; +import com.baomidou.mybatisplus.core.toolkit.Wrappers; +import com.baomidou.mybatisplus.extension.plugins.pagination.Page; import com.pusong.business.domain.PsApproverRecord; +import com.pusong.business.domain.PsCompanyInfo; import com.pusong.business.domain.PsContractPay; import com.pusong.business.domain.PsCustomInfo; +import com.pusong.business.domain.bo.PsApproverRecordBo; +import com.pusong.business.domain.vo.PsApproverRecordVo; +import com.pusong.business.domain.vo.PsCompanyInfoVo; +import com.pusong.business.domain.vo.PsContractPayVo; import com.pusong.business.enums.ApproverTypeEnum; import com.pusong.business.enums.CustomerStatusEnum; import com.pusong.business.enums.PayStatusEnum; +import com.pusong.business.mapper.PsApproverRecordMapper; +import com.pusong.business.mapper.PsCompanyInfoMapper; import com.pusong.business.mapper.PsContractPayMapper; import com.pusong.business.mapper.PsCustomInfoMapper; +import com.pusong.common.core.utils.DateUtils; +import com.pusong.common.mybatis.core.page.PageQuery; +import jakarta.annotation.Resource; import lombok.RequiredArgsConstructor; import lombok.extern.slf4j.Slf4j; import org.springframework.stereotype.Service; +import java.util.Comparator; +import java.util.HashMap; +import java.util.List; +import java.util.Map; +import java.util.stream.Collectors; + /** * 公海认领审批 */ @@ -24,7 +45,10 @@ public class PublicApproverServiceImpl extends ApproverAbstractServiceImpl { return ApproverTypeEnum.PUBLIC.getCode(); } private final PsCustomInfoMapper customInfoMapper; - + @Resource + private PsApproverRecordMapper recordMapper; + @Resource + private final PsCompanyInfoMapper companyInfoMapper; /** * 1 审批成功 退款审批成功 * @param psApproverRecord 神瀑类 @@ -44,4 +68,46 @@ public class PublicApproverServiceImpl extends ApproverAbstractServiceImpl { @Override public void fail(PsApproverRecord psApproverRecord) { } + + /** + * 查询列表 + * @param bo + * @param pageQuery + * @return + */ + @Override + public Page queryList(PsApproverRecordBo bo, PageQuery pageQuery){ + QueryWrapper lqw = Wrappers.query().eq("app.business_type",approverType()); + Page res = recordMapper.selectPagePublicList(pageQuery.build(), lqw); + if(CollectionUtils.isEmpty(res.getRecords())){ + return res; + } + //装填公司信息 + List ids = res.getRecords().stream().map(PsApproverRecordVo::getCustomId).collect(Collectors.toList()); + List companyInfoVos = companyInfoMapper.selectVoList(Wrappers.lambdaQuery() + .in(PsCompanyInfo::getCustomId, ids) + .eq(PsCompanyInfo::getDelFlag, 0)); + Map> id_companyMap = new HashMap<>(); + if(CollectionUtils.isNotEmpty(companyInfoVos)){ + //分组 + id_companyMap = companyInfoVos.stream().collect((Collectors.groupingBy(PsCompanyInfoVo::getCustomId))); + //排序 + id_companyMap.entrySet().forEach(entry->{ + entry.setValue(entry.getValue().stream().sorted(Comparator.comparingLong(PsCompanyInfoVo::getId)).collect(Collectors.toList())); + }); + } + for (PsApproverRecordVo info : res.getRecords()) { + info.setCompanyInfoList(id_companyMap.get(info.getCompanyInfoList())); + //最早的公司名称 + if(CollectionUtils.isNotEmpty(info.getCompanyInfoList())){ + //找到最近修改的公司名称 + info.setCompanyName(info.getCompanyInfoList().stream().max(Comparator.comparingLong(item -> item.getUpdateTime().getTime())) + .orElse(new PsCompanyInfoVo()).getCompanyName()); + info.setCompanyNum(info.getCompanyInfoList().size()); + }else{ + info.setCompanyNum(0); + } + } + return res; + } } diff --git a/pusong-modules/pusong-business/src/main/java/com/pusong/business/service/approver/impl/ReturnApproverServiceImpl.java b/pusong-modules/pusong-business/src/main/java/com/pusong/business/service/approver/impl/ReturnApproverServiceImpl.java index ce2e71f..b784c55 100644 --- a/pusong-modules/pusong-business/src/main/java/com/pusong/business/service/approver/impl/ReturnApproverServiceImpl.java +++ b/pusong-modules/pusong-business/src/main/java/com/pusong/business/service/approver/impl/ReturnApproverServiceImpl.java @@ -32,7 +32,7 @@ public class ReturnApproverServiceImpl extends ApproverAbstractServiceImpl { @Override public void success(PsApproverRecord psApproverRecord) { PsContractPay info = baseMapper.selectById(psApproverRecord.getBusinessId()); - info.setPayStatus(PayStatusEnum.PAYAPPOSUCC.getCode()); + info.setPayStatus(PayStatusEnum.PAYING.getCode()); baseMapper.updateById(info); } @@ -44,7 +44,7 @@ public class ReturnApproverServiceImpl extends ApproverAbstractServiceImpl { @Override public void fail(PsApproverRecord psApproverRecord) { PsContractPay info = baseMapper.selectById(psApproverRecord.getBusinessId()); - info.setPayStatus(PayStatusEnum.PAYAPPOFIL.getCode()); + info.setPayStatus(PayStatusEnum.FILE.getCode()); baseMapper.updateById(info); } } diff --git a/pusong-modules/pusong-business/src/main/java/com/pusong/business/service/approver/impl/SignApproverServiceImpl.java b/pusong-modules/pusong-business/src/main/java/com/pusong/business/service/approver/impl/SignApproverServiceImpl.java index 1fe695d..216ccb1 100644 --- a/pusong-modules/pusong-business/src/main/java/com/pusong/business/service/approver/impl/SignApproverServiceImpl.java +++ b/pusong-modules/pusong-business/src/main/java/com/pusong/business/service/approver/impl/SignApproverServiceImpl.java @@ -1,18 +1,26 @@ package com.pusong.business.service.approver.impl; import com.alibaba.fastjson.JSON; +import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; +import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; +import com.baomidou.mybatisplus.core.toolkit.Wrappers; +import com.baomidou.mybatisplus.extension.plugins.pagination.Page; import com.pusong.business.domain.PsApproverRecord; import com.pusong.business.domain.PsContractInfo; +import com.pusong.business.domain.bo.PsApproverRecordBo; import com.pusong.business.domain.bo.PsContractBusinessBo; import com.pusong.business.domain.bo.PsContractBusinessDetailBo; import com.pusong.business.domain.bo.PsContractInfoBo; +import com.pusong.business.domain.vo.PsApproverRecordVo; import com.pusong.business.domain.vo.PsContractInfoVo; import com.pusong.business.enums.ApproverTypeEnum; import com.pusong.business.enums.CommonStatusEnum; +import com.pusong.business.mapper.PsApproverRecordMapper; import com.pusong.business.service.IPsContractBusinessService; import com.pusong.business.service.IPsContractInfoService; import com.pusong.common.core.utils.MapstructUtils; import com.pusong.common.core.utils.StringUtils; +import com.pusong.common.mybatis.core.page.PageQuery; import lombok.RequiredArgsConstructor; import lombok.extern.slf4j.Slf4j; import org.springframework.beans.BeanUtils; @@ -35,6 +43,7 @@ public class SignApproverServiceImpl extends ApproverAbstractServiceImpl { private final IPsContractBusinessService businessService; private final IPsContractInfoService contractInfoService; + /** * 1 审批成功生成签章合同 修改签章状态 * @param psApproverRecord 神瀑类 @@ -77,4 +86,8 @@ public class SignApproverServiceImpl extends ApproverAbstractServiceImpl { info.setSignStatus(CommonStatusEnum.FAIL.getCode()); contractInfoService.updateByCode(info); } + + + + } diff --git a/pusong-modules/pusong-business/src/main/java/com/pusong/business/service/impl/PsApproverRecordServiceImpl.java b/pusong-modules/pusong-business/src/main/java/com/pusong/business/service/impl/PsApproverRecordServiceImpl.java index d824d4f..9b29c02 100644 --- a/pusong-modules/pusong-business/src/main/java/com/pusong/business/service/impl/PsApproverRecordServiceImpl.java +++ b/pusong-modules/pusong-business/src/main/java/com/pusong/business/service/impl/PsApproverRecordServiceImpl.java @@ -21,6 +21,7 @@ import com.pusong.business.domain.PsApproverRecord; import com.pusong.business.mapper.PsApproverRecordMapper; import com.pusong.business.service.IPsApproverRecordService; +import java.util.Date; import java.util.List; import java.util.Map; import java.util.Collection; @@ -58,8 +59,8 @@ public class PsApproverRecordServiceImpl implements IPsApproverRecordService { */ @Override public TableDataInfo queryPageList(PsApproverRecordBo bo, PageQuery pageQuery) { - LambdaQueryWrapper lqw = buildQueryWrapper(bo); - Page result = baseMapper.selectVoPage(pageQuery.build(), lqw); + ApproverService service = container.getService(bo.getBusinessType()); + Page result = service.queryList(bo, pageQuery); return TableDataInfo.build(result); } @@ -80,7 +81,6 @@ public class PsApproverRecordServiceImpl implements IPsApproverRecordService { lqw.eq(bo.getBusinessId() != null, PsApproverRecord::getBusinessId, bo.getBusinessId()); lqw.eq(StringUtils.isNotBlank(bo.getBusinessType()), PsApproverRecord::getBusinessType, bo.getBusinessType()); lqw.eq(bo.getApplyDate() != null, PsApproverRecord::getApplyDate, bo.getApplyDate()); - lqw.eq(StringUtils.isNotBlank(bo.getApproverType()), PsApproverRecord::getApproverType, bo.getApproverType()); lqw.eq(StringUtils.isNotBlank(bo.getApproverStatus()), PsApproverRecord::getApproverStatus, bo.getApproverStatus()); lqw.eq(StringUtils.isNotBlank(bo.getApplyDesc()), PsApproverRecord::getApplyDesc, bo.getApplyDesc()); lqw.eq(StringUtils.isNotBlank(bo.getApproverDesc()), PsApproverRecord::getApproverDesc, bo.getApproverDesc()); @@ -99,15 +99,17 @@ public class PsApproverRecordServiceImpl implements IPsApproverRecordService { if(!StringUtils.equals(ApproverStatusEnum.INIT.getCode(),info.getApproverStatus())){ throw new ServiceException("操作失败:该审批状态已变更"); } - ApproverService service = container.getService(info.getApproverType()); + ApproverService service = container.getService(info.getBusinessType()); if(StringUtils.equals(ApproverStatusEnum.SUCCESS.getCode(),operate)){ service.success(info); + info.setApproverStatus(ApproverStatusEnum.SUCCESS.getCode()); }else if (StringUtils.equals(ApproverStatusEnum.FAIL.getCode(),operate)){ service.fail(info); + info.setApproverStatus(ApproverStatusEnum.FAIL.getCode()); }else{ throw new ServiceException("操作失败:不支持的操作类型"); } - info.setApproverStatus(ApproverStatusEnum.SUCCESS.getCode()); + info.setApproverDate(new Date()); info.setApproverDesc(desc); baseMapper.insert(info); } diff --git a/pusong-modules/pusong-business/src/main/java/com/pusong/business/service/impl/PsContractInfoServiceImpl.java b/pusong-modules/pusong-business/src/main/java/com/pusong/business/service/impl/PsContractInfoServiceImpl.java index 8413820..50852eb 100644 --- a/pusong-modules/pusong-business/src/main/java/com/pusong/business/service/impl/PsContractInfoServiceImpl.java +++ b/pusong-modules/pusong-business/src/main/java/com/pusong/business/service/impl/PsContractInfoServiceImpl.java @@ -261,6 +261,26 @@ public class PsContractInfoServiceImpl implements IPsContractInfoService { info.setContractCode(bo.getContractCode()); info.setContractStatus(ContractStatusEnum.UPDATEAPPROVER.getCode()); updateByCode(info); + }else{ + //修改合同 + PsContractInfo add = new PsContractInfo(); + MapstructUtils.convert(bo,add); + add.setCompanyId(bo.getCompanyInfoBo().getId());//公司id + bo.getBusinessList().forEach(item->{ + BigDecimal mony = BigDecimal.ZERO; + if(CollectionUtils.isNotEmpty(item.getDetailBos())){ + mony = item.getDetailBos().stream().map(PsContractBusinessDetailBo::getAmount).filter(Objects::nonNull).reduce(BigDecimal.ZERO, BigDecimal::add); + } + //服务类别填了才会修改服务项目的金额 + if(mony.compareTo(BigDecimal.ZERO) > 0){ + item.setBusinessAmount(mony); + } + }); + + add.setContractAmount(sum);//合同总金额 + this.updateByCode(add); + //4.删除所有服务类型和服务项目,.插入服务类型 + businessService.saveList(bo.getBusinessList(),add.getContractCode()); } return true; } @@ -411,6 +431,7 @@ public class PsContractInfoServiceImpl implements IPsContractInfoService { //删除标志 qw.eq( "info.del_flag", 0);//删除标志 //合同表条件 + qw.ne( "info.contract_status", ContractStatusEnum.INIT.getCode()); qw.eq( StringUtils.isNotBlank(bo.getContractStatus()),"info.contract_status", bo.getContractStatus()); qw.in( CollectionUtils.isNotEmpty(bo.getInContractStatus()),"info.contract_status", bo.getInContractStatus()); qw.notIn( CollectionUtils.isNotEmpty(bo.getNotInContractStatus()),"info.contract_status", bo.getNotInContractStatus()); @@ -422,6 +443,7 @@ public class PsContractInfoServiceImpl implements IPsContractInfoService { qw.like( StringUtils.isNotBlank(bo.getCompanyName()),"com.company_name", bo.getCompanyName()); //用户表条件 qw.like( StringUtils.isNotBlank(bo.getCustomManagerName()),"us.nick_name", bo.getCustomManagerName()); + qw.orderByDesc("info.create_time"); return qw; } private PsContractInfoVo fillContractInfo(PsContractInfoVo vo){ diff --git a/pusong-modules/pusong-business/src/main/java/com/pusong/business/service/impl/PsContractPayServiceImpl.java b/pusong-modules/pusong-business/src/main/java/com/pusong/business/service/impl/PsContractPayServiceImpl.java index 3893c36..853263d 100644 --- a/pusong-modules/pusong-business/src/main/java/com/pusong/business/service/impl/PsContractPayServiceImpl.java +++ b/pusong-modules/pusong-business/src/main/java/com/pusong/business/service/impl/PsContractPayServiceImpl.java @@ -1,7 +1,10 @@ package com.pusong.business.service.impl; +import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; import com.baomidou.mybatisplus.core.toolkit.CollectionUtils; +import com.pusong.business.domain.vo.PsRefundVo; import com.pusong.business.enums.ApproverTypeEnum; +import com.pusong.business.enums.PayBuinessStatusEnum; import com.pusong.business.enums.PayStatusEnum; import com.pusong.business.service.approver.ApproverContainer; import com.pusong.business.service.approver.ApproverService; @@ -26,10 +29,8 @@ import com.pusong.business.service.IPsContractPayService; import org.springframework.transaction.annotation.Transactional; import org.springframework.web.multipart.MultipartFile; -import java.util.ArrayList; -import java.util.List; -import java.util.Map; -import java.util.Collection; +import java.math.BigDecimal; +import java.util.*; /** * 合同回款记录Service业务层处理 @@ -140,12 +141,56 @@ public class PsContractPayServiceImpl implements IPsContractPayService { * @param bo 合同回款记录 * @return 是否修改成功 */ -// @Override -// public Boolean updateByBo(PsContractPayBo bo) { -// PsContractPay update = MapstructUtils.convert(bo, PsContractPay.class); -// validEntityBeforeSave(update); -// return baseMapper.updateById(update) > 0; -// } + @Override + public void updateByBo(PsContractPayBo bo) { + PsContractPay info = baseMapper.selectById(bo.getId()); + //发起审批 + ApproverService service = container.getService(ApproverTypeEnum.PAY.getCode()); + service.apply(bo.getId()+"",info.getContractCode(),bo.getUpdateDesc(), bo); + + } + + /** + * 退款列表查询 + * + * @return 合同回款记录列表 + */ + @Override + public TableDataInfo queryRefundList(PageQuery pageQuery,String payStatus){ + QueryWrapper qw = new QueryWrapper().eq(StringUtils.isNotBlank(payStatus), "pay.pay_stauts", payStatus); + Page list = baseMapper.queryRefundList(pageQuery.build(), qw); + list.getRecords().forEach(info->{ + List payList = queryListByContractCode(info.getContractCode(),null,PayStatusEnum.SUCCESS); + //退款金额 + BigDecimal returnMoney = payList.stream().filter(item -> StringUtils.equals(item.getBusinessType(), PayBuinessStatusEnum.RETURN.getCode())) + .map(PsContractPayVo::getMoney).filter(Objects::nonNull).reduce(BigDecimal.ZERO, BigDecimal::add); + //收款金额 + BigDecimal netPay = payList.stream().filter(item -> StringUtils.equals(item.getBusinessType(), PayBuinessStatusEnum.PAY.getCode())) + .map(PsContractPayVo::getMoney).filter(Objects::nonNull).reduce(BigDecimal.ZERO, BigDecimal::add); + BigDecimal pay = netPay.subtract(returnMoney); + //已付金额(收款-退款) + info.setPayMoney(pay.compareTo(BigDecimal.ZERO)>=0?pay:BigDecimal.ZERO); + }); + return TableDataInfo.build(list); + } + + /** + * 完成退款 + * @param files 附件图片 + * @param id 任务id + * @return + */ + public void refundFinish(List files, Long id){ + PsContractPay info = baseMapper.selectById(id); + List payCertifications = new ArrayList<>(); + for(MultipartFile file : files){ + SysOssVo vo = ossService.upload(file); + payCertifications.add(vo.getOssId()+""); + } + info.setPayCertification(StringUtils.join(payCertifications,",")); + info.setPayStatus(PayStatusEnum.SUCCESS.getCode()); + baseMapper.insert(info); + } /* *//** * 查询合同回款记录 diff --git a/pusong-modules/pusong-business/src/main/resources/mapper/business/PsApproverRecordMapper.xml b/pusong-modules/pusong-business/src/main/resources/mapper/business/PsApproverRecordMapper.xml index adbb2b6..44b1e8d 100644 --- a/pusong-modules/pusong-business/src/main/resources/mapper/business/PsApproverRecordMapper.xml +++ b/pusong-modules/pusong-business/src/main/resources/mapper/business/PsApproverRecordMapper.xml @@ -3,5 +3,37 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd"> + + + diff --git a/pusong-modules/pusong-business/src/main/resources/mapper/business/PsContractInfoMapper.xml b/pusong-modules/pusong-business/src/main/resources/mapper/business/PsContractInfoMapper.xml index 61cdbd6..c4bd60f 100644 --- a/pusong-modules/pusong-business/src/main/resources/mapper/business/PsContractInfoMapper.xml +++ b/pusong-modules/pusong-business/src/main/resources/mapper/business/PsContractInfoMapper.xml @@ -13,12 +13,14 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" select info.*, + com.id com_id, com.company_name com_company_name, com.company_adress com_company_adress, com.company_account_bank com_company_account_bank, com.legal_person_name com_legal_person_name, com.legal_person_idcard com_legal_person_idcard, com.legal_person_phone com_legal_person_phone, + cus.id cus_id, cus.custom_name cus_custom_name , cus.custom_mobile cus_custom_mobile, us.nick_name custom_manager_name diff --git a/pusong-modules/pusong-business/src/main/resources/mapper/business/PsContractPayMapper.xml b/pusong-modules/pusong-business/src/main/resources/mapper/business/PsContractPayMapper.xml index c2bca39..04dbc64 100644 --- a/pusong-modules/pusong-business/src/main/resources/mapper/business/PsContractPayMapper.xml +++ b/pusong-modules/pusong-business/src/main/resources/mapper/business/PsContractPayMapper.xml @@ -4,4 +4,15 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd"> +