wms费用科目修改;

This commit is contained in:
王奎兴
2026-04-11 15:35:16 +08:00
parent 51dc67957c
commit e9d4f699ee
36 changed files with 687 additions and 205 deletions
@@ -129,111 +129,137 @@ public class ContractManageApplicationService {
return contractManageDomainService.queryList(contractManageDO);
}
public BigDecimal getAmount(List<SubjectAndPriceReturn> subjectAndPriceReturnList) {
// public BigDecimal getAmount(List<SubjectAndPriceReturn> subjectAndPriceReturnList) {
// if (subjectAndPriceReturnList == null || subjectAndPriceReturnList.size() == 1) {
// SubjectAndPriceReturn subjectAndPriceReturn = subjectAndPriceReturnList.get(0);
// Long billingRulesId = subjectAndPriceReturn.getBillingRulesId();
// String name = subjectAndPriceReturn.getName();
// BillingRulesPO billingRule = contractManageDetailMapper.getBillingRules(billingRulesId);
// List<BillingParamsPO> billingParams = contractManageDetailMapper.getBillingParams(billingRulesId);
// if (billingParams != null && billingParams.size() > 0) {
// BillingParamsPO billingParam = billingParams.get(0);
// String billingParamsJson = billingParam.getBillingParamsJson();
// String preSetRules = billingParam.getPreSetRules();
// List<Map<String, Object>> preSetRulesList = JSON.parseObject(preSetRules, new TypeReference<List<Map<String, Object>>>() {
// });
// List<Map<String, Object>> billingParamsList = JSON.parseObject(billingParamsJson, new TypeReference<List<Map<String, Object>>>() {
// });
// if (billingParamsList != null && billingParamsList.size() ==2) {
// Map<String, Object> targetMap = billingParamsList.stream()
// .filter(map -> name.equals(map.get("fieldsName"))) // 关键匹配条件
// .findFirst() // 取第一个
// .orElse(null); // 没找到返回null
// String chargingId = (String) targetMap.get("chargingId");
// Integer sort = (Integer) targetMap.get("sort");
// Map<String, Object> reles = preSetRulesList.get(0);
// String price = (String) reles.get("fields"+sort);
// String billingFormula = billingRule.getBillingFormula();
// billingFormula = billingFormula.replace(chargingId, price);
// //需要判断阶梯类型进行获取各计费标志的取值,拼接公式
// List<BillingParamsDetailDTO> billingParamsEntityList = JSON.parseArray(billingParamsJson, BillingParamsDetailDTO.class);
// //将计费参数实体分成两组,即:固定参数和条件参数
// List<BillingParamsDetailDTO> fixedParamsEntityList = billingParamsEntityList.stream().filter(item -> ObjectUtil.equal(item.getLadderType(),1)).collect(Collectors.toList());
// List<BillingParamsDetailDTO> ladderParamsEntityList = billingParamsEntityList.stream().filter(item -> !ObjectUtil.equal(item.getLadderType(),1)).collect(Collectors.toList());
// if (fixedParamsEntityList != null && fixedParamsEntityList.size() > 0) {
// if (subjectAndPriceReturn.getNum() != null) {
// for (BillingParamsDetailDTO ladderParamsEntity : fixedParamsEntityList) {
// String chargingId1 = ladderParamsEntity.getChargingId();
// if (chargingId1 != chargingId) {
// billingFormula = billingFormula.replace(chargingId1, subjectAndPriceReturn.getNum().toEngineeringString());
// }
// }
// }
// }
// return DynamicCalculationUtil.calculate(billingFormula);
// } else {
//
// }
// }
// } else {
// SubjectAndPriceReturn aReturn = subjectAndPriceReturnList.get(0);
// Long id = aReturn.getBillingRulesId();
// BillingRulesPO Rule = contractManageDetailMapper.getBillingRules(id);
// String billingFormula = Rule.getBillingFormula();
// for (SubjectAndPriceReturn subjectAndPriceReturn : subjectAndPriceReturnList) {
// Long billingRulesId = subjectAndPriceReturn.getBillingRulesId();
// String name = subjectAndPriceReturn.getName();
// BillingRulesPO billingRule = contractManageDetailMapper.getBillingRules(billingRulesId);
// List<BillingParamsPO> billingParams = contractManageDetailMapper.getBillingParams(billingRulesId);
// if (billingParams != null && billingParams.size() > 0) {
// BillingParamsPO billingParam = billingParams.get(0);
// String billingParamsJson = billingParam.getBillingParamsJson();
// String preSetRules = billingParam.getPreSetRules();
// List<Map<String, Object>> preSetRulesList = JSON.parseObject(preSetRules, new TypeReference<List<Map<String, Object>>>() {
// });
// List<Map<String, Object>> billingParamsList = JSON.parseObject(billingParamsJson, new TypeReference<List<Map<String, Object>>>() {
// });
// if (billingParamsList != null && billingParamsList.size() ==2) {
// } else {
// Map<String, Object> targetMap = billingParamsList.stream()
// .filter(map -> name.equals(map.get("fieldsName"))) // 关键匹配条件
// .findFirst() // 取第一个
// .orElse(null); // 没找到返回null
// String chargingId = (String) targetMap.get("chargingId");
// Integer sort = (Integer) targetMap.get("sort");
// Map<String, Object> reles = preSetRulesList.get(0);
// String price = (String) reles.get("fields"+sort);
// //String billingFormula = billingRule.getBillingFormula();
// billingFormula = billingFormula.replace(chargingId, price);
// //需要判断阶梯类型进行获取各计费标志的取值,拼接公式
// List<BillingParamsDetailDTO> billingParamsEntityList = JSON.parseArray(billingParamsJson, BillingParamsDetailDTO.class);
// //将计费参数实体分成两组,即:固定参数和条件参数
// List<BillingParamsDetailDTO> fixedParamsEntityList = billingParamsEntityList.stream().filter(item -> ObjectUtil.equal(item.getLadderType(),1)).collect(Collectors.toList());
// List<BillingParamsDetailDTO> ladderParamsEntityList = billingParamsEntityList.stream().filter(item -> !ObjectUtil.equal(item.getLadderType(),1)).collect(Collectors.toList());
// if (fixedParamsEntityList != null && fixedParamsEntityList.size() > 0) {
// if (subjectAndPriceReturn.getNum() != null) {
// for (Map<String, Object> ladderParamsEntity : billingParamsList) {
// String chargingId1 = (String) ladderParamsEntity.get("chargingId");
// String fieldsName = (String) ladderParamsEntity.get("fieldsName");
// if ("纸箱贴标单价".equals(name)) {
// if ("纸箱数量".equals(fieldsName)) {
// billingFormula = billingFormula.replace(chargingId1, subjectAndPriceReturn.getNum().toEngineeringString());
// }
// } else if ("木箱贴标单价".equals(name)){
// if ("木箱数量".equals(fieldsName)) {
// billingFormula = billingFormula.replace(chargingId1, subjectAndPriceReturn.getNum().toEngineeringString());
// }
// }
// }
// }
// }
//
// }
// }
// }
// return DynamicCalculationUtil.calculate(billingFormula);
// }
// return BigDecimal.ZERO;
// }
public Map<String,Object> getAmount(List<SubjectAndPriceReturn> subjectAndPriceReturnList) {
Map<String,Object> map = new HashMap<>();
if (subjectAndPriceReturnList == null || subjectAndPriceReturnList.size() == 1) {
SubjectAndPriceReturn subjectAndPriceReturn = subjectAndPriceReturnList.get(0);
Long billingRulesId = subjectAndPriceReturn.getBillingRulesId();
String name = subjectAndPriceReturn.getName();
BillingRulesPO billingRule = contractManageDetailMapper.getBillingRules(billingRulesId);
List<BillingParamsPO> billingParams = contractManageDetailMapper.getBillingParams(billingRulesId);
if (billingParams != null && billingParams.size() > 0) {
BillingParamsPO billingParam = billingParams.get(0);
String billingParamsJson = billingParam.getBillingParamsJson();
String preSetRules = billingParam.getPreSetRules();
List<Map<String, Object>> preSetRulesList = JSON.parseObject(preSetRules, new TypeReference<List<Map<String, Object>>>() {
});
List<Map<String, Object>> billingParamsList = JSON.parseObject(billingParamsJson, new TypeReference<List<Map<String, Object>>>() {
});
if (billingParamsList != null && billingParamsList.size() ==2) {
Map<String, Object> targetMap = billingParamsList.stream()
.filter(map -> name.equals(map.get("fieldsName"))) // 关键匹配条件
.findFirst() // 取第一个
.orElse(null); // 没找到返回null
String chargingId = (String) targetMap.get("chargingId");
Integer sort = (Integer) targetMap.get("sort");
Map<String, Object> reles = preSetRulesList.get(0);
String price = (String) reles.get("fields"+sort);
String billingFormula = billingRule.getBillingFormula();
billingFormula = billingFormula.replace(chargingId, price);
//需要判断阶梯类型进行获取各计费标志的取值,拼接公式
List<BillingParamsDetailDTO> billingParamsEntityList = JSON.parseArray(billingParamsJson, BillingParamsDetailDTO.class);
//将计费参数实体分成两组,即:固定参数和条件参数
List<BillingParamsDetailDTO> fixedParamsEntityList = billingParamsEntityList.stream().filter(item -> ObjectUtil.equal(item.getLadderType(),1)).collect(Collectors.toList());
List<BillingParamsDetailDTO> ladderParamsEntityList = billingParamsEntityList.stream().filter(item -> !ObjectUtil.equal(item.getLadderType(),1)).collect(Collectors.toList());
if (fixedParamsEntityList != null && fixedParamsEntityList.size() > 0) {
if (subjectAndPriceReturn.getNum() != null) {
for (BillingParamsDetailDTO ladderParamsEntity : fixedParamsEntityList) {
String chargingId1 = ladderParamsEntity.getChargingId();
if (chargingId1 != chargingId) {
billingFormula = billingFormula.replace(chargingId1, subjectAndPriceReturn.getNum().toEngineeringString());
}
}
}
}
return DynamicCalculationUtil.calculate(billingFormula);
} else {
}
}
} else {
SubjectAndPriceReturn aReturn = subjectAndPriceReturnList.get(0);
Long id = aReturn.getBillingRulesId();
BillingRulesPO Rule = contractManageDetailMapper.getBillingRules(id);
String billingFormula = Rule.getBillingFormula();
for (SubjectAndPriceReturn subjectAndPriceReturn : subjectAndPriceReturnList) {
Long billingRulesId = subjectAndPriceReturn.getBillingRulesId();
String name = subjectAndPriceReturn.getName();
BillingRulesPO billingRule = contractManageDetailMapper.getBillingRules(billingRulesId);
List<BillingParamsPO> billingParams = contractManageDetailMapper.getBillingParams(billingRulesId);
if (billingParams != null && billingParams.size() > 0) {
BillingParamsPO billingParam = billingParams.get(0);
String billingParamsJson = billingParam.getBillingParamsJson();
String preSetRules = billingParam.getPreSetRules();
List<Map<String, Object>> preSetRulesList = JSON.parseObject(preSetRules, new TypeReference<List<Map<String, Object>>>() {
});
List<Map<String, Object>> billingParamsList = JSON.parseObject(billingParamsJson, new TypeReference<List<Map<String, Object>>>() {
});
if (billingParamsList != null && billingParamsList.size() ==2) {
} else {
Map<String, Object> targetMap = billingParamsList.stream()
.filter(map -> name.equals(map.get("fieldsName"))) // 关键匹配条件
.findFirst() // 取第一个
.orElse(null); // 没找到返回null
String chargingId = (String) targetMap.get("chargingId");
Integer sort = (Integer) targetMap.get("sort");
Map<String, Object> reles = preSetRulesList.get(0);
String price = (String) reles.get("fields"+sort);
//String billingFormula = billingRule.getBillingFormula();
billingFormula = billingFormula.replace(chargingId, price);
//需要判断阶梯类型进行获取各计费标志的取值,拼接公式
List<BillingParamsDetailDTO> billingParamsEntityList = JSON.parseArray(billingParamsJson, BillingParamsDetailDTO.class);
//将计费参数实体分成两组,即:固定参数和条件参数
List<BillingParamsDetailDTO> fixedParamsEntityList = billingParamsEntityList.stream().filter(item -> ObjectUtil.equal(item.getLadderType(),1)).collect(Collectors.toList());
List<BillingParamsDetailDTO> ladderParamsEntityList = billingParamsEntityList.stream().filter(item -> !ObjectUtil.equal(item.getLadderType(),1)).collect(Collectors.toList());
if (fixedParamsEntityList != null && fixedParamsEntityList.size() > 0) {
if (subjectAndPriceReturn.getNum() != null) {
for (Map<String, Object> ladderParamsEntity : billingParamsList) {
String chargingId1 = (String) ladderParamsEntity.get("chargingId");
String fieldsName = (String) ladderParamsEntity.get("fieldsName");
if ("纸箱贴标单价".equals(name)) {
if ("纸箱数量".equals(fieldsName)) {
billingFormula = billingFormula.replace(chargingId1, subjectAndPriceReturn.getNum().toEngineeringString());
}
} else if ("木箱贴标单价".equals(name)){
if ("木箱数量".equals(fieldsName)) {
billingFormula = billingFormula.replace(chargingId1, subjectAndPriceReturn.getNum().toEngineeringString());
}
}
}
}
}
}
BigDecimal price = subjectAndPriceReturn.getPrice();
BigDecimal num = subjectAndPriceReturn.getNum();
String chargingId = subjectAndPriceReturn.getChargingId();
Integer isFee = subjectAndPriceReturn.getIsFee();
if (isFee != null && isFee == 1) {
billingFormula = billingFormula.replace(chargingId, price.toEngineeringString());
} else {
billingFormula = billingFormula.replace(chargingId, num.toEngineeringString());
}
}
return DynamicCalculationUtil.calculate(billingFormula);
BigDecimal calculate = DynamicCalculationUtil.calculate(billingFormula);
map.put("amount", calculate);
map.put("billingRulesId", id);
return map;
}
return BigDecimal.ZERO;
return map;
}
public List<SubjectAndPriceReturn> getSubjectAndPrice(SubjectAndPriceDTO contractManageDTO) {
@@ -274,14 +300,16 @@ public class ContractManageApplicationService {
BillingParamsPO billingParam = billingParams.get(0);
String billingParamsJson = billingParam.getBillingParamsJson();
String preSetRules = billingParam.getPreSetRules();
Long billingParamsId = billingParam.getBillingParamsId();
List<Map<String, Object>> preSetRulesList = JSON.parseObject(preSetRules, new TypeReference<List<Map<String, Object>>>() {});
List<Map<String, Object>> billingParamsList = JSON.parseObject(billingParamsJson, new TypeReference<List<Map<String, Object>>>() {});
Map<String, Object> stringObjectMap1 = preSetRulesList.get(0);
for (Map<String, Object> stringObjectMap : billingParamsList) {
String fieldsName = (String) stringObjectMap.get("fieldsName");
if (fieldsName != null && ("装卸费单价".equals(fieldsName) ||
"纸箱贴标单价".equals(fieldsName)||"木箱贴标单价".equals(fieldsName)
|| "进出仓操作费单价".equals(fieldsName))) {
Integer isShow = (Integer) stringObjectMap.get("isShow");
Integer isFee = (Integer) stringObjectMap.get("isFee");
Integer isPush = (Integer) stringObjectMap.get("isPush");
if (isFee==1) {
Integer sort = (Integer) stringObjectMap.get("sort");
String chargingId = (String) stringObjectMap.get("chargingId");
String fields = (String) stringObjectMap.get("fields");
@@ -292,6 +320,80 @@ public class ContractManageApplicationService {
subjectAndPriceReturn.setChargingId(chargingId);
subjectAndPriceReturn.setFields(fields);
subjectAndPriceReturn.setBillingRulesId(billingRulesId);
subjectAndPriceReturn.setIsShow(isShow);
subjectAndPriceReturn.setIsFee(isFee);
subjectAndPriceReturn.setIsPush(isPush);
subjectAndPriceReturn.setRulesId(billingParamsId);
result.add(subjectAndPriceReturn);
}
}
}
}
}
}
}
}
}
return result;
}
public List<SubjectAndPriceReturn> getSubject(SubjectAndPriceDTO contractManageDTO) {
List<SubjectAndPriceReturn> result = new ArrayList<>();
Long settlementCustomersId = contractManageDTO.getSettlementCustomersId();
Long organizationId = contractManageDTO.getOrganizationId();
String sunjectCode = contractManageDTO.getSubjectCode();
Long topOrganizationId = contractManageDTO.getTopOrganizationId();
List<ContractManage> UserContractManages = contractManageMapper.selectList(new LambdaQueryWrapper<ContractManage>()
.eq(ContractManage::getSettlementCustomersId, settlementCustomersId)
.eq(ContractManage::getDelFlag, 1)
.eq(ContractManage::getOrganizationId, organizationId)
.eq(ContractManage::getTopOrganizationId, topOrganizationId)
.eq(ContractManage::getCommonContractFlag, 2));
if (UserContractManages != null && UserContractManages.size() > 0) {
}else{
List<ContractManage> commonContractManages = contractManageMapper.selectList(new LambdaQueryWrapper<ContractManage>()
.eq(ContractManage::getDelFlag, 1)
.eq(ContractManage::getOrganizationId, organizationId)
.eq(ContractManage::getTopOrganizationId, topOrganizationId)
.eq(ContractManage::getCommonContractFlag, 1));
if (commonContractManages != null && commonContractManages.size() > 0) {
ContractManage contractManage = commonContractManages.get(0);
Long contractManageId = contractManage.getContractManageId();
List<ContractManageDetail> contractManageDetails = contractManageDetailMapper.selectList(new LambdaQueryWrapper<ContractManageDetail>()
.eq(ContractManageDetail::getContractManageId, contractManageId)
.eq(ContractManageDetail::getDelFlag, 1));
if (contractManageDetails != null && contractManageDetails.size() > 0) {
for (ContractManageDetail contractManageDetail : contractManageDetails) {
String code = contractManageDetail.getFirstSubjectCode();
if (sunjectCode.equals(code)) {
Long accountingStrategyId = contractManageDetail.getAccountingStrategyId();
BillingRulesPO billingRule = contractManageDetailMapper.getBillingRules(accountingStrategyId);
if (billingRule != null) {
Long billingRulesId = billingRule.getBillingRulesId();
List<BillingParamsPO> billingParams = contractManageDetailMapper.getBillingParams(billingRulesId);
if (billingParams != null && billingParams.size() > 0) {
BillingParamsPO billingParam = billingParams.get(0);
String billingParamsJson = billingParam.getBillingParamsJson();
String preSetRules = billingParam.getPreSetRules();
Long billingParamsId = billingParam.getBillingParamsId();
List<Map<String, Object>> billingParamsList = JSON.parseObject(billingParamsJson, new TypeReference<List<Map<String, Object>>>() {});
for (Map<String, Object> stringObjectMap : billingParamsList) {
String fieldsName = (String) stringObjectMap.get("fieldsName");
Integer isShow = (Integer) stringObjectMap.get("isShow");
Integer isFee = (Integer) stringObjectMap.get("isFee");
Integer isPush = (Integer) stringObjectMap.get("isPush");
if (isShow==1) {
String chargingId = (String) stringObjectMap.get("chargingId");
String fields = (String) stringObjectMap.get("fields");
SubjectAndPriceReturn subjectAndPriceReturn = new SubjectAndPriceReturn();
subjectAndPriceReturn.setName(fieldsName);
subjectAndPriceReturn.setChargingId(chargingId);
subjectAndPriceReturn.setFields(fields);
subjectAndPriceReturn.setBillingRulesId(billingRulesId);
subjectAndPriceReturn.setIsShow(isShow);
subjectAndPriceReturn.setIsFee(isFee);
subjectAndPriceReturn.setIsPush(isPush);
subjectAndPriceReturn.setRulesId(billingParamsId);
result.add(subjectAndPriceReturn);
}
}
@@ -1,15 +1,23 @@
package com.mhd.basic.interfaces.dto.contractManage;
import lombok.Data;
import java.math.BigDecimal;
@Data
public class SubjectAndPriceReturn {
private Long rulesId;
private String name;
private BigDecimal price;
private String chargingId;
private Long billingRulesId;
private String fields;
private BigDecimal num;
private Integer isShow;
private Integer isPush;
private Integer isFee;
private String subjectCode;
private String subjectName;
private String serviceItemsCode;
private String serviceItemsName;
}
@@ -59,6 +59,17 @@ public class ContractManageApi extends BaseController{
return AjaxResult.success(contractManageApplicationService.getSubjectAndPrice(subjectAndPriceDTO));
}
/**
* 获取科目和单价
*/
@ApiOperation("获取需要显示的计费字段")
@GetMapping("/getSubject")
public AjaxResult getSubject(SubjectAndPriceDTO subjectAndPriceDTO)
{
//转换实体
return AjaxResult.success(contractManageApplicationService.getSubject(subjectAndPriceDTO));
}
/**
* 获取科目和单价
*/