|
|
|
|
@ -34,6 +34,8 @@ import org.springblade.desk.oem.service.IOemStatementTaskLogService; |
|
|
|
|
import org.springblade.desk.util.PriceMatcher; |
|
|
|
|
import org.springblade.erpdata.feign.IErpDataOemClient; |
|
|
|
|
import org.springblade.system.feign.IDictBizClient; |
|
|
|
|
import org.springblade.system.feign.IDictClient; |
|
|
|
|
import org.springblade.system.pojo.entity.Dict; |
|
|
|
|
import org.springblade.system.pojo.entity.DictBiz; |
|
|
|
|
import org.springframework.beans.BeanUtils; |
|
|
|
|
import org.springframework.stereotype.Service; |
|
|
|
|
@ -65,7 +67,7 @@ public class OemStatementServiceImpl extends BaseServiceImpl<OemStatementMapper, |
|
|
|
|
private PlatingTypeRulesMapper platingTypeRulesMapper; |
|
|
|
|
|
|
|
|
|
@Resource |
|
|
|
|
private IDictBizClient dictBizClient; |
|
|
|
|
private IDictClient dictClient; |
|
|
|
|
|
|
|
|
|
@Resource |
|
|
|
|
private IOemStandardProcessService oemStandardProcessService; |
|
|
|
|
@ -558,22 +560,20 @@ public class OemStatementServiceImpl extends BaseServiceImpl<OemStatementMapper, |
|
|
|
|
* */ |
|
|
|
|
if (3 == oemSettleAccountsApproval.getApprovalStatus()) { |
|
|
|
|
//审核通过
|
|
|
|
|
updateWrapper.set("approval_status", OemStatementEntity.APPROVAL_STATUS_VIA) |
|
|
|
|
updateWrapper.set("ros_status", OemStatementEntity.PENDING_PUSH_SETTLEMENT) |
|
|
|
|
.set("memo", "外协结算完成") |
|
|
|
|
.set("ros_status", OemStatementEntity.OK_SETTLEMENT) |
|
|
|
|
.in("id", ids); |
|
|
|
|
} else { |
|
|
|
|
//审核不通过:(1)原因为不需要结算的更新为【无需结算】(2)原因是基础数据有误的更新为【结算异常】
|
|
|
|
|
if (1 == oemSettleAccountsApproval.getReason()) { |
|
|
|
|
updateWrapper.set("approval_status", OemStatementEntity.APPROVAL_STATUS_VIA) |
|
|
|
|
updateWrapper.set("ros_status", OemStatementEntity.ERR_SETTLEMENT) |
|
|
|
|
.set("memo", "无需结算").set("total_price", null).set("unit_price", null) |
|
|
|
|
.set("quotation", "") |
|
|
|
|
.set("ros_status", OemStatementEntity.NOT_NEED_SETTLEMENT) |
|
|
|
|
|
|
|
|
|
.in("id", ids); |
|
|
|
|
} else { |
|
|
|
|
updateWrapper.set("approval_status", OemStatementEntity.APPROVAL_STATUS_FAIL) |
|
|
|
|
updateWrapper.set("ros_status", OemStatementEntity.ERR_SETTLEMENT) |
|
|
|
|
.set("memo", "基础数据有误") |
|
|
|
|
.set("ros_status", OemStatementEntity.ERR_SETTLEMENT) |
|
|
|
|
.in("id", ids); |
|
|
|
|
} |
|
|
|
|
} |
|
|
|
|
@ -588,7 +588,6 @@ public class OemStatementServiceImpl extends BaseServiceImpl<OemStatementMapper, |
|
|
|
|
.map(statementVO -> { |
|
|
|
|
OemStatementEntity entity = new OemStatementEntity(); |
|
|
|
|
BeanUtils.copyProperties(statementVO, entity); |
|
|
|
|
entity.setApprovalStatus(OemStatementEntity.APPROVAL_STATUS_VIA); |
|
|
|
|
entity.setRosStatus(OemStatementEntity.ERR_SETTLEMENT); |
|
|
|
|
entity.setMemo("无需结算"); |
|
|
|
|
entity.setTotalPrice(null); |
|
|
|
|
@ -608,7 +607,7 @@ public class OemStatementServiceImpl extends BaseServiceImpl<OemStatementMapper, |
|
|
|
|
} else { |
|
|
|
|
// 更新,使用UpdateWrapper确保null值被更新
|
|
|
|
|
LambdaUpdateWrapper<OemStatementEntity> wrapper = Wrappers.lambdaUpdate(); |
|
|
|
|
wrapper.set(OemStatementEntity::getTotalPrice, entity.getTotalPrice()).set(OemStatementEntity::getUnitPrice, entity.getUnitPrice()).set(OemStatementEntity::getQuotation, entity.getQuotation()).set(OemStatementEntity::getApprovalStatus, entity.getApprovalStatus()).set(OemStatementEntity::getRosStatus, entity.getRosStatus()).set(OemStatementEntity::getMemo, entity.getMemo()).set(OemStatementEntity::getUpdateTime, entity.getUpdateTime()).eq(OemStatementEntity::getId, entity.getId()); |
|
|
|
|
// wrapper.set(OemStatementEntity::getTotalPrice, entity.getTotalPrice()).set(OemStatementEntity::getUnitPrice, entity.getUnitPrice()).set(OemStatementEntity::getQuotation, entity.getQuotation()).set(OemStatementEntity::getApprovalStatus, entity.getApprovalStatus()).set(OemStatementEntity::getRosStatus, entity.getRosStatus()).set(OemStatementEntity::getMemo, entity.getMemo()).set(OemStatementEntity::getUpdateTime, entity.getUpdateTime()).eq(OemStatementEntity::getId, entity.getId());
|
|
|
|
|
|
|
|
|
|
baseMapper.update(null, wrapper); |
|
|
|
|
} |
|
|
|
|
@ -703,9 +702,8 @@ public class OemStatementServiceImpl extends BaseServiceImpl<OemStatementMapper, |
|
|
|
|
PriceSheetVO priceSheet = woNoPriceSheetList.get(0); |
|
|
|
|
//唯一使用此报价单**结算**
|
|
|
|
|
BigDecimal unitPrice = new BigDecimal(priceSheet.getPrice()); |
|
|
|
|
BigDecimal qty = new BigDecimal(statementVO.getMakeQty()); |
|
|
|
|
BigDecimal qty = statementVO.getMakeQty(); |
|
|
|
|
statementVO.setRosStatus(StatementVO.IN_SETTLEMENT); |
|
|
|
|
statementVO.setApprovalStatus(StatementVO.APPROVAL_STATUS_UNDER); |
|
|
|
|
statementVO.setUnitPrice(unitPrice); |
|
|
|
|
statementVO.setUnit(priceSheet.getPrtum()); |
|
|
|
|
statementVO.setTotalPrice(unitPrice.multiply(qty)); |
|
|
|
|
@ -743,7 +741,7 @@ public class OemStatementServiceImpl extends BaseServiceImpl<OemStatementMapper, |
|
|
|
|
if (priceSheetList.size() < 1) { |
|
|
|
|
//结算异常:无报价记录结算结果
|
|
|
|
|
statementVO.setRosStatus(StatementVO.ERR_SETTLEMENT); |
|
|
|
|
statementVO.setMemo(String.format("外协厂商【%s】,工序内容【%s】,物料名【%s】,质量等级【%s】-未找到报价", statementVO.getOcName(), statementVO.getPartName(), statementVO.getPartName(), statementVO.getProdIdent())); |
|
|
|
|
statementVO.setMemo(String.format("外协厂商【%s】,工序内容【%s】,物料名【%s】,质量等级【%s】-未找到报价", statementVO.getOcName(), statementVO.getPartName(), statementVO.getPartName(), statementVO.getProductIdent())); |
|
|
|
|
return true; |
|
|
|
|
} |
|
|
|
|
//保存结果,结束当前规则匹配,进入下一规则匹配
|
|
|
|
|
@ -867,7 +865,6 @@ public class OemStatementServiceImpl extends BaseServiceImpl<OemStatementMapper, |
|
|
|
|
//如总价大于0,则报价成功
|
|
|
|
|
if (totalPrice.compareTo(BigDecimal.ZERO) > 0) { |
|
|
|
|
statementVO.setRosStatus(StatementVO.IN_SETTLEMENT); |
|
|
|
|
statementVO.setApprovalStatus(StatementVO.APPROVAL_STATUS_UNDER); |
|
|
|
|
statementVO.setTotalPrice(totalPrice); |
|
|
|
|
statementVO.setMemo("结算中"); |
|
|
|
|
statementVO.setQuotation(quotation); |
|
|
|
|
@ -1032,9 +1029,8 @@ public class OemStatementServiceImpl extends BaseServiceImpl<OemStatementMapper, |
|
|
|
|
//唯一使用此报价单**结算**
|
|
|
|
|
PriceSheetVO priceSheet = priceSheetList.get(0); |
|
|
|
|
BigDecimal unitPrice = new BigDecimal(priceSheet.getPrice()); |
|
|
|
|
BigDecimal qty = new BigDecimal(statementVO.getMakeQty()); |
|
|
|
|
BigDecimal qty = statementVO.getMakeQty(); |
|
|
|
|
statementVO.setRosStatus(StatementVO.IN_SETTLEMENT); |
|
|
|
|
statementVO.setApprovalStatus(StatementVO.APPROVAL_STATUS_UNDER); |
|
|
|
|
statementVO.setUnitPrice(unitPrice); |
|
|
|
|
statementVO.setUnit(priceSheet.getPrtum()); |
|
|
|
|
statementVO.setTotalPrice(unitPrice.multiply(qty)); |
|
|
|
|
@ -1073,9 +1069,8 @@ public class OemStatementServiceImpl extends BaseServiceImpl<OemStatementMapper, |
|
|
|
|
//唯一使用此报价单**结算**
|
|
|
|
|
PriceSheetVO priceSheet = priceSheetVOS.get(0); |
|
|
|
|
BigDecimal unitPrice = new BigDecimal(priceSheet.getPrice()); |
|
|
|
|
BigDecimal qty = new BigDecimal(statementVO.getMakeQty()); |
|
|
|
|
BigDecimal qty = statementVO.getMakeQty(); |
|
|
|
|
statementVO.setRosStatus(StatementVO.IN_SETTLEMENT); |
|
|
|
|
statementVO.setApprovalStatus(StatementVO.APPROVAL_STATUS_UNDER); |
|
|
|
|
statementVO.setUnitPrice(unitPrice); |
|
|
|
|
statementVO.setUnit(priceSheet.getPrtum()); |
|
|
|
|
statementVO.setTotalPrice(unitPrice.multiply(qty)); |
|
|
|
|
@ -1086,11 +1081,7 @@ public class OemStatementServiceImpl extends BaseServiceImpl<OemStatementMapper, |
|
|
|
|
//3.如果阶梯价是按单件面积,判断报价是否唯一
|
|
|
|
|
List<PriceSheetVO> priceSheetVOS = StairPriceSheetMap.get("单批阶梯价(按单件面积)"); |
|
|
|
|
//获取结算单的单件面积,匹配报价里的阶梯上下限
|
|
|
|
|
String ypArea = statementVO.getYpArea(); |
|
|
|
|
if (ypArea != null && ypArea.endsWith(".")) { |
|
|
|
|
ypArea = ypArea.substring(0, ypArea.length() - 1); |
|
|
|
|
} |
|
|
|
|
double ypAreaValue = Double.parseDouble(ypArea); |
|
|
|
|
double ypAreaValue = statementVO.getYpArea().doubleValue(); |
|
|
|
|
if (null != priceSheetVOS && priceSheetVOS.size() > 1) { |
|
|
|
|
List<PriceSheetVO> priceSheetVOList = priceSheetVOS.stream().filter(vo -> { |
|
|
|
|
//现场数据库里lower是上限,upper反而是下限
|
|
|
|
|
@ -1106,9 +1097,8 @@ public class OemStatementServiceImpl extends BaseServiceImpl<OemStatementMapper, |
|
|
|
|
//唯一使用此报价单**结算**
|
|
|
|
|
PriceSheetVO priceSheet = priceSheetVOList.get(0); |
|
|
|
|
BigDecimal unitPrice = new BigDecimal(priceSheet.getPrice()); |
|
|
|
|
BigDecimal qty = new BigDecimal(statementVO.getMakeQty()); |
|
|
|
|
BigDecimal qty = statementVO.getMakeQty(); |
|
|
|
|
statementVO.setRosStatus(StatementVO.IN_SETTLEMENT); |
|
|
|
|
statementVO.setApprovalStatus(StatementVO.APPROVAL_STATUS_UNDER); |
|
|
|
|
statementVO.setUnitPrice(unitPrice); |
|
|
|
|
statementVO.setUnit(priceSheet.getPrtum()); |
|
|
|
|
statementVO.setTotalPrice(unitPrice.multiply(qty)); |
|
|
|
|
@ -1145,9 +1135,8 @@ public class OemStatementServiceImpl extends BaseServiceImpl<OemStatementMapper, |
|
|
|
|
//唯一使用此报价单**结算**
|
|
|
|
|
PriceSheetVO priceSheet = priceSheetVOList.get(0); |
|
|
|
|
BigDecimal unitPrice = new BigDecimal(priceSheet.getPrice()); |
|
|
|
|
BigDecimal qty = new BigDecimal(statementVO.getMakeQty()); |
|
|
|
|
BigDecimal qty = statementVO.getMakeQty(); |
|
|
|
|
statementVO.setRosStatus(StatementVO.IN_SETTLEMENT); |
|
|
|
|
statementVO.setApprovalStatus(StatementVO.APPROVAL_STATUS_UNDER); |
|
|
|
|
statementVO.setUnitPrice(unitPrice); |
|
|
|
|
statementVO.setUnit(priceSheet.getPrtum()); |
|
|
|
|
statementVO.setTotalPrice(unitPrice.multiply(qty)); |
|
|
|
|
@ -1191,7 +1180,7 @@ public class OemStatementServiceImpl extends BaseServiceImpl<OemStatementMapper, |
|
|
|
|
*/ |
|
|
|
|
private boolean matchesCondition2(PriceSheetVO priceSheet, StatementVO statementVO) { |
|
|
|
|
String prtlotno = priceSheet.getPrtlotno(); |
|
|
|
|
String prodIdent = statementVO.getProdIdent(); |
|
|
|
|
String prodIdent = statementVO.getProductIdent(); |
|
|
|
|
|
|
|
|
|
// 如果 prtlotno 是 "/",条件满足
|
|
|
|
|
if (null == prtlotno || "/".equals(prtlotno)) { |
|
|
|
|
@ -1259,13 +1248,13 @@ public class OemStatementServiceImpl extends BaseServiceImpl<OemStatementMapper, |
|
|
|
|
*/ |
|
|
|
|
private Map<String, String> getProcessCapabilityTypeMap() { |
|
|
|
|
Map<String, String> dictMap = new HashMap<>(); |
|
|
|
|
R<List<DictBiz>> RProcessCapabilityType = dictBizClient.getList("ProcessCapabilityType"); |
|
|
|
|
R<List<Dict>> RProcessCapabilityType = dictClient.getList("ProcessCapabilityType"); |
|
|
|
|
if (RProcessCapabilityType.isSuccess()) { |
|
|
|
|
List<DictBiz> dictList = RProcessCapabilityType.getData(); |
|
|
|
|
List<Dict> dictList = RProcessCapabilityType.getData(); |
|
|
|
|
dictMap = dictList.stream() |
|
|
|
|
.collect(Collectors.toMap( |
|
|
|
|
DictBiz::getDictKey, |
|
|
|
|
DictBiz::getDictValue, |
|
|
|
|
Dict::getDictKey, |
|
|
|
|
Dict::getDictValue, |
|
|
|
|
(oldVal, newVal) -> oldVal |
|
|
|
|
)); |
|
|
|
|
} |
|
|
|
|
@ -1284,28 +1273,30 @@ public class OemStatementServiceImpl extends BaseServiceImpl<OemStatementMapper, |
|
|
|
|
.map(StatementVO::getWoId) |
|
|
|
|
.filter(woId -> woId != null) |
|
|
|
|
.collect(Collectors.toList()); |
|
|
|
|
// 查询存在已结算数据的订单
|
|
|
|
|
List<Long> settledWoIds = baseMapper.selectSettledWoIds(woIds); |
|
|
|
|
// 存在已结算数据的订单跳过,不存在已结算数据的订单标记为重复镀后入库
|
|
|
|
|
statementVOS = statementVOS.stream() |
|
|
|
|
.filter(vo -> { |
|
|
|
|
boolean needRemove = vo.getId() != null |
|
|
|
|
&& vo.getWoId() != null |
|
|
|
|
&& settledWoIds.contains(vo.getWoId()); |
|
|
|
|
return !needRemove; |
|
|
|
|
}) |
|
|
|
|
.map(vo -> { |
|
|
|
|
if (vo.getId() != null) { |
|
|
|
|
OemStatementEntity entity = new OemStatementEntity(); |
|
|
|
|
entity.setId(vo.getId()); |
|
|
|
|
entity.setRosStatus(OemStatementEntity.ERR_SETTLEMENT); |
|
|
|
|
entity.setMemo("重复镀后入库"); |
|
|
|
|
saves.add(entity); |
|
|
|
|
vo.setId(null); // 清空ID
|
|
|
|
|
} |
|
|
|
|
return vo; |
|
|
|
|
}) |
|
|
|
|
.collect(Collectors.toList()); |
|
|
|
|
if (CollectionUtils.isNotEmpty(woIds)) { |
|
|
|
|
// 查询存在已结算数据的订单
|
|
|
|
|
List<Long> settledWoIds = baseMapper.selectSettledWoIds(woIds); |
|
|
|
|
// 存在已结算数据的订单跳过,不存在已结算数据的订单标记为重复镀后入库
|
|
|
|
|
statementVOS = statementVOS.stream() |
|
|
|
|
.filter(vo -> { |
|
|
|
|
boolean needRemove = vo.getId() != null |
|
|
|
|
&& vo.getWoId() != null |
|
|
|
|
&& settledWoIds.contains(vo.getWoId()); |
|
|
|
|
return !needRemove; |
|
|
|
|
}) |
|
|
|
|
.map(vo -> { |
|
|
|
|
if (vo.getId() != null) { |
|
|
|
|
OemStatementEntity entity = new OemStatementEntity(); |
|
|
|
|
entity.setId(vo.getId()); |
|
|
|
|
entity.setRosStatus(OemStatementEntity.ERR_SETTLEMENT); |
|
|
|
|
entity.setMemo("重复镀后入库"); |
|
|
|
|
saves.add(entity); |
|
|
|
|
vo.setId(null); // 清空ID
|
|
|
|
|
} |
|
|
|
|
return vo; |
|
|
|
|
}) |
|
|
|
|
.collect(Collectors.toList()); |
|
|
|
|
} |
|
|
|
|
return statementVOS; |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
@ -1545,19 +1536,64 @@ public class OemStatementServiceImpl extends BaseServiceImpl<OemStatementMapper, |
|
|
|
|
* @return |
|
|
|
|
*/ |
|
|
|
|
private List<PriceSheetVO> getPriceSheetsWithCondition(String oemName) { |
|
|
|
|
PriceSheetQuery query = new PriceSheetQuery(); |
|
|
|
|
query.setOcName(oemName); |
|
|
|
|
query.setValidflags(Arrays.asList("有效", "无效")); |
|
|
|
|
query.setPapertype("外协定价"); |
|
|
|
|
query.setPricetype("工序协作"); |
|
|
|
|
R<Page<PriceSheetVO>> pageR = erpDataOemClient.priceSheetData(query, new Query() {{ |
|
|
|
|
setSize(99999); |
|
|
|
|
}}); |
|
|
|
|
|
|
|
|
|
if (pageR != null && pageR.getData() != null) { |
|
|
|
|
return pageR.getData().getRecords(); |
|
|
|
|
} |
|
|
|
|
return Collections.emptyList(); |
|
|
|
|
// PriceSheetQuery query = new PriceSheetQuery();
|
|
|
|
|
// query.setOcName(oemName);
|
|
|
|
|
// query.setValidflags(Arrays.asList("有效", "无效"));
|
|
|
|
|
// query.setPapertype("外协定价");
|
|
|
|
|
// query.setPricetype("工序协作");
|
|
|
|
|
// R<Page<PriceSheetVO>> pageR = erpDataOemClient.priceSheetData(query, new Query() {{
|
|
|
|
|
// setSize(99999);
|
|
|
|
|
// }});
|
|
|
|
|
//
|
|
|
|
|
// if (pageR != null && pageR.getData() != null) {
|
|
|
|
|
// return pageR.getData().getRecords();
|
|
|
|
|
// }
|
|
|
|
|
// return Collections.emptyList();
|
|
|
|
|
//假数据测试用
|
|
|
|
|
List<PriceSheetVO> priceSheetAllList = new ArrayList<>(); |
|
|
|
|
PriceSheetVO priceSheet1 = new PriceSheetVO(); |
|
|
|
|
priceSheet1.setPrice("60"); |
|
|
|
|
priceSheet1.setSplycode("wx000001"); |
|
|
|
|
priceSheet1.setSplyname(oemName); |
|
|
|
|
priceSheet1.setPrtum("件"); |
|
|
|
|
priceSheet1.setWono("110"); |
|
|
|
|
priceSheet1.setSeqid("GXJG-20250228018"); |
|
|
|
|
priceSheet1.setGxinfo("光亮腐蚀"); |
|
|
|
|
priceSheet1.setStartdat("2026-01-15"); |
|
|
|
|
priceSheet1.setValiddat("2026-12-31"); |
|
|
|
|
priceSheet1.setStairflag("1"); |
|
|
|
|
priceSheet1.setCoating_desc("涂色标"); |
|
|
|
|
priceSheet1.setPrtlotno("JHT"); |
|
|
|
|
priceSheetAllList.add(priceSheet1); |
|
|
|
|
PriceSheetVO priceSheet2 = new PriceSheetVO(); |
|
|
|
|
priceSheet2.setPrice("120"); |
|
|
|
|
priceSheet2.setSplycode("wx000001"); |
|
|
|
|
priceSheet2.setSplyname(oemName); |
|
|
|
|
priceSheet2.setPrtum("件"); |
|
|
|
|
priceSheet2.setWono("110"); |
|
|
|
|
priceSheet2.setSeqid("GXJG-20250228018"); |
|
|
|
|
priceSheet2.setGxinfo("光亮腐蚀"); |
|
|
|
|
priceSheet2.setStartdat("2026-01-15"); |
|
|
|
|
priceSheet2.setValiddat("2026-12-31"); |
|
|
|
|
priceSheet2.setStairflag("1"); |
|
|
|
|
priceSheet2.setCoating_desc("涂色带"); |
|
|
|
|
priceSheet2.setPrtlotno("JHT"); |
|
|
|
|
priceSheetAllList.add(priceSheet2); |
|
|
|
|
PriceSheetVO priceSheet3 = new PriceSheetVO(); |
|
|
|
|
priceSheet3.setPrice("180"); |
|
|
|
|
priceSheet3.setSplycode("wx000001"); |
|
|
|
|
priceSheet3.setSplyname(oemName); |
|
|
|
|
priceSheet3.setPrtum("件"); |
|
|
|
|
priceSheet3.setWono("110"); |
|
|
|
|
priceSheet3.setSeqid("GXJG-20250228018"); |
|
|
|
|
priceSheet3.setGxinfo("光亮腐蚀"); |
|
|
|
|
priceSheet3.setStartdat("2026-01-15"); |
|
|
|
|
priceSheet3.setValiddat("2026-12-31"); |
|
|
|
|
priceSheet3.setStairflag("1"); |
|
|
|
|
priceSheet3.setCoating_desc("涂箭头"); |
|
|
|
|
priceSheet3.setPrtlotno("JHT"); |
|
|
|
|
priceSheetAllList.add(priceSheet3); |
|
|
|
|
return priceSheetAllList; |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
/** |
|
|
|
|
@ -1636,7 +1672,7 @@ public class OemStatementServiceImpl extends BaseServiceImpl<OemStatementMapper, |
|
|
|
|
String ocCode = statementVO.getOcCode(); |
|
|
|
|
String psName = statementVO.getPsName(); |
|
|
|
|
String partCode = statementVO.getPartCode(); |
|
|
|
|
String prodIdent = statementVO.getProdIdent(); |
|
|
|
|
String prodIdent = statementVO.getProductIdent(); |
|
|
|
|
String woCode = statementVO.getWoCode(); |
|
|
|
|
for (PriceSheetVO sheet : priceSheetList) { |
|
|
|
|
boolean match = StringUtils.equals(sheet.getSplycode(), ocCode) && StringUtils.equals(sheet.getGxinfo(), psName) && StringUtils.equals(sheet.getPrtno(), partCode) && StringUtils.equals(sheet.getPrtlotno(), prodIdent) && StringUtils.equals(sheet.getWono(), woCode); |
|
|
|
|
@ -1667,7 +1703,7 @@ public class OemStatementServiceImpl extends BaseServiceImpl<OemStatementMapper, |
|
|
|
|
String ocCode = statementVO.getOcCode(); |
|
|
|
|
String psName = statementVO.getPsName(); |
|
|
|
|
String partCode = statementVO.getPartCode(); |
|
|
|
|
String prodIdent = statementVO.getProdIdent(); |
|
|
|
|
String prodIdent = statementVO.getProductIdent(); |
|
|
|
|
for (PriceSheetVO sheet : priceSheetList) { |
|
|
|
|
boolean match = StringUtils.equals(sheet.getSplycode(), ocCode) && StringUtils.equals(sheet.getGxinfo(), psName) && StringUtils.equals(sheet.getPrtno(), partCode) && StringUtils.equals(sheet.getPrtlotno(), prodIdent); |
|
|
|
|
if (match && price != null && price.compareTo(BigDecimal.ZERO) != 0) { |
|
|
|
|
@ -1698,8 +1734,8 @@ public class OemStatementServiceImpl extends BaseServiceImpl<OemStatementMapper, |
|
|
|
|
return false; |
|
|
|
|
} |
|
|
|
|
String ocCode = statementVO.getOcCode(); |
|
|
|
|
String prodIdent = statementVO.getProdIdent(); |
|
|
|
|
String woCode = statementVO.getWoCode(); |
|
|
|
|
String prodIdent = statementVO.getProductIdent(); |
|
|
|
|
String woCode = statementVO.getYpCode(); |
|
|
|
|
for (PriceSheetVO sheet : priceSheetList) { |
|
|
|
|
boolean match = StringUtils.equals(sheet.getSplycode(), ocCode) && StringUtils.equals(sheet.getPrtlotno(), prodIdent) && StringUtils.equals(sheet.getWono(), woCode) |
|
|
|
|
// TODO 报价单标准工艺代码没加
|
|
|
|
|
@ -1728,7 +1764,7 @@ public class OemStatementServiceImpl extends BaseServiceImpl<OemStatementMapper, |
|
|
|
|
return false; |
|
|
|
|
} |
|
|
|
|
String ocCode = statementVO.getOcCode(); |
|
|
|
|
String prodIdent = statementVO.getProdIdent(); |
|
|
|
|
String prodIdent = statementVO.getProductIdent(); |
|
|
|
|
for (PriceSheetVO sheet : priceSheetList) { |
|
|
|
|
boolean match = StringUtils.equals(sheet.getSplycode(), ocCode) && StringUtils.equals(sheet.getPrtlotno(), prodIdent) |
|
|
|
|
// TODO 报价单标准工艺代码没加
|
|
|
|
|
@ -1793,7 +1829,7 @@ public class OemStatementServiceImpl extends BaseServiceImpl<OemStatementMapper, |
|
|
|
|
private boolean setSettlementInfo(StatementVO statementVO, PriceSheetVO sheet) { |
|
|
|
|
try { |
|
|
|
|
BigDecimal unitPrice = new BigDecimal(sheet.getPrice().trim()); |
|
|
|
|
BigDecimal qty = new BigDecimal(statementVO.getMakeQty() == null ? "0" : statementVO.getMakeQty().trim()); |
|
|
|
|
BigDecimal qty = statementVO.getMakeQty(); |
|
|
|
|
BigDecimal totalArea = new BigDecimal(statementVO.getTotalArea() == null ? "0" : statementVO.getTotalArea().trim()); |
|
|
|
|
BigDecimal totalPrice; |
|
|
|
|
// 平方分米
|
|
|
|
|
@ -1804,7 +1840,6 @@ public class OemStatementServiceImpl extends BaseServiceImpl<OemStatementMapper, |
|
|
|
|
} |
|
|
|
|
statementVO.setRosStatus(StatementVO.IN_SETTLEMENT); |
|
|
|
|
statementVO.setSettleTime(new Date()); |
|
|
|
|
statementVO.setApprovalStatus(StatementVO.APPROVAL_STATUS_UNDER); |
|
|
|
|
statementVO.setUnitPrice(unitPrice); |
|
|
|
|
statementVO.setUnit(sheet.getPrtum()); |
|
|
|
|
statementVO.setTotalPrice(totalPrice); |
|
|
|
|
@ -1837,10 +1872,7 @@ public class OemStatementServiceImpl extends BaseServiceImpl<OemStatementMapper, |
|
|
|
|
}).collect(Collectors.groupingBy(PriceSheetVO::getCoating_desc, Collectors.toList())); |
|
|
|
|
// 如果没有任何报价记录
|
|
|
|
|
if (coatingDescPriceSheetMap.isEmpty()) { |
|
|
|
|
//结算异常:无报价记录结算结果
|
|
|
|
|
statementVO.setRosStatus(StatementVO.ERR_SETTLEMENT); |
|
|
|
|
statementVO.setMemo("未找到报价单"); |
|
|
|
|
return true; |
|
|
|
|
return false; |
|
|
|
|
} |
|
|
|
|
//总价
|
|
|
|
|
BigDecimal totalPrice = BigDecimal.ZERO; |
|
|
|
|
@ -1850,23 +1882,26 @@ public class OemStatementServiceImpl extends BaseServiceImpl<OemStatementMapper, |
|
|
|
|
Integer tsbNum = StringUtils.isNotEmpty(statementVO.getTsbNum()) ? Integer.valueOf(statementVO.getTsbNum()) : 0; |
|
|
|
|
//涂色带
|
|
|
|
|
Integer tsdNum = StringUtils.isNotEmpty(statementVO.getTsdNum()) ? Integer.valueOf(statementVO.getTsdNum()) : 0; |
|
|
|
|
if ((tjtNum > 0 && !coatingDescPriceSheetMap.containsKey("涂箭头")) || (tsdNum > 0 && !coatingDescPriceSheetMap.containsKey("涂色带")) || (tsbNum > 0 && !coatingDescPriceSheetMap.containsKey("涂色标"))) { |
|
|
|
|
return false; |
|
|
|
|
} |
|
|
|
|
//报价单号
|
|
|
|
|
String quotation = ""; |
|
|
|
|
if (tjtNum > 0 && coatingDescPriceSheetMap.containsKey("涂箭头")) { |
|
|
|
|
if (tjtNum > 0) { |
|
|
|
|
List<PriceSheetVO> tjtPriceSheetList = coatingDescPriceSheetMap.get("涂箭头"); |
|
|
|
|
BigDecimal unitPrice = new BigDecimal(tjtPriceSheetList.get(0).getPrice()); |
|
|
|
|
BigDecimal itemTotalPrice = unitPrice.multiply(BigDecimal.valueOf(tjtNum)); |
|
|
|
|
totalPrice = totalPrice.add(itemTotalPrice); |
|
|
|
|
quotation = tjtPriceSheetList.get(0).getSeqid(); |
|
|
|
|
} |
|
|
|
|
if (tsdNum > 0 && coatingDescPriceSheetMap.containsKey("涂色带")) { |
|
|
|
|
if (tsdNum > 0) { |
|
|
|
|
List<PriceSheetVO> tsdPriceSheetList = coatingDescPriceSheetMap.get("涂色带"); |
|
|
|
|
BigDecimal unitPrice = new BigDecimal(tsdPriceSheetList.get(0).getPrice()); |
|
|
|
|
BigDecimal itemTotalPrice = unitPrice.multiply(BigDecimal.valueOf(tsdNum)); |
|
|
|
|
totalPrice = totalPrice.add(itemTotalPrice); |
|
|
|
|
quotation = tsdPriceSheetList.get(0).getSeqid(); |
|
|
|
|
} |
|
|
|
|
if (tsbNum > 0 && coatingDescPriceSheetMap.containsKey("涂色标")) { |
|
|
|
|
if (tsbNum > 0) { |
|
|
|
|
List<PriceSheetVO> tsbPriceSheetList = coatingDescPriceSheetMap.get("涂色标"); |
|
|
|
|
//唯一使用此报价单**结算**
|
|
|
|
|
BigDecimal unitPrice = new BigDecimal(tsbPriceSheetList.get(0).getPrice()); |
|
|
|
|
@ -1874,21 +1909,12 @@ public class OemStatementServiceImpl extends BaseServiceImpl<OemStatementMapper, |
|
|
|
|
totalPrice = totalPrice.add(itemTotalPrice); |
|
|
|
|
quotation = tsbPriceSheetList.get(0).getSeqid(); |
|
|
|
|
} |
|
|
|
|
//如总价大于0,则报价成功
|
|
|
|
|
if (totalPrice.compareTo(BigDecimal.ZERO) > 0) { |
|
|
|
|
statementVO.setRosStatus(StatementVO.IN_SETTLEMENT); |
|
|
|
|
statementVO.setSettleTime(new Date()); |
|
|
|
|
statementVO.setApprovalStatus(StatementVO.APPROVAL_STATUS_UNDER); |
|
|
|
|
statementVO.setTotalPrice(totalPrice); |
|
|
|
|
statementVO.setMemo("结算中"); |
|
|
|
|
statementVO.setQuotation(quotation); |
|
|
|
|
return true; |
|
|
|
|
} else { |
|
|
|
|
//结算异常:无报价记录结算结果
|
|
|
|
|
statementVO.setRosStatus(StatementVO.ERR_SETTLEMENT); |
|
|
|
|
statementVO.setMemo("未找到报价单"); |
|
|
|
|
return true; |
|
|
|
|
} |
|
|
|
|
statementVO.setRosStatus(StatementVO.IN_SETTLEMENT); |
|
|
|
|
statementVO.setSettleTime(new Date()); |
|
|
|
|
statementVO.setTotalPrice(totalPrice); |
|
|
|
|
statementVO.setMemo("结算中"); |
|
|
|
|
statementVO.setQuotation(quotation); |
|
|
|
|
return true; |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
/** |
|
|
|
|
@ -1900,28 +1926,44 @@ public class OemStatementServiceImpl extends BaseServiceImpl<OemStatementMapper, |
|
|
|
|
*/ |
|
|
|
|
private boolean ruleTieredPricing(StatementVO statementVO, PriceSheetVO priceSheet) { |
|
|
|
|
//匹配阶梯价
|
|
|
|
|
// 非阶梯价直接返回
|
|
|
|
|
if ("1".equals(priceSheet.getStairflag())) { |
|
|
|
|
return true; |
|
|
|
|
} |
|
|
|
|
// 单批阶梯价(按件数)
|
|
|
|
|
if (priceSheet.getStairflag().equals("4")) { |
|
|
|
|
double makeQty = Double.parseDouble(statementVO.getMakeQty()); |
|
|
|
|
double lower = Double.parseDouble(priceSheet.getLower()); |
|
|
|
|
double upper = Double.parseDouble(priceSheet.getUpper()); |
|
|
|
|
return makeQty >= upper && makeQty <= lower; |
|
|
|
|
else if ("4".equals(priceSheet.getStairflag())) { |
|
|
|
|
try { |
|
|
|
|
double makeQty = statementVO.getMakeQty().doubleValue(); |
|
|
|
|
double lower = Double.parseDouble(priceSheet.getLower()); |
|
|
|
|
double upper = Double.parseDouble(priceSheet.getUpper()); |
|
|
|
|
return makeQty >= lower && makeQty <= upper; |
|
|
|
|
} catch (Exception e) { |
|
|
|
|
return false; |
|
|
|
|
} |
|
|
|
|
} |
|
|
|
|
// 单批阶梯价(按单件面积)
|
|
|
|
|
else if (priceSheet.getStairflag().equals("5")) { |
|
|
|
|
double ypArea = Double.parseDouble(statementVO.getYpArea()); |
|
|
|
|
double lower = Double.parseDouble(priceSheet.getLower()); |
|
|
|
|
double upper = Double.parseDouble(priceSheet.getUpper()); |
|
|
|
|
return ypArea >= upper && ypArea <= lower; |
|
|
|
|
else if ("5".equals(priceSheet.getStairflag())) { |
|
|
|
|
try { |
|
|
|
|
double ypArea = statementVO.getYpArea().doubleValue(); |
|
|
|
|
double lower = Double.parseDouble(priceSheet.getLower()); |
|
|
|
|
double upper = Double.parseDouble(priceSheet.getUpper()); |
|
|
|
|
return ypArea >= lower && ypArea <= upper; |
|
|
|
|
} catch (Exception e) { |
|
|
|
|
return false; |
|
|
|
|
} |
|
|
|
|
} |
|
|
|
|
// 单批阶梯价(按单批面积)
|
|
|
|
|
else if (priceSheet.getStairflag().equals("6")) { |
|
|
|
|
double totalArea = Double.parseDouble(statementVO.getTotalArea()); |
|
|
|
|
double lower = Double.parseDouble(priceSheet.getLower()); |
|
|
|
|
double upper = Double.parseDouble(priceSheet.getUpper()); |
|
|
|
|
return totalArea >= upper && totalArea <= lower; |
|
|
|
|
else if ("6".equals(priceSheet.getStairflag())) { |
|
|
|
|
try { |
|
|
|
|
double totalArea = Double.parseDouble(statementVO.getTotalArea()); |
|
|
|
|
double lower = Double.parseDouble(priceSheet.getLower()); |
|
|
|
|
double upper = Double.parseDouble(priceSheet.getUpper()); |
|
|
|
|
return totalArea >= lower && totalArea <= upper; |
|
|
|
|
} catch (Exception e) { |
|
|
|
|
return false; |
|
|
|
|
} |
|
|
|
|
} else { |
|
|
|
|
return true; |
|
|
|
|
return false; |
|
|
|
|
} |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
|