diff --git a/nladmin-system/wms-server/src/main/java/org/nl/common/base/ResponseData.java b/nladmin-system/wms-server/src/main/java/org/nl/common/base/ResponseData.java index b1542da..1f1509b 100644 --- a/nladmin-system/wms-server/src/main/java/org/nl/common/base/ResponseData.java +++ b/nladmin-system/wms-server/src/main/java/org/nl/common/base/ResponseData.java @@ -127,4 +127,12 @@ public class ResponseData implements Serializable { rspData.setRespCode(1); return new ResponseEntity(rspData, org.springframework.http.HttpStatus.OK); } + public static ResponseEntity buildMsg(String msg) { + ResponseData rspData = new ResponseData<>(); + rspData.setCode(HttpStatus.OK.value()); + rspData.setMessage(msg); + rspData.setRespMsg(msg); + rspData.setRespCode(0); + return new ResponseEntity(rspData, org.springframework.http.HttpStatus.OK); + } } diff --git a/nladmin-system/wms-server/src/main/java/org/nl/wms/pm_manage/demand/controller/PmDemandController.java b/nladmin-system/wms-server/src/main/java/org/nl/wms/pm_manage/demand/controller/PmDemandController.java index 68f4be1..0de016d 100644 --- a/nladmin-system/wms-server/src/main/java/org/nl/wms/pm_manage/demand/controller/PmDemandController.java +++ b/nladmin-system/wms-server/src/main/java/org/nl/wms/pm_manage/demand/controller/PmDemandController.java @@ -5,6 +5,7 @@ import org.nl.common.base.ResponseData; import org.nl.common.domain.query.PageQuery; import org.nl.common.logging.annotation.Log; import org.nl.wms.pm_manage.demand.service.IPmDemandService; +import org.nl.wms.pm_manage.demand.service.dto.BatchAllocateParam; import org.nl.wms.pm_manage.demand.service.dto.DemandInventryDto; import org.nl.wms.pm_manage.demand.service.dto.PmDemandDto; import org.nl.wms.pm_manage.demand.service.dto.PmDemandParam; @@ -18,6 +19,7 @@ import javax.annotation.Resource; import javax.validation.Valid; import java.util.Arrays; import java.util.List; +import java.util.Set; @RestController @RequestMapping("/api/pmDemand") @@ -70,6 +72,14 @@ public class PmDemandController { return ResponseData.build(); } + @PostMapping("/batchAllocate") + @Log("批量分配仓库") + @Transactional(rollbackFor = Exception.class) + public ResponseEntity batchAllocate(@RequestBody BatchAllocateParam param) { + pmDemandService.batchAllocateInventory(param.getIds(), param.getInventoryDis()); + return ResponseData.build(); + } + @PostMapping("/push") @Log("需求单下发") @Transactional(rollbackFor = Exception.class) @@ -77,4 +87,12 @@ public class PmDemandController { pmDemandService.pushDemand(pmDemandDtos); return ResponseData.build(); } + + @PutMapping("/issueReturnBill") + @Log("强制回传EAS") + @Transactional(rollbackFor = Exception.class) + public ResponseEntity issueReturnBill(@RequestBody Set ids) { + pmDemandService.issueReturnBill(ids); + return ResponseData.build(); + } } diff --git a/nladmin-system/wms-server/src/main/java/org/nl/wms/pm_manage/demand/service/IPmDemandService.java b/nladmin-system/wms-server/src/main/java/org/nl/wms/pm_manage/demand/service/IPmDemandService.java index fde4b4d..989a061 100644 --- a/nladmin-system/wms-server/src/main/java/org/nl/wms/pm_manage/demand/service/IPmDemandService.java +++ b/nladmin-system/wms-server/src/main/java/org/nl/wms/pm_manage/demand/service/IPmDemandService.java @@ -10,6 +10,7 @@ import org.nl.wms.pm_manage.demand.service.dto.PmDemandParam; import org.nl.wms.pm_manage.demand.service.dto.PmDemandQuery; import java.util.List; +import java.util.Set; public interface IPmDemandService extends IService { @@ -36,6 +37,13 @@ public interface IPmDemandService extends IService { */ void allocateInventory(String id, String inventoryDis); + /** + * 批量分配仓库 + * @param ids 需求单ID列表 + * @param inventoryDis 分配仓库JSON + */ + void batchAllocateInventory(List ids, String inventoryDis); + /** * 推送需求单 * 1.需求单分配出库仓库 @@ -45,4 +53,5 @@ public interface IPmDemandService extends IService { * @param pmDemandDto */ void pushDemand(List pmDemandDto); + void issueReturnBill(Set ids); } diff --git a/nladmin-system/wms-server/src/main/java/org/nl/wms/pm_manage/demand/service/dto/BatchAllocateParam.java b/nladmin-system/wms-server/src/main/java/org/nl/wms/pm_manage/demand/service/dto/BatchAllocateParam.java new file mode 100644 index 0000000..d5057c4 --- /dev/null +++ b/nladmin-system/wms-server/src/main/java/org/nl/wms/pm_manage/demand/service/dto/BatchAllocateParam.java @@ -0,0 +1,14 @@ +package org.nl.wms.pm_manage.demand.service.dto; + +import lombok.Data; + +import java.io.Serializable; +import java.util.List; + +@Data +public class BatchAllocateParam implements Serializable { + + private List ids; + + private String inventoryDis; +} diff --git a/nladmin-system/wms-server/src/main/java/org/nl/wms/pm_manage/demand/service/impl/PmDemandServiceImpl.java b/nladmin-system/wms-server/src/main/java/org/nl/wms/pm_manage/demand/service/impl/PmDemandServiceImpl.java index 646f0d7..ea53660 100644 --- a/nladmin-system/wms-server/src/main/java/org/nl/wms/pm_manage/demand/service/impl/PmDemandServiceImpl.java +++ b/nladmin-system/wms-server/src/main/java/org/nl/wms/pm_manage/demand/service/impl/PmDemandServiceImpl.java @@ -1,6 +1,9 @@ package org.nl.wms.pm_manage.demand.service.impl; import cn.hutool.core.date.DateUtil; +import cn.hutool.core.util.ObjectUtil; +import cn.hutool.json.JSONArray; +import com.alibaba.fastjson.JSON; import com.alibaba.fastjson.JSONObject; import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; import com.baomidou.mybatisplus.core.conditions.update.LambdaUpdateWrapper; @@ -11,11 +14,13 @@ import lombok.extern.slf4j.Slf4j; import org.apache.commons.lang3.StringUtils; import org.nl.common.domain.query.PageQuery; import org.nl.common.exception.BadRequestException; +import org.nl.common.utils.MapOf; import org.nl.wms.basedata_manage.service.IMdMeMaterialbaseService; import org.nl.wms.basedata_manage.service.IStructattrService; import org.nl.wms.basedata_manage.service.dao.MdMeMaterialbase; import org.nl.wms.basedata_manage.service.dao.Structattr; import org.nl.wms.ext_manage.enums.EXTConstant; +import org.nl.wms.ext_manage.purchase.service.dto.EasAuditRequestDto; import org.nl.wms.ext_manage.service.WmsToZDWmdService; import org.nl.wms.ext_manage.service.dto.ZDInventory; import org.nl.wms.pm_manage.demand.service.IPmDemandService; @@ -26,25 +31,31 @@ import org.nl.wms.pm_manage.demand.service.dto.PmDemandDto; import org.nl.wms.pm_manage.demand.service.dto.PmDemandParam; import org.nl.wms.pm_manage.demand.service.dto.PmDemandQuery; import org.nl.wms.pm_manage.demand.service.enums.DemandStatus; +import org.nl.wms.pm_manage.purchase.service.dao.Purchasedtl; +import org.nl.wms.pm_manage.purchase.service.dao.Purchasemst; +import org.nl.wms.sch_manage.service.ISchBaseRegionService; +import org.nl.wms.sch_manage.service.dao.SchBaseRegion; import org.nl.wms.system_manage.service.param.ISysParamService; import org.nl.wms.system_manage.service.param.dao.Param; import org.nl.wms.warehouse_manage.enums.IOSEnum; import org.nl.wms.warehouse_manage.inAndOut.service.IOutBillService; +import org.nl.wms.warehouse_manage.inAndOut.service.dto.IOStorInvDisDto; import org.nl.wms.warehouse_manage.inventory.IStInventoryService; import org.nl.wms.warehouse_manage.inventory.core.enums.InventoryChangeType; import org.nl.wms.warehouse_manage.inventory.core.param.impl.AddInvParam; import org.nl.wms.warehouse_manage.inventory.core.param.impl.InFinishParam; import org.nl.wms.warehouse_manage.inventory.dto.StInventoryDto; import org.nl.wms.warehouse_manage.inventory.dto.StInventoryQuery; +import org.nl.wms.warehouse_manage.stockReturn.service.IPmStockReturnService; import org.springframework.beans.BeanUtils; +import org.nl.wms.warehouse_manage.stockReturn.service.dao.PmStockReturn; +import org.nl.wms.warehouse_manage.stockReturn.service.enums.StockReturnStatusEnum; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.http.ResponseEntity; import org.springframework.stereotype.Service; import org.springframework.util.CollectionUtils; -import java.util.ArrayList; -import java.util.List; -import java.util.Map; +import java.util.*; import java.util.function.Function; import java.util.stream.Collectors; @@ -63,9 +74,15 @@ public class PmDemandServiceImpl extends ServiceImpl i private IMdMeMaterialbaseService iMdMeMaterialbaseService; @Autowired private ISysParamService iSysParamService; + @Autowired + private ISchBaseRegionService iSchBaseRegionService; + @Autowired private IStructattrService iStructattrService; + @Autowired + private IPmStockReturnService iPmStockReturnService; + @Override public Page queryPage(PmDemandQuery query, PageQuery pageQuery) { trimStringFields(query); @@ -156,6 +173,26 @@ public class PmDemandServiceImpl extends ServiceImpl i this.updateById(demand); } + @Override + public void batchAllocateInventory(List ids, String inventoryDis) { + if (CollectionUtils.isEmpty(ids)) { + throw new BadRequestException("请选择需求单"); + } + List demands = this.listByIds(ids); + if (CollectionUtils.isEmpty(demands)) { + throw new BadRequestException("需求单不存在"); + } + for (PmDemand demand : demands) { + if (!"0".equals(demand.getStatus())) { + throw new BadRequestException("仅支持对生成状态的需求单进行批量分配"); + } + } + this.update(new LambdaUpdateWrapper() + .set(PmDemand::getInventory_dis, inventoryDis) + .set(PmDemand::getStatus, DemandStatus.DIS.getValue()) + .in(PmDemand::getId, ids)); + } + @Override public List queryInventory(String skuCode) { List resultList = new ArrayList<>(); @@ -211,9 +248,17 @@ public class PmDemandServiceImpl extends ServiceImpl i } Map> partitioned = pmDemandDtos.stream() .collect(Collectors.partitioningBy(a -> ZD_STOR_SET - .contains(JSONObject.parseObject(a.getInventoryDis()).getString("horseCode")))); + .contains(a.getInventoryDis()))); List zdDemands = partitioned.get(true); List otherDemands = partitioned.get(false); + if (!CollectionUtils.isEmpty(otherDemands)) { + JSONObject billParam = convertDemandsToBillParam(otherDemands); + iOutBillService.saveBill(billParam); + this.update(new LambdaUpdateWrapper() + .set(PmDemand::getStatus,DemandStatus.SEND.getValue()) + .in(PmDemand::getId,otherDemands.stream() + .map(PmDemandDto::getId).collect(Collectors.toList()))); + } if (!CollectionUtils.isEmpty(zdDemands)) { wmsToZDWmdService.syncDemandOrder(zdDemands); //直接增加对应库存并做库存记录 @@ -242,16 +287,12 @@ public class PmDemandServiceImpl extends ServiceImpl i } iStInventoryService.changeInventory(InventoryChangeType.ADD_INV, addInvParams); iStInventoryService.changeInventory(InventoryChangeType.IN_FINISH, inFinishParams); + this.update(new LambdaUpdateWrapper() + .set(PmDemand::getStatus,DemandStatus.FINISH.getValue()) + .in(PmDemand::getId,zdDemands.stream() + .map(PmDemandDto::getId).collect(Collectors.toList()))); + } - } - if (!CollectionUtils.isEmpty(otherDemands)) { - JSONObject billParam = convertDemandsToBillParam(otherDemands); - iOutBillService.saveBill(billParam); - } - this.update(new LambdaUpdateWrapper() - .set(PmDemand::getStatus,DemandStatus.SEND.getValue()) - .in(PmDemand::getId,pmDemandDtos.stream() - .map(PmDemandDto::getId).collect(Collectors.toList()))); } private JSONObject convertDemandsToBillParam(List demands) { @@ -260,10 +301,9 @@ public class PmDemandServiceImpl extends ServiceImpl i } PmDemandDto firstDemand = demands.get(0); - JSONObject inventoryDis = JSONObject.parseObject(firstDemand.getInventoryDis()); JSONObject billParam = new JSONObject(); - billParam.put("stor_code", inventoryDis.getString("horseCode")); + billParam.put("stor_code", firstDemand.getInventoryDis()); billParam.put("biz_date", DateUtil.today()); billParam.put("bill_type", IOSEnum.BILL_TYPE.code("库存调拨")); billParam.put("remark", "需求单下推生成"); @@ -294,6 +334,7 @@ public class PmDemandServiceImpl extends ServiceImpl i detailRow.put("callback_strategy", "DealLLDBBillPmDeamndCallBack"); detailRow.put("source_bill_type", "需求单"); detailRow.put("source_billdtl_id", demand.getId()); + detailRow.put("source_bill_table", "pm_demand"); detailRow.put("remark", "关联工单:" + demand.getWorkOrder()); detailRow.put("load_port", demand.getTargetArea()); tableData.add(detailRow); @@ -301,4 +342,50 @@ public class PmDemandServiceImpl extends ServiceImpl i billParam.put("tableData", tableData); return billParam; } + + @Override + public void issueReturnBill(Set ids) { + final List pmDemands = this.listByIds(ids); + if (ObjectUtil.isEmpty(pmDemands)) { + throw new BadRequestException("未找到选中的单据"); + } + JSONObject callbackData = new JSONObject(); + callbackData.put("method", "DealLLDBBill"); + callbackData.put("type", "WMS"); + final String uuidBill = UUID.randomUUID().toString(); + JSONObject data = new JSONObject(); + data.put("issueStorageOrgUnitNo", "01.09.14"); // 业务状态,可根据实际业务逻辑设置 + data.put("bizTypeNo", "331"); // 业务日期 + data.put("receiptStorageOrgUnitNo", "01.09.14"); // 创建人编号,从当前登录用户获取 + data.put("billNo", uuidBill); // 使用工单编号作为MES单号 + // 组装明细列表 + JSONArray entrys = new JSONArray(); + for (PmDemand pmDemand : pmDemands) { + final SchBaseRegion region = iSchBaseRegionService.getOne(new LambdaQueryWrapper() + .eq(SchBaseRegion::getRegion_code, pmDemand.getProduction_line()) + .select(SchBaseRegion::getPoint_type_explain)); + if (region==null){ + throw new BadRequestException("当前产线未配置对应仓库编码getPoint_type_explain"); + } + cn.hutool.json.JSONObject entry = new cn.hutool.json.JSONObject(); + entry.put("unitNo", "PCS"); // 序号 + entry.put("qty", pmDemand.getQty()); // 数量 + entry.put("materialNo", pmDemand.getSku_code()); // 来源单据标识 + entry.put("issueWarehouseNo", pmDemand.getInventory_dis()); + entry.put("receiptWarehouseNo", region.getPoint_type_explain()); + entrys.add(entry); + } + data.put("entrys", entrys); + callbackData.put("data", data); + PmStockReturn stockReturn = new PmStockReturn(); + stockReturn.setRequest_Id(uuidBill); + stockReturn.setRequest_type(IOSEnum.BILL_TYPE.code("库存调拨")); + stockReturn.setStatus(StockReturnStatusEnum.TODO.getCode()); // 0-处理中 + stockReturn.setCreate_time(DateUtil.now()); + stockReturn.setRequest_data(callbackData.toString()); + iPmStockReturnService.save(stockReturn); + this.update(new LambdaUpdateWrapper() + .set(PmDemand::getStatus,DemandStatus.FINISH.getValue()) + .in(PmDemand::getId,ids)); + } } diff --git a/nladmin-system/wms-server/src/main/java/org/nl/wms/warehouse_manage/inAndOut/controller/OutBillController.java b/nladmin-system/wms-server/src/main/java/org/nl/wms/warehouse_manage/inAndOut/controller/OutBillController.java index 0bd483a..46d71b6 100644 --- a/nladmin-system/wms-server/src/main/java/org/nl/wms/warehouse_manage/inAndOut/controller/OutBillController.java +++ b/nladmin-system/wms-server/src/main/java/org/nl/wms/warehouse_manage/inAndOut/controller/OutBillController.java @@ -12,6 +12,7 @@ import org.nl.wms.warehouse_manage.inAndOut.service.dto.OutBillManualDivReq; import org.nl.wms.warehouse_manage.inAndOut.service.dto.OutBillOneCancelReq; import org.springframework.http.HttpStatus; import org.springframework.http.ResponseEntity; +import org.springframework.util.Assert; import org.springframework.web.bind.annotation.*; import javax.annotation.Resource; @@ -81,14 +82,16 @@ public class OutBillController { @PostMapping("/allDiv") @Log("出库单全部分配") public ResponseEntity allDiv(@RequestBody OutBillDivReq req) { - iOutBillService.doDiv(req, false); - return ResponseData.build(); + Assert.notNull(req.getSect_code(),"分配失败,全部分配请选出库库区"); + Map StringMap = iOutBillService.doDiv(req, false); + return ResponseData.buildMsg(StringMap.toString()); } @PostMapping("/autoDiv") @Log("出库单自动分配") public ResponseEntity autoDiv(@RequestBody OutBillDivReq req) { - iOutBillService.doDiv(req, true); - return ResponseData.build(); + Assert.notNull(req.getSect_code(),"分配失败,全部分配请选出库库区"); + Map StringMap = iOutBillService.doDiv(req, true); + return ResponseData.buildMsg(StringMap.toString()); } @PostMapping("/manualDiv") @Log("出库单手动分配") diff --git a/nladmin-system/wms-server/src/main/java/org/nl/wms/warehouse_manage/inAndOut/service/IOutBillService.java b/nladmin-system/wms-server/src/main/java/org/nl/wms/warehouse_manage/inAndOut/service/IOutBillService.java index 470f63e..dfcad7a 100644 --- a/nladmin-system/wms-server/src/main/java/org/nl/wms/warehouse_manage/inAndOut/service/IOutBillService.java +++ b/nladmin-system/wms-server/src/main/java/org/nl/wms/warehouse_manage/inAndOut/service/IOutBillService.java @@ -87,7 +87,7 @@ public interface IOutBillService extends IService { */ List getOutBillDis(Map whereJson); - void doDiv(OutBillDivReq req, boolean singleDtl); + Map doDiv(OutBillDivReq req, boolean singleDtl); void doCancel(String iostorinvId, String iostorinvdtlId); diff --git a/nladmin-system/wms-server/src/main/java/org/nl/wms/warehouse_manage/inAndOut/service/impl/OutBillServiceImpl.java b/nladmin-system/wms-server/src/main/java/org/nl/wms/warehouse_manage/inAndOut/service/impl/OutBillServiceImpl.java index 8f36ce1..b67f6ba 100644 --- a/nladmin-system/wms-server/src/main/java/org/nl/wms/warehouse_manage/inAndOut/service/impl/OutBillServiceImpl.java +++ b/nladmin-system/wms-server/src/main/java/org/nl/wms/warehouse_manage/inAndOut/service/impl/OutBillServiceImpl.java @@ -347,7 +347,8 @@ public class OutBillServiceImpl extends ServiceImpl i @Override @Transactional(rollbackFor = Exception.class) - public void doDiv(OutBillDivReq req, boolean singleDtl) { + public Map doDiv(OutBillDivReq req, boolean singleDtl) { + Map result = new HashMap<>(); List flatWarehouse = getFlatWarehouseCodes(); String iostorinvId = req.getIostorinv_id(); IOStorInv ioStorInv = ioStorInvMapper.selectById(iostorinvId); @@ -373,7 +374,13 @@ public class OutBillServiceImpl extends ServiceImpl i .strategyMaters(list); if (singleDtl) {builder.inv_code(ioStorInv.getBill_code());} //库存分配 - List structMaterials = iStructattrService.outBoundSectDiv(builder.build()); + List structMaterials; + try { + structMaterials = iStructattrService.outBoundSectDiv(builder.build()); + }catch (Exception ex){ + result.put("物料"+dtl.getMaterial_code(),ex.getMessage()); + break; + } int seqNo = 1; BigDecimal allocationCanuseQty = BigDecimal.ZERO; List disSet = new ArrayList<>(); @@ -438,6 +445,7 @@ public class OutBillServiceImpl extends ServiceImpl i } //更新主单子状态 this.updateBillStatus(iostorinvId); + return result; } @@ -809,33 +817,7 @@ public class OutBillServiceImpl extends ServiceImpl i throw new BadRequestException("未找到明细"); } final IOStorInv ioStorInv = ioStorInvMapper.selectById(ioStorInvDtl.getIostorinv_id()); - if (ioStorInv.getBill_type().equals(IOSEnum.BILL_TYPE.code("库存调拨"))){ - List addInvParams = new ArrayList<>(); - for (IOStorInvDis invDis : disList) { - if (invDis.getTask_id() == null && !StringUtils.isEmpty(invDis.getPoint_code())){ - //出库点所属区域 - String sectCode = iSchBasePointService.getPointRegionMapperSect(invDis.getPoint_code()); - if (sectCode ==null){ - throw new BadRequestException("明细完成失败,当前点位未配置所属库区"); - } - //更新库存,查询托盘 - final Structattr targetAttr = iStructattrService.getOne(new LambdaQueryWrapper() - .eq(Structattr::getSect_code, sectCode)); - if (targetAttr ==null ||StringUtils.isEmpty(targetAttr.getStoragevehicle_code())){ - throw new BadRequestException("明细完成失败,当前调拨目标区域不存在"+invDis.getPoint_code()); - } - AddInvParam addParam = new AddInvParam(); - addParam.setPcsn(invDis.getPcsn()); - addParam.setMaterialCode(invDis.getMaterial_code()); - addParam.setStoragevehicleCode(targetAttr.getStoragevehicle_code()); - addParam.setUnitName(invDis.getQty_unit_name()); - addParam.setUnitId(invDis.getQty_unit_id()); - addParam.setQty(invDis.getPlan_qty()); - addInvParams.add(addParam); - } - } - iStInventoryService.changeInventory(InventoryChangeType.ADD_INV, addInvParams); - } + //非标处理,到线边库的线边库要加库存 // 如果分配明细全部完成则更新明细表状态 if (countDis == 0){ // 更新明细表状态 diff --git a/nladmin-system/wms-server/src/main/java/org/nl/wms/warehouse_manage/inventory/impl/StInventoryServiceImpl.java b/nladmin-system/wms-server/src/main/java/org/nl/wms/warehouse_manage/inventory/impl/StInventoryServiceImpl.java index cf1d4cc..aa26033 100644 --- a/nladmin-system/wms-server/src/main/java/org/nl/wms/warehouse_manage/inventory/impl/StInventoryServiceImpl.java +++ b/nladmin-system/wms-server/src/main/java/org/nl/wms/warehouse_manage/inventory/impl/StInventoryServiceImpl.java @@ -65,9 +65,6 @@ public class StInventoryServiceImpl implements IStInventoryService { if (!StringUtils.isEmpty(invParam.getPcsn())){ query.eq(GroupPlate::getPcsn,invParam.getPcsn()); } - if (invParam.getStoragevehicleCode().startsWith("VTP")){ - query.last("limit 1"); - } GroupPlate groupPlate = iMdPbGroupplateService.getOne(query); if (groupPlate == null){ GroupPlate groupDao = GroupPlate.builder() @@ -165,12 +162,16 @@ public class StInventoryServiceImpl implements IStInventoryService { queryWrapper.eq(GroupPlate::getPcsn, outFinishParam.getPcsn()); } GroupPlate groupPlate = iMdPbGroupplateService.getOne(queryWrapper); - groupPlate.setFrozen_qty(BigDecimal.ZERO.min(groupPlate.getFrozen_qty().subtract(outFinishParam.getChangeQty()))); - groupPlate.setQty(groupPlate.getQty().subtract(outFinishParam.getChangeQty())); - groupPlate.setUpdate_id(SecurityUtils.getCurrentUserId()); - groupPlate.setUpdate_name(SecurityUtils.getCurrentNickName()); - groupPlate.setUpdate_time(DateUtil.now()); - iMdPbGroupplateService.updateById(groupPlate); + if (groupPlate.getQty().subtract(outFinishParam.getChangeQty()).intValue() <= 0){ + iMdPbGroupplateService.removeById(groupPlate.getGroup_id()); + }else { + groupPlate.setFrozen_qty(BigDecimal.ZERO.min(groupPlate.getFrozen_qty().subtract(outFinishParam.getChangeQty()))); + groupPlate.setQty(groupPlate.getQty().subtract(outFinishParam.getChangeQty())); + groupPlate.setUpdate_id(SecurityUtils.getCurrentUserId()); + groupPlate.setUpdate_name(SecurityUtils.getCurrentNickName()); + groupPlate.setUpdate_time(DateUtil.now()); + iMdPbGroupplateService.updateById(groupPlate); + } StIvtStructivtflow stIvtStructivtflow = new StIvtStructivtflow(); stIvtStructivtflow.setId(IdUtil.getStringId()); stIvtStructivtflow.setUpdate_time(DateUtil.now()); diff --git a/nladmin-system/wms-server/src/main/java/org/nl/wms/warehouse_manage/stockReturn/strategy/core/impl/DealLLDBBillPmDeamndCallBack.java b/nladmin-system/wms-server/src/main/java/org/nl/wms/warehouse_manage/stockReturn/strategy/core/impl/DealLLDBBillPmDeamndCallBack.java index 01ff2c1..720aaa6 100644 --- a/nladmin-system/wms-server/src/main/java/org/nl/wms/warehouse_manage/stockReturn/strategy/core/impl/DealLLDBBillPmDeamndCallBack.java +++ b/nladmin-system/wms-server/src/main/java/org/nl/wms/warehouse_manage/stockReturn/strategy/core/impl/DealLLDBBillPmDeamndCallBack.java @@ -4,8 +4,13 @@ import cn.hutool.core.date.DateUtil; import cn.hutool.json.JSONArray; import cn.hutool.json.JSONObject; import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; +import com.google.common.collect.Lists; +import lombok.extern.slf4j.Slf4j; +import org.apache.commons.lang3.StringUtils; import org.nl.common.exception.BadRequestException; import org.nl.common.utils.MapOf; +import org.nl.wms.basedata_manage.service.IStructattrService; +import org.nl.wms.basedata_manage.service.dao.Structattr; import org.nl.wms.ext_manage.api.MesApi; import org.nl.wms.pm_manage.demand.service.IPmDemandService; import org.nl.wms.pm_manage.demand.service.dao.PmDemand; @@ -13,19 +18,26 @@ import org.nl.wms.pm_manage.demand.service.enums.DemandStatus; import org.nl.wms.sch_manage.service.ISchBaseRegionService; import org.nl.wms.sch_manage.service.dao.SchBaseRegion; import org.nl.wms.warehouse_manage.enums.IOSEnum; +import org.nl.wms.warehouse_manage.inAndOut.service.dao.IOStorInvDis; import org.nl.wms.warehouse_manage.inAndOut.service.dao.IOStorInvDtl; import org.nl.wms.warehouse_manage.inAndOut.service.dao.mapper.IOStorInvDisMapper; import org.nl.wms.warehouse_manage.inAndOut.service.dto.IOStorInvDisDto; +import org.nl.wms.warehouse_manage.inventory.IStInventoryService; +import org.nl.wms.warehouse_manage.inventory.core.enums.InventoryChangeType; +import org.nl.wms.warehouse_manage.inventory.core.param.impl.AddInvParam; +import org.nl.wms.warehouse_manage.inventory.core.param.impl.InFinishParam; import org.nl.wms.warehouse_manage.stockReturn.service.IPmStockReturnService; import org.nl.wms.warehouse_manage.stockReturn.service.dao.PmStockReturn; import org.nl.wms.warehouse_manage.stockReturn.service.enums.StockReturnStatusEnum; import org.nl.wms.warehouse_manage.stockReturn.strategy.core.CallbackStrategy; import org.nl.wms.welding_manage.service.work_order.IWorkOrderService; import org.nl.wms.welding_manage.service.work_order.dao.WorkOrderDao; +import org.springframework.beans.BeanUtils; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Service; import javax.annotation.Resource; +import java.util.ArrayList; import java.util.Arrays; import java.util.List; @@ -33,6 +45,7 @@ import java.util.List; * 需求单库存调拨回传 */ @Service(value = "DealLLDBBillPmDeamndCallBack") +@Slf4j public class DealLLDBBillPmDeamndCallBack implements CallbackStrategy { @Autowired @@ -44,6 +57,10 @@ public class DealLLDBBillPmDeamndCallBack implements CallbackStrategy { @Autowired private ISchBaseRegionService iSchBaseRegionService; @Autowired + private IStructattrService iStructattrService; + @Autowired + private IStInventoryService iStInventoryService; + @Autowired private MesApi mesApi; @Override @@ -53,15 +70,40 @@ public class DealLLDBBillPmDeamndCallBack implements CallbackStrategy { if (one == null){ throw new BadRequestException("需求单不存在"); } - if (one.getStatus().equals(DemandStatus.FINISH.getValue())){ - return; - } final SchBaseRegion region = iSchBaseRegionService.getOne(new LambdaQueryWrapper() .eq(SchBaseRegion::getRegion_code, one.getProduction_line()) .select(SchBaseRegion::getPoint_type_explain)); if (region==null){ throw new BadRequestException("当前产线未配置对应仓库编码getPoint_type_explain"); } + //更新库存,查询托盘 + final Structattr targetAttr = iStructattrService.getOne(new LambdaQueryWrapper() + .eq(Structattr::getSect_code, region.getPoint_type_explain())); + if (targetAttr ==null ||StringUtils.isEmpty(targetAttr.getStoragevehicle_code())){ + throw new BadRequestException("调拨失败,当前调拨目标区域缺少仓库熟悉"+targetAttr.getStruct_code()); + } + List addInvParams = new ArrayList<>(); + AddInvParam addParam = new AddInvParam(); + addParam.setPcsn(StringUtils.isEmpty(param.getPcsn())?"1":param.getPcsn()); + addParam.setMaterialCode(param.getMaterial_code()); + addParam.setStoragevehicleCode(targetAttr.getStoragevehicle_code()); + addParam.setStructCode(targetAttr.getStruct_code()); + addParam.setSectCode(targetAttr.getSect_code()); + addParam.setStorCode(targetAttr.getStor_code()); + addParam.setUnitName(param.getQty_unit_name()); + addParam.setUnitId(param.getQty_unit_id()); + addParam.setQty(param.getAssign_qty()); + addInvParams.add(addParam); + iStInventoryService.changeInventory(InventoryChangeType.ADD_INV, addInvParams); + final List inFinishParams = new ArrayList<>(); + InFinishParam inFinishParam = new InFinishParam(); + BeanUtils.copyProperties(addParam,inFinishParam); + inFinishParam.setRemark("需求单库存调拨"); + inFinishParams.add(inFinishParam); + iStInventoryService.changeInventory(InventoryChangeType.IN_FINISH, inFinishParams); + if (one.getStatus().equals(DemandStatus.FINISH.getValue())){ + return; + } one.setAssign_qty(param.getAssign_qty()); if (one.getAssign_qty().intValue()>=one.getQty().intValue()){ one.setStatus(DemandStatus.FINISH.getValue()); @@ -74,7 +116,7 @@ public class DealLLDBBillPmDeamndCallBack implements CallbackStrategy { data.put("issueStorageOrgUnitNo", "01.09.14"); // 业务状态,可根据实际业务逻辑设置 data.put("bizTypeNo", "331"); // 业务日期 data.put("receiptStorageOrgUnitNo", "01.09.14"); // 创建人编号,从当前登录用户获取 - data.put("billNo", param.getIostorinv_id()); // 使用工单编号作为MES单号 + data.put("billNo", param.getIostorinvdtl_id()+"#"+param.getSeq_no()); // 使用工单编号作为MES单号 // 组装明细列表 JSONArray entrys = new JSONArray(); final List disSet = ioStorInvDisMapper.queryOutBillDisDtl(MapOf.of("iostorinvdtl_id", param.getIostorinvdtl_id())); @@ -96,15 +138,20 @@ public class DealLLDBBillPmDeamndCallBack implements CallbackStrategy { stockReturn.setCreate_time(now); stockReturn.setRequest_data(callbackData.toString()); //回传MES - mesApi.pmDemandCallback(Arrays.asList(new MesApi.PmDemandCall( - one.getId() - ,one.getId() - ,now,one.getTarget_area() - ,1 - ,disSet.get(0).getStoragevehicle_code(), - param.getAssign_qty().toString()))); + try { + mesApi.pmDemandCallback(Arrays.asList(new MesApi.PmDemandCall( + one.getId() + ,one.getId() + ,now,one.getTarget_area() + ,1 + ,disSet.get(0).getStoragevehicle_code(), + param.getAssign_qty().toString()))); + }catch (Exception ex){ + log.error("DealLLDBBillPmDeamndCallBack#pmDemandCallback error:{}",ex.getMessage()); + } iPmStockReturnService.save(stockReturn); } this.iPmDemandService.updateById(one); + } } diff --git a/nladmin-ui/src/views/wms/pm_manage/allocationIn/index.vue b/nladmin-ui/src/views/wms/pm_manage/allocationIn/index.vue index dd054a7..0215f42 100644 --- a/nladmin-ui/src/views/wms/pm_manage/allocationIn/index.vue +++ b/nladmin-ui/src/views/wms/pm_manage/allocationIn/index.vue @@ -75,7 +75,7 @@ size="mini" :disabled="audit_flag" @click="issueReturnBill" - >下发回传单 + >强制回传EAS - + + + @@ -222,6 +226,10 @@ export default { billStatusFormat(row) { return ({ '0': '已创建', '1': '执行中', '2': '已完成' })[row.bill_status] || row.bill_status }, + statusTagType(status) { + const map = { '0': 'warning', '1': 'primary', '2': 'success' } + return map[String(status)] || '' + }, formatDate(val) { if (!val) return '' if (typeof val === 'string') return val diff --git a/nladmin-ui/src/views/wms/pm_manage/demand/demand.js b/nladmin-ui/src/views/wms/pm_manage/demand/demand.js index 2619816..a02f247 100644 --- a/nladmin-ui/src/views/wms/pm_manage/demand/demand.js +++ b/nladmin-ui/src/views/wms/pm_manage/demand/demand.js @@ -39,7 +39,13 @@ export function allocate(data) { data }) } - +export function batchAllocate(data) { + return request({ + url: 'api/pmDemand/batchAllocate', + method: 'post', + data + }) +} export function push(data) { return request({ url: 'api/pmDemand/push', @@ -47,5 +53,11 @@ export function push(data) { data }) } - -export default { add, edit, del, queryInventory, allocate, push } +export function issueReturnBill(data) { + return request({ + url: '/api/pmDemand/issueReturnBill', + method: 'put', + data + }) +} +export default { add, edit, del, queryInventory, batchAllocate, allocate, push, issueReturnBill } diff --git a/nladmin-ui/src/views/wms/pm_manage/demand/index.vue b/nladmin-ui/src/views/wms/pm_manage/demand/index.vue index 2bf98c6..7b95a67 100644 --- a/nladmin-ui/src/views/wms/pm_manage/demand/index.vue +++ b/nladmin-ui/src/views/wms/pm_manage/demand/index.vue @@ -21,7 +21,9 @@ + 强制回传EAS 下推出库 + 批量分配 @@ -57,11 +59,6 @@ - - - - - + + +
+ 已选择 {{ multipleSelection.length }} 条需求单 +
+ + + + {{ item.code }} {{ item.name }} + + + + +
+ @@ -88,6 +103,7 @@ + @@ -105,12 +121,13 @@