外协结算

liweidong
maxiangong 4 days ago
parent 6dd168086c
commit 48073b7326
  1. 10
      blade-service/blade-desk/src/main/java/org/springblade/desk/oem/mapper/OemStatementMapper.xml
  2. 97
      blade-service/blade-desk/src/main/java/org/springblade/desk/oem/service/impl/OemStatementServiceImpl.java

@ -122,7 +122,7 @@
c.OC_NAME,
d.REWORK_CODE,
d.REWORK_NO,
d.wo_code,
f.wo_code,
d.PUT_STORE_TIME AS PUT_STORE_TIME,
to_char(d.PUT_STORE_TIME, 'yyyy-MM-dd') as PUT_STORE_DATE,
d.MAKE_QTY,
@ -158,6 +158,7 @@
INNER JOIN BS_OEM c ON a.OC_ID = c.ID AND c.IS_DELETED = 0
INNER JOIN MES_WORK_ORDER d ON a.WO_ID = d.ID AND d.IS_DELETED = 0
INNER JOIN MES_YIELD_ORDER e ON d.YO_ID = e.ID AND e.IS_DELETED = 0
INNER JOIN MES_WORK_ORDER_RUN f ON d.WOR_ID = f.ID AND f.IS_DELETED = 0
INNER JOIN MES_OEM_PROCESS g ON b.ID = g.PROCESS_ID AND g.IS_DELETED = 0
LEFT JOIN MES_OEM_STATEMENT h ON h.WP_ID = a.ID AND h.IS_DELETED = 0
INNER JOIN BS_CRAFT_ABILITY i ON i.ID = a.CA_ID AND i.IS_DELETED = 0
@ -173,7 +174,7 @@
AND d.PUT_STORE_TIME < #{postPlatingStorageTimeEnd} + 1
</if>
<if test="woCode != null and woCode != ''">
AND d.WO_CODE LIKE CONCAT('%', CONCAT(#{woCode}, '%'))
AND f.WO_CODE LIKE CONCAT('%', CONCAT(#{woCode}, '%'))
</if>
<if test="ppsId != null and ppsId != ''">
AND a.PPS_ID = #{ppsId}
@ -390,7 +391,7 @@
c.oc_name,
d.rework_code,
d.rework_no,
d.wo_code,
f.wo_code,
d.put_store_time,
to_char(d.put_store_time, 'yyyy-MM-dd') as PUT_STORE_DATE,
d.make_qty,
@ -423,6 +424,7 @@
INNER JOIN MJMES.bs_oem_customer c on a.oc_id = c.oc_id
INNER JOIN MJMES.pr_work_order d ON a.wo_id = d.wo_id
INNER JOIN MJMES.pj_yield_order e ON d.yo_id = e.yo_id
INNER JOIN MJMES.pr_work_order_run f on d.WOR_ID = f.WOR_ID
INNER JOIN MES_OEM_PROCESS g ON a.pps_id = g.PROCESS_ID AND g.IS_DELETED = 0
LEFT JOIN MES_OEM_STATEMENT h ON h.WP_ID = a.wp_id AND h.IS_DELETED = 0
INNER JOIN BS_CRAFT_ABILITY i ON i.ID = a.CA_ID AND i.IS_DELETED = 0
@ -437,7 +439,7 @@
AND d.PUT_STORE_TIME &lt; #{postPlatingStorageTimeEnd} + 1
</if>
<if test="woCode != null and woCode != ''">
AND d.WO_CODE LIKE CONCAT('%', CONCAT(#{woCode}, '%'))
AND f.WO_CODE LIKE CONCAT('%', CONCAT(#{woCode}, '%'))
</if>
<if test="ppsId != null and ppsId != ''">
AND a.PPS_ID = #{ppsId}

@ -1352,7 +1352,9 @@ public class OemStatementServiceImpl extends BaseServiceImpl<OemStatementMapper,
Long caId = statementVO.getCaId();
String craftIds = statementVO.getCraftIds();
boolean isContain = false;
if (caId != null && craftIds != null && !craftIds.isBlank()) {
if (StringUtils.isEmpty(craftIds)) {
isContain = true;
} else if (caId != null) {
String temp = "," + craftIds + ",";
isContain = temp.contains("," + caId + ",");
}
@ -1529,21 +1531,29 @@ public class OemStatementServiceImpl extends BaseServiceImpl<OemStatementMapper,
if (rule1(statementVO, price)) {
continue;
}
// (2) 供应商代码 + 工序 + 零件号 + 生产标识 + 现执行价格
// (2) 供应商代码 + 工序 + 零件号 + 计划单号 + 现执行价格
if (rule2(statementVO, price)) {
continue;
}
// (3) 供应商代码 + 生产标识 + 计划单号 + 标准工序代码
if (rule3(statementVO)) {
// (3) 供应商代码 + 工序 + 零件号 + 生产标识 + 现执行价格
if (rule3(statementVO, price)) {
continue;
}
// (4) 供应商代码 + 生产标识 + 标准工序代码
if (rule4(statementVO)) {
// (4) 供应商代码 + 工序 + 零件号 + 现执行价格
if (rule4(statementVO, price)) {
continue;
}
// (5) 供应商代码 + 生产标识 + 计划单号 + 标准工序代码
if (rule5(statementVO)) {
continue;
}
// (6) 供应商代码 + 生产标识 + 标准工序代码
if (rule6(statementVO)) {
continue;
}
}
// (5) 供应商代码 + 标准工序代码 + 现执行价格
if (rule5(statementVO, price)) {
// (7) 供应商代码 + 标准工序代码 + 现执行价格
if (rule7(statementVO, price)) {
continue;
}
statementVO.setRosStatus(StatementVO.ERR_SETTLEMENT);
@ -1764,13 +1774,42 @@ public class OemStatementServiceImpl extends BaseServiceImpl<OemStatementMapper,
}
/**
* 匹配规则2 : 供应商代码 + 工序 + 零件号 + 生产标识 + 现执行价格
* 匹配规则2 : 供应商代码 + 工序 + 零件号 + 计划单号 + 现执行价格
*
* @param statementVO
* @param price
* @return
*/
private boolean rule2(StatementVO statementVO, BigDecimal price) {
List<PriceSheetVO> priceSheetList = statementVO.getPriceSheetList();
if (CollectionUtils.isEmpty(priceSheetList)) {
return false;
}
// 结算单字段
String ocCode = statementVO.getOcCode();
String psName = statementVO.getPsName();
String partCode = statementVO.getPartCode();
String ypCode = statementVO.getYpCode();
for (PriceSheetVO sheet : priceSheetList) {
boolean match = StringUtils.equals(sheet.getSplycode(), ocCode) && StringUtils.equals(sheet.getGxinfo(), psName) && StringUtils.equals(sheet.getPrtno(), partCode) && StringUtils.equals(sheet.getWono(), ypCode);
if (match && price != null && price.compareTo(BigDecimal.ZERO) != 0) {
match = PriceMatcher.isContainsPrice(sheet.getAu_ag_price(), price);
}
if (match && ruleTieredPricing(statementVO, sheet)) {
return setSettlementInfo(statementVO, sheet);
}
}
return false;
}
/**
* 匹配规则3 : 供应商代码 + 工序 + 零件号 + 生产标识 + 现执行价格
*
* @param statementVO
* @param price
* @return
*/
private boolean rule3(StatementVO statementVO, BigDecimal price) {
List<PriceSheetVO> priceSheetList = statementVO.getPriceSheetList();
if (CollectionUtils.isEmpty(priceSheetList)) {
return false;
@ -1793,12 +1832,40 @@ public class OemStatementServiceImpl extends BaseServiceImpl<OemStatementMapper,
}
/**
* 匹配规则3 : 供应商代码 + 生产标识 + 计划单号 + 标准工序代码
* 匹配规则4 : 供应商代码 + 工序 + 零件号 + 现执行价格
*
* @param statementVO
* @param price
* @return
*/
private boolean rule4(StatementVO statementVO, BigDecimal price) {
List<PriceSheetVO> priceSheetList = statementVO.getPriceSheetList();
if (CollectionUtils.isEmpty(priceSheetList)) {
return false;
}
// 结算单字段
String ocCode = statementVO.getOcCode();
String psName = statementVO.getPsName();
String partCode = statementVO.getPartCode();
for (PriceSheetVO sheet : priceSheetList) {
boolean match = StringUtils.equals(sheet.getSplycode(), ocCode) && StringUtils.equals(sheet.getGxinfo(), psName) && StringUtils.equals(sheet.getPrtno(), partCode);
if (match && price != null && price.compareTo(BigDecimal.ZERO) != 0) {
match = PriceMatcher.isContainsPrice(sheet.getAu_ag_price(), price);
}
if (match && ruleTieredPricing(statementVO, sheet)) {
return setSettlementInfo(statementVO, sheet);
}
}
return false;
}
/**
* 匹配规则5 : 供应商代码 + 生产标识 + 计划单号 + 标准工序代码
*
* @param statementVO
* @return
*/
private boolean rule3(StatementVO statementVO) {
private boolean rule5(StatementVO statementVO) {
List<PriceSheetVO> priceSheetList = statementVO.getPriceSheetList();
if (CollectionUtils.isEmpty(priceSheetList)) {
return false;
@ -1823,12 +1890,12 @@ public class OemStatementServiceImpl extends BaseServiceImpl<OemStatementMapper,
}
/**
* 匹配规则4 : 供应商代码 + 生产标识 + 标准工序代码
* 匹配规则6 : 供应商代码 + 生产标识 + 标准工序代码
*
* @param statementVO
* @return
*/
private boolean rule4(StatementVO statementVO) {
private boolean rule6(StatementVO statementVO) {
List<PriceSheetVO> priceSheetList = statementVO.getPriceSheetList();
if (CollectionUtils.isEmpty(priceSheetList)) {
return false;
@ -1852,13 +1919,13 @@ public class OemStatementServiceImpl extends BaseServiceImpl<OemStatementMapper,
}
/**
* 匹配规则5 : 供应商代码 + 标准工序代码 + 现执行价格
* 匹配规则7 : 供应商代码 + 标准工序代码 + 现执行价格
*
* @param statementVO
* @param price
* @return
*/
private boolean rule5(StatementVO statementVO, BigDecimal price) {
private boolean rule7(StatementVO statementVO, BigDecimal price) {
List<PriceSheetVO> priceSheetList = statementVO.getPriceSheetList();
if (CollectionUtils.isEmpty(priceSheetList)) {
return false;

Loading…
Cancel
Save