结算信息

This commit is contained in:
lg
2025-10-15 22:50:38 +08:00
parent d8838f8e01
commit 9f1da9e6c0
55 changed files with 5250 additions and 60 deletions

View File

@ -56,7 +56,7 @@ public class XzdPurchaseContractSuspendBo extends BaseEntity {
/**
* 终止日期
*/
private Date terminationDate;
private LocalDate terminationDate;
/**
* 项目名称

View File

@ -1,8 +1,13 @@
package org.dromara.xzd.contractManagement.caigoucontractTermination.domain.vo;
import java.time.LocalDate;
import java.time.LocalDateTime;
import java.util.Date;
import com.baomidou.mybatisplus.annotation.FieldFill;
import com.baomidou.mybatisplus.annotation.TableField;
import org.dromara.common.translation.annotation.Translation;
import org.dromara.common.translation.constant.TransConstant;
import org.dromara.xzd.contractManagement.caigoucontractTermination.domain.XzdPurchaseContractSuspend;
import com.alibaba.excel.annotation.ExcelIgnoreUnannotated;
import com.alibaba.excel.annotation.ExcelProperty;
@ -35,12 +40,17 @@ public class XzdPurchaseContractSuspendVo implements Serializable {
@ExcelProperty(value = "主键ID")
private Long id;
/**
* 采购合同信息ID合同编号
*/
@ExcelDictFormat(readConverterExp = "合=同编号")
private Long contractInformationId;
/**
* 采购合同信息ID合同编码
*/
@ExcelProperty(value = "采购合同信息ID", converter = ExcelDictConvert.class)
@ExcelDictFormat(readConverterExp = "合=同编码")
private Long contractInformationId;
private String contractInformationIdName;
/**
* 单据编码
@ -70,7 +80,7 @@ public class XzdPurchaseContractSuspendVo implements Serializable {
* 终止日期
*/
@ExcelProperty(value = "终止日期")
private Date terminationDate;
private LocalDate terminationDate;
/**
* 项目名称
@ -84,12 +94,25 @@ public class XzdPurchaseContractSuspendVo implements Serializable {
@ExcelProperty(value = "乙方单位")
private Long artyBUnit;
/**
* 乙方单位名称
*/
@ExcelProperty(value = "乙方单位名称")
private String artyBUnitName;
/**
* 甲方单位
*/
@ExcelProperty(value = "甲方单位")
private Long partyAUnit;
/**
* 甲方单位名称
*/
@ExcelProperty(value = "甲方单位名称")
private String partyAUnitName;
/**
* 终止原因
*/
@ -157,4 +180,24 @@ public class XzdPurchaseContractSuspendVo implements Serializable {
private String auditStatus;
/**
* 创建者
*/
@TableField(fill = FieldFill.INSERT)
private Long createBy;
/**
* 创建者
*/
@Translation(type = TransConstant.USER_ID_TO_NICKNAME, mapper = "createBy")
@TableField(fill = FieldFill.INSERT)
private Long createByName;
/**
* 创建时间
*/
@TableField(fill = FieldFill.INSERT)
private LocalDateTime createTime;
}

View File

@ -1,6 +1,7 @@
package org.dromara.xzd.contractManagement.caigoucontractTermination.service.impl;
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
import org.dromara.common.core.domain.R;
import org.dromara.common.core.utils.MapstructUtils;
import org.dromara.common.core.utils.StringUtils;
import org.dromara.common.mybatis.core.page.TableDataInfo;
@ -12,6 +13,14 @@ import lombok.RequiredArgsConstructor;
import org.dromara.system.service.impl.SysOssServiceImpl;
import org.dromara.xzd.biddingManagement.biaoqianlixiang.domain.vo.XzdBidPreProjectVo;
import org.dromara.xzd.contractManagement.purchaseManagement.domain.XzdPurchaseContractInformation;
import org.dromara.xzd.contractManagement.purchaseManagement.domain.vo.XzdPurchaseContractInformationVo;
import org.dromara.xzd.contractManagement.purchaseManagement.service.IXzdPurchaseContractInformationService;
import org.dromara.xzd.domain.XzdSettlementRules;
import org.dromara.xzd.domain.dto.QuerCorrespondentDto;
import org.dromara.xzd.service.IXzdCorrespondentList;
import org.dromara.xzd.service.IXzdSettlementRulesService;
import org.dromara.xzd.service.impl.XzdSupplierInfoServiceImpl;
import org.dromara.xzd.settlement.fenbaohetongjungong.domain.vo.SettlementOfSubcontractingCompletionVo;
import org.dromara.xzd.utilS.AreaUtil;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
@ -40,6 +49,17 @@ public class XzdPurchaseContractSuspendServiceImpl extends ServiceImpl<XzdPurcha
private final XzdPurchaseContractSuspendMapper baseMapper;
private final IXzdSettlementRulesService xzdSettlementRulesService;
private final IXzdPurchaseContractInformationService xzdPurchaseContractInformationService;
@Autowired
private XzdSupplierInfoServiceImpl xzdSupplierInfoService;
@Autowired
private IXzdCorrespondentList iXzdCorrespondentList;
@Autowired
private SysOssServiceImpl sysOssService;
@ -53,7 +73,45 @@ public class XzdPurchaseContractSuspendServiceImpl extends ServiceImpl<XzdPurcha
*/
@Override
public XzdPurchaseContractSuspendVo queryById(Long id){
return baseMapper.selectVoById(id);
XzdPurchaseContractSuspendVo vo = baseMapper.selectVoById(id);
List<XzdPurchaseContractSuspendVo> res = List.of(vo);
setValue(res);
return res.getFirst();
}
private void setValue(List<XzdPurchaseContractSuspendVo> res) {
for (XzdPurchaseContractSuspendVo item : res) {
// //项目名称
// if (item.getProject() != null){
// String projectName = xzdProjectService.queryNameById(item.getProject());
// if (projectName != null){
// item.setProjectName(projectName);
// }
// }
//甲方单位(客户信息列表)
R<QuerCorrespondentDto> byid = iXzdCorrespondentList.getCustomerByid(item.getPartyAUnit());
if (byid!=null){
if (byid.getData().getXzdCustomerinformation() != null){
item.setPartyAUnitName(byid.getData().getXzdCustomerinformation().getUnitName());
}
}
//乙方单位(供应商信息列表)
if (item.getArtyBUnit() != null){
String unitName = xzdSupplierInfoService.queryNameById(item.getArtyBUnit());
if (unitName != null){
item.setArtyBUnitName(unitName);
}
}
// 采购合同信息编码
if (item.getContractInformationId() != null){
XzdPurchaseContractInformationVo queryById = xzdPurchaseContractInformationService.queryById(item.getContractInformationId());
if (queryById != null){
item.setContractInformationIdName(queryById.getContractCode());
}
}
}
}
/**
@ -67,6 +125,7 @@ public class XzdPurchaseContractSuspendServiceImpl extends ServiceImpl<XzdPurcha
public TableDataInfo<XzdPurchaseContractSuspendVo> queryPageList(XzdPurchaseContractSuspendBo bo, PageQuery pageQuery) {
LambdaQueryWrapper<XzdPurchaseContractSuspend> lqw = buildQueryWrapper(bo);
Page<XzdPurchaseContractSuspendVo> result = baseMapper.selectVoPage(pageQuery.build(), lqw);
setValue(result.getRecords());
return TableDataInfo.build(result);
}
@ -121,9 +180,9 @@ public class XzdPurchaseContractSuspendServiceImpl extends ServiceImpl<XzdPurcha
Long l = baseMapper.selectCount(new LambdaQueryWrapper<XzdPurchaseContractSuspend>().gt(XzdPurchaseContractSuspend::getCreateTime, LocalDate.now()));
String s = areaUtil.generateDateBasedNumber();
boolean flag = baseMapper.insert(add) > 0;
add.setReceiptsCode(s+"-"+(l+1));
boolean flag = baseMapper.insert(add) > 0;
if (flag) {
bo.setId(add.getId());
}
@ -162,7 +221,6 @@ public class XzdPurchaseContractSuspendServiceImpl extends ServiceImpl<XzdPurcha
if(isValid){
}
for (Long id : ids) {
XzdPurchaseContractSuspendVo vo = baseMapper.selectVoById(id);
// 删除附件

View File

@ -147,7 +147,7 @@ public class XzdPurchaseContractAlteration extends BaseEntity {
private Long changeSiteManager;
/**
* 变更后现场经理
* 变更后合同备注
*/
private Long changeContractRemarks;
@ -160,6 +160,15 @@ public class XzdPurchaseContractAlteration extends BaseEntity {
* 项目类型
*/
private String projectType;
/**
* 变更价税合计
*/
private String changeInTotalAmount;
/**
* 变更后价税合计
*/
private String revisedTotalAmount;
/**
* 付款额不能超合同额1-是0-否

View File

@ -150,7 +150,7 @@ public class XzdPurchaseContractAlterationBo extends BaseEntity {
private Long changeSiteManager;
/**
* 变更后现场经理
* 变更后合同备注
*/
private Long changeContractRemarks;
@ -164,6 +164,15 @@ public class XzdPurchaseContractAlterationBo extends BaseEntity {
*/
private String projectType;
/**
* 变更价税合计
*/
private String changeInTotalAmount;
/**
* 变更后价税合计
*/
private String revisedTotalAmount;
/**
* 付款额不能超合同额1-是0-否
*/
@ -205,6 +214,11 @@ public class XzdPurchaseContractAlterationBo extends BaseEntity {
private String auditStatus;
private LocalDate startDate;
private LocalDate endDate;
/**
* 预收款项

View File

@ -2,8 +2,13 @@ package org.dromara.xzd.contractManagement.caigouhetongbiangeng.domain.vo;
import java.math.BigDecimal;
import java.time.LocalDate;
import java.time.LocalDateTime;
import java.util.Date;
import com.baomidou.mybatisplus.annotation.FieldFill;
import com.baomidou.mybatisplus.annotation.TableField;
import org.dromara.common.translation.annotation.Translation;
import org.dromara.common.translation.constant.TransConstant;
import org.dromara.xzd.contractManagement.caigouhetongbiangeng.domain.XzdPurchaseContractAlteration;
import com.alibaba.excel.annotation.ExcelIgnoreUnannotated;
import com.alibaba.excel.annotation.ExcelProperty;
@ -12,9 +17,11 @@ import org.dromara.common.excel.convert.ExcelDictConvert;
import io.github.linpeilie.annotations.AutoMapper;
import lombok.Data;
import org.dromara.xzd.contractManagement.purchaseManagement.domain.vo.XzdPurchaseContractInformationVo;
import org.dromara.xzd.domain.*;
import java.io.Serial;
import java.io.Serializable;
import java.util.List;
/**
@ -179,7 +186,7 @@ public class XzdPurchaseContractAlterationVo implements Serializable {
/**
* 变更后现场经理
*/
@ExcelProperty(value = "变更后现场经理")
@ExcelProperty(value = "变更后合同备注")
private Long changeContractRemarks;
/**
@ -230,6 +237,25 @@ public class XzdPurchaseContractAlterationVo implements Serializable {
@ExcelProperty(value = "文件ID")
private String fileId;
/**
* 创建者
*/
@TableField(fill = FieldFill.INSERT)
private Long createBy;
/**
* 创建者
*/
@Translation(type = TransConstant.USER_ID_TO_NICKNAME, mapper = "createBy")
@TableField(fill = FieldFill.INSERT)
private Long createByName;
/**
* 创建时间
*/
@TableField(fill = FieldFill.INSERT)
private LocalDateTime createTime;
/**
* 备注
*/
@ -242,11 +268,45 @@ public class XzdPurchaseContractAlterationVo implements Serializable {
@ExcelProperty(value = "审核状态")
private String auditStatus;
/**
* 变更价税合计
*/
private String changeInTotalAmount;
/**
* 采购合同信息
* 变更后价税合计
*/
private XzdPurchaseContractInformationVo xzdPurchaseContractInformationVo;
private String revisedTotalAmount;
/**
* 预收款项
*/
private List<XzdContractAdvanceInfo> yskx;
/**
* 扣款与奖励项
*/
private List<XzdDeductionItems> kkyjlx;
/**
* 合同条款
*/
private List<XzdContractClause> httk;
/**
* 支付条款
*/
private List<XzdSettlementRules> zftk;
/**
* 合同主要条款约定
*/
private XzdContractDepositInfo htzytkyd;
// /**
// * 采购合同信息
// */
// private XzdPurchaseContractInformationVo xzdPurchaseContractInformationVo;

View File

@ -1,6 +1,7 @@
package org.dromara.xzd.contractManagement.caigouhetongbiangeng.service.impl;
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
import org.dromara.common.core.domain.R;
import org.dromara.common.core.utils.MapstructUtils;
import org.dromara.common.core.utils.StringUtils;
import org.dromara.common.mybatis.core.page.TableDataInfo;
@ -12,10 +13,8 @@ import lombok.RequiredArgsConstructor;
import org.dromara.system.service.impl.SysOssServiceImpl;
import org.dromara.xzd.contractManagement.purchaseManagement.domain.vo.XzdPurchaseContractInformationVo;
import org.dromara.xzd.contractManagement.purchaseManagement.service.IXzdPurchaseContractInformationService;
import org.dromara.xzd.domain.XzdContractAdvanceInfo;
import org.dromara.xzd.domain.XzdContractClause;
import org.dromara.xzd.domain.XzdDeductionItems;
import org.dromara.xzd.domain.XzdSettlementRules;
import org.dromara.xzd.domain.*;
import org.dromara.xzd.domain.dto.QuerCorrespondentDto;
import org.dromara.xzd.enums.XzdClassEnum;
import org.dromara.xzd.service.IXzdContractAdvanceInfoService;
import org.dromara.xzd.service.IXzdContractClauseService;
@ -64,6 +63,13 @@ public class XzdPurchaseContractAlterationServiceImpl extends ServiceImpl<XzdPur
@Autowired
private SysOssServiceImpl sysOssService;
@Autowired
private XzdProjectServiceImpl xzdProjectService;
@Autowired
private IXzdCorrespondentList iXzdCorrespondentList;
@Autowired
private XzdSupplierInfoServiceImpl xzdSupplierInfoService;
/**
* 查询采购合同变更
*
@ -73,12 +79,50 @@ public class XzdPurchaseContractAlterationServiceImpl extends ServiceImpl<XzdPur
@Override
public XzdPurchaseContractAlterationVo queryById(Long id){
XzdPurchaseContractAlterationVo xzdPurchaseContractAlterationVo = baseMapper.selectVoById(id);
XzdPurchaseContractInformationVo vo = iXzdPurchaseContractInformationService.queryById(xzdPurchaseContractAlterationVo.getContractInformationId());
xzdPurchaseContractAlterationVo.setXzdPurchaseContractInformationVo( vo);
List<XzdPurchaseContractAlterationVo> list = List.of(xzdPurchaseContractAlterationVo);
setValue(list);
return xzdPurchaseContractAlterationVo;
}
public void setValue(List<XzdPurchaseContractAlterationVo> infos){
for (XzdPurchaseContractAlterationVo item : infos) {
//合同文本-预收款项
LambdaQueryWrapper<XzdContractAdvanceInfo> lambdaQueryWrapper = new LambdaQueryWrapper<>();
lambdaQueryWrapper.eq(XzdContractAdvanceInfo::getContractDetailsId, item.getId());
List<XzdContractAdvanceInfo> advanceInfos = xzdContractAdvanceInfoService.list(lambdaQueryWrapper);
item.setYskx(advanceInfos);
//合同条款-扣款与奖励项
LambdaQueryWrapper<XzdDeductionItems> lambdaQueryWrapper1 = new LambdaQueryWrapper<>();
lambdaQueryWrapper1.eq(XzdDeductionItems::getContractDetailsId, item.getId());
List<XzdDeductionItems> list = xzdDeductionItemsService.list(lambdaQueryWrapper1);
item.setKkyjlx(list);
//合同条款-合同条款
LambdaQueryWrapper<XzdContractClause> lambdaQueryWrapper2 = new LambdaQueryWrapper<>();
lambdaQueryWrapper2.eq(XzdContractClause::getContractDetailsId, item.getId());
List<XzdContractClause> list1 = xzdContractClauseService.list(lambdaQueryWrapper2);
item.setHttk(list1);
//支付条款
LambdaQueryWrapper<XzdSettlementRules> lambdaQueryWrapper3 = new LambdaQueryWrapper<>();
lambdaQueryWrapper3.eq(XzdSettlementRules::getContractDetailsId, item.getId());
List<XzdSettlementRules> list2 = xzdSettlementRulesService.list(lambdaQueryWrapper3);
item.setZftk(list2);
//合同文本-合同主要条款约定
LambdaQueryWrapper<XzdContractDepositInfo> lambdaQueryWrapper4 = new LambdaQueryWrapper<>();
lambdaQueryWrapper4.eq(XzdContractDepositInfo::getContractDetailsId, item.getId());
XzdContractDepositInfo list3 = xzdContractDepositInfoService.getOne(lambdaQueryWrapper4);
item.setHtzytkyd(list3);
}
}
/**
* 分页查询采购合同变更列表
*
@ -113,6 +157,11 @@ public class XzdPurchaseContractAlterationServiceImpl extends ServiceImpl<XzdPur
lqw.eq(StringUtils.isNotBlank(bo.getReceiptsCode()), XzdPurchaseContractAlteration::getReceiptsCode, bo.getReceiptsCode());
lqw.eq(StringUtils.isNotBlank(bo.getTitle()), XzdPurchaseContractAlteration::getTitle, bo.getTitle());
lqw.eq(bo.getDocumentDate() != null, XzdPurchaseContractAlteration::getDocumentDate, bo.getDocumentDate());
lqw.ge(bo.getStartDate() != null, XzdPurchaseContractAlteration::getDocumentDate, bo.getStartDate());
lqw.le(bo.getEndDate() != null, XzdPurchaseContractAlteration::getDocumentDate, bo.getEndDate());
lqw.like(StringUtils.isNotBlank(bo.getContractName()), XzdPurchaseContractAlteration::getContractName, bo.getContractName());
lqw.eq(StringUtils.isNotBlank(bo.getContractType()), XzdPurchaseContractAlteration::getContractType, bo.getContractType());
lqw.eq(StringUtils.isNotBlank(bo.getAlterationType()), XzdPurchaseContractAlteration::getAlterationType, bo.getAlterationType());
@ -158,11 +207,10 @@ public class XzdPurchaseContractAlterationServiceImpl extends ServiceImpl<XzdPur
validEntityBeforeSave(add);
String tableName = XzdClassEnum.CAIGOUHETONG_INFORMATION.getClassName();
boolean flag = baseMapper.insert(add) > 0;
/**
* 预收款项
*/
HashMap<String, Object> hashMap = new HashMap<>();
hashMap.put("contract_detailsId", add.getId());
List<XzdContractAdvanceInfo> yskx = bo.getYskx();
yskx.forEach(item -> {
item.setTableName(tableName);
@ -187,7 +235,6 @@ public class XzdPurchaseContractAlterationServiceImpl extends ServiceImpl<XzdPur
item.setContractDetailsId(add.getId());
});
iXzdContractClauseService.saveBatch(httk);
boolean flag = baseMapper.insert(add) > 0;
if (flag) {
bo.setId(add.getId());
}
@ -273,23 +320,23 @@ public class XzdPurchaseContractAlterationServiceImpl extends ServiceImpl<XzdPur
}
}
}
//合同文本-预收款项
LambdaQueryWrapper<XzdContractAdvanceInfo> lambdaQueryWrapper = new LambdaQueryWrapper<>();
lambdaQueryWrapper.in(XzdContractAdvanceInfo::getContractDetailsId, ids);
xzdContractAdvanceInfoService.remove(lambdaQueryWrapper);
//合同条款-扣款与奖励项
LambdaQueryWrapper<XzdDeductionItems> lambdaQueryWrapper1 = new LambdaQueryWrapper<>();
lambdaQueryWrapper1.in(XzdDeductionItems::getContractDetailsId, ids);
xzdDeductionItemsService.remove(lambdaQueryWrapper1);
//合同条款-合同条款
LambdaQueryWrapper<XzdContractClause> lambdaQueryWrapper2 = new LambdaQueryWrapper<>();
lambdaQueryWrapper2.in(XzdContractClause::getContractDetailsId, ids);
xzdContractClauseService.remove(lambdaQueryWrapper2);
//支付条款
LambdaQueryWrapper<XzdSettlementRules> lambdaQueryWrapper3 = new LambdaQueryWrapper<>();
lambdaQueryWrapper3.in(XzdSettlementRules::getContractDetailsId, ids);
xzdSettlementRulesService.remove(lambdaQueryWrapper3);
}
//合同文本-预收款项
LambdaQueryWrapper<XzdContractAdvanceInfo> lambdaQueryWrapper = new LambdaQueryWrapper<>();
lambdaQueryWrapper.in(XzdContractAdvanceInfo::getContractDetailsId, ids);
xzdContractAdvanceInfoService.remove(lambdaQueryWrapper);
//合同条款-扣款与奖励项
LambdaQueryWrapper<XzdDeductionItems> lambdaQueryWrapper1 = new LambdaQueryWrapper<>();
lambdaQueryWrapper1.in(XzdDeductionItems::getContractDetailsId, ids);
xzdDeductionItemsService.remove(lambdaQueryWrapper1);
//合同条款-合同条款
LambdaQueryWrapper<XzdContractClause> lambdaQueryWrapper2 = new LambdaQueryWrapper<>();
lambdaQueryWrapper2.in(XzdContractClause::getContractDetailsId, ids);
xzdContractClauseService.remove(lambdaQueryWrapper2);
//支付条款
LambdaQueryWrapper<XzdSettlementRules> lambdaQueryWrapper3 = new LambdaQueryWrapper<>();
lambdaQueryWrapper3.in(XzdSettlementRules::getContractDetailsId, ids);
xzdSettlementRulesService.remove(lambdaQueryWrapper3);
if(isValid){
//TODO 做一些业务上的校验,判断是否需要校验
}

View File

@ -0,0 +1,105 @@
package org.dromara.xzd.contractManagement.fenbaohetongbiangg.controller;
import java.util.List;
import lombok.RequiredArgsConstructor;
import jakarta.servlet.http.HttpServletResponse;
import jakarta.validation.constraints.*;
import cn.dev33.satoken.annotation.SaCheckPermission;
import org.springframework.web.bind.annotation.*;
import org.springframework.validation.annotation.Validated;
import org.dromara.common.idempotent.annotation.RepeatSubmit;
import org.dromara.common.log.annotation.Log;
import org.dromara.common.web.core.BaseController;
import org.dromara.common.mybatis.core.page.PageQuery;
import org.dromara.common.core.domain.R;
import org.dromara.common.core.validate.AddGroup;
import org.dromara.common.core.validate.EditGroup;
import org.dromara.common.log.enums.BusinessType;
import org.dromara.common.excel.utils.ExcelUtil;
import org.dromara.xzd.contractManagement.fenbaohetongbiangg.domain.vo.XzdSubcontractChangeVo;
import org.dromara.xzd.contractManagement.fenbaohetongbiangg.domain.bo.XzdSubcontractChangeBo;
import org.dromara.xzd.contractManagement.fenbaohetongbiangg.service.IXzdSubcontractChangeService;
import org.dromara.common.mybatis.core.page.TableDataInfo;
/**
* 分包合同变更
*
* @author Lion Li
* @date 2025-10-14
*/
@Validated
@RequiredArgsConstructor
@RestController
@RequestMapping("/fenbaohetongbiangg/subcontractChange")
public class XzdSubcontractChangeController extends BaseController {
private final IXzdSubcontractChangeService xzdSubcontractChangeService;
/**
* 查询分包合同变更列表
*/
@SaCheckPermission("fenbaohetongbiangg:subcontractChange:list")
@GetMapping("/list")
public TableDataInfo<XzdSubcontractChangeVo> list(XzdSubcontractChangeBo bo, PageQuery pageQuery) {
return xzdSubcontractChangeService.queryPageList(bo, pageQuery);
}
/**
* 导出分包合同变更列表
*/
@SaCheckPermission("fenbaohetongbiangg:subcontractChange:export")
@Log(title = "分包合同变更", businessType = BusinessType.EXPORT)
@PostMapping("/export")
public void export(XzdSubcontractChangeBo bo, HttpServletResponse response) {
List<XzdSubcontractChangeVo> list = xzdSubcontractChangeService.queryList(bo);
ExcelUtil.exportExcel(list, "分包合同变更", XzdSubcontractChangeVo.class, response);
}
/**
* 获取分包合同变更详细信息
*
* @param id 主键
*/
@SaCheckPermission("fenbaohetongbiangg:subcontractChange:query")
@GetMapping("/{id}")
public R<XzdSubcontractChangeVo> getInfo(@NotNull(message = "主键不能为空")
@PathVariable Long id) {
return R.ok(xzdSubcontractChangeService.queryById(id));
}
/**
* 新增分包合同变更
*/
@SaCheckPermission("fenbaohetongbiangg:subcontractChange:add")
@Log(title = "分包合同变更", businessType = BusinessType.INSERT)
@RepeatSubmit()
@PostMapping()
public R<Void> add(@Validated(AddGroup.class) @RequestBody XzdSubcontractChangeBo bo) {
return toAjax(xzdSubcontractChangeService.insertByBo(bo));
}
/**
* 修改分包合同变更
*/
@SaCheckPermission("fenbaohetongbiangg:subcontractChange:edit")
@Log(title = "分包合同变更", businessType = BusinessType.UPDATE)
@RepeatSubmit()
@PutMapping()
public R<Void> edit(@Validated(EditGroup.class) @RequestBody XzdSubcontractChangeBo bo) {
return toAjax(xzdSubcontractChangeService.updateByBo(bo));
}
/**
* 删除分包合同变更
*
* @param ids 主键串
*/
@SaCheckPermission("fenbaohetongbiangg:subcontractChange:remove")
@Log(title = "分包合同变更", businessType = BusinessType.DELETE)
@DeleteMapping("/{ids}")
public R<Void> remove(@NotEmpty(message = "主键不能为空")
@PathVariable Long[] ids) {
return toAjax(xzdSubcontractChangeService.deleteWithValidByIds(List.of(ids), true));
}
}

View File

@ -0,0 +1,218 @@
package org.dromara.xzd.contractManagement.fenbaohetongbiangg.domain;
import org.dromara.common.mybatis.core.domain.BaseEntity;
import com.baomidou.mybatisplus.annotation.*;
import lombok.Data;
import lombok.EqualsAndHashCode;
import java.math.BigDecimal;
import java.io.Serial;
import java.time.LocalDate;
/**
* 分包合同变更对象 xzd_subcontract_change
*
* @author Lion Li
* @date 2025-10-14
*/
@Data
@EqualsAndHashCode(callSuper = true)
@TableName("xzd_subcontract_change")
public class XzdSubcontractChange extends BaseEntity {
@Serial
private static final long serialVersionUID = 1L;
/**
*
*/
@TableId(value = "id")
private Long id;
/**
* 单据编码
*/
private String documentCode;
/**
* 标题
*/
private String title;
/**
* 单据日期
*/
private LocalDate documentDate;
/**
* 合同编码
*/
private Long contractCode;
/**
* 合同名称
*/
private String contractName;
/**
* 合同类型(字典)
*/
private String contractType;
/**
* 变更类型(字典)
*/
private String changeType;
/**
* 项目
*/
private String project;
/**
* 经营模式
*/
private String businessModel;
/**
* 组织
*/
private String organization;
/**
* 甲方单位
*/
private String partyAUnit;
/**
* 乙方单位
*/
private String partyBUnit;
/**
* 原合同造价
*/
private BigDecimal originalContractCost;
/**
* 变更价税合计
*/
private BigDecimal changeTaxInclusiveTotal;
/**
* 变更后总造价
*/
private BigDecimal postChangeTotalCost;
/**
* 累计变更金额
*/
private BigDecimal cumulativeChangeAmount;
/**
* 可用目标成本
*/
private BigDecimal availableTargetCost;
/**
* 目标成本
*/
private BigDecimal targetCost;
/**
* 目标成本项
*/
private String targetCostItem;
/**
* 警示
*/
private String warning;
/**
* 支付条款
*/
private String paymentTerms;
/**
* 备注
*/
private String remarks;
/**
* 是否用印
*/
private Long isStamped;
/**
* 变更后项目经理
*/
private Long postChangeProjectManager;
/**
* 变更后项目责任人
*/
private Long postChangeProjectOwner;
/**
* 变更后现场经理
*/
private Long postChangeSiteManager;
/**
* 变更后合同备注
*/
private String postChangeContractRemarks;
/**
* 项目大类(字典)
*/
private String projectCategory;
/**
* 项目类型(字典)
*/
private String projectType;
/**
* 付款额不能超合同额
*/
private Long isPaymentNotExceedContract;
/**
* 付款额不能超合同额支付比
*/
private BigDecimal paymentNotExceedRatio;
/**
* 预结算/结算额不能超合同额
*/
private Long isPreSettlementNotExceedContract;
/**
* 预结算/结算额不能超合同额比例
*/
private BigDecimal preSettlementNotExceedRatio;
/**
* 实时刷新
*/
private Long isRealTimeRefresh;
/**
* 合同累计变更金额
*/
private BigDecimal contractCumulativeChangeAmount;
/**
* 文件id (多个文件逗号分隔)
*/
private String fileId;
/**
* 单据引用ID
*/
private Long danjuId;
}

View File

@ -0,0 +1,244 @@
package org.dromara.xzd.contractManagement.fenbaohetongbiangg.domain.bo;
import org.dromara.xzd.contractManagement.fenbaohetongbiangg.domain.XzdSubcontractChange;
import org.dromara.common.mybatis.core.domain.BaseEntity;
import org.dromara.common.core.validate.AddGroup;
import org.dromara.common.core.validate.EditGroup;
import io.github.linpeilie.annotations.AutoMapper;
import lombok.Data;
import lombok.EqualsAndHashCode;
import jakarta.validation.constraints.*;
import org.dromara.xzd.domain.XzdContractAdvanceInfo;
import org.dromara.xzd.domain.XzdContractClause;
import org.dromara.xzd.domain.XzdDeductionItems;
import java.math.BigDecimal;
import java.time.LocalDate;
import java.util.List;
/**
* 分包合同变更业务对象 xzd_subcontract_change
*
* @author Lion Li
* @date 2025-10-14
*/
@Data
@EqualsAndHashCode(callSuper = true)
@AutoMapper(target = XzdSubcontractChange.class, reverseConvertGenerate = false)
public class XzdSubcontractChangeBo extends BaseEntity {
/**
*
*/
@NotNull(message = "不能为空", groups = { EditGroup.class })
private Long id;
/**
* 单据编码
*/
@NotBlank(message = "单据编码不能为空", groups = { AddGroup.class, EditGroup.class })
private String documentCode;
/**
* 标题
*/
private String title;
/**
* 单据日期
*/
private LocalDate documentDate;
/**
* 合同编码
*/
private Long contractCode;
/**
* 合同名称
*/
private String contractName;
/**
* 合同类型(字典)
*/
private String contractType;
/**
* 变更类型(字典)
*/
private String changeType;
/**
* 项目
*/
private String project;
/**
* 经营模式
*/
private String businessModel;
/**
* 组织
*/
private String organization;
/**
* 甲方单位
*/
private String partyAUnit;
/**
* 乙方单位
*/
private String partyBUnit;
/**
* 原合同造价
*/
private BigDecimal originalContractCost;
/**
* 变更价税合计
*/
private BigDecimal changeTaxInclusiveTotal;
/**
* 变更后总造价
*/
private BigDecimal postChangeTotalCost;
/**
* 累计变更金额
*/
private BigDecimal cumulativeChangeAmount;
/**
* 可用目标成本
*/
private BigDecimal availableTargetCost;
/**
* 目标成本
*/
private BigDecimal targetCost;
/**
* 目标成本项
*/
private String targetCostItem;
/**
* 警示
*/
private String warning;
/**
* 支付条款
*/
private String paymentTerms;
/**
* 备注
*/
private String remarks;
/**
* 是否用印
*/
private Long isStamped;
/**
* 变更后项目经理
*/
private Long postChangeProjectManager;
/**
* 变更后项目责任人
*/
private Long postChangeProjectOwner;
/**
* 变更后现场经理
*/
private Long postChangeSiteManager;
/**
* 变更后合同备注
*/
private String postChangeContractRemarks;
/**
* 项目大类(字典)
*/
private String projectCategory;
/**
* 项目类型(字典)
*/
private String projectType;
/**
* 付款额不能超合同额
*/
private Long isPaymentNotExceedContract;
/**
* 付款额不能超合同额支付比
*/
private BigDecimal paymentNotExceedRatio;
/**
* 预结算/结算额不能超合同额
*/
private Long isPreSettlementNotExceedContract;
/**
* 预结算/结算额不能超合同额比例
*/
private BigDecimal preSettlementNotExceedRatio;
/**
* 实时刷新
*/
private Long isRealTimeRefresh;
/**
* 合同累计变更金额
*/
private BigDecimal contractCumulativeChangeAmount;
/**
* 文件id (多个文件逗号分隔)
*/
private String fileId;
/**
* 单据引用ID
*/
private Long danjuId;
private LocalDate startTime;
private LocalDate endTime;
/**
* 预收款项
*/
private List<XzdContractAdvanceInfo> yskx;
/**
* 扣款与奖励项
*/
private List<XzdDeductionItems> kkyjlx;
/**
* 合同条款
*/
private List<XzdContractClause> httk;
}

View File

@ -0,0 +1,325 @@
package org.dromara.xzd.contractManagement.fenbaohetongbiangg.domain.vo;
import java.math.BigDecimal;
import com.baomidou.mybatisplus.annotation.FieldFill;
import com.baomidou.mybatisplus.annotation.TableField;
import org.dromara.common.translation.annotation.Translation;
import org.dromara.common.translation.constant.TransConstant;
import org.dromara.xzd.contractManagement.fenbaohetongbiangg.domain.XzdSubcontractChange;
import com.alibaba.excel.annotation.ExcelIgnoreUnannotated;
import com.alibaba.excel.annotation.ExcelProperty;
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.contractManagement.fenbaohetongxinxi.domain.XzdSubcontract;
import org.dromara.xzd.contractManagement.fenbaohetongxinxi.domain.vo.XzdSubcontractVo;
import org.dromara.xzd.domain.*;
import java.io.Serial;
import java.io.Serializable;
import java.time.LocalDate;
import java.time.LocalDateTime;
import java.util.Date;
import java.util.List;
/**
* 分包合同变更视图对象 xzd_subcontract_change
*
* @author Lion Li
* @date 2025-10-14
*/
@Data
@ExcelIgnoreUnannotated
@AutoMapper(target = XzdSubcontractChange.class)
public class XzdSubcontractChangeVo implements Serializable {
@Serial
private static final long serialVersionUID = 1L;
/**
*
*/
@ExcelProperty(value = "")
private Long id;
/**
* 单据编码
*/
@ExcelProperty(value = "单据编码")
private String documentCode;
/**
* 标题
*/
@ExcelProperty(value = "标题")
private String title;
/**
* 单据日期
*/
@ExcelProperty(value = "单据日期")
private LocalDate documentDate;
/**
* 合同编码
*/
@ExcelProperty(value = "合同编码")
private Long contractCode;
/**
* 合同名称
*/
@ExcelProperty(value = "合同名称")
private String contractName;
/**
* 合同类型(字典)
*/
@ExcelProperty(value = "合同类型", converter = ExcelDictConvert.class)
@ExcelDictFormat(readConverterExp = "字=典")
private String contractType;
/**
* 变更类型(字典)
*/
@ExcelProperty(value = "变更类型", converter = ExcelDictConvert.class)
@ExcelDictFormat(readConverterExp = "字=典")
private String changeType;
/**
* 项目
*/
@ExcelProperty(value = "项目")
private String project;
/**
* 经营模式
*/
@ExcelProperty(value = "经营模式")
private String businessModel;
/**
* 组织
*/
@ExcelProperty(value = "组织")
private String organization;
/**
* 甲方单位
*/
@ExcelProperty(value = "甲方单位")
private String partyAUnit;
/**
* 乙方单位
*/
@ExcelProperty(value = "乙方单位")
private String partyBUnit;
/**
* 原合同造价
*/
@ExcelProperty(value = "原合同造价")
private BigDecimal originalContractCost;
/**
* 变更价税合计
*/
@ExcelProperty(value = "变更价税合计")
private BigDecimal changeTaxInclusiveTotal;
/**
* 变更后总造价
*/
@ExcelProperty(value = "变更后总造价")
private BigDecimal postChangeTotalCost;
/**
* 累计变更金额
*/
@ExcelProperty(value = "累计变更金额")
private BigDecimal cumulativeChangeAmount;
/**
* 可用目标成本
*/
@ExcelProperty(value = "可用目标成本")
private BigDecimal availableTargetCost;
/**
* 目标成本
*/
@ExcelProperty(value = "目标成本")
private BigDecimal targetCost;
/**
* 目标成本项
*/
@ExcelProperty(value = "目标成本项")
private String targetCostItem;
/**
* 警示
*/
@ExcelProperty(value = "警示")
private String warning;
/**
* 支付条款
*/
@ExcelProperty(value = "支付条款")
private String paymentTerms;
/**
* 备注
*/
@ExcelProperty(value = "备注")
private String remarks;
/**
* 是否用印
*/
@ExcelProperty(value = "是否用印")
private Long isStamped;
/**
* 变更后项目经理
*/
@ExcelProperty(value = "变更后项目经理")
private Long postChangeProjectManager;
/**
* 变更后项目责任人
*/
@ExcelProperty(value = "变更后项目责任人")
private Long postChangeProjectOwner;
/**
* 变更后现场经理
*/
@ExcelProperty(value = "变更后现场经理")
private Long postChangeSiteManager;
/**
* 变更后合同备注
*/
@ExcelProperty(value = "变更后合同备注")
private String postChangeContractRemarks;
/**
* 项目大类(字典)
*/
@ExcelProperty(value = "项目大类", converter = ExcelDictConvert.class)
@ExcelDictFormat(readConverterExp = "字=典")
private String projectCategory;
/**
* 项目类型(字典)
*/
@ExcelProperty(value = "项目类型", converter = ExcelDictConvert.class)
@ExcelDictFormat(readConverterExp = "字=典")
private String projectType;
/**
* 付款额不能超合同额
*/
@ExcelProperty(value = "付款额不能超合同额")
private Long isPaymentNotExceedContract;
/**
* 付款额不能超合同额支付比
*/
@ExcelProperty(value = "付款额不能超合同额支付比")
private BigDecimal paymentNotExceedRatio;
/**
* 预结算/结算额不能超合同额
*/
@ExcelProperty(value = "预结算/结算额不能超合同额")
private Long isPreSettlementNotExceedContract;
/**
* 预结算/结算额不能超合同额比例
*/
@ExcelProperty(value = "预结算/结算额不能超合同额比例")
private BigDecimal preSettlementNotExceedRatio;
/**
* 实时刷新
*/
@ExcelProperty(value = "实时刷新")
private Long isRealTimeRefresh;
/**
* 合同累计变更金额
*/
@ExcelProperty(value = "合同累计变更金额")
private BigDecimal contractCumulativeChangeAmount;
/**
* 文件id (多个文件逗号分隔)
*/
@ExcelProperty(value = "文件id ", converter = ExcelDictConvert.class)
@ExcelDictFormat(readConverterExp = "多=个文件逗号分隔")
private String fileId;
/**
* 单据引用ID
*/
@ExcelProperty(value = "单据引用ID")
private Long danjuId;
/**
* 创建者
*/
@TableField(fill = FieldFill.INSERT)
private Long createBy;
/**
* 创建者
*/
@Translation(type = TransConstant.USER_ID_TO_NICKNAME, mapper = "createBy")
@TableField(fill = FieldFill.INSERT)
private Long createByName;
/**
* 创建时间
*/
private LocalDateTime createTime;
/**
* 预收款项
*/
private List<XzdContractAdvanceInfo> yskx;
/**
* 扣款与奖励项
*/
private List<XzdDeductionItems> kkyjlx;
/**
* 合同条款
*/
private List<XzdContractClause> httk;
/**
* 支付条款
*/
private List<XzdSettlementRules> zftk;
/**
* 合同主要条款约定
*/
private XzdContractDepositInfo htzytkyd;
}

View File

@ -0,0 +1,15 @@
package org.dromara.xzd.contractManagement.fenbaohetongbiangg.mapper;
import org.dromara.xzd.contractManagement.fenbaohetongbiangg.domain.XzdSubcontractChange;
import org.dromara.xzd.contractManagement.fenbaohetongbiangg.domain.vo.XzdSubcontractChangeVo;
import org.dromara.common.mybatis.core.mapper.BaseMapperPlus;
/**
* 分包合同变更Mapper接口
*
* @author Lion Li
* @date 2025-10-14
*/
public interface XzdSubcontractChangeMapper extends BaseMapperPlus<XzdSubcontractChange, XzdSubcontractChangeVo> {
}

View File

@ -0,0 +1,70 @@
package org.dromara.xzd.contractManagement.fenbaohetongbiangg.service;
import org.dromara.xzd.contractManagement.fenbaohetongbiangg.domain.vo.XzdSubcontractChangeVo;
import org.dromara.xzd.contractManagement.fenbaohetongbiangg.domain.bo.XzdSubcontractChangeBo;
import org.dromara.xzd.contractManagement.fenbaohetongbiangg.domain.XzdSubcontractChange;
import org.dromara.common.mybatis.core.page.TableDataInfo;
import org.dromara.common.mybatis.core.page.PageQuery;
import com.baomidou.mybatisplus.extension.service.IService;
import java.util.Collection;
import java.util.List;
/**
* 分包合同变更Service接口
*
* @author Lion Li
* @date 2025-10-14
*/
public interface IXzdSubcontractChangeService extends IService<XzdSubcontractChange>{
/**
* 查询分包合同变更
*
* @param id 主键
* @return 分包合同变更
*/
XzdSubcontractChangeVo queryById(Long id);
/**
* 分页查询分包合同变更列表
*
* @param bo 查询条件
* @param pageQuery 分页参数
* @return 分包合同变更分页列表
*/
TableDataInfo<XzdSubcontractChangeVo> queryPageList(XzdSubcontractChangeBo bo, PageQuery pageQuery);
/**
* 查询符合条件的分包合同变更列表
*
* @param bo 查询条件
* @return 分包合同变更列表
*/
List<XzdSubcontractChangeVo> queryList(XzdSubcontractChangeBo bo);
/**
* 新增分包合同变更
*
* @param bo 分包合同变更
* @return 是否新增成功
*/
Boolean insertByBo(XzdSubcontractChangeBo bo);
/**
* 修改分包合同变更
*
* @param bo 分包合同变更
* @return 是否修改成功
*/
Boolean updateByBo(XzdSubcontractChangeBo bo);
/**
* 校验并批量删除分包合同变更信息
*
* @param ids 待删除的主键集合
* @param isValid 是否进行有效性校验
* @return 是否删除成功
*/
Boolean deleteWithValidByIds(Collection<Long> ids, Boolean isValid);
}

View File

@ -0,0 +1,355 @@
package org.dromara.xzd.contractManagement.fenbaohetongbiangg.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;
import org.dromara.common.mybatis.core.page.PageQuery;
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.system.service.impl.SysOssServiceImpl;
import org.dromara.xzd.contractManagement.caigouhetongbiangeng.domain.vo.XzdPurchaseContractAlterationVo;
import org.dromara.xzd.contractManagement.fenbaohetongxinxi.domain.vo.XzdSubcontractVo;
import org.dromara.xzd.contractManagement.fenbaohetongxinxi.service.IXzdSubcontractService;
import org.dromara.xzd.contractManagement.purchaseManagement.service.IXzdPurchaseContractInformationService;
import org.dromara.xzd.domain.*;
import org.dromara.xzd.enums.XzdClassEnum;
import org.dromara.xzd.service.IXzdContractAdvanceInfoService;
import org.dromara.xzd.service.IXzdContractClauseService;
import org.dromara.xzd.service.IXzdDeductionItemsService;
import org.dromara.xzd.service.impl.XzdContractAdvanceInfoServiceImpl;
import org.dromara.xzd.service.impl.XzdContractClauseServiceImpl;
import org.dromara.xzd.service.impl.XzdDeductionItemsServiceImpl;
import org.dromara.xzd.service.impl.XzdSettlementRulesServiceImpl;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import org.dromara.xzd.contractManagement.fenbaohetongbiangg.domain.bo.XzdSubcontractChangeBo;
import org.dromara.xzd.contractManagement.fenbaohetongbiangg.domain.vo.XzdSubcontractChangeVo;
import org.dromara.xzd.contractManagement.fenbaohetongbiangg.domain.XzdSubcontractChange;
import org.dromara.xzd.contractManagement.fenbaohetongbiangg.mapper.XzdSubcontractChangeMapper;
import org.dromara.xzd.contractManagement.fenbaohetongbiangg.service.IXzdSubcontractChangeService;
import java.util.*;
/**
* 分包合同变更Service业务层处理
*
* @author Lion Li
* @date 2025-10-14
*/
@RequiredArgsConstructor
@Service
public class XzdSubcontractChangeServiceImpl extends ServiceImpl<XzdSubcontractChangeMapper, XzdSubcontractChange> implements IXzdSubcontractChangeService {
private final XzdSubcontractChangeMapper baseMapper;
private final IXzdContractAdvanceInfoService iXzdContractAdvanceInfoService;
private final IXzdDeductionItemsService iXzdDeductionItemsService;
private final IXzdContractClauseService iXzdContractClauseService;
private final IXzdSubcontractService iXzdSubcontractService;
private final SysOssServiceImpl sysOssService;
@Autowired
private XzdContractAdvanceInfoServiceImpl xzdContractAdvanceInfoService;
@Autowired
private XzdDeductionItemsServiceImpl xzdDeductionItemsService;
@Autowired
private XzdContractClauseServiceImpl xzdContractClauseService;
@Autowired
private XzdSettlementRulesServiceImpl xzdSettlementRulesService;
/**
* 查询分包合同变更
*
* @param id 主键
* @return 分包合同变更
*/
@Override
public XzdSubcontractChangeVo queryById(Long id) {
XzdSubcontractChangeVo xzdSubcontractChangeVo = baseMapper.selectVoById(id);
List<XzdSubcontractChangeVo> list = List.of(xzdSubcontractChangeVo);
setValue(list);
return xzdSubcontractChangeVo;
}
private void setValue(List<XzdSubcontractChangeVo> lists) {
for (XzdSubcontractChangeVo item : lists) {
//合同文本-预收款项
LambdaQueryWrapper<XzdContractAdvanceInfo> lambdaQueryWrapper = new LambdaQueryWrapper<>();
lambdaQueryWrapper.eq(XzdContractAdvanceInfo::getContractDetailsId, item.getId());
List<XzdContractAdvanceInfo> advanceInfos = xzdContractAdvanceInfoService.list(lambdaQueryWrapper);
item.setYskx(advanceInfos);
//合同条款-扣款与奖励项
LambdaQueryWrapper<XzdDeductionItems> lambdaQueryWrapper1 = new LambdaQueryWrapper<>();
lambdaQueryWrapper1.eq(XzdDeductionItems::getContractDetailsId, item.getId());
List<XzdDeductionItems> list = xzdDeductionItemsService.list(lambdaQueryWrapper1);
item.setKkyjlx(list);
//合同条款-合同条款
LambdaQueryWrapper<XzdContractClause> lambdaQueryWrapper2 = new LambdaQueryWrapper<>();
lambdaQueryWrapper2.eq(XzdContractClause::getContractDetailsId, item.getId());
List<XzdContractClause> list1 = xzdContractClauseService.list(lambdaQueryWrapper2);
item.setHttk(list1);
//支付条款
LambdaQueryWrapper<XzdSettlementRules> lambdaQueryWrapper3 = new LambdaQueryWrapper<>();
lambdaQueryWrapper3.eq(XzdSettlementRules::getContractDetailsId, item.getId());
List<XzdSettlementRules> list2 = xzdSettlementRulesService.list(lambdaQueryWrapper3);
item.setZftk(list2);
// //合同文本-合同主要条款约定
// LambdaQueryWrapper<XzdContractDepositInfo> lambdaQueryWrapper4 = new LambdaQueryWrapper<>();
// lambdaQueryWrapper4.eq(XzdContractDepositInfo::getContractDetailsId, item.getId());
// XzdContractDepositInfo list3 = xzdContractDepositInfoService.getOne(lambdaQueryWrapper4);
// item.setHtzytkyd(list3);
}
}
/**
* 分页查询分包合同变更列表
*
* @param bo 查询条件
* @param pageQuery 分页参数
* @return 分包合同变更分页列表
*/
@Override
public TableDataInfo<XzdSubcontractChangeVo> queryPageList(XzdSubcontractChangeBo bo, PageQuery pageQuery) {
LambdaQueryWrapper<XzdSubcontractChange> lqw = buildQueryWrapper(bo);
Page<XzdSubcontractChangeVo> result = baseMapper.selectVoPage(pageQuery.build(), lqw);
return TableDataInfo.build(result);
}
/**
* 查询符合条件的分包合同变更列表
*
* @param bo 查询条件
* @return 分包合同变更列表
*/
@Override
public List<XzdSubcontractChangeVo> queryList(XzdSubcontractChangeBo bo) {
LambdaQueryWrapper<XzdSubcontractChange> lqw = buildQueryWrapper(bo);
return baseMapper.selectVoList(lqw);
}
private LambdaQueryWrapper<XzdSubcontractChange> buildQueryWrapper(XzdSubcontractChangeBo bo) {
Map<String, Object> params = bo.getParams();
LambdaQueryWrapper<XzdSubcontractChange> lqw = Wrappers.lambdaQuery();
lqw.orderByDesc(XzdSubcontractChange::getId);
lqw.eq(StringUtils.isNotBlank(bo.getDocumentCode()), XzdSubcontractChange::getDocumentCode, bo.getDocumentCode());
lqw.eq(StringUtils.isNotBlank(bo.getTitle()), XzdSubcontractChange::getTitle, bo.getTitle());
lqw.eq(bo.getDocumentDate() != null, XzdSubcontractChange::getDocumentDate, bo.getDocumentDate());
lqw.ge(bo.getStartTime() != null, XzdSubcontractChange::getDocumentDate, bo.getStartTime());
lqw.le(bo.getEndTime() != null, XzdSubcontractChange::getDocumentDate, bo.getEndTime());
lqw.eq(bo.getContractCode() != null, XzdSubcontractChange::getContractCode, bo.getContractCode());
lqw.like(StringUtils.isNotBlank(bo.getContractName()), XzdSubcontractChange::getContractName, bo.getContractName());
lqw.eq(StringUtils.isNotBlank(bo.getContractType()), XzdSubcontractChange::getContractType, bo.getContractType());
lqw.eq(StringUtils.isNotBlank(bo.getChangeType()), XzdSubcontractChange::getChangeType, bo.getChangeType());
lqw.eq(StringUtils.isNotBlank(bo.getProject()), XzdSubcontractChange::getProject, bo.getProject());
lqw.eq(StringUtils.isNotBlank(bo.getBusinessModel()), XzdSubcontractChange::getBusinessModel, bo.getBusinessModel());
lqw.eq(StringUtils.isNotBlank(bo.getOrganization()), XzdSubcontractChange::getOrganization, bo.getOrganization());
lqw.eq(StringUtils.isNotBlank(bo.getPartyAUnit()), XzdSubcontractChange::getPartyAUnit, bo.getPartyAUnit());
lqw.eq(StringUtils.isNotBlank(bo.getPartyBUnit()), XzdSubcontractChange::getPartyBUnit, bo.getPartyBUnit());
lqw.eq(bo.getOriginalContractCost() != null, XzdSubcontractChange::getOriginalContractCost, bo.getOriginalContractCost());
lqw.eq(bo.getChangeTaxInclusiveTotal() != null, XzdSubcontractChange::getChangeTaxInclusiveTotal, bo.getChangeTaxInclusiveTotal());
lqw.eq(bo.getPostChangeTotalCost() != null, XzdSubcontractChange::getPostChangeTotalCost, bo.getPostChangeTotalCost());
lqw.eq(bo.getCumulativeChangeAmount() != null, XzdSubcontractChange::getCumulativeChangeAmount, bo.getCumulativeChangeAmount());
lqw.eq(bo.getAvailableTargetCost() != null, XzdSubcontractChange::getAvailableTargetCost, bo.getAvailableTargetCost());
lqw.eq(bo.getTargetCost() != null, XzdSubcontractChange::getTargetCost, bo.getTargetCost());
lqw.eq(StringUtils.isNotBlank(bo.getTargetCostItem()), XzdSubcontractChange::getTargetCostItem, bo.getTargetCostItem());
lqw.eq(StringUtils.isNotBlank(bo.getWarning()), XzdSubcontractChange::getWarning, bo.getWarning());
lqw.eq(StringUtils.isNotBlank(bo.getPaymentTerms()), XzdSubcontractChange::getPaymentTerms, bo.getPaymentTerms());
lqw.eq(StringUtils.isNotBlank(bo.getRemarks()), XzdSubcontractChange::getRemarks, bo.getRemarks());
lqw.eq(bo.getIsStamped() != null, XzdSubcontractChange::getIsStamped, bo.getIsStamped());
lqw.eq(bo.getPostChangeProjectManager() != null, XzdSubcontractChange::getPostChangeProjectManager, bo.getPostChangeProjectManager());
lqw.eq(bo.getPostChangeProjectOwner() != null, XzdSubcontractChange::getPostChangeProjectOwner, bo.getPostChangeProjectOwner());
lqw.eq(bo.getPostChangeSiteManager() != null, XzdSubcontractChange::getPostChangeSiteManager, bo.getPostChangeSiteManager());
lqw.eq(StringUtils.isNotBlank(bo.getPostChangeContractRemarks()), XzdSubcontractChange::getPostChangeContractRemarks, bo.getPostChangeContractRemarks());
lqw.eq(StringUtils.isNotBlank(bo.getProjectCategory()), XzdSubcontractChange::getProjectCategory, bo.getProjectCategory());
lqw.eq(StringUtils.isNotBlank(bo.getProjectType()), XzdSubcontractChange::getProjectType, bo.getProjectType());
lqw.eq(bo.getIsPaymentNotExceedContract() != null, XzdSubcontractChange::getIsPaymentNotExceedContract, bo.getIsPaymentNotExceedContract());
lqw.eq(bo.getPaymentNotExceedRatio() != null, XzdSubcontractChange::getPaymentNotExceedRatio, bo.getPaymentNotExceedRatio());
lqw.eq(bo.getIsPreSettlementNotExceedContract() != null, XzdSubcontractChange::getIsPreSettlementNotExceedContract, bo.getIsPreSettlementNotExceedContract());
lqw.eq(bo.getPreSettlementNotExceedRatio() != null, XzdSubcontractChange::getPreSettlementNotExceedRatio, bo.getPreSettlementNotExceedRatio());
lqw.eq(bo.getIsRealTimeRefresh() != null, XzdSubcontractChange::getIsRealTimeRefresh, bo.getIsRealTimeRefresh());
lqw.eq(bo.getContractCumulativeChangeAmount() != null, XzdSubcontractChange::getContractCumulativeChangeAmount, bo.getContractCumulativeChangeAmount());
lqw.eq(StringUtils.isNotBlank(bo.getFileId()), XzdSubcontractChange::getFileId, bo.getFileId());
lqw.eq(bo.getDanjuId() != null, XzdSubcontractChange::getDanjuId, bo.getDanjuId());
return lqw;
}
/**
* 新增分包合同变更
*
* @param bo 分包合同变更
* @return 是否新增成功
*/
@Override
public Boolean insertByBo(XzdSubcontractChangeBo bo) {
XzdSubcontractChange add = MapstructUtils.convert(bo, XzdSubcontractChange.class);
validEntityBeforeSave(add);
boolean flag = baseMapper.insert(add) > 0;
String tableName = XzdClassEnum.CAIGOUHETONG_INFORMATION.getClassName();
/**
* 预收款项
*/
HashMap<String, Object> hashMap = new HashMap<>();
hashMap.put("contract_detailsId", add.getId());
List<XzdContractAdvanceInfo> yskx = bo.getYskx();
yskx.forEach(item -> {
item.setTableName(tableName);
item.setContractDetailsId(add.getId());
});
iXzdContractAdvanceInfoService.saveBatch(yskx);
/**
* 扣款与奖励项
*/
List<XzdDeductionItems> kkyjlx = bo.getKkyjlx();
kkyjlx.forEach(item -> {
item.setTableName(tableName);
item.setContractDetailsId(add.getId());
});
iXzdDeductionItemsService.saveBatch(kkyjlx);
/**
* 合同条款
*/
List<XzdContractClause> httk = bo.getHttk();
httk.forEach(item -> {
item.setTableName(tableName);
item.setContractDetailsId(add.getId());
});
iXzdContractClauseService.saveBatch(httk);
if (flag) {
bo.setId(add.getId());
}
return flag;
}
/**
* 修改分包合同变更
*
* @param bo 分包合同变更
* @return 是否修改成功
*/
@Override
public Boolean updateByBo(XzdSubcontractChangeBo bo) {
XzdSubcontractChange add = MapstructUtils.convert(bo, XzdSubcontractChange.class);
/**
* 预收款项 优先删除数据在添加
*/
String tableName = XzdClassEnum.PURCHASE_CONTRACT_INFORMATION.getClassName();
HashMap<String, Object> hashMap = new HashMap<>();
hashMap.put("contract_details_id", add.getId());
XzdSubcontractChangeVo xzdSubcontractChangeVo = baseMapper.selectVoById(add.getId());
if (xzdSubcontractChangeVo == null){
throw new ServiceException("数据不存在");
}
List<XzdContractAdvanceInfo> yskx = bo.getYskx();
iXzdContractAdvanceInfoService.getBaseMapper().deleteByMap(hashMap);
if (yskx != null){
yskx.forEach(item -> {
item.setTableName(tableName);
item.setContractDetailsId(add.getId());
});
iXzdContractAdvanceInfoService.saveBatch(yskx);
}
/**
* 扣款与奖励项
*/
List<XzdDeductionItems> kkyjlx = bo.getKkyjlx();
iXzdDeductionItemsService.getBaseMapper().deleteByMap(hashMap);
if(kkyjlx != null){
kkyjlx.forEach(item -> {
item.setTableName(tableName);
item.setContractDetailsId(add.getId());
});
iXzdDeductionItemsService.saveBatch(kkyjlx);
}
/**
* 合同条款
*/
List<XzdContractClause> httk = bo.getHttk();
iXzdContractClauseService.getBaseMapper().deleteByMap(hashMap);
if (httk != null){
httk.forEach(item -> {
item.setTableName(tableName);
item.setContractDetailsId(add.getId());
});
iXzdContractClauseService.saveBatch(httk);
}
return baseMapper.updateById(add) > 0;
}
/**
* 保存前的数据校验
*/
private void validEntityBeforeSave(XzdSubcontractChange entity){
//TODO 做一些数据校验,如唯一约束
}
/**
* 校验并批量删除分包合同变更信息
*
* @param ids 待删除的主键集合
* @param isValid 是否进行有效性校验
* @return 是否删除成功
*/
@Override
public Boolean deleteWithValidByIds(Collection<Long> ids, Boolean isValid) {
if(isValid){
}
for (Long id : ids) {
XzdSubcontractChangeVo vo = baseMapper.selectVoById(id);
if (vo != null){
//删除附件
if (vo.getFileId()!= null && !vo.getFileId().isEmpty()){
List<Long> deleteIds = Arrays.stream(vo.getFileId().split(",")).map(Long::valueOf).toList();
if (!deleteIds.isEmpty()) {
sysOssService.deleteWithValidByIds(deleteIds, false);
}
}
}
}
//合同文本-预收款项
LambdaQueryWrapper<XzdContractAdvanceInfo> lambdaQueryWrapper = new LambdaQueryWrapper<>();
lambdaQueryWrapper.in(XzdContractAdvanceInfo::getContractDetailsId, ids);
xzdContractAdvanceInfoService.remove(lambdaQueryWrapper);
//合同条款-扣款与奖励项
LambdaQueryWrapper<XzdDeductionItems> lambdaQueryWrapper1 = new LambdaQueryWrapper<>();
lambdaQueryWrapper1.in(XzdDeductionItems::getContractDetailsId, ids);
xzdDeductionItemsService.remove(lambdaQueryWrapper1);
//合同条款-合同条款
LambdaQueryWrapper<XzdContractClause> lambdaQueryWrapper2 = new LambdaQueryWrapper<>();
lambdaQueryWrapper2.in(XzdContractClause::getContractDetailsId, ids);
xzdContractClauseService.remove(lambdaQueryWrapper2);
//支付条款
LambdaQueryWrapper<XzdSettlementRules> lambdaQueryWrapper3 = new LambdaQueryWrapper<>();
lambdaQueryWrapper3.in(XzdSettlementRules::getContractDetailsId, ids);
xzdSettlementRulesService.remove(lambdaQueryWrapper3);
return baseMapper.deleteByIds(ids) > 0;
}
}

View File

@ -203,7 +203,7 @@ public class XzdSubcontract extends BaseEntity {
/**
* 备案时间
*/
private LocalDateTime filingTime;
private LocalDate filingTime;
/**
* WBS

View File

@ -29,13 +29,11 @@ public class XzdSubcontractBo extends BaseEntity {
/**
*
*/
@NotNull(message = "不能为空", groups = { EditGroup.class })
private Long id;
/**
* 合同编码
*/
@NotBlank(message = "合同编码不能为空", groups = { AddGroup.class, EditGroup.class })
private String contractCode;
/**
@ -206,7 +204,7 @@ public class XzdSubcontractBo extends BaseEntity {
/**
* 备案时间
*/
private LocalDateTime filingTime;
private LocalDate filingTime;
/**
* WBS

View File

@ -2,6 +2,8 @@ package org.dromara.xzd.contractManagement.fenbaohetongxinxi.domain.vo;
import java.math.BigDecimal;
import com.baomidou.mybatisplus.annotation.FieldFill;
import com.baomidou.mybatisplus.annotation.TableField;
import org.dromara.common.translation.annotation.Translation;
import org.dromara.common.translation.constant.TransConstant;
import org.dromara.xzd.contractManagement.fenbaohetongxinxi.domain.XzdSubcontract;
@ -321,7 +323,7 @@ public class XzdSubcontractVo implements Serializable {
* 备案时间
*/
@ExcelProperty(value = "备案时间")
private LocalDateTime filingTime;
private LocalDate filingTime;
/**
* WBS
@ -389,6 +391,27 @@ public class XzdSubcontractVo implements Serializable {
@ExcelProperty(value = "单据引用ID")
private Long danjuId;
/**
* 创建者
*/
@TableField(fill = FieldFill.INSERT)
private Long createBy;
/**
* 创建者
*/
@Translation(type = TransConstant.USER_ID_TO_NICKNAME, mapper = "createBy")
@TableField(fill = FieldFill.INSERT)
private Long createByName;
/**
* 创建时间
*/
@TableField(fill = FieldFill.INSERT)
private LocalDateTime createTime;
/**
* 预收款项
*/

View File

@ -89,7 +89,7 @@ public class XzdSubcontractServiceImpl extends ServiceImpl<XzdSubcontractMapper,
// 装填数据
setValue(informationVo);
return baseMapper.selectVoById(id);
return xzdSubcontractVo;
}
/**
@ -109,8 +109,6 @@ public class XzdSubcontractServiceImpl extends ServiceImpl<XzdSubcontractMapper,
private void setValue(List<XzdSubcontractVo> infos) {
for (XzdSubcontractVo item : infos) {
//项目名称
if (item.getProject() != null){
String projectName = xzdProjectService.queryNameById(item.getProject());
@ -270,8 +268,9 @@ public class XzdSubcontractServiceImpl extends ServiceImpl<XzdSubcontractMapper,
validEntityBeforeSave(add);
Long l = baseMapper.selectCount(new LambdaQueryWrapper<XzdSubcontract>().gt(XzdSubcontract::getCreateTime, LocalDate.now()));
String s = areaUtil.generateDateBasedNumberByY();
boolean flag = baseMapper.insert(add) > 0;
add.setContractCode(ZxdEnum.FENBAOHETONG_PREFIX.getTypeValue()+"-"+s+"-"+(l+1));
boolean flag = baseMapper.insert(add) > 0;
// 表名
String tableName = XzdClassEnum.FENBAOHETONG_INFORMATION.getClassName();

View File

@ -0,0 +1,105 @@
package org.dromara.xzd.contractManagement.fenbaohetongzhongzhi.controller;
import java.util.List;
import lombok.RequiredArgsConstructor;
import jakarta.servlet.http.HttpServletResponse;
import jakarta.validation.constraints.*;
import cn.dev33.satoken.annotation.SaCheckPermission;
import org.springframework.web.bind.annotation.*;
import org.springframework.validation.annotation.Validated;
import org.dromara.common.idempotent.annotation.RepeatSubmit;
import org.dromara.common.log.annotation.Log;
import org.dromara.common.web.core.BaseController;
import org.dromara.common.mybatis.core.page.PageQuery;
import org.dromara.common.core.domain.R;
import org.dromara.common.core.validate.AddGroup;
import org.dromara.common.core.validate.EditGroup;
import org.dromara.common.log.enums.BusinessType;
import org.dromara.common.excel.utils.ExcelUtil;
import org.dromara.xzd.contractManagement.fenbaohetongzhongzhi.domain.vo.XzdSubcontractTerminationVo;
import org.dromara.xzd.contractManagement.fenbaohetongzhongzhi.domain.bo.XzdSubcontractTerminationBo;
import org.dromara.xzd.contractManagement.fenbaohetongzhongzhi.service.IXzdSubcontractTerminationService;
import org.dromara.common.mybatis.core.page.TableDataInfo;
/**
* 分包合同终止
*
* @author Lion Li
* @date 2025-10-14
*/
@Validated
@RequiredArgsConstructor
@RestController
@RequestMapping("/fenbaohetongzhongzhi/subcontractTermination")
public class XzdSubcontractTerminationController extends BaseController {
private final IXzdSubcontractTerminationService xzdSubcontractTerminationService;
/**
* 查询分包合同终止列表
*/
@SaCheckPermission("fenbaohetongzhongzhi:subcontractTermination:list")
@GetMapping("/list")
public TableDataInfo<XzdSubcontractTerminationVo> list(XzdSubcontractTerminationBo bo, PageQuery pageQuery) {
return xzdSubcontractTerminationService.queryPageList(bo, pageQuery);
}
/**
* 导出分包合同终止列表
*/
@SaCheckPermission("fenbaohetongzhongzhi:subcontractTermination:export")
@Log(title = "分包合同终止", businessType = BusinessType.EXPORT)
@PostMapping("/export")
public void export(XzdSubcontractTerminationBo bo, HttpServletResponse response) {
List<XzdSubcontractTerminationVo> list = xzdSubcontractTerminationService.queryList(bo);
ExcelUtil.exportExcel(list, "分包合同终止", XzdSubcontractTerminationVo.class, response);
}
/**
* 获取分包合同终止详细信息
*
* @param id 主键
*/
@SaCheckPermission("fenbaohetongzhongzhi:subcontractTermination:query")
@GetMapping("/{id}")
public R<XzdSubcontractTerminationVo> getInfo(@NotNull(message = "主键不能为空")
@PathVariable Long id) {
return R.ok(xzdSubcontractTerminationService.queryById(id));
}
/**
* 新增分包合同终止
*/
@SaCheckPermission("fenbaohetongzhongzhi:subcontractTermination:add")
@Log(title = "分包合同终止", businessType = BusinessType.INSERT)
@RepeatSubmit()
@PostMapping()
public R<Void> add(@Validated(AddGroup.class) @RequestBody XzdSubcontractTerminationBo bo) {
return toAjax(xzdSubcontractTerminationService.insertByBo(bo));
}
/**
* 修改分包合同终止
*/
@SaCheckPermission("fenbaohetongzhongzhi:subcontractTermination:edit")
@Log(title = "分包合同终止", businessType = BusinessType.UPDATE)
@RepeatSubmit()
@PutMapping()
public R<Void> edit(@Validated(EditGroup.class) @RequestBody XzdSubcontractTerminationBo bo) {
return toAjax(xzdSubcontractTerminationService.updateByBo(bo));
}
/**
* 删除分包合同终止
*
* @param ids 主键串
*/
@SaCheckPermission("fenbaohetongzhongzhi:subcontractTermination:remove")
@Log(title = "分包合同终止", businessType = BusinessType.DELETE)
@DeleteMapping("/{ids}")
public R<Void> remove(@NotEmpty(message = "主键不能为空")
@PathVariable Long[] ids) {
return toAjax(xzdSubcontractTerminationService.deleteWithValidByIds(List.of(ids), true));
}
}

View File

@ -0,0 +1,118 @@
package org.dromara.xzd.contractManagement.fenbaohetongzhongzhi.domain;
import org.dromara.common.mybatis.core.domain.BaseEntity;
import com.baomidou.mybatisplus.annotation.*;
import lombok.Data;
import lombok.EqualsAndHashCode;
import java.math.BigDecimal;
import java.io.Serial;
import java.time.LocalDate;
/**
* 分包合同终止对象 xzd_subcontract_termination
*
* @author Lion Li
* @date 2025-10-14
*/
@Data
@EqualsAndHashCode(callSuper = true)
@TableName("xzd_subcontract_termination")
public class XzdSubcontractTermination extends BaseEntity {
@Serial
private static final long serialVersionUID = 1L;
/**
*
*/
@TableId(value = "id")
private Long id;
/**
* 单据编码
*/
private String documentCode;
/**
* 标题
*/
private String title;
/**
* 单据日期
*/
private LocalDate documentDate;
/**
* 合同编号
*/
private Long contractNumber;
/**
* 合同名称
*/
private String contractName;
/**
* 终止日期
*/
private LocalDate terminationDate;
/**
* 工程项目
*/
private String engineeringProject;
/**
* 甲方单位
*/
private String partyAUnit;
/**
* 乙方单位
*/
private String partyBUnit;
/**
* 终止原因
*/
private String terminationReason;
/**
* 备注
*/
private String remarks;
/**
* 累计结算金额
*/
private BigDecimal cumulativeSettlementAmount;
/**
* 累计付款金额
*/
private BigDecimal cumulativePaymentAmount;
/**
* 项目大类(字典)
*/
private String projectCategory;
/**
* 项目类型(字典)
*/
private String projectType;
/**
* 文件id (多个文件逗号分隔)
*/
private String fileId;
/**
* 单据引用ID
*/
private Long danjuId;
}

View File

@ -0,0 +1,116 @@
package org.dromara.xzd.contractManagement.fenbaohetongzhongzhi.domain.bo;
import org.dromara.xzd.contractManagement.fenbaohetongzhongzhi.domain.XzdSubcontractTermination;
import org.dromara.common.mybatis.core.domain.BaseEntity;
import org.dromara.common.core.validate.AddGroup;
import org.dromara.common.core.validate.EditGroup;
import io.github.linpeilie.annotations.AutoMapper;
import lombok.Data;
import lombok.EqualsAndHashCode;
import jakarta.validation.constraints.*;
import java.math.BigDecimal;
import java.time.LocalDate;
/**
* 分包合同终止业务对象 xzd_subcontract_termination
*
* @author Lion Li
* @date 2025-10-14
*/
@Data
@EqualsAndHashCode(callSuper = true)
@AutoMapper(target = XzdSubcontractTermination.class, reverseConvertGenerate = false)
public class XzdSubcontractTerminationBo extends BaseEntity {
/**
*
*/
private Long id;
/**
* 单据编码
*/
private String documentCode;
/**
* 标题
*/
private String title;
/**
* 单据日期
*/
private LocalDate documentDate;
/**
* 合同编号
*/
private Long contractNumber;
/**
* 合同名称
*/
private String contractName;
/**
* 终止日期
*/
private LocalDate terminationDate;
/**
* 工程项目
*/
private String engineeringProject;
/**
* 甲方单位
*/
private String partyAUnit;
/**
* 乙方单位
*/
private String partyBUnit;
/**
* 终止原因
*/
private String terminationReason;
/**
* 备注
*/
private String remarks;
/**
* 累计结算金额
*/
private BigDecimal cumulativeSettlementAmount;
/**
* 累计付款金额
*/
private BigDecimal cumulativePaymentAmount;
/**
* 项目大类(字典)
*/
private String projectCategory;
/**
* 项目类型(字典)
*/
private String projectType;
/**
* 文件id (多个文件逗号分隔)
*/
private String fileId;
/**
* 单据引用ID
*/
private Long danjuId;
}

View File

@ -0,0 +1,175 @@
package org.dromara.xzd.contractManagement.fenbaohetongzhongzhi.domain.vo;
import java.math.BigDecimal;
import com.baomidou.mybatisplus.annotation.FieldFill;
import com.baomidou.mybatisplus.annotation.TableField;
import org.dromara.common.translation.annotation.Translation;
import org.dromara.common.translation.constant.TransConstant;
import org.dromara.xzd.contractManagement.fenbaohetongzhongzhi.domain.XzdSubcontractTermination;
import com.alibaba.excel.annotation.ExcelIgnoreUnannotated;
import com.alibaba.excel.annotation.ExcelProperty;
import org.dromara.common.excel.annotation.ExcelDictFormat;
import org.dromara.common.excel.convert.ExcelDictConvert;
import io.github.linpeilie.annotations.AutoMapper;
import lombok.Data;
import java.io.Serial;
import java.io.Serializable;
import java.time.LocalDate;
import java.time.LocalDateTime;
import java.util.Date;
/**
* 分包合同终止视图对象 xzd_subcontract_termination
*
* @author Lion Li
* @date 2025-10-14
*/
@Data
@ExcelIgnoreUnannotated
@AutoMapper(target = XzdSubcontractTermination.class)
public class XzdSubcontractTerminationVo implements Serializable {
@Serial
private static final long serialVersionUID = 1L;
/**
*
*/
@ExcelProperty(value = "")
private Long id;
/**
* 单据编码
*/
@ExcelProperty(value = "单据编码")
private String documentCode;
/**
* 标题
*/
@ExcelProperty(value = "标题")
private String title;
/**
* 单据日期
*/
@ExcelProperty(value = "单据日期")
private LocalDate documentDate;
/**
* 合同编号
*/
@ExcelProperty(value = "合同编号")
private Long contractNumber;
/**
* 合同编码
*/
@ExcelProperty(value = "合同编码")
private String contractNumberName;
/**
* 合同名称
*/
@ExcelProperty(value = "合同名称")
private String contractName;
/**
* 终止日期
*/
@ExcelProperty(value = "终止日期")
private LocalDate terminationDate;
/**
* 工程项目
*/
@ExcelProperty(value = "工程项目")
private String engineeringProject;
/**
* 甲方单位
*/
@ExcelProperty(value = "甲方单位")
private String partyAUnit;
/**
* 乙方单位
*/
@ExcelProperty(value = "乙方单位")
private String partyBUnit;
/**
* 终止原因
*/
@ExcelProperty(value = "终止原因")
private String terminationReason;
/**
* 备注
*/
@ExcelProperty(value = "备注")
private String remarks;
/**
* 累计结算金额
*/
@ExcelProperty(value = "累计结算金额")
private BigDecimal cumulativeSettlementAmount;
/**
* 累计付款金额
*/
@ExcelProperty(value = "累计付款金额")
private BigDecimal cumulativePaymentAmount;
/**
* 项目大类(字典)
*/
@ExcelProperty(value = "项目大类", converter = ExcelDictConvert.class)
@ExcelDictFormat(readConverterExp = "字=典")
private String projectCategory;
/**
* 项目类型(字典)
*/
@ExcelProperty(value = "项目类型", converter = ExcelDictConvert.class)
@ExcelDictFormat(readConverterExp = "字=典")
private String projectType;
/**
* 文件id (多个文件逗号分隔)
*/
@ExcelProperty(value = "文件id ", converter = ExcelDictConvert.class)
@ExcelDictFormat(readConverterExp = "多=个文件逗号分隔")
private String fileId;
/**
* 单据引用ID
*/
@ExcelProperty(value = "单据引用ID")
private Long danjuId;
/**
* 创建者
*/
@TableField(fill = FieldFill.INSERT)
private Long createBy;
/**
* 创建者
*/
@Translation(type = TransConstant.USER_ID_TO_NICKNAME, mapper = "createBy")
@TableField(fill = FieldFill.INSERT)
private Long createByName;
/**
* 创建时间
*/
@TableField(fill = FieldFill.INSERT)
private LocalDateTime createTime;
}

View File

@ -0,0 +1,15 @@
package org.dromara.xzd.contractManagement.fenbaohetongzhongzhi.mapper;
import org.dromara.xzd.contractManagement.fenbaohetongzhongzhi.domain.XzdSubcontractTermination;
import org.dromara.xzd.contractManagement.fenbaohetongzhongzhi.domain.vo.XzdSubcontractTerminationVo;
import org.dromara.common.mybatis.core.mapper.BaseMapperPlus;
/**
* 分包合同终止Mapper接口
*
* @author Lion Li
* @date 2025-10-14
*/
public interface XzdSubcontractTerminationMapper extends BaseMapperPlus<XzdSubcontractTermination, XzdSubcontractTerminationVo> {
}

View File

@ -0,0 +1,70 @@
package org.dromara.xzd.contractManagement.fenbaohetongzhongzhi.service;
import org.dromara.xzd.contractManagement.fenbaohetongzhongzhi.domain.vo.XzdSubcontractTerminationVo;
import org.dromara.xzd.contractManagement.fenbaohetongzhongzhi.domain.bo.XzdSubcontractTerminationBo;
import org.dromara.xzd.contractManagement.fenbaohetongzhongzhi.domain.XzdSubcontractTermination;
import org.dromara.common.mybatis.core.page.TableDataInfo;
import org.dromara.common.mybatis.core.page.PageQuery;
import com.baomidou.mybatisplus.extension.service.IService;
import java.util.Collection;
import java.util.List;
/**
* 分包合同终止Service接口
*
* @author Lion Li
* @date 2025-10-14
*/
public interface IXzdSubcontractTerminationService extends IService<XzdSubcontractTermination>{
/**
* 查询分包合同终止
*
* @param id 主键
* @return 分包合同终止
*/
XzdSubcontractTerminationVo queryById(Long id);
/**
* 分页查询分包合同终止列表
*
* @param bo 查询条件
* @param pageQuery 分页参数
* @return 分包合同终止分页列表
*/
TableDataInfo<XzdSubcontractTerminationVo> queryPageList(XzdSubcontractTerminationBo bo, PageQuery pageQuery);
/**
* 查询符合条件的分包合同终止列表
*
* @param bo 查询条件
* @return 分包合同终止列表
*/
List<XzdSubcontractTerminationVo> queryList(XzdSubcontractTerminationBo bo);
/**
* 新增分包合同终止
*
* @param bo 分包合同终止
* @return 是否新增成功
*/
Boolean insertByBo(XzdSubcontractTerminationBo bo);
/**
* 修改分包合同终止
*
* @param bo 分包合同终止
* @return 是否修改成功
*/
Boolean updateByBo(XzdSubcontractTerminationBo bo);
/**
* 校验并批量删除分包合同终止信息
*
* @param ids 待删除的主键集合
* @param isValid 是否进行有效性校验
* @return 是否删除成功
*/
Boolean deleteWithValidByIds(Collection<Long> ids, Boolean isValid);
}

View File

@ -0,0 +1,177 @@
package org.dromara.xzd.contractManagement.fenbaohetongzhongzhi.service.impl;
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
import org.dromara.common.core.utils.MapstructUtils;
import org.dromara.common.core.utils.StringUtils;
import org.dromara.common.mybatis.core.page.TableDataInfo;
import org.dromara.common.mybatis.core.page.PageQuery;
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.system.service.impl.SysOssServiceImpl;
import org.dromara.xzd.contractManagement.caigoucontractTermination.domain.XzdPurchaseContractSuspend;
import org.dromara.xzd.contractManagement.caigoucontractTermination.domain.vo.XzdPurchaseContractSuspendVo;
import org.dromara.xzd.utilS.AreaUtil;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import org.dromara.xzd.contractManagement.fenbaohetongzhongzhi.domain.bo.XzdSubcontractTerminationBo;
import org.dromara.xzd.contractManagement.fenbaohetongzhongzhi.domain.vo.XzdSubcontractTerminationVo;
import org.dromara.xzd.contractManagement.fenbaohetongzhongzhi.domain.XzdSubcontractTermination;
import org.dromara.xzd.contractManagement.fenbaohetongzhongzhi.mapper.XzdSubcontractTerminationMapper;
import org.dromara.xzd.contractManagement.fenbaohetongzhongzhi.service.IXzdSubcontractTerminationService;
import java.time.LocalDate;
import java.util.Arrays;
import java.util.List;
import java.util.Map;
import java.util.Collection;
import java.util.stream.Collectors;
/**
* 分包合同终止Service业务层处理
*
* @author Lion Li
* @date 2025-10-14
*/
@RequiredArgsConstructor
@Service
public class XzdSubcontractTerminationServiceImpl extends ServiceImpl<XzdSubcontractTerminationMapper, XzdSubcontractTermination> implements IXzdSubcontractTerminationService {
private final XzdSubcontractTerminationMapper baseMapper;
private final AreaUtil areaUtil;
@Autowired
private SysOssServiceImpl sysOssService;
/**
* 查询分包合同终止
*
* @param id 主键
* @return 分包合同终止
*/
@Override
public XzdSubcontractTerminationVo queryById(Long id){
XzdSubcontractTerminationVo vo = baseMapper.selectVoById(id);
List.of(vo);
return baseMapper.selectVoById(id);
}
/**
* 分页查询分包合同终止列表
*
* @param bo 查询条件
* @param pageQuery 分页参数
* @return 分包合同终止分页列表
*/
@Override
public TableDataInfo<XzdSubcontractTerminationVo> queryPageList(XzdSubcontractTerminationBo bo, PageQuery pageQuery) {
LambdaQueryWrapper<XzdSubcontractTermination> lqw = buildQueryWrapper(bo);
Page<XzdSubcontractTerminationVo> result = baseMapper.selectVoPage(pageQuery.build(), lqw);
return TableDataInfo.build(result);
}
/**
* 查询符合条件的分包合同终止列表
*
* @param bo 查询条件
* @return 分包合同终止列表
*/
@Override
public List<XzdSubcontractTerminationVo> queryList(XzdSubcontractTerminationBo bo) {
LambdaQueryWrapper<XzdSubcontractTermination> lqw = buildQueryWrapper(bo);
return baseMapper.selectVoList(lqw);
}
private LambdaQueryWrapper<XzdSubcontractTermination> buildQueryWrapper(XzdSubcontractTerminationBo bo) {
Map<String, Object> params = bo.getParams();
LambdaQueryWrapper<XzdSubcontractTermination> lqw = Wrappers.lambdaQuery();
lqw.orderByDesc(XzdSubcontractTermination::getId);
lqw.eq(StringUtils.isNotBlank(bo.getDocumentCode()), XzdSubcontractTermination::getDocumentCode, bo.getDocumentCode());
lqw.eq(StringUtils.isNotBlank(bo.getTitle()), XzdSubcontractTermination::getTitle, bo.getTitle());
lqw.eq(bo.getDocumentDate() != null, XzdSubcontractTermination::getDocumentDate, bo.getDocumentDate());
lqw.eq(bo.getContractNumber() != null, XzdSubcontractTermination::getContractNumber, bo.getContractNumber());
lqw.like(StringUtils.isNotBlank(bo.getContractName()), XzdSubcontractTermination::getContractName, bo.getContractName());
lqw.eq(bo.getTerminationDate() != null, XzdSubcontractTermination::getTerminationDate, bo.getTerminationDate());
lqw.eq(StringUtils.isNotBlank(bo.getEngineeringProject()), XzdSubcontractTermination::getEngineeringProject, bo.getEngineeringProject());
lqw.eq(StringUtils.isNotBlank(bo.getPartyAUnit()), XzdSubcontractTermination::getPartyAUnit, bo.getPartyAUnit());
lqw.eq(StringUtils.isNotBlank(bo.getPartyBUnit()), XzdSubcontractTermination::getPartyBUnit, bo.getPartyBUnit());
lqw.eq(StringUtils.isNotBlank(bo.getTerminationReason()), XzdSubcontractTermination::getTerminationReason, bo.getTerminationReason());
lqw.eq(StringUtils.isNotBlank(bo.getRemarks()), XzdSubcontractTermination::getRemarks, bo.getRemarks());
lqw.eq(bo.getCumulativeSettlementAmount() != null, XzdSubcontractTermination::getCumulativeSettlementAmount, bo.getCumulativeSettlementAmount());
lqw.eq(bo.getCumulativePaymentAmount() != null, XzdSubcontractTermination::getCumulativePaymentAmount, bo.getCumulativePaymentAmount());
lqw.eq(StringUtils.isNotBlank(bo.getProjectCategory()), XzdSubcontractTermination::getProjectCategory, bo.getProjectCategory());
lqw.eq(StringUtils.isNotBlank(bo.getProjectType()), XzdSubcontractTermination::getProjectType, bo.getProjectType());
lqw.eq(StringUtils.isNotBlank(bo.getFileId()), XzdSubcontractTermination::getFileId, bo.getFileId());
lqw.eq(bo.getDanjuId() != null, XzdSubcontractTermination::getDanjuId, bo.getDanjuId());
return lqw;
}
/**
* 新增分包合同终止
*
* @param bo 分包合同终止
* @return 是否新增成功
*/
@Override
public Boolean insertByBo(XzdSubcontractTerminationBo bo) {
XzdSubcontractTermination add = MapstructUtils.convert(bo, XzdSubcontractTermination.class);
validEntityBeforeSave(add);
Long l = baseMapper.selectCount(new LambdaQueryWrapper<XzdSubcontractTermination>().gt(XzdSubcontractTermination::getCreateTime, LocalDate.now()));
String s = areaUtil.generateDateBasedNumber();
add.setDocumentCode(s+"-"+(l+1));
boolean flag = baseMapper.insert(add) > 0;
if (flag) {
bo.setId(add.getId());
}
return flag;
}
/**
* 修改分包合同终止
*
* @param bo 分包合同终止
* @return 是否修改成功
*/
@Override
public Boolean updateByBo(XzdSubcontractTerminationBo bo) {
XzdSubcontractTermination update = MapstructUtils.convert(bo, XzdSubcontractTermination.class);
validEntityBeforeSave(update);
return baseMapper.updateById(update) > 0;
}
/**
* 保存前的数据校验
*/
private void validEntityBeforeSave(XzdSubcontractTermination entity){
//TODO 做一些数据校验,如唯一约束
}
/**
* 校验并批量删除分包合同终止信息
*
* @param ids 待删除的主键集合
* @param isValid 是否进行有效性校验
* @return 是否删除成功
*/
@Override
public Boolean deleteWithValidByIds(Collection<Long> ids, Boolean isValid) {
if(isValid){
//TODO 做一些业务上的校验,判断是否需要校验
}
for (Long id : ids) {
XzdSubcontractTerminationVo vo = baseMapper.selectVoById(id);
// 删除附件
if (!StringUtils.isEmpty(vo.getFileId())){
List<Long> collect = Arrays.stream(vo.getFileId().split(",")).map(item -> {
return Long.parseLong(item);
}).collect(Collectors.toList());
sysOssService.deleteWithValidByIds(collect, false);
}
}
return baseMapper.deleteByIds(ids) > 0;
}
}

View File

@ -1,7 +1,11 @@
package org.dromara.xzd.contractManagement.purchaseManagement.domain.vo;
import java.time.LocalDate;
import java.time.LocalDateTime;
import java.util.Date;
import com.baomidou.mybatisplus.annotation.FieldFill;
import com.baomidou.mybatisplus.annotation.TableField;
import com.fasterxml.jackson.annotation.JsonFormat;
import com.alibaba.excel.annotation.ExcelIgnoreUnannotated;
import com.alibaba.excel.annotation.ExcelProperty;
@ -416,6 +420,25 @@ public class XzdPurchaseContractInformationVo implements Serializable {
private String auditStatus;
/**
* 创建者
*/
@TableField(fill = FieldFill.INSERT)
private Long createBy;
/**
* 创建者
*/
@Translation(type = TransConstant.USER_ID_TO_NICKNAME, mapper = "createBy")
@TableField(fill = FieldFill.INSERT)
private Long createByName;
/**
* 创建时间
*/
@TableField(fill = FieldFill.INSERT)
private LocalDateTime createTime;
/**
* 预收款项
*/

View File

@ -94,11 +94,12 @@ public class XzdPurchaseContractInformationServiceImpl extends ServiceImpl<XzdPu
@Override
public XzdPurchaseContractInformationVo queryById(Long id){
XzdPurchaseContractInformationVo xzdPurchaseContractInformationVo = baseMapper.selectVoById(id);
List<XzdPurchaseContractInformationVo> informationVo = List.of(xzdPurchaseContractInformationVo);
List<XzdPurchaseContractInformationVo> informationVo = new ArrayList<>();
if (xzdPurchaseContractInformationVo != null){
informationVo = List.of(xzdPurchaseContractInformationVo);
// 装填数据
setValue(informationVo);
setValue(informationVo);
}
return informationVo.getFirst();
}

View File

@ -18,6 +18,8 @@ import org.springframework.web.bind.annotation.*;
import java.util.List;
//客户信息总controller
@Validated
@RequiredArgsConstructor
@RestController
@ -28,8 +30,6 @@ public class XzdCorrespondentList {
private final IXzdCorrespondentList iXzdCorrespondentList;
private final IXzdCustomertypeService iXzdCustomertypeService;
/**

View File

@ -40,6 +40,10 @@ public class XzdGuaranteeChangeInfo extends BaseEntity {
* 单据编号
*/
private String documentNumber;
/**
* 合同类型
*/
private String contractType;
/**
* 标题

View File

@ -60,7 +60,12 @@ public class XzdGuaranteeChangeInfoBo extends BaseEntity {
/**
* 合同保函名称
*/
private Long contractGuaranteeName;
private String contractGuaranteeName;
/**
* 合同类型
*/
private String contractType;
/**
* 工程项目
@ -76,7 +81,7 @@ public class XzdGuaranteeChangeInfoBo extends BaseEntity {
* 经办人名称
*/
@Translation(type = TransConstant.USER_ID_TO_NICKNAME, mapper = "handlerId")
private Long handlerName;
private String handlerName;
/**
* 变更类型(字典)

View File

@ -84,6 +84,11 @@ public class XzdGuaranteeChangeInfoVo implements Serializable {
@ExcelProperty(value = "工程项目")
private String engineeringProject;
/**
* 合同类型
*/
private String contractType;
/**
* 经办人
*/

View File

@ -60,7 +60,7 @@ public class XzdGuaranteeChangeInfoServiceImpl extends ServiceImpl<XzdGuaranteeC
XzdGuaranteeInfoVo vo = iXzdGuaranteeInfoService.queryById(xzdGuaranteeChangeInfoVo.getContractGuaranteeId());
xzdGuaranteeChangeInfoVo.setContractGuaranteeName(vo.getContractName());
return baseMapper.selectVoById(id);
return xzdGuaranteeChangeInfoVo;
}
/**
@ -104,6 +104,9 @@ public class XzdGuaranteeChangeInfoServiceImpl extends ServiceImpl<XzdGuaranteeC
lqw.eq(bo.getContractGuaranteeId() != null, XzdGuaranteeChangeInfo::getContractGuaranteeId, bo.getContractGuaranteeId());
lqw.eq(StringUtils.isNotBlank(bo.getEngineeringProject()), XzdGuaranteeChangeInfo::getEngineeringProject, bo.getEngineeringProject());
lqw.eq(bo.getHandlerId() != null, XzdGuaranteeChangeInfo::getHandlerId, bo.getHandlerId());
lqw.eq(bo.getContractType() != null, XzdGuaranteeChangeInfo::getContractType, bo.getContractType());
lqw.eq(StringUtils.isNotBlank(bo.getChangeType()), XzdGuaranteeChangeInfo::getChangeType, bo.getChangeType());
lqw.eq(bo.getExtensionDate() != null, XzdGuaranteeChangeInfo::getExtensionDate, bo.getExtensionDate());
lqw.eq(bo.getClosedDate() != null, XzdGuaranteeChangeInfo::getClosedDate, bo.getClosedDate());

View File

@ -14,6 +14,8 @@ public enum XzdClassEnum {
JS_CG_JINDU("xzd_js_cg_jindu"), //采购合同进度结算
// 分包合同
FENBAOHETONG_INFORMATION("xzd_subcontract"),
// 分包合同变更
FENBAOHETONGBINGGENG_INFORMATION("xzd_subcontract_change"),
// 采购变更合同
CAIGOUHETONG_INFORMATION("xzd_purchase_contract_alteration"),
// 采购合同

View File

@ -27,6 +27,7 @@ import org.dromara.xzd.service.*;
import org.dromara.xzd.utilS.AreaUtil;
import org.dromara.xzd.utilS.IdWorker;
import org.springframework.beans.BeanUtils;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.cache.annotation.Cacheable;
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;
@ -36,6 +37,8 @@ import java.util.*;
import java.util.stream.Collectors;
//客户信息总imp
@Slf4j
@RequiredArgsConstructor
@Service
@ -43,31 +46,42 @@ public class XzdCorrespondentListImp implements IXzdCorrespondentList {
private final AreaUtil areaUtil;
// 客户信息service
private final IXzdCustomerinformationService xzdCustomerinformationService;
// 标签页客户信息service
private final IXzdCustomerDetailService xzdCustomerDetailService;
// 地址信息
private final IXzdAddressInfoService xzdAddressInfoService;
private final SysOssServiceImpl sysOssService;
@Autowired
private SysOssServiceImpl sysOssService;
// 联系人信息
private final IXzdContactService xzdContactService;
// 证件信息
private final IXzdCertificateInfoService xzdCertificateInfoService;
// 资质信息
private final IXzdQualificationInfoService xzdQualificationInfoService;
// 结算信息
private final IXzdSettlementInfoService xzdSettlementInfoService;
// 业务信息
private final IXzdBusinessInfoService xzdBusinessInfoService;
// 项目信息
private final IXzdProjectInfoService xzdProjectInfoService;
// 合同信息
private final IXzdContractInfoService xzdContractInfoService;
// 客户类型
private final IXzdCustomertypeInfoService xzdCustomertypeInfoService;
private final XzdCustomerinformationMapper xzdCustomerinformationMapper;

View File

@ -0,0 +1,105 @@
package org.dromara.xzd.settlement.fenbaohetongjingdu.controller;
import java.util.List;
import lombok.RequiredArgsConstructor;
import jakarta.servlet.http.HttpServletResponse;
import jakarta.validation.constraints.*;
import cn.dev33.satoken.annotation.SaCheckPermission;
import org.springframework.web.bind.annotation.*;
import org.springframework.validation.annotation.Validated;
import org.dromara.common.idempotent.annotation.RepeatSubmit;
import org.dromara.common.log.annotation.Log;
import org.dromara.common.web.core.BaseController;
import org.dromara.common.mybatis.core.page.PageQuery;
import org.dromara.common.core.domain.R;
import org.dromara.common.core.validate.AddGroup;
import org.dromara.common.core.validate.EditGroup;
import org.dromara.common.log.enums.BusinessType;
import org.dromara.common.excel.utils.ExcelUtil;
import org.dromara.xzd.settlement.fenbaohetongjingdu.domain.vo.SettlementOfSubcontractingContractVo;
import org.dromara.xzd.settlement.fenbaohetongjingdu.domain.bo.SettlementOfSubcontractingContractBo;
import org.dromara.xzd.settlement.fenbaohetongjingdu.service.ISettlementOfSubcontractingContractService;
import org.dromara.common.mybatis.core.page.TableDataInfo;
/**
* 分包合同进度结算
*
* @author Lion Li
* @date 2025-10-15
*/
@Validated
@RequiredArgsConstructor
@RestController
@RequestMapping("/fenbaohetongjingdu/ofSubcontractingContract")
public class SettlementOfSubcontractingContractController extends BaseController {
private final ISettlementOfSubcontractingContractService settlementOfSubcontractingContractService;
/**
* 查询分包合同进度结算列表
*/
@SaCheckPermission("fenbaohetongjingdu:ofSubcontractingContract:list")
@GetMapping("/list")
public TableDataInfo<SettlementOfSubcontractingContractVo> list(SettlementOfSubcontractingContractBo bo, PageQuery pageQuery) {
return settlementOfSubcontractingContractService.queryPageList(bo, pageQuery);
}
/**
* 导出分包合同进度结算列表
*/
@SaCheckPermission("fenbaohetongjingdu:ofSubcontractingContract:export")
@Log(title = "分包合同进度结算", businessType = BusinessType.EXPORT)
@PostMapping("/export")
public void export(SettlementOfSubcontractingContractBo bo, HttpServletResponse response) {
List<SettlementOfSubcontractingContractVo> list = settlementOfSubcontractingContractService.queryList(bo);
ExcelUtil.exportExcel(list, "分包合同进度结算", SettlementOfSubcontractingContractVo.class, response);
}
/**
* 获取分包合同进度结算详细信息
*
* @param id 主键
*/
@SaCheckPermission("fenbaohetongjingdu:ofSubcontractingContract:query")
@GetMapping("/{id}")
public R<SettlementOfSubcontractingContractVo> getInfo(@NotNull(message = "主键不能为空")
@PathVariable Long id) {
return R.ok(settlementOfSubcontractingContractService.queryById(id));
}
/**
* 新增分包合同进度结算
*/
@SaCheckPermission("fenbaohetongjingdu:ofSubcontractingContract:add")
@Log(title = "分包合同进度结算", businessType = BusinessType.INSERT)
@RepeatSubmit()
@PostMapping()
public R<Void> add(@Validated(AddGroup.class) @RequestBody SettlementOfSubcontractingContractBo bo) {
return toAjax(settlementOfSubcontractingContractService.insertByBo(bo));
}
/**
* 修改分包合同进度结算
*/
@SaCheckPermission("fenbaohetongjingdu:ofSubcontractingContract:edit")
@Log(title = "分包合同进度结算", businessType = BusinessType.UPDATE)
@RepeatSubmit()
@PutMapping()
public R<Void> edit(@Validated(EditGroup.class) @RequestBody SettlementOfSubcontractingContractBo bo) {
return toAjax(settlementOfSubcontractingContractService.updateByBo(bo));
}
/**
* 删除分包合同进度结算
*
* @param ids 主键串
*/
@SaCheckPermission("fenbaohetongjingdu:ofSubcontractingContract:remove")
@Log(title = "分包合同进度结算", businessType = BusinessType.DELETE)
@DeleteMapping("/{ids}")
public R<Void> remove(@NotEmpty(message = "主键不能为空")
@PathVariable Long[] ids) {
return toAjax(settlementOfSubcontractingContractService.deleteWithValidByIds(List.of(ids), true));
}
}

View File

@ -0,0 +1,168 @@
package org.dromara.xzd.settlement.fenbaohetongjingdu.domain;
import org.dromara.common.mybatis.core.domain.BaseEntity;
import com.baomidou.mybatisplus.annotation.*;
import lombok.Data;
import lombok.EqualsAndHashCode;
import java.math.BigDecimal;
import java.io.Serial;
import java.time.LocalDate;
/**
* 分包合同进度结算对象 settlement_of_subcontracting_contract
*
* @author Lion Li
* @date 2025-10-15
*/
@Data
@EqualsAndHashCode(callSuper = true)
@TableName("settlement_of_subcontracting_contract")
public class SettlementOfSubcontractingContract extends BaseEntity {
@Serial
private static final long serialVersionUID = 1L;
/**
* 主键ID
*/
@TableId(value = "id")
private Long id;
/**
* 单据编码
*/
private String documentCode;
/**
* 标题
*/
private String title;
/**
* 单据日期
*/
private LocalDate documentDate;
/**
* 合同编码
*/
private Long contractCode;
/**
* 合同名称
*/
private String contractName;
/**
* 统计周期
*/
private String statisticPeriod;
/**
* 计量开始
*/
private LocalDate measurementStart;
/**
* 项目
*/
private Long project;
/**
* 审批金额
*/
private BigDecimal approvalAmount;
/**
* 计量结束
*/
private LocalDate measurementEnd;
/**
* 结算单位 客户信息
*/
private Long settlementUnit;
/**
* 合同金额
*/
private BigDecimal contractAmount;
/**
* 累计结算金额(含本期)
*/
private BigDecimal cumulativeSettlementAmountIncludeCurrent;
/**
* 累计结算金额(不含本期)
*/
private BigDecimal cumulativeSettlementNotAmountIncludeCurrent;
/**
* 本次结算比例
*/
private BigDecimal currentSettlementRatio;
/**
* 截止本期结算比例
*/
private BigDecimal settlementRatioUntilCurrent;
/**
* 已结算比例(不含本期)
*/
private BigDecimal settlementRatioExcludeCurrent;
/**
* 备注
*/
private String remarks;
/**
* 合同含税金额
*/
private BigDecimal contractTaxInclusiveAmount;
/**
* 合同不含税金额
*/
private BigDecimal contractTaxExclusiveAmount;
/**
* 累计结算金额
*/
private BigDecimal cumulativeSettlementAmount;
/**
* 本期扣款金额
*/
private BigDecimal currentDeductionAmount;
/**
* 本期奖励金额
*/
private BigDecimal currentRewardAmount;
/**
* 实时刷新 1选择 0未选
*/
private String realtimeRefresh;
/**
* 文件ID
*/
private String fileId;
/**
* 备注
*/
private String remark;
/**
* 审核状态
*/
private String auditStatus;
}

View File

@ -0,0 +1,170 @@
package org.dromara.xzd.settlement.fenbaohetongjingdu.domain.bo;
import org.dromara.xzd.settlement.fenbaohetongjingdu.domain.SettlementOfSubcontractingContract;
import org.dromara.common.mybatis.core.domain.BaseEntity;
import org.dromara.common.core.validate.AddGroup;
import org.dromara.common.core.validate.EditGroup;
import io.github.linpeilie.annotations.AutoMapper;
import lombok.Data;
import lombok.EqualsAndHashCode;
import jakarta.validation.constraints.*;
import java.math.BigDecimal;
import java.time.LocalDate;
/**
* 分包合同进度结算业务对象 settlement_of_subcontracting_contract
*
* @author Lion Li
* @date 2025-10-15
*/
@Data
@EqualsAndHashCode(callSuper = true)
@AutoMapper(target = SettlementOfSubcontractingContract.class, reverseConvertGenerate = false)
public class SettlementOfSubcontractingContractBo extends BaseEntity {
/**
* 主键ID
*/
private Long id;
/**
* 单据编码
*/
private String documentCode;
/**
* 标题
*/
private String title;
/**
* 单据日期
*/
private LocalDate documentDate;
/**
* 合同编码
*/
private Long contractCode;
/**
* 合同名称
*/
private String contractName;
/**
* 统计周期
*/
private String statisticPeriod;
/**
* 计量开始
*/
private LocalDate measurementStart;
/**
* 项目
*/
private Long project;
/**
* 审批金额
*/
private BigDecimal approvalAmount;
/**
* 计量结束
*/
private LocalDate measurementEnd;
/**
* 结算单位 客户信息
*/
private Long settlementUnit;
/**
* 合同金额
*/
private BigDecimal contractAmount;
/**
* 累计结算金额(含本期)
*/
private BigDecimal cumulativeSettlementAmountIncludeCurrent;
/**
* 累计结算金额(不含本期)
*/
private BigDecimal cumulativeSettlementNotAmountIncludeCurrent;
/**
* 本次结算比例
*/
private BigDecimal currentSettlementRatio;
/**
* 截止本期结算比例
*/
private BigDecimal settlementRatioUntilCurrent;
/**
* 已结算比例(不含本期)
*/
private BigDecimal settlementRatioExcludeCurrent;
/**
* 备注
*/
private String remarks;
/**
* 合同含税金额
*/
private BigDecimal contractTaxInclusiveAmount;
/**
* 合同不含税金额
*/
private BigDecimal contractTaxExclusiveAmount;
/**
* 累计结算金额
*/
private BigDecimal cumulativeSettlementAmount;
/**
* 本期扣款金额
*/
private BigDecimal currentDeductionAmount;
/**
* 本期奖励金额
*/
private BigDecimal currentRewardAmount;
/**
* 实时刷新 1选择 0未选
*/
private String realtimeRefresh;
/**
* 文件ID
*/
private String fileId;
/**
* 备注
*/
private String remark;
/**
* 审核状态
*/
private String auditStatus;
private LocalDate startDate;
private LocalDate endDate;
}

View File

@ -0,0 +1,221 @@
package org.dromara.xzd.settlement.fenbaohetongjingdu.domain.vo;
import java.math.BigDecimal;
import org.dromara.xzd.settlement.fenbaohetongjingdu.domain.SettlementOfSubcontractingContract;
import com.alibaba.excel.annotation.ExcelIgnoreUnannotated;
import com.alibaba.excel.annotation.ExcelProperty;
import org.dromara.common.excel.annotation.ExcelDictFormat;
import org.dromara.common.excel.convert.ExcelDictConvert;
import io.github.linpeilie.annotations.AutoMapper;
import lombok.Data;
import java.io.Serial;
import java.io.Serializable;
import java.time.LocalDate;
import java.util.Date;
/**
* 分包合同进度结算视图对象 settlement_of_subcontracting_contract
*
* @author Lion Li
* @date 2025-10-15
*/
@Data
@ExcelIgnoreUnannotated
@AutoMapper(target = SettlementOfSubcontractingContract.class)
public class SettlementOfSubcontractingContractVo implements Serializable {
@Serial
private static final long serialVersionUID = 1L;
/**
* 主键ID
*/
@ExcelProperty(value = "主键ID")
private Long id;
/**
* 单据编码
*/
@ExcelProperty(value = "单据编码")
private String documentCode;
/**
* 标题
*/
@ExcelProperty(value = "标题")
private String title;
/**
* 单据日期
*/
@ExcelProperty(value = "单据日期")
private LocalDate documentDate;
/**
* 合同编码
*/
@ExcelProperty(value = "合同编码")
private Long contractCode;
/**
* 合同编码名称
*/
@ExcelProperty(value = "合同编码名称")
private String contractCodeName;
/**
* 合同名称
*/
@ExcelProperty(value = "合同名称")
private String contractName;
/**
* 统计周期
*/
@ExcelProperty(value = "统计周期")
private String statisticPeriod;
/**
* 计量开始
*/
@ExcelProperty(value = "计量开始")
private LocalDate measurementStart;
/**
* 项目
*/
@ExcelProperty(value = "项目")
private Long project;
/**
* 项目名称
*/
@ExcelProperty(value = "项目名称")
private String projectName;
/**
* 审批金额
*/
@ExcelProperty(value = "审批金额")
private BigDecimal approvalAmount;
/**
* 计量结束
*/
@ExcelProperty(value = "计量结束")
private LocalDate measurementEnd;
/**
* 结算单位 客户信息
*/
@ExcelProperty(value = "结算单位 客户信息")
private Long settlementUnit;
/**
* 结算单位 客户信息名称
*/
@ExcelProperty(value = "结算单位 客户信息名称")
private String settlementUnitName;
/**
* 合同金额
*/
@ExcelProperty(value = "合同金额")
private BigDecimal contractAmount;
/**
* 累计结算金额(含本期)
*/
@ExcelProperty(value = "累计结算金额(含本期)")
private BigDecimal cumulativeSettlementAmountIncludeCurrent;
/**
* 累计结算金额(不含本期)
*/
@ExcelProperty(value = "累计结算金额(不含本期)")
private BigDecimal cumulativeSettlementNotAmountIncludeCurrent;
/**
* 本次结算比例
*/
@ExcelProperty(value = "本次结算比例")
private BigDecimal currentSettlementRatio;
/**
* 截止本期结算比例
*/
@ExcelProperty(value = "截止本期结算比例")
private BigDecimal settlementRatioUntilCurrent;
/**
* 已结算比例(不含本期)
*/
@ExcelProperty(value = "已结算比例(不含本期)")
private BigDecimal settlementRatioExcludeCurrent;
/**
* 备注
*/
@ExcelProperty(value = "备注")
private String remarks;
/**
* 合同含税金额
*/
@ExcelProperty(value = "合同含税金额")
private BigDecimal contractTaxInclusiveAmount;
/**
* 合同不含税金额
*/
@ExcelProperty(value = "合同不含税金额")
private BigDecimal contractTaxExclusiveAmount;
/**
* 累计结算金额
*/
@ExcelProperty(value = "累计结算金额")
private BigDecimal cumulativeSettlementAmount;
/**
* 本期扣款金额
*/
@ExcelProperty(value = "本期扣款金额")
private BigDecimal currentDeductionAmount;
/**
* 本期奖励金额
*/
@ExcelProperty(value = "本期奖励金额")
private BigDecimal currentRewardAmount;
/**
* 实时刷新 1选择 0未选
*/
@ExcelProperty(value = "实时刷新 1选择 0未选")
private String realtimeRefresh;
/**
* 文件ID
*/
@ExcelProperty(value = "文件ID")
private String fileId;
/**
* 备注
*/
@ExcelProperty(value = "备注")
private String remark;
/**
* 审核状态
*/
@ExcelProperty(value = "审核状态")
private String auditStatus;
}

View File

@ -0,0 +1,15 @@
package org.dromara.xzd.settlement.fenbaohetongjingdu.mapper;
import org.dromara.xzd.settlement.fenbaohetongjingdu.domain.SettlementOfSubcontractingContract;
import org.dromara.xzd.settlement.fenbaohetongjingdu.domain.vo.SettlementOfSubcontractingContractVo;
import org.dromara.common.mybatis.core.mapper.BaseMapperPlus;
/**
* 分包合同进度结算Mapper接口
*
* @author Lion Li
* @date 2025-10-15
*/
public interface SettlementOfSubcontractingContractMapper extends BaseMapperPlus<SettlementOfSubcontractingContract, SettlementOfSubcontractingContractVo> {
}

View File

@ -0,0 +1,70 @@
package org.dromara.xzd.settlement.fenbaohetongjingdu.service;
import org.dromara.xzd.settlement.fenbaohetongjingdu.domain.vo.SettlementOfSubcontractingContractVo;
import org.dromara.xzd.settlement.fenbaohetongjingdu.domain.bo.SettlementOfSubcontractingContractBo;
import org.dromara.xzd.settlement.fenbaohetongjingdu.domain.SettlementOfSubcontractingContract;
import org.dromara.common.mybatis.core.page.TableDataInfo;
import org.dromara.common.mybatis.core.page.PageQuery;
import com.baomidou.mybatisplus.extension.service.IService;
import java.util.Collection;
import java.util.List;
/**
* 分包合同进度结算Service接口
*
* @author Lion Li
* @date 2025-10-15
*/
public interface ISettlementOfSubcontractingContractService extends IService<SettlementOfSubcontractingContract>{
/**
* 查询分包合同进度结算
*
* @param id 主键
* @return 分包合同进度结算
*/
SettlementOfSubcontractingContractVo queryById(Long id);
/**
* 分页查询分包合同进度结算列表
*
* @param bo 查询条件
* @param pageQuery 分页参数
* @return 分包合同进度结算分页列表
*/
TableDataInfo<SettlementOfSubcontractingContractVo> queryPageList(SettlementOfSubcontractingContractBo bo, PageQuery pageQuery);
/**
* 查询符合条件的分包合同进度结算列表
*
* @param bo 查询条件
* @return 分包合同进度结算列表
*/
List<SettlementOfSubcontractingContractVo> queryList(SettlementOfSubcontractingContractBo bo);
/**
* 新增分包合同进度结算
*
* @param bo 分包合同进度结算
* @return 是否新增成功
*/
Boolean insertByBo(SettlementOfSubcontractingContractBo bo);
/**
* 修改分包合同进度结算
*
* @param bo 分包合同进度结算
* @return 是否修改成功
*/
Boolean updateByBo(SettlementOfSubcontractingContractBo bo);
/**
* 校验并批量删除分包合同进度结算信息
*
* @param ids 待删除的主键集合
* @param isValid 是否进行有效性校验
* @return 是否删除成功
*/
Boolean deleteWithValidByIds(Collection<Long> ids, Boolean isValid);
}

View File

@ -0,0 +1,228 @@
package org.dromara.xzd.settlement.fenbaohetongjingdu.service.impl;
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
import org.dromara.common.core.domain.R;
import org.dromara.common.core.utils.MapstructUtils;
import org.dromara.common.core.utils.StringUtils;
import org.dromara.common.mybatis.core.page.TableDataInfo;
import org.dromara.common.mybatis.core.page.PageQuery;
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.system.service.impl.SysOssServiceImpl;
import org.dromara.xzd.contractManagement.caigoucontractTermination.domain.XzdPurchaseContractSuspend;
import org.dromara.xzd.contractManagement.fenbaohetongxinxi.domain.vo.XzdSubcontractVo;
import org.dromara.xzd.domain.*;
import org.dromara.xzd.domain.dto.QuerCorrespondentDto;
import org.dromara.xzd.service.IXzdCorrespondentList;
import org.dromara.xzd.service.impl.XzdProjectServiceImpl;
import org.dromara.xzd.utilS.AreaUtil;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import org.dromara.xzd.settlement.fenbaohetongjingdu.domain.bo.SettlementOfSubcontractingContractBo;
import org.dromara.xzd.settlement.fenbaohetongjingdu.domain.vo.SettlementOfSubcontractingContractVo;
import org.dromara.xzd.settlement.fenbaohetongjingdu.domain.SettlementOfSubcontractingContract;
import org.dromara.xzd.settlement.fenbaohetongjingdu.mapper.SettlementOfSubcontractingContractMapper;
import org.dromara.xzd.settlement.fenbaohetongjingdu.service.ISettlementOfSubcontractingContractService;
import java.time.LocalDate;
import java.util.Arrays;
import java.util.List;
import java.util.Map;
import java.util.Collection;
/**
* 分包合同进度结算Service业务层处理
*
* @author Lion Li
* @date 2025-10-15
*/
@RequiredArgsConstructor
@Service
public class SettlementOfSubcontractingContractServiceImpl extends ServiceImpl<SettlementOfSubcontractingContractMapper, SettlementOfSubcontractingContract> implements ISettlementOfSubcontractingContractService {
private final SettlementOfSubcontractingContractMapper baseMapper;
private final AreaUtil areaUtil;
@Autowired
private IXzdCorrespondentList iXzdCorrespondentList;
@Autowired
private XzdProjectServiceImpl xzdProjectService;
@Autowired
private SysOssServiceImpl sysOssService;
/**
* 查询分包合同进度结算
*
* @param id 主键
* @return 分包合同进度结算
*/
@Override
public SettlementOfSubcontractingContractVo queryById(Long id){
SettlementOfSubcontractingContractVo vo = baseMapper.selectVoById(id);
List<SettlementOfSubcontractingContractVo> res = List.of(vo);
setValue(res);
return res.getFirst();
}
/**
* 分页查询分包合同进度结算列表
*
* @param bo 查询条件
* @param pageQuery 分页参数
* @return 分包合同进度结算分页列表
*/
@Override
public TableDataInfo<SettlementOfSubcontractingContractVo> queryPageList(SettlementOfSubcontractingContractBo bo, PageQuery pageQuery) {
LambdaQueryWrapper<SettlementOfSubcontractingContract> lqw = buildQueryWrapper(bo);
Page<SettlementOfSubcontractingContractVo> result = baseMapper.selectVoPage(pageQuery.build(), lqw);
setValue(result.getRecords());
return TableDataInfo.build(result);
}
// 填充数据
private void setValue(List<SettlementOfSubcontractingContractVo> records) {
for (SettlementOfSubcontractingContractVo item : records) {
//项目名称
if (item.getProject() != null){
String projectName = xzdProjectService.queryNameById(item.getProject());
if (projectName != null){
item.setProjectName(projectName);
}
}
//甲方单位(客户信息列表)
R<QuerCorrespondentDto> byid = iXzdCorrespondentList.getCustomerByid(item.getSettlementUnit());
if (byid!=null){
if (byid.getData().getXzdCustomerinformation() != null){
item.setSettlementUnitName(byid.getData().getXzdCustomerinformation().getUnitName());
}
}
}
}
/**
* 查询符合条件的分包合同进度结算列表
*
* @param bo 查询条件
* @return 分包合同进度结算列表
*/
@Override
public List<SettlementOfSubcontractingContractVo> queryList(SettlementOfSubcontractingContractBo bo) {
LambdaQueryWrapper<SettlementOfSubcontractingContract> lqw = buildQueryWrapper(bo);
return baseMapper.selectVoList(lqw);
}
private LambdaQueryWrapper<SettlementOfSubcontractingContract> buildQueryWrapper(SettlementOfSubcontractingContractBo bo) {
Map<String, Object> params = bo.getParams();
LambdaQueryWrapper<SettlementOfSubcontractingContract> lqw = Wrappers.lambdaQuery();
lqw.orderByDesc(SettlementOfSubcontractingContract::getId);
lqw.eq(StringUtils.isNotBlank(bo.getDocumentCode()), SettlementOfSubcontractingContract::getDocumentCode, bo.getDocumentCode());
lqw.eq(StringUtils.isNotBlank(bo.getTitle()), SettlementOfSubcontractingContract::getTitle, bo.getTitle());
lqw.eq(bo.getDocumentDate() != null, SettlementOfSubcontractingContract::getDocumentDate, bo.getDocumentDate());
lqw.ge(bo.getStartDate() != null, SettlementOfSubcontractingContract::getDocumentDate, bo.getStartDate());
lqw.le(bo.getEndDate() != null, SettlementOfSubcontractingContract::getDocumentDate, bo.getEndDate());
lqw.eq(bo.getContractCode() != null, SettlementOfSubcontractingContract::getContractCode, bo.getContractCode());
lqw.like(StringUtils.isNotBlank(bo.getContractName()), SettlementOfSubcontractingContract::getContractName, bo.getContractName());
lqw.eq(StringUtils.isNotBlank(bo.getStatisticPeriod()), SettlementOfSubcontractingContract::getStatisticPeriod, bo.getStatisticPeriod());
lqw.eq(bo.getMeasurementStart() != null, SettlementOfSubcontractingContract::getMeasurementStart, bo.getMeasurementStart());
lqw.eq(bo.getProject() != null, SettlementOfSubcontractingContract::getProject, bo.getProject());
lqw.eq(bo.getApprovalAmount() != null, SettlementOfSubcontractingContract::getApprovalAmount, bo.getApprovalAmount());
lqw.eq(bo.getMeasurementEnd() != null, SettlementOfSubcontractingContract::getMeasurementEnd, bo.getMeasurementEnd());
lqw.eq(bo.getSettlementUnit() != null, SettlementOfSubcontractingContract::getSettlementUnit, bo.getSettlementUnit());
lqw.eq(bo.getContractAmount() != null, SettlementOfSubcontractingContract::getContractAmount, bo.getContractAmount());
lqw.eq(bo.getCumulativeSettlementAmountIncludeCurrent() != null, SettlementOfSubcontractingContract::getCumulativeSettlementAmountIncludeCurrent, bo.getCumulativeSettlementAmountIncludeCurrent());
lqw.eq(bo.getCumulativeSettlementNotAmountIncludeCurrent() != null, SettlementOfSubcontractingContract::getCumulativeSettlementNotAmountIncludeCurrent, bo.getCumulativeSettlementNotAmountIncludeCurrent());
lqw.eq(bo.getCurrentSettlementRatio() != null, SettlementOfSubcontractingContract::getCurrentSettlementRatio, bo.getCurrentSettlementRatio());
lqw.eq(bo.getSettlementRatioUntilCurrent() != null, SettlementOfSubcontractingContract::getSettlementRatioUntilCurrent, bo.getSettlementRatioUntilCurrent());
lqw.eq(bo.getSettlementRatioExcludeCurrent() != null, SettlementOfSubcontractingContract::getSettlementRatioExcludeCurrent, bo.getSettlementRatioExcludeCurrent());
lqw.eq(StringUtils.isNotBlank(bo.getRemarks()), SettlementOfSubcontractingContract::getRemarks, bo.getRemarks());
lqw.eq(bo.getContractTaxInclusiveAmount() != null, SettlementOfSubcontractingContract::getContractTaxInclusiveAmount, bo.getContractTaxInclusiveAmount());
lqw.eq(bo.getContractTaxExclusiveAmount() != null, SettlementOfSubcontractingContract::getContractTaxExclusiveAmount, bo.getContractTaxExclusiveAmount());
lqw.eq(bo.getCumulativeSettlementAmount() != null, SettlementOfSubcontractingContract::getCumulativeSettlementAmount, bo.getCumulativeSettlementAmount());
lqw.eq(bo.getCurrentDeductionAmount() != null, SettlementOfSubcontractingContract::getCurrentDeductionAmount, bo.getCurrentDeductionAmount());
lqw.eq(bo.getCurrentRewardAmount() != null, SettlementOfSubcontractingContract::getCurrentRewardAmount, bo.getCurrentRewardAmount());
lqw.eq(StringUtils.isNotBlank(bo.getRealtimeRefresh()), SettlementOfSubcontractingContract::getRealtimeRefresh, bo.getRealtimeRefresh());
lqw.eq(StringUtils.isNotBlank(bo.getFileId()), SettlementOfSubcontractingContract::getFileId, bo.getFileId());
lqw.eq(StringUtils.isNotBlank(bo.getAuditStatus()), SettlementOfSubcontractingContract::getAuditStatus, bo.getAuditStatus());
return lqw;
}
/**
* 新增分包合同进度结算
*
* @param bo 分包合同进度结算
* @return 是否新增成功
*/
@Override
public Boolean insertByBo(SettlementOfSubcontractingContractBo bo) {
SettlementOfSubcontractingContract add = MapstructUtils.convert(bo, SettlementOfSubcontractingContract.class);
validEntityBeforeSave(add);
Long l = baseMapper.selectCount(new LambdaQueryWrapper<SettlementOfSubcontractingContract>().gt(SettlementOfSubcontractingContract::getCreateTime, LocalDate.now()));
String s = areaUtil.generateDateBasedNumber();
add.setDocumentCode(s+"-"+(l+1));
boolean flag = baseMapper.insert(add) > 0;
if (flag) {
bo.setId(add.getId());
}
return flag;
}
/**
* 修改分包合同进度结算
*
* @param bo 分包合同进度结算
* @return 是否修改成功
*/
@Override
public Boolean updateByBo(SettlementOfSubcontractingContractBo bo) {
SettlementOfSubcontractingContract update = MapstructUtils.convert(bo, SettlementOfSubcontractingContract.class);
validEntityBeforeSave(update);
return baseMapper.updateById(update) > 0;
}
/**
* 保存前的数据校验
*/
private void validEntityBeforeSave(SettlementOfSubcontractingContract entity){
//TODO 做一些数据校验,如唯一约束
}
/**
* 校验并批量删除分包合同进度结算信息
*
* @param ids 待删除的主键集合
* @param isValid 是否进行有效性校验
* @return 是否删除成功
*/
@Override
public Boolean deleteWithValidByIds(Collection<Long> ids, Boolean isValid) {
if(isValid){
//TODO 做一些业务上的校验,判断是否需要校验
}
for (Long id : ids) {
SettlementOfSubcontractingContractVo vo = baseMapper.selectVoById(id);
if (vo != null){
//删除附件
if (vo.getFileId()!= null && !vo.getFileId().isEmpty()){
List<Long> deleteIds = Arrays.stream(vo.getFileId().split(",")).map(Long::valueOf).toList();
if (!deleteIds.isEmpty()) {
sysOssService.deleteWithValidByIds(deleteIds, false);
}
}
}
}
return baseMapper.deleteByIds(ids) > 0;
}
}

View File

@ -0,0 +1,121 @@
package org.dromara.xzd.settlement.fenbaohetongjungong.controller;
import java.util.List;
import lombok.RequiredArgsConstructor;
import jakarta.servlet.http.HttpServletResponse;
import jakarta.validation.constraints.*;
import cn.dev33.satoken.annotation.SaCheckPermission;
import org.dromara.xzd.domain.vo.XzdSettlementRulesVo;
import org.springframework.web.bind.annotation.*;
import org.springframework.validation.annotation.Validated;
import org.dromara.common.idempotent.annotation.RepeatSubmit;
import org.dromara.common.log.annotation.Log;
import org.dromara.common.web.core.BaseController;
import org.dromara.common.mybatis.core.page.PageQuery;
import org.dromara.common.core.domain.R;
import org.dromara.common.core.validate.AddGroup;
import org.dromara.common.core.validate.EditGroup;
import org.dromara.common.log.enums.BusinessType;
import org.dromara.common.excel.utils.ExcelUtil;
import org.dromara.xzd.settlement.fenbaohetongjungong.domain.vo.SettlementOfSubcontractingCompletionVo;
import org.dromara.xzd.settlement.fenbaohetongjungong.domain.bo.SettlementOfSubcontractingCompletionBo;
import org.dromara.xzd.settlement.fenbaohetongjungong.service.ISettlementOfSubcontractingCompletionService;
import org.dromara.common.mybatis.core.page.TableDataInfo;
/**
* 分包合同竣工结算
*
* @author Lion Li
* @date 2025-10-15
*/
@Validated
@RequiredArgsConstructor
@RestController
@RequestMapping("/fenbaohetongjungong/ofSubcontractingCompletion")
public class SettlementOfSubcontractingCompletionController extends BaseController {
private final ISettlementOfSubcontractingCompletionService settlementOfSubcontractingCompletionService;
/**
* 查询分包合同竣工结算列表
*/
@SaCheckPermission("fenbaohetongjungong:ofSubcontractingCompletion:list")
@GetMapping("/list")
public TableDataInfo<SettlementOfSubcontractingCompletionVo> list(SettlementOfSubcontractingCompletionBo bo, PageQuery pageQuery) {
return settlementOfSubcontractingCompletionService.queryPageList(bo, pageQuery);
}
/**
* 导出分包合同竣工结算列表
*/
@SaCheckPermission("fenbaohetongjungong:ofSubcontractingCompletion:export")
@Log(title = "分包合同竣工结算", businessType = BusinessType.EXPORT)
@PostMapping("/export")
public void export(SettlementOfSubcontractingCompletionBo bo, HttpServletResponse response) {
List<SettlementOfSubcontractingCompletionVo> list = settlementOfSubcontractingCompletionService.queryList(bo);
ExcelUtil.exportExcel(list, "分包合同竣工结算", SettlementOfSubcontractingCompletionVo.class, response);
}
/**
* 获取分包合同竣工结算详细信息
*
* @param id 主键
*/
@SaCheckPermission("fenbaohetongjungong:ofSubcontractingCompletion:query")
@GetMapping("/{id}")
public R<SettlementOfSubcontractingCompletionVo> getInfo(@NotNull(message = "主键不能为空")
@PathVariable Long id) {
return R.ok(settlementOfSubcontractingCompletionService.queryById(id));
}
/**
* 新增分包合同竣工结算
*/
@SaCheckPermission("fenbaohetongjungong:ofSubcontractingCompletion:add")
@Log(title = "分包合同竣工结算", businessType = BusinessType.INSERT)
@RepeatSubmit()
@PostMapping()
public R<Void> add(@Validated(AddGroup.class) @RequestBody SettlementOfSubcontractingCompletionBo bo) {
return toAjax(settlementOfSubcontractingCompletionService.insertByBo(bo));
}
/**
* 修改分包合同竣工结算
*/
@SaCheckPermission("fenbaohetongjungong:ofSubcontractingCompletion:edit")
@Log(title = "分包合同竣工结算", businessType = BusinessType.UPDATE)
@RepeatSubmit()
@PutMapping()
public R<Void> edit(@Validated(EditGroup.class) @RequestBody SettlementOfSubcontractingCompletionBo bo) {
return toAjax(settlementOfSubcontractingCompletionService.updateByBo(bo));
}
/**
* 删除分包合同竣工结算
*
* @param ids 主键串
*/
@SaCheckPermission("fenbaohetongjungong:ofSubcontractingCompletion:remove")
@Log(title = "分包合同竣工结算", businessType = BusinessType.DELETE)
@DeleteMapping("/{ids}")
public R<Void> remove(@NotEmpty(message = "主键不能为空")
@PathVariable Long[] ids) {
return toAjax(settlementOfSubcontractingCompletionService.deleteWithValidByIds(List.of(ids), true));
}
/**
* 根据合同编号获取支付条款
*
* @param id 合同编号
*/
@SaCheckPermission("fenbaohetongjungong:ofSubcontractingCompletion:remove")
@Log(title = "根据合同编号获取支付条款", businessType = BusinessType.DELETE)
@DeleteMapping("/contract/{id}")
public R<List<XzdSettlementRulesVo>> contractPaymentTerm(@NotEmpty(message = "主键不能为空")
@PathVariable Long id) {
return R.ok(settlementOfSubcontractingCompletionService.contractPaymentTerm(id, true));
}
}

View File

@ -0,0 +1,173 @@
package org.dromara.xzd.settlement.fenbaohetongjungong.domain;
import org.dromara.common.mybatis.core.domain.BaseEntity;
import com.baomidou.mybatisplus.annotation.*;
import lombok.Data;
import lombok.EqualsAndHashCode;
import java.math.BigDecimal;
import java.io.Serial;
import java.time.LocalDate;
/**
* 分包合同竣工结算对象 settlement_of_subcontracting_completion
*
* @author Lion Li
* @date 2025-10-15
*/
@Data
@EqualsAndHashCode(callSuper = true)
@TableName("settlement_of_subcontracting_completion")
public class SettlementOfSubcontractingCompletion extends BaseEntity {
@Serial
private static final long serialVersionUID = 1L;
/**
* 主键ID
*/
@TableId(value = "id")
private Long id;
/**
* 单据编号
*/
private String documentCode;
/**
* 标题
*/
private String title;
/**
* 单据日期
*/
private LocalDate documentDate;
/**
* 合同编号
*/
private Long contractCode;
/**
* 合同名称
*/
private String contractName;
/**
* 审定总价
*/
private Long approvedTotalPrice;
/**
* 审定日期
*/
private LocalDate approvedDate;
/**
* 工程项目
*/
private String engineeringProject;
/**
* 经营模式
*/
private String businessModel;
/**
* 甲方单位
*/
private Long partyAUnit;
/**
* 乙方单位
*/
private Long partyBUnit;
/**
* 累计已结金额
*/
private BigDecimal cumulativeSettledAmount;
/**
* 累计已付金额
*/
private BigDecimal cumulativePaidAmount;
/**
* 已付比例
*/
private BigDecimal paidRatio;
/**
* 支付条款
*/
private Long paymentTerms;
/**
* 本期应付金额
*/
private BigDecimal currentPayableAmount;
/**
* 应付日期
*/
private LocalDate payableDate;
/**
* 竣工日期
*/
private LocalDate completionDate;
/**
* 警示
*/
private String warning;
/**
* 备注
*/
private String remarks;
/**
* 本期决算总额
*/
private BigDecimal currentFinalSettlementAmount;
/**
* 业主单位 客户
*/
private Long ownerUnit;
/**
* 监理单位 客户
*/
private Long supervisionUnit;
/**
* 施工单位 客户
*/
private Long constructionUnit;
/**
* 审核单位 客户
*/
private Long auditUnit;
/**
* 文件ID
*/
private String fileId;
/**
* 备注
*/
private String remark;
/**
* 审核状态
*/
private String auditStatus;
}

View File

@ -0,0 +1,179 @@
package org.dromara.xzd.settlement.fenbaohetongjungong.domain.bo;
import org.dromara.xzd.settlement.fenbaohetongjungong.domain.SettlementOfSubcontractingCompletion;
import org.dromara.common.mybatis.core.domain.BaseEntity;
import org.dromara.common.core.validate.AddGroup;
import org.dromara.common.core.validate.EditGroup;
import io.github.linpeilie.annotations.AutoMapper;
import lombok.Data;
import lombok.EqualsAndHashCode;
import jakarta.validation.constraints.*;
import java.math.BigDecimal;
import java.time.LocalDate;
/**
* 分包合同竣工结算业务对象 settlement_of_subcontracting_completion
*
* @author Lion Li
* @date 2025-10-15
*/
@Data
@EqualsAndHashCode(callSuper = true)
@AutoMapper(target = SettlementOfSubcontractingCompletion.class, reverseConvertGenerate = false)
public class SettlementOfSubcontractingCompletionBo extends BaseEntity {
/**
* 主键ID
*/
@NotNull(message = "主键ID不能为空", groups = { EditGroup.class })
private Long id;
/**
* 单据编号
*/
@NotBlank(message = "单据编号不能为空", groups = { AddGroup.class, EditGroup.class })
private String documentCode;
/**
* 标题
*/
@NotBlank(message = "标题不能为空", groups = { AddGroup.class, EditGroup.class })
private String title;
/**
* 单据日期
*/
@NotNull(message = "单据日期不能为空", groups = { AddGroup.class, EditGroup.class })
private LocalDate documentDate;
/**
* 合同编号
*/
private Long contractCode;
/**
* 合同名称
*/
private String contractName;
/**
* 审定总价
*/
private Long approvedTotalPrice;
/**
* 审定日期
*/
private LocalDate approvedDate;
/**
* 工程项目
*/
private String engineeringProject;
/**
* 经营模式
*/
private String businessModel;
/**
* 甲方单位
*/
private Long partyAUnit;
/**
* 乙方单位
*/
private Long partyBUnit;
/**
* 累计已结金额
*/
private BigDecimal cumulativeSettledAmount;
/**
* 累计已付金额
*/
private BigDecimal cumulativePaidAmount;
/**
* 已付比例
*/
private BigDecimal paidRatio;
/**
* 支付条款
*/
private Long paymentTerms;
/**
* 本期应付金额
*/
private BigDecimal currentPayableAmount;
/**
* 应付日期
*/
private LocalDate payableDate;
/**
* 竣工日期
*/
private LocalDate completionDate;
/**
* 警示
*/
private String warning;
/**
* 备注
*/
private String remarks;
/**
* 本期决算总额
*/
private BigDecimal currentFinalSettlementAmount;
/**
* 业主单位 客户
*/
private Long ownerUnit;
/**
* 监理单位 客户
*/
private Long supervisionUnit;
/**
* 施工单位 客户
*/
private Long constructionUnit;
/**
* 审核单位 客户
*/
private Long auditUnit;
/**
* 文件ID
*/
private String fileId;
/**
* 备注
*/
private String remark;
/**
* 审核状态
*/
private String auditStatus;
private LocalDate startTime;
private LocalDate endTime;
}

View File

@ -0,0 +1,254 @@
package org.dromara.xzd.settlement.fenbaohetongjungong.domain.vo;
import java.math.BigDecimal;
import org.dromara.xzd.settlement.fenbaohetongjungong.domain.SettlementOfSubcontractingCompletion;
import com.alibaba.excel.annotation.ExcelIgnoreUnannotated;
import com.alibaba.excel.annotation.ExcelProperty;
import org.dromara.common.excel.annotation.ExcelDictFormat;
import org.dromara.common.excel.convert.ExcelDictConvert;
import io.github.linpeilie.annotations.AutoMapper;
import lombok.Data;
import java.io.Serial;
import java.io.Serializable;
import java.time.LocalDate;
import java.util.Date;
/**
* 分包合同竣工结算视图对象 settlement_of_subcontracting_completion
*
* @author Lion Li
* @date 2025-10-15
*/
@Data
@ExcelIgnoreUnannotated
@AutoMapper(target = SettlementOfSubcontractingCompletion.class)
public class SettlementOfSubcontractingCompletionVo implements Serializable {
@Serial
private static final long serialVersionUID = 1L;
/**
* 主键ID
*/
@ExcelProperty(value = "主键ID")
private Long id;
/**
* 单据编号
*/
@ExcelProperty(value = "单据编号")
private String documentCode;
/**
* 标题
*/
@ExcelProperty(value = "标题")
private String title;
/**
* 单据日期
*/
@ExcelProperty(value = "单据日期")
private LocalDate documentDate;
/**
* 合同编号
*/
@ExcelProperty(value = "合同编号")
private Long contractCode;
/**
* 合同名称
*/
@ExcelProperty(value = "合同名称")
private String contractName;
/**
* 审定总价
*/
@ExcelProperty(value = "审定总价")
private Long approvedTotalPrice;
/**
* 审定日期
*/
@ExcelProperty(value = "审定日期")
private LocalDate approvedDate;
/**
* 工程项目
*/
@ExcelProperty(value = "工程项目")
private String engineeringProject;
/**
* 经营模式
*/
@ExcelProperty(value = "经营模式")
private String businessModel;
/**
* 甲方单位
*/
@ExcelProperty(value = "甲方单位")
private Long partyAUnit;
/**
* 甲方单位名称
*/
@ExcelProperty(value = "甲方单位名称")
private String partyAUnitName;
/**
* 乙方单位
*/
@ExcelProperty(value = "乙方单位")
private Long partyBUnit;
/**
* 乙方单位名称
*/
@ExcelProperty(value = "乙方单位名称")
private String partyBUnitName;
/**
* 累计已结金额
*/
@ExcelProperty(value = "累计已结金额")
private BigDecimal cumulativeSettledAmount;
/**
* 累计已付金额
*/
@ExcelProperty(value = "累计已付金额")
private BigDecimal cumulativePaidAmount;
/**
* 已付比例
*/
@ExcelProperty(value = "已付比例")
private BigDecimal paidRatio;
/**
* 支付条款
*/
@ExcelProperty(value = "支付条款")
private Long paymentTerms;
/**
* 支付条款回显信息
*/
@ExcelProperty(value = "支付条款回显信息")
private String paymentTermsName;
/**
* 本期应付金额
*/
@ExcelProperty(value = "本期应付金额")
private BigDecimal currentPayableAmount;
/**
* 应付日期
*/
@ExcelProperty(value = "应付日期")
private LocalDate payableDate;
/**
* 竣工日期
*/
@ExcelProperty(value = "竣工日期")
private LocalDate completionDate;
/**
* 警示
*/
@ExcelProperty(value = "警示")
private String warning;
/**
* 备注
*/
@ExcelProperty(value = "备注")
private String remarks;
/**
* 本期决算总额
*/
@ExcelProperty(value = "本期决算总额")
private BigDecimal currentFinalSettlementAmount;
/**
* 业主单位 客户
*/
@ExcelProperty(value = "业主单位 客户")
private Long ownerUnit;
/**
* 业主单位名称 客户
*/
@ExcelProperty(value = "业主单位名称 客户")
private String ownerUnitName;
/**
* 监理单位 客户
*/
@ExcelProperty(value = "监理单位 客户")
private Long supervisionUnit;
/**
* 监理单位名称 客户
*/
@ExcelProperty(value = "监理单位名称 客户")
private String supervisionUnitName;
/**
* 施工单位 客户
*/
@ExcelProperty(value = "施工单位 客户")
private Long constructionUnit;
/**
* 施工单位名称 客户
*/
@ExcelProperty(value = "施工单位名称 客户")
private String constructionUnitName;
/**
* 审核单位 客户
*/
@ExcelProperty(value = "审核单位 客户")
private Long auditUnit;
/**
* 审核单位名称 客户
*/
@ExcelProperty(value = "审核单位名称 客户")
private String auditUnitName;
/**
* 文件ID
*/
@ExcelProperty(value = "文件ID")
private String fileId;
/**
* 备注
*/
@ExcelProperty(value = "备注")
private String remark;
/**
* 审核状态
*/
@ExcelProperty(value = "审核状态")
private String auditStatus;
}

View File

@ -0,0 +1,15 @@
package org.dromara.xzd.settlement.fenbaohetongjungong.mapper;
import org.dromara.xzd.settlement.fenbaohetongjungong.domain.SettlementOfSubcontractingCompletion;
import org.dromara.xzd.settlement.fenbaohetongjungong.domain.vo.SettlementOfSubcontractingCompletionVo;
import org.dromara.common.mybatis.core.mapper.BaseMapperPlus;
/**
* 分包合同竣工结算Mapper接口
*
* @author Lion Li
* @date 2025-10-15
*/
public interface SettlementOfSubcontractingCompletionMapper extends BaseMapperPlus<SettlementOfSubcontractingCompletion, SettlementOfSubcontractingCompletionVo> {
}

View File

@ -0,0 +1,76 @@
package org.dromara.xzd.settlement.fenbaohetongjungong.service;
import jakarta.validation.constraints.NotEmpty;
import org.dromara.xzd.domain.vo.XzdSettlementRulesVo;
import org.dromara.xzd.settlement.fenbaohetongjungong.domain.vo.SettlementOfSubcontractingCompletionVo;
import org.dromara.xzd.settlement.fenbaohetongjungong.domain.bo.SettlementOfSubcontractingCompletionBo;
import org.dromara.xzd.settlement.fenbaohetongjungong.domain.SettlementOfSubcontractingCompletion;
import org.dromara.common.mybatis.core.page.TableDataInfo;
import org.dromara.common.mybatis.core.page.PageQuery;
import com.baomidou.mybatisplus.extension.service.IService;
import java.util.Collection;
import java.util.List;
/**
* 分包合同竣工结算Service接口
*
* @author Lion Li
* @date 2025-10-15
*/
public interface ISettlementOfSubcontractingCompletionService extends IService<SettlementOfSubcontractingCompletion>{
/**
* 查询分包合同竣工结算
*
* @param id 主键
* @return 分包合同竣工结算
*/
SettlementOfSubcontractingCompletionVo queryById(Long id);
/**
* 分页查询分包合同竣工结算列表
*
* @param bo 查询条件
* @param pageQuery 分页参数
* @return 分包合同竣工结算分页列表
*/
TableDataInfo<SettlementOfSubcontractingCompletionVo> queryPageList(SettlementOfSubcontractingCompletionBo bo, PageQuery pageQuery);
/**
* 查询符合条件的分包合同竣工结算列表
*
* @param bo 查询条件
* @return 分包合同竣工结算列表
*/
List<SettlementOfSubcontractingCompletionVo> queryList(SettlementOfSubcontractingCompletionBo bo);
/**
* 新增分包合同竣工结算
*
* @param bo 分包合同竣工结算
* @return 是否新增成功
*/
Boolean insertByBo(SettlementOfSubcontractingCompletionBo bo);
/**
* 修改分包合同竣工结算
*
* @param bo 分包合同竣工结算
* @return 是否修改成功
*/
Boolean updateByBo(SettlementOfSubcontractingCompletionBo bo);
/**
* 校验并批量删除分包合同竣工结算信息
*
* @param ids 待删除的主键集合
* @param isValid 是否进行有效性校验
* @return 是否删除成功
*/
Boolean deleteWithValidByIds(Collection<Long> ids, Boolean isValid);
List<XzdSettlementRulesVo> contractPaymentTerm(@NotEmpty(message = "主键不能为空") Long id, boolean b);
}

View File

@ -0,0 +1,307 @@
package org.dromara.xzd.settlement.fenbaohetongjungong.service.impl;
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
import org.dromara.common.core.domain.R;
import org.dromara.common.core.utils.MapstructUtils;
import org.dromara.common.core.utils.StringUtils;
import org.dromara.common.mybatis.core.page.TableDataInfo;
import org.dromara.common.mybatis.core.page.PageQuery;
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.system.service.impl.SysOssServiceImpl;
import org.dromara.xzd.contractManagement.fenbaohetongxinxi.domain.vo.XzdSubcontractVo;
import org.dromara.xzd.domain.*;
import org.dromara.xzd.domain.dto.QuerCorrespondentDto;
import org.dromara.xzd.domain.vo.XzdSettlementRulesVo;
import org.dromara.xzd.service.*;
import org.dromara.xzd.service.impl.XzdProjectServiceImpl;
import org.dromara.xzd.service.impl.XzdSupplierInfoServiceImpl;
import org.dromara.xzd.settlement.fenbaohetongjingdu.domain.SettlementOfSubcontractingContract;
import org.dromara.xzd.settlement.fenbaohetongjingdu.domain.vo.SettlementOfSubcontractingContractVo;
import org.dromara.xzd.utilS.AreaUtil;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import org.dromara.xzd.settlement.fenbaohetongjungong.domain.bo.SettlementOfSubcontractingCompletionBo;
import org.dromara.xzd.settlement.fenbaohetongjungong.domain.vo.SettlementOfSubcontractingCompletionVo;
import org.dromara.xzd.settlement.fenbaohetongjungong.domain.SettlementOfSubcontractingCompletion;
import org.dromara.xzd.settlement.fenbaohetongjungong.mapper.SettlementOfSubcontractingCompletionMapper;
import org.dromara.xzd.settlement.fenbaohetongjungong.service.ISettlementOfSubcontractingCompletionService;
import java.time.LocalDate;
import java.util.*;
/**
* 分包合同竣工结算Service业务层处理
*
* @author Lion Li
* @date 2025-10-15
*/
@RequiredArgsConstructor
@Service
public class SettlementOfSubcontractingCompletionServiceImpl extends ServiceImpl<SettlementOfSubcontractingCompletionMapper, SettlementOfSubcontractingCompletion> implements ISettlementOfSubcontractingCompletionService {
private final SettlementOfSubcontractingCompletionMapper baseMapper;
private final AreaUtil areaUtil;
private final IXzdSettlementRulesService xzdSettlementRulesService;
@Autowired
private IXzdCorrespondentList iXzdCorrespondentList;
@Autowired
private XzdProjectServiceImpl xzdProjectService;
@Autowired
private SysOssServiceImpl sysOssService;
@Autowired
private XzdSupplierInfoServiceImpl xzdSupplierInfoService;
private final IXzdContractAdvanceInfoService iXzdContractAdvanceInfoService;
private final IXzdDeductionItemsService iXzdDeductionItemsService;
private final IXzdContractClauseService iXzdContractClauseService;
/**
* 查询分包合同竣工结算
*
* @param id 主键
* @return 分包合同竣工结算
*/
@Override
public SettlementOfSubcontractingCompletionVo queryById(Long id){
SettlementOfSubcontractingCompletionVo vo = baseMapper.selectVoById(id);
if (vo == null) {
throw new RuntimeException("数据不存在");
}
List<SettlementOfSubcontractingCompletionVo> res = List.of(vo);
setValue(res);
return res.getFirst();
}
/**
* 分页查询分包合同竣工结算列表
*
* @param bo 查询条件
* @param pageQuery 分页参数
* @return 分包合同竣工结算分页列表
*/
@Override
public TableDataInfo<SettlementOfSubcontractingCompletionVo> queryPageList(SettlementOfSubcontractingCompletionBo bo, PageQuery pageQuery) {
LambdaQueryWrapper<SettlementOfSubcontractingCompletion> lqw = buildQueryWrapper(bo);
Page<SettlementOfSubcontractingCompletionVo> result = baseMapper.selectVoPage(pageQuery.build(), lqw);
setValue(result.getRecords());
return TableDataInfo.build(result);
}
private void setValue(List<SettlementOfSubcontractingCompletionVo> records) {
for (SettlementOfSubcontractingCompletionVo item : records) {
// //项目名称
// if (item.getProject() != null){
// String projectName = xzdProjectService.queryNameById(item.getProject());
// if (projectName != null){
// item.setProjectName(projectName);
// }
// }
//甲方单位(客户信息列表)
R<QuerCorrespondentDto> byid = iXzdCorrespondentList.getCustomerByid(item.getPartyAUnit());
if (byid!=null){
if (byid.getData().getXzdCustomerinformation() != null){
item.setPartyAUnitName(byid.getData().getXzdCustomerinformation().getUnitName());
}
}
//乙方单位(供应商信息列表)
if (item.getPartyBUnit() != null){
String unitName = xzdSupplierInfoService.queryNameById(item.getPartyBUnit());
if (unitName != null){
item.setPartyBUnitName(unitName);
}
}
// 支付条款
if (item.getPaymentTerms() != null){
XzdSettlementRules byId = xzdSettlementRulesService.getById(item.getPaymentTerms());
if (byId != null){
item.setPaymentTermsName(byId.getType());
}
}
// 业主单位(客户信息列表)
R<QuerCorrespondentDto> temp = iXzdCorrespondentList.getCustomerByid(item.getOwnerUnit());
if (temp!=null){
if (temp.getData().getXzdCustomerinformation() != null){
item.setOwnerUnitName(temp.getData().getXzdCustomerinformation().getUnitName());
}
}
// 监理单位(客户信息列表)
R<QuerCorrespondentDto> supervisionUnit = iXzdCorrespondentList.getCustomerByid(item.getSupervisionUnit());
if (supervisionUnit!=null){
if (supervisionUnit.getData().getXzdCustomerinformation() != null){
item.setSupervisionUnitName(supervisionUnit.getData().getXzdCustomerinformation().getUnitName());
}
}
// 施工单位(客户信息列表)
R<QuerCorrespondentDto> constructionUnit = iXzdCorrespondentList.getCustomerByid(item.getConstructionUnit());
if (constructionUnit!=null){
if (constructionUnit.getData().getXzdCustomerinformation() != null){
item.setConstructionUnitName(constructionUnit.getData().getXzdCustomerinformation().getUnitName());
}
}
// 施工单位(客户信息列表)
R<QuerCorrespondentDto> auditUnit = iXzdCorrespondentList.getCustomerByid(item.getAuditUnit());
if (auditUnit!=null){
if (auditUnit.getData().getXzdCustomerinformation() != null){
item.setAuditUnitName(auditUnit.getData().getXzdCustomerinformation().getUnitName());
}
}
}
}
/**
* 查询符合条件的分包合同竣工结算列表
*
* @param bo 查询条件
* @return 分包合同竣工结算列表
*/
@Override
public List<SettlementOfSubcontractingCompletionVo> queryList(SettlementOfSubcontractingCompletionBo bo) {
LambdaQueryWrapper<SettlementOfSubcontractingCompletion> lqw = buildQueryWrapper(bo);
return baseMapper.selectVoList(lqw);
}
private LambdaQueryWrapper<SettlementOfSubcontractingCompletion> buildQueryWrapper(SettlementOfSubcontractingCompletionBo bo) {
Map<String, Object> params = bo.getParams();
LambdaQueryWrapper<SettlementOfSubcontractingCompletion> lqw = Wrappers.lambdaQuery();
lqw.orderByDesc(SettlementOfSubcontractingCompletion::getId);
lqw.eq(StringUtils.isNotBlank(bo.getDocumentCode()), SettlementOfSubcontractingCompletion::getDocumentCode, bo.getDocumentCode());
lqw.eq(StringUtils.isNotBlank(bo.getTitle()), SettlementOfSubcontractingCompletion::getTitle, bo.getTitle());
lqw.eq(bo.getDocumentDate() != null, SettlementOfSubcontractingCompletion::getDocumentDate, bo.getDocumentDate());
lqw.ge(bo.getStartTime() != null, SettlementOfSubcontractingCompletion::getDocumentDate, bo.getStartTime());
lqw.le(bo.getEndTime() != null, SettlementOfSubcontractingCompletion::getDocumentDate, bo.getEndTime());
lqw.eq(bo.getContractCode() != null, SettlementOfSubcontractingCompletion::getContractCode, bo.getContractCode());
lqw.like(StringUtils.isNotBlank(bo.getContractName()), SettlementOfSubcontractingCompletion::getContractName, bo.getContractName());
lqw.eq(bo.getApprovedTotalPrice() != null, SettlementOfSubcontractingCompletion::getApprovedTotalPrice, bo.getApprovedTotalPrice());
lqw.eq(bo.getApprovedDate() != null, SettlementOfSubcontractingCompletion::getApprovedDate, bo.getApprovedDate());
lqw.eq(StringUtils.isNotBlank(bo.getEngineeringProject()), SettlementOfSubcontractingCompletion::getEngineeringProject, bo.getEngineeringProject());
lqw.eq(StringUtils.isNotBlank(bo.getBusinessModel()), SettlementOfSubcontractingCompletion::getBusinessModel, bo.getBusinessModel());
lqw.eq(bo.getPartyAUnit() != null, SettlementOfSubcontractingCompletion::getPartyAUnit, bo.getPartyAUnit());
lqw.eq(bo.getPartyBUnit() != null, SettlementOfSubcontractingCompletion::getPartyBUnit, bo.getPartyBUnit());
lqw.eq(bo.getCumulativeSettledAmount() != null, SettlementOfSubcontractingCompletion::getCumulativeSettledAmount, bo.getCumulativeSettledAmount());
lqw.eq(bo.getCumulativePaidAmount() != null, SettlementOfSubcontractingCompletion::getCumulativePaidAmount, bo.getCumulativePaidAmount());
lqw.eq(bo.getPaidRatio() != null, SettlementOfSubcontractingCompletion::getPaidRatio, bo.getPaidRatio());
lqw.eq(bo.getPaymentTerms() != null, SettlementOfSubcontractingCompletion::getPaymentTerms, bo.getPaymentTerms());
lqw.eq(bo.getCurrentPayableAmount() != null, SettlementOfSubcontractingCompletion::getCurrentPayableAmount, bo.getCurrentPayableAmount());
lqw.eq(bo.getPayableDate() != null, SettlementOfSubcontractingCompletion::getPayableDate, bo.getPayableDate());
lqw.eq(bo.getCompletionDate() != null, SettlementOfSubcontractingCompletion::getCompletionDate, bo.getCompletionDate());
lqw.eq(StringUtils.isNotBlank(bo.getWarning()), SettlementOfSubcontractingCompletion::getWarning, bo.getWarning());
lqw.eq(StringUtils.isNotBlank(bo.getRemarks()), SettlementOfSubcontractingCompletion::getRemarks, bo.getRemarks());
lqw.eq(bo.getCurrentFinalSettlementAmount() != null, SettlementOfSubcontractingCompletion::getCurrentFinalSettlementAmount, bo.getCurrentFinalSettlementAmount());
lqw.eq(bo.getOwnerUnit() != null, SettlementOfSubcontractingCompletion::getOwnerUnit, bo.getOwnerUnit());
lqw.eq(bo.getSupervisionUnit() != null, SettlementOfSubcontractingCompletion::getSupervisionUnit, bo.getSupervisionUnit());
lqw.eq(bo.getConstructionUnit() != null, SettlementOfSubcontractingCompletion::getConstructionUnit, bo.getConstructionUnit());
lqw.eq(bo.getAuditUnit() != null, SettlementOfSubcontractingCompletion::getAuditUnit, bo.getAuditUnit());
lqw.eq(StringUtils.isNotBlank(bo.getFileId()), SettlementOfSubcontractingCompletion::getFileId, bo.getFileId());
lqw.eq(StringUtils.isNotBlank(bo.getAuditStatus()), SettlementOfSubcontractingCompletion::getAuditStatus, bo.getAuditStatus());
return lqw;
}
/**
* 新增分包合同竣工结算
*
* @param bo 分包合同竣工结算
* @return 是否新增成功
*/
@Override
public Boolean insertByBo(SettlementOfSubcontractingCompletionBo bo) {
SettlementOfSubcontractingCompletion add = MapstructUtils.convert(bo, SettlementOfSubcontractingCompletion.class);
validEntityBeforeSave(add);
Long l = baseMapper.selectCount(new LambdaQueryWrapper<SettlementOfSubcontractingCompletion>().gt(SettlementOfSubcontractingCompletion::getCreateTime, LocalDate.now()));
String s = areaUtil.generateDateBasedNumber();
add.setDocumentCode(s+"-"+(l+1));
boolean flag = baseMapper.insert(add) > 0;
if (flag) {
bo.setId(add.getId());
}
return flag;
}
/**
* 修改分包合同竣工结算
*
* @param bo 分包合同竣工结算
* @return 是否修改成功
*/
@Override
public Boolean updateByBo(SettlementOfSubcontractingCompletionBo bo) {
SettlementOfSubcontractingCompletion update = MapstructUtils.convert(bo, SettlementOfSubcontractingCompletion.class);
validEntityBeforeSave(update);
return baseMapper.updateById(update) > 0;
}
/**
* 保存前的数据校验
*/
private void validEntityBeforeSave(SettlementOfSubcontractingCompletion entity){
//TODO 做一些数据校验,如唯一约束
}
/**
* 校验并批量删除分包合同竣工结算信息
*
* @param ids 待删除的主键集合
* @param isValid 是否进行有效性校验
* @return 是否删除成功
*/
@Override
public Boolean deleteWithValidByIds(Collection<Long> ids, Boolean isValid) {
if(isValid){
}
for (Long id : ids) {
SettlementOfSubcontractingCompletionVo vo = baseMapper.selectVoById(id);
if (vo != null){
//删除附件
if (vo.getFileId()!= null && !vo.getFileId().isEmpty()){
List<Long> deleteIds = Arrays.stream(vo.getFileId().split(",")).map(Long::valueOf).toList();
if (!deleteIds.isEmpty()) {
sysOssService.deleteWithValidByIds(deleteIds, false);
}
}
}
}
return baseMapper.deleteByIds(ids) > 0;
}
/**
* 查询符合条件的分包合同竣工结算列表
*
* @return 分包合同竣工结算列表
*/
@Override
public List<XzdSettlementRulesVo> contractPaymentTerm(Long id, boolean b) {
Map<String, Object> hashMap = new HashMap<>();
hashMap.put("contract_details_id", id);
List<XzdSettlementRules> xzdSettlementRules = xzdSettlementRulesService.getBaseMapper().selectByMap(hashMap);
List<XzdSettlementRulesVo> convert = MapstructUtils.convert(xzdSettlementRules, XzdSettlementRulesVo.class);
return convert;
}
}

View File

@ -0,0 +1,105 @@
package org.dromara.xzd.settlement.fenbaohetongtiaozheng.controller;
import java.util.List;
import lombok.RequiredArgsConstructor;
import jakarta.servlet.http.HttpServletResponse;
import jakarta.validation.constraints.*;
import cn.dev33.satoken.annotation.SaCheckPermission;
import org.springframework.web.bind.annotation.*;
import org.springframework.validation.annotation.Validated;
import org.dromara.common.idempotent.annotation.RepeatSubmit;
import org.dromara.common.log.annotation.Log;
import org.dromara.common.web.core.BaseController;
import org.dromara.common.mybatis.core.page.PageQuery;
import org.dromara.common.core.domain.R;
import org.dromara.common.core.validate.AddGroup;
import org.dromara.common.core.validate.EditGroup;
import org.dromara.common.log.enums.BusinessType;
import org.dromara.common.excel.utils.ExcelUtil;
import org.dromara.xzd.settlement.fenbaohetongtiaozheng.domain.vo.SettlementOfSubcontractingAdjustmentVo;
import org.dromara.xzd.settlement.fenbaohetongtiaozheng.domain.bo.SettlementOfSubcontractingAdjustmentBo;
import org.dromara.xzd.settlement.fenbaohetongtiaozheng.service.ISettlementOfSubcontractingAdjustmentService;
import org.dromara.common.mybatis.core.page.TableDataInfo;
/**
* 分包合同竣工结算调整
*
* @author Lion Li
* @date 2025-10-15
*/
@Validated
@RequiredArgsConstructor
@RestController
@RequestMapping("/fenbaohetongtiaozheng/ofSubcontractingAdjustment")
public class SettlementOfSubcontractingAdjustmentController extends BaseController {
private final ISettlementOfSubcontractingAdjustmentService settlementOfSubcontractingAdjustmentService;
/**
* 查询分包合同竣工结算调整列表
*/
@SaCheckPermission("fenbaohetongtiaozheng:ofSubcontractingAdjustment:list")
@GetMapping("/list")
public TableDataInfo<SettlementOfSubcontractingAdjustmentVo> list(SettlementOfSubcontractingAdjustmentBo bo, PageQuery pageQuery) {
return settlementOfSubcontractingAdjustmentService.queryPageList(bo, pageQuery);
}
/**
* 导出分包合同竣工结算调整列表
*/
@SaCheckPermission("fenbaohetongtiaozheng:ofSubcontractingAdjustment:export")
@Log(title = "分包合同竣工结算调整", businessType = BusinessType.EXPORT)
@PostMapping("/export")
public void export(SettlementOfSubcontractingAdjustmentBo bo, HttpServletResponse response) {
List<SettlementOfSubcontractingAdjustmentVo> list = settlementOfSubcontractingAdjustmentService.queryList(bo);
ExcelUtil.exportExcel(list, "分包合同竣工结算调整", SettlementOfSubcontractingAdjustmentVo.class, response);
}
/**
* 获取分包合同竣工结算调整详细信息
*
* @param id 主键
*/
@SaCheckPermission("fenbaohetongtiaozheng:ofSubcontractingAdjustment:query")
@GetMapping("/{id}")
public R<SettlementOfSubcontractingAdjustmentVo> getInfo(@NotNull(message = "主键不能为空")
@PathVariable Long id) {
return R.ok(settlementOfSubcontractingAdjustmentService.queryById(id));
}
/**
* 新增分包合同竣工结算调整
*/
@SaCheckPermission("fenbaohetongtiaozheng:ofSubcontractingAdjustment:add")
@Log(title = "分包合同竣工结算调整", businessType = BusinessType.INSERT)
@RepeatSubmit()
@PostMapping()
public R<Void> add(@Validated(AddGroup.class) @RequestBody SettlementOfSubcontractingAdjustmentBo bo) {
return toAjax(settlementOfSubcontractingAdjustmentService.insertByBo(bo));
}
/**
* 修改分包合同竣工结算调整
*/
@SaCheckPermission("fenbaohetongtiaozheng:ofSubcontractingAdjustment:edit")
@Log(title = "分包合同竣工结算调整", businessType = BusinessType.UPDATE)
@RepeatSubmit()
@PutMapping()
public R<Void> edit(@Validated(EditGroup.class) @RequestBody SettlementOfSubcontractingAdjustmentBo bo) {
return toAjax(settlementOfSubcontractingAdjustmentService.updateByBo(bo));
}
/**
* 删除分包合同竣工结算调整
*
* @param ids 主键串
*/
@SaCheckPermission("fenbaohetongtiaozheng:ofSubcontractingAdjustment:remove")
@Log(title = "分包合同竣工结算调整", businessType = BusinessType.DELETE)
@DeleteMapping("/{ids}")
public R<Void> remove(@NotEmpty(message = "主键不能为空")
@PathVariable Long[] ids) {
return toAjax(settlementOfSubcontractingAdjustmentService.deleteWithValidByIds(List.of(ids), true));
}
}

View File

@ -0,0 +1,98 @@
package org.dromara.xzd.settlement.fenbaohetongtiaozheng.domain;
import org.dromara.common.mybatis.core.domain.BaseEntity;
import com.baomidou.mybatisplus.annotation.*;
import lombok.Data;
import lombok.EqualsAndHashCode;
import java.math.BigDecimal;
import java.io.Serial;
import java.time.LocalDate;
/**
* 分包合同竣工结算调整对象 settlement_of_subcontracting_adjustment
*
* @author Lion Li
* @date 2025-10-15
*/
@Data
@EqualsAndHashCode(callSuper = true)
@TableName("settlement_of_subcontracting_adjustment")
public class SettlementOfSubcontractingAdjustment extends BaseEntity {
@Serial
private static final long serialVersionUID = 1L;
/**
* 主键ID
*/
@TableId(value = "id")
private Long id;
/**
* 单据编号
*/
private String documentNo;
/**
* 标题
*/
private String title;
/**
* 单据日期
*/
private LocalDate documentDate;
/**
* 决算单编号
*/
private Long finalAccountNo;
/**
* 合同名称
*/
private String contractName;
/**
* 合同编号)
*/
private String contractNo;
/**
* 调整后决算金额
*/
private BigDecimal adjustedFinalAmount;
/**
* 工程项目名称
*/
private String projectName;
/**
* 调整说明
*/
private String adjustmentDescription;
/**
* 备注信息
*/
private String remarks;
/**
* 文件ID
*/
private String fileId;
/**
* 备注
*/
private String remark;
/**
* 审核状态
*/
private String auditStatus;
}

View File

@ -0,0 +1,96 @@
package org.dromara.xzd.settlement.fenbaohetongtiaozheng.domain.bo;
import org.dromara.xzd.settlement.fenbaohetongtiaozheng.domain.SettlementOfSubcontractingAdjustment;
import org.dromara.common.mybatis.core.domain.BaseEntity;
import org.dromara.common.core.validate.AddGroup;
import org.dromara.common.core.validate.EditGroup;
import io.github.linpeilie.annotations.AutoMapper;
import lombok.Data;
import lombok.EqualsAndHashCode;
import jakarta.validation.constraints.*;
import java.math.BigDecimal;
import java.time.LocalDate;
/**
* 分包合同竣工结算调整业务对象 settlement_of_subcontracting_adjustment
*
* @author Lion Li
* @date 2025-10-15
*/
@Data
@EqualsAndHashCode(callSuper = true)
@AutoMapper(target = SettlementOfSubcontractingAdjustment.class, reverseConvertGenerate = false)
public class SettlementOfSubcontractingAdjustmentBo extends BaseEntity {
/**
* 主键ID
*/
private Long id;
/**
* 单据编号
*/
private String documentNo;
/**
* 标题
*/
private String title;
/**
* 单据日期
*/
private LocalDate documentDate;
/**
* 决算单编号
*/
private Long finalAccountNo;
/**
* 合同名称
*/
private String contractName;
/**
* 合同编号)
*/
private String contractNo;
/**
* 调整后决算金额
*/
private BigDecimal adjustedFinalAmount;
/**
* 工程项目名称
*/
private String projectName;
/**
* 调整说明
*/
private String adjustmentDescription;
/**
* 备注信息
*/
private String remarks;
/**
* 文件ID
*/
private String fileId;
/**
* 备注
*/
private String remark;
/**
* 审核状态
*/
private String auditStatus;
}

View File

@ -0,0 +1,118 @@
package org.dromara.xzd.settlement.fenbaohetongtiaozheng.domain.vo;
import java.math.BigDecimal;
import org.dromara.xzd.settlement.fenbaohetongtiaozheng.domain.SettlementOfSubcontractingAdjustment;
import com.alibaba.excel.annotation.ExcelIgnoreUnannotated;
import com.alibaba.excel.annotation.ExcelProperty;
import org.dromara.common.excel.annotation.ExcelDictFormat;
import org.dromara.common.excel.convert.ExcelDictConvert;
import io.github.linpeilie.annotations.AutoMapper;
import lombok.Data;
import java.io.Serial;
import java.io.Serializable;
import java.time.LocalDate;
import java.util.Date;
/**
* 分包合同竣工结算调整视图对象 settlement_of_subcontracting_adjustment
*
* @author Lion Li
* @date 2025-10-15
*/
@Data
@ExcelIgnoreUnannotated
@AutoMapper(target = SettlementOfSubcontractingAdjustment.class)
public class SettlementOfSubcontractingAdjustmentVo implements Serializable {
@Serial
private static final long serialVersionUID = 1L;
/**
* 主键ID
*/
@ExcelProperty(value = "主键ID")
private Long id;
/**
* 单据编号
*/
@ExcelProperty(value = "单据编号")
private String documentNo;
/**
* 标题
*/
@ExcelProperty(value = "标题")
private String title;
/**
* 单据日期
*/
@ExcelProperty(value = "单据日期")
private LocalDate documentDate;
/**
* 决算单编号
*/
@ExcelProperty(value = "决算单编号")
private Long finalAccountNo;
/**
* 合同名称
*/
@ExcelProperty(value = "合同名称")
private String contractName;
/**
* 合同编号)
*/
@ExcelProperty(value = "合同编号)")
private String contractNo;
/**
* 调整后决算金额
*/
@ExcelProperty(value = "调整后决算金额")
private BigDecimal adjustedFinalAmount;
/**
* 工程项目名称
*/
@ExcelProperty(value = "工程项目名称")
private String projectName;
/**
* 调整说明
*/
@ExcelProperty(value = "调整说明")
private String adjustmentDescription;
/**
* 备注信息
*/
@ExcelProperty(value = "备注信息")
private String remarks;
/**
* 文件ID
*/
@ExcelProperty(value = "文件ID")
private String fileId;
/**
* 备注
*/
@ExcelProperty(value = "备注")
private String remark;
/**
* 审核状态
*/
@ExcelProperty(value = "审核状态")
private String auditStatus;
}

View File

@ -0,0 +1,15 @@
package org.dromara.xzd.settlement.fenbaohetongtiaozheng.mapper;
import org.dromara.xzd.settlement.fenbaohetongtiaozheng.domain.SettlementOfSubcontractingAdjustment;
import org.dromara.xzd.settlement.fenbaohetongtiaozheng.domain.vo.SettlementOfSubcontractingAdjustmentVo;
import org.dromara.common.mybatis.core.mapper.BaseMapperPlus;
/**
* 分包合同竣工结算调整Mapper接口
*
* @author Lion Li
* @date 2025-10-15
*/
public interface SettlementOfSubcontractingAdjustmentMapper extends BaseMapperPlus<SettlementOfSubcontractingAdjustment, SettlementOfSubcontractingAdjustmentVo> {
}

View File

@ -0,0 +1,70 @@
package org.dromara.xzd.settlement.fenbaohetongtiaozheng.service;
import org.dromara.xzd.settlement.fenbaohetongtiaozheng.domain.vo.SettlementOfSubcontractingAdjustmentVo;
import org.dromara.xzd.settlement.fenbaohetongtiaozheng.domain.bo.SettlementOfSubcontractingAdjustmentBo;
import org.dromara.xzd.settlement.fenbaohetongtiaozheng.domain.SettlementOfSubcontractingAdjustment;
import org.dromara.common.mybatis.core.page.TableDataInfo;
import org.dromara.common.mybatis.core.page.PageQuery;
import com.baomidou.mybatisplus.extension.service.IService;
import java.util.Collection;
import java.util.List;
/**
* 分包合同竣工结算调整Service接口
*
* @author Lion Li
* @date 2025-10-15
*/
public interface ISettlementOfSubcontractingAdjustmentService extends IService<SettlementOfSubcontractingAdjustment>{
/**
* 查询分包合同竣工结算调整
*
* @param id 主键
* @return 分包合同竣工结算调整
*/
SettlementOfSubcontractingAdjustmentVo queryById(Long id);
/**
* 分页查询分包合同竣工结算调整列表
*
* @param bo 查询条件
* @param pageQuery 分页参数
* @return 分包合同竣工结算调整分页列表
*/
TableDataInfo<SettlementOfSubcontractingAdjustmentVo> queryPageList(SettlementOfSubcontractingAdjustmentBo bo, PageQuery pageQuery);
/**
* 查询符合条件的分包合同竣工结算调整列表
*
* @param bo 查询条件
* @return 分包合同竣工结算调整列表
*/
List<SettlementOfSubcontractingAdjustmentVo> queryList(SettlementOfSubcontractingAdjustmentBo bo);
/**
* 新增分包合同竣工结算调整
*
* @param bo 分包合同竣工结算调整
* @return 是否新增成功
*/
Boolean insertByBo(SettlementOfSubcontractingAdjustmentBo bo);
/**
* 修改分包合同竣工结算调整
*
* @param bo 分包合同竣工结算调整
* @return 是否修改成功
*/
Boolean updateByBo(SettlementOfSubcontractingAdjustmentBo bo);
/**
* 校验并批量删除分包合同竣工结算调整信息
*
* @param ids 待删除的主键集合
* @param isValid 是否进行有效性校验
* @return 是否删除成功
*/
Boolean deleteWithValidByIds(Collection<Long> ids, Boolean isValid);
}

View File

@ -0,0 +1,170 @@
package org.dromara.xzd.settlement.fenbaohetongtiaozheng.service.impl;
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
import org.dromara.common.core.utils.MapstructUtils;
import org.dromara.common.core.utils.StringUtils;
import org.dromara.common.mybatis.core.page.TableDataInfo;
import org.dromara.common.mybatis.core.page.PageQuery;
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.system.service.impl.SysOssServiceImpl;
import org.dromara.xzd.settlement.fenbaohetongjungong.domain.SettlementOfSubcontractingCompletion;
import org.dromara.xzd.settlement.fenbaohetongjungong.domain.vo.SettlementOfSubcontractingCompletionVo;
import org.dromara.xzd.utilS.AreaUtil;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import org.dromara.xzd.settlement.fenbaohetongtiaozheng.domain.bo.SettlementOfSubcontractingAdjustmentBo;
import org.dromara.xzd.settlement.fenbaohetongtiaozheng.domain.vo.SettlementOfSubcontractingAdjustmentVo;
import org.dromara.xzd.settlement.fenbaohetongtiaozheng.domain.SettlementOfSubcontractingAdjustment;
import org.dromara.xzd.settlement.fenbaohetongtiaozheng.mapper.SettlementOfSubcontractingAdjustmentMapper;
import org.dromara.xzd.settlement.fenbaohetongtiaozheng.service.ISettlementOfSubcontractingAdjustmentService;
import java.time.LocalDate;
import java.util.Arrays;
import java.util.List;
import java.util.Map;
import java.util.Collection;
/**
* 分包合同竣工结算调整Service业务层处理
*
* @author Lion Li
* @date 2025-10-15
*/
@RequiredArgsConstructor
@Service
public class SettlementOfSubcontractingAdjustmentServiceImpl extends ServiceImpl<SettlementOfSubcontractingAdjustmentMapper, SettlementOfSubcontractingAdjustment> implements ISettlementOfSubcontractingAdjustmentService {
private final SettlementOfSubcontractingAdjustmentMapper baseMapper;
private final AreaUtil areaUtil;
@Autowired
private SysOssServiceImpl sysOssService;
/**
* 查询分包合同竣工结算调整
*
* @param id 主键
* @return 分包合同竣工结算调整
*/
@Override
public SettlementOfSubcontractingAdjustmentVo queryById(Long id){
return baseMapper.selectVoById(id);
}
/**
* 分页查询分包合同竣工结算调整列表
*
* @param bo 查询条件
* @param pageQuery 分页参数
* @return 分包合同竣工结算调整分页列表
*/
@Override
public TableDataInfo<SettlementOfSubcontractingAdjustmentVo> queryPageList(SettlementOfSubcontractingAdjustmentBo bo, PageQuery pageQuery) {
LambdaQueryWrapper<SettlementOfSubcontractingAdjustment> lqw = buildQueryWrapper(bo);
Page<SettlementOfSubcontractingAdjustmentVo> result = baseMapper.selectVoPage(pageQuery.build(), lqw);
return TableDataInfo.build(result);
}
/**
* 查询符合条件的分包合同竣工结算调整列表
*
* @param bo 查询条件
* @return 分包合同竣工结算调整列表
*/
@Override
public List<SettlementOfSubcontractingAdjustmentVo> queryList(SettlementOfSubcontractingAdjustmentBo bo) {
LambdaQueryWrapper<SettlementOfSubcontractingAdjustment> lqw = buildQueryWrapper(bo);
return baseMapper.selectVoList(lqw);
}
private LambdaQueryWrapper<SettlementOfSubcontractingAdjustment> buildQueryWrapper(SettlementOfSubcontractingAdjustmentBo bo) {
Map<String, Object> params = bo.getParams();
LambdaQueryWrapper<SettlementOfSubcontractingAdjustment> lqw = Wrappers.lambdaQuery();
lqw.orderByDesc(SettlementOfSubcontractingAdjustment::getId);
lqw.eq(StringUtils.isNotBlank(bo.getDocumentNo()), SettlementOfSubcontractingAdjustment::getDocumentNo, bo.getDocumentNo());
lqw.eq(StringUtils.isNotBlank(bo.getTitle()), SettlementOfSubcontractingAdjustment::getTitle, bo.getTitle());
lqw.eq(bo.getDocumentDate() != null, SettlementOfSubcontractingAdjustment::getDocumentDate, bo.getDocumentDate());
lqw.eq(bo.getFinalAccountNo() != null, SettlementOfSubcontractingAdjustment::getFinalAccountNo, bo.getFinalAccountNo());
lqw.like(StringUtils.isNotBlank(bo.getContractName()), SettlementOfSubcontractingAdjustment::getContractName, bo.getContractName());
lqw.eq(StringUtils.isNotBlank(bo.getContractNo()), SettlementOfSubcontractingAdjustment::getContractNo, bo.getContractNo());
lqw.eq(bo.getAdjustedFinalAmount() != null, SettlementOfSubcontractingAdjustment::getAdjustedFinalAmount, bo.getAdjustedFinalAmount());
lqw.like(StringUtils.isNotBlank(bo.getProjectName()), SettlementOfSubcontractingAdjustment::getProjectName, bo.getProjectName());
lqw.eq(StringUtils.isNotBlank(bo.getAdjustmentDescription()), SettlementOfSubcontractingAdjustment::getAdjustmentDescription, bo.getAdjustmentDescription());
lqw.eq(StringUtils.isNotBlank(bo.getRemarks()), SettlementOfSubcontractingAdjustment::getRemarks, bo.getRemarks());
lqw.eq(StringUtils.isNotBlank(bo.getFileId()), SettlementOfSubcontractingAdjustment::getFileId, bo.getFileId());
lqw.eq(StringUtils.isNotBlank(bo.getAuditStatus()), SettlementOfSubcontractingAdjustment::getAuditStatus, bo.getAuditStatus());
return lqw;
}
/**
* 新增分包合同竣工结算调整
*
* @param bo 分包合同竣工结算调整
* @return 是否新增成功
*/
@Override
public Boolean insertByBo(SettlementOfSubcontractingAdjustmentBo bo) {
SettlementOfSubcontractingAdjustment add = MapstructUtils.convert(bo, SettlementOfSubcontractingAdjustment.class);
validEntityBeforeSave(add);
Long l = baseMapper.selectCount(new LambdaQueryWrapper<SettlementOfSubcontractingAdjustment>().gt(SettlementOfSubcontractingAdjustment::getCreateTime, LocalDate.now()));
String s = areaUtil.generateDateBasedNumber();
add.setDocumentNo(s+"-"+(l+1));
boolean flag = baseMapper.insert(add) > 0;
if (flag) {
bo.setId(add.getId());
}
return flag;
}
/**
* 修改分包合同竣工结算调整
*
* @param bo 分包合同竣工结算调整
* @return 是否修改成功
*/
@Override
public Boolean updateByBo(SettlementOfSubcontractingAdjustmentBo bo) {
SettlementOfSubcontractingAdjustment update = MapstructUtils.convert(bo, SettlementOfSubcontractingAdjustment.class);
validEntityBeforeSave(update);
return baseMapper.updateById(update) > 0;
}
/**
* 保存前的数据校验
*/
private void validEntityBeforeSave(SettlementOfSubcontractingAdjustment entity){
//TODO 做一些数据校验,如唯一约束
}
/**
* 校验并批量删除分包合同竣工结算调整信息
*
* @param ids 待删除的主键集合
* @param isValid 是否进行有效性校验
* @return 是否删除成功
*/
@Override
public Boolean deleteWithValidByIds(Collection<Long> ids, Boolean isValid) {
if(isValid){
//TODO 做一些业务上的校验,判断是否需要校验
}
for (Long id : ids) {
SettlementOfSubcontractingAdjustmentVo vo = baseMapper.selectVoById(id);
if (vo != null){
//删除附件
if (vo.getFileId()!= null && !vo.getFileId().isEmpty()){
List<Long> deleteIds = Arrays.stream(vo.getFileId().split(",")).map(Long::valueOf).toList();
if (!deleteIds.isEmpty()) {
sysOssService.deleteWithValidByIds(deleteIds, false);
}
}
}
}
return baseMapper.deleteByIds(ids) > 0;
}
}