diff --git a/src/main/java/com/dreamchaser/depository_manage/controller/DepositoryController.java b/src/main/java/com/dreamchaser/depository_manage/controller/DepositoryController.java index a03bf6eb..00e97eae 100644 --- a/src/main/java/com/dreamchaser/depository_manage/controller/DepositoryController.java +++ b/src/main/java/com/dreamchaser/depository_manage/controller/DepositoryController.java @@ -1554,12 +1554,14 @@ public class DepositoryController { public RestResponse FindManagerByDid(@RequestParam("did") Integer did, HttpServletRequest request) { UserByPort userToken = (UserByPort) request.getAttribute("userToken"); List userIdByDid = roleService.findUserIdByDid(did); - List userByPortList = new ArrayList<>(); - for (int i = 0; i < userIdByDid.size(); i++) { - UserByPort userByPort = LinkInterfaceUtil.FindUserById(userIdByDid.get(i), userToken); - userByPortList.add(userByPort); - } - return new RestResponse(userByPortList, userByPortList.size(), 200); + List list = new ArrayList<>(); + for (Integer integer : userIdByDid) { + UserByPort userByPort = LinkInterfaceUtil.FindUserById(integer, userToken); + UserByPortP user = new UserByPortP(userByPort); + list.add(user); + } + int size = list.size(); + return new RestResponse(list,size,200); } 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 89435cf5..d491565a 100644 --- a/src/main/java/com/dreamchaser/depository_manage/controller/DepositoryRecordController.java +++ b/src/main/java/com/dreamchaser/depository_manage/controller/DepositoryRecordController.java @@ -306,6 +306,7 @@ public class DepositoryRecordController { } // 出库申请 + @Transactional(rollbackFor = Exception.class) @PostMapping("/applicationOut") public RestResponse insertApplicationOutRecord(@RequestBody Map map, HttpServletRequest request) { UserByPort userToken = (UserByPort) request.getAttribute("userToken"); @@ -333,12 +334,8 @@ public class DepositoryRecordController { map.remove("id"); map.put("parentId", id); } - String unit = (String) map.get("unit"); - if(!"-1".equals(unit)){ - integer += splitUnitService.addSplitInventory(map); - }else { - integer += depositoryRecordService.insertApplicationOutMin(map); - } + integer += depositoryRecordService.insertApplicationOutMin(map); + // 开启一个线程执行发送信息操作 /*new Thread(new Runnable() { @Override @@ -357,7 +354,7 @@ public class DepositoryRecordController { } }).start();*/ - // 开启一个线程开启审批 + /*// 开启一个线程开启审批 new Thread(new Runnable() { @Override public void run() { @@ -370,7 +367,7 @@ public class DepositoryRecordController { // 设置过期为7天 redisTemplateForHash.expire(sp_no, 7, TimeUnit.DAYS); } - }).start(); + }).start();*/ } } else { @@ -526,8 +523,14 @@ public class DepositoryRecordController { SimpleApplicationOutMinRecordP simpleApplicationOutMinRecordP = new SimpleApplicationOutMinRecordP(applicationOutMinById); // 设置展示时的数量为申请数-已出库数 simpleApplicationOutMinRecordP.setQuantity(applicationOutMinById.getQuantity() - applicationOutMinById.getTrueOut()); + // 获取申请的物料信息 Inventory materialById = materialService.findInventoryById(applicationOutMinById.getMid()); + if("-1".equals(applicationOutMinById.getUnit())) { + simpleApplicationOutMinRecordP.setShowQuantity(materialById.getUnit() + ":" + (applicationOutMinById.getQuantity() - applicationOutMinById.getTrueOut())); + }else{ + simpleApplicationOutMinRecordP.setShowQuantity(applicationOutMinById.getUnit() + ":" + (applicationOutMinById.getQuantity() - applicationOutMinById.getTrueOut())); + } // 获取当前物料所存在的库位 List placeByMidAndDid = placeService.findPlaceByMidAndDid(materialById.getId(), applicationOutMinById.getDepositoryId()); // 获取库位编码 @@ -893,6 +896,11 @@ public class DepositoryRecordController { ap.setPrice(materialById.getPrice()); ap.setApplicant(userToken.getId()); ap.setQuantity(1.0); + ap.setUnit(materialById.getUnit()); + + + List splitInfoByMid = splitUnitService.findSplitInfoByMid(materialById.getMid()); + ap.setSplitInfoList(splitInfoByMid); list.add(ap); } return new RestResponse(list, ObjectFormatUtil.toInteger(size), 200); 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 73a90773..bee0b0ea 100644 --- a/src/main/java/com/dreamchaser/depository_manage/controller/MaterialController.java +++ b/src/main/java/com/dreamchaser/depository_manage/controller/MaterialController.java @@ -247,11 +247,9 @@ public class MaterialController { String depositoryId = (String) map.get("depositoryId"); String placeId = (String) map.get("placeId"); list = materialService.InitTreeMenus(mname, depositoryId, placeId); - }else if("4".equals(type)){ - list = materialService.InitTreeMenus_Test(); }*/ if (!"".equals(mname)) { - list = materialService.InitTreeForSelectName(mname.split(",")[0]); + list = materialService.InitTreeForSelectName(mname.split(",")[0], type); } else { list = materialService.InitTreeMenus_Test(); } @@ -274,13 +272,20 @@ public class MaterialController { * @return */ @GetMapping("/findMatrialById") - public RestResponse findMatrialById(@RequestParam(value = "mid", required = false) String mid, HttpServletRequest request) { + public RestResponse findMatrialById(@RequestParam(value = "mid", required = false) String mid, @RequestParam(value = "type", required = false) String type, HttpServletRequest request) { UserByPort userToken = (UserByPort) request.getAttribute("userToken"); if ("".equals(mid)) { return new RestResponse("", 0, 200); } Map map = new HashMap<>(); + Material materialById = materialService.findMaterialById(ObjectFormatUtil.toInteger(mid)); + String mcode = materialById.getCode(); + + if ("out".equals(type)) { + Inventory inventoryById = materialService.findInventoryById(ObjectFormatUtil.toInteger(mid)); + mcode = inventoryById.getCode(); + } List placePList = new ArrayList<>(); List depositoryByAdminorg = depositoryService.findDepositoryByAdminorg(userToken.getMaindeparment().toString()); for (int i = 0; i < depositoryByAdminorg.size(); i++) { @@ -288,10 +293,10 @@ public class MaterialController { placePList.addAll(placeByMidAndDid); } Map param = new HashMap<>(); - param.put("mcode", materialById.getCode()); + param.put("mcode", mcode); List inventory = materialService.findInventory(param); Map paramByBarcode = new HashMap<>(); - paramByBarcode.put("mcode", materialById.getCode()); + paramByBarcode.put("mcode", mcode); List materialByBarCodeByCondition = materialService.findMaterialByBarCodeByCondition(paramByBarcode); if (inventory.size() > 0) { InventoryP materialP = inventory.get(0); @@ -447,6 +452,14 @@ public class MaterialController { @PostMapping("/findInventoryByCondition") public RestResponse findInventoryByCondition(@RequestBody Map map) { List materialPByCondition = materialService.findInventory(map); + Map paramByBarcode = new HashMap<>(); + for (InventoryP inventoryP : materialPByCondition) { + List splitInfoByMid = splitUnitService.findSplitInfoByMid(inventoryP.getMid()); + inventoryP.setSplitInfoList(splitInfoByMid); + paramByBarcode.put("mcode", inventoryP.getCode()); + List materialByBarCodeByCondition = materialService.findMaterialByBarCodeByCondition(paramByBarcode); + inventoryP.setMaterialAndBarCodeList(materialByBarCodeByCondition); + } return new RestResponse(materialPByCondition, materialService.findInventoryCount(map), 200); } @@ -565,23 +578,56 @@ public class MaterialController { UserByPort userByPort = (UserByPort) request.getAttribute("userToken"); // 当前出库数量 Integer quantity = ObjectFormatUtil.toInteger(map.get("quantity")); + // 当前出库单位 + String unit = (String) map.get("unit"); + map.remove("unit"); // 标志变量,用于标识当前数量是否合适 - Boolean flag = false; + boolean flag = false; map.remove("quantity"); // 获取当前用户所在部门关闭的仓库及公共仓库 List depositoryByAdminorg = depositoryService.findDepositoryByAdminorg(userByPort.getMaindeparment().toString()); - for (int i = 0; i < depositoryByAdminorg.size(); i++) { - map.put("depositoryId", depositoryByAdminorg.get(i).getId()); - List inventory = materialService.findInventory(map); - if (inventory.size() > 0) { // 如果有库存 - for (int j = 0; j < inventory.size(); j++) { - InventoryP materialP = inventory.get(j); - if (quantity <= materialP.getQuantity()) { // 如果当前数量合适则跳出循环 - flag = true; - break; + 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) { + // 获取对应拆单库存处理记录 + SplitInventory splitInventory = splitUnitService.findSplitInventoryByIid(inventoryP.getId()); + if(splitInventory != null) { + // 如果存在 + + // 获取对应拆单记录 + SplitInfo splitInfoById = splitUnitService.findSplitInfoById(splitInventory.getSid()); + // 获取当前所有拆单单位 + int saveQuantity = splitInventory.getSaveQuantity() + inventoryP.getQuantity() * splitInfoById.getQuantity(); + if (quantity <= saveQuantity) { // 如果当前数量合适则跳出循环 + flag = true; + break; + } + }else{ + // 如果不存在 + Map paramForSplitInfo = new HashMap<>(); + paramForSplitInfo.put("mid",inventoryP.getMid()); + paramForSplitInfo.put("newUnit",unit); + SplitInfo splitInfo = splitUnitService.findSplitInfoByMidAndUnit(paramForSplitInfo); + int saveQuantity = inventoryP.getQuantity() * splitInfo.getQuantity(); + if(quantity <= saveQuantity){ + flag = true; + break; + } + } } } - } } return new RestResponse(flag); @@ -771,6 +817,9 @@ public class MaterialController { mp.setPlacePList(placePList); // 设置物料与条形码的对应关系 mp.setMaterialAndBarCodeList(materialByBarCodeByCondition); + // 获取拆单信息 + List splitInfoByMid = splitUnitService.findSplitInfoByMid(mp.getMid()); + mp.setSplitInfoList(splitInfoByMid); } return new RestResponse(mp); @@ -1084,18 +1133,20 @@ public class MaterialController { Boolean isExist = false; Map param = new HashMap<>(); param.put("depositoryId", depositoryByAdminorg.get(j).getId()); - param.put("mcode", materialByBarCode.getMcode()); + param.put("mid", materialByBarCode.getMid()); List inventory = materialService.findInventory(param); if (inventory.size() > 0) { // 如果存在该物料 - InventoryP materialP = inventory.get(0); - List placeByMidAndDid = placeService.findPlaceByMidAndDid(materialP.getId(), depositoryByAdminorg.get(j).getId()); - materialByBarCode.setMid(materialP.getId()); + InventoryP inventoryP = inventory.get(0); + List placeByMidAndDid = placeService.findPlaceByMidAndDid(inventoryP.getId(), depositoryByAdminorg.get(j).getId()); + materialByBarCode.setIid(inventoryP.getId()); placePList.addAll(placeByMidAndDid); isExist = true; } if (isExist) { + List splitInfoByMid = splitUnitService.findSplitInfoByMid(materialByBarCode.getMid()); + materialByBarCode.setSplitInfoList(splitInfoByMid); return new RestResponse(materialByBarCode); } } 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 d1379aca..6a535fb8 100644 --- a/src/main/java/com/dreamchaser/depository_manage/controller/PageController.java +++ b/src/main/java/com/dreamchaser/depository_manage/controller/PageController.java @@ -674,6 +674,8 @@ public class PageController { if (materialById.getShelfLife() == null) { mv.addObject("display", "none"); } + List splitInfoByMid = splitUnitService.findSplitInfoByMid(materialById.getMid()); + materialById.setSplitInfoList(splitInfoByMid); mv.addObject("materialById", materialById); mv.addObject("depository", depositoryRecordById); mv.setViewName("pages/application/application-in_back"); @@ -1224,6 +1226,8 @@ public class PageController { Integer sumQuantity = 0; // 当前总额 Double sumPrice = 0.0; + // 计量单位 + StringBuffer sumUnit = new StringBuffer(); for (int i = 0; i < applicationOutRecordMinByParent.size(); i++) { // 获取子订单信息 ApplicationOutRecordMin applicationOutRecordMin = applicationOutRecordMinByParent.get(i); @@ -1241,6 +1245,12 @@ public class PageController { depositoryName.append(depository.getDname()).append(","); sumQuantity += applicationOutRecordMin.getQuantity(); sumPrice += (materialById.getPrice()); + String unit = applicationOutRecordMin.getUnit(); + if("-1".equals(unit)){ + sumUnit.append(materialById.getUnit()+","); + }else{ + sumUnit.append(unit+","); + } } // 申请人 UserByPort userByPort = LinkInterfaceUtil.FindUserById(recordP.getApplicantId(), userToken); @@ -1271,6 +1281,7 @@ public class PageController { Place placeById = placeService.findPlaceById(recordP.getPlaceId()); recordP.setPCode(placeById.getCode()); } + recordP.setApplicantTime(DateUtil.TimeStampToDateTime(Long.valueOf(recordP.getApplicantTime()))); recordP.setDepartmentheadTime(DateUtil.TimeStampToDateTime(Long.valueOf(recordP.getDepartmentheadTime()))); recordP.setDepositoryManagerName(depositoryManagerNames); @@ -1281,6 +1292,7 @@ public class PageController { recordP.setDepositoryName(depositoryName.toString()); recordP.setQuantity(sumQuantity); recordP.setPrice(sumPrice); + recordP.setUnit(sumUnit.toString()); mv.addObject("record", recordP); return mv; } diff --git a/src/main/java/com/dreamchaser/depository_manage/entity/Inventory.java b/src/main/java/com/dreamchaser/depository_manage/entity/Inventory.java index b3146712..5136630d 100644 --- a/src/main/java/com/dreamchaser/depository_manage/entity/Inventory.java +++ b/src/main/java/com/dreamchaser/depository_manage/entity/Inventory.java @@ -145,4 +145,9 @@ public class Inventory { * 保质期 */ private String showShelfLife; + + /** + * 该物料对应的拆单记录 + */ + private List splitInfoList; } diff --git a/src/main/java/com/dreamchaser/depository_manage/mapper/DepositoryRecordMapper.xml b/src/main/java/com/dreamchaser/depository_manage/mapper/DepositoryRecordMapper.xml index ef08dc16..48d4825d 100644 --- a/src/main/java/com/dreamchaser/depository_manage/mapper/DepositoryRecordMapper.xml +++ b/src/main/java/com/dreamchaser/depository_manage/mapper/DepositoryRecordMapper.xml @@ -92,6 +92,7 @@ + @@ -141,7 +142,7 @@ aorid,mid,mname,depositoryId,dname,applicantId,applicantTime,applyRemark,aorcode,aorpirce,aorquantity,departmenthead,departmentheadPass,departmentHeadTime,departmentheadMessage, - depositoryManager,depositoryManagerPass,depositoryManagerTime,depositoryManagerMessage,aorstate,istransfer,mcode,placeId,pass + depositoryManager,depositoryManagerPass,depositoryManagerTime,depositoryManagerMessage,aorstate,istransfer,mcode,placeId,pass,aormUnit diff --git a/src/main/java/com/dreamchaser/depository_manage/mapper/MaterialMapper.java b/src/main/java/com/dreamchaser/depository_manage/mapper/MaterialMapper.java index 0e2a2a47..837cfdb6 100644 --- a/src/main/java/com/dreamchaser/depository_manage/mapper/MaterialMapper.java +++ b/src/main/java/com/dreamchaser/depository_manage/mapper/MaterialMapper.java @@ -167,10 +167,10 @@ public interface MaterialMapper { /** * 根据库存id查询库存信息 - * @param mid 库存id + * @param id 库存id * @return 库存信息 */ - Inventory findInventoryById(int mid); + Inventory findInventoryById(int id); /** * 根据物料id获取对应库存信息 @@ -318,6 +318,14 @@ public interface MaterialMapper { */ List findMaterialByTypeIdsAndMname(Map map); + + /** + * 批量查询当前类型下包含该名称的物料 + * @param map 待查询数据 + * @return + */ + List findInventoryByTypeIdsAndMname(Map map); + /** * 添加当前批次下的物料与生产日期对应 * @param map diff --git a/src/main/java/com/dreamchaser/depository_manage/mapper/MaterialMapper.xml b/src/main/java/com/dreamchaser/depository_manage/mapper/MaterialMapper.xml index dd09a9e6..1e6bd548 100644 --- a/src/main/java/com/dreamchaser/depository_manage/mapper/MaterialMapper.xml +++ b/src/main/java/com/dreamchaser/depository_manage/mapper/MaterialMapper.xml @@ -658,6 +658,21 @@ + + + diff --git a/src/main/java/com/dreamchaser/depository_manage/mapper/SplitUnitMapper.java b/src/main/java/com/dreamchaser/depository_manage/mapper/SplitUnitMapper.java index 8a730469..2b578520 100644 --- a/src/main/java/com/dreamchaser/depository_manage/mapper/SplitUnitMapper.java +++ b/src/main/java/com/dreamchaser/depository_manage/mapper/SplitUnitMapper.java @@ -144,5 +144,13 @@ public interface SplitUnitMapper { List findSplitInfoByMid(Integer mid); + /** + * 根据库存id获取对应的拆单库存处理记录 + * @param Iid 待查询库存id + * @return + */ + SplitInventory findSplitInventoryByIid(Integer Iid); + + } 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 d1435c6f..1c8e8bf4 100644 --- a/src/main/java/com/dreamchaser/depository_manage/mapper/SplitUnitMapper.xml +++ b/src/main/java/com/dreamchaser/depository_manage/mapper/SplitUnitMapper.xml @@ -110,6 +110,12 @@ where si.sid = #{sid} + update `split` diff --git a/src/main/java/com/dreamchaser/depository_manage/pojo/ApplicationModel.java b/src/main/java/com/dreamchaser/depository_manage/pojo/ApplicationModel.java index 7012088b..c3bcd517 100644 --- a/src/main/java/com/dreamchaser/depository_manage/pojo/ApplicationModel.java +++ b/src/main/java/com/dreamchaser/depository_manage/pojo/ApplicationModel.java @@ -1,8 +1,10 @@ package com.dreamchaser.depository_manage.pojo; +import com.dreamchaser.depository_manage.entity.SplitInfo; import lombok.Data; import java.math.BigInteger; +import java.util.List; /** * 出去库申请模板 @@ -64,4 +66,15 @@ public class ApplicationModel { * 库位编码 */ private String placeCode; + + /** + * 计量单位 + */ + private String unit; + + + /** + * 该物料对应的拆单记录 + */ + private List splitInfoList; } diff --git a/src/main/java/com/dreamchaser/depository_manage/pojo/ApplicationOutRecordP.java b/src/main/java/com/dreamchaser/depository_manage/pojo/ApplicationOutRecordP.java index 88cdb5a1..28ac379e 100644 --- a/src/main/java/com/dreamchaser/depository_manage/pojo/ApplicationOutRecordP.java +++ b/src/main/java/com/dreamchaser/depository_manage/pojo/ApplicationOutRecordP.java @@ -144,4 +144,9 @@ public class ApplicationOutRecordP { * 订单状态 */ private Integer pass; + + /** + * 出库单位 + */ + private String unit; } diff --git a/src/main/java/com/dreamchaser/depository_manage/pojo/InventoryP.java b/src/main/java/com/dreamchaser/depository_manage/pojo/InventoryP.java index bd4189bb..4146b49a 100644 --- a/src/main/java/com/dreamchaser/depository_manage/pojo/InventoryP.java +++ b/src/main/java/com/dreamchaser/depository_manage/pojo/InventoryP.java @@ -172,6 +172,11 @@ public class InventoryP { */ private List splitInfoList; + /** + * 用于展示的数量 + */ + private String showQuantity; + diff --git a/src/main/java/com/dreamchaser/depository_manage/pojo/SimpleApplicationOutMinRecordP.java b/src/main/java/com/dreamchaser/depository_manage/pojo/SimpleApplicationOutMinRecordP.java index d19f01bb..953ad14b 100644 --- a/src/main/java/com/dreamchaser/depository_manage/pojo/SimpleApplicationOutMinRecordP.java +++ b/src/main/java/com/dreamchaser/depository_manage/pojo/SimpleApplicationOutMinRecordP.java @@ -82,6 +82,11 @@ public class SimpleApplicationOutMinRecordP { */ private Integer trueOut; + /** + * 用于展示的数量 + */ + private String showQuantity; + public SimpleApplicationOutMinRecordP(ApplicationOutRecordMin applicationOutRecordMin) { this.id = applicationOutRecordMin.getId(); this.parentId = applicationOutRecordMin.getParentId(); diff --git a/src/main/java/com/dreamchaser/depository_manage/service/MaterialService.java b/src/main/java/com/dreamchaser/depository_manage/service/MaterialService.java index 3b1a50a0..4a0c00dc 100644 --- a/src/main/java/com/dreamchaser/depository_manage/service/MaterialService.java +++ b/src/main/java/com/dreamchaser/depository_manage/service/MaterialService.java @@ -356,5 +356,5 @@ public interface MaterialService { * @param mname 物料名称 * @return */ - List InitTreeForSelectName(String mname); + List InitTreeForSelectName(String mname,String type); } 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 7739c838..51a689aa 100644 --- a/src/main/java/com/dreamchaser/depository_manage/service/SplitUnitService.java +++ b/src/main/java/com/dreamchaser/depository_manage/service/SplitUnitService.java @@ -91,4 +91,12 @@ public interface SplitUnitService { * @return */ SplitInfo findSplitInfoByMidAndUnit(Map map); + + + /** + * 根据库存id获取对应拆单库存处理记录 + * @param Iid 待查询库存id + * @return + */ + SplitInventory findSplitInventoryByIid(Integer Iid); } 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 a9449823..ef4abf6b 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 @@ -58,6 +58,9 @@ public class DepositoryRecordServiceImpl implements DepositoryRecordService { @Autowired private MaterialTypeMapper materialTypeMapper; + @Autowired + private SplitUnitMapper splitUnitMapper; + /** * 提交申请,插入一条仓库调度记录 @@ -764,248 +767,551 @@ public class DepositoryRecordServiceImpl implements DepositoryRecordService { // 获取要出库的数量 Integer trueOut = ObjectFormatUtil.toInteger(param.get("trueOut")); - // 获取出库库位 Integer placeId = ObjectFormatUtil.toInteger(param.get("placeId")); - if (istransfer == 1) {// 如果是库存转移 - // 获取库存转移订单 - TransferRecord transferRecordById = transferRecordMapper.findTransferRecordById(applicationOutMinById.getTransferId()); - placeId = transferRecordById.getFromPlaceId();// 获取转出库位 - } + + // 获取出库申请时的单位 + String unit = applicationOutMinById.getUnit(); MaterialAndPlace placeAndMaterialByMidAndPid = null; - if (placeId != 0) { // 如果不是默认库位 - Map params = new HashMap<>(); - params.put("mid", inventory.getId()); - params.put("pid", placeId); - // 获取当前物料所存放库位的数量 - placeAndMaterialByMidAndPid = placeMapper.findPlaceAndMaterialByMidAndPid(params); - if (placeAndMaterialByMidAndPid != null) { - // 如果当前库位存在该物料 - if (placeAndMaterialByMidAndPid.getQuantity() < trueOut) { - // 如果当前库位数量不足 - flag = false; + if("-1".equals(unit)) { + + // 如果是按基础单位出库 + + if (istransfer == 1) {// 如果是库存转移 + // 获取库存转移订单 + TransferRecord transferRecordById = transferRecordMapper.findTransferRecordById(applicationOutMinById.getTransferId()); + placeId = transferRecordById.getFromPlaceId();// 获取转出库位 + } + + if (placeId != 0) { // 如果不是默认库位 + Map params = new HashMap<>(); + params.put("mid", inventory.getId()); + params.put("pid", placeId); + // 获取当前物料所存放库位的数量 + placeAndMaterialByMidAndPid = placeMapper.findPlaceAndMaterialByMidAndPid(params); + if (placeAndMaterialByMidAndPid != null) { + // 如果当前库位存在该物料 + if (placeAndMaterialByMidAndPid.getQuantity() < trueOut) { + // 如果当前库位数量不足 + flag = false; + } + } else { + restResponse.setStatus(566); + restResponse.setData(""); + restResponse.setStatusInfo(new StatusInfo("出库失败", "当前位置未发现该物料")); + return restResponse; } - } else { - restResponse.setStatus(566); - restResponse.setData(""); - restResponse.setStatusInfo(new StatusInfo("出库失败", "当前位置未发现该物料")); - return restResponse; } - } else { // 如果是默认库位 - Map params = new HashMap<>(); - params.put("mid", inventory.getId()); - params.put("pid", 0); - // 获取当前物料在默认库位中的数量 - placeAndMaterialByMidAndPid = placeMapper.findPlaceAndMaterialByMidAndPid(params); - if (placeAndMaterialByMidAndPid != null) { - // 如果当前库位存在该物料 - if (placeAndMaterialByMidAndPid.getQuantity() < trueOut) { - // 如果当前库位数量不足 - flag = false; + else { // 如果是默认库位 + Map params = new HashMap<>(); + params.put("mid", inventory.getId()); + params.put("pid", 0); + // 获取当前物料在默认库位中的数量 + placeAndMaterialByMidAndPid = placeMapper.findPlaceAndMaterialByMidAndPid(params); + if (placeAndMaterialByMidAndPid != null) { + // 如果当前库位存在该物料 + if (placeAndMaterialByMidAndPid.getQuantity() < trueOut) { + // 如果当前库位数量不足 + flag = false; + } + } else { + restResponse.setStatus(566); + restResponse.setData(""); + restResponse.setStatusInfo(new StatusInfo("出库失败", "当前位置未发现该物料")); + return restResponse; } - } else { - restResponse.setStatus(566); - restResponse.setData(""); - restResponse.setStatusInfo(new StatusInfo("出库失败", "当前位置未发现该物料")); - return restResponse; } - } + // 如果物料数量可以出库并且库位数量充足 + if (inventory.getQuantity() >= trueOut && flag) { + // 当前出库金额 + Double sum = inventory.getPrice() * trueOut; + // 当前出库数量 + Integer quantity = trueOut; + + inventory.setAmounts(inventory.getAmounts() - sum); + inventory.setQuantity(inventory.getQuantity() - quantity); + inventory.setNumberOfTemporary(inventory.getNumberOfTemporary() - quantity); + // 修改物料信息 + materialMapper.updateInventory(inventory); - // 如果物料数量可以出库并且库位数量充足 - if (inventory.getQuantity() >= trueOut && flag) { - // 当前出库金额 - Double sum = inventory.getPrice() * trueOut; - // 当前出库数量 - Integer quantity = trueOut; - inventory.setAmounts(inventory.getAmounts() - sum); - inventory.setQuantity(inventory.getQuantity() - quantity); - inventory.setNumberOfTemporary(inventory.getNumberOfTemporary() - quantity); - // 修改物料信息 - materialMapper.updateInventory(inventory); - if (placeAndMaterialByMidAndPid != null) { //如果库位不为空 // 修改当前库位存放物料的数量 placeAndMaterialByMidAndPid.setQuantity(placeAndMaterialByMidAndPid.getQuantity() - quantity); placeMapper.updateMaterialAndPlace(placeAndMaterialByMidAndPid); - } - // 修改库位数量 - Place placeById = placeMapper.findPlaceById(placeId); - placeById.setQuantity(placeById.getQuantity() - quantity); - placeMapper.UpdatePlace(placeById); + // 修改库位数量 + Place placeById = placeMapper.findPlaceById(placeId); + placeById.setQuantity(placeById.getQuantity() - quantity); + placeMapper.UpdatePlace(placeById); - String redisMinRecordKey = "minRecord:" + id; // 设置redis中子订单键值 - // 修改redis中本子订单状态 -// redisTemplate.opsForHash().put(redisMinRecordKey,"state","2"); - // 修改redis中本子订单完成人 -// redisTemplate.opsForHash().put(redisMinRecordKey,"manager",userByPort.getId().toString()); - // 修改当前已经出库的数量 - applicationOutMinById.setTrueOut(trueOut + applicationOutMinById.getTrueOut()); - if (applicationOutMinById.getQuantity() - applicationOutMinById.getTrueOut() > 0) { - // 如果当前子订单中的物料并未完全出库 - depositoryRecordMapper.updateApplicationOutRecordMin(applicationOutMinById); - } else { - // 如果完成出库 - - // 获取当前订单中所有管理员 - String manager = (String) redisTemplate.opsForHash().get(redisMinRecordKey, "manager"); - String[] managerSplit = new String[0]; - if (manager != null) { - // 获取其他管理员 - managerSplit = manager.replace(userByPort.getId() + ",", "").split(","); - if (managerSplit.length == 0) { - managerSplit = new String[0]; - } + + // 如果是库存转移订单 + Map map = new HashMap<>(); + if (record.getIstransfer() == 1) { + map.put("quantity", trueOut.toString()); + map.put("applicantId", record.getApplicantId()); + map.put("minRecordId", applicationOutMinById.getId()); // 出库订单编号 + transferMaterial(map); } - for (int i = 0; i < managerSplit.length; i++) { - // 删除其他管理员的订单记录 - String otherManager = "user:" + managerSplit[i]; - String minRecord = (String) redisTemplate.opsForHash().get(otherManager, "minRecord"); - // 删除其他管理员中当前已完成的订单 - if (minRecord == null) { - continue; + restResponse.setStatus(200); + restResponse.setData(""); + restResponse.setStatusInfo(new StatusInfo("出库成功", "出库成功")); + + // 进行子订单的相关处理 + updateApplicationMinOutInfo(id,applicationOutMinById,record,trueOut,userByPort,placeId,userAgent); + + // 更新入库批次中的物料数量 + new Thread(new Runnable() { + @Override + public void run() { + // 获取出库物料id + Integer mid = inventory.getId(); + // 获取当前物料对应的生产日期 + List materialAndProducedDateByMid = materialMapper.findMaterialAndProducedDateByMid(mid); + if (materialAndProducedDateByMid.size() > 0) { + // 获取距今生产日期远的(即生产日期最早的) + for (MaterialAndProducedDate materialAndProducedDate : + materialAndProducedDateByMid) { + if (materialAndProducedDate.getInventory() > quantity) { + // 设置使用的数量 + materialAndProducedDate.setExpendnum(materialAndProducedDate.getExpendnum() + quantity); + // 设置剩余的数量 + materialAndProducedDate.setInventory(materialAndProducedDate.getInventory() - quantity); + materialMapper.updateMaterialAndProducedDate(materialAndProducedDate); + // 跳出循环 + break; + } + } + } } - minRecord = minRecord.replace(redisMinRecordKey + ",", ""); - if (minRecord.length() == 2) { - // [] - // 如果当前用户已经没有剩余订单,则删除 - redisTemplate.delete(otherManager); + }).start(); + } + else { + restResponse.setStatus(508); + restResponse.setData(""); + restResponse.setStatusInfo(new StatusInfo("出库失败", "出库失败,库存不足")); + } + } + else{ + // 如果是拆单后的单位 + + // 获取拆单库存处理记录 + SplitInventory splitInventory = splitUnitMapper.findSplitInventoryByIid(inventory.getId()); + if(splitInventory != null) { + // 如果拆单库存处理记录存在 + + if (splitInventory.getSaveQuantity() >= trueOut) { + // 如果当前待处理树可以满足需求 + splitInventory.setSaveQuantity(splitInventory.getSaveQuantity() - trueOut); + if (splitInventory.getOutQuantity() != null) { + splitInventory.setOutQuantity(splitInventory.getOutQuantity() + trueOut); } else { - redisTemplate.opsForHash().put(otherManager, "minRecord", minRecord); + splitInventory.setOutQuantity(trueOut); } - } - // 删除已完成的订单 - redisTemplate.delete(redisMinRecordKey); - // 获取该用户在redis中的订单记录 - String key = "user:" + userByPort.getId().toString(); - // 获取当前用户所有订单 - String minRecord = (String) redisTemplate.opsForHash().get(key, "minRecord"); - // 删除用户中当前已完成的订单 - minRecord = minRecord.replace(redisMinRecordKey + ",", ""); - if (minRecord.length() == 2) { - // [] - // 如果当前用户已经没有剩余订单,则删除 - redisTemplate.delete("user:" + userByPort.getId()); + + splitUnitMapper.updateSplitInventory(splitInventory); + + // 进行子订单的相关处理 + updateApplicationMinOutInfo(id, applicationOutMinById, record, trueOut, userByPort, placeId, userAgent); + + + restResponse.setStatus(200); + restResponse.setData(""); + restResponse.setStatusInfo(new StatusInfo("出库成功", "出库成功")); + + } else { - redisTemplate.opsForHash().put(key, "minRecord", minRecord); - } - // 获取出库仓库信息 - Depository depositoryRecordById = depositoryMapper.findDepositoryById(applicationOutMinById.getDepositoryId()); - // 设置子订单新编码 - // 获取主订单单号 - StringBuilder code = new StringBuilder(record.getCode()); - // 获取申请用户信息 - UserByPort applicantUser = LinkInterfaceUtil.FindUserById(record.getApplicantId(), userByPort); - // 获取申请用户行政组织 - Administration company = LinkInterfaceUtil.getCompany(applicantUser.getMaindeparment(), userByPort); - // 获取部门名称简写 - String conpanyName = WordUtil.getPinYinHeadChar(company.getName()); - // 获取仓库名称简写 - String depositoryName = WordUtil.getPinYinHeadChar(depositoryRecordById.getDname()); - // 获取部门名称在单号的起始位置 - int index = code.indexOf(conpanyName); - // 生产新子订单编号 - String newCode = code.replace(index, index + conpanyName.length(), depositoryName).toString(); - - // 设置新编码 - applicationOutMinById.setCode(newCode); - // 设置完成人 - applicationOutMinById.setCheckId(userByPort.getId()); - // 设置新库位 - applicationOutMinById.setPlaceId(placeId); - - // 修改子订单 - depositoryRecordMapper.updateApplicationOutRecordMin(applicationOutMinById); - - String redisMainRecordKey = "record:" + record.getId(); // 设置redis中主订单键值 - // 获取redis中主订单的所有子订单 - String minRecordList = (String) redisTemplate.opsForHash().get(redisMainRecordKey, "minRecord"); - // 获取所有子订单键值 - String[] split = minRecordList.replace("[", "").replace("]", "").split(","); - int pass = 1; // 设置主订单最终状态 - for (int i = 0; i < split.length; i++) { - // 获取所有子订单状态 - String state = (String) redisTemplate.opsForHash().get(split[i], "state"); - if ("1".equals(state)) { - // 如果有子订单未完成 - pass = 3; // 设置主订单状态为处理中 - break; + // 如果不能满足需求 + + // 获取对应的拆单记录 + SplitInfo splitInfo = splitUnitMapper.findSplitInfoById(splitInventory.getSid()); + + // 获取剩余不足的数量 + int surplus = trueOut - splitInventory.getSaveQuantity(); + if (surplus < splitInfo.getQuantity()) { + // 如果剩余不足的数量小于拆单单位对应的数量 + + Map params = new HashMap<>(); + params.put("mid", inventory.getId()); + params.put("pid", placeId); + + // 获取当前物料在库位中的数量 + placeAndMaterialByMidAndPid = placeMapper.findPlaceAndMaterialByMidAndPid(params); + + if (placeAndMaterialByMidAndPid != null) { + // 如果当前库位存在该物料 + if (placeAndMaterialByMidAndPid.getQuantity() < 1) { + // 如果当前库存中的物料库存不足以出库 + flag = false; + } + } else { + restResponse.setStatus(566); + restResponse.setData(""); + restResponse.setStatusInfo(new StatusInfo("出库失败", "当前位置未发现该物料")); + return restResponse; + } + + // 如果物料数量可以出库并且库位数量充足 + if (inventory.getQuantity() >= 1 && flag) { + + // 令库存-1 + inventory.setQuantity(inventory.getQuantity() - 1); + + // 重新计算总额 + inventory.setAmounts(inventory.getQuantity() * inventory.getPrice()); + + // 重新计算单价 + BigDecimal decimal = new BigDecimal(inventory.getAmounts() / inventory.getQuantity()); + Double price = decimal.setScale(2, BigDecimal.ROUND_HALF_UP).doubleValue(); + inventory.setPrice(price); + + // 修改库存记录 + materialMapper.updateInventory(inventory); + + + // 修改当前库位存放物料的数量 + placeAndMaterialByMidAndPid.setQuantity(placeAndMaterialByMidAndPid.getQuantity() - 1); + placeMapper.updateMaterialAndPlace(placeAndMaterialByMidAndPid); + + // 修改库位数量 + Place placeById = placeMapper.findPlaceById(placeId); + placeById.setQuantity(placeById.getQuantity() - 1); + placeMapper.UpdatePlace(placeById); + + + // 如果是库存转移订单 + Map map = new HashMap<>(); + if (record.getIstransfer() == 1) { + map.put("quantity", "1"); + map.put("applicantId", record.getApplicantId()); + map.put("minRecordId", applicationOutMinById.getId()); // 出库订单编号 + transferMaterial(map); + } + + // 设置剩余拆单库存处理数量 + splitInventory.setSaveQuantity(splitInfo.getQuantity() + splitInventory.getSaveQuantity() - trueOut); + splitInventory.setOutQuantity(splitInventory.getOutQuantity() + trueOut); + splitUnitMapper.updateSplitInventory(splitInventory); + + updateApplicationMinOutInfo(id, applicationOutMinById, record, trueOut, userByPort, placeId, userAgent); + + restResponse.setStatus(200); + restResponse.setData(""); + restResponse.setStatusInfo(new StatusInfo("出库成功", "出库成功")); + + } else { + restResponse.setStatus(508); + restResponse.setData(""); + restResponse.setStatusInfo(new StatusInfo("出库失败", "出库失败,库存不足")); + } + } else { + // 如果大于 + + // 获取库存重要减少的数量 + int surplus_redundant = surplus / splitInfo.getQuantity(); + // 获取拆单库存处理中要处理数量 + int saveQuantity = surplus - surplus_redundant * splitInfo.getQuantity(); + + if (saveQuantity > splitInventory.getSaveQuantity()) { + // 如果要处理的数量大于剩余数量 + + // 获取一个数量 + surplus_redundant += 1; + splitInventory.setSaveQuantity(splitInfo.getQuantity() + splitInventory.getSaveQuantity() - saveQuantity); + } else { + // 如果不大于 + splitInventory.setSaveQuantity(splitInventory.getSaveQuantity() - saveQuantity); + } + splitInventory.setOutQuantity(splitInventory.getOutQuantity() + saveQuantity); + Map params = new HashMap<>(); + params.put("mid", inventory.getId()); + params.put("pid", placeId); + + // 获取当前物料在库位中的数量 + placeAndMaterialByMidAndPid = placeMapper.findPlaceAndMaterialByMidAndPid(params); + + if (placeAndMaterialByMidAndPid != null) { + // 如果当前库位存在该物料 + if (placeAndMaterialByMidAndPid.getQuantity() < surplus_redundant) { + // 如果当前库存中的物料库存不足以出库 + flag = false; + } + } else { + restResponse.setStatus(566); + restResponse.setData(""); + restResponse.setStatusInfo(new StatusInfo("出库失败", "当前位置未发现该物料")); + return restResponse; + } + + if (inventory.getQuantity() >= surplus_redundant && flag) { + // 如果能够出库 + + // 令库存-1 + inventory.setQuantity(inventory.getQuantity() - surplus_redundant); + + // 重新计算总额 + inventory.setAmounts(inventory.getQuantity() * inventory.getPrice()); + + // 重新计算单价 + BigDecimal decimal = new BigDecimal(inventory.getAmounts() / inventory.getQuantity()); + Double price = decimal.setScale(2, BigDecimal.ROUND_HALF_UP).doubleValue(); + inventory.setPrice(price); + + // 修改库存记录 + materialMapper.updateInventory(inventory); + + + // 修改当前库位存放物料的数量 + placeAndMaterialByMidAndPid.setQuantity(placeAndMaterialByMidAndPid.getQuantity() - surplus_redundant); + placeMapper.updateMaterialAndPlace(placeAndMaterialByMidAndPid); + + // 修改库位数量 + Place placeById = placeMapper.findPlaceById(placeId); + placeById.setQuantity(placeById.getQuantity() - surplus_redundant); + placeMapper.UpdatePlace(placeById); + + + // 如果是库存转移订单 + Map map = new HashMap<>(); + if (record.getIstransfer() == 1) { + map.put("quantity", String.valueOf(surplus_redundant)); + map.put("applicantId", record.getApplicantId()); + map.put("minRecordId", applicationOutMinById.getId()); // 出库订单编号 + transferMaterial(map); + } + + updateApplicationMinOutInfo(id, applicationOutMinById, record, trueOut, userByPort, placeId, userAgent); + + restResponse.setStatus(200); + restResponse.setData(""); + restResponse.setStatusInfo(new StatusInfo("出库成功", "出库成功")); + } else { + restResponse.setStatus(508); + restResponse.setData(""); + restResponse.setStatusInfo(new StatusInfo("出库失败", "出库失败,库存不足")); + } } + } - if (pass == 1) { // 如果最终状态为完成 + } + else{ + // 如果拆单库存处理记录不存在 + + // 用于获取对应的拆单记录 + Map paramForSplitInfo = new HashMap<>(); + paramForSplitInfo.put("mid",inventory.getMid()); + paramForSplitInfo.put("newUnit",record.getUnit()); + // 获取对应拆单记录 + SplitInfo splitInfo = splitUnitMapper.findSplitInfoByMidAndUnit(paramForSplitInfo); + if(inventory.getQuantity() * splitInfo.getQuantity() > trueOut){ + // 如果当前库存数量满足要求 + + // 获取当前出库的具体数目 + int residue = trueOut / splitInfo.getQuantity(); + // 获取剩余数目 + int residue_realQuantity = trueOut - residue * splitInfo.getQuantity(); + + // 设置新总额 + inventory.setAmounts(inventory.getAmounts() - (residue + 1) * inventory.getPrice()); + + // 设置新库存 + inventory.setQuantity(inventory.getQuantity() - residue - 1); + + // 重新计算单价 + BigDecimal decimal = BigDecimal.valueOf(inventory.getAmounts() / inventory.getQuantity()); + Double price = decimal.setScale(2, BigDecimal.ROUND_HALF_UP).doubleValue(); + inventory.setPrice(price); + + //更新库存 + materialMapper.updateInventory(inventory); + + // 更新对应库位的库存 + // 修改当前库位存放物料的数量 + placeAndMaterialByMidAndPid.setQuantity(placeAndMaterialByMidAndPid.getQuantity() - residue - 1); + placeMapper.updateMaterialAndPlace(placeAndMaterialByMidAndPid); + + // 修改库位数量 + Place placeById = placeMapper.findPlaceById(placeId); + placeById.setQuantity(placeById.getQuantity() - residue - 1); + placeMapper.UpdatePlace(placeById); + + // 添加拆单库存处理记录 + Map insertSplitInventory = new HashMap<>(); + insertSplitInventory.put("sid",splitInfo.getId()); + insertSplitInventory.put("iid",inventory.getId()); + insertSplitInventory.put("outQuantity",trueOut); + insertSplitInventory.put("inQuantity",0); + insertSplitInventory.put("saveQuantity",splitInfo.getQuantity() - residue_realQuantity); + splitUnitMapper.addSplitInventory(insertSplitInventory); + + + // 如果是库存转移订单 Map map = new HashMap<>(); - map.put("pass", pass); - map.put("id", record.getId()); - // 修改状态为完成 - depositoryRecordMapper.updateApplicationOutRecord(map); - - // 将最终完成的订单抄送给仓储负责人 - String depositoryManagerIds = record.getDepositoryManager(); - String[] depositoryManagers = new String[0]; - if (depositoryManagerIds != null) { - depositoryManagers = depositoryManagerIds.split(","); - } - StringBuilder depositoryManagerByQyWx = new StringBuilder(); - for (int i = 0; i < depositoryManagers.length; i++) { - Integer uid = ObjectFormatUtil.toInteger(depositoryManagers[i]); - UserByPort depositoryManager = LinkInterfaceUtil.FindUserById(uid, userByPort); -// depositoryManagerByQyWx.append(depositoryManager.getWorkwechat()+","); + if (record.getIstransfer() == 1) { + map.put("quantity", String.valueOf(residue)); + map.put("applicantId", record.getApplicantId()); + map.put("minRecordId", applicationOutMinById.getId()); // 出库订单编号 + transferMaterial(map); } - depositoryManagerByQyWx.append("PangFuZhen,"); - JSONObject jsonObject = qyWxOperationService.sendCcMessageToUsers(depositoryManagerByQyWx.toString(), record.getId(), userAgent); - // 删除redis中本订单 - redisTemplate.delete("record:" + record.getId()); + updateApplicationMinOutInfo(id, applicationOutMinById, record, trueOut, userByPort, placeId, userAgent); + + restResponse.setStatus(200); + restResponse.setData(""); + restResponse.setStatusInfo(new StatusInfo("出库成功", "出库成功")); + + + }else { + restResponse.setStatus(508); + restResponse.setData(""); + restResponse.setStatusInfo(new StatusInfo("出库失败", "出库失败,库存不足")); } } + } + return restResponse; + } - // 如果是库存转移订单 - Map map = new HashMap<>(); - if (record.getIstransfer() == 1) { - map.put("quantity", trueOut.toString()); - map.put("applicantId", record.getApplicantId()); - map.put("minRecordId", applicationOutMinById.getId()); // 出库订单编号 - transferMaterial(map); - } - restResponse.setStatus(200); - restResponse.setData(""); - restResponse.setStatusInfo(new StatusInfo("出库成功", "出库成功")); + /** + * 用于完成出库时的相关处理操作 + * @param id 子订单id + * @param applicationOutMinById 待处理的子订单 + * @param record 子订单对应的主订单 + * @param trueOut 实际出库数量 + * @param userByPort 当前登录用户 + * @param placeId 出库库位id + * @param userAgent user-agent + */ + @Transactional(rollbackFor = Exception.class) + void updateApplicationMinOutInfo(Integer id, ApplicationOutRecordMin applicationOutMinById, ApplicationOutRecordP record, Integer trueOut, UserByPort userByPort, Integer placeId, String userAgent){ + String redisMinRecordKey = "minRecord:" + id; // 设置redis中子订单键值 + // 修改redis中本子订单状态 +// redisTemplate.opsForHash().put(redisMinRecordKey,"state","2"); + // 修改redis中本子订单完成人 +// redisTemplate.opsForHash().put(redisMinRecordKey,"manager",userByPort.getId().toString()); - // 更新入库批次中的物料数量 - new Thread(new Runnable() { - @Override - public void run() { - // 获取出库物料id - Integer mid = inventory.getId(); - // 获取当前物料对应的生产日期 - List materialAndProducedDateByMid = materialMapper.findMaterialAndProducedDateByMid(mid); - if (materialAndProducedDateByMid.size() > 0) { - // 获取距今生产日期远的(即生产日期最早的) - for (MaterialAndProducedDate materialAndProducedDate : - materialAndProducedDateByMid) { - if (materialAndProducedDate.getInventory() > quantity) { - // 设置使用的数量 - materialAndProducedDate.setExpendnum(materialAndProducedDate.getExpendnum() + quantity); - // 设置剩余的数量 - materialAndProducedDate.setInventory(materialAndProducedDate.getInventory() - quantity); - materialMapper.updateMaterialAndProducedDate(materialAndProducedDate); - // 跳出循环 - break; - } - } - } - } - }).start(); + // 修改当前已经出库的数量 + applicationOutMinById.setTrueOut(trueOut + applicationOutMinById.getTrueOut()); + if (applicationOutMinById.getQuantity() - applicationOutMinById.getTrueOut() > 0) { + // 如果当前子订单中的物料并未完全出库 + depositoryRecordMapper.updateApplicationOutRecordMin(applicationOutMinById); } else { - restResponse.setStatus(508); - restResponse.setData(""); - restResponse.setStatusInfo(new StatusInfo("出库失败", "出库失败,库存不足")); + // 如果完成出库 + + // 获取当前订单中所有管理员 + String manager = (String) redisTemplate.opsForHash().get(redisMinRecordKey, "manager"); + String[] managerSplit = new String[0]; + if (manager != null) { + // 获取其他管理员 + managerSplit = manager.replace(userByPort.getId() + ",", "").split(","); + if (managerSplit.length == 0) { + managerSplit = new String[0]; + } + } + for (int i = 0; i < managerSplit.length; i++) { + // 删除其他管理员的订单记录 + String otherManager = "user:" + managerSplit[i]; + String minRecord = (String) redisTemplate.opsForHash().get(otherManager, "minRecord"); + // 删除其他管理员中当前已完成的订单 + if (minRecord == null) { + continue; + } + minRecord = minRecord.replace(redisMinRecordKey + ",", ""); + if (minRecord.length() == 2) { + // [] + // 如果当前用户已经没有剩余订单,则删除 + redisTemplate.delete(otherManager); + } else { + redisTemplate.opsForHash().put(otherManager, "minRecord", minRecord); + } + } + // 删除已完成的订单 + redisTemplate.delete(redisMinRecordKey); + // 获取该用户在redis中的订单记录 + String key = "user:" + userByPort.getId().toString(); + // 获取当前用户所有订单 + String minRecord = (String) redisTemplate.opsForHash().get(key, "minRecord"); + // 删除用户中当前已完成的订单 + minRecord = minRecord.replace(redisMinRecordKey + ",", ""); + if (minRecord.length() == 2) { + // [] + // 如果当前用户已经没有剩余订单,则删除 + redisTemplate.delete("user:" + userByPort.getId()); + } else { + redisTemplate.opsForHash().put(key, "minRecord", minRecord); + } + // 获取出库仓库信息 + Depository depositoryRecordById = depositoryMapper.findDepositoryById(applicationOutMinById.getDepositoryId()); + // 设置子订单新编码 + // 获取主订单单号 + StringBuilder code = new StringBuilder(record.getCode()); + // 获取申请用户信息 + UserByPort applicantUser = LinkInterfaceUtil.FindUserById(record.getApplicantId(), userByPort); + // 获取申请用户行政组织 + Administration company = LinkInterfaceUtil.getCompany(applicantUser.getMaindeparment(), userByPort); + // 获取部门名称简写 + String conpanyName = WordUtil.getPinYinHeadChar(company.getName()); + // 获取仓库名称简写 + String depositoryName = WordUtil.getPinYinHeadChar(depositoryRecordById.getDname()); + // 获取部门名称在单号的起始位置 + int index = code.indexOf(conpanyName); + // 生产新子订单编号 + String newCode = code.replace(index, index + conpanyName.length(), depositoryName).toString(); + + // 设置新编码 + applicationOutMinById.setCode(newCode); + // 设置完成人 + applicationOutMinById.setCheckId(userByPort.getId()); + // 设置新库位 + applicationOutMinById.setPlaceId(placeId); + + // 修改子订单 + depositoryRecordMapper.updateApplicationOutRecordMin(applicationOutMinById); + + String redisMainRecordKey = "record:" + record.getId(); // 设置redis中主订单键值 + // 获取redis中主订单的所有子订单 + String minRecordList = (String) redisTemplate.opsForHash().get(redisMainRecordKey, "minRecord"); + // 获取所有子订单键值 + String[] split = minRecordList.replace("[", "").replace("]", "").split(","); + int pass = 1; // 设置主订单最终状态 + for (int i = 0; i < split.length; i++) { + // 获取所有子订单状态 + String state = (String) redisTemplate.opsForHash().get(split[i], "state"); + if ("1".equals(state)) { + // 如果有子订单未完成 + pass = 3; // 设置主订单状态为处理中 + break; + } + } + if (pass == 1) { // 如果最终状态为完成 + Map map = new HashMap<>(); + map.put("pass", pass); + map.put("id", record.getId()); + // 修改状态为完成 + depositoryRecordMapper.updateApplicationOutRecord(map); + + // 将最终完成的订单抄送给仓储负责人 + String depositoryManagerIds = record.getDepositoryManager(); + String[] depositoryManagers = new String[0]; + if (depositoryManagerIds != null) { + depositoryManagers = depositoryManagerIds.split(","); + } + StringBuilder depositoryManagerByQyWx = new StringBuilder(); + for (int i = 0; i < depositoryManagers.length; i++) { + Integer uid = ObjectFormatUtil.toInteger(depositoryManagers[i]); + UserByPort depositoryManager = LinkInterfaceUtil.FindUserById(uid, userByPort); +// depositoryManagerByQyWx.append(depositoryManager.getWorkwechat()+","); + } + depositoryManagerByQyWx.append("PangFuZhen,"); +// JSONObject jsonObject = qyWxOperationService.sendCcMessageToUsers(depositoryManagerByQyWx.toString(), record.getId(), userAgent); + + // 删除redis中本订单 + redisTemplate.delete("record:" + record.getId()); + } } - return restResponse; } /** @@ -1372,7 +1678,8 @@ public class DepositoryRecordServiceImpl implements DepositoryRecordService { qyWxOperationService.sendMessageForOtherUserByCard(ObjectFormatUtil.toInteger(id), s, userAgent, 1); } }).start(); - } else { + } + else { String result = ""; // 开启线程更改其他用户卡片模板样式 String simpleTime = DateUtil.getSimpleTime(new Date()); @@ -1428,16 +1735,14 @@ public class DepositoryRecordServiceImpl implements DepositoryRecordService { // 获取对应的物料编号 Integer mid = applicationOutRecordMin.getMid(); // 获取物料信息 - Material materialById = materialMapper.findMaterialById(mid); + Inventory inventory = materialMapper.findInventoryById(mid); // 获取该物料所处仓库的仓库管理员 List userIdByDid = new ArrayList<>(); - userIdByDid = roleService.findUserIdByDid(materialById.getDepositoryId()); + userIdByDid = roleService.findUserIdByDid(inventory.getDepositoryId()); // 用于保存仓库管理员的企业微信openid StringBuilder QyWxUid = new StringBuilder(); for (int j = 0; j < userIdByDid.size(); j++) { - // 获取当前用户信息 - UserByPort userByPort = LinkInterfaceUtil.FindUserById(userIdByDid.get(j), userToken); // 仓库管理员订单信息 Map userRecord = new HashMap<>(); // 用户当前子订单 @@ -1469,7 +1774,7 @@ public class DepositoryRecordServiceImpl implements DepositoryRecordService { }).start();*/ } - for (int i = 0; i < depositoryIdList.size(); i++) { + /* for (int i = 0; i < depositoryIdList.size(); i++) { Object o = minIdByDepository.get("depository" + depositoryIdList.get(i)); if (o != null) { List minIdList = (List) o; @@ -1517,7 +1822,7 @@ public class DepositoryRecordServiceImpl implements DepositoryRecordService { s = "PangFuZhen,"; qyWxOperationService.sendMessageForOtherUserByCard(ObjectFormatUtil.toInteger(id), s, userAgent, 1); } - }).start(); + }).start();*/ // 将主订单插入到redis中 redisTemplate.opsForHash().put("record:" + record.getId(), "minRecord", minRecordByMain.toString()); 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 2627b0e8..e2bdab26 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 @@ -4,10 +4,7 @@ import com.alibaba.fastjson.JSON; import com.alibaba.fastjson.JSONArray; import com.alibaba.fastjson.JSONObject; import com.dreamchaser.depository_manage.entity.*; -import com.dreamchaser.depository_manage.mapper.DepositoryMapper; -import com.dreamchaser.depository_manage.mapper.MaterialMapper; -import com.dreamchaser.depository_manage.mapper.MaterialTypeMapper; -import com.dreamchaser.depository_manage.mapper.QrCodeMapper; +import com.dreamchaser.depository_manage.mapper.*; import com.dreamchaser.depository_manage.pojo.InventoryP; import com.dreamchaser.depository_manage.pojo.MaterialP; import com.dreamchaser.depository_manage.pojo.PlaceP; @@ -16,6 +13,7 @@ import com.dreamchaser.depository_manage.service.PlaceService; import com.dreamchaser.depository_manage.service.RoleService; import com.dreamchaser.depository_manage.utils.DateUtil; import com.dreamchaser.depository_manage.utils.ObjectFormatUtil; +import lombok.Data; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.data.redis.core.RedisTemplate; import org.springframework.stereotype.Service; @@ -48,6 +46,9 @@ public class MaterialServiceImpl implements MaterialService { @Autowired RedisTemplate redisTemplate; + @Autowired + SplitUnitMapper splitUnitMapper; + /** * 增加一条库存记录 @@ -140,10 +141,10 @@ public class MaterialServiceImpl implements MaterialService { // 1年2月3天 int shelfLife = 0; if (map.containsKey("shelfLife")) { - String life = map.get("shelfLife").toString(); - if(!("".equals(life))){ + String life = map.get("shelfLife").toString(); + if (!("".equals(life))) { shelfLife = ObjectFormatUtil.toInteger(life); - }else{ + } else { shelfLife = -1; } } @@ -153,7 +154,7 @@ public class MaterialServiceImpl implements MaterialService { map.put("shelfLife", ObjectFormatUtil.toInteger("2" + shelfLife)); } else if ("year".equals(dateType) && shelfLife != -1) { map.put("shelfLife", ObjectFormatUtil.toInteger("1" + shelfLife)); - }else{ + } else { map.remove("shelfLife"); } if (map.containsKey("producedDate")) { @@ -193,10 +194,10 @@ public class MaterialServiceImpl implements MaterialService { map.put("begin", (page - 1) * size); } Object state = 1; - if(map.containsKey("state")){ + if (map.containsKey("state")) { state = map.get("state"); } - map.put("state",state); + map.put("state", state); List list = materialMapper.findMaterialByCondition(map); for (int i = 0; i < list.size(); i++) { list.get(i).setPrice(list.get(i).getPrice() / 100); @@ -226,6 +227,7 @@ public class MaterialServiceImpl implements MaterialService { /** * 根据物料名与物料规格型号查询对应的物料 + * * @param map * @return */ @@ -276,6 +278,7 @@ public class MaterialServiceImpl implements MaterialService { /** * 根据条件查询符合条件的库存 + * * @param map * @return */ @@ -339,6 +342,7 @@ public class MaterialServiceImpl implements MaterialService { /** * 根据条件查询物料总数 + * * @param map 查询条件 * @return 当前条件下的总数 */ @@ -380,6 +384,7 @@ public class MaterialServiceImpl implements MaterialService { /** * 根据库存id查询库存信息 + * * @param id 库存id * @return 库存信息 */ @@ -395,6 +400,7 @@ public class MaterialServiceImpl implements MaterialService { /** * 根据物料id获取对应库存信息 + * * @param mid 待查询物料id * @return */ @@ -413,7 +419,8 @@ public class MaterialServiceImpl implements MaterialService { /** * 根据物料id获取其在对应仓库中的库存数 - * @param mid 物料id + * + * @param mid 物料id * @param depositoryList 待查询的仓库 * @return */ @@ -422,15 +429,15 @@ public class MaterialServiceImpl implements MaterialService { // 用于存储各仓库的库存 List result = new ArrayList<>(); // - Map map = new HashMap<>(); - map.put("mid",mid); + Map map = new HashMap<>(); + map.put("mid", mid); for (int i = 0; i < depositoryList.size(); i++) { Depository depository = depositoryList.get(i); - map.put("did",depository.getId()); + map.put("did", depository.getId()); Inventory inventory = materialMapper.findInventoryByMidAndDid(map); - if(inventory!=null) { + if (inventory != null) { result.add(inventory.getQuantity()); - }else{ + } else { result.add(0); } } @@ -439,6 +446,7 @@ public class MaterialServiceImpl implements MaterialService { /** * 根据id查询库存信息 + * * @param id 库存id * @return 库存信息 */ @@ -505,10 +513,10 @@ public class MaterialServiceImpl implements MaterialService { @Override public Integer findCountByCondition(Map map) { Object state = 1; - if(map.containsKey("state")){ + if (map.containsKey("state")) { state = map.get("state"); } - map.put("state",state); + map.put("state", state); return materialMapper.findCountByCondition(map); } @@ -619,6 +627,21 @@ public class MaterialServiceImpl implements MaterialService { m.setTypeName(materialTypeByOldId.getTname()); m.setTypeId(materialTypeByOldId.getOldId()); m.setWarningCount(warningCount); + // 获取当前是否存在拆单处理记录 + SplitInventory splitInventoryByIid = splitUnitMapper.findSplitInventoryByIid(m.getId()); + if (splitInventoryByIid != null) { + // 如果存在拆单库存处理记录 + + // 获取拆单信息 + SplitInfo splitInfo = splitUnitMapper.findSplitInfoById(splitInventoryByIid.getSid()); + if (Integer.compare(m.getQuantity(), 0) == 0) { + m.setShowQuantity(splitInfo.getNewUnit() + ":" + splitInventoryByIid.getSaveQuantity()); + } else { + m.setShowQuantity(m.getUnit() + ":" + m.getQuantity() + "," + splitInfo.getNewUnit() + ":" + splitInventoryByIid.getSaveQuantity()); + } + } else { + m.setShowQuantity(m.getUnit() + ":" + m.getQuantity()); + } result.add(m); } return result; @@ -686,6 +709,7 @@ public class MaterialServiceImpl implements MaterialService { } return result; } + /** * 根据仓库查询物品 * @@ -699,6 +723,7 @@ public class MaterialServiceImpl implements MaterialService { /** * 查询仓库中的物料 + * * @param map * @return */ @@ -722,8 +747,8 @@ public class MaterialServiceImpl implements MaterialService { placeCode.append(placeByMidAndDid.get(j).getCode()).append(" "); } materialByDepository.get(i).setPlaceCode(placeCode.toString()); - materialByDepository.get(i).setAmounts(materialByDepository.get(i).getAmounts()/100); - materialByDepository.get(i).setPrice(materialByDepository.get(i).getPrice()/100); + materialByDepository.get(i).setAmounts(materialByDepository.get(i).getAmounts() / 100); + materialByDepository.get(i).setPrice(materialByDepository.get(i).getPrice() / 100); } return pack(materialByDepository); @@ -745,7 +770,7 @@ public class MaterialServiceImpl implements MaterialService { if (map.containsKey("quantity")) { int quantity = (int) Math.round(Double.parseDouble(map.get("quantity").toString())); int price = 0; - if(map.containsKey("price")){ + if (map.containsKey("price")) { price = (int) (Double.parseDouble(map.get("price").toString())); } map.put("price", price); @@ -753,8 +778,8 @@ public class MaterialServiceImpl implements MaterialService { } Map params = new HashMap<>(); // params.put("code", map.get("code")); - params.put("mname",map.get("mname")); - params.put("version",map.get("version")); + params.put("mname", map.get("mname")); + params.put("version", map.get("version")); params.put("depositoryId", map.get("depositoryId")); List inventory = materialMapper.findInventoryForImport(params); if (inventory.size() >= 1) { @@ -765,7 +790,7 @@ public class MaterialServiceImpl implements MaterialService { Inventory material = inventory.get(0); Double price = 0.0; - if(map.containsKey("price")){ + if (map.containsKey("price")) { price = (Double.parseDouble(map.get("price").toString())) / 100; } int quantity = (int) Math.round(Double.parseDouble(map.get("quantity").toString())); @@ -829,14 +854,13 @@ public class MaterialServiceImpl implements MaterialService { } } return materialMapper.updateInventory(material); - } - else { + } else { // 用于标志是新插入的物料 map.put("isNew", true); - if(!map.containsKey("producedDate")){ - // 如果不包含生产日期 - map.put("producedDate",0); - } + if (!map.containsKey("producedDate")) { + // 如果不包含生产日期 + map.put("producedDate", 0); + } return materialMapper.insertInventory(map); } } @@ -892,8 +916,16 @@ public class MaterialServiceImpl implements MaterialService { List materialByBarCodeByCondition = materialMapper.findMaterialByBarCodeByCondition(map); if (materialByBarCodeByCondition.size() > 0) { MaterialAndBarCode materialAndBarCode = materialByBarCodeByCondition.get(0); - Inventory inventoryByMid = materialMapper.findInventoryById(materialAndBarCode.getIid()); - materialAndBarCode.setPrice(inventoryByMid.getPrice() / 100); + if (materialAndBarCode.getIid() != null) { + Inventory inventoryByMid = materialMapper.findInventoryById(materialAndBarCode.getIid()); + if (inventoryByMid != null) { + materialAndBarCode.setPrice(inventoryByMid.getPrice() / 100); + } else { + materialAndBarCode.setPrice(0.0); + } + } else { + materialAndBarCode.setPrice(0.0); + } return materialAndBarCode; } return null; @@ -1014,7 +1046,7 @@ public class MaterialServiceImpl implements MaterialService { continue; } else { List childList = (List) jsonObject.get("children"); - List objectList1 = rewriteTree(childList, stringObjectMap, mtLevel - 1, mt,1); + List objectList1 = rewriteTree(childList, stringObjectMap, mtLevel - 1, mt, 1); jsonObject.put("children", objectList1); jsonObject.remove("spread"); stringObjectMap.remove("spread"); @@ -1168,7 +1200,7 @@ public class MaterialServiceImpl implements MaterialService { Integer mtLevel = getMtLevel(mt, 1); List materialTypeByParent = materialTypeMapper.findMaterialTypeByParent(mtId); - if(materialTypeByParent.size() > 0) { + if (materialTypeByParent.size() > 0) { // 获取当前redis中的树 List objectList = redisTemplate.opsForList().range("wms_materialTree_result", 0, -1); @@ -1200,6 +1232,7 @@ public class MaterialServiceImpl implements MaterialService { /** * 用于修改库位中的物料 + * * @param map 修改条件 * @return */ @@ -1226,10 +1259,10 @@ public class MaterialServiceImpl implements MaterialService { int beforeQuantity = pidAndmidForBefore.getQuantity() - quantity; // 判断转移到的库位是否超出库存 - if(toPlace.getQuantity() + quantity > toPlace.getMax()){ + if (toPlace.getQuantity() + quantity > toPlace.getMax()) { // 如果超出最大存储量 return -1; - }else { + } else { // 如果没有超出最大存储量 @@ -1244,10 +1277,10 @@ public class MaterialServiceImpl implements MaterialService { // 如果没有 // 新增对应关系 - Map insertAfter = new HashMap<>(); - insertAfter.put("mid",id); - insertAfter.put("quantity",quantity); - insertAfter.put("pid",toPlaceId); + Map insertAfter = new HashMap<>(); + insertAfter.put("mid", id); + insertAfter.put("quantity", quantity); + insertAfter.put("pid", toPlaceId); // 添加对应关系 placeService.addMaterialOnPlace(insertAfter); } @@ -1278,26 +1311,27 @@ public class MaterialServiceImpl implements MaterialService { /** * 用于真实关闭打开的树 + * * @param jsonArray 传入的子列表 - * @param mtLevel 当前关闭的物料类型等级 - * @param mt 要关闭的类型 + * @param mtLevel 当前关闭的物料类型等级 + * @param mt 要关闭的类型 */ - public JSONArray closeTree(JSONArray jsonArray,Integer mtLevel,MaterialType mt){ + public JSONArray closeTree(JSONArray jsonArray, Integer mtLevel, MaterialType mt) { MaterialType parent = mt; // 定义返回结果 JSONArray ja = new JSONArray(); - if(mtLevel == 1){ + if (mtLevel == 1) { // 如果到当前等级 for (int i = 0; i < jsonArray.size(); i++) { JSONObject object = jsonArray.getJSONObject(i); Long oId = Long.valueOf(object.getString("id")); - if(Long.compare(oId, mt.getOldId()) == 0){ + if (Long.compare(oId, mt.getOldId()) == 0) { // 如果是当前关闭类别 object.remove("spread"); } ja.add(object); } - }else { + } else { for (int i = 0; i < mtLevel - 1; i++) { parent = materialTypeMapper.findMaterialTypeByOldId(parent.getParentId()); } @@ -1308,7 +1342,7 @@ public class MaterialServiceImpl implements MaterialService { // 如果是当前要关闭的父类 JSONArray children = object.getJSONArray("children"); JSONArray objects = closeTree(children, mtLevel - 1, mt); - object.put("children",objects); + object.put("children", objects); } ja.add(object); } @@ -1320,18 +1354,18 @@ public class MaterialServiceImpl implements MaterialService { /** * 重构树结构 * - * @param childrenList 需要重构的列表 + * @param childrenList 需要重构的列表 * @param stringObjectMap 重构数据 - * @param flag 当前等级 - * @param mt 类型 - * @param level 当前递归次数 + * @param flag 当前等级 + * @param mt 类型 + * @param level 当前递归次数 * @return */ - public List rewriteTree(List childrenList, Map stringObjectMap, Integer flag, MaterialType mt,Integer level) { + public List rewriteTree(List childrenList, Map stringObjectMap, Integer flag, MaterialType mt, Integer level) { if (flag != 1) { // 获取当前类型父类 mt = materialTypeMapper.findMaterialTypeByOldId(mt.getParentId()); - return rewriteTree(childrenList, stringObjectMap, flag - 1, mt,level + 1); + return rewriteTree(childrenList, stringObjectMap, flag - 1, mt, level + 1); } else { // 定义现在的等级 Integer nowLevel = 1; @@ -1353,7 +1387,7 @@ public class MaterialServiceImpl implements MaterialService { nowLevel++; // 获取当前下的子列表 JSONArray children = jsonObject.getJSONArray("children"); - List objectList = updateTreeChildren(children, stringObjectMap, level,nowLevel); + List objectList = updateTreeChildren(children, stringObjectMap, level, nowLevel); jsonObject.put("children", objectList); jsonObject.put("spread", true); list.add(jsonObject); @@ -1370,16 +1404,16 @@ public class MaterialServiceImpl implements MaterialService { * 修改树 * * @param childrenList 需要修改的子列表 - * @param map 修改的数据 - * @param level 之前递归的cis - * @param nowLevel 现在的层次 + * @param map 修改的数据 + * @param level 之前递归的cis + * @param nowLevel 现在的层次 * @return */ - public List updateTreeChildren(List childrenList, Map map, Integer level,Integer nowLevel) { + public List updateTreeChildren(List childrenList, Map map, Integer level, Integer nowLevel) { // 获取数据中的id Long somId = Long.valueOf(map.get("id").toString()); List children = new ArrayList<>(); - if(level - nowLevel == 0) { + if (level - nowLevel == 0) { // 如果不需要递归 for (int i = 0; i < childrenList.size(); i++) { JSONObject o = (JSONObject) childrenList.get(i); @@ -1393,9 +1427,9 @@ public class MaterialServiceImpl implements MaterialService { children.add(o); } } - }else{ + } else { // 获取当前修改时的类型 - MaterialType parent = materialTypeMapper.findMaterialTypeByOldId(somId); + MaterialType parent = materialTypeMapper.findMaterialTypeByOldId(somId); for (int i = 0; i < level - nowLevel; i++) { // 获取父类 parent = materialTypeMapper.findMaterialTypeByOldId(parent.getParentId()); @@ -1404,10 +1438,10 @@ public class MaterialServiceImpl implements MaterialService { JSONObject o = (JSONObject) childrenList.get(i); // 获取当前子列表中的数据id Long id = Long.valueOf(o.getString("id")); - if(Long.compare(id,parent.getOldId()) == 0){ + if (Long.compare(id, parent.getOldId()) == 0) { List objectList = updateTreeChildren(o.getJSONArray("children"), map, level, nowLevel + 1); - o.put("children",objectList); - o.put("spread",true); + o.put("children", objectList); + o.put("spread", true); } children.add(o); } @@ -1641,7 +1675,7 @@ public class MaterialServiceImpl implements MaterialService { flag = 2; } List result = new ArrayList<>(); - if(flag == 1){ + if (flag == 1) { if ("".equals(mname)) { // 如果没有输入名称 for (Material material : materialByDepositorys) { @@ -1652,8 +1686,10 @@ public class MaterialServiceImpl implements MaterialService { } String title = material.getMname() + ",规格型号: " + version; if (material.getDepositoryId() != null) { + // 如果当前是库存 - title += ",当前库存为:" + material.getQuantity(); + title += ",当前库存为:" + material.getUnit() + ":" + material.getQuantity(); + } map.put("title", title); map.put("id", material.getId()); @@ -1670,7 +1706,7 @@ public class MaterialServiceImpl implements MaterialService { String title = material.getMname() + ",规格型号: " + version; if (material.getDepositoryId() != null) { // 如果当前是库存 - title += ",当前库存为:" + material.getQuantity(); + title += ",当前库存为:" + material.getUnit() + ":" + material.getQuantity(); } map.put("title", title); map.put("id", material.getId()); @@ -1678,38 +1714,59 @@ public class MaterialServiceImpl implements MaterialService { } } } - }else{ + } else { if ("".equals(mname)) { // 如果没有输入名称 - for (Inventory material : materialPByCondition) { + for (Inventory inventory : materialPByCondition) { Map map = new HashMap<>(); - String version = material.getVersion(); + String version = inventory.getVersion(); if (version == null) { version = ""; } - String title = material.getMname() + ",规格型号: " + version; - if (material.getDepositoryId() != null) { + String title = inventory.getMname() + ",规格型号: " + version; + if (inventory.getDepositoryId() != null) { // 如果当前是库存 - title += ",当前库存为:" + material.getQuantity(); + + // 获取对应拆单库存处理记录 + title += ",当前库存为:" + inventory.getUnit() + ":" + inventory.getQuantity(); + SplitInventory splitInventoryByIid = splitUnitMapper.findSplitInventoryByIid(inventory.getId()); + if (splitInventoryByIid != null) { + // 如果存在 + + // 获取对应的拆单记录 + SplitInfo splitInfoById = splitUnitMapper.findSplitInfoById(splitInventoryByIid.getSid()); + title += "," + splitInventoryByIid.getSaveQuantity() + splitInfoById.getNewUnit(); + } } map.put("title", title); - map.put("id", material.getId()); + map.put("id", inventory.getId()); result.add(map); } } else { - for (Inventory material : materialPByCondition) { + for (Inventory inventory : materialPByCondition) { Map map = new HashMap<>(); - if (material.getMname().contains(mname)) { - String version = material.getVersion(); + if (inventory.getMname().contains(mname)) { + String version = inventory.getVersion(); if (version == null) { version = ""; } - String title = material.getMname() + ",规格型号: " + version; - if (material.getDepositoryId() != null) { + String title = inventory.getMname() + ",规格型号: " + version; + if (inventory.getDepositoryId() != null) { + // 如果当前是库存 // 如果当前是库存 - title += ",当前库存为:" + material.getQuantity(); + + // 获取对应拆单库存处理记录 + title += ",当前库存为:" + inventory.getUnit() + ":" + inventory.getQuantity(); + SplitInventory splitInventoryByIid = splitUnitMapper.findSplitInventoryByIid(inventory.getId()); + if (splitInventoryByIid != null) { + // 如果存在 + + // 获取对应的拆单记录 + SplitInfo splitInfoById = splitUnitMapper.findSplitInfoById(splitInventoryByIid.getSid()); + title += "," + splitInventoryByIid.getSaveQuantity() + splitInfoById.getNewUnit(); + } } map.put("title", title); - map.put("id", material.getId()); + map.put("id", inventory.getId()); result.add(map); } } @@ -2017,6 +2074,7 @@ public class MaterialServiceImpl implements MaterialService { /** * 用于构造物料树结构 + * * @return */ public List InitTree_Test_New() { @@ -2174,7 +2232,7 @@ public class MaterialServiceImpl implements MaterialService { Map map = new HashMap<>(); map.put("title", mt.getTname()); map.put("id", mt.getOldId()); - map.put("parentId",mt.getParentId()); + map.put("parentId", mt.getParentId()); map.put("children", children); return map; } else { @@ -2203,11 +2261,12 @@ public class MaterialServiceImpl implements MaterialService { /** * 用于构造树结构 - * @param list 树列表 + * + * @param list 树列表 * @param parentId 父级id * @return */ - public List buildTree_New(List list,Long parentId){ + public List buildTree_New(List list, Long parentId) { // 定义树结构 List result = new ArrayList<>(); for (int i = 0; i < list.size(); i++) { @@ -2215,7 +2274,7 @@ public class MaterialServiceImpl implements MaterialService { JSONObject jsonObject = new JSONObject((Map) list.get(i)); // 获取当前父级id Long parentId1 = jsonObject.getLong("parentId"); - if(Long.compare(parentId,parentId1) == 0){ // 如果当前类型是其父类 + if (Long.compare(parentId, parentId1) == 0) { // 如果当前类型是其父类 List objectList = buildTree_New(list, jsonObject.getLong("id")); // 获取当前类型的子类 JSONArray children = jsonObject.getJSONArray("children"); children.addAll(objectList); @@ -2228,9 +2287,10 @@ public class MaterialServiceImpl implements MaterialService { /** * 用于构造物料树结构(通过物料名称搜索) + * * @return */ - public List InitTreeForSelectName(String mname) { + public List InitTreeForSelectName(String mname, String type) { // 获取所有物料类型 List materialTypeAll = materialTypeMapper.findMaterialTypeAll(); // 物料总数 @@ -2258,7 +2318,7 @@ public class MaterialServiceImpl implements MaterialService { MaterialType materialType = materialTypeAll.get(i); if (((i + 1) % 100) == 0) { // 如果有100个开启线程进行处理 materialTypeList.add(materialType.getOldId()); - Future future = completionService.submit(new TaskTestForSelectMname(materialTypeList,mname)); + Future future = completionService.submit(new TaskTestForSelectMname(materialTypeList, mname, type)); futureList.add(future); // 添加到结果集 materialTypeList = new ArrayList<>(); // 情况列表 } else { @@ -2269,7 +2329,7 @@ public class MaterialServiceImpl implements MaterialService { if (materialTypeList.size() > 0) { // 如果有剩余,开启线程进行处理 - Future future = completionService.submit(new TaskTestForSelectMname(materialTypeList,mname)); + Future future = completionService.submit(new TaskTestForSelectMname(materialTypeList, mname, type)); futureList.add(future); } @@ -2295,10 +2355,13 @@ public class MaterialServiceImpl implements MaterialService { // 待处理的物料类型id列表 List materialTypeIdList; String mname; + // 1入库2出库3盘点 + String type; - public TaskTestForSelectMname(List materialTypeByCondition,String mname) { + public TaskTestForSelectMname(List materialTypeByCondition, String mname, String type) { this.materialTypeIdList = materialTypeByCondition; this.mname = mname; + this.type = type; } @Override @@ -2307,10 +2370,18 @@ public class MaterialServiceImpl implements MaterialService { // 定义树结构结果集 List list = new ArrayList<>(); // 查询当前物料类型id列表中的物料类型 - Map paramForMnameAndMtid = new HashMap<>(); - paramForMnameAndMtid.put("list",materialTypeIdList); - paramForMnameAndMtid.put("mname",mname); - List materialByTypeIds = materialMapper.findMaterialByTypeIdsAndMname(paramForMnameAndMtid); + Map paramForMnameAndMtid = new HashMap<>(); + paramForMnameAndMtid.put("list", materialTypeIdList); + paramForMnameAndMtid.put("mname", mname); + List materialByTypeIds = new ArrayList<>(); + List inventoryByTypeIdsAndMname = new ArrayList<>(); + if ("1".equals(type)) { + materialByTypeIds = materialMapper.findMaterialByTypeIdsAndMname(paramForMnameAndMtid); + + } else if ("2".equals(type)) { + inventoryByTypeIdsAndMname= materialMapper.findInventoryByTypeIdsAndMname(paramForMnameAndMtid); + + } // 查询当前物料类型所包含的物料 List materialTypeByOldIds = materialTypeMapper.findMaterialTypeByOldIds(materialTypeIdList); @@ -2322,13 +2393,24 @@ public class MaterialServiceImpl implements MaterialService { // 1.定义CompletionService CompletionService completionService = new ExecutorCompletionService(exs); - for (int i = 0; i < materialTypeByOldIds.size(); i++) { - // 获取当前物料类型 - MaterialType mt = materialTypeByOldIds.get(i); - // 开启对应线程 - Future future = completionService.submit(new MtTaskTestForSelectMname(mt, materialByTypeIds,mname)); - // 添加到线程结果列表 - futureList.add(future); + if("1".equals(type)) { + for (MaterialType mt : materialTypeByOldIds) { + // 获取当前物料类型 + // 开启对应线程 + Future future = completionService.submit(new MtTaskTestForSelectMname(mt, materialByTypeIds, mname, type)); + // 添加到线程结果列表 + futureList.add(future); + } + }else if("2".equals(type)){ + for (MaterialType mt : materialTypeByOldIds) { + // 获取当前物料类型 + // 开启对应线程 + MtTaskTestForSelectMname mtTaskTestForSelectMname = new MtTaskTestForSelectMname(mt, materialByTypeIds, mname, type); + mtTaskTestForSelectMname.setInventoryList(inventoryByTypeIdsAndMname); + Future future = completionService.submit(mtTaskTestForSelectMname); + // 添加到线程结果列表 + futureList.add(future); + } } // 3.获取结果 for (int i = 0; i < materialTypeIdList.size(); i++) { @@ -2349,16 +2431,24 @@ public class MaterialServiceImpl implements MaterialService { } // 用于执行测试新算法(通过物料名称搜索) + class MtTaskTestForSelectMname implements Callable { MaterialType mt; // 物料类型 List materiaList; // 物料列表 String mname; + String type; + List inventorys; // 库存列表 - public MtTaskTestForSelectMname(MaterialType mt, List materiaList,String mname) { + public MtTaskTestForSelectMname(MaterialType mt, List materiaList, String mname, String type) { this.mt = mt; this.materiaList = materiaList; this.mname = mname; + this.type = type; + } + + public void setInventoryList(List inventoryList) { + this.inventorys = inventoryList; } @Override @@ -2366,15 +2456,29 @@ public class MaterialServiceImpl implements MaterialService { // 开启对应数量的线程 List materialList = new ArrayList<>(); - for (int i = 0; i < materiaList.size(); i++) { - Material material = materiaList.get(i); - // 如果当前物料是当前物料类型下的物料 - if (Long.compare(material.getMaterialTypeId(), mt.getOldId()) == 0) { - materialList.add(material); + List inventoryList = new ArrayList<>(); + // 将物料打包成树结构对应结果 + List objectList = new ArrayList<>(); + if("1".equals(type)) { + for (int i = 0; i < materiaList.size(); i++) { + Material material = materiaList.get(i); + // 如果当前物料是当前物料类型下的物料 + if (Long.compare(material.getMaterialTypeId(), mt.getOldId()) == 0) { + materialList.add(material); + } + } + objectList = AddMaterialByTypeForSelectMname(materialList, null); + }else if("2".equals(type)){ + for (int i = 0; i < inventorys.size(); i++) { + Inventory inventory = inventorys.get(i); + // 如果当前物料是当前物料类型下的物料 + if (Long.compare(inventory.getMaterialTypeId(), mt.getOldId()) == 0) { + inventoryList.add(inventory); + } } + objectList = AddMaterialByTypeForSelectMname(null,inventoryList); } - // 将物料打包成树结构对应结果 - List objectList = AddMaterialByTypeForSelectMname(materialList); + // 封装成对应的结构 Map objectMap = InitTreeMenusForSelectName(mt, objectList); return objectMap; @@ -2387,7 +2491,7 @@ public class MaterialServiceImpl implements MaterialService { Map map = new HashMap<>(); map.put("title", mt.getTname()); map.put("id", mt.getOldId()); - map.put("parentId",mt.getParentId()); + map.put("parentId", mt.getParentId()); map.put("children", children); return map; } else { @@ -2396,37 +2500,61 @@ public class MaterialServiceImpl implements MaterialService { } // 在类别后添加物料名称(通过物料名称搜索) - public List AddMaterialByTypeForSelectMname(List materialList) { + public List AddMaterialByTypeForSelectMname(List materialList,List inventoryList) { List result = new ArrayList<>(); - for (int i = 0; i < materialList.size(); i++) { - Material material = materialList.get(i); - Map map = new HashMap<>(); - String version = material.getVersion(); - if (version == null) { - version = ""; + if(materialList!=null) { + for (Material material : materialList) { + Map map = new HashMap<>(); + String version = material.getVersion(); + if (version == null) { + version = ""; + } + String title = ""; + title = material.getMname() + ",规格型号: " + version; + map.put("title", title); + map.put("id", material.getId()); + result.add(map); + } + }else if(inventoryList != null){ + for (Inventory inventory : inventoryList) { + Map map = new HashMap<>(); + String version = inventory.getVersion(); + if (version == null) { + version = ""; + } + String title = ""; + title = inventory.getMname() + ",规格型号: " + version+",库存数量:"+inventory.getUnit() +":"+inventory.getQuantity(); + // 获取对应拆单库存处理记录 + SplitInventory splitInventoryByIid = splitUnitMapper.findSplitInventoryByIid(inventory.getId()); + if(splitInventoryByIid != null){ + // 如果不为空 + + // 获取对应拆单信息 + SplitInfo splitInfoById = splitUnitMapper.findSplitInfoById(splitInventoryByIid.getSid()); + title +=","+splitInfoById.getNewUnit()+":"+splitInventoryByIid.getSaveQuantity(); + } + map.put("title", title); + map.put("id", inventory.getId()); + result.add(map); } - - String title = material.getMname() + ",规格型号: " + version; - map.put("title", title); - map.put("id", material.getId()); - result.add(map); } return result; } /** * 用于构造树结构(通过物料名称搜索) + * * @param list 树列表 * @return */ - public List buildTreeForSelectName(List list){ + public List buildTreeForSelectName(List list) { // 定义树结构 List result = new ArrayList<>(); for (int i = 0; i < list.size(); i++) { // 构造为jsonObject类 JSONObject jsonObject = new JSONObject((Map) list.get(i)); JSONArray children = jsonObject.getJSONArray("children"); - if(children.size() > 0){ + if (children.size() > 0) { result.add(jsonObject); } } diff --git a/src/main/java/com/dreamchaser/depository_manage/service/impl/QyWxOperationService.java b/src/main/java/com/dreamchaser/depository_manage/service/impl/QyWxOperationService.java index a19eefb7..770514b6 100644 --- a/src/main/java/com/dreamchaser/depository_manage/service/impl/QyWxOperationService.java +++ b/src/main/java/com/dreamchaser/depository_manage/service/impl/QyWxOperationService.java @@ -1540,7 +1540,7 @@ public class QyWxOperationService { detail_list_control_info_outNumber.put("title",detail_list_control_info_title_list_outNumber); Map detail_list_control_info_value_outNumber = new HashMap<>(); - detail_list_control_info_value_outNumber.put("new_number",recordMin.getQuantity().toString()); + detail_list_control_info_value_outNumber.put("new_number",recordMin.getQuantity().toString() + materialById.getQuantity()); detail_list_control_info_outNumber.put("value",detail_list_control_info_value_outNumber); // 物料名称 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 366a93c2..5863fd03 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 @@ -97,6 +97,8 @@ public class SplitUnitServiceImpl implements SplitUnitService { // 定义库存拆单记录 SplitInventory splitInventory = null; + // 定义对应的库存记录 + Inventory inventory = null; // 用于存储拆单库存处理操作的数据 Map paramForInsertSplitInventory = new HashMap<>(); paramForInsertSplitInventory.put("sid",splitInfoForUnit.getId()); @@ -104,14 +106,20 @@ public class SplitUnitServiceImpl implements SplitUnitService { paramForInsertSplitInventory.put("iid",iid); // 查询当前库存是否有该拆单的处理记录 splitInventory = splitUnitMapper.findSplitInventoryByIidAndSid(paramForInsertSplitInventory); - }else{ + // 获取对应的库存记录 + inventory = materialMapper.findInventoryById(iid); + } + else{ Map param = new HashMap<>(); param.put("depositoryId", map.get("depositoryId")); param.put("mid", map.get("mid")); // 判断该仓库中有无该物物料 List materialByCondition = materialMapper.findInventory(param); if(materialByCondition.size() > 0){ - paramForInsertSplitInventory.put("iid",materialByCondition.get(0).getId()); + inventory = materialByCondition.get(0); + + paramForInsertSplitInventory.put("iid",inventory.getId()); + // 查询当前库存是否有该拆单的处理记录 splitInventory = splitUnitMapper.findSplitInventoryByIidAndSid(paramForInsertSplitInventory); } @@ -135,15 +143,20 @@ public class SplitUnitServiceImpl implements SplitUnitService { if(realQuantity > splitInfoForUnit.getQuantity()){ // 如果当前入库的数量大于拆单规定的进制数量 - - int quantity_in = realQuantity - (realQuantity % splitInfoForUnit.getQuantity()); + int quantity_in = realQuantity - (realQuantity / splitInfoForUnit.getQuantity()); disposeQuantity += quantity_in; realQuantity = realQuantity - quantity_in * splitInfoForUnit.getQuantity(); } // 设置当前计量单位的库存 splitInventory.setSaveQuantity(realQuantity); // 设置当前计量单位的入库数目 + if(splitInventory.getInQuantity() != null){ + splitInventory.setInQuantity((int) Math.round(splitInventory.getInQuantity() + quantity)); + }else{ + splitInventory.setInQuantity((int)Math.round(quantity)); + + } splitUnitMapper.updateSplitInventory(splitInventory); if(disposeQuantity != 0) { @@ -171,24 +184,11 @@ public class SplitUnitServiceImpl implements SplitUnitService { result += depositoryRecordService.applicationInPlace(map); paramForInsertSplitInventory.put("inQuantity",quantity); + paramForInsertSplitInventory.put("outQuantity",0); paramForInsertSplitInventory.put("saveQuantity",saveQuantity); paramForInsertSplitInventory.put("iid",map.get("newInMid")); splitUnitMapper.addSplitInventory(paramForInsertSplitInventory); } - } else if ("out".equals(type)) { - // 如果是出库操作 - - // 设置出库标志位 - paramForInsertSplitInventory.put("outFlag",1); - - if(splitInventory != null){ - // 如果该物料已经有拆单的数据操作 - - - }else{ - // 如果没有数据操作 - } - } } return result; @@ -343,4 +343,14 @@ public class SplitUnitServiceImpl implements SplitUnitService { return splitUnitMapper.findSplitInfoByMidAndUnit(map); } + /** + * 根据库存id获取对应拆单库存处理记录 + * @param Iid 待查询库存id + * @return + */ + @Override + public SplitInventory findSplitInventoryByIid(Integer Iid) { + return splitUnitMapper.findSplitInventoryByIid(Iid); + } + } diff --git a/src/main/resources/templates/pages/application/application-in_back.html b/src/main/resources/templates/pages/application/application-in_back.html index fa542f49..d0a87a34 100644 --- a/src/main/resources/templates/pages/application/application-in_back.html +++ b/src/main/resources/templates/pages/application/application-in_back.html @@ -26,9 +26,7 @@ .lay-step{ display: none; } - .layui-form-select .layui-input{ - border-style: none; - } +
@@ -84,6 +82,15 @@ class="layui-input" lay-verify="number">
+
+ +
+ +
+
@@ -339,6 +346,31 @@ step.next('#stepForm'); }); + form.on('select()', function (data) { + let elem = data.elem; //得到select原始DOM对象 + let elemId = elem.id; + if(elemId.indexOf("unit") === 0){ + // 如果进行选择的是计量单位 + let id = elemId.split("unit")[1]; + let mid = $("#mid"+id).val(); + let unit = data.value; + let req = {}; + req.newUnit = unit; + req.mid = mid; + $.ajax({ + url:"/split/calcPriceForSplit", + data:JSON.stringify(req), + dataType:"json", + type:"post", + contentType: "application/json;charset=utf-8", + success:function (res) { + let data = res.data; + $("#price"+id).val(data); + } + }); + } + }); + }) diff --git a/src/main/resources/templates/pages/application/application-out.html b/src/main/resources/templates/pages/application/application-out.html index 7732aa3e..e6307ff5 100644 --- a/src/main/resources/templates/pages/application/application-out.html +++ b/src/main/resources/templates/pages/application/application-out.html @@ -42,9 +42,6 @@ display: none; } - .layui-form-select .layui-input { - border-style: none; - }
@@ -121,6 +118,14 @@ class="layui-input" lay-verify="number" required>
+
+ +
+ +
+
@@ -546,6 +551,14 @@ id=` + "quantity" + NewIdNumber + ` class="layui-input" lay-verify="number">
+
+ +
+ +
+
@@ -773,6 +786,14 @@ var idNumber = materialId.name.split("mid")[1]; // 获取物料与条形码的对应关系 var materialAndBarCodeList = d["materialAndBarCodeList"]; + var unit = $("#unit" + idNumber); + unit.empty(); + $("#unit" + idNumber).append(new Option(d.unit, "-1")); + var unitList = d["splitInfoList"]; + for (let i = 0; i < unitList.length; i++) { + $("#unit" + idNumber).append(new Option(unitList[i].newUnit, unitList[i].newUnit)); + } + form.render(); if (materialAndBarCodeList.length > 0) { // 如果有对应的条形码 var barCodeInput = barCodeItem.childNodes[1].childNodes[1]; @@ -904,9 +925,9 @@ }, end: function () { var mid = materialId.value; - if(mid != '') { + if(mid !== '') { $.ajax({ - url: "/material/findMatrialById?mid=" + mid, + url: "/material/findMatrialById?mid=" + mid+"&type=out", type: "get", dataType: 'json', contentType: "application/json;charset=utf-8", @@ -919,6 +940,14 @@ codeValue.value = code; var materialAndBarCodeList = material["materialAndBarCodeList"]; var idNumber = materialId.name.split("mid")[1]; + var unit = $("#unit" + idNumber); + unit.empty(); + $("#unit" + idNumber).append(new Option(material.unit, "-1")); + var unitList = material["splitInfoList"]; + for (let i = 0; i < unitList.length; i++) { + $("#unit" + idNumber).append(new Option(unitList[i].newUnit, unitList[i].newUnit)); + } + form.render(); if (materialAndBarCodeList.length > 0) { // 如果有对应的条形码 var barCodeInput = barCodeItem.childNodes[1].childNodes[1]; @@ -1154,6 +1183,9 @@ var materialItem = materialChildren.childNodes[3].childNodes[1].childNodes; var materialName = materialItem[1]; var materialId = materialName.parentNode.parentNode.childNodes[3]; + var barCodeChildren = parent.childNodes[9]; + // 条形码条码 + var barCodeItem = barCodeChildren.childNodes[3]; var req = {}; req.mname = data; $.ajax({ @@ -1175,7 +1207,46 @@ materialName.value = ""; return false; } else { + var idNumber = materialId.name.split("mid")[1]; var material = d.data[0]; + var unit = $("#unit" + idNumber); + unit.empty(); + $("#unit" + idNumber).append(new Option(material.unit, "-1")); + var unitList = material["splitInfoList"]; + if(unitList !== null && unitList != undefined){ + for (let i = 0; i < unitList.length; i++) { + $("#unit" + idNumber).append(new Option(unitList[i].newUnit, unitList[i].newUnit)); + } + form.render(); + } + var materialAndBarCodeList = material["materialAndBarCodeList"]; + if (materialAndBarCodeList.length > 0) { + // 如果有对应的条形码 + var barCodeInput = barCodeItem.childNodes[1].childNodes[1]; + var barCodeImg = barCodeItem.childNodes[1].childNodes[3]; + var id = barCodeInput.id; + $("#" + id).remove(); + $("#barCode" + idNumber).empty(); + var barCode = $("#barCode" + idNumber); + if (barCode.length > 0) { + barCode.empty(); + } else { + var barCodeSelect = ` + `; + $("#" + barCodeImg.id).before(barCodeSelect); + } + form.render(); + $.each(materialAndBarCodeList, function (index, item) { + $("#barCode" + idNumber).append(new Option(item.bmcode, item.id));//往下拉菜单里添加元素 + }); + form.render(); + } else { + var barCode = $("#barCode" + idNumber); + if (barCode.length > 0) { + barCode.empty(); + } + } materialName.value = material.mname; materialId.value = material.id; codeValue.value = material.code; @@ -1223,10 +1294,19 @@ var data = d.data; if (data !== null) { materialName.value = data.mname; - materialId.value = data.id; + materialId.value = data.iid; materialCode.value = data.mcode; var barCodeInput = barCodeItem.childNodes[1].childNodes[1]; barCodeInput.value = result; + var idNumber = materialId.name.split("mid")[1]; + var unit = $("#unit" + idNumber); + unit.empty(); + $("#unit" + idNumber).append(new Option(data.unit, "-1")); + var unitList = data["splitInfoList"]; + for (let i = 0; i < unitList.length; i++) { + $("#unit" + idNumber).append(new Option(unitList[i].newUnit, unitList[i].newUnit)); + } + form.render(); } else { // 如果没有对应关系 layer.msg("对于编码:" + result + ",并未发现对应的物料", { @@ -1325,6 +1405,7 @@ MaterialQuantityIsTrue = function (obj) { var id = obj.id.split("quantity")[1]; var mcode = $("#code" + id).val(); // 获取到当前输入的物料编码 + var unit = $("#unit"+id).val(); if (mcode === "" || mcode === undefined || mcode === null) { layer.msg("请输入物料的正确编码!", {icon: 0, time: 500}, function () { $("#quantity" + id).val("") @@ -1335,6 +1416,7 @@ var req = {}; req.mcode = mcode; req.quantity = val; + req.unit = unit; $.ajax({ url: "/material/MaterialQuantityIsTrue", type: "post", diff --git a/src/main/resources/templates/pages/application/application-out_min-mobile.html b/src/main/resources/templates/pages/application/application-out_min-mobile.html index 5749eaa3..dda0cb0e 100644 --- a/src/main/resources/templates/pages/application/application-out_min-mobile.html +++ b/src/main/resources/templates/pages/application/application-out_min-mobile.html @@ -70,7 +70,7 @@ lis.push('
' + '

物料名称:' + data[i].mname + '

' + '

物料编码:' + data[i].mcode + '

' + - '

出库数量:' + data[i].quantity + '

' + + '

出库数量:' + data[i].showQuantity + '

' + '

生产日期:' + producedDate + '

' + '

所处库位:' + data[i].pcode + '

' + '
备注:

' + data[i].applyRemark + '

' + @@ -91,7 +91,7 @@ lis.push('
' + '

物料名称:' + data[i].mname + '

' + '

物料编码:' + data[i].mcode + '

' + - '

出库数量:' + data[i].quantity + '

' + + '

出库数量:' + data[i].showQuantity + '

' + '

处理人:' + data[i].checkerName + '

' + '

生产日期:' + producedDate+ '

' + '

所处库位:' + data[i].pcode + '

' + diff --git a/src/main/resources/templates/pages/application/application-out_min.html b/src/main/resources/templates/pages/application/application-out_min.html index bb3fdc1f..c94bd172 100644 --- a/src/main/resources/templates/pages/application/application-out_min.html +++ b/src/main/resources/templates/pages/application/application-out_min.html @@ -74,7 +74,7 @@ {field: 'producedDate', width: 120, title: '生产日期'}, {field: 'depositoryName', width: 120, title: '仓库名称'}, {field: 'pcode', width: 120, title: '库位编码'}, - {field: 'quantity', width: 80, title: '数量', sort: true}, + {field: 'showQuantity', width: 200, title: '数量'}, {field: 'applicantName', width: 150, title: '申请人'}, {field: 'applicantTime', width: 200, title: '申请时间', sort: true}, {field: 'applyRemark', width: 200, title: '备注'}, diff --git a/src/main/resources/templates/pages/application/application-review.html b/src/main/resources/templates/pages/application/application-review.html index c9f3e18c..262a6738 100644 --- a/src/main/resources/templates/pages/application/application-review.html +++ b/src/main/resources/templates/pages/application/application-review.html @@ -48,6 +48,10 @@ 数量 数量 + + 计量单位 + 单位 + 金额 金额 diff --git a/src/main/resources/templates/pages/application/application_multi.html b/src/main/resources/templates/pages/application/application_multi.html index 8491a42e..86cfb6e8 100644 --- a/src/main/resources/templates/pages/application/application_multi.html +++ b/src/main/resources/templates/pages/application/application_multi.html @@ -11,6 +11,21 @@ +
@@ -27,6 +42,12 @@ 入库 出库申请 + +
@@ -70,6 +91,9 @@ {field: 'depositoryName', width: 150, title: '仓库名称'}, {field: 'placeCode', width: 150, title: '库位编码'}, {field: 'quantity', width: 150, title: '数量',edit:'quantity'}, + {field: 'unit', width: 150, title: '计量单位'}, + + // {rowspan: 2,title:'计量单位', width: 200, templet: '#selectUnit'}, {field: 'price', width: 150, title: '单价',edit:'price'}, {field: 'depositoryId', width: 150, title: '仓库编号'}, {field: 'applyRemark', width: 150, title: '备注说明',edit:'applyRemark'}, @@ -80,9 +104,18 @@ limit: 10, page: true, skin: 'line', - done:function () { - $("[data-field='id']").css('display','none'); - $("[data-field='depositoryId']").css('display','none'); + done: function (res, curr, count) { + /* $.each(res['data'], function (i, j) { + let splitInfoList = j['splitInfoList']; + var unitItem = $("[lay-id='currentTableId'] tr:eq(" + (i+1) + ")").children()[7]; + var selectItem = unitItem.childNodes[0].childNodes[2].childNodes[1]; + for (let k = 0; k < splitInfoList.length; k++) { + $(selectItem).append('
'+splitInfoList[k].newUnit+'
') + } + });*/ + + + } }); diff --git a/src/main/resources/templates/pages/depository/table-stock.html b/src/main/resources/templates/pages/depository/table-stock.html index 59023b17..49aab5c1 100644 --- a/src/main/resources/templates/pages/depository/table-stock.html +++ b/src/main/resources/templates/pages/depository/table-stock.html @@ -139,8 +139,7 @@ {field: 'version', width: 200, title: '规格型号'}, {field: 'code', width: 200, title: '存货编码'}, {field: 'typeName', width: 200, title: '物料类型'}, - {field: 'quantity', width: 200, title: '数量', sort: true}, - {field: 'unit', width: 200, title: '计量单位'}, + {field: 'showQuantity', width: 200, title: '数量'}, {field: 'depositoryName', width: 200, title: '仓库名称'}, {field: 'depositoryCode', width: 200, title: '仓库编码'}, {title: '所处库位', width: 200, templet: '#selectManager', align: "center"}, diff --git a/src/main/resources/templates/pages/scanQrCode/ScanBarOrQrCodeOut.html b/src/main/resources/templates/pages/scanQrCode/ScanBarOrQrCodeOut.html index 16bf0d52..832daf78 100644 --- a/src/main/resources/templates/pages/scanQrCode/ScanBarOrQrCodeOut.html +++ b/src/main/resources/templates/pages/scanQrCode/ScanBarOrQrCodeOut.html @@ -54,7 +54,7 @@ var barCode = null; layui.$(function () { - parent.parent.parent.wx.scanQRCode({ + /* parent.parent.parent.wx.scanQRCode({ desc: 'scanQRCode desc', needResult: 1, // 默认为0,扫描结果由企业微信处理,1则直接返回扫描结果, scanType: ["barCode", "qrCode"], // 可以指定扫二维码还是条形码(一维码),默认二者都有 @@ -73,7 +73,10 @@ } - }); + });*/ + var req = {}; + req.qrCode = "1605487077042200576"; + outboundLogic(req); }); diff --git a/src/main/resources/templates/pages/warehouse/depository-out.html b/src/main/resources/templates/pages/warehouse/depository-out.html index 62a3c4c5..4ed19131 100644 --- a/src/main/resources/templates/pages/warehouse/depository-out.html +++ b/src/main/resources/templates/pages/warehouse/depository-out.html @@ -157,7 +157,7 @@ if (data.state != '') { req.state = data.state; } - req.parentId = parentId + req.parentId = parentId; //执行搜索重载 table.reload('currentTableId', { @@ -429,14 +429,14 @@ } } }) - } else if (obj.event == 'manager') { + } else if (obj.event === 'manager') { layer.open({ type: 2, title: '仓管员信息', shadeClose: true, shade: false, maxmin: true, //开启最大化最小化按钮 - area: ['893px', '600px'], + area: ['70%', '70%'], content: '/ManagerView?id=' + data.id }); } diff --git a/target/classes/com/dreamchaser/depository_manage/mapper/DepositoryRecordMapper.xml b/target/classes/com/dreamchaser/depository_manage/mapper/DepositoryRecordMapper.xml index ef08dc16..48d4825d 100644 --- a/target/classes/com/dreamchaser/depository_manage/mapper/DepositoryRecordMapper.xml +++ b/target/classes/com/dreamchaser/depository_manage/mapper/DepositoryRecordMapper.xml @@ -92,6 +92,7 @@ + @@ -141,7 +142,7 @@ aorid,mid,mname,depositoryId,dname,applicantId,applicantTime,applyRemark,aorcode,aorpirce,aorquantity,departmenthead,departmentheadPass,departmentHeadTime,departmentheadMessage, - depositoryManager,depositoryManagerPass,depositoryManagerTime,depositoryManagerMessage,aorstate,istransfer,mcode,placeId,pass + depositoryManager,depositoryManagerPass,depositoryManagerTime,depositoryManagerMessage,aorstate,istransfer,mcode,placeId,pass,aormUnit diff --git a/target/classes/com/dreamchaser/depository_manage/mapper/MaterialMapper.xml b/target/classes/com/dreamchaser/depository_manage/mapper/MaterialMapper.xml index dd09a9e6..1e6bd548 100644 --- a/target/classes/com/dreamchaser/depository_manage/mapper/MaterialMapper.xml +++ b/target/classes/com/dreamchaser/depository_manage/mapper/MaterialMapper.xml @@ -658,6 +658,21 @@ + + + diff --git a/target/classes/com/dreamchaser/depository_manage/mapper/SplitUnitMapper.xml b/target/classes/com/dreamchaser/depository_manage/mapper/SplitUnitMapper.xml index d1435c6f..1c8e8bf4 100644 --- a/target/classes/com/dreamchaser/depository_manage/mapper/SplitUnitMapper.xml +++ b/target/classes/com/dreamchaser/depository_manage/mapper/SplitUnitMapper.xml @@ -110,6 +110,12 @@ where si.sid = #{sid} + update `split` diff --git a/target/classes/templates/pages/application/application-in_back.html b/target/classes/templates/pages/application/application-in_back.html index fa542f49..d0a87a34 100644 --- a/target/classes/templates/pages/application/application-in_back.html +++ b/target/classes/templates/pages/application/application-in_back.html @@ -26,9 +26,7 @@ .lay-step{ display: none; } - .layui-form-select .layui-input{ - border-style: none; - } +
@@ -84,6 +82,15 @@ class="layui-input" lay-verify="number">
+
+ +
+ +
+
@@ -339,6 +346,31 @@ step.next('#stepForm'); }); + form.on('select()', function (data) { + let elem = data.elem; //得到select原始DOM对象 + let elemId = elem.id; + if(elemId.indexOf("unit") === 0){ + // 如果进行选择的是计量单位 + let id = elemId.split("unit")[1]; + let mid = $("#mid"+id).val(); + let unit = data.value; + let req = {}; + req.newUnit = unit; + req.mid = mid; + $.ajax({ + url:"/split/calcPriceForSplit", + data:JSON.stringify(req), + dataType:"json", + type:"post", + contentType: "application/json;charset=utf-8", + success:function (res) { + let data = res.data; + $("#price"+id).val(data); + } + }); + } + }); + }) diff --git a/target/classes/templates/pages/application/application-out.html b/target/classes/templates/pages/application/application-out.html index 7732aa3e..e6307ff5 100644 --- a/target/classes/templates/pages/application/application-out.html +++ b/target/classes/templates/pages/application/application-out.html @@ -42,9 +42,6 @@ display: none; } - .layui-form-select .layui-input { - border-style: none; - }
@@ -121,6 +118,14 @@ class="layui-input" lay-verify="number" required>
+
+ +
+ +
+
@@ -546,6 +551,14 @@ id=` + "quantity" + NewIdNumber + ` class="layui-input" lay-verify="number">
+
+ +
+ +
+
@@ -773,6 +786,14 @@ var idNumber = materialId.name.split("mid")[1]; // 获取物料与条形码的对应关系 var materialAndBarCodeList = d["materialAndBarCodeList"]; + var unit = $("#unit" + idNumber); + unit.empty(); + $("#unit" + idNumber).append(new Option(d.unit, "-1")); + var unitList = d["splitInfoList"]; + for (let i = 0; i < unitList.length; i++) { + $("#unit" + idNumber).append(new Option(unitList[i].newUnit, unitList[i].newUnit)); + } + form.render(); if (materialAndBarCodeList.length > 0) { // 如果有对应的条形码 var barCodeInput = barCodeItem.childNodes[1].childNodes[1]; @@ -904,9 +925,9 @@ }, end: function () { var mid = materialId.value; - if(mid != '') { + if(mid !== '') { $.ajax({ - url: "/material/findMatrialById?mid=" + mid, + url: "/material/findMatrialById?mid=" + mid+"&type=out", type: "get", dataType: 'json', contentType: "application/json;charset=utf-8", @@ -919,6 +940,14 @@ codeValue.value = code; var materialAndBarCodeList = material["materialAndBarCodeList"]; var idNumber = materialId.name.split("mid")[1]; + var unit = $("#unit" + idNumber); + unit.empty(); + $("#unit" + idNumber).append(new Option(material.unit, "-1")); + var unitList = material["splitInfoList"]; + for (let i = 0; i < unitList.length; i++) { + $("#unit" + idNumber).append(new Option(unitList[i].newUnit, unitList[i].newUnit)); + } + form.render(); if (materialAndBarCodeList.length > 0) { // 如果有对应的条形码 var barCodeInput = barCodeItem.childNodes[1].childNodes[1]; @@ -1154,6 +1183,9 @@ var materialItem = materialChildren.childNodes[3].childNodes[1].childNodes; var materialName = materialItem[1]; var materialId = materialName.parentNode.parentNode.childNodes[3]; + var barCodeChildren = parent.childNodes[9]; + // 条形码条码 + var barCodeItem = barCodeChildren.childNodes[3]; var req = {}; req.mname = data; $.ajax({ @@ -1175,7 +1207,46 @@ materialName.value = ""; return false; } else { + var idNumber = materialId.name.split("mid")[1]; var material = d.data[0]; + var unit = $("#unit" + idNumber); + unit.empty(); + $("#unit" + idNumber).append(new Option(material.unit, "-1")); + var unitList = material["splitInfoList"]; + if(unitList !== null && unitList != undefined){ + for (let i = 0; i < unitList.length; i++) { + $("#unit" + idNumber).append(new Option(unitList[i].newUnit, unitList[i].newUnit)); + } + form.render(); + } + var materialAndBarCodeList = material["materialAndBarCodeList"]; + if (materialAndBarCodeList.length > 0) { + // 如果有对应的条形码 + var barCodeInput = barCodeItem.childNodes[1].childNodes[1]; + var barCodeImg = barCodeItem.childNodes[1].childNodes[3]; + var id = barCodeInput.id; + $("#" + id).remove(); + $("#barCode" + idNumber).empty(); + var barCode = $("#barCode" + idNumber); + if (barCode.length > 0) { + barCode.empty(); + } else { + var barCodeSelect = ` + `; + $("#" + barCodeImg.id).before(barCodeSelect); + } + form.render(); + $.each(materialAndBarCodeList, function (index, item) { + $("#barCode" + idNumber).append(new Option(item.bmcode, item.id));//往下拉菜单里添加元素 + }); + form.render(); + } else { + var barCode = $("#barCode" + idNumber); + if (barCode.length > 0) { + barCode.empty(); + } + } materialName.value = material.mname; materialId.value = material.id; codeValue.value = material.code; @@ -1223,10 +1294,19 @@ var data = d.data; if (data !== null) { materialName.value = data.mname; - materialId.value = data.id; + materialId.value = data.iid; materialCode.value = data.mcode; var barCodeInput = barCodeItem.childNodes[1].childNodes[1]; barCodeInput.value = result; + var idNumber = materialId.name.split("mid")[1]; + var unit = $("#unit" + idNumber); + unit.empty(); + $("#unit" + idNumber).append(new Option(data.unit, "-1")); + var unitList = data["splitInfoList"]; + for (let i = 0; i < unitList.length; i++) { + $("#unit" + idNumber).append(new Option(unitList[i].newUnit, unitList[i].newUnit)); + } + form.render(); } else { // 如果没有对应关系 layer.msg("对于编码:" + result + ",并未发现对应的物料", { @@ -1325,6 +1405,7 @@ MaterialQuantityIsTrue = function (obj) { var id = obj.id.split("quantity")[1]; var mcode = $("#code" + id).val(); // 获取到当前输入的物料编码 + var unit = $("#unit"+id).val(); if (mcode === "" || mcode === undefined || mcode === null) { layer.msg("请输入物料的正确编码!", {icon: 0, time: 500}, function () { $("#quantity" + id).val("") @@ -1335,6 +1416,7 @@ var req = {}; req.mcode = mcode; req.quantity = val; + req.unit = unit; $.ajax({ url: "/material/MaterialQuantityIsTrue", type: "post", diff --git a/target/classes/templates/pages/application/application-out_min-mobile.html b/target/classes/templates/pages/application/application-out_min-mobile.html index 5749eaa3..dda0cb0e 100644 --- a/target/classes/templates/pages/application/application-out_min-mobile.html +++ b/target/classes/templates/pages/application/application-out_min-mobile.html @@ -70,7 +70,7 @@ lis.push('
' + '

物料名称:' + data[i].mname + '

' + '

物料编码:' + data[i].mcode + '

' + - '

出库数量:' + data[i].quantity + '

' + + '

出库数量:' + data[i].showQuantity + '

' + '

生产日期:' + producedDate + '

' + '

所处库位:' + data[i].pcode + '

' + '
备注:

' + data[i].applyRemark + '

' + @@ -91,7 +91,7 @@ lis.push('
' + '

物料名称:' + data[i].mname + '

' + '

物料编码:' + data[i].mcode + '

' + - '

出库数量:' + data[i].quantity + '

' + + '

出库数量:' + data[i].showQuantity + '

' + '

处理人:' + data[i].checkerName + '

' + '

生产日期:' + producedDate+ '

' + '

所处库位:' + data[i].pcode + '

' + diff --git a/target/classes/templates/pages/application/application-out_min.html b/target/classes/templates/pages/application/application-out_min.html index bb3fdc1f..c94bd172 100644 --- a/target/classes/templates/pages/application/application-out_min.html +++ b/target/classes/templates/pages/application/application-out_min.html @@ -74,7 +74,7 @@ {field: 'producedDate', width: 120, title: '生产日期'}, {field: 'depositoryName', width: 120, title: '仓库名称'}, {field: 'pcode', width: 120, title: '库位编码'}, - {field: 'quantity', width: 80, title: '数量', sort: true}, + {field: 'showQuantity', width: 200, title: '数量'}, {field: 'applicantName', width: 150, title: '申请人'}, {field: 'applicantTime', width: 200, title: '申请时间', sort: true}, {field: 'applyRemark', width: 200, title: '备注'}, diff --git a/target/classes/templates/pages/application/application-review.html b/target/classes/templates/pages/application/application-review.html index c9f3e18c..262a6738 100644 --- a/target/classes/templates/pages/application/application-review.html +++ b/target/classes/templates/pages/application/application-review.html @@ -48,6 +48,10 @@ 数量 数量 + + 计量单位 + 单位 + 金额 金额 diff --git a/target/classes/templates/pages/application/application_multi.html b/target/classes/templates/pages/application/application_multi.html index 8491a42e..86cfb6e8 100644 --- a/target/classes/templates/pages/application/application_multi.html +++ b/target/classes/templates/pages/application/application_multi.html @@ -11,6 +11,21 @@ +
@@ -27,6 +42,12 @@ 入库 出库申请 + +
@@ -70,6 +91,9 @@ {field: 'depositoryName', width: 150, title: '仓库名称'}, {field: 'placeCode', width: 150, title: '库位编码'}, {field: 'quantity', width: 150, title: '数量',edit:'quantity'}, + {field: 'unit', width: 150, title: '计量单位'}, + + // {rowspan: 2,title:'计量单位', width: 200, templet: '#selectUnit'}, {field: 'price', width: 150, title: '单价',edit:'price'}, {field: 'depositoryId', width: 150, title: '仓库编号'}, {field: 'applyRemark', width: 150, title: '备注说明',edit:'applyRemark'}, @@ -80,9 +104,18 @@ limit: 10, page: true, skin: 'line', - done:function () { - $("[data-field='id']").css('display','none'); - $("[data-field='depositoryId']").css('display','none'); + done: function (res, curr, count) { + /* $.each(res['data'], function (i, j) { + let splitInfoList = j['splitInfoList']; + var unitItem = $("[lay-id='currentTableId'] tr:eq(" + (i+1) + ")").children()[7]; + var selectItem = unitItem.childNodes[0].childNodes[2].childNodes[1]; + for (let k = 0; k < splitInfoList.length; k++) { + $(selectItem).append('
'+splitInfoList[k].newUnit+'
') + } + });*/ + + + } }); diff --git a/target/classes/templates/pages/depository/table-stock.html b/target/classes/templates/pages/depository/table-stock.html index 59023b17..49aab5c1 100644 --- a/target/classes/templates/pages/depository/table-stock.html +++ b/target/classes/templates/pages/depository/table-stock.html @@ -139,8 +139,7 @@ {field: 'version', width: 200, title: '规格型号'}, {field: 'code', width: 200, title: '存货编码'}, {field: 'typeName', width: 200, title: '物料类型'}, - {field: 'quantity', width: 200, title: '数量', sort: true}, - {field: 'unit', width: 200, title: '计量单位'}, + {field: 'showQuantity', width: 200, title: '数量'}, {field: 'depositoryName', width: 200, title: '仓库名称'}, {field: 'depositoryCode', width: 200, title: '仓库编码'}, {title: '所处库位', width: 200, templet: '#selectManager', align: "center"}, diff --git a/target/classes/templates/pages/scanQrCode/ScanBarOrQrCodeOut.html b/target/classes/templates/pages/scanQrCode/ScanBarOrQrCodeOut.html index 16bf0d52..832daf78 100644 --- a/target/classes/templates/pages/scanQrCode/ScanBarOrQrCodeOut.html +++ b/target/classes/templates/pages/scanQrCode/ScanBarOrQrCodeOut.html @@ -54,7 +54,7 @@ var barCode = null; layui.$(function () { - parent.parent.parent.wx.scanQRCode({ + /* parent.parent.parent.wx.scanQRCode({ desc: 'scanQRCode desc', needResult: 1, // 默认为0,扫描结果由企业微信处理,1则直接返回扫描结果, scanType: ["barCode", "qrCode"], // 可以指定扫二维码还是条形码(一维码),默认二者都有 @@ -73,7 +73,10 @@ } - }); + });*/ + var req = {}; + req.qrCode = "1605487077042200576"; + outboundLogic(req); }); diff --git a/target/classes/templates/pages/warehouse/depository-out.html b/target/classes/templates/pages/warehouse/depository-out.html index 62a3c4c5..4ed19131 100644 --- a/target/classes/templates/pages/warehouse/depository-out.html +++ b/target/classes/templates/pages/warehouse/depository-out.html @@ -157,7 +157,7 @@ if (data.state != '') { req.state = data.state; } - req.parentId = parentId + req.parentId = parentId; //执行搜索重载 table.reload('currentTableId', { @@ -429,14 +429,14 @@ } } }) - } else if (obj.event == 'manager') { + } else if (obj.event === 'manager') { layer.open({ type: 2, title: '仓管员信息', shadeClose: true, shade: false, maxmin: true, //开启最大化最小化按钮 - area: ['893px', '600px'], + area: ['70%', '70%'], content: '/ManagerView?id=' + data.id }); }