收款与付款-采购、综合服务付款接口

This commit is contained in:
2025-10-16 20:07:05 +08:00
parent 0d84c49ca4
commit 1fd3da3e2a
17 changed files with 467 additions and 57 deletions

View File

@ -67,4 +67,6 @@ public interface IXzdCsContractInformationService extends IService<XzdCsContract
* @return 是否删除成功
*/
Boolean deleteWithValidByIds(Collection<Long> ids, Boolean isValid);
String queryCodeById(Long contractCode);
}

View File

@ -167,7 +167,6 @@ public class XzdCsContractChangeServiceImpl extends ServiceImpl<XzdCsContractCha
if (flag) {
bo.setId(add.getId());
}
addzixiang(bo,add);
String tableName = XzdClassEnum.CS_CONTRACT_CHANGE.getClassName();
if (bo.getKkyjlx() == null || bo.getKkyjlx().isEmpty()) {
throw new ServiceException("扣款与奖励项不能为空");
@ -232,11 +231,6 @@ public class XzdCsContractChangeServiceImpl extends ServiceImpl<XzdCsContractCha
lambdaQueryWrapper4.eq(XzdDeductionItems::getContractDetailsId, old.getId());
xzdDeductionItemsService.remove(lambdaQueryWrapper4);
addzixiang(bo, update);
return baseMapper.updateById(update) > 0;
}
private void addzixiang(XzdCsContractChangeBo bo, XzdCsContractChange update) {
String tableName = XzdClassEnum.CS_CONTRACT_CHANGE.getClassName();
if (bo.getKkyjlx() == null || bo.getKkyjlx().isEmpty()) {
throw new ServiceException("扣款与奖励项不能为空");
@ -264,8 +258,10 @@ public class XzdCsContractChangeServiceImpl extends ServiceImpl<XzdCsContractCha
clause.setContractDetailsId(update.getId());
}
xzdSettlementRulesService.saveBatch(bo.getZftk());
return baseMapper.updateById(update) > 0;
}
/**
* 保存前的数据校验
*/

View File

@ -405,4 +405,9 @@ public class XzdCsContractInformationServiceImpl extends ServiceImpl<XzdCsContra
xzdSettlementRulesService.remove(lambdaQueryWrapper3);
return baseMapper.deleteByIds(ids) > 0;
}
@Override
public String queryCodeById(Long contractCode) {
return baseMapper.selectVoById(contractCode).getContractCode();
}
}

View File

@ -26,6 +26,7 @@ import org.dromara.xzd.comprehensive.domain.vo.XzdCsContractSuspendVo;
import org.dromara.xzd.comprehensive.domain.XzdCsContractSuspend;
import org.dromara.xzd.comprehensive.mapper.XzdCsContractSuspendMapper;
import org.dromara.xzd.comprehensive.service.IXzdCsContractSuspendService;
import org.springframework.transaction.annotation.Transactional;
import java.util.*;
@ -163,6 +164,7 @@ public class XzdCsContractSuspendServiceImpl extends ServiceImpl<XzdCsContractSu
* @return 是否删除成功
*/
@Override
@Transactional(rollbackFor = Exception.class)
public Boolean deleteWithValidByIds(Collection<Long> ids, Boolean isValid) {
if(isValid){
//TODO 做一些业务上的校验,判断是否需要校验

View File

@ -100,9 +100,9 @@ public class XzdSfkCaigouFk extends BaseEntity {
private String statCycle;
/**
* 是否是研发类
* 项目类型
*/
private Long isYanfa;
private String projectType;
/**
* 税率(带*,必填)

View File

@ -72,7 +72,7 @@ public class XzdSfkZonhefuwuFk extends BaseEntity {
/**
* 项目
*/
private Long projectId;
private Long project;
/**
* 付款单位
@ -164,6 +164,11 @@ public class XzdSfkZonhefuwuFk extends BaseEntity {
*/
private BigDecimal currentPaymentRatio;
/**
* 累计进度支付占累计进度应付(%
*/
private BigDecimal totalPaymentRatio;
/**
* 累计支付占合同比例(%
*/

View File

@ -8,8 +8,12 @@ import io.github.linpeilie.annotations.AutoMapper;
import lombok.Data;
import lombok.EqualsAndHashCode;
import jakarta.validation.constraints.*;
import org.dromara.xzd.paymentsReceipts.domain.XzdSfkFapiao;
import org.dromara.xzd.paymentsReceipts.domain.XzdSfkFukuan;
import java.math.BigDecimal;
import java.time.LocalDate;
import java.util.List;
/**
* 采购合同付款业务对象 xzd_sfk_caigou_fk
@ -31,7 +35,7 @@ public class XzdSfkCaigouFkBo extends BaseEntity {
/**
* 单据编码(带*,必填)
*/
@NotBlank(message = "单据编码(带*,必填)不能为空", groups = { AddGroup.class, EditGroup.class })
@NotBlank(message = "单据编码(带*,必填)不能为空", groups = { EditGroup.class })
private String docCode;
/**
@ -106,9 +110,9 @@ public class XzdSfkCaigouFkBo extends BaseEntity {
private String statCycle;
/**
* 是否是研发类
* 项目类型
*/
private Long isYanfa;
private String projectType;
/**
* 税率(带*,必填)
@ -227,5 +231,8 @@ public class XzdSfkCaigouFkBo extends BaseEntity {
*/
private String fileId;
List<XzdSfkFukuan> fukuanList;
List<XzdSfkFapiao> fapiaoList;
}

View File

@ -1,5 +1,7 @@
package org.dromara.xzd.paymentsReceipts.domain.bo;
import org.dromara.xzd.paymentsReceipts.domain.XzdSfkFapiao;
import org.dromara.xzd.paymentsReceipts.domain.XzdSfkFukuan;
import org.dromara.xzd.paymentsReceipts.domain.XzdSfkZonhefuwuFk;
import org.dromara.common.mybatis.core.domain.BaseEntity;
import org.dromara.common.core.validate.AddGroup;
@ -10,6 +12,7 @@ import lombok.EqualsAndHashCode;
import jakarta.validation.constraints.*;
import java.math.BigDecimal;
import java.time.LocalDate;
import java.util.List;
/**
* 综合服务合同付款业务对象 xzd_sfk_zonhefuwu_fk
@ -31,7 +34,7 @@ public class XzdSfkZonhefuwuFkBo extends BaseEntity {
/**
* 单据编码(带*,必填)
*/
@NotBlank(message = "单据编码(带*,必填)不能为空", groups = { AddGroup.class, EditGroup.class })
@NotBlank(message = "单据编码(带*,必填)不能为空", groups = {EditGroup.class })
private String docCode;
/**
@ -76,7 +79,7 @@ public class XzdSfkZonhefuwuFkBo extends BaseEntity {
/**
* 项目
*/
private Long projectId;
private Long project;
/**
* 付款单位
@ -172,6 +175,11 @@ public class XzdSfkZonhefuwuFkBo extends BaseEntity {
*/
private BigDecimal currentPaymentRatio;
/**
* 累计进度支付占累计进度应付(%
*/
private BigDecimal totalPaymentRatio;
/**
* 累计支付占合同比例(%
*/
@ -222,5 +230,9 @@ public class XzdSfkZonhefuwuFkBo extends BaseEntity {
*/
private String fileId;
List<XzdSfkFukuan> fukuanList;
List<XzdSfkFapiao> fapiaoList;
}

View File

@ -1,6 +1,8 @@
package org.dromara.xzd.paymentsReceipts.domain.vo;
import java.math.BigDecimal;
import org.dromara.common.mybatis.core.domain.BaseEntity;
import org.dromara.xzd.paymentsReceipts.domain.XzdSfkCaigouFk;
import com.alibaba.excel.annotation.ExcelIgnoreUnannotated;
import com.alibaba.excel.annotation.ExcelProperty;
@ -8,12 +10,14 @@ import org.dromara.common.excel.annotation.ExcelDictFormat;
import org.dromara.common.excel.convert.ExcelDictConvert;
import io.github.linpeilie.annotations.AutoMapper;
import lombok.Data;
import org.dromara.xzd.paymentsReceipts.domain.XzdSfkFapiao;
import org.dromara.xzd.paymentsReceipts.domain.XzdSfkFukuan;
import java.io.Serial;
import java.io.Serializable;
import java.time.LocalDate;
import java.util.Date;
import java.util.List;
/**
@ -25,7 +29,7 @@ import java.util.Date;
@Data
@ExcelIgnoreUnannotated
@AutoMapper(target = XzdSfkCaigouFk.class)
public class XzdSfkCaigouFkVo implements Serializable {
public class XzdSfkCaigouFkVo extends BaseEntity {
@Serial
private static final long serialVersionUID = 1L;
@ -63,6 +67,7 @@ public class XzdSfkCaigouFkVo implements Serializable {
@ExcelProperty(value = "合同编码", converter = ExcelDictConvert.class)
@ExcelDictFormat(readConverterExp = "带=*,必填")
private Long contractCode;
private String contractCodeName;
/**
* 合同名称
@ -94,12 +99,14 @@ public class XzdSfkCaigouFkVo implements Serializable {
*/
@ExcelProperty(value = "项目")
private Long project;
private String projectName;
/**
* 付款单位
*/
@ExcelProperty(value = "付款单位")
private Long paymentUnit;
private String paymentUnitName;
/**
* 收款单位(带*,必填)
@ -107,12 +114,14 @@ public class XzdSfkCaigouFkVo implements Serializable {
@ExcelProperty(value = "收款单位", converter = ExcelDictConvert.class)
@ExcelDictFormat(readConverterExp = "带=*,必填")
private Long receiptUnit;
private String receiptUnitName;
/**
* 收款银行
*/
@ExcelProperty(value = "收款银行")
private Long receiptBank;
private String receiptBankName;
/**
* 收款银行账号
@ -128,10 +137,11 @@ public class XzdSfkCaigouFkVo implements Serializable {
private String statCycle;
/**
* 是否是研发类
* 项目类型
*/
@ExcelProperty(value = "是否是研发类")
private Long isYanfa;
@ExcelProperty(value = "项目类型")
private String projectType;
/**
* 税率(带*,必填)
@ -279,4 +289,8 @@ public class XzdSfkCaigouFkVo implements Serializable {
private String fileId;
List<XzdSfkFukuan> fukuanList;
List<XzdSfkFapiao> fapiaoList;
}

View File

@ -1,6 +1,10 @@
package org.dromara.xzd.paymentsReceipts.domain.vo;
import java.math.BigDecimal;
import org.dromara.common.mybatis.core.domain.BaseEntity;
import org.dromara.xzd.paymentsReceipts.domain.XzdSfkFapiao;
import org.dromara.xzd.paymentsReceipts.domain.XzdSfkFukuan;
import org.dromara.xzd.paymentsReceipts.domain.XzdSfkZonhefuwuFk;
import com.alibaba.excel.annotation.ExcelIgnoreUnannotated;
import com.alibaba.excel.annotation.ExcelProperty;
@ -13,7 +17,7 @@ import java.io.Serial;
import java.io.Serializable;
import java.time.LocalDate;
import java.util.Date;
import java.util.List;
/**
@ -25,7 +29,7 @@ import java.util.Date;
@Data
@ExcelIgnoreUnannotated
@AutoMapper(target = XzdSfkZonhefuwuFk.class)
public class XzdSfkZonhefuwuFkVo implements Serializable {
public class XzdSfkZonhefuwuFkVo extends BaseEntity {
@Serial
private static final long serialVersionUID = 1L;
@ -63,6 +67,7 @@ public class XzdSfkZonhefuwuFkVo implements Serializable {
@ExcelProperty(value = "合同编码", converter = ExcelDictConvert.class)
@ExcelDictFormat(readConverterExp = "带=*,必填")
private Long contractCode;
private String contractCodeName;
/**
* 合同名称
@ -93,13 +98,15 @@ public class XzdSfkZonhefuwuFkVo implements Serializable {
* 项目
*/
@ExcelProperty(value = "项目")
private Long projectId;
private Long project;
private String projectName;
/**
* 付款单位
*/
@ExcelProperty(value = "付款单位")
private Long paymentUnit;
private String paymentUnitName;
/**
* 收款单位(带*,必填)
@ -107,12 +114,14 @@ public class XzdSfkZonhefuwuFkVo implements Serializable {
@ExcelProperty(value = "收款单位", converter = ExcelDictConvert.class)
@ExcelDictFormat(readConverterExp = "带=*,必填")
private Long receiptUnit;
private String receiptUnitName;
/**
* 收款银行
*/
@ExcelProperty(value = "收款银行")
private Long receiptBank;
private String receiptBankName;
/**
* 收款银行账号
@ -203,6 +212,11 @@ public class XzdSfkZonhefuwuFkVo implements Serializable {
@ExcelDictFormat(readConverterExp = "%=")
private BigDecimal totalProgressSettlementRatio;
/**
* 累计进度支付占累计进度应付(%
*/
private BigDecimal totalPaymentRatio;
/**
* 本期进度支付占本期进度应付(%
*/
@ -273,4 +287,8 @@ public class XzdSfkZonhefuwuFkVo implements Serializable {
private String fileId;
List<XzdSfkFukuan> fukuanList;
List<XzdSfkFapiao> fapiaoList;
}

View File

@ -1,6 +1,7 @@
package org.dromara.xzd.paymentsReceipts.service.impl;
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
import org.dromara.common.core.exception.ServiceException;
import org.dromara.common.core.utils.MapstructUtils;
import org.dromara.common.core.utils.StringUtils;
import org.dromara.common.mybatis.core.page.TableDataInfo;
@ -9,16 +10,30 @@ import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
import com.baomidou.mybatisplus.core.toolkit.Wrappers;
import lombok.RequiredArgsConstructor;
import org.dromara.common.utils.BatchNumberGenerator;
import org.dromara.system.service.impl.SysOssServiceImpl;
import org.dromara.xzd.comprehensive.service.IXzdCsContractInformationService;
import org.dromara.xzd.contractManagement.purchaseManagement.service.IXzdPurchaseContractInformationService;
import org.dromara.xzd.paymentsReceipts.domain.XzdSfkFapiao;
import org.dromara.xzd.paymentsReceipts.domain.XzdSfkFukuan;
import org.dromara.xzd.paymentsReceipts.service.IXzdSfkFapiaoService;
import org.dromara.xzd.paymentsReceipts.service.IXzdSfkFukuanService;
import org.dromara.xzd.service.IXzdCorrespondentList;
import org.dromara.xzd.service.IXzdSupplierOpenBankService;
import org.dromara.xzd.service.impl.XzdProjectServiceImpl;
import org.dromara.xzd.service.impl.XzdSupplierInfoServiceImpl;
import org.dromara.xzd.settlement.domain.XzdJsDeductionItems;
import org.dromara.xzd.settlement.domain.vo.XzdJsZhfwJinduVo;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import org.dromara.xzd.paymentsReceipts.domain.bo.XzdSfkCaigouFkBo;
import org.dromara.xzd.paymentsReceipts.domain.vo.XzdSfkCaigouFkVo;
import org.dromara.xzd.paymentsReceipts.domain.XzdSfkCaigouFk;
import org.dromara.xzd.paymentsReceipts.mapper.XzdSfkCaigouFkMapper;
import org.dromara.xzd.paymentsReceipts.service.IXzdSfkCaigouFkService;
import org.springframework.transaction.annotation.Transactional;
import java.util.List;
import java.util.Map;
import java.util.Collection;
import java.util.*;
/**
* 采购合同付款Service业务层处理
@ -32,6 +47,23 @@ public class XzdSfkCaigouFkServiceImpl extends ServiceImpl<XzdSfkCaigouFkMapper,
private final XzdSfkCaigouFkMapper baseMapper;
@Autowired
private IXzdSfkFapiaoService fapiaoService;
@Autowired
private IXzdSfkFukuanService fukuanService;
@Autowired
private SysOssServiceImpl sysOssService;
@Autowired
private IXzdPurchaseContractInformationService purchaseContractInformationService;
@Autowired
private XzdProjectServiceImpl xzdProjectService;
@Autowired
private IXzdSupplierOpenBankService supplierOpenBankService;
@Autowired
private IXzdCorrespondentList iXzdCorrespondentList;
@Autowired
private XzdSupplierInfoServiceImpl xzdSupplierInfoService;
/**
* 查询采购合同付款
*
@ -40,7 +72,10 @@ public class XzdSfkCaigouFkServiceImpl extends ServiceImpl<XzdSfkCaigouFkMapper,
*/
@Override
public XzdSfkCaigouFkVo queryById(Long id){
return baseMapper.selectVoById(id);
XzdSfkCaigouFkVo vo = baseMapper.selectVoById(id);
getName(vo);
getHttk(vo);
return vo;
}
/**
@ -54,6 +89,7 @@ public class XzdSfkCaigouFkServiceImpl extends ServiceImpl<XzdSfkCaigouFkMapper,
public TableDataInfo<XzdSfkCaigouFkVo> queryPageList(XzdSfkCaigouFkBo bo, PageQuery pageQuery) {
LambdaQueryWrapper<XzdSfkCaigouFk> lqw = buildQueryWrapper(bo);
Page<XzdSfkCaigouFkVo> result = baseMapper.selectVoPage(pageQuery.build(), lqw);
result.getRecords().forEach(this::getName);
return TableDataInfo.build(result);
}
@ -66,7 +102,9 @@ public class XzdSfkCaigouFkServiceImpl extends ServiceImpl<XzdSfkCaigouFkMapper,
@Override
public List<XzdSfkCaigouFkVo> queryList(XzdSfkCaigouFkBo bo) {
LambdaQueryWrapper<XzdSfkCaigouFk> lqw = buildQueryWrapper(bo);
return baseMapper.selectVoList(lqw);
List<XzdSfkCaigouFkVo> vos = baseMapper.selectVoList(lqw);
vos.forEach(this::getName);
return vos;
}
private LambdaQueryWrapper<XzdSfkCaigouFk> buildQueryWrapper(XzdSfkCaigouFkBo bo) {
@ -87,7 +125,7 @@ public class XzdSfkCaigouFkServiceImpl extends ServiceImpl<XzdSfkCaigouFkMapper,
lqw.eq(bo.getReceiptBank() != null, XzdSfkCaigouFk::getReceiptBank, bo.getReceiptBank());
lqw.eq(StringUtils.isNotBlank(bo.getReceiptBankAccount()), XzdSfkCaigouFk::getReceiptBankAccount, bo.getReceiptBankAccount());
lqw.eq(StringUtils.isNotBlank(bo.getStatCycle()), XzdSfkCaigouFk::getStatCycle, bo.getStatCycle());
lqw.eq(bo.getIsYanfa() != null, XzdSfkCaigouFk::getIsYanfa, bo.getIsYanfa());
lqw.eq(StringUtils.isNotBlank(bo.getProjectType()), XzdSfkCaigouFk::getProjectType, bo.getProjectType());
lqw.eq(bo.getTaxRate() != null, XzdSfkCaigouFk::getTaxRate, bo.getTaxRate());
lqw.eq(StringUtils.isNotBlank(bo.getProjectCategory()), XzdSfkCaigouFk::getProjectCategory, bo.getProjectCategory());
lqw.eq(bo.getCurrentProgressPayment() != null, XzdSfkCaigouFk::getCurrentProgressPayment, bo.getCurrentProgressPayment());
@ -120,13 +158,26 @@ public class XzdSfkCaigouFkServiceImpl extends ServiceImpl<XzdSfkCaigouFkMapper,
* @return 是否新增成功
*/
@Override
@Transactional(rollbackFor = Exception.class)
public Boolean insertByBo(XzdSfkCaigouFkBo bo) {
XzdSfkCaigouFk add = MapstructUtils.convert(bo, XzdSfkCaigouFk.class);
validEntityBeforeSave(add);
String banBen = BatchNumberGenerator.generateBatchNumber("SFKCGFK-");
add.setDocCode(banBen);
boolean flag = baseMapper.insert(add) > 0;
if (flag) {
bo.setId(add.getId());
}
if (bo.getFapiaoList() == null || bo.getFapiaoList().isEmpty()) {
throw new ServiceException("发票信息不能为空");
}
bo.getFapiaoList().forEach(item -> {item.setMainDocumentId(add.getId());});
fapiaoService.saveBatch(bo.getFapiaoList());
if (bo.getFukuanList() == null || bo.getFukuanList().isEmpty()) {
throw new ServiceException("付款信息不能为空");
}
bo.getFukuanList().forEach(item -> {item.setMainDocumentId(add.getId());});
fukuanService.saveBatch(bo.getFukuanList());
return flag;
}
@ -137,9 +188,22 @@ public class XzdSfkCaigouFkServiceImpl extends ServiceImpl<XzdSfkCaigouFkMapper,
* @return 是否修改成功
*/
@Override
@Transactional(rollbackFor = Exception.class)
public Boolean updateByBo(XzdSfkCaigouFkBo bo) {
XzdSfkCaigouFk update = MapstructUtils.convert(bo, XzdSfkCaigouFk.class);
validEntityBeforeSave(update);
fapiaoService.remove(new LambdaQueryWrapper<XzdSfkFapiao>().eq(XzdSfkFapiao::getMainDocumentId, bo.getId()));
fukuanService.remove(new LambdaQueryWrapper<XzdSfkFukuan>().eq(XzdSfkFukuan::getMainDocumentId, bo.getId()));
if (bo.getFapiaoList() == null || bo.getFapiaoList().isEmpty()) {
throw new ServiceException("发票信息不能为空");
}
bo.getFapiaoList().forEach(item -> {item.setMainDocumentId(update.getId());});
fapiaoService.saveBatch(bo.getFapiaoList());
if (bo.getFukuanList() == null || bo.getFukuanList().isEmpty()) {
throw new ServiceException("付款信息不能为空");
}
bo.getFukuanList().forEach(item -> {item.setMainDocumentId(update.getId());});
fukuanService.saveBatch(bo.getFukuanList());
return baseMapper.updateById(update) > 0;
}
@ -158,10 +222,81 @@ public class XzdSfkCaigouFkServiceImpl extends ServiceImpl<XzdSfkCaigouFkMapper,
* @return 是否删除成功
*/
@Override
@Transactional(rollbackFor = Exception.class)
public Boolean deleteWithValidByIds(Collection<Long> ids, Boolean isValid) {
if(isValid){
//TODO 做一些业务上的校验,判断是否需要校验
}
List<Long> deleteIds = new ArrayList<>();
for (Long id : ids) {
XzdSfkCaigouFkVo vo = baseMapper.selectVoById(id);
if (vo != null){
//删除附件
if (vo.getFileId()!= null && !vo.getFileId().isEmpty()){
List<Long> list = Arrays.stream(vo.getFileId().split(",")).map(Long::valueOf).toList();
deleteIds.addAll(list);
}
}
}
if (!deleteIds.isEmpty()) {
sysOssService.deleteWithValidByIds(deleteIds, false);
}
fapiaoService.remove(new LambdaQueryWrapper<XzdSfkFapiao>().in(XzdSfkFapiao::getMainDocumentId, ids));
fukuanService.remove(new LambdaQueryWrapper<XzdSfkFukuan>().in(XzdSfkFukuan::getMainDocumentId, ids));
return baseMapper.deleteByIds(ids) > 0;
}
/**
* 获取部分字段名称
* @param item
*/
private void getName(XzdSfkCaigouFkVo item) {
//项目名称
if (item.getProject() != null){
String projectName = xzdProjectService.queryNameById(item.getProject());
if (projectName != null){
item.setProjectName(projectName);
}
}
//合同编码
if (item.getContractCode() != null){
String code = purchaseContractInformationService.queryCodeById(item.getContractCode());
if (code != null){
item.setContractCodeName(code);
}
}
//收款单位(供应商名称)
if (item.getReceiptUnit() != null){
String unitName = xzdSupplierInfoService.queryNameById(item.getReceiptUnit());
if (unitName != null){
item.setReceiptUnitName(unitName);
}
}
//付款单位(客户名称)
if (item.getPaymentUnit()!= null){
String byid = iXzdCorrespondentList.queryNameById(item.getPaymentUnit());
if (byid!=null){
item.setPaymentUnitName(byid);
}
}
//收款银行
if (item.getReceiptBank() != null){
String bankName = supplierOpenBankService.queryNameById(item.getReceiptBank());
if (bankName != null){
item.setReceiptBankName(bankName);
}
}
}
/**
* 获取子项
* @param vo
*/
private void getHttk(XzdSfkCaigouFkVo vo) {
//发票信息
vo.setFapiaoList(fapiaoService.getBaseMapper().selectList(new LambdaQueryWrapper<XzdSfkFapiao>().eq(XzdSfkFapiao::getMainDocumentId, vo.getId())));
//付款信息
vo.setFukuanList(fukuanService.getBaseMapper().selectList(new LambdaQueryWrapper<XzdSfkFukuan>().eq(XzdSfkFukuan::getMainDocumentId, vo.getId())));
}
}

View File

@ -1,6 +1,7 @@
package org.dromara.xzd.paymentsReceipts.service.impl;
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
import org.dromara.common.core.exception.ServiceException;
import org.dromara.common.core.utils.MapstructUtils;
import org.dromara.common.core.utils.StringUtils;
import org.dromara.common.mybatis.core.page.TableDataInfo;
@ -9,16 +10,28 @@ import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
import com.baomidou.mybatisplus.core.toolkit.Wrappers;
import lombok.RequiredArgsConstructor;
import org.dromara.common.utils.BatchNumberGenerator;
import org.dromara.system.service.impl.SysOssServiceImpl;
import org.dromara.xzd.comprehensive.service.IXzdCsContractInformationService;
import org.dromara.xzd.paymentsReceipts.domain.XzdSfkFapiao;
import org.dromara.xzd.paymentsReceipts.domain.XzdSfkFukuan;
import org.dromara.xzd.paymentsReceipts.domain.vo.XzdSfkCaigouFkVo;
import org.dromara.xzd.paymentsReceipts.service.IXzdSfkFapiaoService;
import org.dromara.xzd.paymentsReceipts.service.IXzdSfkFukuanService;
import org.dromara.xzd.service.IXzdCorrespondentList;
import org.dromara.xzd.service.IXzdSupplierOpenBankService;
import org.dromara.xzd.service.impl.XzdProjectServiceImpl;
import org.dromara.xzd.service.impl.XzdSupplierInfoServiceImpl;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import org.dromara.xzd.paymentsReceipts.domain.bo.XzdSfkZonhefuwuFkBo;
import org.dromara.xzd.paymentsReceipts.domain.vo.XzdSfkZonhefuwuFkVo;
import org.dromara.xzd.paymentsReceipts.domain.XzdSfkZonhefuwuFk;
import org.dromara.xzd.paymentsReceipts.mapper.XzdSfkZonhefuwuFkMapper;
import org.dromara.xzd.paymentsReceipts.service.IXzdSfkZonhefuwuFkService;
import org.springframework.transaction.annotation.Transactional;
import java.util.List;
import java.util.Map;
import java.util.Collection;
import java.util.*;
/**
* 综合服务合同付款Service业务层处理
@ -32,6 +45,24 @@ public class XzdSfkZonhefuwuFkServiceImpl extends ServiceImpl<XzdSfkZonhefuwuFkM
private final XzdSfkZonhefuwuFkMapper baseMapper;
@Autowired
private IXzdSfkFapiaoService fapiaoService;
@Autowired
private IXzdSfkFukuanService fukuanService;
@Autowired
private SysOssServiceImpl sysOssService;
@Autowired
private IXzdCsContractInformationService csContractInformationService;
@Autowired
private XzdProjectServiceImpl xzdProjectService;
@Autowired
private IXzdSupplierOpenBankService supplierOpenBankService;
@Autowired
private IXzdCorrespondentList iXzdCorrespondentList;
@Autowired
private XzdSupplierInfoServiceImpl xzdSupplierInfoService;
/**
* 查询综合服务合同付款
*
@ -40,7 +71,10 @@ public class XzdSfkZonhefuwuFkServiceImpl extends ServiceImpl<XzdSfkZonhefuwuFkM
*/
@Override
public XzdSfkZonhefuwuFkVo queryById(Long id){
return baseMapper.selectVoById(id);
XzdSfkZonhefuwuFkVo vo = baseMapper.selectVoById(id);
getName(vo);
getHttk(vo);
return vo;
}
/**
@ -54,6 +88,7 @@ public class XzdSfkZonhefuwuFkServiceImpl extends ServiceImpl<XzdSfkZonhefuwuFkM
public TableDataInfo<XzdSfkZonhefuwuFkVo> queryPageList(XzdSfkZonhefuwuFkBo bo, PageQuery pageQuery) {
LambdaQueryWrapper<XzdSfkZonhefuwuFk> lqw = buildQueryWrapper(bo);
Page<XzdSfkZonhefuwuFkVo> result = baseMapper.selectVoPage(pageQuery.build(), lqw);
result.getRecords().forEach(this::getName);
return TableDataInfo.build(result);
}
@ -66,7 +101,9 @@ public class XzdSfkZonhefuwuFkServiceImpl extends ServiceImpl<XzdSfkZonhefuwuFkM
@Override
public List<XzdSfkZonhefuwuFkVo> queryList(XzdSfkZonhefuwuFkBo bo) {
LambdaQueryWrapper<XzdSfkZonhefuwuFk> lqw = buildQueryWrapper(bo);
return baseMapper.selectVoList(lqw);
List<XzdSfkZonhefuwuFkVo> vos = baseMapper.selectVoList(lqw);
vos.forEach(this::getName);
return vos;
}
private LambdaQueryWrapper<XzdSfkZonhefuwuFk> buildQueryWrapper(XzdSfkZonhefuwuFkBo bo) {
@ -81,7 +118,7 @@ public class XzdSfkZonhefuwuFkServiceImpl extends ServiceImpl<XzdSfkZonhefuwuFkM
lqw.eq(bo.getPaymentProperty() != null, XzdSfkZonhefuwuFk::getPaymentProperty, bo.getPaymentProperty());
lqw.eq(bo.getExpendContractAmount() != null, XzdSfkZonhefuwuFk::getExpendContractAmount, bo.getExpendContractAmount());
lqw.eq(bo.getCurrentApproveAmount() != null, XzdSfkZonhefuwuFk::getCurrentApproveAmount, bo.getCurrentApproveAmount());
lqw.eq(bo.getProjectId() != null, XzdSfkZonhefuwuFk::getProjectId, bo.getProjectId());
lqw.eq(bo.getProject() != null, XzdSfkZonhefuwuFk::getProject, bo.getProject());
lqw.eq(bo.getPaymentUnit() != null, XzdSfkZonhefuwuFk::getPaymentUnit, bo.getPaymentUnit());
lqw.eq(bo.getReceiptUnit() != null, XzdSfkZonhefuwuFk::getReceiptUnit, bo.getReceiptUnit());
lqw.eq(bo.getReceiptBank() != null, XzdSfkZonhefuwuFk::getReceiptBank, bo.getReceiptBank());
@ -119,13 +156,26 @@ public class XzdSfkZonhefuwuFkServiceImpl extends ServiceImpl<XzdSfkZonhefuwuFkM
* @return 是否新增成功
*/
@Override
@Transactional(rollbackFor = Exception.class)
public Boolean insertByBo(XzdSfkZonhefuwuFkBo bo) {
XzdSfkZonhefuwuFk add = MapstructUtils.convert(bo, XzdSfkZonhefuwuFk.class);
validEntityBeforeSave(add);
String banBen = BatchNumberGenerator.generateBatchNumber("SFKZHFWFK-");
add.setDocCode(banBen);
boolean flag = baseMapper.insert(add) > 0;
if (flag) {
bo.setId(add.getId());
}
if (bo.getFapiaoList() == null || bo.getFapiaoList().isEmpty()) {
throw new ServiceException("发票信息不能为空");
}
bo.getFapiaoList().forEach(item -> {item.setMainDocumentId(add.getId());});
fapiaoService.saveBatch(bo.getFapiaoList());
if (bo.getFukuanList() == null || bo.getFukuanList().isEmpty()) {
throw new ServiceException("付款信息不能为空");
}
bo.getFukuanList().forEach(item -> {item.setMainDocumentId(add.getId());});
fukuanService.saveBatch(bo.getFukuanList());
return flag;
}
@ -136,9 +186,22 @@ public class XzdSfkZonhefuwuFkServiceImpl extends ServiceImpl<XzdSfkZonhefuwuFkM
* @return 是否修改成功
*/
@Override
@Transactional(rollbackFor = Exception.class)
public Boolean updateByBo(XzdSfkZonhefuwuFkBo bo) {
XzdSfkZonhefuwuFk update = MapstructUtils.convert(bo, XzdSfkZonhefuwuFk.class);
validEntityBeforeSave(update);
fapiaoService.remove(new LambdaQueryWrapper<XzdSfkFapiao>().eq(XzdSfkFapiao::getMainDocumentId, bo.getId()));
fukuanService.remove(new LambdaQueryWrapper<XzdSfkFukuan>().eq(XzdSfkFukuan::getMainDocumentId, bo.getId()));
if (bo.getFapiaoList() == null || bo.getFapiaoList().isEmpty()) {
throw new ServiceException("发票信息不能为空");
}
bo.getFapiaoList().forEach(item -> {item.setMainDocumentId(update.getId());});
fapiaoService.saveBatch(bo.getFapiaoList());
if (bo.getFukuanList() == null || bo.getFukuanList().isEmpty()) {
throw new ServiceException("付款信息不能为空");
}
bo.getFukuanList().forEach(item -> {item.setMainDocumentId(update.getId());});
fukuanService.saveBatch(bo.getFukuanList());
return baseMapper.updateById(update) > 0;
}
@ -157,10 +220,81 @@ public class XzdSfkZonhefuwuFkServiceImpl extends ServiceImpl<XzdSfkZonhefuwuFkM
* @return 是否删除成功
*/
@Override
@Transactional(rollbackFor = Exception.class)
public Boolean deleteWithValidByIds(Collection<Long> ids, Boolean isValid) {
if(isValid){
//TODO 做一些业务上的校验,判断是否需要校验
}
List<Long> deleteIds = new ArrayList<>();
for (Long id : ids) {
XzdSfkZonhefuwuFkVo vo = baseMapper.selectVoById(id);
if (vo != null){
//删除附件
if (vo.getFileId()!= null && !vo.getFileId().isEmpty()){
List<Long> list = Arrays.stream(vo.getFileId().split(",")).map(Long::valueOf).toList();
deleteIds.addAll(list);
}
}
}
if (!deleteIds.isEmpty()) {
sysOssService.deleteWithValidByIds(deleteIds, false);
}
fapiaoService.remove(new LambdaQueryWrapper<XzdSfkFapiao>().in(XzdSfkFapiao::getMainDocumentId, ids));
fukuanService.remove(new LambdaQueryWrapper<XzdSfkFukuan>().in(XzdSfkFukuan::getMainDocumentId, ids));
return baseMapper.deleteByIds(ids) > 0;
}
/**
* 获取部分字段名称
* @param item
*/
private void getName(XzdSfkZonhefuwuFkVo item) {
//项目名称
if (item.getProject() != null){
String projectName = xzdProjectService.queryNameById(item.getProject());
if (projectName != null){
item.setProjectName(projectName);
}
}
//合同编码
if (item.getContractCode() != null){
String code = csContractInformationService.queryCodeById(item.getContractCode());
if (code != null){
item.setContractCodeName(code);
}
}
//收款单位(供应商名称)
if (item.getReceiptUnit() != null){
String unitName = xzdSupplierInfoService.queryNameById(item.getReceiptUnit());
if (unitName != null){
item.setReceiptUnitName(unitName);
}
}
//付款单位(客户名称)
if (item.getPaymentUnit()!= null){
String byid = iXzdCorrespondentList.queryNameById(item.getPaymentUnit());
if (byid!=null){
item.setPaymentUnitName(byid);
}
}
//收款银行
if (item.getReceiptBank() != null){
String bankName = supplierOpenBankService.queryNameById(item.getReceiptBank());
if (bankName != null){
item.setReceiptBankName(bankName);
}
}
}
/**
* 获取子项
* @param vo
*/
private void getHttk(XzdSfkZonhefuwuFkVo vo) {
//发票信息
vo.setFapiaoList(fapiaoService.getBaseMapper().selectList(new LambdaQueryWrapper<XzdSfkFapiao>().eq(XzdSfkFapiao::getMainDocumentId, vo.getId())));
//付款信息
vo.setFukuanList(fukuanService.getBaseMapper().selectList(new LambdaQueryWrapper<XzdSfkFukuan>().eq(XzdSfkFukuan::getMainDocumentId, vo.getId())));
}
}

View File

@ -68,4 +68,7 @@ public interface IXzdSupplierOpenBankService extends IService<XzdSupplierOpenBan
* @return 是否删除成功
*/
Boolean deleteWithValidByIds(Collection<Long> ids, Boolean isValid);
String queryNameById(Long id);
}

View File

@ -147,4 +147,9 @@ public class XzdSupplierOpenBankServiceImpl extends ServiceImpl<XzdSupplierOpenB
}
return baseMapper.deleteByIds(ids) > 0;
}
@Override
public String queryNameById(Long id) {
return baseMapper.selectVoById(id).getOpenBank();
}
}

View File

@ -64,6 +64,7 @@ public class XzdJsZhfwJinduVo implements Serializable {
*/
@ExcelProperty(value = "合同编码")
private Long contractCode;
private String contractCodeCode;
/**
* 合同名称
@ -100,12 +101,14 @@ public class XzdJsZhfwJinduVo implements Serializable {
*/
@ExcelProperty(value = "项目")
private Long project;
private String projectName;
/**
* 结算单位
*/
@ExcelProperty(value = "结算单位")
private Long settlementUnit;
private String settlementUnitName;
/**
* 合同金额

View File

@ -31,6 +31,7 @@ import org.dromara.xzd.settlement.domain.vo.XzdJsCgJungonEditVo;
import org.dromara.xzd.settlement.domain.XzdJsCgJungonEdit;
import org.dromara.xzd.settlement.mapper.XzdJsCgJungonEditMapper;
import org.dromara.xzd.settlement.service.IXzdJsCgJungonEditService;
import org.springframework.transaction.annotation.Transactional;
import java.util.*;
@ -134,6 +135,7 @@ public class XzdJsCgJungonEditServiceImpl extends ServiceImpl<XzdJsCgJungonEditM
* @return 是否新增成功
*/
@Override
@Transactional(rollbackFor = Exception.class)
public Boolean insertByBo(XzdJsCgJungonEditBo bo) {
XzdJsCgJungonEdit add = MapstructUtils.convert(bo, XzdJsCgJungonEdit.class);
validEntityBeforeSave(add);
@ -163,6 +165,7 @@ public class XzdJsCgJungonEditServiceImpl extends ServiceImpl<XzdJsCgJungonEditM
* @return 是否修改成功
*/
@Override
@Transactional(rollbackFor = Exception.class)
public Boolean updateByBo(XzdJsCgJungonEditBo bo) {
XzdJsCgJungonEdit update = MapstructUtils.convert(bo, XzdJsCgJungonEdit.class);
validEntityBeforeSave(update);
@ -198,6 +201,7 @@ public class XzdJsCgJungonEditServiceImpl extends ServiceImpl<XzdJsCgJungonEditM
* @return 是否删除成功
*/
@Override
@Transactional(rollbackFor = Exception.class)
public Boolean deleteWithValidByIds(Collection<Long> ids, Boolean isValid) {
if(isValid){
//TODO 做一些业务上的校验,判断是否需要校验

View File

@ -1,6 +1,7 @@
package org.dromara.xzd.settlement.service.impl;
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
import org.dromara.common.core.exception.ServiceException;
import org.dromara.common.core.utils.MapstructUtils;
import org.dromara.common.core.utils.StringUtils;
import org.dromara.common.mybatis.core.page.TableDataInfo;
@ -9,12 +10,17 @@ import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
import com.baomidou.mybatisplus.core.toolkit.Wrappers;
import lombok.RequiredArgsConstructor;
import org.dromara.common.utils.BatchNumberGenerator;
import org.dromara.system.domain.vo.SysDeptVo;
import org.dromara.system.service.impl.SysDeptServiceImpl;
import org.dromara.system.service.impl.SysOssServiceImpl;
import org.dromara.xzd.comprehensive.service.IXzdCsContractInformationService;
import org.dromara.xzd.enums.XzdClassEnum;
import org.dromara.xzd.service.IXzdCorrespondentList;
import org.dromara.xzd.service.impl.XzdProjectServiceImpl;
import org.dromara.xzd.settlement.domain.XzdJsDeductionItems;
import org.dromara.xzd.settlement.domain.vo.XzdJsCgJungonEditVo;
import org.dromara.xzd.settlement.domain.vo.XzdJsCgJungonVo;
import org.dromara.xzd.settlement.service.IXzdJsDeductionItemsService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
@ -23,10 +29,9 @@ import org.dromara.xzd.settlement.domain.vo.XzdJsZhfwJinduVo;
import org.dromara.xzd.settlement.domain.XzdJsZhfwJindu;
import org.dromara.xzd.settlement.mapper.XzdJsZhfwJinduMapper;
import org.dromara.xzd.settlement.service.IXzdJsZhfwJinduService;
import org.springframework.transaction.annotation.Transactional;
import java.util.List;
import java.util.Map;
import java.util.Collection;
import java.util.*;
/**
* 综合服务合同进度结算Service业务层处理
@ -46,14 +51,16 @@ public class XzdJsZhfwJinduServiceImpl extends ServiceImpl<XzdJsZhfwJinduMapper,
private SysOssServiceImpl sysOssService;
@Autowired
private SysDeptServiceImpl sysDeptService;
private IXzdCsContractInformationService csContractInformationService;
@Autowired
private XzdProjectServiceImpl xzdProjectService;
@Autowired
private IXzdJsDeductionItemsService deductionItemsService;
@Autowired
private IXzdCorrespondentList iXzdCorrespondentList;
/**
* 查询综合服务合同进度结算
*
@ -62,7 +69,10 @@ public class XzdJsZhfwJinduServiceImpl extends ServiceImpl<XzdJsZhfwJinduMapper,
*/
@Override
public XzdJsZhfwJinduVo queryById(Long id){
return baseMapper.selectVoById(id);
XzdJsZhfwJinduVo vo = baseMapper.selectVoById(id);
getName(vo);
getHttk(vo);
return vo;
}
/**
@ -76,6 +86,7 @@ public class XzdJsZhfwJinduServiceImpl extends ServiceImpl<XzdJsZhfwJinduMapper,
public TableDataInfo<XzdJsZhfwJinduVo> queryPageList(XzdJsZhfwJinduBo bo, PageQuery pageQuery) {
LambdaQueryWrapper<XzdJsZhfwJindu> lqw = buildQueryWrapper(bo);
Page<XzdJsZhfwJinduVo> result = baseMapper.selectVoPage(pageQuery.build(), lqw);
result.getRecords().forEach(this::getName);
return TableDataInfo.build(result);
}
@ -88,7 +99,9 @@ public class XzdJsZhfwJinduServiceImpl extends ServiceImpl<XzdJsZhfwJinduMapper,
@Override
public List<XzdJsZhfwJinduVo> queryList(XzdJsZhfwJinduBo bo) {
LambdaQueryWrapper<XzdJsZhfwJindu> lqw = buildQueryWrapper(bo);
return baseMapper.selectVoList(lqw);
List<XzdJsZhfwJinduVo> vos = baseMapper.selectVoList(lqw);
vos.forEach(this::getName);
return vos;
}
private LambdaQueryWrapper<XzdJsZhfwJindu> buildQueryWrapper(XzdJsZhfwJinduBo bo) {
@ -129,13 +142,27 @@ public class XzdJsZhfwJinduServiceImpl extends ServiceImpl<XzdJsZhfwJinduMapper,
* @return 是否新增成功
*/
@Override
@Transactional(rollbackFor = Exception.class)
public Boolean insertByBo(XzdJsZhfwJinduBo bo) {
XzdJsZhfwJindu add = MapstructUtils.convert(bo, XzdJsZhfwJindu.class);
validEntityBeforeSave(add);
String banBen = BatchNumberGenerator.generateBatchNumber("JSZHFWJD-");
add.setDocCode(banBen);
boolean flag = baseMapper.insert(add) > 0;
if (flag) {
bo.setId(add.getId());
}
String tableName = XzdClassEnum.JS_ZHFW_JINDU.getClassName();
if (bo.getKkyjlx() == null || bo.getKkyjlx().isEmpty()) {
throw new ServiceException("扣款与奖励项不能为空");
}
//合同条款-扣款与奖励项
for (XzdJsDeductionItems kkyjlx : bo.getKkyjlx()) {
kkyjlx.setTableName(tableName);
kkyjlx.setMainDocId(add.getId());
}
deductionItemsService.saveBatch(bo.getKkyjlx());
return flag;
}
@ -146,9 +173,24 @@ public class XzdJsZhfwJinduServiceImpl extends ServiceImpl<XzdJsZhfwJinduMapper,
* @return 是否修改成功
*/
@Override
@Transactional(rollbackFor = Exception.class)
public Boolean updateByBo(XzdJsZhfwJinduBo bo) {
XzdJsZhfwJindu update = MapstructUtils.convert(bo, XzdJsZhfwJindu.class);
validEntityBeforeSave(update);
//删除奖励与扣款对应数据
deductionItemsService.remove(new LambdaQueryWrapper<XzdJsDeductionItems>().eq(XzdJsDeductionItems::getMainDocId, update.getId()));
//生成奖励与扣款数据
String tableName = XzdClassEnum.JS_ZHFW_JINDU.getClassName();
if (bo.getKkyjlx() == null || bo.getKkyjlx().isEmpty()) {
throw new ServiceException("扣款与奖励项不能为空");
}
//合同条款-扣款与奖励项
for (XzdJsDeductionItems kkyjlx : bo.getKkyjlx()) {
kkyjlx.setTableName(tableName);
kkyjlx.setMainDocId(update.getId());
}
//新增奖励与扣款数据
deductionItemsService.saveBatch(bo.getKkyjlx());
return baseMapper.updateById(update) > 0;
}
@ -167,10 +209,26 @@ public class XzdJsZhfwJinduServiceImpl extends ServiceImpl<XzdJsZhfwJinduMapper,
* @return 是否删除成功
*/
@Override
@Transactional(rollbackFor = Exception.class)
public Boolean deleteWithValidByIds(Collection<Long> ids, Boolean isValid) {
if(isValid){
//TODO 做一些业务上的校验,判断是否需要校验
}
List<Long> deleteIds = new ArrayList<>();
for (Long id : ids) {
XzdJsZhfwJinduVo vo = baseMapper.selectVoById(id);
if (vo != null){
//删除附件
if (vo.getFileId()!= null && !vo.getFileId().isEmpty()){
List<Long> list = Arrays.stream(vo.getFileId().split(",")).map(Long::valueOf).toList();
deleteIds.addAll(list);
}
}
}
if (!deleteIds.isEmpty()) {
sysOssService.deleteWithValidByIds(deleteIds, false);
}
deductionItemsService.remove(new LambdaQueryWrapper<XzdJsDeductionItems>().in(XzdJsDeductionItems::getMainDocId, ids));
return baseMapper.deleteByIds(ids) > 0;
}
@ -179,22 +237,29 @@ public class XzdJsZhfwJinduServiceImpl extends ServiceImpl<XzdJsZhfwJinduMapper,
* 获取部分字段名称
* @param item
*/
// private void getName(XzdJsZhfwJinduVo item) {
// //项目名称
// if (item.getProjectId() != null){
// String projectName = xzdProjectService.queryNameById(item.getProjectId());
// if (projectName != null){
// item.setProjectName(projectName);
// }
// }
// //部门名称
// if (item.getDefaultFinanceOrg() != null){
// SysDeptVo sysDeptVo = sysDeptService.selectDeptById(item.getDefaultFinanceOrg());
// if (sysDeptVo != null){
// item.setDefaultFinanceOrgName(sysDeptVo.getDeptName());
// }
// }
// }
private void getName(XzdJsZhfwJinduVo item) {
//项目名称
if (item.getProject() != null){
String projectName = xzdProjectService.queryNameById(item.getProject());
if (projectName != null){
item.setProjectName(projectName);
}
}
//合同编码
if (item.getContractCode() != null){
String code = csContractInformationService.queryCodeById(item.getContractCode());
if (code != null){
item.setContractCodeCode(code);
}
}
//结算单位(客户信息列表)
if (item.getSettlementUnit() != null){
String byid = iXzdCorrespondentList.queryNameById(item.getSettlementUnit());
if (byid!=null){
item.setSettlementUnitName(byid);
}
}
}
/**
* 获取扣款与奖励项