来料加工

This commit is contained in:
潘荣晟
2026-02-27 16:36:37 +08:00
parent 72f38c5075
commit 74e8d88a66
3 changed files with 140 additions and 6 deletions

View File

@@ -102,4 +102,5 @@ public interface OriginalMaterialProcessingDetailService {
*/ */
List<OriginalMaterialProcessingDetailDO> queryOriginalMaterialProcessingDetailListByOrderId(Long orderId); List<OriginalMaterialProcessingDetailDO> queryOriginalMaterialProcessingDetailListByOrderId(Long orderId);
void updateOriginalMaterialProcessingDetailList(List<OriginalMaterialProcessingDetailSaveReqVO> originalMaterialProcessingDetailSaveReqVOS);
} }

View File

@@ -1,6 +1,8 @@
package com.zt.plat.module.contractorder.service.originalmaterialprocessing; package com.zt.plat.module.contractorder.service.originalmaterialprocessing;
import cn.hutool.core.collection.CollUtil; import cn.hutool.core.collection.CollUtil;
import com.alibaba.fastjson2.JSONArray;
import com.alibaba.fastjson2.JSONObject;
import com.zt.plat.framework.common.pojo.CommonResult; import com.zt.plat.framework.common.pojo.CommonResult;
import com.zt.plat.module.base.api.materialinfomation.MaterialInfomationApi; import com.zt.plat.module.base.api.materialinfomation.MaterialInfomationApi;
import com.zt.plat.module.base.api.materialinfomation.dto.MaterialInfomationPageReqDTO; import com.zt.plat.module.base.api.materialinfomation.dto.MaterialInfomationPageReqDTO;
@@ -12,7 +14,9 @@ import com.zt.plat.module.contractorder.controller.admin.originalmaterialprocess
import com.zt.plat.module.contractorder.controller.admin.originalmaterialprocessing.vo.OriginalMaterialProcessingDetailSaveReqVO; import com.zt.plat.module.contractorder.controller.admin.originalmaterialprocessing.vo.OriginalMaterialProcessingDetailSaveReqVO;
import com.zt.plat.module.contractorder.dal.dataobject.entrustorder.EntrustOrderDetailDO; import com.zt.plat.module.contractorder.dal.dataobject.entrustorder.EntrustOrderDetailDO;
import com.zt.plat.module.contractorder.dal.dataobject.originalmaterialprocessing.OriginalMaterialProcessingDetailDO; import com.zt.plat.module.contractorder.dal.dataobject.originalmaterialprocessing.OriginalMaterialProcessingDetailDO;
import com.zt.plat.module.contractorder.dal.dataobject.salesorder.SalesOrderDetailDO;
import com.zt.plat.module.contractorder.dal.mysql.originalmaterialprocessing.OriginalMaterialProcessingDetailMapper; import com.zt.plat.module.contractorder.dal.mysql.originalmaterialprocessing.OriginalMaterialProcessingDetailMapper;
import com.zt.plat.module.contractorder.enums.ErpConstants;
import com.zt.plat.module.erp.service.erp.ErpOrderService; import com.zt.plat.module.erp.service.erp.ErpOrderService;
import lombok.extern.slf4j.Slf4j; import lombok.extern.slf4j.Slf4j;
import org.springframework.stereotype.Service; import org.springframework.stereotype.Service;
@@ -136,6 +140,63 @@ public class OriginalMaterialProcessingDetailServiceImpl implements OriginalMate
return originalMaterialProcessingDetailMapper.selectList(OriginalMaterialProcessingDetailDO::getOrderId, orderId); return originalMaterialProcessingDetailMapper.selectList(OriginalMaterialProcessingDetailDO::getOrderId, orderId);
} }
@Override
public void updateOriginalMaterialProcessingDetailList(List<OriginalMaterialProcessingDetailSaveReqVO> originalMaterialProcessingDetailSaveReqVOS) {
List<OriginalMaterialProcessingDetailDO> beanList = BeanUtils.toBean(originalMaterialProcessingDetailSaveReqVOS, OriginalMaterialProcessingDetailDO.class);
beanList.forEach(this::setElemInfo);
beanList.forEach(item -> {
String priceConditionDetail = item.getPriceConditionDetail();
// 空值校验,避免空指针异常
if (priceConditionDetail == null || priceConditionDetail.isEmpty()) {
return;
}
// 2. 解析外层JSON数组原嵌套数组
List<JSONArray> outerJsonArrays = JSONArray.parseArray(priceConditionDetail, JSONArray.class);
if (item.getId() != null && !outerJsonArrays.isEmpty()) {
// 核心修改:定义一维集合,收集所有扁平后的元素
List<Object> flatProcessedElements = new ArrayList<>();
// 遍历外层数组,扁平化所有内层元素
for (JSONArray innerJsonArray : outerJsonArrays) {
if (innerJsonArray == null || innerJsonArray.isEmpty()) {
continue;
}
// 遍历当前内层数组的每个元素做flag处理
for (int innerIdx = 0; innerIdx < innerJsonArray.size(); innerIdx++) {
String originalJsonStr = innerJsonArray.getString(innerIdx);
if (originalJsonStr == null || originalJsonStr.isEmpty()) {
continue;
}
JSONObject jsonObject = JSONObject.parseObject(originalJsonStr);
String flag = jsonObject.getString("flag");
// 根据flag处理D删除I改U其他保留
if (ErpConstants.SALES_DOCUMENT_REQUEST_FLAG_D.equals(flag)) {
continue; // D直接跳过删除
} else if (ErpConstants.SALES_DOCUMENT_REQUEST_FLAG_I.equals(flag)) {
jsonObject.put("flag", ErpConstants.SALES_DOCUMENT_REQUEST_FLAG_U);
flatProcessedElements.add(jsonObject); // 加入一维集合
} else {
flatProcessedElements.add(jsonObject); // 其他flag直接加入
}
}
}
// 3. 把扁平后的一维集合转为JSON数组直接作为最终结果
JSONArray finalOneDimensionalArray = JSONArray.parseArray(JSONArray.toJSONString(flatProcessedElements));
// 4. 重新设置处理后的JSON字符串此时就是[{},{}]格式)
item.setPriceConditionDetail(finalOneDimensionalArray.toString());
} else {
// 无外层数组/无ID时保持原空值避免写入空数组[],可根据业务调整)
item.setPriceConditionDetail(priceConditionDetail);
}
});
// 6. 批量插入/更新
originalMaterialProcessingDetailMapper.insertOrUpdate(beanList);
}
@Override @Override
public List<OriginalMaterialProcessingDetailRespVO> getOriginalMaterialProcessingDetailListByOrderId(Long orderId) { public List<OriginalMaterialProcessingDetailRespVO> getOriginalMaterialProcessingDetailListByOrderId(Long orderId) {
return BeanUtils.toBean(originalMaterialProcessingDetailMapper.selectList(OriginalMaterialProcessingDetailDO::getOrderId, orderId), OriginalMaterialProcessingDetailRespVO.class); return BeanUtils.toBean(originalMaterialProcessingDetailMapper.selectList(OriginalMaterialProcessingDetailDO::getOrderId, orderId), OriginalMaterialProcessingDetailRespVO.class);