外协结算

liweidong
maxiangong 1 month ago
parent 67b35b4a8b
commit 6f6c228372
  1. 103
      blade-service-api/blade-desk-api/src/main/java/org/springblade/desk/oem/pojo/entity/OemStatementEntity.java
  2. 30
      blade-service-api/blade-desk-api/src/main/java/org/springblade/desk/oem/pojo/vo/StatementVO.java
  3. 58
      blade-service/blade-desk/src/main/java/org/springblade/desk/oem/mapper/OemStatementMapper.xml
  4. 264
      blade-service/blade-desk/src/main/java/org/springblade/desk/oem/service/impl/OemStatementServiceImpl.java

@ -29,16 +29,13 @@ public class OemStatementEntity extends BaseEntity {
@Serial
private static final long serialVersionUID = 1L;
/**
* 无需结算
*/
public static Integer NOT_NEED_SETTLEMENT = 5;
/**
* 未结算
*/
public static Integer NO_SETTLEMENT = 1;
/**
* 结算中
* 待确认
*/
public static Integer IN_SETTLEMENT = 2;
/**
@ -46,39 +43,38 @@ public class OemStatementEntity extends BaseEntity {
*/
public static Integer ERR_SETTLEMENT = 3;
/**
* 结算
* 结算完成
*/
public static Integer OK_SETTLEMENT = 4;
public static Map<Integer, String> rosStatusMap = new HashMap<>(8);
static {
rosStatusMap.put(NOT_NEED_SETTLEMENT, "无需结算");
rosStatusMap.put(NO_SETTLEMENT, "未结算");
rosStatusMap.put(IN_SETTLEMENT, "结算中");
rosStatusMap.put(ERR_SETTLEMENT, "结算异常");
rosStatusMap.put(OK_SETTLEMENT, "已结算");
}
/**
* 1:待审批
* 待审核
*/
public static Integer APPROVAL_STATUS_UNDER = 1;
public static Integer AWAITING_APPROVAL_SETTLEMENT = 5;
/**
* 2:不通过
* 审核中
*/
public static Integer APPROVAL_STATUS_FAIL = 2;
public static Integer PENDING_APPROVAL_SETTLEMENT = 6;
/**
* 3:通过
* 待推送
*/
public static Integer APPROVAL_STATUS_VIA = 3;
public static Map<Integer, String> approvalStatusMap = new HashMap<Integer, String>(4);
public static Integer PENDING_PUSH_SETTLEMENT = 7;
public static Map<Integer, String> rosStatusMap = new HashMap<>(8);
static {
approvalStatusMap.put(APPROVAL_STATUS_UNDER, "待审批");
approvalStatusMap.put(APPROVAL_STATUS_FAIL, "审批不通过");
approvalStatusMap.put(APPROVAL_STATUS_VIA, "审批通过");
rosStatusMap.put(NO_SETTLEMENT, "未结算");
rosStatusMap.put(IN_SETTLEMENT, "结算中");
rosStatusMap.put(ERR_SETTLEMENT, "结算异常");
rosStatusMap.put(OK_SETTLEMENT, "已结算");
rosStatusMap.put(AWAITING_APPROVAL_SETTLEMENT, "待审核");
rosStatusMap.put(PENDING_APPROVAL_SETTLEMENT, "审核中");
rosStatusMap.put(PENDING_PUSH_SETTLEMENT, "待推送");
}
/**
* 车间作业计划ID
*/
@ -118,17 +114,6 @@ public class OemStatementEntity extends BaseEntity {
return rosStatusMap.get(rosStatus);
}
/**
* 状态
*/
@Schema(description = "审批状态(1待审批,2审批不通过,3审批通过)")
private Integer approvalStatus;
public String getApprovalStatusName() {
return approvalStatusMap.get(approvalStatus);
}
/**
* 备注
*/
@ -150,4 +135,48 @@ public class OemStatementEntity extends BaseEntity {
@Schema(description = "结算单号")
private String statementNo;
@Schema(description = "车间订单编号")
private String woCode;
@Schema(description = "计划单号")
private String ypCode;
@Schema(description = "零件ID")
private Long partId;
@Schema(description = "批次号")
private String batchNo;
@Schema(description = "生产标识")
private String productIdent;
@Schema(description = "结算数量")
private BigDecimal makeQty;
@Schema(description = "面积(㎡)")
private BigDecimal ypArea;
@Schema(description = "镀种")
private String plate;
@Schema(description = "涂色标个数")
private String tsbNum;
@Schema(description = "涂色带个数")
private String tsdNum;
@Schema(description = "涂箭头个数")
private String tjtNum;
@Schema(description = "计划部门")
private String planDeptcode;
@Schema(description = "使用部门")
private String useDeptCode;
@Schema(description = "镀后入库时间")
private String putStoreTime;
@Schema(description = "使用部门")
private String resDept;
}

@ -43,9 +43,6 @@ public class StatementVO extends OemStatementEntity {
@Schema(description = "计划单号")
private String wpCode;
@Schema(description = "车间订单单号")
private String woCode;
@Schema(description = "零件号")
private String partCode;
@ -55,12 +52,6 @@ public class StatementVO extends OemStatementEntity {
@Schema(description = "镀层物料")
private String plateGoodsCode;
@Schema(description = "批次号")
private String batchNo;
@Schema(description = "生产标识")
private String prodIdent;
@Schema(description = "工序编码")
private String psCode;
@ -73,12 +64,6 @@ public class StatementVO extends OemStatementEntity {
@Schema(description = "镀后入库时间")
private String putStoreTime;
@Schema(description = "生产数量")
private String makeQty;
@Schema(description = "单位面积(dm²)")
private String ypArea;
@Schema(description = "总面积(dm²)")
private String totalArea;
@ -88,21 +73,9 @@ public class StatementVO extends OemStatementEntity {
@Schema(description = "外协厂商名称")
private String ocName;
@Schema(description = "镀种")
private String plate;
@Schema(description = "镀种厚度")
private String plateThickness;
@Schema(description = "涂色标个数")
private String tsbNum;
@Schema(description = "涂色带个数")
private String tsdNum;
@Schema(description = "涂箭个数")
private String tjtNum;
@Schema(description = "是否手动结算:0否(自动结算),1是(手动结算)")
private String manual;
@ -129,9 +102,6 @@ public class StatementVO extends OemStatementEntity {
@Schema(description = "工艺能力类型名称")
private String wxLimitName;
@Schema(description = "计划单号")
private String ypCode;
@Schema(description = "责任部门")
private String resDept;

@ -240,6 +240,7 @@
a.pps_id as ps_id,
b.name as ps_name,
c.code as OC_CODE,
c.OC_NAME,
d.REWORK_CODE,
d.REWORK_NO,
d.wo_code,
@ -271,7 +272,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_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
@ -283,7 +284,8 @@
AND d.PUT_STORE_TIME &gt;= #{postPlatingStorageTimeStart}
</if>
<if test="woCode != null and woCode != ''">
AND (f.WO_CODE LIKE CONCAT('%', CONCAT(#{woCode}, '%')) OR d.WO_CODE LIKE CONCAT('%', CONCAT(#{woCode}, '%')))
-- AND (f.WO_CODE LIKE CONCAT('%', CONCAT(#{woCode}, '%')) OR d.WO_CODE LIKE CONCAT('%', CONCAT(#{woCode}, '%')))
AND d.WO_CODE LIKE CONCAT('%', CONCAT(#{woCode}, '%'))
</if>
</where>
</select>
@ -304,29 +306,28 @@
<select id="selectOemStatementPage" resultMap="StatementVOResultMap">
SELECT
h.ID,
e.YP_CODE,
d.WO_CODE,
e.PART_CODE,
h.YP_CODE,
h.WO_CODE,
p.PART_CODE,
p.PART_NAME,
e.BATCH_NO,
e.PRODUCT_IDENT as PROD_IDENT,
h.BATCH_NO,
h.PRODUCT_IDENT as PROD_IDENT,
b.NAME as PS_NAME,
i.CA_NAME,
c.CODE as OC_CODE,
c.OC_NAME,
d.MAKE_QTY,
e.YP_AREA,
d.MAKE_QTY * e.YP_AREA as TOTAL_AREA,
e.PLATE,
e.PLATE_THICKNESS1 as PLATE_THICKNESS,
h.MAKE_QTY,
h.YP_AREA,
h.MAKE_QTY * h.YP_AREA as TOTAL_AREA,
h.PLATE,
h.ROS_THICKNESS,
h.STANDARD_PROCESS_CODE,
e.TSB_NUM,
e.TSD_NUM,
e.TJT_NUM,
e.PLAN_DEPTCODE,
e.USE_DEPT_CODE,
to_char(d.PUT_STORE_TIME, 'yyyy-MM-dd') as PUT_STORE_TIME,
h.TSB_NUM,
h.TSD_NUM,
h.TJT_NUM,
h.PLAN_DEPTCODE,
h.USE_DEPT_CODE,
to_char(h.PUT_STORE_TIME, 'yyyy-MM-dd') as PUT_STORE_TIME,
h.QUOTATION,
h.UNIT,
h.UNIT_PRICE,
@ -341,13 +342,9 @@
INNER JOIN MES_WORK_PLAN a ON h.WP_ID = a.ID AND a.IS_DELETED = 0
INNER JOIN BS_PROCESS_SET b ON a.PPS_ID = b.ID AND b.IS_DELETED = 0
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
INNER JOIN BS_CRAFT_ABILITY i ON i.ID = a.CA_ID AND i.IS_DELETED = 0
INNER JOIN DS_PART_VERSION pv ON e.part_code = pv.part_code AND e.part_version = pv.part_version AND pv.IS_DELETED = 0
INNER JOIN DS_PART p ON pv.PART_ID = p.ID AND p.IS_DELETED = 0
INNER JOIN DS_PART p ON h.PART_ID = p.ID AND p.IS_DELETED = 0
<where>
h.IS_DELETED = 0
<if test="query.rosStatusList != null and query.rosStatusList != ''">
@ -358,26 +355,27 @@
</foreach>
</if>
<if test="query.postPlatingStorageTimeStart != null">
AND d.PUT_STORE_TIME &gt;= #{query.postPlatingStorageTimeStart}
AND h.PUT_STORE_TIME &gt;= #{query.postPlatingStorageTimeStart}
</if>
<if test="query.postPlatingStorageTimeEnd != null">
AND d.PUT_STORE_TIME &lt; #{query.postPlatingStorageTimeEnd} + 1
AND h.PUT_STORE_TIME &lt; #{query.postPlatingStorageTimeEnd} + 1
</if>
<if test="query.prodIdent != null and query.prodIdent != ''">
AND e.PRODUCT_IDENT = #{query.prodIdent}
AND h.PRODUCT_IDENT = #{query.prodIdent}
</if>
<if test="query.manual != null and query.manual != ''">
AND g.manual = #{query.manual}
</if>
<if test="query.woCode != null and query.woCode != ''">
AND (f.WO_CODE LIKE CONCAT('%', CONCAT(#{query.woCode}, '%')) OR d.WO_CODE LIKE CONCAT('%',
CONCAT(#{query.woCode}, '%')))
-- AND (f.WO_CODE LIKE CONCAT('%', CONCAT(#{query.woCode}, '%')) OR d.WO_CODE LIKE CONCAT('%',
-- CONCAT(#{query.woCode}, '%')))
AND h.WO_CODE LIKE CONCAT('%', CONCAT(#{query.woCode}, '%'))
</if>
<if test="query.partCode != null and query.partCode != ''">
AND e.PART_CODE LIKE CONCAT('%', CONCAT(#{query.partCode}, '%'))
AND p.PART_CODE LIKE CONCAT('%', CONCAT(#{query.partCode}, '%'))
</if>
<if test="query.batchNo != null and query.batchNo != ''">
AND d.BATCH_NO LIKE CONCAT('%', CONCAT(#{query.batchNo}, '%'))
AND h.BATCH_NO LIKE CONCAT('%', CONCAT(#{query.batchNo}, '%'))
</if>
<if test="query.ocIds != null and query.ocIds != ''">
AND c.ID IN

@ -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;
}
}

Loading…
Cancel
Save