|
|
@@ -83,6 +83,7 @@ import cn.start.tz.module.pressure2.dal.dataobject.boilertaskorderitem.BoilerTas
|
|
|
import cn.start.tz.module.pressure2.dal.dataobject.boilertaskorderitempart.BoilerTaskOrderItemPartDO;
|
|
|
import cn.start.tz.module.pressure2.dal.dataobject.boilertaskorderitemrecheck.BoilerTaskOrderItemRecheckDO;
|
|
|
import cn.start.tz.module.pressure2.dal.dataobject.boilertaskorderitemreport.BoilerTaskOrderItemReportDO;
|
|
|
+import cn.start.tz.module.pressure2.dal.dataobject.boilertaskorderitemfee.BoilerTaskOrderItemFeeDO;
|
|
|
import cn.start.tz.module.pressure2.dal.dataobject.boilertaskorderitemreportequip.BoilerTaskOrderItemReportEquipDO;
|
|
|
import cn.start.tz.module.pressure2.dal.dataobject.boilertaskorderitemreportrecord.BoilerTaskOrderItemReportRecordDO;
|
|
|
import cn.start.tz.module.pressure2.dal.dataobject.boilertaskorderitemreportuser.BoilerTaskOrderItemReportUserDO;
|
|
|
@@ -387,6 +388,9 @@ public class BoilerTaskOrderServiceImpl extends ServiceImpl<BoilerTaskOrderMappe
|
|
|
@Resource
|
|
|
private BoilerConnectRecordReportMapper boilerConnectRecordReportMapper;
|
|
|
|
|
|
+ @Resource
|
|
|
+ private cn.start.tz.module.pressure2.dal.mysql.boilertaskorderitemfee.BoilerTaskOrderItemFeeMapper boilerTaskOrderItemFeeMapper;
|
|
|
+
|
|
|
@Resource
|
|
|
private BoilerTaskOrderItemReportVersionService versionService;
|
|
|
|
|
|
@@ -910,17 +914,23 @@ public class BoilerTaskOrderServiceImpl extends ServiceImpl<BoilerTaskOrderMappe
|
|
|
|
|
|
private void checkAddReport(String id, BoilerTaskOrderDO taskOrderDO) {
|
|
|
//TODO 新增项目
|
|
|
- // 判断是否新增项目
|
|
|
+ // 判断是否新增项目:报告表或 FEE 实例表任一非空则跳过,避免重复生成
|
|
|
List<BoilerTaskOrderItemReportDO> itemReportDOS = taskOrderItemReportMapper.selectList(new LambdaQueryWrapperX<BoilerTaskOrderItemReportDO>().
|
|
|
eq(BoilerTaskOrderItemReportDO::getOrderItemId, id).orderByAsc(BoilerTaskOrderItemReportDO::getSort));
|
|
|
if (itemReportDOS != null && !itemReportDOS.isEmpty()) {
|
|
|
return;
|
|
|
}
|
|
|
+ List<BoilerTaskOrderItemFeeDO> existingFeeDOS = boilerTaskOrderItemFeeMapper.selectListByOrderItemId(id);
|
|
|
+ if (existingFeeDOS != null && !existingFeeDOS.isEmpty()) {
|
|
|
+ return;
|
|
|
+ }
|
|
|
|
|
|
//根据前台约检勾选的检验项目生成数据
|
|
|
List<EquipBoilerSchedulingCheckDO> checkDOList = equipBoilerSchedulingCheckService.lambdaQuery().eq(EquipBoilerSchedulingCheckDO::getTaskOrderId, taskOrderDO.getId()).orderByAsc(EquipBoilerSchedulingCheckDO::getSort).list();
|
|
|
AtomicReference<Integer> index = new AtomicReference<>(1);
|
|
|
List<BoilerTaskOrderItemReportDO> insertList = new ArrayList<>();
|
|
|
+ // FEE 项目实例列表(不走报告流程)
|
|
|
+ List<BoilerTaskOrderItemFeeDO> feeInsertList = new ArrayList<>();
|
|
|
if (!checkDOList.isEmpty()){
|
|
|
|
|
|
String projectCode = getProjectCodeByTaskOrderId(taskOrderDO.getId());
|
|
|
@@ -936,6 +946,21 @@ public class BoilerTaskOrderServiceImpl extends ServiceImpl<BoilerTaskOrderMappe
|
|
|
BoilerConnectRecordReportDO recordReportDO = boilerConnectRecordReportMapper.selectById(item.getCheckId());
|
|
|
|
|
|
if (recordReportDO != null){
|
|
|
+ // 收费项目(FEE):仅记录费用实例,不创建报告
|
|
|
+ if ("FEE".equals(recordReportDO.getItemType())) {
|
|
|
+ BoilerTaskOrderItemFeeDO feeDO = BoilerTaskOrderItemFeeDO.builder()
|
|
|
+ .orderId(taskOrderDO.getId())
|
|
|
+ .orderItemId(id)
|
|
|
+ .projectId(recordReportDO.getId())
|
|
|
+ .projectName(recordReportDO.getProjectName())
|
|
|
+ .fee(item.getFee())
|
|
|
+ .feeType(item.getType())
|
|
|
+ .feeCalculateJson(item.getFeeCalculateJson())
|
|
|
+ .sort(item.getSort())
|
|
|
+ .build();
|
|
|
+ feeInsertList.add(feeDO);
|
|
|
+ return;
|
|
|
+ }
|
|
|
if (recordReportDO.getRecordTemplateId()!=null){
|
|
|
|
|
|
DynamicTbDO dynamicTbDO = dynamicTbMapper.selectById(recordReportDO.getRecordTemplateId());
|
|
|
@@ -1090,6 +1115,10 @@ public class BoilerTaskOrderServiceImpl extends ServiceImpl<BoilerTaskOrderMappe
|
|
|
|
|
|
});
|
|
|
}
|
|
|
+ // 新增 FEE 项目实例(不走报告流程)
|
|
|
+ if (!feeInsertList.isEmpty()) {
|
|
|
+ boilerTaskOrderItemFeeMapper.insert(feeInsertList);
|
|
|
+ }
|
|
|
}
|
|
|
|
|
|
}
|
|
|
@@ -1422,7 +1451,7 @@ public class BoilerTaskOrderServiceImpl extends ServiceImpl<BoilerTaskOrderMappe
|
|
|
List<BoilerOrderItemCostInfoRepsVO> list = new ArrayList<>();
|
|
|
// 获取检验性质和所属设备的模版列表
|
|
|
List<String> natureIds = inspectionNatureService.inspectionNatureIdList(reqVO.getInspectionNature(),
|
|
|
- reqVO.getEquipmentCategory(),reqVO.getEquipType());
|
|
|
+ reqVO.getEquipmentCategory(), reqVO.getEquipType());
|
|
|
if (CollUtil.isEmpty(natureIds)) {
|
|
|
return list;
|
|
|
}
|
|
|
@@ -1435,32 +1464,34 @@ public class BoilerTaskOrderServiceImpl extends ServiceImpl<BoilerTaskOrderMappe
|
|
|
.map(natureTemplateDO -> {
|
|
|
|
|
|
BoilerConnectRecordReportDO connectRecordReportDO = boilerConnectRecordReportMapper.selectById(natureTemplateDO.getTemplateId());
|
|
|
- if (connectRecordReportDO != null){
|
|
|
+ if (connectRecordReportDO != null) {
|
|
|
|
|
|
- if (connectRecordReportDO.getRecordTemplateId() != null){
|
|
|
- DynamicTbDO dynamicTbDO = dynamicTbMapper.selectById(connectRecordReportDO.getRecordTemplateId());
|
|
|
- if (dynamicTbDO != null) {
|
|
|
+ if (connectRecordReportDO.getRecordTemplateId() != null) {
|
|
|
+ DynamicTbDO dynamicTbDO = dynamicTbMapper.selectById(connectRecordReportDO.getRecordTemplateId());
|
|
|
+ if (dynamicTbDO != null) {
|
|
|
|
|
|
- BoilerOrderItemCostInfoRepsVO repsVO = new BoilerOrderItemCostInfoRepsVO();
|
|
|
- repsVO.setOrderId(reqVO.getOrderId());
|
|
|
- //repsVO.setName(dynamicTbDO.getTbName());
|
|
|
- repsVO.setConnectId(connectRecordReportDO.getId());
|
|
|
- repsVO.setName(connectRecordReportDO.getProjectName());
|
|
|
- repsVO.setIsFee(connectRecordReportDO.getIsFee());
|
|
|
- repsVO.setFee("1".equals(connectRecordReportDO.getIsFee()) ? ConversionUtil.convert(connectRecordReportDO.getFee()) : BigDecimal.ZERO);
|
|
|
- repsVO.setTemplateId(dynamicTbDO.getId());
|
|
|
- repsVO.setIsAutoAmount("0");
|
|
|
- repsVO.setReportType(dynamicTbDO.getTbType());
|
|
|
- repsVO.setUse("1".equals(natureTemplateDO.getIsDefault())); // 默认值
|
|
|
- repsVO.setProjectType(connectRecordReportDO.getProjectType());
|
|
|
- repsVO.setIsMainProject("MAIN".equals(connectRecordReportDO.getProjectType()) ? "1" : "0");
|
|
|
- repsVO.setDefaultCount(natureTemplateDO.getDefaultCount() != null ? natureTemplateDO.getDefaultCount() : 1);
|
|
|
- repsVO.setSort(natureTemplateDO.getSort() != null ? natureTemplateDO.getSort() : 1);
|
|
|
- repsVO.setChargeNature(connectRecordReportDO.getChargeNature());
|
|
|
- return repsVO;
|
|
|
- }else {
|
|
|
- return null;
|
|
|
- }}else if (connectRecordReportDO.getReportTemplateId() != null){
|
|
|
+ BoilerOrderItemCostInfoRepsVO repsVO = new BoilerOrderItemCostInfoRepsVO();
|
|
|
+ repsVO.setOrderId(reqVO.getOrderId());
|
|
|
+ //repsVO.setName(dynamicTbDO.getTbName());
|
|
|
+ repsVO.setConnectId(connectRecordReportDO.getId());
|
|
|
+ repsVO.setName(connectRecordReportDO.getProjectName());
|
|
|
+ repsVO.setIsFee(connectRecordReportDO.getIsFee());
|
|
|
+ repsVO.setFee("1".equals(connectRecordReportDO.getIsFee()) ? ConversionUtil.convert(connectRecordReportDO.getFee()) : BigDecimal.ZERO);
|
|
|
+ repsVO.setTemplateId(dynamicTbDO.getId());
|
|
|
+ repsVO.setIsAutoAmount("0");
|
|
|
+ repsVO.setReportType(dynamicTbDO.getTbType());
|
|
|
+ repsVO.setUse("1".equals(natureTemplateDO.getIsDefault())); // 默认值
|
|
|
+ repsVO.setProjectType(connectRecordReportDO.getProjectType());
|
|
|
+ repsVO.setIsMainProject("MAIN".equals(connectRecordReportDO.getProjectType()) ? "1" : "0");
|
|
|
+ repsVO.setDefaultCount(natureTemplateDO.getDefaultCount() != null ? natureTemplateDO.getDefaultCount() : 1);
|
|
|
+ repsVO.setSort(natureTemplateDO.getSort() != null ? natureTemplateDO.getSort() : 1);
|
|
|
+ repsVO.setChargeNature(connectRecordReportDO.getChargeNature());
|
|
|
+ repsVO.setItemType(connectRecordReportDO.getItemType());
|
|
|
+ return repsVO;
|
|
|
+ } else {
|
|
|
+ return null;
|
|
|
+ }
|
|
|
+ } else if (connectRecordReportDO.getReportTemplateId() != null) {
|
|
|
DynamicTbDO dynamicTbDO = dynamicTbMapper.selectById(connectRecordReportDO.getReportTemplateId());
|
|
|
if (dynamicTbDO != null) {
|
|
|
BoilerOrderItemCostInfoRepsVO repsVO = new BoilerOrderItemCostInfoRepsVO();
|
|
|
@@ -1479,17 +1510,38 @@ public class BoilerTaskOrderServiceImpl extends ServiceImpl<BoilerTaskOrderMappe
|
|
|
repsVO.setDefaultCount(natureTemplateDO.getDefaultCount() != null ? natureTemplateDO.getDefaultCount() : 1);
|
|
|
repsVO.setSort(natureTemplateDO.getSort() != null ? natureTemplateDO.getSort() : 1);
|
|
|
repsVO.setChargeNature(connectRecordReportDO.getChargeNature());
|
|
|
+ repsVO.setItemType(connectRecordReportDO.getItemType());
|
|
|
return repsVO;
|
|
|
- }else {
|
|
|
+ } else {
|
|
|
return null;
|
|
|
}
|
|
|
}
|
|
|
+// return null;
|
|
|
+ // 判断是否收费项目
|
|
|
+ if ("FEE".equals(connectRecordReportDO.getItemType())) {
|
|
|
+ BoilerOrderItemCostInfoRepsVO repsVO = new BoilerOrderItemCostInfoRepsVO();
|
|
|
+ repsVO.setOrderId(reqVO.getOrderId());
|
|
|
+ //repsVO.setName(dynamicTbDO.getTbName());
|
|
|
+ repsVO.setConnectId(connectRecordReportDO.getId());
|
|
|
+ repsVO.setName(connectRecordReportDO.getProjectName());
|
|
|
+ repsVO.setIsFee(connectRecordReportDO.getIsFee());
|
|
|
+ repsVO.setFee("1".equals(connectRecordReportDO.getIsFee()) ? ConversionUtil.convert(connectRecordReportDO.getFee()) : BigDecimal.ZERO);
|
|
|
+ repsVO.setIsAutoAmount("0");
|
|
|
+ repsVO.setUse("1".equals(natureTemplateDO.getIsDefault())); // 默认值
|
|
|
+ repsVO.setProjectType(connectRecordReportDO.getProjectType());
|
|
|
+ repsVO.setDefaultCount(natureTemplateDO.getDefaultCount() != null ? natureTemplateDO.getDefaultCount() : 1);
|
|
|
+ repsVO.setSort(natureTemplateDO.getSort() != null ? natureTemplateDO.getSort() : 1);
|
|
|
+ repsVO.setChargeNature(connectRecordReportDO.getChargeNature());
|
|
|
+ repsVO.setItemType(connectRecordReportDO.getItemType());
|
|
|
+ return repsVO;
|
|
|
+ }
|
|
|
return null;
|
|
|
|
|
|
- }else{
|
|
|
+ } else {
|
|
|
return null;
|
|
|
}
|
|
|
})
|
|
|
+ .filter(Objects::nonNull)
|
|
|
.sorted(Comparator.comparing(BoilerOrderItemCostInfoRepsVO::getSort))
|
|
|
.collect(Collectors.toCollection(ArrayList::new)); // 预分配空间
|
|
|
|
|
|
@@ -2779,6 +2831,24 @@ public class BoilerTaskOrderServiceImpl extends ServiceImpl<BoilerTaskOrderMappe
|
|
|
);
|
|
|
int count = 0;
|
|
|
|
|
|
+ // FEE 项目分流:跳过模板校验和报告构造,直接记录费用实例
|
|
|
+ BoilerConnectRecordReportDO connectCheckDO = boilerConnectRecordReportMapper.selectById(vo.getConnectId());
|
|
|
+ if (connectCheckDO != null && "FEE".equals(connectCheckDO.getItemType())) {
|
|
|
+ BoilerTaskOrderItemFeeDO feeDO = BoilerTaskOrderItemFeeDO.builder()
|
|
|
+ .orderId(orderItemDOS.get(0).getOrderId())
|
|
|
+ .orderItemId(vo.getOrderItemId())
|
|
|
+ .projectId(connectCheckDO.getId())
|
|
|
+ .projectName(connectCheckDO.getProjectName())
|
|
|
+ .fee(vo.getFee() != null && vo.getFee().compareTo(BigDecimal.ZERO) > 0
|
|
|
+ ? vo.getFee() : ConversionUtil.convert(connectCheckDO.getFee()))
|
|
|
+ .feeType(vo.getType())
|
|
|
+ .feeCalculateJson(vo.getFeeCalculateJson())
|
|
|
+ .sort(vo.getSort())
|
|
|
+ .build();
|
|
|
+ boilerTaskOrderItemFeeMapper.insert(feeDO);
|
|
|
+ continue;
|
|
|
+ }
|
|
|
+
|
|
|
DynamicTbDO reportTemplateDO = null;
|
|
|
if (StringUtils.isBlank(vo.getManualUrl())) {
|
|
|
reportTemplateDO = dynamicTbMapper.selectById(vo.getTemplateId());
|
|
|
@@ -3292,6 +3362,50 @@ public class BoilerTaskOrderServiceImpl extends ServiceImpl<BoilerTaskOrderMappe
|
|
|
}
|
|
|
}
|
|
|
}
|
|
|
+ // 2. 追加 FEE 项目实例费用(收费项目不进报告表,但参与费用汇总)
|
|
|
+ List<BoilerTaskOrderItemFeeDO> feeDOList = boilerTaskOrderItemFeeMapper.selectListByOrderId(id);
|
|
|
+ if (feeDOList != null && !feeDOList.isEmpty()) {
|
|
|
+ // 2.1 设备项 fee 聚合:FEE 费用合并到 BoilerTaskOrderItemDO.fee
|
|
|
+ Map<String, BigDecimal> itemFeeMap = new HashMap<>();
|
|
|
+ for (BoilerTaskOrderItemFeeDO feeDO : feeDOList) {
|
|
|
+ if (feeDO.getOrderItemId() != null && feeDO.getFee() != null) {
|
|
|
+ itemFeeMap.merge(feeDO.getOrderItemId(), feeDO.getFee(), BigDecimal::add);
|
|
|
+ }
|
|
|
+ }
|
|
|
+ for (Map.Entry<String, BigDecimal> entry : itemFeeMap.entrySet()) {
|
|
|
+ BoilerTaskOrderItemDO currentItem = boilerTaskOrderItemMapper.selectById(entry.getKey());
|
|
|
+ if (currentItem != null) {
|
|
|
+ BoilerTaskOrderItemDO updateItem = new BoilerTaskOrderItemDO();
|
|
|
+ updateItem.setId(entry.getKey());
|
|
|
+ BigDecimal existingFee = currentItem.getFee() != null ? currentItem.getFee() : BigDecimal.ZERO;
|
|
|
+ updateItem.setFee(existingFee.add(entry.getValue()));
|
|
|
+ boilerTaskOrderItemMapper.updateById(updateItem);
|
|
|
+ }
|
|
|
+ }
|
|
|
+ // 2.2 任务单费用汇总:FEE 项目参与免征/减免逻辑
|
|
|
+ for (BoilerTaskOrderItemFeeDO feeDO : feeDOList) {
|
|
|
+ if (feeDO.getFee() != null) {
|
|
|
+ if (isExempt && "1".equals(feeDO.getFeeType())) {
|
|
|
+ reduceFee = reduceFee.add(feeDO.getFee());
|
|
|
+ continue;
|
|
|
+ }
|
|
|
+ if ("2".equals(feeDO.getFeeType())) {
|
|
|
+ serviceAmount = serviceAmount.add(feeDO.getFee());
|
|
|
+ orderFee = orderFee.add(feeDO.getFee());
|
|
|
+ continue;
|
|
|
+ }
|
|
|
+ if ("1".equals(feeDO.getFeeType())) {
|
|
|
+ shouldAmount = shouldAmount.add(feeDO.getFee());
|
|
|
+ BigDecimal reduceRadioFee = feeDO.getFee();
|
|
|
+ if (boilerTaskOrderDO.getReductionRadio() != null) {
|
|
|
+ double v = boilerTaskOrderDO.getReductionRadio().doubleValue();
|
|
|
+ reduceRadioFee = reduceRadioFee.multiply(new BigDecimal(v)).setScale(2, RoundingMode.HALF_UP);
|
|
|
+ }
|
|
|
+ orderFee = orderFee.add(reduceRadioFee);
|
|
|
+ }
|
|
|
+ }
|
|
|
+ }
|
|
|
+ }
|
|
|
// 金额发生变动,将受理单签名置空,判断全部金额都要和之前不一致
|
|
|
if (!"1".equals(boilerTaskOrderDO.getIsSync()) && ObjectUtil.notEqual(shouldAmount, boilerTaskOrderDO.getShouldAmount()) || ObjectUtil.notEqual(serviceAmount, boilerTaskOrderDO.getServiceAmount()) || ObjectUtil.notEqual(reduceFee, boilerTaskOrderDO.getReduceFee()) || ObjectUtil.notEqual(orderFee, boilerTaskOrderDO.getActualAmount())) {
|
|
|
orderReportService.updateFeeBoiler(id);
|
|
|
@@ -3889,6 +4003,7 @@ public class BoilerTaskOrderServiceImpl extends ServiceImpl<BoilerTaskOrderMappe
|
|
|
vo.setFee(BigDecimal.ZERO);
|
|
|
}
|
|
|
vo.setIsFee(templateDO.getIsFee());
|
|
|
+ vo.setItemType(templateDO.getItemType());
|
|
|
vo.setFee("1".equals(templateDO.getIsFee()) ? ConversionUtil.convert(templateDO.getFee()) : BigDecimal.ZERO);
|
|
|
//vo.setRecordTemplateUrl(templateDO.getRecordTemplateUrl());
|
|
|
//vo.setReportTemplateUrl(templateDO.getReportTemplateUrl());
|
|
|
@@ -3908,7 +4023,20 @@ public class BoilerTaskOrderServiceImpl extends ServiceImpl<BoilerTaskOrderMappe
|
|
|
vo.setFee(BigDecimal.ZERO);
|
|
|
}
|
|
|
vo.setIsFee(templateDO.getIsFee());
|
|
|
+ vo.setItemType(templateDO.getItemType());
|
|
|
+ vo.setFee("1".equals(templateDO.getIsFee()) ? ConversionUtil.convert(templateDO.getFee()) : BigDecimal.ZERO);
|
|
|
+ } else if ("FEE".equals(templateDO.getItemType())) {
|
|
|
+ vo.setOrderId(reqVO.getOrderId());
|
|
|
+ //repsVO.setName(dynamicTbDO.getTbName());
|
|
|
+ vo.setConnectId(templateDO.getId());
|
|
|
+ vo.setName(templateDO.getProjectName());
|
|
|
+ vo.setIsFee(templateDO.getIsFee());
|
|
|
vo.setFee("1".equals(templateDO.getIsFee()) ? ConversionUtil.convert(templateDO.getFee()) : BigDecimal.ZERO);
|
|
|
+ vo.setIsAutoAmount("0");
|
|
|
+ vo.setProjectType(templateDO.getProjectType());
|
|
|
+ vo.setChargeNature(templateDO.getChargeNature());
|
|
|
+ vo.setItemType(templateDO.getItemType());
|
|
|
+ return vo;
|
|
|
}
|
|
|
vo.setFeeCalcType(templateDO.getFeeCalcType());
|
|
|
if ("1".equals(templateDO.getFeeCalcType())){
|