From f874ef31923a0c088980918e070eb2b8d9155f5c Mon Sep 17 00:00:00 2001 From: erdanergou Date: Tue, 3 Jan 2023 09:53:35 +0800 Subject: [PATCH] =?UTF-8?q?=E5=AE=8C=E6=88=90=E7=BB=84=E5=90=88=E5=87=BA?= =?UTF-8?q?=E5=BA=93?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../controller/GroupController.java | 66 ++-- .../controller/MaterialController.java | 9 +- .../controller/PageController.java | 20 +- .../controller/PlaceController.java | 1 + .../depository_manage/entity/GroupInfo.java | 5 + .../entity/MaterialAndPlace.java | 1 + .../depository_manage/mapper/PlaceMapper.java | 9 + .../depository_manage/mapper/PlaceMapper.xml | 43 +++ .../depository_manage/pojo/InventoryP.java | 6 +- .../pojo/MaterialAndPlaceForView.java | 86 +++++ .../service/MaterialService.java | 7 +- .../service/PlaceService.java | 9 + .../impl/DepositoryRecordServiceImpl.java | 71 +++- .../service/impl/GroupServiceImpl.java | 363 ++++++++++++------ .../service/impl/MaterialServiceImpl.java | 61 ++- .../service/impl/PlaceServiceImpl.java | 15 + .../service/impl/SplitUnitServiceImpl.java | 3 +- .../pages/application/application-out.html | 2 +- .../pages/group/applicationOutForGroup.html | 2 +- .../depository_manage/TestForOther.java | 5 +- .../depository_manage/mapper/PlaceMapper.xml | 43 +++ .../pages/application/application-out.html | 2 +- .../pages/group/applicationOutForGroup.html | 2 +- 23 files changed, 621 insertions(+), 210 deletions(-) create mode 100644 src/main/java/com/dreamchaser/depository_manage/pojo/MaterialAndPlaceForView.java diff --git a/src/main/java/com/dreamchaser/depository_manage/controller/GroupController.java b/src/main/java/com/dreamchaser/depository_manage/controller/GroupController.java index 0b186a1d..7f6a471d 100644 --- a/src/main/java/com/dreamchaser/depository_manage/controller/GroupController.java +++ b/src/main/java/com/dreamchaser/depository_manage/controller/GroupController.java @@ -69,27 +69,24 @@ public class GroupController { // 获取组合编码 Group groupByCode = groupService.findGroupByCode(code); + StringBuilder errMsg = new StringBuilder(); + if (groupByCode != null) { - Map paramForGetGroup = new HashMap<>(); - paramForGetGroup.put("gid", groupByCode.getId()); - // 获取当前组合的所有物料数据 - List groupByGid = groupService.findGroupByCondition(paramForGetGroup); + List groupByGid = groupService.findGroupInfoByGid(groupByCode.getId()); // 用于标识当前组合是否可以正常出库 boolean flag = true; - for (int i = 0; i < groupByGid.size(); i++) { - + for (GroupInfo groupInfo : groupByGid) { // 获取详细信息 - GroupInfo groupInfo = groupByGid.get(i); + // 获取该物料的库存 - List inventoryByMidAndDepository = materialService.findInventoryByMidAndDepository(groupInfo.getMid(), depositoryByAdminorg); + List inventoryByMidAndDepository = materialService.findInventoryByMidAndDepository(groupInfo, depositoryByAdminorg); // 用于标志当前物料库存是否符合要求 boolean flagForQuantity = false; - for (int j = 0; j < inventoryByMidAndDepository.size(); j++) { - Integer quantity = inventoryByMidAndDepository.get(j); + for (Integer quantity : inventoryByMidAndDepository) { // 如果库存符合要求 if (quantity > groupInfo.getQuantity()) { flagForQuantity = true; @@ -98,6 +95,7 @@ public class GroupController { if (!flagForQuantity) { // 如果当前不符合 flag = false; + errMsg.append(" ").append(groupInfo.getMname()).append(" "); break; } @@ -105,7 +103,7 @@ public class GroupController { if (flag) { return new RestResponse(groupByGid); } else { - return new RestResponse(null, 666, new StatusInfo("不能出库", "当前组合中有物料库存不足")); + return new RestResponse(null, 666, new StatusInfo("不能出库", "当前组合中的 "+errMsg.toString()+"库存不足")); } } else { return new RestResponse(null, 666, new StatusInfo("失败", "暂无该组合,请确认是否正确")); @@ -328,18 +326,19 @@ public class GroupController { // 获取当前组合的所有物料数据 List groupByGid = groupService.findGroupByCondition(map); + // 定义错误信息 + StringBuilder errMsg = new StringBuilder(); + // 用于标识当前组合是否可以正常出库 boolean flag = true; - for (int i = 0; i < groupByGid.size(); i++) { + for (GroupInfo groupInfo : groupByGid) { // 获取详细信息 - GroupInfo groupInfo = groupByGid.get(i); // 获取该物料的库存 - List inventoryByMidAndDepository = materialService.findInventoryByMidAndDepository(groupInfo.getMid(), depositoryByAdminorg); + List inventoryByMidAndDepository = materialService.findInventoryByMidAndDepository(groupInfo, depositoryByAdminorg); // 用于标志当前物料库存是否符合要求 boolean flagForQuantity = false; - for (int j = 0; j < inventoryByMidAndDepository.size(); j++) { - Integer quantity = inventoryByMidAndDepository.get(j); + for (Integer quantity : inventoryByMidAndDepository) { // 如果库存符合要求 if (quantity > groupInfo.getQuantity()) { flagForQuantity = true; @@ -348,6 +347,7 @@ public class GroupController { if (!flagForQuantity) { // 如果当前不符合 flag = false; + errMsg.append(" ").append(groupInfo.getMname()).append(" "); break; } @@ -355,7 +355,7 @@ public class GroupController { if (flag) { return new RestResponse(groupByGid); } else { - return new RestResponse(null, 666, new StatusInfo("不能出库", "当前组合中有物料库存不足")); + return new RestResponse(null, 666, new StatusInfo("不能出库", "当前组合中的"+errMsg+"在仓库中库存不足")); } } @@ -451,7 +451,7 @@ public class GroupController { /** * 用于构造组合出库单 - * @param map 出库数据 + * @param map 出库数据 * @param request * @return */ @@ -499,7 +499,7 @@ public class GroupController { } Object id = map.get("id"); // 获取主订单编号 // 开启一个线程开启审批 - new Thread(new Runnable() { + /* new Thread(new Runnable() { @Override public void run() { JSONObject jsonObject = qyWxOperationService.sendOutApprovalTemplate(crypt, userToken, ObjectFormatUtil.toInteger(id)); @@ -511,7 +511,7 @@ public class GroupController { // 设置过期为7天 redisTemplateForHash.expire(sp_no, 7, TimeUnit.DAYS); } - }).start(); + }).start();*/ if (integer != 0 && params.size() < 1) { return CrudUtil.postHandle(integer, result); @@ -571,22 +571,23 @@ public class GroupController { List groupInfoByGid = groupService.findGroupInfoByGid(gid); // 用于标志该数量是否合法 boolean flag = true; - for (int i = 0; i < groupInfoByGid.size(); i++) { + for (GroupInfo groupInfo : groupInfoByGid) { // 获取具体信息 - GroupInfo groupInfo = groupInfoByGid.get(i); + // 获取本次要出库的实际的数量 Integer totalQuantity = groupInfo.getQuantity() * quantity; // 用于标志是否可以满足库存要求 boolean flagForInventory = false; + // 获取该物料在各仓库的库存 - List inventoryByMidAndDepository = materialService.findInventoryByMidAndDepository(groupInfo.getMid(), depositoryByAdminorg); - for (int j = 0; j < inventoryByMidAndDepository.size(); j++) { - Integer integer = inventoryByMidAndDepository.get(j); + List inventoryByMidAndDepository = materialService.findInventoryByMidAndDepository(groupInfo, depositoryByAdminorg); + for (Integer integer : inventoryByMidAndDepository) { if (integer >= totalQuantity) { flagForInventory = true; break; } } + if (!flagForInventory) { // 如果概述了不合法 flag = false; @@ -632,14 +633,14 @@ public class GroupController { // 获取当前出库类型 String type = (String) map.get("type"); - if("one".equals(type)){ + if ("one".equals(type)) { Integer gid = ObjectFormatUtil.toInteger(map.get("id")); - map.put("gid",gid); + map.put("gid", gid); List groupInfoByGid = groupService.findGroupInfoByGid(gid); if (groupInfoByGid != null) { result += groupInfoByGid.size(); } - }else{ + } else { // 用于同步出库算法 int num = 0; List params = new ArrayList<>(); @@ -655,7 +656,7 @@ public class GroupController { } if (num == 0) { map.put("gid", temp); - map.put("quantity",quantity); + map.put("quantity", quantity); num++; } else { map.put("gid" + num, temp); @@ -663,8 +664,7 @@ public class GroupController { params.add(String.valueOf((num++))); } } - map.put("params",params); - + map.put("params", params); } try { integer += groupService.insertApplicationOutRecord(map, userToken); // 插入主订单 @@ -673,7 +673,7 @@ public class GroupController { } Object id = map.get("id"); // 获取主订单编号 // 开启一个线程开启审批 - new Thread(new Runnable() { + /*new Thread(new Runnable() { @Override public void run() { JSONObject jsonObject = qyWxOperationService.sendOutApprovalTemplate(crypt, userToken, ObjectFormatUtil.toInteger(id)); @@ -685,7 +685,7 @@ public class GroupController { // 设置过期为7天 redisTemplateForHash.expire(sp_no, 7, TimeUnit.DAYS); } - }).start(); + }).start();*/ return CrudUtil.postHandle(integer, result); } diff --git a/src/main/java/com/dreamchaser/depository_manage/controller/MaterialController.java b/src/main/java/com/dreamchaser/depository_manage/controller/MaterialController.java index 50cdfaf0..65f978f5 100644 --- a/src/main/java/com/dreamchaser/depository_manage/controller/MaterialController.java +++ b/src/main/java/com/dreamchaser/depository_manage/controller/MaterialController.java @@ -618,7 +618,7 @@ public class MaterialController { if ("-1".equals(unit)) { // 如果是基础单位 for (InventoryP inventoryP : inventoryPList) { - if (quantity <= inventoryP.getQuantity()) { // 如果当前数量合适则跳出循环 + if (quantity <= (inventoryP.getQuantity() - inventoryP.getNumberOfTemporary())) { // 如果当前数量合适则跳出循环 flag = true; break; } @@ -636,7 +636,7 @@ public class MaterialController { SplitInfo splitInfo = splitUnitService.findSplitInfoByMidAndUnit(paramForSplitInfo); // 获取最高级对应当前单位的数量 - int saveQuantity = inventoryP.getQuantity() * splitUnitService.findSplitInfoScaleQuantity(splitInfo, -1); + int saveQuantity = (inventoryP.getQuantity() - inventoryP.getNumberOfTemporary()) * splitUnitService.findSplitInfoScaleQuantity(splitInfo, -1); // 获取当前物料所在库位 List placeByMidAndDid = placeService.findPlaceByMidAndDid(inventoryP.getId(), depository.getId()); for (PlaceP p : @@ -646,14 +646,13 @@ public class MaterialController { if (placeAndMaterialByMidAndPid != null) { SplitInventory splitInventory = splitUnitService.findSplitInventoryByIidAndSid(placeAndMaterialByMidAndPid.getId(), splitInfo.getId()); - saveQuantity += splitInventory.getSaveQuantity(); + saveQuantity += (splitInventory.getSaveQuantity() - splitInventory.getOutQuantity()); SplitInfo parentSplitInfo = splitUnitService.findSplitInfoById(splitInfo.getParentId()); - ; while (parentSplitInfo != null) { splitInventory = splitUnitService.findSplitInventoryByIidAndSid(placeAndMaterialByMidAndPid.getId(), parentSplitInfo.getId()); splitInfo = splitUnitService.findSplitInfoByParentId(parentSplitInfo.getId()); - saveQuantity += splitInventory.getSaveQuantity() * splitInfo.getQuantity(); + saveQuantity += (splitInventory.getSaveQuantity() - splitInventory.getOutQuantity()) * splitInfo.getQuantity(); parentSplitInfo = splitUnitService.findSplitInfoById(parentSplitInfo.getParentId()); } } diff --git a/src/main/java/com/dreamchaser/depository_manage/controller/PageController.java b/src/main/java/com/dreamchaser/depository_manage/controller/PageController.java index b9d74ab0..27cfe67c 100644 --- a/src/main/java/com/dreamchaser/depository_manage/controller/PageController.java +++ b/src/main/java/com/dreamchaser/depository_manage/controller/PageController.java @@ -4,6 +4,7 @@ import com.alibaba.fastjson.JSONArray; import com.alibaba.fastjson.JSONObject; import com.dreamchaser.depository_manage.config.PortConfig; import com.dreamchaser.depository_manage.entity.*; +import com.dreamchaser.depository_manage.entity.MaterialAndPlace; import com.dreamchaser.depository_manage.exception.MyException; import com.dreamchaser.depository_manage.pojo.*; import com.dreamchaser.depository_manage.security.bean.UserToken; @@ -1251,9 +1252,8 @@ public class PageController { Double sumPrice = 0.0; // 计量单位 StringBuffer sumUnit = new StringBuffer(); - for (int i = 0; i < applicationOutRecordMinByParent.size(); i++) { + for (ApplicationOutRecordMin applicationOutRecordMin : applicationOutRecordMinByParent) { // 获取子订单信息 - ApplicationOutRecordMin applicationOutRecordMin = applicationOutRecordMinByParent.get(i); // 获取出库物料信息 Inventory materialById = materialService.findInventoryById(applicationOutRecordMin.getMid()); // 获取出库物料仓库信息 @@ -1293,21 +1293,17 @@ public class PageController { depositoryManagerId = manager.split(","); } List depositoryManager = new ArrayList<>(); - String depositoryManagerNames = ""; - for (int i = 0; i < depositoryManagerId.length; i++) { - Integer managerid = ObjectFormatUtil.toInteger(depositoryManagerId[i]); + StringBuilder depositoryManagerNames = new StringBuilder(); + for (String s : depositoryManagerId) { + Integer managerid = ObjectFormatUtil.toInteger(s); UserByPort user = LinkInterfaceUtil.FindUserById(managerid, userToken); depositoryManager.add(user); - depositoryManagerNames += user.getName() + ","; + depositoryManagerNames.append(user.getName()).append(","); } - if (recordP.getPlaceId() != null) { - Place placeById = placeService.findPlaceById(recordP.getPlaceId()); - recordP.setPCode(placeById.getCode()); - } - + recordP.setPCode(placeCode.toString()); recordP.setApplicantTime(DateUtil.TimeStampToDateTime(Long.valueOf(recordP.getApplicantTime()))); recordP.setDepartmentheadTime(DateUtil.TimeStampToDateTime(Long.valueOf(recordP.getDepartmentheadTime()))); - recordP.setDepositoryManagerName(depositoryManagerNames); + recordP.setDepositoryManagerName(depositoryManagerNames.toString()); recordP.setApplicantName(userByPort.getName()); recordP.setDepartmentheadName(departmentHeadName.toString()); recordP.setMcode(mcode.toString()); diff --git a/src/main/java/com/dreamchaser/depository_manage/controller/PlaceController.java b/src/main/java/com/dreamchaser/depository_manage/controller/PlaceController.java index c3f41c0b..a36d9c89 100644 --- a/src/main/java/com/dreamchaser/depository_manage/controller/PlaceController.java +++ b/src/main/java/com/dreamchaser/depository_manage/controller/PlaceController.java @@ -2,6 +2,7 @@ package com.dreamchaser.depository_manage.controller; import cn.hutool.core.lang.Snowflake; import com.dreamchaser.depository_manage.entity.*; +import com.dreamchaser.depository_manage.entity.MaterialAndPlace; import com.dreamchaser.depository_manage.exception.MyException; import com.dreamchaser.depository_manage.pojo.*; import com.dreamchaser.depository_manage.service.DepositoryService; diff --git a/src/main/java/com/dreamchaser/depository_manage/entity/GroupInfo.java b/src/main/java/com/dreamchaser/depository_manage/entity/GroupInfo.java index 4101e5db..30a11c57 100644 --- a/src/main/java/com/dreamchaser/depository_manage/entity/GroupInfo.java +++ b/src/main/java/com/dreamchaser/depository_manage/entity/GroupInfo.java @@ -94,4 +94,9 @@ public class GroupInfo { * 组合名称 */ private String gname; + + /** + * 用于展示的计量单位 + */ + private String showUnit; } diff --git a/src/main/java/com/dreamchaser/depository_manage/entity/MaterialAndPlace.java b/src/main/java/com/dreamchaser/depository_manage/entity/MaterialAndPlace.java index 31edbba0..10eda8fc 100644 --- a/src/main/java/com/dreamchaser/depository_manage/entity/MaterialAndPlace.java +++ b/src/main/java/com/dreamchaser/depository_manage/entity/MaterialAndPlace.java @@ -36,4 +36,5 @@ public class MaterialAndPlace { * 当前存放额度 */ private Integer quantity; + } diff --git a/src/main/java/com/dreamchaser/depository_manage/mapper/PlaceMapper.java b/src/main/java/com/dreamchaser/depository_manage/mapper/PlaceMapper.java index b4f8c6f6..9a0ff6c4 100644 --- a/src/main/java/com/dreamchaser/depository_manage/mapper/PlaceMapper.java +++ b/src/main/java/com/dreamchaser/depository_manage/mapper/PlaceMapper.java @@ -2,6 +2,7 @@ package com.dreamchaser.depository_manage.mapper; import com.dreamchaser.depository_manage.entity.MaterialAndPlace; import com.dreamchaser.depository_manage.entity.Place; +import com.dreamchaser.depository_manage.pojo.MaterialAndPlaceForView; import org.apache.ibatis.annotations.Mapper; import org.springframework.stereotype.Repository; @@ -134,6 +135,14 @@ public interface PlaceMapper { * 根据库位获取当前库位所存储的物料 */ List findPlaceAndMaterialByPid(Integer id); + + /** + * 根据仓库id及物料id获取对应库位存储的物料 + * @param map 待查询条件 + * @return + */ + List findPlaceAndMaterialByDidAndMid(Map map); + /** * 根据当前库位编号及物料编号获取具体库位 */ diff --git a/src/main/java/com/dreamchaser/depository_manage/mapper/PlaceMapper.xml b/src/main/java/com/dreamchaser/depository_manage/mapper/PlaceMapper.xml index 660d9a06..0cc13466 100644 --- a/src/main/java/com/dreamchaser/depository_manage/mapper/PlaceMapper.xml +++ b/src/main/java/com/dreamchaser/depository_manage/mapper/PlaceMapper.xml @@ -30,6 +30,27 @@ + + + + + + + + + + + + + + + + + + + + + p.id,p.x,p.y,p.z,p.code,p.mid,p.did,p.min,p.max,p.state,p.quantity @@ -39,6 +60,10 @@ mp.id,mp.mid,mp.pid,mp.quantity,p.code,p.max,p.min,p.did + + depository_id,mname,type_id,tname,mcode,version,price,unit,texture,pcode,dname,adminorg,dcode,iid,inventory,id,pid,mid + + + + + + diff --git a/src/main/resources/templates/pages/group/applicationOutForGroup.html b/src/main/resources/templates/pages/group/applicationOutForGroup.html index e8912c64..edfc250c 100644 --- a/src/main/resources/templates/pages/group/applicationOutForGroup.html +++ b/src/main/resources/templates/pages/group/applicationOutForGroup.html @@ -298,7 +298,7 @@
-
diff --git a/src/test/java/com/dreamchaser/depository_manage/TestForOther.java b/src/test/java/com/dreamchaser/depository_manage/TestForOther.java index efb5c4a5..d5705e86 100644 --- a/src/test/java/com/dreamchaser/depository_manage/TestForOther.java +++ b/src/test/java/com/dreamchaser/depository_manage/TestForOther.java @@ -36,8 +36,9 @@ public class TestForOther { @Test public void Test() throws IOException { - - + SplitInfo splitInfoById = splitUnitMapper.findSplitInfoById(1); + int splitInfoScaleQuantity = findSplitInfoScaleQuantity(splitInfoById, -1); + System.out.println(splitInfoScaleQuantity); } /** diff --git a/target/classes/com/dreamchaser/depository_manage/mapper/PlaceMapper.xml b/target/classes/com/dreamchaser/depository_manage/mapper/PlaceMapper.xml index 660d9a06..0cc13466 100644 --- a/target/classes/com/dreamchaser/depository_manage/mapper/PlaceMapper.xml +++ b/target/classes/com/dreamchaser/depository_manage/mapper/PlaceMapper.xml @@ -30,6 +30,27 @@ + + + + + + + + + + + + + + + + + + + + + p.id,p.x,p.y,p.z,p.code,p.mid,p.did,p.min,p.max,p.state,p.quantity @@ -39,6 +60,10 @@ mp.id,mp.mid,mp.pid,mp.quantity,p.code,p.max,p.min,p.did + + depository_id,mname,type_id,tname,mcode,version,price,unit,texture,pcode,dname,adminorg,dcode,iid,inventory,id,pid,mid + + + + + +
diff --git a/target/classes/templates/pages/group/applicationOutForGroup.html b/target/classes/templates/pages/group/applicationOutForGroup.html index e8912c64..edfc250c 100644 --- a/target/classes/templates/pages/group/applicationOutForGroup.html +++ b/target/classes/templates/pages/group/applicationOutForGroup.html @@ -298,7 +298,7 @@
-