From 458e4ec809483722c47a075e33bf1425b5aba86d Mon Sep 17 00:00:00 2001 From: erdanergou Date: Wed, 28 Dec 2022 15:08:41 +0800 Subject: [PATCH] =?UTF-8?q?=E5=AE=8C=E6=88=90=E6=8B=86=E5=8D=95=E7=9A=84?= =?UTF-8?q?=E5=87=BA=E5=BA=93=E3=80=81=E5=85=A5=E5=BA=93=E3=80=81=E5=BA=93?= =?UTF-8?q?=E5=AD=98=E8=BD=AC=E7=A7=BB=E5=8A=9F=E8=83=BD?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../DepositoryRecordController.java | 5 +- .../controller/MaterialController.java | 163 ++++-- .../controller/PageController.java | 8 +- .../controller/PlaceController.java | 11 +- .../depository_manage/mapper/PlaceMapper.xml | 2 +- .../mapper/SplitUnitMapper.xml | 4 +- .../service/SplitUnitService.java | 15 +- .../impl/DepositoryRecordServiceImpl.java | 513 +++++++++++++++--- .../service/impl/MaterialServiceImpl.java | 88 +-- .../service/impl/SplitUnitServiceImpl.java | 178 +++--- .../js/application-out/application-out.js | 1 + .../pages/application/application-out.html | 7 + .../application/application-out_back.html | 249 +++++---- .../application/application-transfer.html | 124 ++++- .../material/selectDepositoryByCard.html | 2 +- .../pages/scanQrCode/ScanBarOrQrCodeOut.html | 10 +- .../depository_manage/mapper/PlaceMapper.xml | 2 +- .../mapper/SplitUnitMapper.xml | 4 +- .../js/application-out/application-out.js | 1 + .../pages/application/application-out.html | 7 + .../application/application-out_back.html | 249 +++++---- .../application/application-transfer.html | 124 ++++- .../material/selectDepositoryByCard.html | 2 +- .../pages/scanQrCode/ScanBarOrQrCodeOut.html | 52 +- 24 files changed, 1330 insertions(+), 491 deletions(-) diff --git a/src/main/java/com/dreamchaser/depository_manage/controller/DepositoryRecordController.java b/src/main/java/com/dreamchaser/depository_manage/controller/DepositoryRecordController.java index 64d50a76..f14a6d2d 100644 --- a/src/main/java/com/dreamchaser/depository_manage/controller/DepositoryRecordController.java +++ b/src/main/java/com/dreamchaser/depository_manage/controller/DepositoryRecordController.java @@ -223,6 +223,7 @@ public class DepositoryRecordController { insert.put("qrCode", map.get("qrCode" + temp)); insert.put("barCode", map.get("barCode" + temp)); insert.put("unit",map.get("unit" + temp)); + insert.put("placeId",map.get("placeId" + temp)); String unit = (String)(map.get("unit" + temp)); if (!"-1".equals(unit)) { insert.put("type","in"); @@ -777,6 +778,7 @@ public class DepositoryRecordController { insert.put("code", map.get("code" + temp)); insert.put("placeId", map.get("placeId" + temp)); insert.put("fromPlaceId", map.get("fromPlaceId" + temp)); + insert.put("unit",map.get("unit"+temp)); Object parentId = map.get("parentId"); if (parentId != null) { insert.put("parentId", parentId); @@ -1226,8 +1228,7 @@ public class DepositoryRecordController { if (barCode != null) { map.put("barCode", barCode); } - RestResponse restResponse = depositoryRecordService.completeApplicationOutMinRecord(map, userToken, crypt); - return restResponse; + return depositoryRecordService.completeApplicationOutMinRecord(map, userToken, crypt); } 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 10b26501..268e0f63 100644 --- a/src/main/java/com/dreamchaser/depository_manage/controller/MaterialController.java +++ b/src/main/java/com/dreamchaser/depository_manage/controller/MaterialController.java @@ -130,8 +130,8 @@ public class MaterialController { size = ObjectFormatUtil.toInteger(map.get("size")); } if (!(map.containsKey("depositoryId") || map.containsKey("code") || map.containsKey("mname"))) { - for (int i = 0; i < depositoryByAdminorg.size(); i++) { - Integer did = depositoryByAdminorg.get(i).getId(); + for (Depository depository : depositoryByAdminorg) { + Integer did = depository.getId(); didList.add(did); map.put("depositoryId", did); List inventory = materialService.findInventory(map); @@ -450,17 +450,37 @@ public class MaterialController { } @PostMapping("/findInventoryByCondition") - public RestResponse findInventoryByCondition(@RequestBody Map map) { - List materialPByCondition = materialService.findInventory(map); + public RestResponse findInventoryByCondition(@RequestBody Map map, HttpServletRequest request) { + UserByPort userToken = (UserByPort) request.getAttribute("userToken"); + List depositoryByAdminorg = depositoryService.findDepositoryByAdminorg(userToken.getMaindeparment().toString()); + + List inventoryPList = new ArrayList<>(); + for (Depository value : depositoryByAdminorg) { + map.put("depositoryId", value.getId()); + List inventoryPS = materialService.findInventory(map); + inventoryPList.addAll(inventoryPS); + } Map paramByBarcode = new HashMap<>(); - for (InventoryP inventoryP : materialPByCondition) { + for (InventoryP inventoryP : inventoryPList) { List splitInfoByMid = splitUnitService.findSplitInfoByMid(inventoryP.getMid()); inventoryP.setSplitInfoList(splitInfoByMid); paramByBarcode.put("mcode", inventoryP.getCode()); List materialByBarCodeByCondition = materialService.findMaterialByBarCodeByCondition(paramByBarcode); inventoryP.setMaterialAndBarCodeList(materialByBarCodeByCondition); + List placeList = new ArrayList<>(); + for (Depository depository : depositoryByAdminorg) { + List placeByMidAndDid = placeService.findPlaceByMidAndDid(inventoryP.getId(), depository.getId()); + for (PlaceP placeP : placeByMidAndDid) { + int index = placeList.indexOf(placeP); + if (index == -1) { + placeList.add(placeP); + } + } + } + inventoryP.setPlacePList(placeList); } - return new RestResponse(materialPByCondition, materialService.findInventoryCount(map), 200); + + return new RestResponse(inventoryPList, materialService.findInventoryCount(map), 200); } @@ -540,8 +560,8 @@ public class MaterialController { ArrayList newMaterialList = new ArrayList(); Map map = new HashMap<>(); - for (int i = 0; i < materialList.size(); i++) { - JSONObject obj = (JSONObject) materialList.get(i); + for (Object o : materialList) { + JSONObject obj = (JSONObject) o; map.put("code", obj.get("code")); if (depository != null) { map.put("depositoryId", depository.get("did")); @@ -585,52 +605,102 @@ public class MaterialController { boolean flag = false; map.remove("quantity"); // 获取当前用户所在部门关闭的仓库及公共仓库 - List depositoryByAdminorg = depositoryService.findDepositoryByAdminorg(userByPort.getMaindeparment().toString()); - for (Depository depository : depositoryByAdminorg) { - map.put("depositoryId", depository.getId()); + Integer placeId = ObjectFormatUtil.toInteger(map.get("placeId")); + map.remove("placeId"); + if (Integer.compare(placeId, -1) == 0) { + // 如果是查询所有库存 + List depositoryByAdminorg = depositoryService.findDepositoryByAdminorg(userByPort.getMaindeparment().toString()); + for (Depository depository : depositoryByAdminorg) { + map.put("depositoryId", depository.getId()); + List inventoryPList = materialService.findInventory(map); + if (inventoryPList.size() > 0) { // 如果有库存 + if ("-1".equals(unit)) { + // 如果是基础单位 + for (InventoryP inventoryP : inventoryPList) { + if (quantity <= inventoryP.getQuantity()) { // 如果当前数量合适则跳出循环 + flag = true; + break; + } + } + } else { + // 如果是拆单单位 + + + for (InventoryP inventoryP : inventoryPList) { + + Map paramForSplitInfo = new HashMap<>(); + paramForSplitInfo.put("mid", inventoryP.getMid()); + paramForSplitInfo.put("newUnit", unit); + // 获取当前拆单记录 + SplitInfo splitInfo = splitUnitService.findSplitInfoByMidAndUnit(paramForSplitInfo); + + // 获取最高级对应当前单位的数量 + int saveQuantity = inventoryP.getQuantity() * splitUnitService.findSplitInfoScaleQuantity(splitInfo, -1); + // 获取当前物料所在库位 + List placeByMidAndDid = placeService.findPlaceByMidAndDid(inventoryP.getId(), depository.getId()); + for (PlaceP p : + placeByMidAndDid) { + // 获取对应关系 + MaterialAndPlace placeAndMaterialByMidAndPid = placeService.findPlaceAndMaterialByMidAndPid(p.getId(), inventoryP.getId()); + + if (placeAndMaterialByMidAndPid != null) { + SplitInventory splitInventory = splitUnitService.findSplitInventoryByIidAndSid(placeAndMaterialByMidAndPid.getId(), splitInfo.getId()); + saveQuantity += splitInventory.getSaveQuantity(); + + 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(); + parentSplitInfo = splitUnitService.findSplitInfoById(parentSplitInfo.getParentId()); + } + } + } + + if (quantity <= saveQuantity) { // 如果当前数量合适则跳出循环 + flag = true; + break; + } + } + } + } + } + } else { + // 获取当前要转移的库位 + Place place = placeService.findPlaceById(placeId); + if (Integer.compare(place.getId(), 0) != 0) { + map.put("depositoryId", place.getDid()); + } + // 根据条件查询库存 List inventoryPList = materialService.findInventory(map); - if (inventoryPList.size() > 0) { // 如果有库存 + for (InventoryP inventoryP : + inventoryPList) { + // 获取当前库位上的物料映射关系 + MaterialAndPlace placeAndMaterialByMidAndPid = placeService.findPlaceAndMaterialByMidAndPid(placeId, inventoryP.getId()); if ("-1".equals(unit)) { // 如果是基础单位 - for (InventoryP inventoryP : inventoryPList) { - if (quantity <= inventoryP.getQuantity()) { // 如果当前数量合适则跳出循环 - flag = true; - break; - } + if (quantity <= placeAndMaterialByMidAndPid.getQuantity()) { // 如果当前数量合适则跳出循环 + flag = true; + break; } } else { - // 如果是拆单单位 - - - for (InventoryP inventoryP : inventoryPList) { - - Map paramForSplitInfo = new HashMap<>(); - paramForSplitInfo.put("mid", inventoryP.getMid()); - paramForSplitInfo.put("newUnit", unit); - // 获取当前拆单记录 - SplitInfo splitInfo = splitUnitService.findSplitInfoByMidAndUnit(paramForSplitInfo); - - // 获取最高级对应当前单位的数量 - int saveQuantity = inventoryP.getQuantity() * splitUnitService.findSplitInfoScaleQuantity(splitInfo,-1); - - SplitInventory splitInventory = splitUnitService.findSplitInventoryByIidAndSid(inventoryP.getId(), splitInfo.getId()); - saveQuantity += splitInventory.getSaveQuantity(); - - SplitInfo parentSplitInfo = splitUnitService.findSplitInfoById(splitInfo.getParentId());; - while (parentSplitInfo != null){ - splitInventory = splitUnitService.findSplitInventoryByIidAndSid(inventoryP.getId(), parentSplitInfo.getId()); - splitInfo = splitUnitService.findSplitInfoByParentId(parentSplitInfo.getId()); - saveQuantity += splitInventory.getSaveQuantity() * splitInfo.getQuantity(); - parentSplitInfo = splitUnitService.findSplitInfoById(parentSplitInfo.getParentId()); - } - if (quantity <= saveQuantity) { // 如果当前数量合适则跳出循环 - flag = true; - break; - } + Map paramForSplitInfo = new HashMap<>(); + paramForSplitInfo.put("mid", inventoryP.getMid()); + paramForSplitInfo.put("newUnit", unit); + // 查询当前拆单记录 + SplitInfo splitInfo = splitUnitService.findSplitInfoByMidAndUnit(paramForSplitInfo); + // 查询以当前拆单记录为基础单位的库存 + int allInventoryForSplitInfo = splitUnitService.findAllInventoryForSplitInfo(-1, placeAndMaterialByMidAndPid, splitInfo.getId(), 0, true); + if (quantity <= allInventoryForSplitInfo) { + flag = true; + break; } } + } } + return new RestResponse(flag); } @@ -774,6 +844,9 @@ public class MaterialController { mp.setPlacePList(placePList); // 设置物料与条形码的对应关系 mp.setMaterialAndBarCodeList(materialByBarCodeByCondition); + // 获取拆单信息 + List splitInfoByMid = splitUnitService.findSplitInfoByMid(mp.getMid()); + mp.setSplitInfoList(splitInfoByMid); } return new RestResponse(mp); 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 6a535fb8..be6fc9ff 100644 --- a/src/main/java/com/dreamchaser/depository_manage/controller/PageController.java +++ b/src/main/java/com/dreamchaser/depository_manage/controller/PageController.java @@ -700,7 +700,7 @@ public class PageController { public ModelAndView application_out_back(String code, String depositoryId) { ModelAndView mv = new ModelAndView(); mv.setViewName("pages/application/application-out_back"); - InventoryP materialById = new InventoryP(); + InventoryP inventoryP = new InventoryP(); if (code != null) { Map map = new HashMap<>(); Depository depositoryByCode = depositoryService.findDepositoryById(ObjectFormatUtil.toInteger(depositoryId)); @@ -710,8 +710,10 @@ public class PageController { if (inventory.size() < 1) { mv.addObject("materialById", new Material()); } else { - materialById = inventory.get(0); - mv.addObject("materialById", materialById); + inventoryP = inventory.get(0); + List splitInfoByMid = splitUnitService.findSplitInfoByMid(inventoryP.getMid()); + inventoryP.setSplitInfoList(splitInfoByMid); + mv.addObject("materialById", inventoryP); } } return mv; 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 adb2e4c1..c3f41c0b 100644 --- a/src/main/java/com/dreamchaser/depository_manage/controller/PlaceController.java +++ b/src/main/java/com/dreamchaser/depository_manage/controller/PlaceController.java @@ -210,13 +210,12 @@ public class PlaceController { List depositoryByAdminorg = depositoryService.findDepositoryByAdminorg(userToken.getMaindeparment().toString()); Integer mid = ObjectFormatUtil.toInteger(map.get("mid")); List placeList = new ArrayList<>(); - for (int i = 0; i < depositoryByAdminorg.size(); i++) { - Depository depository = depositoryByAdminorg.get(i); + for (Depository depository : depositoryByAdminorg) { List placeByMidAndDid = placeService.findPlaceByMidAndDid(mid, depository.getId()); - for (int j = 0; j < placeByMidAndDid.size(); j++) { - int index = placeList.indexOf(placeByMidAndDid.get(j)); - if(index == -1){ - placeList.add(placeByMidAndDid.get(j)); + for (PlaceP placeP : placeByMidAndDid) { + int index = placeList.indexOf(placeP); + if (index == -1) { + placeList.add(placeP); } } } 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 0699d2a3..d1fdeb34 100644 --- a/src/main/java/com/dreamchaser/depository_manage/mapper/PlaceMapper.xml +++ b/src/main/java/com/dreamchaser/depository_manage/mapper/PlaceMapper.xml @@ -204,7 +204,7 @@ ) - + insert into materialandplace(id,mid,pid,quantity) values ( #{id}, diff --git a/src/main/java/com/dreamchaser/depository_manage/mapper/SplitUnitMapper.xml b/src/main/java/com/dreamchaser/depository_manage/mapper/SplitUnitMapper.xml index 5d0776c3..7a2075b6 100644 --- a/src/main/java/com/dreamchaser/depository_manage/mapper/SplitUnitMapper.xml +++ b/src/main/java/com/dreamchaser/depository_manage/mapper/SplitUnitMapper.xml @@ -95,10 +95,10 @@ from `split_inventory` si where 1 = 1 - + and si.iid = #{iid} - + and si.sid = #{sid} diff --git a/src/main/java/com/dreamchaser/depository_manage/service/SplitUnitService.java b/src/main/java/com/dreamchaser/depository_manage/service/SplitUnitService.java index fb0610f2..a9ae27fd 100644 --- a/src/main/java/com/dreamchaser/depository_manage/service/SplitUnitService.java +++ b/src/main/java/com/dreamchaser/depository_manage/service/SplitUnitService.java @@ -1,6 +1,7 @@ package com.dreamchaser.depository_manage.service; import com.dreamchaser.depository_manage.entity.Inventory; +import com.dreamchaser.depository_manage.entity.MaterialAndPlace; import com.dreamchaser.depository_manage.entity.SplitInfo; import com.dreamchaser.depository_manage.entity.SplitInventory; import com.dreamchaser.depository_manage.pojo.SplitInfoP; @@ -114,13 +115,13 @@ public interface SplitUnitService { * 获取当前拆单与基础拆单之间的库存总额(当前拆单记录为-1是全部库存是使用) * * @param splitInfoId 当前拆单记录Id - * @param inventory 库存记录 + * @param materialAndPlace 库存记录 * @param baseSplitInfoId 基础拆单记录Id * @param saveQuantity 最终返回值 * @param allQuantityFlag 用于标志是否获取全部库存 * @return */ - int findAllInventoryForSplitInfo(Integer splitInfoId, Inventory inventory, Integer baseSplitInfoId, int saveQuantity, boolean allQuantityFlag); + int findAllInventoryForSplitInfo(Integer splitInfoId, MaterialAndPlace materialAndPlace, Integer baseSplitInfoId, int saveQuantity, boolean allQuantityFlag); /** * 根据库存id与拆单记录id获取对应拆单库存处理记录 @@ -131,6 +132,16 @@ public interface SplitUnitService { SplitInventory findSplitInventoryByIidAndSid(Integer Iid,Integer sid); + /** + * 用于拆单库存处理记录的修改 + * + * @param splitInfo 对应拆单记录 + * @param quantity 修改数目 + * @param map 入库条件 + * @param inQuantity 最终入库数量 + */ + void updateSplitInfoSaveQuantity(SplitInfo splitInfo, int quantity, int iid, Map map, int inQuantity, SplitInfo baseSplitInfo); + /** * 根据父级查询拆单记录 * @param parentId 待查询父级 diff --git a/src/main/java/com/dreamchaser/depository_manage/service/impl/DepositoryRecordServiceImpl.java b/src/main/java/com/dreamchaser/depository_manage/service/impl/DepositoryRecordServiceImpl.java index 8fe110c3..f7b43409 100644 --- a/src/main/java/com/dreamchaser/depository_manage/service/impl/DepositoryRecordServiceImpl.java +++ b/src/main/java/com/dreamchaser/depository_manage/service/impl/DepositoryRecordServiceImpl.java @@ -106,7 +106,7 @@ public class DepositoryRecordServiceImpl implements DepositoryRecordService { //构造单号 String code = createCode(depositoryRecordById.getDname(), "InOrderNumber", "in", ""); Double quantity = Double.parseDouble((String) map.get("quantity")); - Double price = Double.parseDouble((String) map.get("price")); + double price = Double.parseDouble((String) map.get("price")); Integer mid = ObjectFormatUtil.toInteger(map.get("mid")); // 根据物料id查询物料 Material material = materialMapper.findMaterialById(mid); @@ -115,11 +115,11 @@ public class DepositoryRecordServiceImpl implements DepositoryRecordService { return 0; } // 获取当前填写的生产日期 - Long producedDate = Long.valueOf(0); + long producedDate = 0L; if (map.containsKey("producedDate")) { Object s = map.get("producedDate"); if (s == null || "".equals(s.toString())) { - producedDate = Long.valueOf(0); + producedDate = 0L; } else { producedDate = DateUtil.DateTimeByDayToTimeStamp(s.toString()); } @@ -564,10 +564,10 @@ public class DepositoryRecordServiceImpl implements DepositoryRecordService { insertProducedDate.put("inid", InId); insertProducedDate.put("mid", newInMid); if (map.containsKey("producedDate")) { - Long producedDate = Long.valueOf(0); + Long producedDate = 0L; Object s = map.get("producedDate"); if (s == null || "".equals(s.toString())) { - producedDate = Long.valueOf(0); + producedDate = 0L; } else { producedDate = DateUtil.DateTimeByDayToTimeStamp(s.toString()); insertProducedDate.put("producedDate", producedDate); @@ -854,6 +854,7 @@ public class DepositoryRecordServiceImpl implements DepositoryRecordService { map.put("quantity", trueOut.toString()); map.put("applicantId", record.getApplicantId()); map.put("minRecordId", applicationOutMinById.getId()); // 出库订单编号 + map.put("unit", applicationOutMinById.getUnit()); transferMaterial(map); } restResponse.setStatus(200); @@ -893,8 +894,7 @@ public class DepositoryRecordServiceImpl implements DepositoryRecordService { restResponse.setData(""); restResponse.setStatusInfo(new StatusInfo("出库失败", "出库失败,库存不足")); } - } - else { + } else { // 如果是拆单后的出库 // 用于获取对应的拆单记录 @@ -904,10 +904,16 @@ public class DepositoryRecordServiceImpl implements DepositoryRecordService { // 获取对应拆单记录 SplitInfo splitInfo = splitUnitMapper.findSplitInfoByMidAndUnit(paramForSplitInfo); + // 获取当前出库物料所在库位的对应关系 + Map paramForInventoryToPlace = new HashMap<>(); + paramForInventoryToPlace.put("mid", inventory.getId()); + paramForInventoryToPlace.put("pid", placeId); + // 获取当前物料所存放库位的数量 + placeAndMaterialByMidAndPid = placeMapper.findPlaceAndMaterialByMidAndPid(paramForInventoryToPlace); // 获取当前拆单库存 Map paramForSplitInventory = new HashMap<>(); paramForSplitInventory.put("sid", splitInfo.getId()); - paramForSplitInventory.put("iid", inventory.getId()); + paramForSplitInventory.put("iid", placeAndMaterialByMidAndPid.getId()); SplitInventory splitInventory = splitUnitMapper.findSplitInventoryByIidAndSid(paramForSplitInventory); @@ -929,6 +935,16 @@ public class DepositoryRecordServiceImpl implements DepositoryRecordService { // 修改库存处理记录 splitUnitMapper.updateSplitInventory(splitInventory); + // 如果是库存转移订单 + Map map = new HashMap<>(); + if (record.getIstransfer() == 1) { + map.put("quantity", trueOut.toString()); + map.put("applicantId", record.getApplicantId()); + map.put("minRecordId", applicationOutMinById.getId()); // 出库订单编号 + map.put("unit", applicationOutMinById.getUnit()); + transferMaterial(map); + } + // 进行子订单的相关处理 updateApplicationMinOutInfo(id, applicationOutMinById, record, trueOut, userByPort, placeId, userAgent); @@ -966,7 +982,20 @@ public class DepositoryRecordServiceImpl implements DepositoryRecordService { // 获取当前父级拆单记录 SplitInfo parentSplitInfo = splitUnitMapper.findSplitInfoById(splitInfoById.getParentId()); - restResponse = updateSplitInventoryInfo(parentSplitInfo, inventory, trueOut, surplus, splitInfo); + + restResponse = updateOutSplitInventoryInfo(parentSplitInfo, placeAndMaterialByMidAndPid, trueOut, surplus, splitInfo); + + // 如果成功出库 + if (restResponse.getStatus() == 200) { + Map map = new HashMap<>(); + if (record.getIstransfer() == 1) { + map.put("quantity", trueOut.toString()); + map.put("applicantId", record.getApplicantId()); + map.put("minRecordId", applicationOutMinById.getId()); // 出库订单编号 + map.put("unit", applicationOutMinById.getUnit()); + transferMaterial(map); + } + } updateApplicationMinOutInfo(id, applicationOutMinById, record, trueOut, userByPort, placeId, userAgent); } else { @@ -1043,6 +1072,16 @@ public class DepositoryRecordServiceImpl implements DepositoryRecordService { splitInventory.setOutQuantity(splitInventory.getOutQuantity() + trueOut); splitUnitMapper.updateSplitInventory(splitInventory); + // 如果是库存转移订单 + if (record.getIstransfer() == 1) { + map.put("quantity", trueOut.toString()); + map.put("applicantId", record.getApplicantId()); + map.put("minRecordId", applicationOutMinById.getId()); // 出库订单编号 + map.put("unit", applicationOutMinById.getUnit()); + transferMaterial(map); + } + + updateApplicationMinOutInfo(id, applicationOutMinById, record, trueOut, userByPort, placeId, userAgent); restResponse.setStatus(200); @@ -1184,7 +1223,7 @@ public class DepositoryRecordServiceImpl implements DepositoryRecordService { // 添加拆单库存处理记录 Map insertSplitInventory = new HashMap<>(); insertSplitInventory.put("sid", splitInfo.getId()); - insertSplitInventory.put("iid", inventory.getId()); + insertSplitInventory.put("iid", placeAndMaterialByMidAndPid.getId()); insertSplitInventory.put("outQuantity", trueOut); insertSplitInventory.put("inQuantity", 0); insertSplitInventory.put("saveQuantity", splitInfo.getQuantity() - residue_realQuantity); @@ -1222,20 +1261,20 @@ public class DepositoryRecordServiceImpl implements DepositoryRecordService { /** * 用于有父级拆单记录的出库处理 * - * @param splitInfo 父级拆单记录 - * @param inventory 当前库存记录 - * @param quantity 当前出库总量 - * @param nowQuantity 当前未出库数量 - * @param realSplitInfo 实际出库的拆单记录 + * @param splitInfo 父级拆单记录 + * @param materialAndPlace 当前库存记录 + * @param quantity 当前出库总量 + * @param nowQuantity 当前未出库数量 + * @param realSplitInfo 实际出库的拆单记录 * @return */ - RestResponse updateSplitInventoryInfo(SplitInfo splitInfo, Inventory inventory, int quantity, int nowQuantity, SplitInfo realSplitInfo) { + RestResponse updateOutSplitInventoryInfo(SplitInfo splitInfo, MaterialAndPlace materialAndPlace, int quantity, int nowQuantity, SplitInfo realSplitInfo) { // 定义返回值 RestResponse restResponse = new RestResponse(); // 用于获取当前拆单记录对应的拆单库存记录 Map paramForSplitInventory = new HashMap<>(); paramForSplitInventory.put("sid", splitInfo.getId()); - paramForSplitInventory.put("iid", inventory.getId()); + paramForSplitInventory.put("iid", materialAndPlace.getId()); SplitInventory splitInventoryForSplitInfo = splitUnitMapper.findSplitInventoryByIidAndSid(paramForSplitInventory); // 获取当前拆单记录与实际出库拆单之间的进制 int parentScale = splitUnitService.findSplitInfoScaleQuantity(realSplitInfo, splitInfo.getId()); @@ -1268,7 +1307,8 @@ public class DepositoryRecordServiceImpl implements DepositoryRecordService { // 如果当前库存拆单记录的库存不能满足需要 // 获取当前物料的库存 - int allInventoryForSplitInfo = splitUnitService.findAllInventoryForSplitInfo(-1, inventory, realSplitInfo.getId(), 0, true); + + int allInventoryForSplitInfo = splitUnitService.findAllInventoryForSplitInfo(-1, materialAndPlace, realSplitInfo.getId(), 0, true); // 判断当前所有库存是否可以满足需求 if (allInventoryForSplitInfo >= nowQuantity) { // 如果当前库存数可以满足需求 @@ -1350,7 +1390,7 @@ public class DepositoryRecordServiceImpl implements DepositoryRecordService { // 如果当前还有父级 // 进行递归 - RestResponse restResponse1 = updateSplitInventoryInfo(parentSplitInfo, inventory, quantity, nowQuantity, splitInfo); + RestResponse restResponse1 = updateOutSplitInventoryInfo(parentSplitInfo, materialAndPlace, quantity, nowQuantity, splitInfo); // 获取其父级减少与实际出库的拆单记录的数量 Object data = restResponse1.getData(); // 计算当前与最底层的进制 @@ -1391,7 +1431,7 @@ public class DepositoryRecordServiceImpl implements DepositoryRecordService { // 获取当前拆单单位与顶级之间的进制 int splitInfoQuantity = splitUnitService.findSplitInfoScaleQuantity(splitInfo, -1); // 获取所有当前单位的拆单库存 - realQuantity = inventory.getQuantity() * splitInfoQuantity + realQuantity; + realQuantity = materialAndPlace.getQuantity() * splitInfoQuantity + realQuantity; if (realQuantity > nowQuantity) { // 如果可以出库 @@ -1401,13 +1441,17 @@ public class DepositoryRecordServiceImpl implements DepositoryRecordService { // 计算库存需要减少的数量 int inventory_quantity = (int) Math.ceil((double) residue_quantity / splitInfoQuantity); + // 获取对应的库存 + Inventory inventory = materialMapper.findInventoryById(materialAndPlace.getMid()); + // 重新设置库存数量 + materialAndPlace.setQuantity(materialAndPlace.getQuantity() - inventory_quantity); inventory.setQuantity(inventory.getQuantity() - inventory_quantity); // 重新设置总额 inventory.setAmounts(inventory.getAmounts() - inventory_quantity * inventory.getPrice()); - if (Integer.compare(inventory.getQuantity(), 0) != 0) { + if (Integer.compare(materialAndPlace.getQuantity(), 0) != 0) { // 重新计算单价 BigDecimal decimal = BigDecimal.valueOf(inventory.getAmounts() / inventory.getQuantity()); Double price = decimal.setScale(2, BigDecimal.ROUND_HALF_UP).doubleValue(); @@ -1415,6 +1459,7 @@ public class DepositoryRecordServiceImpl implements DepositoryRecordService { } // 修改库存数量 materialMapper.updateInventory(inventory); + placeMapper.updateMaterialAndPlace(materialAndPlace); } else { @@ -1434,7 +1479,11 @@ public class DepositoryRecordServiceImpl implements DepositoryRecordService { // 计算库存减少的数目 int surplus_redundant = (int) Math.ceil(nowQuantity / splitInfoScaleQuantityForAll); + // 获取对应的库存 + Inventory inventory = materialMapper.findInventoryById(materialAndPlace.getMid()); + // 设置当前库存数量 + materialAndPlace.setQuantity(materialAndPlace.getQuantity() - surplus_redundant); inventory.setQuantity(inventory.getQuantity() - surplus_redundant); // 设置当前总额 inventory.setAmounts(inventory.getPrice() * inventory.getQuantity()); @@ -1446,6 +1495,7 @@ public class DepositoryRecordServiceImpl implements DepositoryRecordService { } // 修改库存数量 materialMapper.updateInventory(inventory); + placeMapper.updateMaterialAndPlace(materialAndPlace); restResponse.setData(surplus_redundant); } @@ -2349,69 +2399,386 @@ public class DepositoryRecordServiceImpl implements DepositoryRecordService { // 获取子订单 ApplicationOutRecordMin recordMin = depositoryRecordMapper.findApplicationOutMinById(minRecordId); // 获取转移详情 - TransferRecord transferRecor = transferRecordMapper.findTransferRecordById(recordMin.getTransferId()); - Integer mid = transferRecor.getMid(); - // 获取库存信息 + TransferRecord transferRecord = transferRecordMapper.findTransferRecordById(recordMin.getTransferId()); + Integer mid = transferRecord.getMid(); + // 获取转出时库存信息 Inventory material = materialMapper.findInventoryById(mid); + param.put("mcode", material.getCode()); - param.put("depositoryId", transferRecor.getToId()); - List materiallist = materialMapper.findInventory(param); - if (materiallist.size() > 0) { - // 如果在该仓库 - map.put("price", material.getPrice().toString()); - map.put("depositoryId", transferRecor.getToId()); - map.put("placeId", transferRecor.getToPlaceId()); - map.put("mid", material.getMid()); - applicationInPlace(map); - } else { - // 如果不在该仓库,插入一条新记录 - Map insert = new HashMap<>(); - Material materialById = materialMapper.findMaterialById(material.getMid()); + param.put("depositoryId", transferRecord.getToId()); + List inventories = materialMapper.findInventory(param); + // 获取当前处理的单位 + String unit = recordMin.getUnit(); + map.put("mid", material.getMid()); + map.put("depositoryId", transferRecord.getToId()); + map.put("placeId", transferRecord.getToPlaceId()); + if ("-1".equals(unit)) { + // 如果是基础单位 + + if (inventories.size() > 0) { + // 如果在该仓库 + + map.put("price", material.getPrice().toString()); + applicationInPlace(map); + } else { + // 如果不在该仓库,插入一条新记录 + Map insert = new HashMap<>(); + Integer quantity = ObjectFormatUtil.toInteger(map.get("quantity")); + insert.put("depositoryId", transferRecord.getToId()); + insert.put("price", material.getPrice()); + insert.put("mid", material.getMid()); + insert.put("quantity", quantity); + insert.put("amounts", quantity * material.getPrice()); + insert.put("depositoryCode", material.getDepositoryCode()); + insert.put("producedDate", material.getProducedDate()); + materialMapper.insertInventory(insert); + + // 查询该记录 + // 获取该库存记录 + Inventory inventory = materialMapper.findInventoryById(ObjectFormatUtil.toInteger(insert.get("id"))); + + Map fromPlaceTemp = new HashMap<>(); + Map toPlaceTemp = new HashMap<>(); + // 转入库位 + Place toPlace = placeMapper.findPlaceById(transferRecord.getToPlaceId()); + toPlace.setQuantity(toPlace.getQuantity() + quantity); + placeMapper.UpdatePlace(toPlace); // 修改转入库位额度 + + toPlaceTemp.put("mid", inventory.getId()); + toPlaceTemp.put("pid", toPlace.getId()); + toPlaceTemp.put("quantity", quantity); + // 获取转入物料具体所在库位 + MaterialAndPlace toMaterialAndPlace = placeMapper.findPlaceAndMaterialByMidAndPid(toPlaceTemp); + if (toMaterialAndPlace == null) { + placeMapper.addMaterialOnPlace(toPlaceTemp); + } else { + toMaterialAndPlace.setQuantity(toMaterialAndPlace.getQuantity() + quantity); + placeMapper.updateMaterialAndPlace(toMaterialAndPlace); + } + } + } + else { + // 如果是拆单单位 + + // 用于获取当前拆单记录 + Map paramForSplitInfo = new HashMap<>(); + paramForSplitInfo.put("mid", material.getMid()); + paramForSplitInfo.put("newUnit", unit); + // 获取当前拆单记录 + SplitInfo splitInfo = splitUnitMapper.findSplitInfoByMidAndUnit(paramForSplitInfo); + + // 获取当前拆单与顶级之间的进制 + int scaleQuantity = splitUnitService.findSplitInfoScaleQuantity(splitInfo, -1); + // 获取当前转移的数量 Integer quantity = ObjectFormatUtil.toInteger(map.get("quantity")); - insert.put("depositoryId", transferRecor.getToId()); - insert.put("price", material.getPrice()); - insert.put("mid", materialById.getId()); - insert.put("quantity", quantity); - insert.put("amounts", quantity * material.getPrice()); - insert.put("depositoryCode", material.getDepositoryCode()); - insert.put("producedDate", material.getProducedDate()); - materialMapper.insertInventory(insert); - // 查询该记录 - /*Integer id =ObjectFormatUtil.toInteger(insert.get("id")); - Material byId = materialMapper.findMaterialById(id); - */ - Map temp = new HashMap<>(); - temp.put("mcode", materialById.getCode()); - temp.put("depositoryId", transferRecor.getToId()); - temp.put("mname", materialById.getMname()); - List inventoryList = materialMapper.findInventory(temp); - // 获取该库存记录 - Inventory inventory = inventoryList.get(0); - - Map fromPlaceTemp = new HashMap<>(); - Map toPlaceTemp = new HashMap<>(); - // 转入库位 - Place toPlace = placeMapper.findPlaceById(transferRecor.getToPlaceId()); - toPlace.setQuantity(toPlace.getQuantity() + quantity); - placeMapper.UpdatePlace(toPlace); // 修改转入库位额度 - - toPlaceTemp.put("mid", inventory.getId()); - toPlaceTemp.put("pid", toPlace.getId()); - toPlaceTemp.put("quantity", quantity); - // 获取转入物料具体所在库位 - MaterialAndPlace toMaterialAndPlace = placeMapper.findPlaceAndMaterialByMidAndPid(toPlaceTemp); - if (toMaterialAndPlace == null) { - placeMapper.addMaterialOnPlace(toPlaceTemp); + if (inventories.size() > 0) { + // 如果在转入的仓库中存在该物料的库存记录 + + // 获取当前库存记录 + Inventory inventory = inventories.get(0); + // 用于查询物料所在库位 + Map paramForInventoryToPlace = new HashMap<>(); + paramForInventoryToPlace.put("pid", transferRecord.getToPlaceId()); + paramForInventoryToPlace.put("mid", inventory.getId()); + // 获取当前物料是否存在于当前库位 + MaterialAndPlace placeAndMaterial = placeMapper.findPlaceAndMaterialByMidAndPid(paramForInventoryToPlace); + if (placeAndMaterial != null) { + // 如果存在于当前库位 + + // 用于查询当前拆单记录的库存记录 + Map paramForSplitInventory = new HashMap<>(); + paramForSplitInventory.put("sid", splitInfo.getId()); + paramForSplitInventory.put("iid", placeAndMaterial.getId()); + // 获取当前拆单记录的库存记录 + SplitInventory splitInventory = splitUnitMapper.findSplitInventoryByIidAndSid(paramForSplitInventory); + if (splitInventory != null) { + // 如果存在该库存记录 + if (splitInfo.getQuantity() >= splitInventory.getSaveQuantity() + quantity) { + // 如果没达到当前进制数量 + + // 设置当前转移后的库存数量 + splitInventory.setSaveQuantity(splitInventory.getSaveQuantity() + quantity); + // 设置当前增加的数量 + splitInventory.setInQuantity(splitInventory.getInQuantity() + quantity); + // 修改当前拆单库存处理记录 + splitUnitMapper.updateSplitInventory(splitInventory); + } else { + // 如果大于当前进制数量 + + + // 计算处理数量(下取整) + int disposeQuantity = (int) Math.round(Math.floor(quantity / (double) splitInfo.getQuantity())); + + // 最终存储到拆单处理的数量 + double saveQuantity = quantity - disposeQuantity * splitInfo.getQuantity(); + + // 最终存储数量 + int realQuantity = (int) Math.round(saveQuantity) + splitInventory.getSaveQuantity(); + + if (realQuantity >= splitInfo.getQuantity()) { + // 如果当前入库的数量大于拆单规定的进制数量 + + // 计算要进的数目 + int quantity_in = (realQuantity / splitInfo.getQuantity()); + // 更新处理数量 + disposeQuantity += quantity_in; + // 拆单库存实际入库的数量 + realQuantity = realQuantity - quantity_in * splitInfo.getQuantity(); + } + // 设置当前计量单位的库存 + splitInventory.setSaveQuantity(realQuantity); + // 更新当前数据 + splitUnitMapper.updateSplitInventory(splitInventory); + if (disposeQuantity != 0) { + // 用于更改库存的数量 + map.put("quantity", String.valueOf(disposeQuantity)); + + } else { + map.put("quantity", "0"); + } + + + // 进行修改当前拆单库存数量 + map.put("newInMid", placeAndMaterial.getId()); + map.put("price", material.getPrice() / scaleQuantity); + + // 实际入库数量 + map.put("realQuantity", quantity.toString()); + if (splitInfo.getParentId() != null) { + SplitInfo parentSplitInfo = splitUnitMapper.findSplitInfoById(splitInfo.getParentId()); + splitUnitService.updateSplitInfoSaveQuantity(parentSplitInfo, disposeQuantity, placeAndMaterial.getId(), map, quantity, splitInfo); + } else { + applicationInPlace(map); + map.remove("id"); + } + + } + } else { + // 如果不存在该库存记录 + + + // 用于插入拆单库存记录 + Map insertForSplitInventory = new HashMap<>(); + insertForSplitInventory.put("iid", placeAndMaterial.getId()); + insertForSplitInventory.put("sid", splitInfo.getId()); + insertForSplitInventory.put("outQuantity", 0); + + if (quantity < splitInfo.getQuantity()) { + // 如果当前转移数量小于进制数量 + + // 设置入库数量 + insertForSplitInventory.put("inQuantity", quantity); + // 设置当前库存数 + insertForSplitInventory.put("saveQuantity", quantity); + splitUnitMapper.addSplitInventory(insertForSplitInventory); + } else { + // 如果不小于 + + // 计算处理数量(下取整) + int disposeQuantity = (int) Math.round(Math.floor(quantity / (double) splitInfo.getQuantity())); + + // 最终存储到拆单处理的数量 + double saveQuantity = quantity - disposeQuantity * splitInfo.getQuantity(); + + // 最终存储数量 + int realQuantity = (int) Math.round(saveQuantity); + + if (realQuantity >= splitInfo.getQuantity()) { + // 如果当前入库的数量大于拆单规定的进制数量 + + // 计算要进的数目 + int quantity_in = (realQuantity / splitInfo.getQuantity()); + // 更新处理数量 + disposeQuantity += quantity_in; + // 拆单库存实际入库的数量 + realQuantity = realQuantity - quantity_in * splitInfo.getQuantity(); + } + + // 设置入库数量 + insertForSplitInventory.put("inQuantity", 0); + // 设置当前计量单位的库存 + insertForSplitInventory.put("saveQuantity", realQuantity); + + // 先添加一条拆单库存记录 + splitUnitMapper.addSplitInventory(insertForSplitInventory); + + if (disposeQuantity != 0) { + // 用于更改库存的数量 + map.put("quantity", String.valueOf(disposeQuantity)); + + } else { + map.put("quantity", "0"); + } + + // 进行修改当前拆单库存数量 + map.put("newInMid", placeAndMaterial.getId()); + map.put("price", material.getPrice() / scaleQuantity); + + // 实际入库数量 + map.put("realQuantity", quantity.toString()); + if (splitInfo.getParentId() != null) { + SplitInfo parentSplitInfo = splitUnitMapper.findSplitInfoById(splitInfo.getParentId()); + splitUnitService.updateSplitInfoSaveQuantity(parentSplitInfo, disposeQuantity, placeAndMaterial.getId(), map, quantity, splitInfo); + } else { + applicationInPlace(map); + map.remove("id"); + } + + } + } + } else { + // 如果不存在于当前库位 + + // 用于添加一条物料于库位的对应关系 + Map insertForMaterialAndPlace = new HashMap<>(); + insertForMaterialAndPlace.put("mid", inventory.getId()); + insertForMaterialAndPlace.put("pid", transferRecord.getToPlaceId()); + insertForMaterialAndPlace.put("quantity", 0); + // 先添加一条记录 + placeMapper.addMaterialOnPlace(insertForMaterialAndPlace); + + + // 用于插入拆单库存记录 + Map insertForSplitInventory = new HashMap<>(); + insertForSplitInventory.put("iid", insertForMaterialAndPlace.get("id")); + insertForSplitInventory.put("sid", splitInfo.getId()); + insertForSplitInventory.put("outQuantity", 0); + + if (quantity < splitInfo.getQuantity()) { + // 如果当前转移数量小于进制数量 + + // 设置入库数量 + insertForSplitInventory.put("inQuantity", quantity); + // 设置当前库存数 + insertForSplitInventory.put("saveQuantity", quantity); + splitUnitMapper.addSplitInventory(insertForSplitInventory); + } else { + // 如果不小于 + + map.put("price", material.getPrice() / scaleQuantity); + updateSplitInventoryForMoreScale(material, map, splitInfo, quantity, insertForMaterialAndPlace, insertForSplitInventory); + } + + + } + } else { - toMaterialAndPlace.setQuantity(toMaterialAndPlace.getQuantity() + quantity); - placeMapper.updateMaterialAndPlace(toMaterialAndPlace); + // 如果在转入的仓库中不存在该物料的库存记录 + + // 用于添加一条库存记录 + Map insertForInventory = new HashMap<>(); + insertForInventory.put("depositoryId", transferRecord.getToId()); + insertForInventory.put("price", material.getPrice()); + insertForInventory.put("mid", material.getMid()); + insertForInventory.put("quantity", 0); + insertForInventory.put("amounts", 0); + insertForInventory.put("depositoryCode", material.getDepositoryCode()); + insertForInventory.put("producedDate", material.getProducedDate()); + // 添加一条库存记录 + materialMapper.insertInventory(insertForInventory); + + // 用于添加物料与库位的对应关系 + Map insertForMaterialAndPlace = new HashMap<>(); + insertForMaterialAndPlace.put("mid", insertForInventory.get("id")); + insertForMaterialAndPlace.put("pid", transferRecord.getToPlaceId()); + insertForMaterialAndPlace.put("quantity", 0); + + // 添加一条物料与库位的对应关系记录 + placeMapper.addMaterialOnPlace(insertForMaterialAndPlace); + + // 用于插入拆单库存记录 + Map insertForSplitInventory = new HashMap<>(); + insertForSplitInventory.put("iid", insertForMaterialAndPlace.get("id")); + insertForSplitInventory.put("sid", splitInfo.getId()); + insertForSplitInventory.put("outQuantity", 0); + + if (quantity < splitInfo.getQuantity()) { + // 如果当前转移数量小于进制数量 + + // 设置入库数量 + insertForSplitInventory.put("inQuantity", quantity); + // 设置当前库存数 + insertForSplitInventory.put("saveQuantity", quantity); + splitUnitMapper.addSplitInventory(insertForSplitInventory); + } else { + // 如果不小于 + map.put("price", material.getPrice() / scaleQuantity); + updateSplitInventoryForMoreScale(material, map, splitInfo, quantity, insertForMaterialAndPlace, insertForSplitInventory); + } + } } } + + /** + * 用于处理超出进制的拆单库存处理记录 + * + * @param material 转移的物料 + * @param map 存储的部分数据 + * @param splitInfo 当前拆单记录 + * @param quantity 超出的数量 + * @param insertForMaterialAndPlace 用于添加物料与库位对应关系的数据 + * @param insertForSplitInventory 用于添加一条新的拆单库存处理记录 + */ + void updateSplitInventoryForMoreScale(Inventory material, Map map, SplitInfo splitInfo, Integer quantity, Map insertForMaterialAndPlace, Map insertForSplitInventory) { + + // 计算处理数量(下取整) + int disposeQuantity = (int) Math.round(Math.floor(quantity / (double) splitInfo.getQuantity())); + + // 最终存储到拆单处理的数量 + double saveQuantity = quantity - disposeQuantity * splitInfo.getQuantity(); + + // 最终存储数量 + int realQuantity = (int) Math.round(saveQuantity); + + if (realQuantity >= splitInfo.getQuantity()) { + // 如果当前入库的数量大于拆单规定的进制数量 + + // 计算要进的数目 + int quantity_in = (realQuantity / splitInfo.getQuantity()); + // 更新处理数量 + disposeQuantity += quantity_in; + // 拆单库存实际入库的数量 + realQuantity = realQuantity - quantity_in * splitInfo.getQuantity(); + } + + // 设置入库数量 + insertForSplitInventory.put("inQuantity", 0); + // 设置当前计量单位的库存 + insertForSplitInventory.put("saveQuantity", realQuantity); + + // 先添加一条拆单库存记录 + splitUnitMapper.addSplitInventory(insertForSplitInventory); + + if (disposeQuantity != 0) { + // 用于更改库存的数量 + map.put("quantity", String.valueOf(disposeQuantity)); + + } else { + map.put("quantity", "0"); + } + + + // 进行修改当前拆单库存数量 + map.put("newInMid", insertForMaterialAndPlace.get("id")); + + // 实际入库数量 + map.put("realQuantity", quantity.toString()); + if (splitInfo.getParentId() != null) { + SplitInfo parentSplitInfo = splitUnitMapper.findSplitInfoById(splitInfo.getParentId()); + splitUnitService.updateSplitInfoSaveQuantity(parentSplitInfo, disposeQuantity, ObjectFormatUtil.toInteger(insertForMaterialAndPlace.get("id")), map, quantity, splitInfo); + } else { + applicationInPlace(map); + map.remove("id"); + } + + } + + /** * 根据id修改仓库调度记录 * diff --git a/src/main/java/com/dreamchaser/depository_manage/service/impl/MaterialServiceImpl.java b/src/main/java/com/dreamchaser/depository_manage/service/impl/MaterialServiceImpl.java index e76ce68f..270a2479 100644 --- a/src/main/java/com/dreamchaser/depository_manage/service/impl/MaterialServiceImpl.java +++ b/src/main/java/com/dreamchaser/depository_manage/service/impl/MaterialServiceImpl.java @@ -263,8 +263,8 @@ public class MaterialServiceImpl implements MaterialService { Integer mid = list.get(i).getId(); List placeByMidAndDid = placeService.findPlaceByMidAndDid(mid, depositoryId); StringBuilder placeCode = new StringBuilder(); - for (int j = 0; j < placeByMidAndDid.size(); j++) { - placeCode.append(placeByMidAndDid.get(j).getCode()).append(" "); + for (PlaceP placeP : placeByMidAndDid) { + placeCode.append(placeP.getCode()).append(" "); } if (depositoryId != null) { Depository depositoryRecordById = depositoryMapper.findDepositoryById(depositoryId); @@ -592,25 +592,29 @@ public class MaterialServiceImpl implements MaterialService { m.setProducedDate(DateUtil.TimeStampToDateTimeForDay(producedDate)); } // 设置当前物料保质期的具体时间 - Long calcShelfLife = Long.valueOf(0); + Long calcShelfLife = 0L; String currentDate = DateUtil.getCurrentDate(); // 获取当天时间 - Long nowDay = DateUtil.DateTimeByDayToTimeStamp(currentDate); + long nowDay = DateUtil.DateTimeByDayToTimeStamp(currentDate); Long life = inventory.getShelfLife(); if (life != null) { String shelfLife = String.valueOf(life); String dateType = shelfLife.substring(0, 1); String dateTime = shelfLife.substring(1); - if ("1".equals(dateType)) { - m.setShelfLife(dateTime + "年"); - calcShelfLife = ObjectFormatUtil.toLong(dateTime) * 365 * DateUtil.dayTime; - } else if ("2".equals(dateType)) { - m.setShelfLife(dateTime + "月"); - calcShelfLife = ObjectFormatUtil.toLong(dateTime) * 30 * DateUtil.dayTime; - } else if ("3".equals(dateType)) { - m.setShelfLife(dateTime + "天"); - calcShelfLife = ObjectFormatUtil.toLong(dateTime) * DateUtil.dayTime; + switch (dateType) { + case "1": + m.setShelfLife(dateTime + "年"); + calcShelfLife = ObjectFormatUtil.toLong(dateTime) * 365 * DateUtil.dayTime; + break; + case "2": + m.setShelfLife(dateTime + "月"); + calcShelfLife = ObjectFormatUtil.toLong(dateTime) * 30 * DateUtil.dayTime; + break; + case "3": + m.setShelfLife(dateTime + "天"); + calcShelfLife = ObjectFormatUtil.toLong(dateTime) * DateUtil.dayTime; + break; } // 获取当前没有使用完成的物料对应的生产日期对应 List materialAndProducedDateByMid = materialMapper.findMaterialAndProducedDateByMid(m.getId()); @@ -627,37 +631,57 @@ public class MaterialServiceImpl implements MaterialService { m.setTypeName(materialTypeByOldId.getTname()); m.setTypeId(materialTypeByOldId.getOldId()); m.setWarningCount(warningCount); - // 获取当前是否存在拆单处理记录 - List splitInventoryList = splitUnitMapper.findSplitInventoryByIid(m.getId()); - if (splitInventoryList.size() > 0) { - // 如果存在拆单库存处理记录 + // 查询当前物料在该仓库中的库位位置 + List placeByMidAndDid = placeService.findPlaceByMidAndDid(m.getId(), m.getDepositoryId()); - // 获取拆单信息 - StringBuilder showQuantity = new StringBuilder(); - double amounts = 0.0; - if (Integer.compare(m.getQuantity(), 0) != 0) { - showQuantity.append(m.getUnit()).append(":").append(m.getQuantity()); - } - for (SplitInventory splitInventory : splitInventoryList) { - SplitInfo splitInfo = splitUnitMapper.findSplitInfoById(splitInventory.getSid()); + Map splitInventoryForUnit = new HashMap<>(); + + // 获取拆单信息对应库存 + StringBuilder showQuantity = new StringBuilder(); + //定义总额 + double amounts = 0.0; + + if (Integer.compare(m.getQuantity(), 0) != 0) { + showQuantity.append(m.getUnit()).append(":").append(m.getQuantity()).append(" "); + } + for (PlaceP place: + placeByMidAndDid) { + // 获取当前具体数据 + MaterialAndPlace placeAndMaterialByMidAndPid = placeService.findPlaceAndMaterialByMidAndPid(place.getId(), m.getId()); + // 获取当前是否存在拆单处理记录 + List splitInventoryList = splitUnitMapper.findSplitInventoryByIid(placeAndMaterialByMidAndPid.getId()); + if (splitInventoryList.size() > 0) { + // 如果存在拆单库存处理记录 + for (SplitInventory splitInventory : splitInventoryList) { + SplitInfo splitInfo = splitUnitMapper.findSplitInfoById(splitInventory.getSid()); if (Integer.compare(splitInventory.getSaveQuantity(), 0) != 0) { - showQuantity.append(splitInfo.getNewUnit()).append(":").append(splitInventory.getSaveQuantity()).append(" "); + if(splitInventoryForUnit.containsKey(splitInfo.getNewUnit())){ + // 如果当前存在该拆单类型的记录 + + // 更新当前类型数据 + splitInventoryForUnit.put(splitInfo.getNewUnit(),splitInventoryForUnit.get(splitInfo.getNewUnit())+splitInventory.getSaveQuantity()); + }else{ + // 如果不存在,则新增 + splitInventoryForUnit.put(splitInfo.getNewUnit(),splitInventory.getSaveQuantity()); + } // 计算拆单后的单价 BigDecimal bigDecimal = BigDecimal.valueOf(inventory.getPrice() / splitInfo.getQuantity()); double split_price = bigDecimal.setScale(2, BigDecimal.ROUND_HALF_UP).doubleValue(); amounts += split_price * splitInventory.getSaveQuantity(); } + } } - m.setAmounts(m.getAmounts() + amounts); - m.setShowQuantity(showQuantity.toString()); - - - } else { - m.setShowQuantity(m.getUnit() + ":" + m.getQuantity()); } + // 设置新总额 + m.setAmounts(m.getAmounts() + amounts); + // 获取当前各拆单信息对应的库存 + for (Map.Entry entry : splitInventoryForUnit.entrySet()) { + showQuantity.append(entry.getKey()).append(":").append(entry.getValue()).append(" "); + } + m.setShowQuantity(showQuantity.toString()); result.add(m); } return result; diff --git a/src/main/java/com/dreamchaser/depository_manage/service/impl/SplitUnitServiceImpl.java b/src/main/java/com/dreamchaser/depository_manage/service/impl/SplitUnitServiceImpl.java index 8f4a7290..8385399d 100644 --- a/src/main/java/com/dreamchaser/depository_manage/service/impl/SplitUnitServiceImpl.java +++ b/src/main/java/com/dreamchaser/depository_manage/service/impl/SplitUnitServiceImpl.java @@ -101,16 +101,27 @@ public class SplitUnitServiceImpl implements SplitUnitService { SplitInventory splitInventory = null; // 定义对应的库存记录 Inventory inventory = null; + + // 定义对应库存所在库位 + MaterialAndPlace placeAndMaterialByMidAndPid = null; // 用于存储拆单库存处理操作的数据 Map paramForInsertSplitInventory = new HashMap<>(); paramForInsertSplitInventory.put("sid", splitInfoForUnit.getId()); if (iid != null) { - paramForInsertSplitInventory.put("iid", iid); - // 查询当前库存是否有该拆单的处理记录 - splitInventory = splitUnitMapper.findSplitInventoryByIidAndSid(paramForInsertSplitInventory); + // 获取对应的库存记录 inventory = materialMapper.findInventoryById(iid); + Map paramForInventoryToPlace = new HashMap<>(); + paramForInventoryToPlace.put("pid", map.get("placeId")); + paramForInventoryToPlace.put("mid", inventory.getId()); + + placeAndMaterialByMidAndPid = placeMapper.findPlaceAndMaterialByMidAndPid(paramForInventoryToPlace); + if (placeAndMaterialByMidAndPid != null) { + paramForInsertSplitInventory.put("iid", placeAndMaterialByMidAndPid.getId()); + // 查询当前库存是否有该拆单的处理记录 + splitInventory = splitUnitMapper.findSplitInventoryByIidAndSid(paramForInsertSplitInventory); + } } else { Map param = new HashMap<>(); param.put("depositoryId", map.get("depositoryId")); @@ -120,10 +131,18 @@ public class SplitUnitServiceImpl implements SplitUnitService { if (inventoryList.size() > 0) { inventory = inventoryList.get(0); - paramForInsertSplitInventory.put("iid", inventory.getId()); + // 用于查找该库存对应库位 + Map paramForInventoryToPlace = new HashMap<>(); + paramForInventoryToPlace.put("pid", map.get("placeId")); + paramForInventoryToPlace.put("mid", inventory.getId()); - // 查询当前库存是否有该拆单的处理记录 - splitInventory = splitUnitMapper.findSplitInventoryByIidAndSid(paramForInsertSplitInventory); + placeAndMaterialByMidAndPid = placeMapper.findPlaceAndMaterialByMidAndPid(paramForInventoryToPlace); + if (placeAndMaterialByMidAndPid != null) { + paramForInsertSplitInventory.put("iid", placeAndMaterialByMidAndPid.getId()); + + // 查询当前库存是否有该拆单的处理记录 + splitInventory = splitUnitMapper.findSplitInventoryByIidAndSid(paramForInsertSplitInventory); + } } } @@ -176,12 +195,13 @@ public class SplitUnitServiceImpl implements SplitUnitService { map.put("realQuantity", quantity.toString()); if (splitInfoForUnit.getParentId() != null) { SplitInfo parentSplitInfo = splitUnitMapper.findSplitInfoById(splitInfoForUnit.getParentId()); - updateSplitInfoSaveQuantity(parentSplitInfo, disposeQuantity, inventory.getId(), map, quantity.intValue(),splitInfoForUnit); + updateSplitInfoSaveQuantity(parentSplitInfo, disposeQuantity, placeAndMaterialByMidAndPid.getId(), map, quantity.intValue(), splitInfoForUnit); } else { - Double price = Double.parseDouble((String) map.get("price")); + double price = Double.parseDouble((String) map.get("price")); price = price * findSplitInfoScaleQuantity(splitInfoForUnit, -1); - map.put("price", price.toString()); + map.put("price", Double.toString(price)); depositoryRecordService.applicationInPlace(map); + map.remove("id"); } @@ -198,49 +218,56 @@ public class SplitUnitServiceImpl implements SplitUnitService { map.put("quantity", "0"); } + // 实际入库数量 + map.put("realQuantity", quantity.toString()); + if (disposeQuantity > splitInfoForUnit.getQuantity()) { //如果当前处理数量大于设置的进制数量 - // 实际入库数量 - map.put("realQuantity", quantity.toString()); - if (parentId != null) { // 如果该记录有父级拆单 SplitInfo parentSplitInfo = splitUnitMapper.findSplitInfoById(parentId); - if (inventory != null) { - updateSplitInfoSaveQuantity(parentSplitInfo, ObjectFormatUtil.toInteger(String.valueOf(saveQuantity)), inventory.getId(), map, quantity.intValue(),splitInfoForUnit); + if (placeAndMaterialByMidAndPid != null) { + updateSplitInfoSaveQuantity(parentSplitInfo, ObjectFormatUtil.toInteger(String.valueOf(saveQuantity)), placeAndMaterialByMidAndPid.getId(), map, quantity.intValue(), splitInfoForUnit); } else { - Double price = Double.parseDouble((String) map.get("price")); + double price = Double.parseDouble((String) map.get("price")); price = price * findSplitInfoScaleQuantity(splitInfoForUnit, -1); - map.put("price", price.toString()); + map.put("price", Double.toString(price)); result += depositoryRecordService.applicationInPlace(map); - updateSplitInfoSaveQuantity(parentSplitInfo, ObjectFormatUtil.toInteger(String.valueOf(saveQuantity)), ObjectFormatUtil.toInteger(map.get("newInMid")), map, quantity.intValue(),splitInfoForUnit); + map.remove("id"); + Map paramForInventoryToPlace = new HashMap<>(); + paramForInventoryToPlace.put("mid", map.get("newInMid")); + paramForInventoryToPlace.put("pid", map.get("placeId")); + placeAndMaterialByMidAndPid = placeMapper.findPlaceAndMaterialByMidAndPid(paramForInventoryToPlace); + updateSplitInfoSaveQuantity(parentSplitInfo, ObjectFormatUtil.toInteger(String.valueOf(saveQuantity)), placeAndMaterialByMidAndPid.getId(), map, quantity.intValue(), splitInfoForUnit); } } else { - Double price = Double.parseDouble((String) map.get("price")); + double price = Double.parseDouble((String) map.get("price")); price = price * findSplitInfoScaleQuantity(splitInfoForUnit, -1); - map.put("price", price.toString()); + map.put("price", Double.toString(price)); result += depositoryRecordService.applicationInPlace(map); + map.remove("id"); } - } else { + } + else { // 如果不大于设置的进制数量 paramForInsertSplitInventory.put("inQuantity", quantity); paramForInsertSplitInventory.put("outQuantity", 0); paramForInsertSplitInventory.put("saveQuantity", saveQuantity); - if (inventory != null) { + if (placeAndMaterialByMidAndPid != null) { // 如果有库存记录 - paramForInsertSplitInventory.put("iid", inventory.getId()); + paramForInsertSplitInventory.put("iid", placeAndMaterialByMidAndPid.getId()); } else { // 如果没有库存记录 // 插入一条库存记录 - Double price = Double.parseDouble((String) map.get("price")); + double price = Double.parseDouble((String) map.get("price")); price = price * findSplitInfoScaleQuantity(splitInfoForUnit, -1); - map.put("price", price.toString()); + map.put("price", Double.toString(price)); if (parentId != null) { @@ -248,21 +275,26 @@ public class SplitUnitServiceImpl implements SplitUnitService { // 先插入一条库存记录用于后续操作 map.put("quantity", "0"); - result += depositoryRecordService.applicationInPlace(map); + depositoryRecordService.applicationInPlace(map); + map.remove("id"); } else { // 如果没有父级 - result += depositoryRecordService.applicationInPlace(map); + depositoryRecordService.applicationInPlace(map); + map.remove("id"); } - - paramForInsertSplitInventory.put("iid", map.get("newInMid")); + Map paramForInventoryToPlace = new HashMap<>(); + paramForInventoryToPlace.put("mid", map.get("newInMid")); + paramForInventoryToPlace.put("pid", map.get("placeId")); + placeAndMaterialByMidAndPid = placeMapper.findPlaceAndMaterialByMidAndPid(paramForInventoryToPlace); + paramForInsertSplitInventory.put("iid", placeAndMaterialByMidAndPid.getId()); } - splitUnitMapper.addSplitInventory(paramForInsertSplitInventory); + result += splitUnitMapper.addSplitInventory(paramForInsertSplitInventory); if (parentId != null) { // 获取父级 SplitInfo parentSplitInfo = splitUnitMapper.findSplitInfoById(splitInfoForUnit.getParentId()); - updateSplitInfoSaveQuantity(parentSplitInfo, disposeQuantity, ObjectFormatUtil.toInteger(map.get("newInMid")), map, quantity.intValue(),splitInfoForUnit); + updateSplitInfoSaveQuantity(parentSplitInfo, disposeQuantity, placeAndMaterialByMidAndPid.getId(), map, quantity.intValue(), splitInfoForUnit); } } @@ -277,7 +309,8 @@ public class SplitUnitServiceImpl implements SplitUnitService { /** * 用于计算当前拆单单位与目标拆单单位之间的进率 - * @param splitInfo 待查询拆单记录 + * + * @param splitInfo 待查询拆单记录 * @param parentSplitInfoId 目标拆单单位 * @return */ @@ -310,13 +343,13 @@ public class SplitUnitServiceImpl implements SplitUnitService { * 获取当前拆单与基础拆单之间的库存总额(当前拆单记录为-1是全部库存是使用) * * @param splitInfoId 当前拆单记录Id - * @param inventory 库存记录 + * @param materialAndPlace 库存记录 * @param baseSplitInfoId 基础拆单记录Id * @param saveQuantity 最终返回值 * @param allQuantityFlag 用于标志是否获取全部库存 * @return */ - public int findAllInventoryForSplitInfo(Integer splitInfoId, Inventory inventory, Integer baseSplitInfoId, int saveQuantity, boolean allQuantityFlag) { + public int findAllInventoryForSplitInfo(Integer splitInfoId, MaterialAndPlace materialAndPlace, Integer baseSplitInfoId, int saveQuantity, boolean allQuantityFlag) { if (allQuantityFlag) { // 用于标志是否第一次计算 @@ -327,7 +360,7 @@ public class SplitUnitServiceImpl implements SplitUnitService { // 获取当前基础单位的库存 Map paramForSplitInventory = new HashMap<>(); - paramForSplitInventory.put("iid", inventory.getId()); + paramForSplitInventory.put("iid", materialAndPlace.getId()); // 如果当前获取的为对应基础单位的所有库存 // 如果是第一次计算 @@ -340,57 +373,56 @@ public class SplitUnitServiceImpl implements SplitUnitService { // 当前基础单位的库存 SplitInventory baseSplitInventory = splitUnitMapper.findSplitInventoryByIidAndSid(paramForSplitInventory); - if(baseSplitInventory != null) { + if (baseSplitInventory != null) { saveQuantity += baseSplitInventory.getSaveQuantity(); } } - if(Integer.compare(-1,splitInfoId) != 0){ + if (Integer.compare(-1, splitInfoId) != 0) { flag = true; // 获取当前记录的子记录 SplitInfo splitInfoByParentId = splitUnitMapper.findSplitInfoByParentId(splitInfoId); - paramForSplitInventory.put("sid",splitInfoId); + paramForSplitInventory.put("sid", splitInfoId); SplitInventory splitInventoryByIidAndSid = splitUnitMapper.findSplitInventoryByIidAndSid(paramForSplitInventory); - if(splitInventoryByIidAndSid != null){ + if (splitInventoryByIidAndSid != null) { saveQuantity += splitInventoryByIidAndSid.getSaveQuantity() * splitInfoByParentId.getQuantity(); } } - if(baseSplitInfo.getParentId() != null && !flag){ + if (baseSplitInfo.getParentId() != null && !flag) { // 如果有父级且是第一次 // 获取其父级 SplitInfo parentSplitInfo = splitUnitMapper.findSplitInfoById(baseSplitInfo.getParentId()); - return findAllInventoryForSplitInfo(parentSplitInfo.getId(),inventory,baseSplitInfoId,saveQuantity,allQuantityFlag); - }else{ - if(flag){ + return findAllInventoryForSplitInfo(parentSplitInfo.getId(), materialAndPlace, baseSplitInfoId, saveQuantity, allQuantityFlag); + } else { + if (flag) { // 如果不是第一次 // 获取当前的拆单记录 SplitInfo splitInfo = splitUnitMapper.findSplitInfoById(splitInfoId); - if(splitInfo.getParentId() != null){ + if (splitInfo.getParentId() != null) { SplitInfo parentSplitInfo = splitUnitMapper.findSplitInfoById(splitInfo.getParentId()); - return findAllInventoryForSplitInfo(parentSplitInfo.getId(),inventory,baseSplitInfoId,saveQuantity,allQuantityFlag); - }else{ + return findAllInventoryForSplitInfo(parentSplitInfo.getId(), materialAndPlace, baseSplitInfoId, saveQuantity, allQuantityFlag); + } else { int splitInfoScaleQuantity = findSplitInfoScaleQuantity(baseSplitInfo, -1); - return saveQuantity + inventory.getQuantity() * splitInfoScaleQuantity; + return saveQuantity + materialAndPlace.getQuantity() * splitInfoScaleQuantity; } - }else{ + } else { int splitInfoScaleQuantity = findSplitInfoScaleQuantity(baseSplitInfo, -1); - return saveQuantity + inventory.getQuantity() * splitInfoScaleQuantity; + return saveQuantity + materialAndPlace.getQuantity() * splitInfoScaleQuantity; } } - } - else { + } else { // 如果不是获取所有库存 // 获取当前基础单位 SplitInfo baseSplitInfo = splitUnitMapper.findSplitInfoById(baseSplitInfoId); // 获取当前基础单位的库存 Map paramForSplitInventory = new HashMap<>(); - paramForSplitInventory.put("iid", inventory.getId()); + paramForSplitInventory.put("iid", materialAndPlace.getId()); // 如果当前获取的为对应基础单位的所有库存 if (Integer.compare(saveQuantity, 0) == 0) { @@ -412,9 +444,9 @@ public class SplitUnitServiceImpl implements SplitUnitService { // 获取当前的子类 SplitInfo splitInfoByParentId = splitUnitMapper.findSplitInfoByParentId(splitInfoId); - if (splitInfoByParentId != null && Integer.compare(splitInfoByParentId.getId(),baseSplitInfoId) != 0) { + if (splitInfoByParentId != null && Integer.compare(splitInfoByParentId.getId(), baseSplitInfoId) != 0) { // 如果有子类 - return findAllInventoryForSplitInfo(splitInfoByParentId.getId(), inventory, baseSplitInfoId, saveQuantity, allQuantityFlag); + return findAllInventoryForSplitInfo(splitInfoByParentId.getId(), materialAndPlace, baseSplitInfoId, saveQuantity, allQuantityFlag); } else { // 如果没有 return saveQuantity; @@ -436,7 +468,6 @@ public class SplitUnitServiceImpl implements SplitUnitService { Map param = new HashMap<>(); param.put("iid", Iid); param.put("sid", sid); - return splitUnitMapper.findSplitInventoryByIidAndSid(param); } @@ -458,8 +489,9 @@ public class SplitUnitServiceImpl implements SplitUnitService { * @param quantity 修改数目 * @param map 入库条件 * @param inQuantity 最终入库数量 + * @param baseSplitInfo 基础拆单记录 */ - private void updateSplitInfoSaveQuantity(SplitInfo splitInfo, int quantity, int iid, Map map, int inQuantity,SplitInfo baseSplitInfo) { + public void updateSplitInfoSaveQuantity(SplitInfo splitInfo, int quantity, int iid, Map map, int inQuantity, SplitInfo baseSplitInfo) { // 获取当前拆单记录的父级拆单记录 @@ -476,7 +508,7 @@ public class SplitUnitServiceImpl implements SplitUnitService { int scale = splitInfo.getQuantity(); // 计算处理数量(下取整) - int disposeQuantity = (int) Math.round(Math.floor(quantity / (double)scale)); + int disposeQuantity = (int) Math.round(Math.floor(quantity / (double) scale)); // 最终存储到拆单处理的数量 double saveQuantity = quantity - disposeQuantity * scale; @@ -505,33 +537,34 @@ public class SplitUnitServiceImpl implements SplitUnitService { // 获取具体父级 SplitInfo splitInfoForParent = splitUnitMapper.findSplitInfoById(parentId); - - updateSplitInfoSaveQuantity(splitInfoForParent, disposeQuantity, splitInventory.getIid(), map, inQuantity,baseSplitInfo); + updateSplitInfoSaveQuantity(splitInfoForParent, disposeQuantity, splitInventory.getIid(), map, inQuantity, baseSplitInfo); } else { // 如果为空 - Double price = Double.parseDouble((String) map.get("price")); + double price = Double.parseDouble((String) map.get("price")); price = price * findSplitInfoScaleQuantity(baseSplitInfo, -1); - map.put("price", price.toString()); + map.put("price", Double.toString(price)); map.put("quantity", String.valueOf(disposeQuantity)); map.put("realQuantity", String.valueOf(inQuantity)); - depositoryRecordService.applicationInPlace(map); + map.remove("id"); } } else { // 当前库存拆单记录与新入库的数目不大于预设的进制 - splitInventory.setSaveQuantity(splitInventory.getSaveQuantity() + (int)saveQuantity); - splitInventory.setInQuantity(splitInventory.getInQuantity() + (int)saveQuantity); + splitInventory.setSaveQuantity(splitInventory.getSaveQuantity() + (int) saveQuantity); + splitInventory.setInQuantity(splitInventory.getInQuantity() + (int) saveQuantity); splitUnitMapper.updateSplitInventory(splitInventory); - Double price = Double.parseDouble((String) map.get("price")); + double price = Double.parseDouble( map.get("price").toString()); price = price * findSplitInfoScaleQuantity(baseSplitInfo, -1); - map.put("price", price.toString()); + map.put("price", Double.toString(price)); map.put("quantity", "0"); map.put("realQuantity", String.valueOf(inQuantity)); depositoryRecordService.applicationInPlace(map); + map.remove("id"); } - } else { + } + else { // 如果为空 Map paramForInsertSplitInventory = new HashMap<>(); @@ -539,7 +572,7 @@ public class SplitUnitServiceImpl implements SplitUnitService { paramForInsertSplitInventory.put("sid", splitInfo.getId()); paramForInsertSplitInventory.put("inQuantity", quantity); paramForInsertSplitInventory.put("outQuantity", 0); - paramForInsertSplitInventory.put("iid", map.get("newInMid")); + paramForInsertSplitInventory.put("iid", iid); if (quantity > splitInfo.getQuantity()) { // 如果当前处理数量大于当前设置的进制数量 @@ -556,22 +589,25 @@ public class SplitUnitServiceImpl implements SplitUnitService { // 获取当前拆单记录的父级 SplitInfo parentSplitInfo = splitUnitMapper.findSplitInfoById(parentId); - updateSplitInfoSaveQuantity(parentSplitInfo, quantity_scale, iid, map, inQuantity,baseSplitInfo); + updateSplitInfoSaveQuantity(parentSplitInfo, quantity_scale, iid, map, inQuantity, baseSplitInfo); } else { - Double price = Double.parseDouble((String) map.get("price")); + double price = Double.parseDouble((String) map.get("price")); price = price * findSplitInfoScaleQuantity(baseSplitInfo, -1); - map.put("price", price.toString()); + map.put("price", Double.toString(price)); map.put("quantity", String.valueOf(quantity_scale)); map.put("realQuantity", String.valueOf(inQuantity)); depositoryRecordService.applicationInPlace(map); + map.remove("id"); } } else { // 如果不大于 - paramForInsertSplitInventory.put("saveQuantity", String.valueOf(inQuantity)); + paramForInsertSplitInventory.put("saveQuantity", String.valueOf(quantity)); splitUnitMapper.addSplitInventory(paramForInsertSplitInventory); map.put("quantity", "0"); map.put("realQuantity", String.valueOf(inQuantity)); + map.put("price", map.get("price").toString()); depositoryRecordService.applicationInPlace(map); + map.remove("id"); } } diff --git a/src/main/resources/static/js/application-out/application-out.js b/src/main/resources/static/js/application-out/application-out.js index 93b46b89..1b0189fa 100644 --- a/src/main/resources/static/js/application-out/application-out.js +++ b/src/main/resources/static/js/application-out/application-out.js @@ -1005,6 +1005,7 @@ layui.use(['form', 'step', 'layer', 'jquery', 'element'], function () { var req = {}; req.mcode = mcode; req.quantity = val; + req.placeId = -1; $.ajax({ url: "/material/MaterialQuantityIsTrue", type: "post", diff --git a/src/main/resources/templates/pages/application/application-out.html b/src/main/resources/templates/pages/application/application-out.html index e6307ff5..3698310c 100644 --- a/src/main/resources/templates/pages/application/application-out.html +++ b/src/main/resources/templates/pages/application/application-out.html @@ -1364,6 +1364,7 @@ if (barCode.length > 0) { barCode.empty(); } + if (materialAndBarCodeList.length > 0) { // 如果有对应的条形码 var barCodeInput = barCodeItem.childNodes[1].childNodes[1]; @@ -1391,6 +1392,11 @@ $.each(data.placePList, function (index, item) { $('#place' + idNumber).append(new Option(item.depositoryName + "-" + item.code, item.id));//往下拉菜单里添加元素 }); + $("#unit"+idNumber).empty(); + $("#unit"+idNumber).append(new Option(data.unit,"-1")); + $.each(data.splitInfoList,function (index,item) { + $("#unit"+idNumber).append(new Option(item.newUnit,item.newUnit)); + }); form.render(); materialName.value = data.mname; materialId.value = data.id; @@ -1417,6 +1423,7 @@ req.mcode = mcode; req.quantity = val; req.unit = unit; + req.placeId = -1; $.ajax({ url: "/material/MaterialQuantityIsTrue", type: "post", diff --git a/src/main/resources/templates/pages/application/application-out_back.html b/src/main/resources/templates/pages/application/application-out_back.html index 2205ffed..94d7da91 100644 --- a/src/main/resources/templates/pages/application/application-out_back.html +++ b/src/main/resources/templates/pages/application/application-out_back.html @@ -12,17 +12,24 @@