diff --git a/mes/hd/nladmin-system/src/main/java/org/nl/wms/mps_manage/ordermanage/service/saleOrder/dao/mapper/xml/MpsSaleOrderMapper.xml b/mes/hd/nladmin-system/src/main/java/org/nl/wms/mps_manage/ordermanage/service/saleOrder/dao/mapper/xml/MpsSaleOrderMapper.xml index e2837d2e..abcdf4bd 100644 --- a/mes/hd/nladmin-system/src/main/java/org/nl/wms/mps_manage/ordermanage/service/saleOrder/dao/mapper/xml/MpsSaleOrderMapper.xml +++ b/mes/hd/nladmin-system/src/main/java/org/nl/wms/mps_manage/ordermanage/service/saleOrder/dao/mapper/xml/MpsSaleOrderMapper.xml @@ -7,6 +7,7 @@ der.*, mater.material_code, mater.material_name, + mater.material_spec, unit.unit_name AS qty_unit_name FROM mps_sale_order der diff --git a/mes/hd/nladmin-system/src/main/java/org/nl/wms/storage_manage/IOSEnum.java b/mes/hd/nladmin-system/src/main/java/org/nl/wms/storage_manage/IOSEnum.java index 59929f7e..022ba03b 100644 --- a/mes/hd/nladmin-system/src/main/java/org/nl/wms/storage_manage/IOSEnum.java +++ b/mes/hd/nladmin-system/src/main/java/org/nl/wms/storage_manage/IOSEnum.java @@ -19,6 +19,8 @@ public enum IOSEnum { IO_TYPE(MapOf.of("入库", "0", "出库", "1")), //是否 IS_USED(MapOf.of("是", "1", "否", "0")), + //托盘超限类型 + VEHICLE_OVER_TYPE(MapOf.of("标准", "00", "横向超", "01","纵向超","02")), //单据类型 BILL_TYPE(MapOf.of("生产入库", "11", "手工入库", "12", "原料入库", "13" , "领料出库", "21", "销售出库", "22", "手工出库", "23")), diff --git a/mes/hd/nladmin-system/src/main/java/org/nl/wms/storage_manage/productmanage/controller/iostorInv/IStivtlostorivnCpInController.java b/mes/hd/nladmin-system/src/main/java/org/nl/wms/storage_manage/productmanage/controller/iostorInv/IStivtlostorivnCpInController.java index 4dfa0b09..8bd01199 100644 --- a/mes/hd/nladmin-system/src/main/java/org/nl/wms/storage_manage/productmanage/controller/iostorInv/IStivtlostorivnCpInController.java +++ b/mes/hd/nladmin-system/src/main/java/org/nl/wms/storage_manage/productmanage/controller/iostorInv/IStivtlostorivnCpInController.java @@ -75,11 +75,10 @@ public class IStivtlostorivnCpInController { } @PostMapping("/vehicleCheck") - @Log("校验载具是否存在") - @ApiOperation("校验载具是否存在") - public ResponseEntity vehicleCheck(@RequestBody JSONObject whereJson){ - iStIvtIostorinvCpService.vehicleCheck(whereJson); - return new ResponseEntity<>(HttpStatus.OK); + @Log("生成载具") + @ApiOperation("生成载具") + public ResponseEntity vehicleCheck(){ + return new ResponseEntity<>(iStIvtIostorinvCpService.vehicleCheck(),HttpStatus.OK); } @PostMapping("/confirmvehicle") diff --git a/mes/hd/nladmin-system/src/main/java/org/nl/wms/storage_manage/productmanage/service/iostorInv/IStIvtIostorinvCpService.java b/mes/hd/nladmin-system/src/main/java/org/nl/wms/storage_manage/productmanage/service/iostorInv/IStIvtIostorinvCpService.java index f9389824..90e91f5e 100644 --- a/mes/hd/nladmin-system/src/main/java/org/nl/wms/storage_manage/productmanage/service/iostorInv/IStIvtIostorinvCpService.java +++ b/mes/hd/nladmin-system/src/main/java/org/nl/wms/storage_manage/productmanage/service/iostorInv/IStIvtIostorinvCpService.java @@ -110,13 +110,13 @@ public interface IStIvtIostorinvCpService extends IService { void delete(Long[] ids); /** - * 校验载具是否存在 - * @param whereJson + * 生成载具编码 + * @return JSONObject * { - * "storagevehicle_code" : 载具号 + * vehicle_code : 编码 * } */ - void vehicleCheck(JSONObject whereJson); + JSONObject vehicleCheck(); /** * 分配 diff --git a/mes/hd/nladmin-system/src/main/java/org/nl/wms/storage_manage/productmanage/service/iostorInv/impl/StIvtIostorinvCpServiceImpl.java b/mes/hd/nladmin-system/src/main/java/org/nl/wms/storage_manage/productmanage/service/iostorInv/impl/StIvtIostorinvCpServiceImpl.java index 173e20a3..b71e3405 100644 --- a/mes/hd/nladmin-system/src/main/java/org/nl/wms/storage_manage/productmanage/service/iostorInv/impl/StIvtIostorinvCpServiceImpl.java +++ b/mes/hd/nladmin-system/src/main/java/org/nl/wms/storage_manage/productmanage/service/iostorInv/impl/StIvtIostorinvCpServiceImpl.java @@ -9,6 +9,7 @@ import com.alibaba.fastjson.JSON; import com.alibaba.fastjson.JSONArray; import com.alibaba.fastjson.JSONObject; import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; +import com.baomidou.mybatisplus.core.conditions.update.LambdaUpdateWrapper; import com.baomidou.mybatisplus.core.conditions.update.UpdateWrapper; import com.baomidou.mybatisplus.extension.plugins.pagination.Page; import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; @@ -201,8 +202,7 @@ public class StIvtIostorinvCpServiceImpl extends ServiceImpl().lambda() - .eq(StIvtIostorinvdisCp::getIostorinvdtl_id, jsonDtl.getString("iostorinvdtl_id")) - ); - if (ObjectUtil.isNotEmpty(disIs)) throw new BadRequestException("此明细已组盘"); - List disDtlList = tableDisDtl .stream() .map(row -> (JSONObject) row) .filter(row -> ObjectUtil.isNotEmpty(row.getString("bucketunique"))) + .filter(row -> ObjectUtil.isEmpty(row.getString("iostorinvdis_id"))) .collect(Collectors.toList()); // 1.处理分配明细数据 JSONObject param = new JSONObject(); - param.put("iostorinv_id",jsonDtl.getString("iostorinv_id")); - param.put("iostorinvdtl_id",jsonDtl.getString("iostorinvdtl_id")); param.put("iostorinvdis_id",org.nl.common.utils.IdUtil.getStringId()); if (ObjectUtil.isNotEmpty(disDtlList)) { @@ -238,7 +229,7 @@ public class StIvtIostorinvCpServiceImpl extends ServiceImpl> collect = disDtlDaoListAll .stream() - .collect(Collectors.groupingBy(StIvtIostorinvdisdtlCp::getStoragevehicle_code)); + .collect(Collectors.groupingBy(StIvtIostorinvdisdtlCp::getIostorinvdtl_id)); for (List disDtlDaoList : collect.values()) { // 3.调用服务插入分配明细 @@ -256,8 +247,8 @@ public class StIvtIostorinvCpServiceImpl extends ServiceImpl().lambda() .eq(StIvtIostorinvdisdtlCp::getIostorinvdis_id, param.getString("iostorinvdis_id")) - .eq(StIvtIostorinvdisdtlCp::getStoragevehicle_code, disDao.getStoragevehicle_code()) + .eq(StIvtIostorinvdisdtlCp::getIostorinvdtl_id, disDao.getIostorinvdtl_id()) ); - // 6.更新载具扩展属性表 - MdPbStoragevehicleext vehicleDao = new MdPbStoragevehicleext(); - vehicleDao.setMaterial_id(disDtlDao.getMaterial_id()); - vehicleDao.setStorage_qty(qty); - vehicleDao.setUpdate_id(SecurityUtils.getCurrentUserId()); - vehicleDao.setUpdate_name(SecurityUtils.getCurrentNickName()); - vehicleDao.setUpdate_time(new Date()); - - iMdPbStoragevehicleextService.update( - vehicleDao,new QueryWrapper().lambda() - .eq(MdPbStoragevehicleext::getStoragevehicle_code, disDtlDao.getStoragevehicle_code()) - ); } } @@ -306,6 +285,7 @@ public class StIvtIostorinvCpServiceImpl extends ServiceImpl (JSONObject) row) .filter(row -> ObjectUtil.isEmpty(row.getString("bucketunique"))) + .filter(row -> ObjectUtil.isEmpty(row.getString("iostorinvdis_id"))) .collect(Collectors.toList()); if (ObjectUtil.isNotEmpty(unDisDtlList)) { @@ -320,48 +300,53 @@ public class StIvtIostorinvCpServiceImpl extends ServiceImpl disDaoList = iostorinvdisCpService.list( - new QueryWrapper().lambda() - .eq(StIvtIostorinvdisCp::getIostorinvdtl_id, whereJson.getString("iostorinvdtl_id")) - ); - - if (ObjectUtil.isEmpty(disDaoList)) throw new BadRequestException("没有可取消组盘的分配明细!"); - - boolean is_struct = disDaoList.stream() - .anyMatch(row -> ObjectUtil.isNotEmpty(row.getStruct_id())); - - if (is_struct) throw new BadRequestException("有分配明细已分配货位不可取消组盘!"); - - // 2.更新载具扩展属性、 箱记录 - Map> collect = disDaoList.stream().collect(Collectors.groupingBy(StIvtIostorinvdisCp::getStoragevehicle_code)); - - for (String storagevehicle_code : collect.keySet()) { - // 更新载具扩展属性 - iMdPbStoragevehicleextService.update( - new UpdateWrapper().lambda() - .set(MdPbStoragevehicleext::getMaterial_id, "") - .set(MdPbStoragevehicleext::getStorage_qty, "0") - .eq(MdPbStoragevehicleext::getStoragevehicle_code, storagevehicle_code) - ); + if (ObjectUtil.isNotEmpty(whereJson.getString("struct_id"))) throw new BadRequestException("已分配货位,不可取消组盘!"); + // 2.判断是否有箱,有则更新箱记录表、分配表 + if (ObjectUtil.isNotEmpty(bucketunique)) { // 更新箱记录表 iMdPbBucketrecordService.update( new UpdateWrapper().lambda() - .set(MdPbBucketrecord::getStoragevehicle_code, "") - .set(MdPbBucketrecord::getStatus, MasterEnum.BOX_STATUS.code("生成")) - .set(MdPbBucketrecord::getStoragevehicle_id, "") - .eq(MdPbBucketrecord::getStatus, MasterEnum.BOX_STATUS.code("组盘")) - .eq(MdPbBucketrecord::getStoragevehicle_code, storagevehicle_code) + .set(MdPbBucketrecord::getStoragevehicle_code, "") + .set(MdPbBucketrecord::getStatus, MasterEnum.BOX_STATUS.code("生成")) + .set(MdPbBucketrecord::getStoragevehicle_id, "") + .eq(MdPbBucketrecord::getStatus, MasterEnum.BOX_STATUS.code("组盘")) + .eq(MdPbBucketrecord::getStoragevehicle_code, whereJson.getString("storagevehicle_code")) + ); + + // 删除分配明细 + iStIvtIostorinvdisdtlCpService.remove( + new QueryWrapper().lambda() + .eq(StIvtIostorinvdisdtlCp::getIostorinvdis_id, whereJson.getString("iostorinvdis_id")) + .eq(StIvtIostorinvdisdtlCp::getBucketunique, bucketunique) + ); + + // 更新分配表 + StIvtIostorinvdisCp disDao = iostorinvdisCpService.getById(whereJson.getString("iostorinvdis_id")); + BigDecimal qty = NumberUtil.sub(disDao.getReal_qty(), whereJson.getBigDecimal("qty")); + disDao.setReal_qty(qty); + disDao.setPlan_qty(qty); + + if (disDao.getReal_qty().doubleValue() <= 0) { + // 删除分配 + iostorinvdisCpService.removeById(disDao); + } else { + // 更新 + iostorinvdisCpService.updateById(disDao); + } + + } else { + // 3:无箱 - 直接删除分配 + iostorinvdisCpService.remove( + new QueryWrapper().lambda() + .eq(StIvtIostorinvdisCp::getIostorinvdis_id, whereJson.getString("iostorinvdis_id")) ); } - // 3.删除分配表 - iostorinvdisCpService.remove( - new QueryWrapper().lambda() - .eq(StIvtIostorinvdisCp::getIostorinvdtl_id, whereJson.getString("iostorinvdtl_id")) - ); + } @@ -378,29 +363,13 @@ public class StIvtIostorinvCpServiceImpl extends ServiceImpl().lambda() - .eq(MdPbStoragevehicleinfo::getStoragevehicle_code, whereJson.getString("storagevehicle_code")) - .eq(MdPbStoragevehicleinfo::getIs_used, true) - ); + // 生成编码返回 + JSONObject json = new JSONObject(); + json.put("vehicle_code", CodeUtil.getNewCode("VEHICCLE_CODE_CDMTP")); + return json; - if (ObjectUtil.isEmpty(daoVehicle)) throw new BadRequestException("此载具不存在或未启用"); - - // 2.校验载具是否已组盘 - MdPbStoragevehicleext daoVehicleExt = iMdPbStoragevehicleextService.getOne( - new QueryWrapper().lambda() - .eq(MdPbStoragevehicleext::getStoragevehicle_code, whereJson.getString("storagevehicle_code")) - ); - - if (ObjectUtil.isEmpty(daoVehicleExt)) { - throw new BadRequestException("此载具扩展属性不存在,请维护!"); - } else { - if (ObjectUtil.isNotEmpty(daoVehicleExt.getMaterial_id())) - throw new BadRequestException("此载具已组盘!"); - } } @Override @@ -430,7 +399,7 @@ public class StIvtIostorinvCpServiceImpl extends ServiceImpl> collect = iostorinvdisCpService.list( + new QueryWrapper().lambda() + .eq(StIvtIostorinvdisCp::getIostorinv_id, whereJson.getString("iostorinv_id")) + .eq(StIvtIostorinvdisCp::getStoragevehicle_code, whereJson.getString("storagevehicle_code")) + ) + .stream() + .collect(Collectors.groupingBy(StIvtIostorinvdisCp::getMaterial_id)); - disDao.setStruct_id(attrDao.getStruct_id()); - iStIvtStructivtCpService.UpdateIvt(ivtDataParam(disDao,ChangeIvtUtil.ADDWAREHOUSING_QTY,dtlDao.getSource_billdtl_id())); + for (List list : collect.values()) { + BigDecimal qty = list + .stream() + .map(StIvtIostorinvdisCp::getReal_qty) + .reduce(BigDecimal.ZERO, BigDecimal::add); + + StIvtIostorinvdisCp disDao_1 = list.get(0); + disDao_1.setPlan_qty(qty); + + StIvtIostorinvdtlCp dtlDao = iostorinvdtlCpService.getById(disDao_1.getIostorinvdtl_id()); + + iStIvtStructivtCpService.UpdateIvt(ivtDataParam(disDao_1,ChangeIvtUtil.ADDWAREHOUSING_QTY,dtlDao.getBase_billdtl_id())); + + } } @Override @@ -503,7 +490,8 @@ public class StIvtIostorinvCpServiceImpl extends ServiceImpl().lambda() - .eq(StIvtIostorinvdisdtlCp::getIostorinvdis_id,disDao.getIostorinvdis_id()) + .eq(StIvtIostorinvdisdtlCp::getIostorinv_id,disDao.getIostorinv_id()) + .eq(StIvtIostorinvdisdtlCp::getStoragevehicle_code, disDao.getStoragevehicle_code()) ); // 3.更新任务 @@ -526,9 +514,8 @@ public class StIvtIostorinvCpServiceImpl extends ServiceImpl().lambda() @@ -538,41 +525,83 @@ public class StIvtIostorinvCpServiceImpl extends ServiceImpl> collect = iostorinvdisCpService.list( + new QueryWrapper().lambda() + .eq(StIvtIostorinvdisCp::getIostorinv_id, whereJson.getString("iostorinv_id")) + .eq(StIvtIostorinvdisCp::getStoragevehicle_code, whereJson.getString("storagevehicle_code")) + ) + .stream() + .collect(Collectors.groupingBy(StIvtIostorinvdisCp::getMaterial_id)); - // 4.更新分配 - iostorinvdisCpService.updateById( - disDao.setStruct_name("").setStruct_code("") - .setStruct_id("").setSect_id("") - .setSect_code("").setSect_name("") - .setPoint_id("").setPoint_code("") - .setPoint_name("") - .setWork_status(IOSEnum.WORK_STATUS.code("生成")) - ); + for (List list : collect.values()) { - // 5.更新明细 - StIvtIostorinvdtlCp dtlDao = iostorinvdtlCpService.getOne( - new QueryWrapper().lambda() - .eq(StIvtIostorinvdtlCp::getIostorinvdtl_id, disDao.getIostorinvdtl_id()) - ); + BigDecimal qty = list + .stream() + .map(StIvtIostorinvdisCp::getReal_qty) + .reduce(BigDecimal.ZERO, BigDecimal::add); + + StIvtIostorinvdisCp disDao_1 = list.get(0); + disDao_1.setPlan_qty(qty); + + iStIvtStructivtCpService.UpdateIvt(ivtDataParam(disDao_1,ChangeIvtUtil.SUBWAREHOUSING_QTY,null)); - if (StrUtil.equals(dtlDao.getBill_status(), IOSEnum.BILL_STATUS.code("生成"))) { - throw new BadRequestException("没有可取消的分配明细!"); } - dtlDao.setAssign_qty(NumberUtil.sub(dtlDao.getAssign_qty(),disDao.getReal_qty())); - dtlDao.setUnassign_qty(disDao.getReal_qty()); + // 4.更新明细 + Map> collect2 = iostorinvdisCpService.list( + new QueryWrapper().lambda() + .eq(StIvtIostorinvdisCp::getIostorinv_id, whereJson.getString("iostorinv_id")) + .eq(StIvtIostorinvdisCp::getStoragevehicle_code, whereJson.getString("storagevehicle_code")) + ) + .stream() + .filter(row -> ObjectUtil.isNotEmpty(row.getStruct_id())) + .collect(Collectors.groupingBy(StIvtIostorinvdisCp::getIostorinvdtl_id)); - if (dtlDao.getAssign_qty().doubleValue() == 0) { - dtlDao.setBill_status(IOSEnum.BILL_STATUS.code("生成")); - } else if (dtlDao.getAssign_qty().doubleValue() > 0) { - dtlDao.setBill_status(IOSEnum.BILL_STATUS.code("分配中")); + for (List collectList : collect2.values()) { + // 计算已分配 + BigDecimal qty = collectList + .stream() + .map(StIvtIostorinvdisCp::getReal_qty) + .reduce(BigDecimal.ZERO, BigDecimal::add); + + StIvtIostorinvdtlCp dtlDao = iostorinvdtlCpService.getById(collectList.get(0).getIostorinvdtl_id()); + + // 明细已分配数量 + BigDecimal assign_qty = NumberUtil.sub(dtlDao.getAssign_qty(), qty); + // 明细未分配数量 + BigDecimal unAssign_qty = NumberUtil.add(dtlDao.getUnassign_qty(), qty); + + dtlDao.setAssign_qty(assign_qty); + dtlDao.setUnassign_qty(unAssign_qty); + + if (assign_qty.doubleValue() == 0) { + dtlDao.setBill_status(IOSEnum.BILL_STATUS.code("生成")); + } else { + dtlDao.setBill_status(IOSEnum.BILL_STATUS.code("分配中")); + } + + iostorinvdtlCpService.updateById(dtlDao); } - iostorinvdtlCpService.updateById(dtlDao); + // 5.更新分配 + iostorinvdisCpService.update( + new UpdateWrapper().lambda() + .set(StIvtIostorinvdisCp::getStruct_id, "") + .set(StIvtIostorinvdisCp::getStruct_code, "") + .set(StIvtIostorinvdisCp::getStruct_name,"") + .set(StIvtIostorinvdisCp::getSect_id,"") + .set(StIvtIostorinvdisCp::getSect_code,"") + .set(StIvtIostorinvdisCp::getSect_name, "") + .set(StIvtIostorinvdisCp::getPoint_id, "") + .set(StIvtIostorinvdisCp::getPoint_code, "") + .set(StIvtIostorinvdisCp::getPoint_name,"") + .set(StIvtIostorinvdisCp::getWork_status, IOSEnum.WORK_STATUS.code("生成")) + .eq(StIvtIostorinvdisCp::getStoragevehicle_code, whereJson.getString("storagevehicle_code")) + .eq(StIvtIostorinvdisCp::getIostorinv_id,whereJson.getString("iostorinv_id")) + ); // 6.更新主表 - updateMst(dtlDao.getIostorinv_id()); + updateMst(disDao.getIostorinv_id()); } @@ -603,12 +632,17 @@ public class StIvtIostorinvCpServiceImpl extends ServiceImpl().lambda() + .set(StIvtIostorinvdisCp::getPoint_id, pointDao.getPoint_id()) + .set(StIvtIostorinvdisCp::getPoint_code, pointDao.getPoint_code()) + .set(StIvtIostorinvdisCp::getPoint_name,pointDao.getPoint_name()) + .set(StIvtIostorinvdisCp::getWork_status, IOSEnum.WORK_STATUS.code("生成")) + .set(StIvtIostorinvdisCp::getTask_id, disDao.getTask_id()) + .eq(StIvtIostorinvdisCp::getStoragevehicle_code, disDao.getStoragevehicle_code()) + .eq(StIvtIostorinvdisCp::getIostorinv_id, disDao.getIostorinv_id()) ); + } @Override @@ -695,9 +729,6 @@ public class StIvtIostorinvCpServiceImpl extends ServiceImpl().lambda() - .eq(StIvtIostorinvdisCp::getTask_id, task_id)); - // 更新任务状态为完成 if (status.equals(AcsTaskEnum.STATUS_FINISH.getCode())) { // 更新任务为完成 @@ -712,12 +743,23 @@ public class StIvtIostorinvCpServiceImpl extends ServiceImpl> collect = iostorinvdisCpService.list( + new QueryWrapper().lambda() + .eq(StIvtIostorinvdisCp::getTask_id, task_id) + ) + .stream() + .collect(Collectors.groupingBy(StIvtIostorinvdisCp::getIostorinvdtl_id)); + + for(List list : collect.values()) { + StIvtIostorinvdisCp disDao_2 = list.get(0); + JSONObject mst_jo = new JSONObject(); + mst_jo.put("iostorinvdtl_id", disDao_2.getIostorinvdtl_id()); + mst_jo.put("iostorinv_id", disDao_2.getIostorinv_id()); + mst_jo.put("is_out", false); + iostorinvdisCpService.confirm(mst_jo); + } } else if (status.equals(AcsTaskEnum.STATUS_START.getCode())) { // 更新任务为执行中 @@ -734,6 +776,9 @@ public class StIvtIostorinvCpServiceImpl extends ServiceImpl().lambda() + .eq(StIvtIostorinvdisCp::getTask_id, task_id),false); + JSONObject param = new JSONObject(); param.put("iostorinvdis_id",disDao.getIostorinvdis_id()); delTask(param); @@ -753,12 +798,16 @@ public class StIvtIostorinvCpServiceImpl extends ServiceImpl().lambda() + .set(StIvtIostorinvdisCp::getPoint_id, "") + .set(StIvtIostorinvdisCp::getPoint_code, "") + .set(StIvtIostorinvdisCp::getPoint_name,"") + .set(StIvtIostorinvdisCp::getWork_status, IOSEnum.WORK_STATUS.code("未生成")) + .set(StIvtIostorinvdisCp::getTask_id, "") + .eq(StIvtIostorinvdisCp::getStoragevehicle_code, disDao.getStoragevehicle_code()) + .eq(StIvtIostorinvdisCp::getIostorinv_id, disDao.getIostorinv_id()) + ); } @Override @@ -847,7 +896,7 @@ public class StIvtIostorinvCpServiceImpl extends ServiceImpl().lambda() - .eq(StIvtIostorinvdisdtlCp::getIostorinvdis_id, whereJson.getString("iostorinvdis_id")) + .eq(StIvtIostorinvdisdtlCp::getIostorinv_id, whereJson.getString("iostorinv_id")) .eq(StIvtIostorinvdisdtlCp::getStoragevehicle_code, whereJson.getString("storagevehicle_code")) ); @@ -861,23 +910,45 @@ public class StIvtIostorinvCpServiceImpl extends ServiceImpl().lambda() - .eq(StIvtIostorinvdisCp::getIostorinvdtl_id, whereJson.getString("iostorinvdtl_id")) + .eq(StIvtIostorinvdisCp::getIostorinv_id, whereJson.getString("iostorinv_id")) + .eq(StIvtIostorinvdisCp::getStoragevehicle_code, whereJson.getString("storagevehicle_code")) ); // 3.更新明细表 - BigDecimal unassign_qty = iostorinvdtlCpService.getOne( - new QueryWrapper().lambda() - .eq(StIvtIostorinvdtlCp::getIostorinvdtl_id, whereJson.getString("iostorinvdtl_id")) - ).getUnassign_qty(); + Map> collect = iostorinvdisCpService.list( + new QueryWrapper().lambda() + .eq(StIvtIostorinvdisCp::getIostorinv_id, whereJson.getString("iostorinv_id")) + .eq(StIvtIostorinvdisCp::getStoragevehicle_code, whereJson.getString("storagevehicle_code")) + ) + .stream() + .filter(row -> ObjectUtil.isNotEmpty(row.getStruct_id())) + .collect(Collectors.groupingBy(StIvtIostorinvdisCp::getIostorinvdtl_id)); - iostorinvdtlCpService.update( - new StIvtIostorinvdtlCp() - .setBill_status(IOSEnum.BILL_STATUS.code("分配完")) - .setAssign_qty(unassign_qty) - .setUnassign_qty(new BigDecimal(0)), - new QueryWrapper().lambda() - .eq(StIvtIostorinvdtlCp::getIostorinvdtl_id, whereJson.getString("iostorinvdtl_id")) - ); + for (List collectList : collect.values()) { + // 计算已分配 + BigDecimal qty = collectList + .stream() + .map(StIvtIostorinvdisCp::getReal_qty) + .reduce(BigDecimal.ZERO, BigDecimal::add); + + StIvtIostorinvdtlCp dtlDao = iostorinvdtlCpService.getById(collectList.get(0).getIostorinvdtl_id()); + + // 明细已分配数量 + BigDecimal assign_qty = NumberUtil.add(dtlDao.getAssign_qty(), qty); + // 明细未分配数量 + BigDecimal unAssign_qty = NumberUtil.sub(dtlDao.getUnassign_qty(), qty); + + dtlDao.setAssign_qty(assign_qty); + dtlDao.setUnassign_qty(unAssign_qty); + + if (unAssign_qty.doubleValue() == 0) { + dtlDao.setBill_status(IOSEnum.BILL_STATUS.code("分配完")); + } else { + dtlDao.setBill_status(IOSEnum.BILL_STATUS.code("分配中")); + } + + iostorinvdtlCpService.updateById(dtlDao); + } // 4.更新主表 updateMst(whereJson.getString("iostorinv_id")); diff --git a/mes/hd/nladmin-system/src/main/java/org/nl/wms/storage_manage/productmanage/service/iostorInv/impl/StIvtIostorinvdisCpServiceImpl.java b/mes/hd/nladmin-system/src/main/java/org/nl/wms/storage_manage/productmanage/service/iostorInv/impl/StIvtIostorinvdisCpServiceImpl.java index 60513573..8ba7185c 100644 --- a/mes/hd/nladmin-system/src/main/java/org/nl/wms/storage_manage/productmanage/service/iostorInv/impl/StIvtIostorinvdisCpServiceImpl.java +++ b/mes/hd/nladmin-system/src/main/java/org/nl/wms/storage_manage/productmanage/service/iostorInv/impl/StIvtIostorinvdisCpServiceImpl.java @@ -92,11 +92,6 @@ public class StIvtIostorinvdisCpServiceImpl extends ServiceImpl result = new ArrayList<>(); list.forEach(item -> { - // 获取载具信息 - MdPbStoragevehicleinfo vehicleDao = iMdPbStoragevehicleinfoService.getOne( - new QueryWrapper() - .eq("storagevehicle_code", item.getString("storagevehicle_code")) - ); // 获取物料信息 MdMeMaterialbase materDao = iMdMeMaterialbaseService.getOne( @@ -108,10 +103,13 @@ public class StIvtIostorinvdisCpServiceImpl extends ServiceImpl().eq("measure_unit_id", materDao.getBase_unit_id()) ); + StIvtIostorinvdtlCp dtlDao = iostorinvdtlCpService.getById(item.getString("iostorinvdtl_id")); + + StIvtIostorinvdisCp disDao = new StIvtIostorinvdisCp() - .setIostorinvdis_id(json.getString("iostorinvdis_id")) - .setIostorinvdtl_id(json.getString("iostorinvdtl_id")) - .setIostorinv_id(json.getString("iostorinv_id")) + .setIostorinvdis_id(IdUtil.getStringId()) + .setIostorinvdtl_id(dtlDao.getIostorinvdtl_id()) + .setIostorinv_id(dtlDao.getIostorinv_id()) .setSeq_no(1) .setMaterial_id(materDao.getMaterial_id()) .setPcsn(DateUtil.today()) @@ -119,9 +117,7 @@ public class StIvtIostorinvdisCpServiceImpl extends ServiceImpl().eq("storagevehicle_code", vehicleDao.getStoragevehicle_code()) - ); - }); return result; } diff --git a/mes/hd/nladmin-system/src/main/java/org/nl/wms/storage_manage/productmanage/service/iostorInv/impl/StIvtIostorinvdisdtlCpServiceImpl.java b/mes/hd/nladmin-system/src/main/java/org/nl/wms/storage_manage/productmanage/service/iostorInv/impl/StIvtIostorinvdisdtlCpServiceImpl.java index 84fc9e9b..c7aee0be 100644 --- a/mes/hd/nladmin-system/src/main/java/org/nl/wms/storage_manage/productmanage/service/iostorInv/impl/StIvtIostorinvdisdtlCpServiceImpl.java +++ b/mes/hd/nladmin-system/src/main/java/org/nl/wms/storage_manage/productmanage/service/iostorInv/impl/StIvtIostorinvdisdtlCpServiceImpl.java @@ -16,7 +16,9 @@ import org.nl.wms.masterdata_manage.service.vehicle.dao.MdPbBucketrecord; import org.nl.wms.masterdata_manage.service.vehicle.dao.MdPbStoragevehicleinfo; import org.nl.wms.storage_manage.IVTEnum; import org.nl.wms.storage_manage.productmanage.service.iostorInv.IStIvtIostorinvdisdtlCpService; +import org.nl.wms.storage_manage.productmanage.service.iostorInv.IStIvtIostorinvdtlCpService; import org.nl.wms.storage_manage.productmanage.service.iostorInv.dao.StIvtIostorinvdisdtlCp; +import org.nl.wms.storage_manage.productmanage.service.iostorInv.dao.StIvtIostorinvdtlCp; import org.nl.wms.storage_manage.productmanage.service.iostorInv.dao.mapper.StIvtIostorinvdisdtlCpMapper; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Service; @@ -52,6 +54,9 @@ public class StIvtIostorinvdisdtlCpServiceImpl extends ServiceImpl list) { if (!CollectionUtils.isEmpty(list)){ @@ -69,20 +74,17 @@ public class StIvtIostorinvdisdtlCpServiceImpl extends ServiceImpl result = new ArrayList<>(); list.forEach(item -> { - // 获取载具信息 - MdPbStoragevehicleinfo vehicleDao = iMdPbStoragevehicleinfoService.getOne( - new QueryWrapper() - .eq("storagevehicle_code", item.getString("storagevehicle_code")) - ); MdMeMaterialbase mataDao = iMdMeMaterialbaseService.getOne( new QueryWrapper().lambda() .eq(MdMeMaterialbase::getMaterial_code, item.getString("material_code")) ); + StIvtIostorinvdtlCp dtlDao = iostorinvdtlCpService.getById(item.getString("iostorinvdtl_id")); + StIvtIostorinvdisdtlCp disDtlDao = new StIvtIostorinvdisdtlCp() - .setIostorinv_id(json.getString("iostorinv_id")) - .setIostorinvdtl_id(json.getString("iostorinvdtl_id")) + .setIostorinv_id(dtlDao.getIostorinv_id()) + .setIostorinvdtl_id(dtlDao.getIostorinvdtl_id()) .setIostorinvdis_id(json.getString("iostorinvdis_id")) .setIostorinvdisdtl_id(IdUtil.getStringId()) .setSeq_no(new BigDecimal(1)) @@ -91,9 +93,7 @@ public class StIvtIostorinvdisdtlCpServiceImpl extends ServiceImpl list) { @@ -74,6 +81,21 @@ public class StIvtIostorinvdtlCpServiceImpl extends ServiceImpl().lambda() + .eq(MpsSaleOrder::getSale_code, row.getBase_bill_code()) + .eq(MpsSaleOrder::getSeq_no, row.getBase_bill_table()) + ); + if (ObjectUtil.isEmpty(orderDao)) + throw new BadRequestException("销售单号错误!"); + + row.setBase_billdtl_id(orderDao.getSale_id().toString()); + row.setBase_bill_code(orderDao.getSale_code()); + row.setBase_bill_type(orderDao.getSale_type()); + row.setBase_bill_table(orderDao.getSeq_no().toString()); + } + row.setIostorinv_id(iostorinvCp_id); row.setMaterial_id(materDao.getMaterial_id()); row.setIostorinvdtl_id(org.nl.common.utils.IdUtil.getStringId()); diff --git a/mes/qd/src/views/wms/storage_manage/product/productIn/AddDialog.vue b/mes/qd/src/views/wms/storage_manage/product/productIn/AddDialog.vue index dd20b409..f594cc86 100644 --- a/mes/qd/src/views/wms/storage_manage/product/productIn/AddDialog.vue +++ b/mes/qd/src/views/wms/storage_manage/product/productIn/AddDialog.vue @@ -146,6 +146,7 @@ {{ scope.row.material_code }} + - - + + + + + + + + @@ -66,14 +67,9 @@ - + + 生成 + @@ -91,6 +87,7 @@ :controls="false" precision="3" :min="0" + @change="changeQty" placeholder="数量" /> @@ -113,6 +110,23 @@ + + + + + +
@@ -123,6 +137,7 @@ + @@ -252,7 +268,7 @@ export default { name: 'DivDialog', components: { StructDiv, AddBox }, mixins: [crud()], - dicts: ['IO_BILL_STATUS', 'MD_OVERSTRUCT_TYPE'], + dicts: ['IO_BILL_STATUS', 'VEHICLE_OVER_TYPE'], props: { dialogShow: { type: Boolean, @@ -272,8 +288,8 @@ export default { data() { return { dialogVisible: false, - stor_id: '', - sect_id: '', + stor_id: '1528627995269533696', + sect_id: '1528631043496742912', sectProp: null, structShow: false, bucketObj: null, @@ -282,6 +298,7 @@ export default { addBoxShow: false, bucketuniqueObj: null, sects: [], + defaultList: ['1528627995269533696', '1528631043496742912'], dis_row: null, form: { dtl_row: null, @@ -292,6 +309,7 @@ export default { vehicle_code: '', bucketunique: '', checked: true, + vehicle_overstruct_type: '00', tableMater: [] }, storlist: [], @@ -309,7 +327,6 @@ export default { }, methods: { disabledIos(row) { - debugger if (row.iostorinvdis_id === undefined) { return false } else { @@ -340,22 +357,34 @@ export default { }, clcikRow(row, column, event) { this.form.dtl_row = row + this.form.storage_qty = this.form.dtl_row.plan_qty crudProductIn.getIosInvDis({ 'iostorinv_id': row.iostorinv_id, 'iostorinvdtl_id': row.iostorinvdtl_id }).then(res => { - this.form.tableMater = res + debugger + if (res.length !== 0) { + this.form.tableMater = res + } }) }, clcikRowDis(row, column, event) { this.dis_row = row }, - vehicleCheck(vehicle_code) { - this.form.bucketunique = '' - // 校验载具号是否存在&&是否已被组盘 - crudProductIn.vehicleCheck({ 'storagevehicle_code': vehicle_code }).then(res => { - this.crud.notify('查询成功!', CRUD.NOTIFICATION_TYPE.SUCCESS) + vehicleCheck() { + // 生成托盘 + crudProductIn.vehicleCheck().then(res => { + this.form.tableMater = [] + this.form.vehicle_code = res.vehicle_code + this.crud.notify('生成成功!', CRUD.NOTIFICATION_TYPE.SUCCESS) }).catch(() => { - this.form.vehicle_code = '' + }) }, + changeQty(val) { + debugger + if (parseFloat(this.form.dtl_row.plan_qty) < parseFloat(val)) { + this.crud.notify('放入数量不能大于明细数量!', CRUD.NOTIFICATION_TYPE.INFO) + this.$set(this.form, 'storage_qty', parseFloat(this.form.dtl_row.plan_qty)) + } + }, queryBox() { // 校验载具是否为空 if (!this.form.vehicle_code) { @@ -393,6 +422,7 @@ export default { }) if (fla) { + this.bucketuniqueObj.iostorinvdtl_id = this.form.dtl_row.iostorinvdtl_id this.form.tableMater.splice(-1, 0, this.bucketuniqueObj) this.form.bucketunique = '' } @@ -404,12 +434,24 @@ export default { } const item = { 'storagevehicle_code': this.form.vehicle_code, + 'iostorinvdtl_id': this.form.dtl_row.iostorinvdtl_id, 'material_id': this.form.dtl_row.material_id, 'material_code': this.form.dtl_row.material_code, + 'material_spec': this.form.dtl_row.material_spec, 'material_name': this.form.dtl_row.material_name, 'qty': this.form.storage_qty } - this.form.tableMater.splice(-1, 0, item) + + let fla2 = true + this.form.tableMater.forEach(res => { + if (res.iostorinvdtl_id === item.iostorinvdtl_id && res.storagevehicle_code === item.storagevehicle_code) { + fla2 = false + } + }) + + if (fla2) { + this.form.tableMater.splice(-1, 0, item) + } } }, deleteRow(index, rows) { @@ -486,11 +528,11 @@ export default { }) }, cancelConfirmvehicle() { - if (!this.form.dtl_row) { - this.crud.notify('请选择一条明细', CRUD.NOTIFICATION_TYPE.INFO) + if (!this.dis_row) { + this.crud.notify('请选择一条分配明细', CRUD.NOTIFICATION_TYPE.INFO) return } - crudProductIn.cancelConfirmvehicle(this.form.dtl_row).then(res => { + crudProductIn.cancelConfirmvehicle(this.dis_row).then(res => { crudProductIn.getIosInvDtl({ 'iostorinv_id': this.form.dtl_row.iostorinv_id }).then(res => { this.form.vehicle_code = '' this.form.bucketunique = '' @@ -579,6 +621,7 @@ export default { return } + this.dis_row.vehicle_overstruct_type = this.form.vehicle_overstruct_type crudProductIn.unDivStruct(this.dis_row).then(res => { crudProductIn.getIosInvDtl({ 'iostorinv_id': this.dis_row.iostorinv_id }).then(res => { this.openParam = res diff --git a/mes/qd/src/views/wms/storage_manage/product/productIn/productin.js b/mes/qd/src/views/wms/storage_manage/product/productIn/productin.js index 63fa1658..2d5df5ef 100644 --- a/mes/qd/src/views/wms/storage_manage/product/productIn/productin.js +++ b/mes/qd/src/views/wms/storage_manage/product/productIn/productin.js @@ -40,11 +40,10 @@ export function getIosInvDis(data) { }) } -export function vehicleCheck(data) { +export function vehicleCheck() { return request({ url: '/api/productIn/vehicleCheck', - method: 'post', - data + method: 'post' }) }