rev:优化
This commit is contained in:
@@ -61,6 +61,7 @@ public class FIFORuleHandler extends Decisioner<StructattrVechielDto, JSONObject
|
|||||||
, "stor_code", param.getString("stor_code")
|
, "stor_code", param.getString("stor_code")
|
||||||
, "plan_qty", plan_qty
|
, "plan_qty", plan_qty
|
||||||
, "is_lock", "false"
|
, "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")
|
, "order_by","block_num asc,ABS(qty-#{plan_qty}) asc,update_time asc")
|
||||||
);
|
);
|
||||||
int finalPlan_qty = 0;
|
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.beans.factory.annotation.Autowired;
|
||||||
import org.springframework.stereotype.Service;
|
import org.springframework.stereotype.Service;
|
||||||
|
import org.springframework.util.CollectionUtils;
|
||||||
|
|
||||||
import java.util.List;
|
import java.util.List;
|
||||||
import java.util.function.Predicate;
|
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) {
|
private List<StIvtStructattr> inHandler(List<StIvtStructattr> attrList, BmVehicleInfo vehicle) {
|
||||||
//限制条件:限制哪些
|
//限制条件:限制哪些
|
||||||
List<String> limits = JSONArray.parseArray(strategyConfig.getParam(), String.class);
|
List<String> limits = JSONArray.parseArray(strategyConfig.getParam(), String.class);
|
||||||
Predicate<StIvtStructattr> predicate = stIvtStructattr -> {
|
Predicate<StIvtStructattr> eqLimt= stIvtStructattr -> {
|
||||||
Boolean result = Boolean.TRUE;
|
Boolean result = Boolean.TRUE;
|
||||||
if (limits.contains("h")){
|
if (limits.contains("h")){
|
||||||
result = result && stIvtStructattr.getH()>=vehicle.getH();
|
result = result && stIvtStructattr.getH()>=vehicle.getH();
|
||||||
@@ -81,10 +82,33 @@ public class LimitStorageRuleHandler extends Decisioner<StIvtStructattr, JSONObj
|
|||||||
return result;
|
return result;
|
||||||
};
|
};
|
||||||
// 判断长宽高是否符合要求
|
// 判断长宽高是否符合要求
|
||||||
List<StIvtStructattr> collect = attrList.stream()
|
List<StIvtStructattr> eqLimitCollect = attrList.stream()
|
||||||
.filter(predicate)
|
.filter(eqLimt)
|
||||||
.collect(Collectors.toList());
|
.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.JSON;
|
||||||
import com.alibaba.fastjson.JSONObject;
|
import com.alibaba.fastjson.JSONObject;
|
||||||
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
|
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.baomidou.mybatisplus.core.conditions.update.UpdateWrapper;
|
||||||
import com.kingdee.bos.webapi.entity.IdentifyInfo;
|
import com.kingdee.bos.webapi.entity.IdentifyInfo;
|
||||||
import com.kingdee.bos.webapi.sdk.K3CloudApi;
|
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.config_manage.form_struc.service.dao.BmFormStruc;
|
||||||
import org.nl.wms.external_system.erp.dto.ErpQuery;
|
import org.nl.wms.external_system.erp.dto.ErpQuery;
|
||||||
import org.nl.wms.external_system.erp.dto.ErpSec;
|
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.PdaFormOutDtl;
|
||||||
import org.nl.wms.pda_manage.iostorage.server.dto.PdaFormOutMst;
|
import org.nl.wms.pda_manage.iostorage.server.dto.PdaFormOutMst;
|
||||||
import org.nl.wms.pda_manage.iostorage.server.dto.ReceiveBillData;
|
import org.nl.wms.pda_manage.iostorage.server.dto.ReceiveBillData;
|
||||||
@@ -43,6 +46,7 @@ import org.springframework.util.CollectionUtils;
|
|||||||
import javax.annotation.Resource;
|
import javax.annotation.Resource;
|
||||||
import java.math.BigDecimal;
|
import java.math.BigDecimal;
|
||||||
import java.util.*;
|
import java.util.*;
|
||||||
|
import java.util.stream.Collectors;
|
||||||
|
|
||||||
@Service
|
@Service
|
||||||
public class PdaIOService {
|
public class PdaIOService {
|
||||||
@@ -65,8 +69,10 @@ public class PdaIOService {
|
|||||||
private MdMeMaterialbaseServiceImpl mdMeMaterialbaseServiceImpl;
|
private MdMeMaterialbaseServiceImpl mdMeMaterialbaseServiceImpl;
|
||||||
@Resource
|
@Resource
|
||||||
private PmFormDataMapper pmFormDataMapper;
|
private PmFormDataMapper pmFormDataMapper;
|
||||||
@Resource
|
@Autowired
|
||||||
private IPmFormDataService iPmFormDataService;
|
private IPmFormDataService iPmFormDataService;
|
||||||
|
@Autowired
|
||||||
|
private IMdPbVehicleMaterService iMdPbVehicleMaterService;
|
||||||
|
|
||||||
|
|
||||||
public void PpdaOrderOutStorage(PdaFormOutMst pdaFormOutMst) {
|
public void PpdaOrderOutStorage(PdaFormOutMst pdaFormOutMst) {
|
||||||
@@ -95,7 +101,7 @@ public class PdaIOService {
|
|||||||
mst.setCreate_name(SecurityUtils.getCurrentNickName());
|
mst.setCreate_name(SecurityUtils.getCurrentNickName());
|
||||||
mst.setCreate_time(DateUtil.now());
|
mst.setCreate_time(DateUtil.now());
|
||||||
mst.setCode(CodeUtil.getNewCode("IO_CODE"));
|
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_id(pdaFormOutMst.getId());
|
||||||
mst.setSource_form_type(pdaFormOutMst.getForm_type());
|
mst.setSource_form_type(pdaFormOutMst.getForm_type());
|
||||||
mst.setProduct_area(mst.getForm_data().getString("product_area"));
|
mst.setProduct_area(mst.getForm_data().getString("product_area"));
|
||||||
@@ -104,7 +110,6 @@ public class PdaIOService {
|
|||||||
mst.setProduct_area(pdaFormOutMst.getProduct_area());
|
mst.setProduct_area(pdaFormOutMst.getProduct_area());
|
||||||
mst.setForm_data(new JSONObject(MapOf.of("shipper",null,"product_area",pdaFormOutMst.getProduct_area())));
|
mst.setForm_data(new JSONObject(MapOf.of("shipper",null,"product_area",pdaFormOutMst.getProduct_area())));
|
||||||
List<StIvtIostorinvdtl> list = new ArrayList<>();
|
List<StIvtIostorinvdtl> list = new ArrayList<>();
|
||||||
|
|
||||||
JSONObject mstJ = (JSONObject) JSONObject.toJSON(pdaFormOutMst);
|
JSONObject mstJ = (JSONObject) JSONObject.toJSON(pdaFormOutMst);
|
||||||
mstJ.remove("children");
|
mstJ.remove("children");
|
||||||
mstJ.putAll((Map)mstJ.remove("form_data"));
|
mstJ.putAll((Map)mstJ.remove("form_data"));
|
||||||
@@ -114,9 +119,6 @@ public class PdaIOService {
|
|||||||
if (now_assign_qty==null || now_assign_qty.intValue()==0){
|
if (now_assign_qty==null || now_assign_qty.intValue()==0){
|
||||||
throw new BadRequestException("出库申请失败:当前"+dtl.getMaterial_name()+"明细申请数量为0");
|
throw new BadRequestException("出库申请失败:当前"+dtl.getMaterial_name()+"明细申请数量为0");
|
||||||
}
|
}
|
||||||
StIvtIostorinvdtl ivtDtl = new StIvtIostorinvdtl();
|
|
||||||
|
|
||||||
ivtDtl.setMaterial_id(dtl.getMaterial_id());
|
|
||||||
String productArea = pdaFormOutMst.getProduct_area();
|
String productArea = pdaFormOutMst.getProduct_area();
|
||||||
if (StringUtils.isEmpty(productArea) || !"A1A2A3".contains(productArea)){
|
if (StringUtils.isEmpty(productArea) || !"A1A2A3".contains(productArea)){
|
||||||
throw new BadRequestException("出库申请失败:明细数据车间字段未指定或不正确");
|
throw new BadRequestException("出库申请失败:明细数据车间字段未指定或不正确");
|
||||||
@@ -126,43 +128,61 @@ public class PdaIOService {
|
|||||||
throw new BadRequestException("出库申请失败:明细数据仓库字段未指定");
|
throw new BadRequestException("出库申请失败:明细数据仓库字段未指定");
|
||||||
}
|
}
|
||||||
String pcsn = dtl.getPcsn();
|
String pcsn = dtl.getPcsn();
|
||||||
if (StringUtils.isEmpty(pcsn)){
|
List<StructAssignQty> structMaterials = iStIvtStructattrService.getStructIvtAssign(ListOf.of(dtl.getMaterial_id()), storCode);
|
||||||
throw new BadRequestException("明细物料没有指定批号");
|
|
||||||
}
|
|
||||||
List<StructAssignQty> structMaterials = iStIvtStructattrService.getStructIvtAssign(ListOf.of(ivtDtl.getMaterial_id()), storCode);
|
|
||||||
if (CollectionUtils.isEmpty(structMaterials)){
|
if (CollectionUtils.isEmpty(structMaterials)){
|
||||||
throw new BadRequestException(dtl.getMaterial_code()+"物料该批号库存不足");
|
throw new BadRequestException(dtl.getMaterial_code()+"物料库存不足");
|
||||||
}
|
}
|
||||||
for (StructAssignQty assignQty : structMaterials) {
|
if (!StringUtils.isEmpty(pcsn)){
|
||||||
if (assignQty.getPcsn().equals(pcsn)){
|
for (StructAssignQty assignQty : structMaterials) {
|
||||||
boolean b = assignQty.getSto_qty().intValue() >= dtl.getNow_assign_qty().intValue();
|
if (assignQty.getPcsn().equals(pcsn)){
|
||||||
if (!b){
|
boolean b = assignQty.getSto_qty().intValue() >= dtl.getNow_assign_qty().intValue();
|
||||||
throw new BadRequestException(dtl.getMaterial_code()+"物料该批号库存不足");
|
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);
|
//vehicle_code.split(",")
|
||||||
ivtDtl.setForm_data(new JSONObject(map));
|
String vehicles = iStIvtIostorinvService.outDispense(new JSONObject(MapOf.of("stor_code",
|
||||||
ivtDtl.setQty(now_assign_qty);
|
pdaFormOutMst.getStor_code(),
|
||||||
ivtDtl.setPcsn(pcsn);
|
"material_id", dtl.getMaterial_id(),
|
||||||
ivtDtl.setStor_code(storCode);//pdaFormOutMst.getStor_code()
|
"qty", dtl.getNow_assign_qty(), "pcsn",
|
||||||
ivtDtl.setId(IdUtil.getStringId());
|
dtl.getPcsn())));
|
||||||
ivtDtl.setInv_id(mst.getId());
|
List<MdPbVehicleMater> MdPbVehicleMaters = iMdPbVehicleMaterService.list(new QueryWrapper<MdPbVehicleMater>()
|
||||||
ivtDtl.setStatus(StatusEnum.FORM_STATUS.code("生成"));
|
.in("vehicle_code", vehicles.split(","))
|
||||||
ivtDtl.setSource_form_id(dtl.getId());
|
.eq("is_delete", false));
|
||||||
ivtDtl.setSource_form_type(dtl.getForm_type());
|
Map<String, List<MdPbVehicleMater>> pcsnListMap = MdPbVehicleMaters.stream().collect(Collectors.groupingBy(MdPbVehicleMater::getPcsn));
|
||||||
合并主表明细数据:{
|
for (String disPcsn : pcsnListMap.keySet()) {
|
||||||
JSONObject sourceFormData = JSONObject.parseObject(mstString);
|
List<MdPbVehicleMater> currentPcsnMater = pcsnListMap.get(disPcsn);
|
||||||
String dtlStr = JSON.toJSONString(dtl);
|
HashMap map = MapOf.of("end_struct_code", "", "start_struct_code", "", "order", "", "product_area", productArea);
|
||||||
JSONObject dtlJ = JSONObject.parseObject(dtlStr);
|
StIvtIostorinvdtl ivtDtl = new StIvtIostorinvdtl();
|
||||||
dtlJ.putAll((Map) dtlJ.remove("form_data"));
|
ivtDtl.setMaterial_id(dtl.getMaterial_id());
|
||||||
sourceFormData.putAll(dtlJ);
|
ivtDtl.setForm_data(new JSONObject(map));
|
||||||
ivtDtl.setSource_form_data(sourceFormData);
|
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);
|
iStIvtIostorinvdtlService.saveBatch(list);
|
||||||
iStIvtIostorinvService.save(mst);
|
iStIvtIostorinvService.save(mst);
|
||||||
@@ -196,9 +216,6 @@ public class PdaIOService {
|
|||||||
.set("update_name",nickName)
|
.set("update_name",nickName)
|
||||||
.eq("id",sourceFormid));
|
.eq("id",sourceFormid));
|
||||||
}
|
}
|
||||||
for (StIvtIostorinvdtl stIvtIostorinvdtl : list) {
|
|
||||||
iStIvtIostorinvService.outDispense((JSONObject) JSON.toJSON(stIvtIostorinvdtl));
|
|
||||||
}
|
|
||||||
return mst;
|
return mst;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -237,10 +237,8 @@ public class PmFormDataServiceImpl extends ServiceImpl<PmFormDataMapper, PmFormD
|
|||||||
child.setSto_qty(new BigDecimal(0));
|
child.setSto_qty(new BigDecimal(0));
|
||||||
child.setPcsn("");
|
child.setPcsn("");
|
||||||
}else {
|
}else {
|
||||||
maps.sort(Comparator.comparing(StructAssignQty::getSto_qty));
|
child.setSto_qty(BigDecimal.valueOf(maps.stream().mapToInt(a->a.getSto_qty().intValue()).sum()));
|
||||||
StructAssignQty max = maps.get(0);
|
child.setPcsn("");
|
||||||
child.setSto_qty(max.getSto_qty());
|
|
||||||
child.setPcsn(max.getPcsn());
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
pmFormDataDto.setChildren(childs);
|
pmFormDataDto.setChildren(childs);
|
||||||
|
|||||||
@@ -275,16 +275,18 @@ public class StIvtIostorinvServiceImpl extends ServiceImpl<StIvtIostorinvOutMapp
|
|||||||
}
|
}
|
||||||
String vehicle_code = map.get("vehicle_code");
|
String vehicle_code = map.get("vehicle_code");
|
||||||
Map<String, String> stringMap = iMdPbVehicleMaterService.getVehicleCode2Id(vehicle_code.split(","));
|
Map<String, String> stringMap = iMdPbVehicleMaterService.getVehicleCode2Id(vehicle_code.split(","));
|
||||||
iStIvtIostorinvDtlService.update(new UpdateWrapper<StIvtIostorinvdtl>()
|
if (!StringUtils.isEmpty(form.getString("id"))){
|
||||||
.set("vehicle_code", vehicle_code)
|
iStIvtIostorinvDtlService.update(new UpdateWrapper<StIvtIostorinvdtl>()
|
||||||
.set("vehicle_id", stringMap.values().stream().collect(Collectors.joining(",")))
|
.set("vehicle_code", vehicle_code)
|
||||||
.eq("id", form.getString("id")));
|
.set("vehicle_id", stringMap.values().stream().collect(Collectors.joining(",")))
|
||||||
int count = iStIvtIostorinvDtlService.count(new QueryWrapper<StIvtIostorinvdtl>()
|
.eq("id", form.getString("id")));
|
||||||
.eq("inv_id", form.getString("inv_id")).isNull("vehicle_code"));
|
int count = iStIvtIostorinvDtlService.count(new QueryWrapper<StIvtIostorinvdtl>()
|
||||||
if (count == 0) {
|
.eq("inv_id", form.getString("inv_id")).isNull("vehicle_code"));
|
||||||
this.update(new UpdateWrapper<StIvtIostorinv>()
|
if (count == 0) {
|
||||||
.set("status", StatusEnum.FORM_STATUS.code("已分配"))
|
this.update(new UpdateWrapper<StIvtIostorinv>()
|
||||||
.eq("id", form.getString("inv_id")));
|
.set("status", StatusEnum.FORM_STATUS.code("已分配"))
|
||||||
|
.eq("id", form.getString("inv_id")));
|
||||||
|
}
|
||||||
}
|
}
|
||||||
return vehicle_code;
|
return vehicle_code;
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -72,7 +72,7 @@ public class SyncFormMappingController {
|
|||||||
}
|
}
|
||||||
@GetMapping
|
@GetMapping
|
||||||
public ResponseEntity<Object> getAll(FormMappingQuery query, PageQuery page) {
|
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")
|
@PostMapping("/create")
|
||||||
@Log("创建表同步配置")
|
@Log("创建表同步配置")
|
||||||
|
|||||||
Reference in New Issue
Block a user