支出合同变更修改

This commit is contained in:
梁琦涛
2021-10-26 16:14:19 +08:00
parent ab86edc836
commit 244d75f283
15 changed files with 493 additions and 90 deletions
@@ -80,7 +80,7 @@ public class PayIncomeContractCommon {
*/
public final static List<String> LIST_SPENDING_CONTRACT = Arrays.asList("合同编号","合同名称","签订单位","签订联系人","是否开口","负责人",
"部门名称","签订合同总金额","税率","未税金额","合同签订日期","合同终止日期","合同约定主要时点",
"应付金额","已付金额","未付金额","账款状态","合同约定付款次数","是否打包","打包年份");
"应付金额","已付金额","未付金额","账款状态","合同约定付款次数");
/**
* 支出合同分期信息excel 表头
*/
@@ -9,9 +9,9 @@ import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import com.alibaba.fastjson.JSON;
import com.alibaba.fastjson.JSONArray;
import com.alibaba.fastjson.JSONObject;
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
import com.baomidou.mybatisplus.core.metadata.IPage;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.jero.common.api.vo.Result;
@@ -20,12 +20,12 @@ import com.jero.common.common.RoleCommon;
import com.jero.common.exception.JeroBootException;
import com.jero.common.system.api.ISysBaseAPI;
import com.jero.common.system.base.controller.JeroController;
import com.jero.common.system.query.QueryGenerator;
import com.jero.common.system.vo.LoginUser;
import com.jero.common.util.DateUtils;
import com.jero.common.util.oConvertUtils;
import com.jero.contract.common.PayIncomeContractCommon;
import com.jero.contract.entity.*;
import com.jero.contract.service.IPaySpendingContractAuditService;
import com.jero.contract.service.IPaySpendingContractInstallmentService;
import com.jero.contract.service.IPaySpendingContractService;
import com.jero.contract.vo.*;
@@ -39,9 +39,7 @@ import org.jeecgframework.poi.excel.entity.ExportParams;
import org.jeecgframework.poi.excel.entity.enmus.ExcelType;
import org.jeecgframework.poi.excel.entity.params.ExcelExportEntity;
import org.jeecgframework.poi.excel.view.JeecgMapExcelView;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.core.env.Environment;
import org.springframework.transaction.annotation.Transactional;
import org.springframework.web.bind.annotation.*;
import org.springframework.web.servlet.ModelAndView;
import io.swagger.annotations.Api;
@@ -63,6 +61,8 @@ public class PaySpendingContractController extends JeroController<PaySpendingCon
@Resource
private IPaySpendingContractInstallmentService paySpendingContractInstallmentService;
@Resource
private IPaySpendingContractAuditService paySpendingContractAuditService;
@Resource
private Environment env;
@Resource
private ISysBaseAPI sysBaseAPI;
@@ -85,6 +85,7 @@ public class PaySpendingContractController extends JeroController<PaySpendingCon
@RequestParam(name="pageSize", defaultValue="10") Integer pageSize,
@RequestParam(name="startTime",required = false) String startTime,
@RequestParam(name="endTime",required = false) String endTime,
@RequestParam(name="chargeStatus",required = false) String chargeStatus,
HttpServletRequest req) {
if(!StringUtils.isBlank(paySpendingContract.getContractNum()) && paySpendingContract.getContractNum().length() > 50){
return Result.error("合同编号长度不能大于50个字符!");
@@ -98,8 +99,12 @@ public class PaySpendingContractController extends JeroController<PaySpendingCon
if(!StringUtils.isBlank(paySpendingContract.getContractNum())){
paySpendingContract.setContractNum(oConvertUtils.replaceAllPercent(paySpendingContract.getContractNum()));
}
LoginUser sysUser = (LoginUser) SecurityUtils.getSubject().getPrincipal();
if(!sysUser.getRoleCode().contains(RoleCommon.CWRY)){
paySpendingContract.setPrincipalId(sysUser.getId());
}
Page<PaySpendingContract> page = new Page<>(pageNo, pageSize);
IPage<PaySpendingContract> pageList = paySpendingContractService.queryPageList(page, paySpendingContract,startTime,endTime);
IPage<PaySpendingContract> pageList = paySpendingContractService.queryPageList(page, paySpendingContract,startTime,endTime,chargeStatus);
return Result.OK(pageList);
}
@@ -157,6 +162,40 @@ public class PaySpendingContractController extends JeroController<PaySpendingCon
}
return Result.error("合同编号不存在!");
}
/**
* 审核
*
* @param paySpendingContractAudit 审核记录
*/
@AutoLog(value = "收入合同-合同审核",operateType = 7)
@RequiresPermissions("revenueContract:aduit")
@ApiOperation(value="收入合同-审核", notes="收入合同-审核")
@PostMapping(value = "/audit")
public Result<?> audit(@RequestBody PaySpendingContractAudit paySpendingContractAudit) {
if(StringUtils.isBlank(paySpendingContractAudit.getContractId())){
return Result.error("id不能为空!");
}
paySpendingContractService.updateAudit(paySpendingContractAudit);
return Result.OK("审核成功!");
}
/**
* 归档
*
* @param paySpendingContractAudit 审核记录
*/
@AutoLog(value = "收入合同-归档",operateType = 8)
@RequiresPermissions("revenueContract:archive")
@ApiOperation(value="收入合同-归档", notes="收入合同-归档")
@PostMapping(value = "/archive")
public Result<?> archive(@RequestBody PaySpendingContractAudit paySpendingContractAudit) {
if(StringUtils.isBlank(paySpendingContractAudit.getContractId())){
return Result.error("id不能为空!");
}
paySpendingContractService.updateArchive(paySpendingContractAudit);
return Result.OK("归档成功!");
}
/**
* 通过id删除
*
@@ -220,14 +259,40 @@ public class PaySpendingContractController extends JeroController<PaySpendingCon
queryPaySpendingContractInstallment.eq(PaySpendingContractInstallment::getContractId,paySpendingContract.getId());
List<PaySpendingContractInstallment> listPaySpendingContractInstallment = paySpendingContractInstallmentService.list(queryPaySpendingContractInstallment);
String str = JSON.toJSONString(paySpendingContract);
PaySpendingContractDetailOutput paySpendingContractDetailOutput = JSONObject.parseObject(str,PaySpendingContractDetailOutput.class);
// 字典翻译
paySpendingContractDetailOutput.setOpening_dictText(sysBaseAPI.translateDict("yn",String.valueOf(paySpendingContract.getOpening())));
paySpendingContractDetailOutput.setAccountStatus_dictText(sysBaseAPI.translateDict("revenue_contract_account_status",String.valueOf(paySpendingContract.getAccountStatus())));
paySpendingContractDetailOutput.setPack_dictText(sysBaseAPI.translateDict("yn",String.valueOf(paySpendingContract.getPack())));
paySpendingContractDetailOutput.setContractStatus_dictText(sysBaseAPI.translateDict("revenue_contract_status",String.valueOf(paySpendingContract.getStatus())));
if(!CollectionUtils.isEmpty(listPaySpendingContractInstallment)){
paySpendingContractDetailOutput.setListInstallment(listPaySpendingContractInstallment);
}
LambdaQueryWrapper<PaySpendingContractAudit> queryPaySpendingContractAudit = new LambdaQueryWrapper<>();
queryPaySpendingContractAudit.in(PaySpendingContractAudit::getContractId,id);
List<PaySpendingContractAudit> listPaySpendingContractAudit = paySpendingContractAuditService.list(queryPaySpendingContractAudit);
List<PaySpendingContractAuditOutput> listArchive = new ArrayList<>();
List<PaySpendingContractAuditOutput> listAudit = new ArrayList<>();
if(!CollectionUtils.isEmpty(listPaySpendingContractAudit)){
String strAudit = JSON.toJSONString(listPaySpendingContractAudit);
List<PaySpendingContractAuditOutput> listAll = JSONArray.parseArray(strAudit,PaySpendingContractAuditOutput.class);
listAll.forEach(p->{
if(!Objects.isNull(p.getContractStatus())){
p.setContractStatus_dictText(sysBaseAPI.translateDict("revenue_contract_status",String.valueOf(p.getContractStatus())));
}
});
// 获取存档记录
listArchive = listAll.stream().filter(p->Objects.equals(p.getContractStatus(), PayIncomeContractCommon.STATUS5)).collect(Collectors.toList());
// 获取审核记录
listAudit = listAll.stream().filter(p->!Objects.equals(p.getContractStatus(), PayIncomeContractCommon.STATUS5)).collect(Collectors.toList());
}
if(!CollectionUtils.isEmpty(listArchive)){
paySpendingContractDetailOutput.setListArchive(listArchive);
}
if(!CollectionUtils.isEmpty(listAudit)){
paySpendingContractDetailOutput.setListAudit(listAudit);
}
return Result.OK(paySpendingContractDetailOutput);
}
@@ -325,26 +390,24 @@ public class PaySpendingContractController extends JeroController<PaySpendingCon
filedsList.add(new ExcelExportEntity("合同签订日期", "contractDate"));
filedsList.add(new ExcelExportEntity("合同终止日期", "terminationDate"));
filedsList.add(new ExcelExportEntity("合同约定主要时点", "contractTimePoints"));
filedsList.add(new ExcelExportEntity("应收金额", "accountsReceivableAmount"));
filedsList.add(new ExcelExportEntity("已收金额", "amountReceived"));
filedsList.add(new ExcelExportEntity("未收金额", "outstandingAmount"));
filedsList.add(new ExcelExportEntity("应付金额", "accountsReceivableAmount"));
filedsList.add(new ExcelExportEntity("已付金额", "amountReceived"));
filedsList.add(new ExcelExportEntity("未付金额", "outstandingAmount"));
filedsList.add(new ExcelExportEntity("账款状态", "accountStatus"));
filedsList.add(new ExcelExportEntity("合同约定付款次数", "contractPaymentTimes"));
filedsList.add(new ExcelExportEntity("是否打包", "pack"));
filedsList.add(new ExcelExportEntity("打包年份", "packYear"));
int count = mapCount.get("count");
if(count > 0){
for (int i = 1; i <= count; i++){
filedsList.add(new ExcelExportEntity(i + "阶段", "phaseName" + i));
filedsList.add(new ExcelExportEntity(i + "阶段应收", "accountsReceivableAmount" + i));
filedsList.add(new ExcelExportEntity(i + "阶段应收时间", "accountsReceivableTime" + i));
filedsList.add(new ExcelExportEntity(i + "阶段实收", "paidAmount" + i));
filedsList.add(new ExcelExportEntity(i + "阶段实收时间", "paidTime" + i));
filedsList.add(new ExcelExportEntity(i + "阶段应付", "accountsReceivableAmount" + i));
filedsList.add(new ExcelExportEntity(i + "阶段应付时间", "accountsReceivableTime" + i));
filedsList.add(new ExcelExportEntity(i + "阶段实付", "paidAmount" + i));
filedsList.add(new ExcelExportEntity(i + "阶段实付时间", "paidTime" + i));
}
}
// Step.3 AutoPoi 导出Excel
ModelAndView mv = new ModelAndView(new JeecgMapExcelView());
mv.addObject(MapExcelConstants.FILE_NAME, "收入合同"); //此处设置的filename无效 ,前端会重更新设置一下
mv.addObject(MapExcelConstants.FILE_NAME, "支出合同"); //此处设置的filename无效 ,前端会重更新设置一下
mv.addObject(MapExcelConstants.ENTITY_LIST, filedsList);
//update-begin--Author:liusq Date:20210126 for:图片导出报错,ImageBasePath未设置--------------------
ExportParams exportParams=new ExportParams("支出合同", "支出合同");
@@ -164,16 +164,17 @@ public class PaySpendingContract implements Serializable {
@ApiModelProperty(value = "合同约定付款次数")
private String contractPaymentTimes;
/**是否打包(1:是,0:否)*/
@Excel(name = "是否打包(1:是,0:否)", width = 15)
@ApiModelProperty(value = "是否打包(1:是,0:否)")
@NotNull(message = "是否打包不能为空")
@Dict(dicCode = "yn")
private Integer pack;
/**打包年份*/
@Excel(name = "打包年份", width = 15)
@ApiModelProperty(value = "打包年份")
@Pattern(regexp = "^\\d{4}$",message = "打包年份式错误")
private String packYear;
/**合同状态(2:已通过,3:未通过,4:已归档)*/
@Excel(name = "合同状态(2:已通过,3:未通过,4:已存档)", width = 15)
@ApiModelProperty(value = "合同状态(2:已通过,3:未通过,4:已存档)")
@Dict(dicCode = "expenditure_contract_status")
private java.lang.Integer status;
/**创建人*/
@ApiModelProperty(value = "创建人")
private String createBy;
@@ -0,0 +1,72 @@
package com.jero.contract.entity;
import com.baomidou.mybatisplus.annotation.IdType;
import com.baomidou.mybatisplus.annotation.TableId;
import com.baomidou.mybatisplus.annotation.TableName;
import com.fasterxml.jackson.annotation.JsonFormat;
import com.jero.common.aspect.annotation.Dict;
import io.swagger.annotations.ApiModel;
import io.swagger.annotations.ApiModelProperty;
import lombok.Data;
import lombok.EqualsAndHashCode;
import lombok.experimental.Accessors;
import org.jeecgframework.poi.excel.annotation.Excel;
import org.springframework.format.annotation.DateTimeFormat;
import javax.validation.constraints.Max;
import javax.validation.constraints.Min;
import javax.validation.constraints.Size;
import java.io.Serializable;
/**
* @Description: pay_spending_contract_audit
* @Author: jeecg-boot
* @Date: 2021-09-03
* @Version: V1.0
*/
@Data
@TableName("pay_spending_contract_audit")
@Accessors(chain = true)
@EqualsAndHashCode(callSuper = false)
@ApiModel(value="pay_spending_contract_audit对象", description="pay_spending_contract_audit")
public class PaySpendingContractAudit implements Serializable {
private static final long serialVersionUID = 1L;
/**主键*/
@TableId(type = IdType.ASSIGN_ID)
@ApiModelProperty(value = "主键")
private String id;
/**合同id*/
@Excel(name = "合同id", width = 15)
@ApiModelProperty(value = "合同id")
@Size(max = 32, message = "合同id长度不能大于32个字符")
private String contractId;
/**合同状态(2:待审核,3:已通过,4:未通过,5:已归档)*/
@Excel(name = "合同状态(2:待审核,3:已通过,4:未通过,5:已归档)", width = 15)
@ApiModelProperty(value = "合同状态(2:待审核,3:已通过,4:未通过,5:已归档)")
@Dict(dicCode = "expenditure_contract_status")
@Max(5)
@Min(1)
private Integer contractStatus;
/**拒绝说明*/
@Excel(name = "拒绝说明", width = 15)
@ApiModelProperty(value = "拒绝说明")
@Size(max = 200, message = "拒绝说明长度不能大于200个字符")
private String explainRemarks;
/**创建人*/
@ApiModelProperty(value = "创建人")
private String createBy;
/**创建时间*/
@JsonFormat(timezone = "GMT+8",pattern = "yyyy-MM-dd HH:mm:ss")
@DateTimeFormat(pattern="yyyy-MM-dd HH:mm:ss")
@ApiModelProperty(value = "创建时间")
private java.util.Date createTime;
/**更新人*/
@ApiModelProperty(value = "更新人")
private String updateBy;
/**更新时间*/
@JsonFormat(timezone = "GMT+8",pattern = "yyyy-MM-dd HH:mm:ss")
@DateTimeFormat(pattern="yyyy-MM-dd HH:mm:ss")
@ApiModelProperty(value = "更新时间")
private java.util.Date updateTime;
}
@@ -0,0 +1,15 @@
package com.jero.contract.mapper;
import com.baomidou.mybatisplus.core.mapper.BaseMapper;
import com.jero.contract.entity.PaySpendingContractAudit;
/**
* @Description: pay_income_contract_audit
* @Author: jeecg-boot
* @Date: 2021-09-03
* @Version: V1.0
*/
public interface PaySpendingContractAuditMapper extends BaseMapper<PaySpendingContractAudit> {
}
@@ -26,7 +26,7 @@ public interface PaySpendingContractMapper extends BaseMapper<PaySpendingContrac
* @Exception
*/
IPage<PaySpendingContract> queryPageList(Page<PaySpendingContract> page, @Param("paySpendingContract") PaySpendingContract paySpendingContract
,@Param("startTime") String startTime, @Param("endTime") String endTime);
,@Param("startTime") String startTime, @Param("endTime") String endTime,@Param("chargeStatus") String chargeStatus);
/**
* @Description excel导出
@@ -0,0 +1,5 @@
<?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.jero.contract.mapper.PaySpendingContractAuditMapper">
</mapper>
@@ -30,6 +30,8 @@
contract_payment_times,
pack,
pack_year,
status,
if(status = 2,1,0) as statusOrder,
create_by,
create_time,
update_by,
@@ -55,6 +57,12 @@
<if test="paySpendingContract.principalId != null and paySpendingContract.principalId != ''">
AND principal_id = #{paySpendingContract.principalId}
</if>
<if test="paySpendingContract.status != null and paySpendingContract.status != ''">
AND aa.status = #{paySpendingContract.status}
</if>
<if test="chargeStatus != null and chargeStatus != ''">
AND aa.chargeStatus = #{chargeStatus}
</if>
</where>
ORDER BY chargeStatus desc,create_time desc
</select>
@@ -0,0 +1,14 @@
package com.jero.contract.service;
import com.baomidou.mybatisplus.extension.service.IService;
import com.jero.contract.entity.PaySpendingContractAudit;
/**
* @Description: pay_income_contract_audit
* @Author: jeecg-boot
* @Date: 2021-09-03
* @Version: V1.0
*/
public interface IPaySpendingContractAuditService extends IService<PaySpendingContractAudit> {
}
@@ -3,7 +3,10 @@ package com.jero.contract.service;
import com.baomidou.mybatisplus.core.metadata.IPage;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.baomidou.mybatisplus.extension.service.IService;
import com.jero.contract.entity.PayIncomeContract;
import com.jero.contract.entity.PayIncomeContractAudit;
import com.jero.contract.entity.PaySpendingContract;
import com.jero.contract.entity.PaySpendingContractAudit;
import com.jero.contract.vo.PaySpendingContractInput;
import javax.servlet.http.HttpServletRequest;
@@ -24,7 +27,7 @@ public interface IPaySpendingContractService extends IService<PaySpendingContrac
* @Return
* @Exception
*/
IPage<PaySpendingContract> queryPageList(Page<PaySpendingContract> page,PaySpendingContract paySpendingContract,String startTime,String endTime);
IPage<PaySpendingContract> queryPageList(Page<PaySpendingContract> page,PaySpendingContract paySpendingContract,String startTime,String endTime,String chargeStatus);
/**
* @Description 添加
@@ -80,4 +83,22 @@ public interface IPaySpendingContractService extends IService<PaySpendingContrac
* @Exception
*/
List<PaySpendingContract> queryList(String contractNum,String contractName,String startTime,String endTime);
/**
* @Description 审核
* @Author lqt
* @Date 2021/9/5
* @Param paySpendingContractAudit 审核记录
* @Return
* @Exception
*/
void updateAudit(PaySpendingContractAudit paySpendingContractAudit);
/**
* @Description 归档
* @Author lqt
* @Date 2021/9/5
* @Param paySpendingContractAudit 审核记录
* @Return
* @Exception
*/
void updateArchive(PaySpendingContractAudit paySpendingContractAudit);
}
@@ -0,0 +1,18 @@
package com.jero.contract.service.impl;
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
import com.jero.contract.entity.PaySpendingContractAudit;
import com.jero.contract.mapper.PaySpendingContractAuditMapper;
import com.jero.contract.service.IPaySpendingContractAuditService;
import org.springframework.stereotype.Service;
/**
* @Description: pay_income_contract_audit
* @Author: jeecg-boot
* @Date: 2021-09-03
* @Version: V1.0
*/
@Service
public class PaySpendingContractAuditServiceImpl extends ServiceImpl<PaySpendingContractAuditMapper, PaySpendingContractAudit> implements IPaySpendingContractAuditService {
}
@@ -1,27 +1,39 @@
package com.jero.contract.service.impl;
import com.alibaba.fastjson.JSONObject;
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
import com.baomidou.mybatisplus.core.conditions.update.LambdaUpdateWrapper;
import com.baomidou.mybatisplus.core.metadata.IPage;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
import com.jero.common.common.RoleCommon;
import com.jero.common.dto.SendMessageDTO;
import com.jero.common.enums.ManagementMessageEnums;
import com.jero.common.exception.JeroBootException;
import com.jero.common.service.SendMessageService;
import com.jero.common.system.api.ISysBaseAPI;
import com.jero.common.system.vo.LoginUser;
import com.jero.common.util.DateUtils;
import com.jero.common.util.ImportExcelUtil;
import com.jero.common.util.PasswordUtil;
import com.jero.common.util.ValidUtil;
import com.jero.contract.common.PayIncomeContractCommon;
import com.jero.contract.entity.PayIncomeContract;
import com.jero.contract.entity.PaySpendingContract;
import com.jero.contract.entity.PaySpendingContractAudit;
import com.jero.contract.entity.PaySpendingContractInstallment;
import com.jero.contract.mapper.PaySpendingContractMapper;
import com.jero.contract.service.IPaySpendingContractAuditService;
import com.jero.contract.service.IPaySpendingContractInstallmentService;
import com.jero.contract.service.IPaySpendingContractService;
import com.jero.contract.vo.PaySpendingContractImportExcel;
import com.jero.contract.vo.PaySpendingContractInput;
import com.jero.mail.entity.PayMailContract;
import com.jero.mail.service.IPayMailContractService;
import com.jero.modules.system.entity.SysUser;
import com.jero.modules.system.service.ISysUserService;
import com.jero.temporary.entity.PayContactsManagementTemporary;
import com.jero.temporary.service.IPayContactsManagementTemporaryService;
import lombok.extern.slf4j.Slf4j;
import org.apache.commons.collections.CollectionUtils;
import org.apache.commons.lang3.StringUtils;
@@ -64,11 +76,19 @@ public class PaySpendingContractServiceImpl extends ServiceImpl<PaySpendingContr
private ISysBaseAPI sysBaseAPI;
@Resource
private PaySpendingContractMapper paySpendingContractMapper;
@Resource
private IPaySpendingContractAuditService paySpendingContractAuditService;
@Resource
private IPayMailContractService payMailContractService;
@Resource
private IPayContactsManagementTemporaryService payContactsManagementTemporaryService;
@Resource
private SendMessageService sendMessageService;
@Override
public IPage<PaySpendingContract> queryPageList(Page<PaySpendingContract> page, PaySpendingContract paySpendingContract, String startTime, String endTime) {
return paySpendingContractMapper.queryPageList(page,paySpendingContract,startTime,endTime);
public IPage<PaySpendingContract> queryPageList(Page<PaySpendingContract> page, PaySpendingContract paySpendingContract, String startTime, String endTime,String chargeStatus) {
return paySpendingContractMapper.queryPageList(page,paySpendingContract,startTime,endTime,chargeStatus);
}
@Override
@@ -83,7 +103,7 @@ public class PaySpendingContractServiceImpl extends ServiceImpl<PaySpendingContr
}
if(!Objects.isNull(paySpendingContract.getAccountsReceivableAmount()) && !Objects.isNull(paySpendingContract.getAmountReceived())
&& paySpendingContract.getAccountsReceivableAmount().compareTo(paySpendingContract.getAmountReceived()) < 0){
throw new JeroBootException("已收金额大于应收金额!");
throw new JeroBootException("已付金额大于应付金额!");
}
StringBuilder msgPayIncomeContract = ValidUtil.validateAll(paySpendingContract);
if(!StringUtils.isBlank(msgPayIncomeContract)){
@@ -109,6 +129,7 @@ public class PaySpendingContractServiceImpl extends ServiceImpl<PaySpendingContr
if(Objects.isNull(principalName)){
throw new JeroBootException("负责人名称为空!");
}
paySpendingContract.setStatus(PayIncomeContractCommon.STATUS2);
paySpendingContract.setPrincipalId(principalName.getId());
paySpendingContract.setPrincipalName(principalName.getRealname());
paySpendingContractService.save(paySpendingContract);
@@ -123,7 +144,7 @@ public class PaySpendingContractServiceImpl extends ServiceImpl<PaySpendingContr
}
if(!Objects.isNull(p.getAccountsReceivableAmount()) && !Objects.isNull(p.getPaidAmount())
&& p.getAccountsReceivableAmount().compareTo(p.getPaidAmount()) < 0){
msgPaySpendingContractInstallment.append("第").append(finalListPaySpendingContractInstallment.indexOf(p) + 1).append("期实收金额大于应收金额!");
msgPaySpendingContractInstallment.append("第").append(finalListPaySpendingContractInstallment.indexOf(p) + 1).append("期实付金额大于应付金额!");
}
});
paySpendingContractInstallmentService.saveBatch(listPaySpendingContractInstallment);
@@ -131,6 +152,34 @@ public class PaySpendingContractServiceImpl extends ServiceImpl<PaySpendingContr
if(!StringUtils.isBlank(msgPaySpendingContractInstallment)){
throw new JeroBootException(msgPaySpendingContractInstallment.toString());
}
LoginUser sysUser = (LoginUser) SecurityUtils.getSubject().getPrincipal();
// 获取项目负责人,发送消息
List<SysUser> list = sysUserService.getRolesUser(Arrays.asList(RoleCommon.CWRY));
if(!CollectionUtils.isEmpty(list)){
list.forEach(p->{
// 发送消息
SendMessageDTO sendMessageDTO = new SendMessageDTO();
if(!StringUtils.isBlank(p.getEmail())){
sendMessageDTO.setEmail(PasswordUtil.decrypt(p.getEmail()));
}
if(!StringUtils.isEmpty(p.getPhone())){
sendMessageDTO.setPhone(PasswordUtil.decrypt(p.getPhone()));
}
HashMap<String,String> map = new HashMap<>();
map.put("contractNum",paySpendingContract.getContractNum());
map.put("contractName",paySpendingContract.getContractName());
sendMessageDTO.setFromUser(sysUser.getUsername());
sendMessageDTO.setToUser(p.getUsername());
sendMessageDTO.setTemplateCode(ManagementMessageEnums.MSG2.getCode());
sendMessageDTO.setTemplateParam(map);
sendMessageDTO.setBusType("M_OPEN_TYPE2");
JSONObject json = new JSONObject();
json.put("revenueId",paySpendingContract.getId());
json.put("contractNum",paySpendingContract.getContractNum());
sendMessageDTO.setBusId(json.toJSONString());
sendMessageService.SendMessageService(sendMessageDTO);
});
}
return paySpendingContract;
}
@@ -146,7 +195,7 @@ public class PaySpendingContractServiceImpl extends ServiceImpl<PaySpendingContr
}
if(!Objects.isNull(paySpendingContract.getAccountsReceivableAmount()) && !Objects.isNull(paySpendingContract.getAmountReceived())
&& paySpendingContract.getAccountsReceivableAmount().compareTo(paySpendingContract.getAmountReceived()) < 0){
throw new JeroBootException("已收金额大于应收金额!");
throw new JeroBootException("已付金额大于应付金额!");
}
StringBuilder msgPayIncomeContract = ValidUtil.validateAll(paySpendingContract);
if(!StringUtils.isBlank(msgPayIncomeContract)){
@@ -195,7 +244,7 @@ public class PaySpendingContractServiceImpl extends ServiceImpl<PaySpendingContr
}
if(!Objects.isNull(p.getAccountsReceivableAmount()) && !Objects.isNull(p.getPaidAmount())
&& p.getAccountsReceivableAmount().compareTo(p.getPaidAmount()) < 0){
msgPaySpendingContractInstallment.append("第").append(finalListPaySpendingContractInstallment.indexOf(p) + 1).append("期实收金额大于应收金额!");
msgPaySpendingContractInstallment.append("第").append(finalListPaySpendingContractInstallment.indexOf(p) + 1).append("期实付金额大于应付金额!");
}
});
paySpendingContractInstallmentService.saveBatch(listPaySpendingContractInstallment);
@@ -208,6 +257,7 @@ public class PaySpendingContractServiceImpl extends ServiceImpl<PaySpendingContr
if(Objects.isNull(principalName)){
throw new JeroBootException("负责人名称为空!");
}
paySpendingContract.setStatus(PayIncomeContractCommon.STATUS2);
paySpendingContract.setPrincipalId(principalName.getId());
paySpendingContract.setPrincipalName(principalName.getRealname());
paySpendingContractService.updateById(paySpendingContract);
@@ -239,7 +289,7 @@ public class PaySpendingContractServiceImpl extends ServiceImpl<PaySpendingContr
query.in(PaySpendingContract::getId,ids);
List<PaySpendingContract> listPaySpendingContractStatus = paySpendingContractService.list(query);
if(CollectionUtils.isEmpty(listPaySpendingContractStatus)){
throw new JeroBootException("收入合同不存在!");
throw new JeroBootException("支出合同不存在!");
}
paySpendingContractService.removeByIds(ids);
LambdaUpdateWrapper<PaySpendingContractInstallment> updatePaySpendingContractInstallment = new LambdaUpdateWrapper<>();
@@ -338,28 +388,28 @@ public class PaySpendingContractServiceImpl extends ServiceImpl<PaySpendingContr
paySpendingContractInstallment.setPhaseName(sub.get(mm));
if(!StringUtils.isBlank(sub.get(mm + 1))){
if(!pattern.matcher(sub.get(mm + 1)).matches()){
sb.append("第").append(n + 1).append("行:").append(i+1).append("阶段应收格式错误,请修改。<br/>");
sb.append("第").append(n + 1).append("行:").append(i+1).append("阶段应付格式错误,请修改。<br/>");
}else{
paySpendingContractInstallment.setAccountsReceivableAmount(new BigDecimal(sub.get(mm + 1)));
}
}
if(!StringUtils.isBlank(sub.get(mm + 2))){
if(!DateUtils.isValidDate(sub.get(mm + 2))){
sb.append("第").append(n + 1).append("行:").append(i+1).append("阶段应收时间日期格式不正确,请修改。 <br/>");
sb.append("第").append(n + 1).append("行:").append(i+1).append("阶段应付时间日期格式不正确,请修改。 <br/>");
}else{
paySpendingContractInstallment.setAccountsReceivableTime(DateUtils.str2Date(sub.get(mm + 2),new SimpleDateFormat("yyyy-MM-dd")));
}
}
if(!StringUtils.isBlank(sub.get(mm + 3))){
if(!pattern.matcher(sub.get(mm + 3)).matches()){
sb.append("第").append(n + 1).append("行:").append(i+1).append("阶段实收格式错误,请修改。<br/>");
sb.append("第").append(n + 1).append("行:").append(i+1).append("阶段实付格式错误,请修改。<br/>");
}else{
paySpendingContractInstallment.setPaidAmount(new BigDecimal(sub.get(mm + 3)));
}
}
if(!StringUtils.isBlank(sub.get(mm + 4))) {
if (!DateUtils.isValidDate(sub.get(mm + 4))) {
sb.append("第").append(n + 1).append("行:").append(i+1).append("阶段实收时间日期格式不正确,请修改。<br/>");
sb.append("第").append(n + 1).append("行:").append(i+1).append("阶段实付时间日期格式不正确,请修改。<br/>");
} else {
paySpendingContractInstallment.setPaidTime(DateUtils.str2Date(sub.get(mm + 4), new SimpleDateFormat("yyyy-MM-dd")));
}
@@ -444,9 +494,9 @@ public class PaySpendingContractServiceImpl extends ServiceImpl<PaySpendingContr
}
if(!Objects.isNull(paySpendingContract.getAccountsReceivableAmount()) && !Objects.isNull(paySpendingContract.getAmountReceived())){
if(paySpendingContract.getAccountsReceivableAmount().compareTo(paySpendingContract.getAmountReceived()) < 0){
sb.append("第").append(n + 1).append("行:已收金额大于应收金额,请修改。<br/>");
sb.append("第").append(n + 1).append("行:已付金额大于应付金额,请修改。<br/>");
}else if(!Objects.isNull(paySpendingContract.getOutstandingAmount()) && paySpendingContract.getAccountsReceivableAmount().subtract(paySpendingContract.getAmountReceived()).compareTo(paySpendingContract.getOutstandingAmount()) != 0){
sb.append("第").append(n + 1).append("行:未收金额不正确,请修改。<br/>");
sb.append("第").append(n + 1).append("行:未付金额不正确,请修改。<br/>");
}
}
List<PaySpendingContractInstallment> listPaySpendingContractInstallment = p.getListInstallment();
@@ -455,7 +505,7 @@ public class PaySpendingContractServiceImpl extends ServiceImpl<PaySpendingContr
int c = listPaySpendingContractInstallment.indexOf(item) + 1;
if(!Objects.isNull(item.getAccountsReceivableAmount()) && !Objects.isNull(item.getPaidAmount())
&& item.getAccountsReceivableAmount().compareTo(item.getPaidAmount()) < 0){
sb.append("第").append(n + 1).append("行:").append(c).append("阶段实收大于应收,请修改。<br/>");
sb.append("第").append(n + 1).append("行:").append(c).append("阶段实付大于应付,请修改。<br/>");
}
});
}
@@ -508,6 +558,133 @@ public class PaySpendingContractServiceImpl extends ServiceImpl<PaySpendingContr
return paySpendingContractMapper.queryList( contractNum, contractName, startTime, endTime);
}
@Override
@Transactional
public void updateAudit(PaySpendingContractAudit paySpendingContractAudit) {
PaySpendingContract paySpendingContractStatus = paySpendingContractService.getById(paySpendingContractAudit.getContractId());
if(Objects.isNull(paySpendingContractStatus)){
throw new JeroBootException("支出合同不存在!");
}
// 校验合同状态是否为待审核
if(Objects.isNull(paySpendingContractAudit.getContractStatus()) || !Objects.equals(paySpendingContractStatus.getStatus(),PayIncomeContractCommon.STATUS2)
|| (!Objects.equals(paySpendingContractAudit.getContractStatus(),PayIncomeContractCommon.STATUS3) && !Objects.equals(paySpendingContractAudit.getContractStatus(),PayIncomeContractCommon.STATUS4))){
throw new JeroBootException("支出合同状态不正确!");
}
if(Objects.equals(paySpendingContractAudit.getContractStatus(),PayIncomeContractCommon.STATUS4)
&& StringUtils.isBlank(paySpendingContractAudit.getExplainRemarks())){
throw new JeroBootException("请输入拒绝说明!");
}
if(Objects.equals(paySpendingContractAudit.getContractStatus(),PayIncomeContractCommon.STATUS3)){
paySpendingContractAudit.setExplainRemarks("");
}
LoginUser sysUser = (LoginUser) SecurityUtils.getSubject().getPrincipal();
LambdaUpdateWrapper<PaySpendingContract> update = new LambdaUpdateWrapper<>();
update.set(PaySpendingContract::getUpdateBy,sysUser.getUsername());
update.set(PaySpendingContract::getUpdateTime,new Date());
update.eq(PaySpendingContract::getId,paySpendingContractAudit.getContractId());
update.set(PaySpendingContract::getStatus, paySpendingContractAudit.getContractStatus());
paySpendingContractService.update(update);
// 添加审核记录
paySpendingContractAuditService.save(paySpendingContractAudit);
// 审核通过
if(Objects.equals(paySpendingContractAudit.getContractStatus(),PayIncomeContractCommon.STATUS3)){
// 更新到合同邮寄表
PayMailContract payMailContract = new PayMailContract();
PayContactsManagementTemporary payContactsManagementTemporary = payContactsManagementTemporaryService.getById(paySpendingContractStatus.getSignedContactsTemporaryId());
if(!Objects.isNull(payContactsManagementTemporary)){
payMailContract.setMobile(payContactsManagementTemporary.getPhone());
payMailContract.setEmail(payContactsManagementTemporary.getEmail());
}
payMailContract.setContractId(paySpendingContractStatus.getId());
payMailContract.setPostStatus(PayIncomeContractCommon.POST_STATUS0);
payMailContract.setLiaisonMan(paySpendingContractStatus.getContractName());
payMailContractService.save(payMailContract);
// 获取项目负责人,发送消息
List<SysUser> list = sysUserService.getRolesUser(Arrays.asList(RoleCommon.CWRY));
if(!CollectionUtils.isEmpty(list)){
list.forEach(p->{
// 发送消息
SendMessageDTO sendMessageDTO = new SendMessageDTO();
if(!StringUtils.isBlank(p.getEmail())){
sendMessageDTO.setEmail(PasswordUtil.decrypt(p.getEmail()));
}
if(!StringUtils.isBlank(p.getPhone())){
sendMessageDTO.setPhone(PasswordUtil.decrypt(p.getPhone()));
}
HashMap<String,String> map = new HashMap<>();
map.put("contractNum",paySpendingContractStatus.getContractNum());
map.put("contractName",paySpendingContractStatus.getContractName());
sendMessageDTO.setFromUser(sysUser.getUsername());
sendMessageDTO.setToUser(p.getUsername());
sendMessageDTO.setTemplateCode(ManagementMessageEnums.MSG3.getCode());
sendMessageDTO.setTemplateParam(map);
sendMessageDTO.setBusType("M_OPEN_TYPE3");
JSONObject json = new JSONObject();
json.put("revenueId",paySpendingContractStatus.getId());
json.put("contractNum",paySpendingContractStatus.getContractNum());
sendMessageDTO.setBusId(json.toJSONString());
sendMessageService.SendMessageService(sendMessageDTO);
});
}
}
// 审核未通过
if(Objects.equals(paySpendingContractAudit.getContractStatus(),PayIncomeContractCommon.STATUS4)){
SysUser sysUserData = sysUserService.getById(paySpendingContractStatus.getPrincipalId());
if(!Objects.isNull(sysUserData)){
// 发送消息
SendMessageDTO sendMessageDTO = new SendMessageDTO();
if(!StringUtils.isBlank(sysUserData.getEmail())){
sendMessageDTO.setEmail(PasswordUtil.decrypt(sysUserData.getEmail()));
}
if(!StringUtils.isEmpty(sysUserData.getPhone())){
sendMessageDTO.setPhone(PasswordUtil.decrypt(sysUserData.getPhone()));
}
HashMap<String,String> map = new HashMap<>();
map.put("contractNum",paySpendingContractStatus.getContractNum());
map.put("contractName",paySpendingContractStatus.getContractName());
sendMessageDTO.setFromUser(sysUser.getUsername());
sendMessageDTO.setToUser(sysUserData.getUsername());
sendMessageDTO.setTemplateCode(ManagementMessageEnums.MSG4.getCode());
sendMessageDTO.setTemplateParam(map);
sendMessageDTO.setBusType("M_OPEN_TYPE4");
JSONObject json = new JSONObject();
json.put("revenueId",paySpendingContractStatus.getId());
json.put("contractNum",paySpendingContractStatus.getContractNum());
sendMessageDTO.setBusId(json.toJSONString());
sendMessageService.SendMessageService(sendMessageDTO);
}
}
}
@Override
@Transactional
public void updateArchive(PaySpendingContractAudit paySpendingContractAudit) {
PaySpendingContract paySpendingContractStatus = paySpendingContractService.getById(paySpendingContractAudit.getContractId());
if(Objects.isNull(paySpendingContractStatus)){
throw new JeroBootException("支出合同不存在!");
}
// 校验合同状态是否为已通过
if(!Objects.equals(paySpendingContractStatus.getStatus(),PayIncomeContractCommon.STATUS3)){
throw new JeroBootException("支出合同不可归档!");
}
if(Objects.isNull(paySpendingContractAudit.getContractStatus()) || !Objects.equals(paySpendingContractAudit.getContractStatus(),PayIncomeContractCommon.STATUS5)){
throw new JeroBootException("支出合同状态不正确!");
}
LoginUser sysUser = (LoginUser) SecurityUtils.getSubject().getPrincipal();
LambdaUpdateWrapper<PaySpendingContract> update = new LambdaUpdateWrapper<>();
update.set(PaySpendingContract::getUpdateBy,sysUser.getUsername());
update.set(PaySpendingContract::getUpdateTime,new Date());
update.eq(PaySpendingContract::getId,paySpendingContractAudit.getContractId());
update.set(PaySpendingContract::getStatus, PayIncomeContractCommon.STATUS5);
paySpendingContractService.update(update);
// 添加归档记录
paySpendingContractAudit.setContractStatus(PayIncomeContractCommon.STATUS5);
paySpendingContractAuditService.save(paySpendingContractAudit);
}
private PaySpendingContract setPaySpendingContractExcel(Map<Integer,String> map,Map<String, String> mapOpening,Map<String, String> mapPack,
int n,StringBuilder sb){
@@ -573,48 +750,27 @@ public class PaySpendingContractServiceImpl extends ServiceImpl<PaySpendingContr
paySpendingContract.setContractTimePoints(map.get(13));
if(!StringUtils.isBlank(map.get(13))){
if(!pattern.matcher(map.get(13)).matches()){
sb.append("第").append(n).append("行:应收金额格式错误,请修改。<br/>");
sb.append("第").append(n).append("行:应付金额格式错误,请修改。<br/>");
}else{
paySpendingContract.setAccountsReceivableAmount(new BigDecimal(map.get(13)));
}
}
if(!StringUtils.isBlank(map.get(14))){
if(!pattern.matcher(map.get(14)).matches()){
sb.append("第").append(n).append("行:已收金额格式错误,请修改。<br/>");
sb.append("第").append(n).append("行:已付金额格式错误,请修改。<br/>");
}else{
paySpendingContract.setAmountReceived(new BigDecimal(map.get(14)));
}
}
if(!StringUtils.isBlank(map.get(15))){
if(!pattern.matcher(map.get(15)).matches()){
sb.append("第").append(n).append("行:未收金额格式错误,请修改。<br/>");
sb.append("第").append(n).append("行:未付金额格式错误,请修改。<br/>");
}else{
paySpendingContract.setOutstandingAmount(new BigDecimal(map.get(15)));
}
}
paySpendingContract.setContractPaymentTimes(map.get(17));
if(StringUtils.isEmpty(map.get(18))){
sb.append("第").append(n).append("行:是否打包不能为空,请修改。<br/>");
}else{
mapPack.forEach((k,v)->{
if(Objects.equals(map.get(18),k)){
paySpendingContract.setPack(Integer.parseInt(v));
}
});
if(Objects.isNull(paySpendingContract.getPack())){
sb.append("第").append(n).append("行:是否打包格式错误,请修改。<br/>");
paySpendingContract.setPack(2);
}
// 打包获取打包年份
if(Objects.equals(paySpendingContract.getPack(),PayIncomeContractCommon.PACK1)){
if(StringUtils.isEmpty(map.get(19))){
sb.append("第").append(n).append("行:打包年份不能为空,请修改。<br/>");
}else{
paySpendingContract.setPackYear(map.get(19));
}
}
}
return paySpendingContract;
}
@@ -0,0 +1,14 @@
package com.jero.contract.vo;
import com.jero.contract.entity.PayIncomeContractAudit;
import lombok.Data;
import java.io.Serializable;
@Data
public class PaySpendingContractAuditOutput extends PayIncomeContractAudit implements Serializable {
/**
* 合同状态(1:草稿,2:待审核,3:已通过,4:未通过,5:已归档)
*/
private String contractStatus_dictText;
}
@@ -2,6 +2,7 @@ package com.jero.contract.vo;
import com.jero.contract.entity.PaySpendingContract;
import com.jero.contract.entity.PaySpendingContractInstallment;
import com.jero.mail.entity.PayMailContract;
import io.swagger.annotations.ApiModelProperty;
import lombok.Data;
@@ -23,9 +24,30 @@ public class PaySpendingContractDetailOutput extends PaySpendingContract impleme
* 是否打包(1:是,2:否)
*/
private String pack_dictText;
/**
* 合同状态(2:待审核,3:已通过,4:未通过,5:已存档)
*/
private String contractStatus_dictText;
/**
* 分期记录
*/
@ApiModelProperty(value = "分期记录集合")
private List<PaySpendingContractInstallment> listInstallment;
/**
* 归档记录
*/
@ApiModelProperty(value = "归档记录")
private List<PaySpendingContractAuditOutput> listArchive;
/**
* 审核记录
*/
@ApiModelProperty(value = "审核记录")
private List<PaySpendingContractAuditOutput> listAudit;
/**
* 邮寄信息
*/
@ApiModelProperty(value = "邮寄信息")
private PayMailContract payMailContract;
}
@@ -47,14 +47,14 @@ public class PaySpendingContractExcelModel implements Serializable {
/**合同约定主要时点*/
@Excel(name = "合同约定主要时点", width = 15)
private String contractTimePoints;
/**应收金额*/
@Excel(name = "应收金额", width = 15)
/**应付金额*/
@Excel(name = "应付金额", width = 15)
private String accountsReceivableAmount;
/**已收金额*/
@Excel(name = "已收金额", width = 15)
/**已付金额*/
@Excel(name = "已付金额", width = 15)
private String amountReceived;
/**未收金额*/
@Excel(name = "未收金额", width = 15)
/**未付金额*/
@Excel(name = "未付金额", width = 15)
private BigDecimal outstandingAmount;
/**账款状态(1:未支付,2:部分支付,3:已付全款)*/
@Excel(name = "账款状态", width = 15)
@@ -62,40 +62,34 @@ public class PaySpendingContractExcelModel implements Serializable {
/**合同约定付款次数*/
@Excel(name = "合同约定付款次数", width = 15)
private String contractPaymentTimes;
/**是否打包(1:是,0:否)*/
@Excel(name = "是否打包", width = 15)
private Integer pack;
/**打包年份*/
@Excel(name = "打包年份", width = 15)
private String packYear;
/**阶段名称*/
@Excel(name = "1阶段", width = 15)
private String phaseName1;
/**应收金额*/
@Excel(name = "1阶段应收", width = 15)
/**应付金额*/
@Excel(name = "1阶段应付", width = 15)
private Integer accountsReceivableAmount1;
/**应收时间*/
@Excel(name = "1阶段应收时间", width = 15, format = "yyyy-MM-dd")
/**应付时间*/
@Excel(name = "1阶段应付时间", width = 15, format = "yyyy-MM-dd")
private Date accountsReceivableTime1;
/**实收金额*/
@Excel(name = "1阶段实收", width = 15)
/**实付金额*/
@Excel(name = "1阶段实付", width = 15)
private Integer paidAmount1;
/**实收时间*/
@Excel(name = "1阶段实收时间", width = 15, format = "yyyy-MM-dd")
/**实付时间*/
@Excel(name = "1阶段实付时间", width = 15, format = "yyyy-MM-dd")
private Date paidTime1;
/**阶段名称*/
@Excel(name = "2阶段", width = 15)
private String phaseName2;
/**应收金额*/
@Excel(name = "2阶段应收", width = 15)
/**应付金额*/
@Excel(name = "2阶段应付", width = 15)
private Integer accountsReceivableAmount2;
/**应收时间*/
@Excel(name = "2阶段应收时间", width = 15, format = "yyyy-MM-dd")
/**应付时间*/
@Excel(name = "2阶段应付时间", width = 15, format = "yyyy-MM-dd")
private Date accountsReceivableTime2;
/**实收金额*/
@Excel(name = "2阶段实收", width = 15)
/**实付金额*/
@Excel(name = "2阶段实付", width = 15)
private Integer paidAmount2;
/**实收时间*/
@Excel(name = "2阶段实收时间", width = 15, format = "yyyy-MM-dd")
/**实付时间*/
@Excel(name = "2阶段实付时间", width = 15, format = "yyyy-MM-dd")
private Date paidTime2;
}