rev:优化
This commit is contained in:
@@ -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;
|
||||
|
||||
@@ -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;
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
@@ -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;
|
||||
}
|
||||
|
||||
|
||||
@@ -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);
|
||||
|
||||
@@ -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;
|
||||
}
|
||||
|
||||
@@ -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("创建表同步配置")
|
||||
|
||||
Reference in New Issue
Block a user