rev:优化

This commit is contained in:
zhangzq
2024-12-09 11:17:35 +08:00
parent f14147a0eb
commit ac004fc7e1
6 changed files with 101 additions and 59 deletions

View File

@@ -61,6 +61,7 @@ public class FIFORuleHandler extends Decisioner<StructattrVechielDto, JSONObject
, "stor_code", param.getString("stor_code")
, "plan_qty", plan_qty
, "is_lock", "false"
// , "order_by","block_num asc,ABS(qty-#{plan_qty}) asc,update_time asc")
, "order_by","block_num asc,ABS(qty-#{plan_qty}) asc,update_time asc")
);
int finalPlan_qty = 0;

View File

@@ -12,6 +12,7 @@ import org.nl.wms.decision_manage.handler.decisioner.Decisioner;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import org.springframework.util.CollectionUtils;
import java.util.List;
import java.util.function.Predicate;
@@ -64,7 +65,7 @@ public class LimitStorageRuleHandler extends Decisioner<StIvtStructattr, JSONObj
private List<StIvtStructattr> inHandler(List<StIvtStructattr> attrList, BmVehicleInfo vehicle) {
//限制条件:限制哪些
List<String> limits = JSONArray.parseArray(strategyConfig.getParam(), String.class);
Predicate<StIvtStructattr> predicate = stIvtStructattr -> {
Predicate<StIvtStructattr> eqLimt= stIvtStructattr -> {
Boolean result = Boolean.TRUE;
if (limits.contains("h")){
result = result && stIvtStructattr.getH()>=vehicle.getH();
@@ -81,10 +82,33 @@ public class LimitStorageRuleHandler extends Decisioner<StIvtStructattr, JSONObj
return result;
};
// 判断长宽高是否符合要求
List<StIvtStructattr> collect = attrList.stream()
.filter(predicate)
List<StIvtStructattr> eqLimitCollect = attrList.stream()
.filter(eqLimt)
.collect(Collectors.toList());
return collect;
if (!CollectionUtils.isEmpty(eqLimitCollect)){
return eqLimitCollect;
}
Predicate<StIvtStructattr> ltLimt = stIvtStructattr -> {
Boolean result = Boolean.TRUE;
if (limits.contains("h")){
result = result && stIvtStructattr.getH()>vehicle.getH();
}
if (limits.contains("w")){
result = result && stIvtStructattr.getW()>vehicle.getW();
}
if (limits.contains("l")){
result = result && stIvtStructattr.getL()>vehicle.getL();
}
if (limits.contains("weight")){
result = result && stIvtStructattr.getWeight()>vehicle.getWeight();
}
return result;
};
// 判断长宽高是否符合要求
List<StIvtStructattr> ltLimtCollect = attrList.stream()
.filter(ltLimt)
.collect(Collectors.toList());
return ltLimtCollect;
}
}

View File

@@ -4,6 +4,7 @@ import cn.hutool.core.date.DateUtil;
import com.alibaba.fastjson.JSON;
import com.alibaba.fastjson.JSONObject;
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
import com.baomidou.mybatisplus.core.conditions.update.UpdateWrapper;
import com.kingdee.bos.webapi.entity.IdentifyInfo;
import com.kingdee.bos.webapi.sdk.K3CloudApi;
@@ -22,6 +23,8 @@ import org.nl.wms.config_manage.form_struc.service.IBmFormStrucService;
import org.nl.wms.config_manage.form_struc.service.dao.BmFormStruc;
import org.nl.wms.external_system.erp.dto.ErpQuery;
import org.nl.wms.external_system.erp.dto.ErpSec;
import org.nl.wms.md_manage.vehicleMater.service.IMdPbVehicleMaterService;
import org.nl.wms.md_manage.vehicleMater.service.dao.MdPbVehicleMater;
import org.nl.wms.pda_manage.iostorage.server.dto.PdaFormOutDtl;
import org.nl.wms.pda_manage.iostorage.server.dto.PdaFormOutMst;
import org.nl.wms.pda_manage.iostorage.server.dto.ReceiveBillData;
@@ -43,6 +46,7 @@ import org.springframework.util.CollectionUtils;
import javax.annotation.Resource;
import java.math.BigDecimal;
import java.util.*;
import java.util.stream.Collectors;
@Service
public class PdaIOService {
@@ -65,8 +69,10 @@ public class PdaIOService {
private MdMeMaterialbaseServiceImpl mdMeMaterialbaseServiceImpl;
@Resource
private PmFormDataMapper pmFormDataMapper;
@Resource
@Autowired
private IPmFormDataService iPmFormDataService;
@Autowired
private IMdPbVehicleMaterService iMdPbVehicleMaterService;
public void PpdaOrderOutStorage(PdaFormOutMst pdaFormOutMst) {
@@ -95,7 +101,7 @@ public class PdaIOService {
mst.setCreate_name(SecurityUtils.getCurrentNickName());
mst.setCreate_time(DateUtil.now());
mst.setCode(CodeUtil.getNewCode("IO_CODE"));
mst.setStatus(StatusEnum.FORM_STATUS.code("生成"));
mst.setStatus(StatusEnum.FORM_STATUS.code("已分配"));
mst.setSource_form_id(pdaFormOutMst.getId());
mst.setSource_form_type(pdaFormOutMst.getForm_type());
mst.setProduct_area(mst.getForm_data().getString("product_area"));
@@ -104,7 +110,6 @@ public class PdaIOService {
mst.setProduct_area(pdaFormOutMst.getProduct_area());
mst.setForm_data(new JSONObject(MapOf.of("shipper",null,"product_area",pdaFormOutMst.getProduct_area())));
List<StIvtIostorinvdtl> list = new ArrayList<>();
JSONObject mstJ = (JSONObject) JSONObject.toJSON(pdaFormOutMst);
mstJ.remove("children");
mstJ.putAll((Map)mstJ.remove("form_data"));
@@ -114,9 +119,6 @@ public class PdaIOService {
if (now_assign_qty==null || now_assign_qty.intValue()==0){
throw new BadRequestException("出库申请失败:当前"+dtl.getMaterial_name()+"明细申请数量为0");
}
StIvtIostorinvdtl ivtDtl = new StIvtIostorinvdtl();
ivtDtl.setMaterial_id(dtl.getMaterial_id());
String productArea = pdaFormOutMst.getProduct_area();
if (StringUtils.isEmpty(productArea) || !"A1A2A3".contains(productArea)){
throw new BadRequestException("出库申请失败:明细数据车间字段未指定或不正确");
@@ -126,43 +128,61 @@ public class PdaIOService {
throw new BadRequestException("出库申请失败:明细数据仓库字段未指定");
}
String pcsn = dtl.getPcsn();
if (StringUtils.isEmpty(pcsn)){
throw new BadRequestException("明细物料没有指定批号");
}
List<StructAssignQty> structMaterials = iStIvtStructattrService.getStructIvtAssign(ListOf.of(ivtDtl.getMaterial_id()), storCode);
List<StructAssignQty> structMaterials = iStIvtStructattrService.getStructIvtAssign(ListOf.of(dtl.getMaterial_id()), storCode);
if (CollectionUtils.isEmpty(structMaterials)){
throw new BadRequestException(dtl.getMaterial_code()+"物料该批号库存不足");
throw new BadRequestException(dtl.getMaterial_code()+"物料库存不足");
}
for (StructAssignQty assignQty : structMaterials) {
if (assignQty.getPcsn().equals(pcsn)){
boolean b = assignQty.getSto_qty().intValue() >= dtl.getNow_assign_qty().intValue();
if (!b){
throw new BadRequestException(dtl.getMaterial_code()+"物料该批号库存不足");
if (!StringUtils.isEmpty(pcsn)){
for (StructAssignQty assignQty : structMaterials) {
if (assignQty.getPcsn().equals(pcsn)){
boolean b = assignQty.getSto_qty().intValue() >= dtl.getNow_assign_qty().intValue();
if (!b){
throw new BadRequestException(dtl.getMaterial_code()+"物料该批号库存不足");
}
}
}
}else {
int sum = structMaterials.stream().mapToInt(a -> a.getSto_qty().intValue()).sum();
if (sum<now_assign_qty.intValue()){
throw new BadRequestException(dtl.getMaterial_code()+"物料库存不足");
}
}
HashMap map = MapOf.of("end_struct_code", "", "start_struct_code", "", "order", "", "product_area", productArea);
ivtDtl.setForm_data(new JSONObject(map));
ivtDtl.setQty(now_assign_qty);
ivtDtl.setPcsn(pcsn);
ivtDtl.setStor_code(storCode);//pdaFormOutMst.getStor_code()
ivtDtl.setId(IdUtil.getStringId());
ivtDtl.setInv_id(mst.getId());
ivtDtl.setStatus(StatusEnum.FORM_STATUS.code("生成"));
ivtDtl.setSource_form_id(dtl.getId());
ivtDtl.setSource_form_type(dtl.getForm_type());
合并主表明细数据:{
JSONObject sourceFormData = JSONObject.parseObject(mstString);
String dtlStr = JSON.toJSONString(dtl);
JSONObject dtlJ = JSONObject.parseObject(dtlStr);
dtlJ.putAll((Map) dtlJ.remove("form_data"));
sourceFormData.putAll(dtlJ);
ivtDtl.setSource_form_data(sourceFormData);
//vehicle_code.split(",")
String vehicles = iStIvtIostorinvService.outDispense(new JSONObject(MapOf.of("stor_code",
pdaFormOutMst.getStor_code(),
"material_id", dtl.getMaterial_id(),
"qty", dtl.getNow_assign_qty(), "pcsn",
dtl.getPcsn())));
List<MdPbVehicleMater> MdPbVehicleMaters = iMdPbVehicleMaterService.list(new QueryWrapper<MdPbVehicleMater>()
.in("vehicle_code", vehicles.split(","))
.eq("is_delete", false));
Map<String, List<MdPbVehicleMater>> pcsnListMap = MdPbVehicleMaters.stream().collect(Collectors.groupingBy(MdPbVehicleMater::getPcsn));
for (String disPcsn : pcsnListMap.keySet()) {
List<MdPbVehicleMater> currentPcsnMater = pcsnListMap.get(disPcsn);
HashMap map = MapOf.of("end_struct_code", "", "start_struct_code", "", "order", "", "product_area", productArea);
StIvtIostorinvdtl ivtDtl = new StIvtIostorinvdtl();
ivtDtl.setMaterial_id(dtl.getMaterial_id());
ivtDtl.setForm_data(new JSONObject(map));
ivtDtl.setQty(BigDecimal.valueOf(currentPcsnMater.stream().mapToInt(a->a.getFrozen_qty().intValue()).sum()));
ivtDtl.setPcsn(disPcsn);
ivtDtl.setStor_code(storCode);//pdaFormOutMst.getStor_code()
ivtDtl.setId(IdUtil.getStringId());
ivtDtl.setVehicle_code(currentPcsnMater.stream().map(MdPbVehicleMater::getVehicle_code).collect(Collectors.joining(",")));
ivtDtl.setVehicle_id(currentPcsnMater.stream().map(MdPbVehicleMater::getId).collect(Collectors.joining(",")));
ivtDtl.setInv_id(mst.getId());
ivtDtl.setStatus(StatusEnum.FORM_STATUS.code("生成"));
ivtDtl.setSource_form_id(dtl.getId());
ivtDtl.setSource_form_type(dtl.getForm_type());
合并主表明细数据:{
JSONObject sourceFormData = JSONObject.parseObject(mstString);
String dtlStr = JSON.toJSONString(dtl);
JSONObject dtlJ = JSONObject.parseObject(dtlStr);
dtlJ.putAll((Map) dtlJ.remove("form_data"));
sourceFormData.putAll(dtlJ);
ivtDtl.setSource_form_data(sourceFormData);
}
list.add(ivtDtl);
}
list.add(ivtDtl);
}
if (CollectionUtils.isEmpty(list)){
throw new BadRequestException("出库申请失败:出库入明细不能为空");
}
iStIvtIostorinvdtlService.saveBatch(list);
iStIvtIostorinvService.save(mst);
@@ -196,9 +216,6 @@ public class PdaIOService {
.set("update_name",nickName)
.eq("id",sourceFormid));
}
for (StIvtIostorinvdtl stIvtIostorinvdtl : list) {
iStIvtIostorinvService.outDispense((JSONObject) JSON.toJSON(stIvtIostorinvdtl));
}
return mst;
}

View File

@@ -237,10 +237,8 @@ public class PmFormDataServiceImpl extends ServiceImpl<PmFormDataMapper, PmFormD
child.setSto_qty(new BigDecimal(0));
child.setPcsn("");
}else {
maps.sort(Comparator.comparing(StructAssignQty::getSto_qty));
StructAssignQty max = maps.get(0);
child.setSto_qty(max.getSto_qty());
child.setPcsn(max.getPcsn());
child.setSto_qty(BigDecimal.valueOf(maps.stream().mapToInt(a->a.getSto_qty().intValue()).sum()));
child.setPcsn("");
}
}
pmFormDataDto.setChildren(childs);

View File

@@ -275,16 +275,18 @@ public class StIvtIostorinvServiceImpl extends ServiceImpl<StIvtIostorinvOutMapp
}
String vehicle_code = map.get("vehicle_code");
Map<String, String> stringMap = iMdPbVehicleMaterService.getVehicleCode2Id(vehicle_code.split(","));
iStIvtIostorinvDtlService.update(new UpdateWrapper<StIvtIostorinvdtl>()
.set("vehicle_code", vehicle_code)
.set("vehicle_id", stringMap.values().stream().collect(Collectors.joining(",")))
.eq("id", form.getString("id")));
int count = iStIvtIostorinvDtlService.count(new QueryWrapper<StIvtIostorinvdtl>()
.eq("inv_id", form.getString("inv_id")).isNull("vehicle_code"));
if (count == 0) {
this.update(new UpdateWrapper<StIvtIostorinv>()
.set("status", StatusEnum.FORM_STATUS.code("已分配"))
.eq("id", form.getString("inv_id")));
if (!StringUtils.isEmpty(form.getString("id"))){
iStIvtIostorinvDtlService.update(new UpdateWrapper<StIvtIostorinvdtl>()
.set("vehicle_code", vehicle_code)
.set("vehicle_id", stringMap.values().stream().collect(Collectors.joining(",")))
.eq("id", form.getString("id")));
int count = iStIvtIostorinvDtlService.count(new QueryWrapper<StIvtIostorinvdtl>()
.eq("inv_id", form.getString("inv_id")).isNull("vehicle_code"));
if (count == 0) {
this.update(new UpdateWrapper<StIvtIostorinv>()
.set("status", StatusEnum.FORM_STATUS.code("已分配"))
.eq("id", form.getString("inv_id")));
}
}
return vehicle_code;
}

View File

@@ -72,7 +72,7 @@ public class SyncFormMappingController {
}
@GetMapping
public ResponseEntity<Object> getAll(FormMappingQuery query, PageQuery page) {
return new ResponseEntity<>(TableDataInfo.build(iSyncFormMappingService.page(page.build(), query.build())), HttpStatus.OK);
return new ResponseEntity<>(TableDataInfo.build(iSyncFormMappingService.page(page.build(), query.build())), HttpStatus.OK);
}
@PostMapping("/create")
@Log("创建表同步配置")