审批列表

This commit is contained in:
1073413548 2024-08-15 17:53:31 +08:00
parent d92d80ca55
commit b55b87df8e
23 changed files with 571 additions and 51 deletions

View File

@ -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<Void> 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<Void> 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<PsRefundVo> queryRefundList( String payStatus,PageQuery pageQuery) {
return psContractPayService.queryRefundList(pageQuery,payStatus);
}
/**
* 完成退款
* @param files 附件图片
* @param id 任务id
* @return
*/
@SaCheckPermission("business:contractPay:query")
@GetMapping("/refundFinish")
public R<Void> refundFinish(@RequestPart("files") List<MultipartFile> files, @NotNull Long id) {
psContractPayService.refundFinish(files,id);
return R.ok();
}
/**
* 导出合同回款记录列表
*//*

View File

@ -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失败

View File

@ -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失败

View File

@ -78,5 +78,10 @@ public class PsContractPayBo {
*/
private String payDesc;
/**
* 回款备注
*/
private String updateDesc;
}

View File

@ -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<PsCompanyInfoVo> companyInfoList;
/**
* 公司数量
*/
private Integer companyNum;
}

View File

@ -87,6 +87,10 @@ public class PsContractPayVo implements Serializable {
*/
private String payDesc;
/**
* 支付状态 PayStatusEnum
*/
private String payStatus;
/**
* 创建时间
*/

View File

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

View File

@ -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<String> getStatus() {
return List.of(PAYAPPO.getCode(),PAYAPPOSUCC.getCode(),PAYAPPOFIL.getCode());
return List.of(PAYAPPO.getCode(),FILE.getCode());
}
}

View File

@ -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<PsApproverRecord, PsApproverRecordVo> {
Page<PsApproverRecordVo> selectPageApproverList(@Param("page") Page<PsApproverRecord> page, @Param(Constants.WRAPPER) Wrapper<PsApproverRecord> queryWrapper);
Page<PsApproverRecordVo> selectPagePublicList(@Param("page") Page<PsApproverRecord> page, @Param(Constants.WRAPPER) Wrapper<PsApproverRecord> queryWrapper);
}

View File

@ -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<PsContractPay, PsContractPayVo> {
Page<PsRefundVo> queryRefundList(@Param("page") Page<PsContractPay> page, @Param(Constants.WRAPPER) Wrapper<PsContractPay> queryWrapper);
}

View File

@ -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<PsRefundVo> queryRefundList(PageQuery pageQuery,String payStatus);
/**
* 完成退款
* @param files 附件图片
* @param id 任务id
* @return
*/
void refundFinish(List<MultipartFile> files, Long id);
/* *//**
* 查询合同回款记录
*

View File

@ -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<PsApproverRecordVo> queryList(PsApproverRecordBo bo, PageQuery pageQuery);
}

View File

@ -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<PsApproverRecordVo> queryList(PsApproverRecordBo bo, PageQuery pageQuery){
QueryWrapper<PsApproverRecord> lqw = Wrappers.<PsApproverRecord>query().eq("app.business_type",approverType());
Page<PsApproverRecordVo> res = recordMapper.selectPageApproverList(pageQuery.build(), lqw);
if(CollectionUtils.isNotEmpty(res.getRecords())){
res.getRecords().forEach(item->{
item.setResidualMoney(item.getContractAmount().subtract(item.getPayMoney()));
//装填回款记录
List<PsContractPayVo> 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<PsContractPayVo> queryListByContractCode(String contractCode,String business,PayStatusEnum enu){
if(StringUtils.isBlank(contractCode)){return new ArrayList<>();}
List<PsContractPayVo> list = baseMapper.selectVoList(Wrappers.<PsContractPay>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;
}
}

View File

@ -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) {
//如果是修改不做处理
if(StringUtils.isNotBlank(psApproverRecord.getUpdateData())){
}else {//如果是新增则修改状态
//修改回款记录状态
PsContractPay update = new PsContractPay();
update.setId(Long.valueOf(psApproverRecord.getBusinessId()));
update.setPayStatus(PayStatusEnum.FILE.getCode());
payService.updateById(update);
}
}
}

View File

@ -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<PsApproverRecordVo> queryList(PsApproverRecordBo bo, PageQuery pageQuery){
QueryWrapper<PsApproverRecord> lqw = Wrappers.<PsApproverRecord>query().eq("app.business_type",approverType());
Page<PsApproverRecordVo> res = recordMapper.selectPagePublicList(pageQuery.build(), lqw);
if(CollectionUtils.isEmpty(res.getRecords())){
return res;
}
//装填公司信息
List<Long> ids = res.getRecords().stream().map(PsApproverRecordVo::getCustomId).collect(Collectors.toList());
List<PsCompanyInfoVo> companyInfoVos = companyInfoMapper.selectVoList(Wrappers.<PsCompanyInfo>lambdaQuery()
.in(PsCompanyInfo::getCustomId, ids)
.eq(PsCompanyInfo::getDelFlag, 0));
Map<Long, List<PsCompanyInfoVo>> 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;
}
}

View File

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

View File

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

View File

@ -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<PsApproverRecordVo> queryPageList(PsApproverRecordBo bo, PageQuery pageQuery) {
LambdaQueryWrapper<PsApproverRecord> lqw = buildQueryWrapper(bo);
Page<PsApproverRecordVo> result = baseMapper.selectVoPage(pageQuery.build(), lqw);
ApproverService service = container.getService(bo.getBusinessType());
Page<PsApproverRecordVo> 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);
}

View File

@ -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){

View File

@ -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<PsRefundVo> queryRefundList(PageQuery pageQuery,String payStatus){
QueryWrapper<PsContractPay> qw = new QueryWrapper<PsContractPay>().eq(StringUtils.isNotBlank(payStatus), "pay.pay_stauts", payStatus);
Page<PsRefundVo> list = baseMapper.queryRefundList(pageQuery.build(), qw);
list.getRecords().forEach(info->{
List<PsContractPayVo> 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<MultipartFile> files, Long id){
PsContractPay info = baseMapper.selectById(id);
List<String> 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);
}
/* *//**
* 查询合同回款记录

View File

@ -3,5 +3,37 @@
PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
"http://mybatis.org/dtd/mybatis-3-mapper.dtd">
<mapper namespace="com.pusong.business.mapper.PsApproverRecordMapper">
<select id="selectPageApproverList" resultType="com.pusong.business.domain.vo.PsApproverRecordVo">
select app.*
, info.pdf_id
, info.custom_manager
, com.company_name
, cus.custom_name
, cus.custom_mobile
, info.roll_back_pdf
, (select GROUP_CONCAT(business.business_type SEPARATOR ',')
from ps_contract_business business where business.contract_code = info.contract_code) as business_type_name
, info.contract_amount
, (select IFNULL(sum(pa.money),0) from ps_contract_pay pa where pa.pay_status = 1 and pa.business_type = 1 and pa.contract_code = info.contract_code
)-(select IFNULL(sum(pay.money),0) from ps_contract_pay pay where pay.pay_status = 1 and pay.business_type = 2 and pay.contract_code = info.contract_code)
as pay_money,
from ps_approver_record app
left join ps_contract_info info on app.contract_code = info.contract_code and app.del_flag = 0
left join ps_company_info com on info.company_id = com.id
left join ps_custom_info cus on cus.id = info.custom_id
${ew.getCustomSqlSegment}
</select>
<select id="selectPagePublicList" resultType="com.pusong.business.domain.vo.PsApproverRecordVo">
select app.*
, cus.custom_source
, cus.custom_introducer
, cus.custom_name
, cus.custom_mobile
, cus.custom_id
from ps_approver_record app
left join ps_custom_info cus on app.business_id = info.custom_id
${ew.getCustomSqlSegment}
</select>
</mapper>

View File

@ -13,12 +13,14 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
<sql id="queryContractList" >
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

View File

@ -4,4 +4,15 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
"http://mybatis.org/dtd/mybatis-3-mapper.dtd">
<mapper namespace="com.pusong.business.mapper.PsContractPayMapper">
<select id="queryRefundList" resultType="com.pusong.business.domain.vo.PsRefundVo">
select pay.id,pay.money return_money,pay.pay_mode,pay.gath_main,pay.pay_status,pay.pay_certification,
com.company_name,cus.custom_name,cus.custom_mobile,cus.custom_manager,info.contract_code,info.pdf_id,
(select GROUP_CONCAT(business.business_type SEPARATOR ',')
from ps_contract_business business where business.contract_code = info.contract_code) as business_type_name
from ps_contract_pay pay
left join ps_contract_info info on pay.contract_code = info.contract_code and pay.pay_status in (1,2,3) and pay.business_type = 2
left join ps_company_info com on com.id = info.company_id
left join ps_custom_info cus on cus.id = info.custom_id
${ew.getCustomSqlSegment}
</select>
</mapper>