From 4aefe2917f1b2422152b28949639e073cd97e1e6 Mon Sep 17 00:00:00 2001 From: erdanergou Date: Sat, 5 Nov 2022 17:16:24 +0800 Subject: [PATCH] =?UTF-8?q?=E5=AE=8C=E6=88=90=E5=BA=93=E5=AD=98=E7=9B=98?= =?UTF-8?q?=E7=82=B9=E5=8A=9F=E8=83=BD?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../depository_manage/config/PortConfig.java | 8 +- .../controller/DepositoryController.java | 55 +- .../DepositoryRecordController.java | 36 +- .../controller/MaterialController.java | 83 +-- .../controller/PageController.java | 28 +- .../controller/QyWxOperationController.java | 39 +- .../controller/StockTakingController.java | 33 +- .../depository_manage/entity/StockTaking.java | 12 + .../mapper/StockTakingMapper.java | 15 + .../mapper/StockTakingMapper.xml | 46 +- .../depository_manage/pojo/StockTakingP.java | 12 + .../service/StockTakingService.java | 19 +- .../impl/DepositoryRecordServiceImpl.java | 24 +- .../service/impl/QyWxOperationService.java | 484 +++++++++++++- .../service/impl/StockTakingServiceImpl.java | 617 +++++++++++++----- src/main/resources/application-test.yml | 4 +- .../pages/application/application-in.html | 22 +- .../application/application-in_back.html | 6 +- .../application-in_scanQrCode.html | 118 +++- .../pages/application/application-out.html | 27 +- .../templates/pages/chart/chart-in_back.html | 31 +- .../templates/pages/chart/chart-out_back.html | 32 +- .../templates/pages/chart/chart-stock.html | 468 ++++++++----- .../pages/chart/chart-stock_back.html | 36 +- .../pages/depository/table-stock.html | 1 + .../pages/stockTaking/stockTaking.html | 47 +- .../stockTaking/stockTakingComplete.html | 108 +-- .../pages/stockTaking/stockTakingReview.html | 8 +- .../pages/stockTaking/stockTakingView.html | 55 +- .../pages/stockTaking/stockTransfer.html | 4 +- .../dreamchaser/depository_manage/Test.java | 5 +- target/classes/.restartTriggerFile | 0 .../depository_manage (2).kotlin_module | Bin 16 -> 0 bytes .../spring-configuration-metadata.json | 17 - target/classes/application-test.yml | 4 +- .../mapper/StockTakingMapper.xml | 46 +- .../pages/application/application-in.html | 22 +- .../application/application-in_back.html | 6 +- .../application-in_scanQrCode.html | 118 +++- .../pages/application/application-out.html | 27 +- .../templates/pages/chart/chart-in_back.html | 31 +- .../templates/pages/chart/chart-out_back.html | 32 +- .../templates/pages/chart/chart-stock.html | 468 ++++++++----- .../pages/chart/chart-stock_back.html | 36 +- .../pages/depository/table-stock.html | 1 + .../pages/stockTaking/stockTaking.html | 47 +- .../stockTaking/stockTakingComplete.html | 306 +++++++++ .../pages/stockTaking/stockTakingReview.html | 8 +- .../pages/stockTaking/stockTakingView.html | 55 +- .../pages/stockTaking/stockTransfer.html | 4 +- 50 files changed, 2838 insertions(+), 873 deletions(-) delete mode 100644 target/classes/.restartTriggerFile delete mode 100644 target/classes/META-INF/depository_manage (2).kotlin_module delete mode 100644 target/classes/META-INF/spring-configuration-metadata.json create mode 100644 target/classes/templates/pages/stockTaking/stockTakingComplete.html diff --git a/src/main/java/com/dreamchaser/depository_manage/config/PortConfig.java b/src/main/java/com/dreamchaser/depository_manage/config/PortConfig.java index 25c93712..89d1068a 100644 --- a/src/main/java/com/dreamchaser/depository_manage/config/PortConfig.java +++ b/src/main/java/com/dreamchaser/depository_manage/config/PortConfig.java @@ -24,10 +24,10 @@ import java.util.Map; @Data public class PortConfig { // 接口地址 - public static String external_url = "http://172.20.2.87:39168"; -// public static String external_url = "http://127.0.0.1:39168"; - public static String external_url_6666 = "http://172.20.2.87:6666"; -// public static String external_url_6666 = "http://127.0.0.1:6666"; +// public static String external_url = "http://172.20.2.87:39168"; + public static String external_url = "http://127.0.0.1:39168"; +// public static String external_url_6666 = "http://172.20.2.87:6666"; + public static String external_url_6666 = "http://127.0.0.1:6666"; /** 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 13e1e8d6..1de00259 100644 --- a/src/main/java/com/dreamchaser/depository_manage/controller/DepositoryController.java +++ b/src/main/java/com/dreamchaser/depository_manage/controller/DepositoryController.java @@ -734,30 +734,38 @@ public class DepositoryController { Map show_data = new HashMap<>(); List days = getLastTimeInterval(); List drCountbyDrName = new ArrayList<>(); - while (it.hasNext()) { - int i; - Object key = it.next(); - for (i = days.size() - 1; i > 0; i--) { - // 遍历 Map并计算各仓库的入库数 - if (i == days.size() - 1) { - depositoryName.add(key.toString()); - } - Integer val = (Integer) depositoryAllNameAndId.get(key); - // 获取一段时间内的库存额度 - // 测试 - Double depositoryRecordByDateAndType1 = depositoryRecordService.findApplicationRecordByDate(days.get(i), days.get(i - 1), Integer.parseInt(type), val); - drCountbyDrName.add(depositoryRecordByDateAndType1); - if (i == 2 && flag) { - yesterdayData.put(key.toString(), depositoryRecordByDateAndType1); + + + while (it.hasNext()) { + int i; + Object key = it.next(); + for (i = days.size() - 1; i > 0; i--) { + // 遍历 Map并计算各仓库的入库数 + if (i == days.size() - 1) { + depositoryName.add(key.toString()); + } + Integer val = (Integer) depositoryAllNameAndId.get(key); + // 获取一段时间内的库存额度 + // 测试 + Double depositoryRecordByDateAndType1 = depositoryRecordService.findApplicationRecordByDate(days.get(i), days.get(i - 1), Integer.parseInt(type), val); + drCountbyDrName.add(depositoryRecordByDateAndType1); + if (i == 2 && flag) { + yesterdayData.put(key.toString(), depositoryRecordByDateAndType1); + } } + Collections.reverse(drCountbyDrName); + show_data.put(key.toString(), ((ArrayList) drCountbyDrName).clone()); + drCountbyDrName.clear(); } - Collections.reverse(drCountbyDrName); - show_data.put(key.toString(), ((ArrayList) drCountbyDrName).clone()); - drCountbyDrName.clear(); - } - Map depository_data = new HashMap<>(); depository_data.put("data", show_data); + depository_data.put("week", show_weekday); + depository_data.put("depository_name", depositoryName); + if ("0".equals(type)) { + // 如果是获取库存 + depository_data.put("ThisWeekInventory", getThisWeekInventoryByDName(depositoryService, depositoryRecordService, userByPort)); + depository_data.put("BeforeInventory", getBeforeInventoryByDName(depositoryService, depositoryRecordService, userByPort)); + } return depository_data; } @@ -865,7 +873,14 @@ public class DepositoryController { } Map depository_data = new HashMap<>(); + if ("0".equals(type)) { + // 如果是获取库存 + depository_data.put("ThisWeekInventory", getThisWeekInventoryByDName(depositoryService, depositoryRecordService, userByPort)); + depository_data.put("BeforeInventory", getBeforeInventoryByDName(depositoryService, depositoryRecordService, userByPort)); + } depository_data.put("data", show_data); + depository_data.put("week", show_weekday); + depository_data.put("depository_name", depositoryName); return depository_data; } 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 f664cca5..76e2ec23 100644 --- a/src/main/java/com/dreamchaser/depository_manage/controller/DepositoryRecordController.java +++ b/src/main/java/com/dreamchaser/depository_manage/controller/DepositoryRecordController.java @@ -292,12 +292,12 @@ public class DepositoryRecordController { List departmentHeadByUsers = findDepartmentHeadByUser(userToken); StringBuilder departmentHeadId = new StringBuilder(); StringBuilder departMentHeadQyWxName = new StringBuilder(); - /*for (int i = 0; i < departmentHeadByUsers.size(); i++) { + for (int i = 0; i < departmentHeadByUsers.size(); i++) { departmentHeadId.append(departmentHeadByUsers.get(i).getId()).append(","); departMentHeadQyWxName.append(departmentHeadByUsers.get(i).getWorkwechat()+","); - }*/ + } departmentHeadId.append("78").append(","); - departMentHeadQyWxName.append("PangFuZhen").append(","); +// departMentHeadQyWxName.append("PangFuZhen").append(","); map.put("departmenthead",departmentHeadId.toString()); List params = (List) map.get("params"); Integer integer = 0; @@ -604,12 +604,12 @@ public class DepositoryRecordController { List departmentHeadByUsers = findDepartmentHeadByUser(userToken); StringBuilder departmentHeadId = new StringBuilder(); StringBuilder departMentHeadQyWxName = new StringBuilder(); - /*for (int i = 0; i < departmentHeadByUsers.size(); i++) { + for (int i = 0; i < departmentHeadByUsers.size(); i++) { departmentHeadId.append(departmentHeadByUsers.get(i).getId()).append(","); departMentHeadQyWxName.append(departmentHeadByUsers.get(i).getWorkwechat()+","); - }*/ - departmentHeadId.append("78").append(","); - departMentHeadQyWxName.append("PangFuZhen").append(","); + } +// departmentHeadId.append("78").append(","); +// departMentHeadQyWxName.append("PangFuZhen").append(","); map.put("departmenthead",departmentHeadId.toString()); map.put("departMentHeadQyWxName",departMentHeadQyWxName.toString()); List params = (List) map.get("params"); @@ -782,12 +782,12 @@ public class DepositoryRecordController { List departmentHeadByUsers = findDepartmentHeadByUser(userToken); StringBuilder departmentHeadId = new StringBuilder(); StringBuilder departMentHeadQyWxName = new StringBuilder(); - /*for (int i = 0; i < departmentHeadByUsers.size(); i++) { + for (int i = 0; i < departmentHeadByUsers.size(); i++) { departmentHeadId.append(departmentHeadByUsers.get(i).getId()).append(","); departMentHeadQyWxName.append(departmentHeadByUsers.get(i).getWorkwechat()+","); - }*/ - departmentHeadId.append("78").append(","); - departMentHeadQyWxName.append("PangFuZhen").append(","); + } +// departmentHeadId.append("78").append(","); +// departMentHeadQyWxName.append("PangFuZhen").append(","); map.put("departmenthead",departmentHeadId.toString()); Integer res = depositoryRecordService.insertApplicationOutRecord(map,userToken); // 插入主订单 if(res == 1){ // 如果插入成功 @@ -889,12 +889,12 @@ public class DepositoryRecordController { List departmentHeadByUsers = findDepartmentHeadByUser(userToken); StringBuilder departmentHeadId = new StringBuilder(); StringBuilder departMentHeadQyWxName = new StringBuilder(); - /*for (int i = 0; i < departmentHeadByUsers.size(); i++) { - departmentHeadId.append(departmentHeadByUsers.get(i).getId()).append(","); - departMentHeadQyWxName.append(departmentHeadByUsers.get(i).getWorkwechat()+","); - }*/ - departmentHeadId.append("78").append(","); - departMentHeadQyWxName.append("PangFuZhen").append(","); + for (int i = 0; i < departmentHeadByUsers.size(); i++) { + departmentHeadId.append(departmentHeadByUsers.get(i).getId()).append(","); + departMentHeadQyWxName.append(departmentHeadByUsers.get(i).getWorkwechat()+","); + } +// departmentHeadId.append("78").append(","); +// departMentHeadQyWxName.append("PangFuZhen").append(","); mainRecord.put("applicantId",userToken.getId()); mainRecord.put("applyRemark",""); mainRecord.put("quantity",sumQuantity.toString()); @@ -915,7 +915,7 @@ public class DepositoryRecordController { Integer place = 0; // 用于标志该库位是否可以出库 Boolean flag = false; - if(s.length > 1){ + if(s.length >= 1){ // 获取当前仓库所有库位 List placeByDid = placeService.findPlaceByDid(depositoryId); // 遍历当前物料存储的库位 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 b30564e7..39ca0c27 100644 --- a/src/main/java/com/dreamchaser/depository_manage/controller/MaterialController.java +++ b/src/main/java/com/dreamchaser/depository_manage/controller/MaterialController.java @@ -747,51 +747,59 @@ public class MaterialController { Map result = new HashMap<>(); List materialList = new ArrayList<>(); String placeId = (String) map.get("placeId"); + // 用于存储没有对应关系的条形码 + List barCodeListByNoMaterial = new ArrayList<>(); for (int i = 0; i < barCodeList.size(); i++) { // 获取具体的条形码 String barCode = barCodeList.getString(i); // 获取条形码与物料的映射 MaterialAndBarCode materialByBarCode = materialService.findMaterialByBarCode(barCode); - Boolean isExist = false; - Map param = new HashMap<>(); - param.put("depositoryId", map.get("depositoryId")); - param.put("code", materialByBarCode.getMcode()); - List inventory = materialService.findInventory(param); - MaterialP mp = new MaterialP(); - if (inventory.size() > 0) { - // 如果存在该物料 - MaterialP materialP = inventory.get(0); - Map paramByBarCode = new HashMap<>(); - paramByBarCode.put("mcode", materialP.getCode()); - List materialByBarCodeByCondition = materialService.findMaterialByBarCodeByCondition(paramByBarCode); - materialP.setMaterialAndBarCodeList(materialByBarCodeByCondition); - isExist = true; - if (!"0".equals(placeId)) { - // 如果不是默认库位 - // 获取物料与库位的对应关系 - MaterialAndPlace placeAndMaterialByMidAndPid = placeService.findPlaceAndMaterialByMidAndPid(ObjectFormatUtil.toInteger(placeId), materialP.getId()); - if (placeAndMaterialByMidAndPid == null) { - isExist = false; - }else{ - mp.setQuantity(placeAndMaterialByMidAndPid.getQuantity()); - } - } else { - // 获取物料与库位的对应关系 - MaterialAndPlace placeAndMaterialByMidAndPid = placeService.findPlaceAndMaterialByMidAndPid(0, materialP.getId()); - if (placeAndMaterialByMidAndPid == null) { - isExist = false; - }else{ mp.setQuantity(placeAndMaterialByMidAndPid.getQuantity()); + if (materialByBarCode != null) { + // 如果存在对应关系 + Boolean isExist = false; + Map param = new HashMap<>(); + param.put("depositoryId", map.get("depositoryId")); + param.put("code", materialByBarCode.getMcode()); + List inventory = materialService.findInventory(param); + MaterialP mp = new MaterialP(); + if (inventory.size() > 0) { + // 如果存在该物料 + MaterialP materialP = inventory.get(0); + Map paramByBarCode = new HashMap<>(); + paramByBarCode.put("mcode", materialP.getCode()); + List materialByBarCodeByCondition = materialService.findMaterialByBarCodeByCondition(paramByBarCode); + materialP.setMaterialAndBarCodeList(materialByBarCodeByCondition); + isExist = true; + if (!"0".equals(placeId)) { + // 如果不是默认库位 + // 获取物料与库位的对应关系 + MaterialAndPlace placeAndMaterialByMidAndPid = placeService.findPlaceAndMaterialByMidAndPid(ObjectFormatUtil.toInteger(placeId), materialP.getId()); + if (placeAndMaterialByMidAndPid == null) { + isExist = false; + } else { + mp.setQuantity(placeAndMaterialByMidAndPid.getQuantity()); + } + } else { + // 获取物料与库位的对应关系 + MaterialAndPlace placeAndMaterialByMidAndPid = placeService.findPlaceAndMaterialByMidAndPid(0, materialP.getId()); + if (placeAndMaterialByMidAndPid == null) { + isExist = false; + } else { + mp.setQuantity(placeAndMaterialByMidAndPid.getQuantity()); + } } - } - mp = materialP; + mp = materialP; - } - if (isExist) { - materialList.add(mp); + } + if (isExist) { + materialList.add(mp); + } + } else { + // 如果当前条形码不存对应物料 + barCodeListByNoMaterial.add(barCode); } } - if (flag) { String scanQrCodeValue = redisTemplate.opsForValue().get("scanQrCodeValue" + userByPort.getNumber()).toString(); redisTemplate.delete("scanQrCodeValue" + userByPort.getNumber()); @@ -839,6 +847,7 @@ public class MaterialController { } } result.put("materialList", materialList); + result.put("barCodeListByNoMaterial",barCodeListByNoMaterial); return new RestResponse(result); } @@ -974,7 +983,7 @@ public class MaterialController { if (placeAndMaterialByMidAndPid == null) { // 如果当前库位没有该物料 mp = null; - }else{ + } else { mp.setQuantity(placeAndMaterialByMidAndPid.getQuantity()); } @@ -984,7 +993,7 @@ public class MaterialController { if (placeAndMaterialByMidAndPid == null) { // 如果当前库位没有该物料 mp = null; - }else{ + } else { mp.setQuantity(placeAndMaterialByMidAndPid.getQuantity()); } 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 9edba8bc..465ef4ca 100644 --- a/src/main/java/com/dreamchaser/depository_manage/controller/PageController.java +++ b/src/main/java/com/dreamchaser/depository_manage/controller/PageController.java @@ -1315,7 +1315,7 @@ public class PageController { public ModelAndView StockTakingReview(Integer id,HttpServletRequest request){ ModelAndView mv = new ModelAndView(); UserByPort userToken = (UserByPort) request.getAttribute("userToken"); - mv.setViewName("pages/stockTaking/stockTakingReview"); + // 获取盘点记录主表 StockTaking stockTaking = stockTakingService.findStockTakingById(id); // 获取主表下的所有子表 @@ -1357,6 +1357,17 @@ public class PageController { stp.setDepositoryName(location.toString()); mv.addObject("mainRecord",stp); mv.addObject("recordChild",stockTakingChildPByMainId); + Integer departmentManagerState = stp.getDepartmentManagerState(); + if(Integer.compare(departmentManagerState,3) == 0){ + // 如果当前盘点记录未经过负责人处理 + + // 跳转到审核页面 + mv.setViewName("pages/stockTaking/stockTakingReview"); + }else{ + + // 跳转到处理页面 + mv.setViewName("pages/stockTaking/stockTakingComplete"); + } return mv; } @@ -1375,7 +1386,16 @@ public class PageController { // 设置发起时间 stp.setCreateTime(DateUtil.TimeStampToDateTime(stockTaking.getCreateTime())); + // 设置审核时间 + stp.setReviewTime(""); + // 获取审核时间 + Long reviewTime = stockTaking.getReviewTime(); + if(reviewTime != null){ + // 如果已经完成审核 + stp.setReviewTime(DateUtil.TimeStampToDateTime(reviewTime)); + } + // 设置完成时间 stp.setCompleteTime(""); // 获取完成时间 Long completeTime = stockTaking.getCompleteTime(); @@ -1384,6 +1404,7 @@ public class PageController { stp.setCompleteTime(DateUtil.TimeStampToDateTime(completeTime)); } + // 获取申请人 UserByPort userByPort = FindUserById(stockTaking.getOriginator(),userToken); // 设置盘点发起人姓名 @@ -1850,6 +1871,7 @@ public class PageController { param.put("mid",mp.getId()); param.put("mname",mp.getMname()); param.put("code",mp.getCode()); + param.put("price",mp.getPrice()); param.put("version",mp.getVersion()); List materialByBarCodeByCondition = materialService.findMaterialByBarCodeByCondition(param); param.put("materialAndBarCodeList",materialByBarCodeByCondition); @@ -1969,8 +1991,8 @@ public class PageController { // 获取当前物料在其库位中的数量 MaterialAndPlace placeAndMaterialByMidAndPid = placeService.findPlaceAndMaterialByMidAndPid(placeId, stcp.getMid()); - // 获取盘点数量 - Integer newInventory = stcp.getNewInventory(); + // 获取盈亏数量 + Integer newInventory = stcp.getInventory(); // 获取当前盘点后超出的数量 Integer inventory = newInventory + placeById.getQuantity() - placeById.getMax(); diff --git a/src/main/java/com/dreamchaser/depository_manage/controller/QyWxOperationController.java b/src/main/java/com/dreamchaser/depository_manage/controller/QyWxOperationController.java index 902cfe9c..8fd0cbd5 100644 --- a/src/main/java/com/dreamchaser/depository_manage/controller/QyWxOperationController.java +++ b/src/main/java/com/dreamchaser/depository_manage/controller/QyWxOperationController.java @@ -170,24 +170,40 @@ public class QyWxOperationController { String result = ""; - if("pass".equals(clickKey)){ + if(clickKey.contains("pass")){ result = "通过"; }else{ result = "驳回"; } if(templateCardType.contains("StockTaking")){ - // 如果点击的是库存盘点审核 - - // 开启线程处理审批 - new Thread(new Runnable() { - @Override - public void run() { - stockTakingService.reviewByQyWx(templateCard); - } - }).start(); + // 如果点击的是库存盘点有关的卡片 + + String stockTakingType =templateCard.getEventKey().split("_")[1]; + + if(stockTakingType.contains("review")) { + // 开启线程处理审批 + new Thread(new Runnable() { + @Override + public void run() { + Map reviewByQyWx = stockTakingService.reviewByQyWx(templateCard); + if(reviewByQyWx.containsKey("errMsg")){ + + } + } + }).start(); + }else if(stockTakingType.contains("complete")){ + // 开启线程 + new Thread(new Runnable() { + @Override + public void run() { + stockTakingService.completeStockTakingByQyWx(templateCard); + } + }).start(); + } - }else if(templateCardType.contains("out")){ + } + else if(templateCardType.contains("out")){ // 如果点击的是出库审核 // 开启线程处理审批 new Thread(new Runnable() { @@ -197,6 +213,7 @@ public class QyWxOperationController { } }).start(); } + // 开启线程更改其他用户卡片模板样式 String finalResult = result; new Thread(new Runnable() { diff --git a/src/main/java/com/dreamchaser/depository_manage/controller/StockTakingController.java b/src/main/java/com/dreamchaser/depository_manage/controller/StockTakingController.java index c37e2fe4..7b1eb470 100644 --- a/src/main/java/com/dreamchaser/depository_manage/controller/StockTakingController.java +++ b/src/main/java/com/dreamchaser/depository_manage/controller/StockTakingController.java @@ -54,13 +54,16 @@ public class StockTakingController { public RestResponse addStockTakingRecord(@RequestBody Map map, HttpServletRequest request){ UserByPort userToken = (UserByPort) request.getAttribute("userToken"); + + List params = (ArrayList) map.get("params"); String departmentManagerId = (String) map.get("departmentManagerId"); // map.put("departmentManager",departmentManagerId); map.put("departmentManager","6235"); + map.put("temp",0); // 用于设置企业微信接收人 StringBuilder QyWxDepartmentManager = new StringBuilder(); - /*String[] split = departmentManagerId.split(","); + String[] split = departmentManagerId.split(","); for (int i = 0; i < split.length; i++) { String s = split[i]; if("".equals(s)){ @@ -68,9 +71,10 @@ public class StockTakingController { } UserByPort departmentManager = PageController.FindUserById(ObjectFormatUtil.toInteger(s), userToken); QyWxDepartmentManager.append(departmentManager.getWorkwechat()+","); - }*/ - QyWxDepartmentManager.append("PangFuZhen").append(","); + } +// QyWxDepartmentManager.append("PangFuZhen").append(","); map.put("state",3); + map.put("departmentManagerState",3); map.remove("departmentManagerId"); map.put("originator",userToken.getId()); String mcode = (String) map.get("code"); @@ -83,6 +87,7 @@ public class StockTakingController { param.put("placeId",map.get("placeId")); param.put("departmentManager",map.get("departmentManager")); param.put("state",3); + param.put("departmentManagerState",3); param.put("originator",userToken.getId()); for (int i = 0; i < params.size(); i++) { Integer temp = ObjectFormatUtil.toInteger(params.get(i)); @@ -93,9 +98,11 @@ public class StockTakingController { param.put("newInventory",map.get("newInventory"+temp)); param.put("takingResult",map.get("takingResult"+temp)); param.put("inventory",map.get("inventory"+temp)); + param.put("temp",temp); success += stockTakingService.insertStockTaking(param); param.remove("id"); } + param.put("temp",map.get("temp")); param.put("mid",map.get("mid")); param.put("barCode",map.get("barCode")); param.put("oldInventory",map.get("oldInventory")); @@ -106,7 +113,7 @@ public class StockTakingController { Object mainId = param.get("mainId"); // 向企业微信发送消息 - JSONObject jsonObject = qyWxOperationService.sendQyWxToStockTakingMessage(QyWxDepartmentManager.toString(), ObjectFormatUtil.toInteger(mainId)); + JSONObject jsonObject = qyWxOperationService.sendQyWxToStockTakingDepartmentManagerMessage(QyWxDepartmentManager.toString(), ObjectFormatUtil.toInteger(mainId)); // 将当前返回结果保存到redis中 Map QyWxMessageMap = new HashMap<>(); QyWxMessageMap.put("MsgId",jsonObject.getString("msgid")); @@ -122,7 +129,7 @@ public class StockTakingController { success += stockTakingService.insertStockTaking(map); // 向企业微信发送消息 Object mainId = map.get("mainId"); - JSONObject jsonObject = qyWxOperationService.sendQyWxToStockTakingMessage(QyWxDepartmentManager.toString(), ObjectFormatUtil.toInteger(mainId)); + JSONObject jsonObject = qyWxOperationService.sendQyWxToStockTakingDepartmentManagerMessage(QyWxDepartmentManager.toString(), ObjectFormatUtil.toInteger(mainId)); // 将当前返回结果保存到redis中 Map QyWxMessageMap = new HashMap<>(); QyWxMessageMap.put("MsgId",jsonObject.getString("msgid")); @@ -164,7 +171,20 @@ public class StockTakingController { }else { return CrudUtil.postHandle(1, 1); } + } + + // 用于完成订单 + @PostMapping("/complete") + public RestResponse complete(@RequestBody Map map,HttpServletRequest request){ + UserByPort userToken= (UserByPort) request.getAttribute("userToken"); + Map complete = stockTakingService.completeStockTaking(map, userToken); + if(complete.containsKey("errMsg")){ + // 如果有出错情况 + return new RestResponse(complete,666,new StatusInfo("有错误","发现错误")); + }else { + return CrudUtil.postHandle(1, 1); + } } // 用于查询用户提交的盘点 @@ -209,8 +229,7 @@ public class StockTakingController { } map.put("minIds",minIdList); - map.put("inventory",map.get("invnetory5")); - map.remove("invnetory5"); + Integer transfer = stockTakingService.stockTakingTransfer(map, userToken); return CrudUtil.postHandle(transfer,minIdList.size()); } diff --git a/src/main/java/com/dreamchaser/depository_manage/entity/StockTaking.java b/src/main/java/com/dreamchaser/depository_manage/entity/StockTaking.java index 2dba586d..eb8d557d 100644 --- a/src/main/java/com/dreamchaser/depository_manage/entity/StockTaking.java +++ b/src/main/java/com/dreamchaser/depository_manage/entity/StockTaking.java @@ -38,6 +38,11 @@ public class StockTaking { */ private Integer state; + /** + * 负责人审核意见:1通过2驳回3待处理 + */ + private Integer departmentManagerState; + /** * 盘点发起人 */ @@ -51,10 +56,17 @@ public class StockTaking { /** * 审核时间 */ + private Long reviewTime; + + /** + * 处理时间 + */ private Long completeTime; /** * 审核意见 */ private String auditOpinion; + + } diff --git a/src/main/java/com/dreamchaser/depository_manage/mapper/StockTakingMapper.java b/src/main/java/com/dreamchaser/depository_manage/mapper/StockTakingMapper.java index ab666c1b..d0ccd799 100644 --- a/src/main/java/com/dreamchaser/depository_manage/mapper/StockTakingMapper.java +++ b/src/main/java/com/dreamchaser/depository_manage/mapper/StockTakingMapper.java @@ -110,6 +110,14 @@ public interface StockTakingMapper { List selectStockTakingChildByMainId(Integer mainId); + /** + * 根据主键批量查询子表 + * @param list + * @return + */ + List selectStockTakingChildByIds(List list); + + /** * 根据条件查询主表 * @param map @@ -145,6 +153,13 @@ public interface StockTakingMapper { */ StockTakingChildP selectStockTakingChildPById(Integer id); + /** + * 根据主键查找盘点详情 + * @param id + * @return + */ + StockTakingChildP selectStockTakingChildPById(Long id); + /** * 查询用户的任务 diff --git a/src/main/java/com/dreamchaser/depository_manage/mapper/StockTakingMapper.xml b/src/main/java/com/dreamchaser/depository_manage/mapper/StockTakingMapper.xml index ac4a2941..01273cc4 100644 --- a/src/main/java/com/dreamchaser/depository_manage/mapper/StockTakingMapper.xml +++ b/src/main/java/com/dreamchaser/depository_manage/mapper/StockTakingMapper.xml @@ -11,8 +11,10 @@ + + @@ -40,7 +42,7 @@ - st.id,st.code,st.depositoryId,st.placeId,st.departmentManager,st.state,st.createTime,st.originator,st.completeTime,st.auditOpinion + st.id,st.code,st.depositoryId,st.placeId,st.departmentManager,st.state,st.createTime,st.originator,st.completeTime,st.reviewTime,st.auditOpinion,st.departmentManagerState @@ -49,7 +51,7 @@ - INSERT INTO stocktaking (id,code,depositoryId,placeId,departmentManager,state,createTime,originator) + INSERT INTO stocktaking (id,code,depositoryId,placeId,departmentManager,state,createTime,originator,departmentManagerState) values ( #{id}, #{code}, @@ -58,7 +60,8 @@ #{departmentManager}, #{state}, #{createTime}, - #{originator} + #{originator}, + #{departmentManagerState} ) @@ -113,6 +116,9 @@ state = #{state}, + + departmentManagerState = #{departmentManagerState}, + createTime = #{createTime}, @@ -123,8 +129,12 @@ auditOpinion = #{auditOpinion}, - completeTime = #{completeTime} + completeTime = #{completeTime}, + + + reviewTime = #{reviewTime} + where id = #{id} @@ -162,6 +172,17 @@ where mainId = #{mainId} + + + - select from stocktakingchildinfo @@ -248,10 +272,12 @@ from stocktaking st where 1 = 1 - and (state = 3 and FIND_IN_SET(#{userId},st.departmentManager) != 0 ) + and (state = 3 and departmentManagerState = 3 and FIND_IN_SET(#{userId},st.departmentManager) != 0 ) + or (state = 3 and departmentManagerState != 3 and #{userId} = st.originator) - and (state != 3 and FIND_IN_SET(#{userId},st.departmentManager) != 0 ) + and (state != 3 and departmentManagerState != 3 and FIND_IN_SET(#{userId},st.departmentManager) != 0 ) + or (state != 3 and departmentManagerState != 3 and #{userId} = st.originator) LIMIT #{begin},#{size} @@ -264,10 +290,12 @@ from stocktaking st where 1 = 1 - and (state = 3 and FIND_IN_SET(#{userId},st.departmentManager) != 0 ) + and (state = 3 and departmentManagerState = 3 and FIND_IN_SET(#{userId},st.departmentManager) != 0 ) + or (state = 3 and departmentManagerState != 3 and #{userId} = st.originator) - and (state != 3 and FIND_IN_SET(#{userId},st.departmentManager) != 0 ) + and (state != 3 and departmentManagerState != 3 and FIND_IN_SET(#{userId},st.departmentManager) != 0 ) + or (state != 3 and departmentManagerState != 3 and #{userId} = st.originator) diff --git a/src/main/java/com/dreamchaser/depository_manage/pojo/StockTakingP.java b/src/main/java/com/dreamchaser/depository_manage/pojo/StockTakingP.java index 3c35e3d2..304ddb2b 100644 --- a/src/main/java/com/dreamchaser/depository_manage/pojo/StockTakingP.java +++ b/src/main/java/com/dreamchaser/depository_manage/pojo/StockTakingP.java @@ -52,6 +52,11 @@ public class StockTakingP { */ private Integer state; + /** + * 负责人审核意见:1通过2驳回3待处理 + */ + private Integer departmentManagerState; + /** * 申请时间 */ @@ -61,6 +66,11 @@ public class StockTakingP { /** * 审核时间 */ + private String reviewTime; + + /** + * 处理时间 + */ private String completeTime; /** @@ -68,6 +78,7 @@ public class StockTakingP { */ private Integer originator; + /** * 盘点发起人姓名 */ @@ -86,6 +97,7 @@ public class StockTakingP { this.depositoryId = st.getDepositoryId(); this.placeId = st.getPlaceId(); this.state = st.getState(); + this.departmentManagerState = st.getDepartmentManagerState(); this.createTime = DateUtil.TimeStampToDateTime(st.getCreateTime()); this.originator = st.getOriginator(); this.auditOpinion = st.getAuditOpinion(); diff --git a/src/main/java/com/dreamchaser/depository_manage/service/StockTakingService.java b/src/main/java/com/dreamchaser/depository_manage/service/StockTakingService.java index 42716eab..52d7401c 100644 --- a/src/main/java/com/dreamchaser/depository_manage/service/StockTakingService.java +++ b/src/main/java/com/dreamchaser/depository_manage/service/StockTakingService.java @@ -103,6 +103,23 @@ public interface StockTakingService { * @param templateCard * @return */ - Integer reviewByQyWx(TemplateCard templateCard); + Map reviewByQyWx(TemplateCard templateCard); + + + /** + * 对盘点进行处理 + * @param map + * @param userToken + * @return + */ + Map completeStockTaking(Map map, UserByPort userToken); + + /** + * 用于企业微信的审核申请处理 + * @param templateCard + * @return + */ + Integer completeStockTakingByQyWx(TemplateCard templateCard); + } 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 12533976..e204b415 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 @@ -254,6 +254,9 @@ public class DepositoryRecordServiceImpl implements DepositoryRecordService { @Override public Integer applicationInPlace(Map map) { Integer placeId = ObjectFormatUtil.toInteger(map.get("placeId")); + if(placeId == null){ + placeId = 0; + } Integer quantity = ObjectFormatUtil.toInteger(map.get("quantity")); Place placeById = placeMapper.findPlaceById(placeId); // 获取当前物料基本信息 @@ -606,9 +609,9 @@ public class DepositoryRecordServiceImpl implements DepositoryRecordService { for (int i = 0; i < depositoryManagers.length; i++) { Integer uid = ObjectFormatUtil.toInteger(depositoryManagers[i]); UserByPort depositoryManager = PageController.FindUserById(uid, userByPort); -// depositoryManagerByQyWx.append(depositoryManager.getWorkwechat()+","); + depositoryManagerByQyWx.append(depositoryManager.getWorkwechat()+","); } - depositoryManagerByQyWx.append("PangFuZhen,"); +// depositoryManagerByQyWx.append("PangFuZhen,"); JSONObject jsonObject = qyWxOperationService.sendCcMessageToUsers(depositoryManagerByQyWx.toString(), record.getId()); // 删除redis中本订单 @@ -719,9 +722,9 @@ public class DepositoryRecordServiceImpl implements DepositoryRecordService { StringBuilder QyWxUid = new StringBuilder(); for (int i = 0; i < departmentHeadByUser.size(); i++) { depositoryManager.append(departmentHeadByUser.get(i).getId() + ","); -// QyWxUid.append(departmentHeadByUser.get(i).getWorkwechat() + ","); + QyWxUid.append(departmentHeadByUser.get(i).getWorkwechat() + ","); } - QyWxUid.append("PangFuZhen,"); +// QyWxUid.append("PangFuZhen,"); map.put("depositoryManager", depositoryManager.toString()); // 向仓储中心负责人发送新的消息 new Thread(new Runnable() { @@ -813,9 +816,9 @@ public class DepositoryRecordServiceImpl implements DepositoryRecordService { // 更新redis中用户记录 redisTemplate.opsForHash().putAll("user:" + userIdByDid.get(j), userRecord); minRecordManage.append(userIdByDid.get(j)).append(","); -// QyWxUid.append(userByPort.getWorkwechat() + ","); + QyWxUid.append(userByPort.getWorkwechat() + ","); } - QyWxUid.append("PangFuZhen,"); +// QyWxUid.append("PangFuZhen,"); minRecord.put("manager", minRecordManage.toString()); // 添加子订单到redis中 redisTemplate.opsForHash().putAll(minRecordKey, minRecord); @@ -901,9 +904,9 @@ public class DepositoryRecordServiceImpl implements DepositoryRecordService { StringBuilder QyWxUid = new StringBuilder(); for (int i = 0; i < departmentHeadByUser.size(); i++) { depositoryManager.append(departmentHeadByUser.get(i).getId() + ","); -// QyWxUid.append(departmentHeadByUser.get(i).getWorkwechat()+","); + QyWxUid.append(departmentHeadByUser.get(i).getWorkwechat()+","); } - QyWxUid.append("PangFuZhen"+","); +// QyWxUid.append("PangFuZhen"+","); map.put("depositoryManager", depositoryManager.toString()); // 向仓储中心负责人发送新的消息 JSONObject jsonObject = qyWxOperationService.sendQyWxToApplicationOutMessage(QyWxUid.toString(), ObjectFormatUtil.toInteger(outId), false); @@ -974,9 +977,9 @@ public class DepositoryRecordServiceImpl implements DepositoryRecordService { // 更新redis中用户记录 redisTemplate.opsForHash().putAll("user:" + userIdByDid.get(j), userRecord); minRecordManage.append(userIdByDid.get(j)).append(","); -// QyWxUid.append(manager.getWorkwechat()+","); + QyWxUid.append(manager.getWorkwechat()+","); } - QyWxUid.append("PangFuZhen,"); +// QyWxUid.append("PangFuZhen,"); minRecord.put("manager", minRecordManage.toString()); // 添加子订单到redis中 redisTemplate.opsForHash().putAll(minRecordKey, minRecord); @@ -1479,7 +1482,6 @@ public class DepositoryRecordServiceImpl implements DepositoryRecordService { return depositoryRecordMapper.findApplicationInRecordByDate(map); } else { map.put("state", "已出库"); - return depositoryRecordMapper.findApplicationOutRecordByDate(map); } } 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 a5925721..230ab35b 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 @@ -239,12 +239,12 @@ public class QyWxOperationService { /** - * 用于向企业微信发送盘点消息 + * 用于向企业微信中该盘点记录的负责人发送盘点消息 * @param uid 接收人 * @param mainId 盘点记录编号 * @return */ - public JSONObject sendQyWxToStockTakingMessage(String uid,Integer mainId){ + public JSONObject sendQyWxToStockTakingDepartmentManagerMessage(String uid, Integer mainId){ // 获取盘点主记录 StockTaking mainRecord = stockTakingMapper.selectStockTakingById(mainId); @@ -452,12 +452,12 @@ public class QyWxOperationService { List buttonList = new ArrayList<>(); TemplateCard_button button1 = new TemplateCard_button(); - button1.setKey("wms_pass_StockTakingId" + mainId); + button1.setKey("wms_reviewpass_StockTakingId" + mainId); button1.setStyle(1); button1.setText("通过"); TemplateCard_button button2 = new TemplateCard_button(); - button2.setKey("wms_reject_StockTakingId" + mainId); + button2.setKey("wms_reviewreject_StockTakingId" + mainId); button2.setStyle(2); button2.setText("驳回"); @@ -485,7 +485,249 @@ public class QyWxOperationService { /** - * 将最终完成的订单抄送给仓储负责人 + * 用于向企业微信盘点人员发送盘点消息 + * @param uid 接收人 + * @param mainId 盘点记录编号 + * @return + */ + public JSONObject sendQyWxToStockTakingMessage(String uid, Integer mainId,List normalMinId){ + // 获取盘点主记录 + StockTaking mainRecord = stockTakingMapper.selectStockTakingById(mainId); + + if(normalMinId.size() == 0){ + return null; + } + + // 获取所有子记录 + List minRecordList = stockTakingMapper.selectStockTakingChildByIds(normalMinId); + + // 申请人id + Integer getOriginator = mainRecord.getOriginator(); + // 申请人 + UserByPort originator = PageController.FindUserById(getOriginator, null); + + // 盘点物料名称 + StringBuilder mname = new StringBuilder(); + // 盘点位置 + StringBuilder Location = new StringBuilder(); + // 物料盘点数量 + StringBuilder stockTakingQuantity = new StringBuilder(); + // 物料盘点结果 + StringBuilder stockTakingResult = new StringBuilder(); + // 物料盘盈数量 + StringBuilder stockTakingInventory = new StringBuilder(); + // 获取盘点的库位 + Integer placeId = mainRecord.getPlaceId(); + Place place = placeMapper.findPlaceById(placeId); + + // 获取盘点的仓库 + Integer depositoryId = mainRecord.getDepositoryId(); + Depository depository = depositoryMapper.findDepositoryById(depositoryId); + + Location.append(depository.getDname()); + if(Integer.compare(0,placeId) == 0){ + // 如果盘点库位为默认库位 + + Location.append(" - 默认库位"); + + }else{ + Location.append(" - ").append(place.getCode()); + } + + for (int i = 0; i < minRecordList.size(); i++) { + // 获取子订单信息 + StockTakingChildP childP = minRecordList.get(i); + // 获取当前申请物料 + Material materialById = materialMapper.findMaterialById(childP.getMid()); + // 设置物料名称 + mname.append(materialById.getMname()).append(","); + // 设置盘点数量 + stockTakingQuantity.append(childP.getNewInventory()).append(","); + // 设置盘点结果 + String takingResult = childP.getTakingResult(); + if("Inventory_up".equals(takingResult)){ + takingResult = "盘盈"; + }else if("Inventory_down".equals(takingResult)){ + takingResult = "盘亏"; + }else if("Inventory_normal".equals(takingResult)){ + takingResult = "正常"; + } + stockTakingResult.append(takingResult).append(","); + // 设置盈亏数量 + stockTakingInventory.append(childP.getInventory()).append(","); + } + + // 1.获取access_token:根据企业id和应用密钥获取access_token,并拼接请求url + String accessToken = "".equals(QyWxConfig.token) ? QyWxConfig.GetQYWXToken() : QyWxConfig.token; + // 2.获取发送对象,并转成json + ButtonInteraction buttonInteraction = new ButtonInteraction(); + // 1.1非必需 + //设置消息接收者 + String[] split = uid.split(","); + StringBuilder toUserName = new StringBuilder(); + for (int i = 0; i < split.length - 1; i++) { + toUserName.append(split[i]).append("|"); + } + toUserName.append(split[split.length - 1]); + buttonInteraction.setTouser(toUserName.toString()); // 不区分大小写 + + // 1.2必需 + // 消息类型 + buttonInteraction.setMsgtype("template_card"); + // 企业应用的id,整型 + buttonInteraction.setAgentid(QyWxConfig.AgentId); + // 卡片模板 + TemplateCard_button_interaction templateCard_button_interaction = new TemplateCard_button_interaction(); + // 模板卡片类型,按钮交互型卡片填写"button_interaction" + templateCard_button_interaction.setCard_type("button_interaction"); + // 卡片右上角更多操作按钮 + TemplateCard_action_menu action_menu = new TemplateCard_action_menu(); + action_menu.setDesc("卡片副交互辅助文本说明"); + + // 卡片右上角操作按钮 + TemplateCard_action action1 = new TemplateCard_action(); + action1.setKey("AcceptThePush"); + action1.setText("接受推送"); + TemplateCard_action action2 = new TemplateCard_action(); + action2.setKey("NoPush"); + action2.setText("不再推送"); + List actionList = new ArrayList<>(); + actionList.add(action1); + actionList.add(action2); + action_menu.setAction_list(actionList); + // 设置操作按钮 + templateCard_button_interaction.setAction_menu(action_menu); + + // 一级标题 + TemplateCard_main_title main_title = new TemplateCard_main_title(); +// main_title.setTitle(applicant+"的出库申请"); + main_title.setTitle("盘点记录处理"); + main_title.setDesc("发起时间:" + DateUtil.TimeStampToDateTime(Long.valueOf(mainRecord.getCreateTime()))); + + // 设置一级标题 + templateCard_button_interaction.setMain_title(main_title); + + + // 二级标题+文本列表,用于设置盘点位置 + TemplateCard_horizontal_content horizontal_content_Location = new TemplateCard_horizontal_content(); + // 链接类型 0代表不是链接 + horizontal_content_Location.setType(0); + // 二级标题 + horizontal_content_Location.setKeyname("盘点位置"); + horizontal_content_Location.setValue(Location.toString()); + + // 二级标题+文本列表,用于设置物料名称 + TemplateCard_horizontal_content horizontal_content_mname = new TemplateCard_horizontal_content(); + // 链接类型 0代表不是链接 + horizontal_content_mname.setType(0); + // 二级标题 + horizontal_content_mname.setKeyname("盘点物料:"); + horizontal_content_mname.setValue(mname.toString()); + + // 二级标题+文本列表,用于设置盘点数量 + TemplateCard_horizontal_content horizontal_content_quantity = new TemplateCard_horizontal_content(); + // 链接类型 0代表不是链接 + horizontal_content_quantity.setType(0); + // 二级标题 + horizontal_content_quantity.setKeyname("盘点数量"); + horizontal_content_quantity.setValue(stockTakingQuantity.toString()); + + // 二级标题+文本列表,用于设置盘点结果 + TemplateCard_horizontal_content horizontal_content_result = new TemplateCard_horizontal_content(); + // 链接类型 0代表不是链接 + horizontal_content_result.setType(0); + // 二级标题 + horizontal_content_result.setKeyname("盘点结果"); + horizontal_content_result.setValue(stockTakingResult.toString()); + + // 二级标题+文本列表,用于设置盈亏数目 + TemplateCard_horizontal_content horizontal_content_inventory = new TemplateCard_horizontal_content(); + // 链接类型 0代表不是链接 + horizontal_content_inventory.setType(0); + // 二级标题 + horizontal_content_inventory.setKeyname("盈亏数量"); + horizontal_content_inventory.setValue(stockTakingInventory.toString()); + + + + + // 二级标题+文本列表,用于设置申请查看明细 + TemplateCard_horizontal_content horizontal_content_detail = new TemplateCard_horizontal_content(); + // 链接类型 0代表不是链接 + horizontal_content_detail.setType(1); + // 二级标题 + horizontal_content_detail.setKeyname("盘点明细"); + horizontal_content_detail.setValue("查看明细"); + horizontal_content_detail.setUrl("https://jy.hxgk.group/StockTakingView?id=" + mainId); + + + List horizontal_contentList = new ArrayList<>(); + horizontal_contentList.add(horizontal_content_mname); + horizontal_contentList.add(horizontal_content_quantity); + horizontal_contentList.add(horizontal_content_Location); + horizontal_contentList.add(horizontal_content_result); + horizontal_contentList.add(horizontal_content_inventory); + horizontal_contentList.add(horizontal_content_detail); + + // 设置二级标题 + templateCard_button_interaction.setHorizontal_content_list(horizontal_contentList); + + + // 任务id,同一个应用任务id不能重复,只能由数字、字母和“_-@”组成,最长128字节 + // 通过雪花算法获取taskId + Snowflake snowflake = new Snowflake(10, 10, true); + templateCard_button_interaction.setTask_id(snowflake.nextIdStr()); + + // 下拉式的选择器 + TemplateCard_button_selection button_selection = new TemplateCard_button_selection(); + // 下拉式的选择器的key + button_selection.setQuestion_key("btn_status"); + button_selection.setTitle("您的身份"); + + List optionList = new ArrayList<>(); + // 选项 + TemplateCard_button_selection_option button_selection_option = new TemplateCard_button_selection_option(); + button_selection_option.setText("盘点人员"); + + // 如果是发送给部门负责人 + button_selection_option.setId("btn_status_departManagerHead"); + + optionList.add(button_selection_option); + + button_selection.setOption_list(optionList); + + templateCard_button_interaction.setButton_selection(button_selection); + + // 按钮列表,列表长度不超过6 + List buttonList = new ArrayList<>(); + + TemplateCard_button button1 = new TemplateCard_button(); + button1.setKey("wms_completepass_StockTakingId" + mainId); + button1.setStyle(1); + button1.setText("处理"); + buttonList.add(button1); + + templateCard_button_interaction.setButton_list(buttonList); + + buttonInteraction.setTemplate_card(templateCard_button_interaction); + + String s = JSONObject.toJSONString(buttonInteraction); + + // 3.获取请求的url + String url = QyWxConfig.sendMessage_url.replace("ACCESS_TOKEN", accessToken); + + // 4.调用接口,发送消息 + String s1 = HttpUtils.doPost(url, s); + + // 将返回结果转为json对象 + JSONObject jsonObject = JSON.parseObject(s1); + + // 返回 + return jsonObject; + } + + /** + * 将最终完成的出库请求订单抄送给仓储负责人 * * @param uid 仓储负责人编号 * @param outId 订单编号 @@ -569,10 +811,212 @@ public class QyWxOperationService { */ public JSONObject sendCcStockTakingMessageToHead(String uid, Map map, UserByPort userToken, StockTaking mainRecord) { + /** + * 获取完成的订单 + */ + List minIds = (List) map.get("minIds"); + + MessageByMarkDown markDown = new MessageByMarkDown(); + //设置消息接收者 + String[] split = uid.split(","); + StringBuilder toUserName = new StringBuilder(); + for (int i = 0; i < split.length - 1; i++) { + toUserName.append(split[i]).append("|"); + } + toUserName.append(split[split.length - 1]); + markDown.setTouser(toUserName.toString()); // 不区分大小写 + + + // 设置agentId + markDown.setAgentid(QyWxConfig.AgentId); + markDown.setMsgtype("markdown"); + + + Map markdown = new HashMap<>(); + // 抄送内容 + StringBuilder content = new StringBuilder("## `抄送信息:`%n"); + // 获取发起人信息 + UserByPort originator = PageController.FindUserById(mainRecord.getOriginator(), userToken); + + // 设置content + content.append(">### **" + originator.getName() + "的物料调账记录** %n时间:" + DateUtil.TimeStampToDateTime(mainRecord.getCreateTime()) + " %n"); + content.append("%n---%n"); + + + for (int i = 0; i < minIds.size(); i++) { + + Long minId = minIds.get(i); + // 获取对应子订单 + StockTakingChildP minRecord = stockTakingMapper.selectStockTakingChildPById(minId); + + // 获取当前物料 + Material material = materialMapper.findMaterialById(minRecord.getMid()); + + // 设置盘点结果 + String takingResult = minRecord.getTakingResult(); + if("Inventory_up".equals(takingResult)){ + takingResult = "盘盈"; + }else if("Inventory_down".equals(takingResult)){ + takingResult = "盘亏"; + }else if("Inventory_normal".equals(takingResult)){ + takingResult = "正常"; + } + + // 获取转移前的库位 + Integer oldPlaceId = ObjectFormatUtil.toInteger(mainRecord.getPlaceId()); + Place oldPlace = placeMapper.findPlaceById(oldPlaceId); + + + Integer depositoryId = mainRecord.getDepositoryId(); + Depository fromDepository = depositoryMapper.findDepositoryById(depositoryId); + + // 盘点位置 + String fromLocation = ""; + + if(Integer.compare(0,oldPlaceId) == 0){ + // 如果转移前的位置为默认库位 + fromLocation = fromDepository.getDname() + " - 默认库位"; + }else{ + fromLocation = fromDepository.getDname() + " - "+oldPlace.getCode(); + } + + content.append(">- 物料名称:").append(material.getMname()).append("%n"); + content.append(">- 盘点位置:").append(fromLocation).append("%n"); + content.append(">- 原库存数量:").append(minRecord.getOldInventory()).append("%n"); + content.append(">- 盘点数量:").append(minRecord.getNewInventory()).append("%n"); + content.append(">- 盈亏数量:").append(minRecord.getInventory()).append("%n"); + content.append(">- 盘点结果:").append(takingResult).append("%n"); + content.append("%n---%n"); + } + content.append(">## '''%n" + + ">如需要查看详细信息,请点击:[查看信息](https://jy.hxgk.group/StockTakingView?id=" + mainRecord.getId() + ")"); + markdown.put("content", content.toString()); + + markDown.setMarkdown(markdown); + String jsonString = JSONObject.toJSONString(markDown); + jsonString = String.format(jsonString); + System.out.println(jsonString); + // 3.获取请求的url + // 获取access_token:根据企业id和应用密钥获取access_token,并拼接请求url + String accessToken = "".equals(QyWxConfig.token) ? QyWxConfig.GetQYWXToken() : QyWxConfig.token; + String url = QyWxConfig.sendMessage_url.replace("ACCESS_TOKEN", accessToken); + + // 4.调用接口,发送消息 + String s1 = HttpUtils.doPost(url, jsonString); + + // 将返回结果转为json对象 + JSONObject jsonObject = JSON.parseObject(s1); + + // 返回 + return jsonObject; + } + + /** + * 用于向负责人发送盘点过程中的错误信息 + * @param uid 接收人 + * @param errIds 错误id + * @param mainRecord 主订单 + * @return + */ + public JSONObject sendStockTakingErrMessageToHead(String uid,List errIds,StockTaking mainRecord,UserByPort userToken){ + + MessageByMarkDown markDown = new MessageByMarkDown(); + //设置消息接收者 + String[] split = uid.split(","); + StringBuilder toUserName = new StringBuilder(); + for (int i = 0; i < split.length - 1; i++) { + toUserName.append(split[i]).append("|"); + } + toUserName.append(split[split.length - 1]); + markDown.setTouser(toUserName.toString()); // 不区分大小写 + + + // 设置agentId + markDown.setAgentid(QyWxConfig.AgentId); + markDown.setMsgtype("markdown"); + + + Map markdown = new HashMap<>(); + // 抄送内容 + StringBuilder content = new StringBuilder("## `盘点发生错误:`%n"); + // 获取发起人信息 + UserByPort originator = PageController.FindUserById(mainRecord.getOriginator(), userToken); + + // 设置content + content.append(">### **" + originator.getName() + "的物料盘点记录** %n时间:" + DateUtil.TimeStampToDateTime(mainRecord.getCreateTime()) + " %n"); + content.append("%n---%n"); + + + for (int i = 0; i < errIds.size(); i++) { + + Long minId = errIds.get(i); + // 获取错误的子订单 + StockTakingChildP minRecord = stockTakingMapper.selectStockTakingChildPById(minId); + + // 获取当前物料 + Material material = materialMapper.findMaterialById(minRecord.getMid()); + + + // 获取转移前的库位 + Integer oldPlaceId = ObjectFormatUtil.toInteger(mainRecord.getPlaceId()); + Place oldPlace = placeMapper.findPlaceById(oldPlaceId); + + + Integer depositoryId = mainRecord.getDepositoryId(); + Depository fromDepository = depositoryMapper.findDepositoryById(depositoryId); + + // 盘点位置 + String fromLocation = ""; + + if(Integer.compare(0,oldPlaceId) == 0){ + // 如果转移前的位置为默认库位 + fromLocation = fromDepository.getDname() + " - 默认库位"; + }else{ + fromLocation = fromDepository.getDname() + " - "+oldPlace.getCode(); + } + + content.append(">- 物料名称:").append(material.getMname()).append("%n"); + content.append(">- 盘点位置:").append(fromLocation).append("%n"); + content.append(">- 原库存数量:").append(minRecord.getOldInventory()).append("%n"); + content.append(">- 盘点数量:").append(minRecord.getNewInventory()).append("%n"); + content.append(">- 错误信息:").append("物料超出库存最大额度,需重新处理").append("%n"); + content.append("%n---%n"); + } + content.append(">## '''%n" + + ">请点击:[查看信息](https://jy.hxgk.group/StockTakingReview?id=" + mainRecord.getId() + ")"); + markdown.put("content", content.toString()); + + markDown.setMarkdown(markdown); + String jsonString = JSONObject.toJSONString(markDown); + jsonString = String.format(jsonString); + System.out.println(jsonString); + // 3.获取请求的url + // 获取access_token:根据企业id和应用密钥获取access_token,并拼接请求url + String accessToken = "".equals(QyWxConfig.token) ? QyWxConfig.GetQYWXToken() : QyWxConfig.token; + String url = QyWxConfig.sendMessage_url.replace("ACCESS_TOKEN", accessToken); + + // 4.调用接口,发送消息 + String s1 = HttpUtils.doPost(url, jsonString); + + // 将返回结果转为json对象 + JSONObject jsonObject = JSON.parseObject(s1); + + // 返回 + return jsonObject; + } + + + /** + * 将转移信息发送给盘点人员 + * @param map + * @return + */ + public JSONObject sendCcStockTakingTransferMessageToHead(String uid, Map map, UserByPort userToken, StockTaking mainRecord){ + /** * 获取要转移的订单 */ - List minIds = (List) map.get("minIds"); + List minIds = (List) map.get("minIds"); MessageByMarkDown markDown = new MessageByMarkDown(); //设置消息接收者 @@ -602,7 +1046,7 @@ public class QyWxOperationService { for (int i = 0; i < minIds.size(); i++) { - Integer minId = minIds.get(i); + Long minId = minIds.get(i); // 获取对应子订单 StockTakingChildP minRecord = stockTakingMapper.selectStockTakingChildPById(minId); @@ -611,12 +1055,16 @@ public class QyWxOperationService { // 获取转移数量 - Integer inventory = ObjectFormatUtil.toInteger(map.get("inventory")); + Integer inventory = ObjectFormatUtil.toInteger(map.get("invnetory"+minId)); // 获取转移前的库位 Integer oldPlaceId = ObjectFormatUtil.toInteger(mainRecord.getPlaceId()); Place oldPlace = placeMapper.findPlaceById(oldPlaceId); + Integer depositoryId = mainRecord.getDepositoryId(); + Depository fromDepository = depositoryMapper.findDepositoryById(depositoryId); + + // 获取转移后的数量 Integer newInventory = minRecord.getNewInventory() - inventory; // 获取转移到的库位 @@ -628,10 +1076,13 @@ public class QyWxOperationService { String fromLocation = ""; // 转移位置 String toLocation = ""; - // 获取转移前的仓库 - Depository fromDepository = depositoryMapper.findDepositoryById(oldPlace.getDid()); + // 获取转移后的仓库 Depository toDepository = depositoryMapper.findDepositoryById(newPlace.getDid()); + if(toDepository == null){ + + } + if(Integer.compare(0,oldPlaceId) == 0){ // 如果转移前的位置为默认库位 @@ -661,7 +1112,7 @@ public class QyWxOperationService { content.append(">- 物料名称:").append(material.getMname()).append("%n"); content.append(">- 盘点数量:").append(minRecord.getNewInventory()).append("%n"); content.append(">- 盘点位置:").append(fromLocation).append("%n"); - content.append(">- 转移数量:").append(map.get("inventory")).append("%n"); + content.append(">- 转移数量:").append(inventory).append("%n"); content.append(">- 转移位置:").append(toLocation).append("%n"); content.append(">- 转移后盘点位置物料数量:").append(oldPlaceAndMaterial.getQuantity()).append("%n"); content.append(">- 转移位置物料数量:").append(newPlaceAndMaterial.getQuantity()).append("%n"); @@ -690,17 +1141,6 @@ public class QyWxOperationService { return jsonObject; } - - /** - * 将转移信息发送给盘点人员 - * @param map - * @return - */ - public JSONObject sendCcStockTakingTransferMessageToHead(Mapmap){ - - return null; - } - /** * 给仓库管理员发送出库通知 * diff --git a/src/main/java/com/dreamchaser/depository_manage/service/impl/StockTakingServiceImpl.java b/src/main/java/com/dreamchaser/depository_manage/service/impl/StockTakingServiceImpl.java index b926ec66..38ffd2b2 100644 --- a/src/main/java/com/dreamchaser/depository_manage/service/impl/StockTakingServiceImpl.java +++ b/src/main/java/com/dreamchaser/depository_manage/service/impl/StockTakingServiceImpl.java @@ -87,6 +87,27 @@ public class StockTakingServiceImpl implements StockTakingService { map.remove("id"); map.put("mainId", id); } + Map needToUpdate = (Map) map.get("needToUpdate"); + Map barCodeListByNoMaterial = (Map) map.get("barCodeListByNoMaterial"); + Integer mid = ObjectFormatUtil.toInteger(map.get("mid")); + if(needToUpdate != null) { + // 如果需要绑定条码 + String temp = map.get("temp").toString(); + if ("0".equals(temp)) { + // 如果是0 + temp = ""; + } + Object isUpdate = needToUpdate.get("barCode"+temp); + if(isUpdate != null){ + List barCodeList = (ArrayList) barCodeListByNoMaterial.get("barCode"+temp); + Map param = new HashMap<>(); + param.put("list",barCodeList); + Material materialById = materialMapper.findMaterialById(mid); + param.put("code",materialById.getCode()); + materialMapper.addBarCodeAndMaterialForMoreOne(param); + } + } + return stockTakingMapper.insertStockTakingChild(map); } @@ -149,6 +170,7 @@ public class StockTakingServiceImpl implements StockTakingService { /** * 根据条件查询自己的申请 + * * @param map 查询参数 * @return 我的任务 */ @@ -180,6 +202,7 @@ public class StockTakingServiceImpl implements StockTakingService { /** * 查询用户的申请数量 + * * @param map * @return */ @@ -270,12 +293,15 @@ public class StockTakingServiceImpl implements StockTakingService { // 获取主单 StockTaking mainRecord = stockTakingMapper.selectStockTakingById(mainId); + // 用于存储可以正常处理的订单 + List normalMinId = new ArrayList<>(); + // 获取负责人 String departmentManager = mainRecord.getDepartmentManager(); String[] split = departmentManager.split(","); for (int i = 0; i < split.length; i++) { String s = split[i]; - if("".equals(s)){ + if ("".equals(s)) { continue; } UserByPort userByPort = PageController.FindUserById(ObjectFormatUtil.toInteger(s), userToken); @@ -285,6 +311,7 @@ public class StockTakingServiceImpl implements StockTakingService { // 如果审核通过 stockTakingResult = "通过"; + // 定义错误信息 Map errMsg = new HashMap<>(); // 定义出错单号 @@ -338,8 +365,6 @@ public class StockTakingServiceImpl implements StockTakingService { // 新的均价 avgPrice = (amounts / newInventory) * 100; } - - materialById.setPrice(avgPrice); // 获取当前库位上物料数量 @@ -348,7 +373,6 @@ public class StockTakingServiceImpl implements StockTakingService { materialById.setQuantity(oldQuantity + newInventory); - // 用于计算新的库位数量 Integer newNumberForPlace = 0; // 用于计算新的库位与物料对应关系的数量 @@ -377,7 +401,8 @@ public class StockTakingServiceImpl implements StockTakingService { // 更新物料与库位对应关系的数量 placeAndMaterialByMidAndPid.setQuantity(newNumberForMatrialAndPlace); - } else { + } + else { // 如果盘亏 newNumberForPlace = placeById.getQuantity() - inventory; @@ -401,18 +426,7 @@ public class StockTakingServiceImpl implements StockTakingService { } - - // 更新库位 - placeMapper.UpdatePlace(placeById); - - - // 更新库位与物料的对应关系 - placeMapper.updateMaterialAndPlace(placeAndMaterialByMidAndPid); - - - // 更新当前物料信息 - materialMapper.updateMaterial(materialById); - + normalMinId.add(minRecord.getId()); } if (errIds.size() > 0) { @@ -424,15 +438,38 @@ public class StockTakingServiceImpl implements StockTakingService { result.put("errMsg", errMsg); } - } - else{ - map.put("state",departmentManagerState); + + // 抄送盘点调账记录给盘点人员 + new Thread(new Runnable() { + @Override + public void run() { + // 获取盘点人员 + UserByPort originator = PageController.FindUserById(mainRecord.getOriginator(), userToken); + String workwechat = originator.getWorkwechat(); +// JSONObject jsonObject = qyWxOperationService.sendQyWxToStockTakingMessage("PangFuZhen,", mainId,normalMinId); + JSONObject jsonObject = qyWxOperationService.sendQyWxToStockTakingMessage(workwechat, mainId,normalMinId); + // 将当前返回结果保存到redis中 + if(jsonObject!=null) { + Map QyWxMessageMap = new HashMap<>(); + QyWxMessageMap.put("MsgId", jsonObject.getString("msgid")); + QyWxMessageMap.put("responseCode", jsonObject.getString("response_code")); + // key user:300450:QyWxOut:1 + redisTemplate.opsForHash().putAll("user:" + userToken.getNumber() + ":QyWxStockTakingCompleteId:" + mainId, QyWxMessageMap); + // 设置过期时间为三天 + redisTemplate.expire("user:" + userToken.getNumber() + ":QyWxStockTakingCompleteId:" + mainId, 72, TimeUnit.HOURS); + } + } + }).start(); + + + } else { + map.put("state", departmentManagerState); } // 更新结果 map.put("id", mainId); String simpleTime = DateUtil.getSimpleTime(new Date()); - map.put("completeTime", DateUtil.DateTimeToTimeStamp(simpleTime)); - map.put("departmentManager",userToken.getId()); + map.put("reviewTime", DateUtil.DateTimeToTimeStamp(simpleTime)); + map.put("departmentManager", userToken.getId()); stockTakingMapper.updateStockTaking(map); // 更新其他卡片 @@ -442,28 +479,25 @@ public class StockTakingServiceImpl implements StockTakingService { public void run() { // 获取responseCode(key为申请人number) //获取申请人信息 - String key = "user:"+userToken.getNumber()+":QyWxStockTakingId:"+mainId; + Integer originator = mainRecord.getOriginator(); + UserByPort userByPort = PageController.FindUserById(originator, userToken); + String key = "user:" + userByPort.getNumber() + ":QyWxStockTakingId:" + mainId; String responseCode = (String) redisTemplate.opsForHash().get(key, "responseCode"); - qyWxOperationService.updateTemplateCard(responseCode,userToken.getName(), finalStockTakingResult); + qyWxOperationService.updateTemplateCard(responseCode, userToken.getName(), finalStockTakingResult); } }).start(); - // 抄送盘点调账记录给盘点人员 - new Thread(new Runnable() { - @Override - public void run() { - } - }).start(); + return result; } - /** * 对盘点进行处理 + * * @param map * @param userToken * @return @@ -478,30 +512,241 @@ public class StockTakingServiceImpl implements StockTakingService { StringBuilder QyWxUid = new StringBuilder(); Integer state = ObjectFormatUtil.toInteger(map.get("state")); Object o = (map.get("mainId")); - Integer res = 0; if (o == null) { throw new MyException("缺少必要参数"); } - String stockTakingResult = "驳回"; // 获取主表编号 Integer mainId = ObjectFormatUtil.toInteger(o); // 获取主单 StockTaking mainRecord = stockTakingMapper.selectStockTakingById(mainId); + // 用于存储正常处理的订单 + List minIds = new ArrayList<>(); + // 获取负责人 String departmentManager = mainRecord.getDepartmentManager(); String[] split = departmentManager.split(","); for (int i = 0; i < split.length; i++) { String s = split[i]; - if("".equals(s)){ + if ("".equals(s)) { continue; } UserByPort userByPort = PageController.FindUserById(ObjectFormatUtil.toInteger(s), userToken); QyWxUid.append(userByPort.getWorkwechat()).append(","); } + // 定义错误信息 + Map errMsg = new HashMap<>(); + // 定义出错单号 + List errIds = new ArrayList<>(); + // 定义出错信息 + List err = new ArrayList<>(); + + Integer placeId = mainRecord.getPlaceId(); + // 获取库位详情 + Place placeById = placeMapper.findPlaceById(placeId); + Integer depositoryId = mainRecord.getDepositoryId(); + + // 获取所有子单 + List minRecordList = stockTakingMapper.selectStockTakingChildByMainId(mainId); + for (int i = 0; i < minRecordList.size(); i++) { + // 获取子单详情 + StockTakingChildP minRecord = minRecordList.get(i); + // 获取盘点的物料详情 + + // 获取当前盘点结果 + String takingResult = minRecord.getTakingResult(); + if ("Inventory_normal".equals(takingResult)) { + // 如果盘点结果正常 + continue; + } + + + + // 获取盈亏数量 + Integer inventory = minRecord.getInventory(); + + + Material materialById = materialMapper.findMaterialById(minRecord.getMid()); + + Map paramForMaterialAndPlace = new HashMap<>(); + paramForMaterialAndPlace.put("mid", materialById.getId()); + paramForMaterialAndPlace.put("pid", placeById.getId()); + // 获取物料与库位的对应关系 + MaterialAndPlace placeAndMaterialByMidAndPid = placeMapper.findPlaceAndMaterialByMidAndPid(paramForMaterialAndPlace); + + // 根据盘点结果重新计算物料的单价 + + // 数据库中的总额 + Double amounts = (materialById.getAmounts() / 100); + + Integer newInventory = minRecord.getNewInventory(); + Double avgPrice = 0.0; + if (Integer.compare(newInventory, 0) != 0) { + // 如果新的库存不是0 + + // 新的均价 + avgPrice = (amounts / newInventory) * 100; + } + + + materialById.setPrice(avgPrice); + + // 获取当前库位上物料数量 + Integer oldQuantity = materialById.getQuantity() - placeAndMaterialByMidAndPid.getQuantity(); + + materialById.setQuantity(oldQuantity + newInventory); + + + // 用于计算新的库位数量 + Integer newNumberForPlace = 0; + // 用于计算新的库位与物料对应关系的数量 + Integer newNumberForMatrialAndPlace = 0; + if ("Inventory_up".equals(takingResult)) { + // 如果盘盈 + + // 更新当前库位数量 + newNumberForPlace = placeById.getQuantity() + inventory; + + if (newNumberForPlace < placeById.getMax()) { + + // 如果更新后的库位数量没有上溢 + + // 更新当前库位的数量 + placeById.setQuantity(newNumberForPlace); + } else { + // 添加错误信息 + errIds.add(minRecord.getId()); + err.add("当前库位数量溢出,需要转移"); + + continue; + } + + newNumberForMatrialAndPlace = placeAndMaterialByMidAndPid.getQuantity() + inventory; + // 更新物料与库位对应关系的数量 + placeAndMaterialByMidAndPid.setQuantity(newNumberForMatrialAndPlace); + + } + else { + + // 如果盘亏 + newNumberForPlace = placeById.getQuantity() - inventory; + + if (newNumberForPlace > placeById.getMin()) { + //如果更新后的库位数量没有下溢 + + // 更新当前库位数量 + placeById.setQuantity(newNumberForPlace); + + // 更新物料与库位对应关系的数量 + newNumberForMatrialAndPlace = placeAndMaterialByMidAndPid.getQuantity() - inventory; + + } else { + placeById.setQuantity(0); + newNumberForMatrialAndPlace = 0; + } + + + placeAndMaterialByMidAndPid.setQuantity(newNumberForMatrialAndPlace); + + } + + + // 更新库位 + placeMapper.UpdatePlace(placeById); + + + // 更新库位与物料的对应关系 + placeMapper.updateMaterialAndPlace(placeAndMaterialByMidAndPid); + + + // 更新当前物料信息 + materialMapper.updateMaterial(materialById); + + + minIds.add(minRecord.getId()); + + if (errIds.size() > 0) { + // 如果有出错的情况 + + errMsg.put("errIds", errIds); + errMsg.put("errMsg", err); + + result.put("errMsg", errMsg); + } + + } + // 更新结果 + map.put("id", mainId); + map.put("state", state); + String simpleTime = DateUtil.getSimpleTime(new Date()); + map.put("completeTime", DateUtil.DateTimeToTimeStamp(simpleTime)); + stockTakingMapper.updateStockTaking(map); + + map.put("minIds",minIds); + // 开启一个线程用于发送抄送信息给负责人 + StockTaking finalMainRecord = mainRecord; + new Thread(new Runnable() { + @Override + public void run() { + String s = QyWxUid.toString(); +// s= "PangFuZhen,"; + JSONObject jsonObject = qyWxOperationService.sendCcStockTakingMessageToHead(s, map, userToken, finalMainRecord); + } + }).start(); + + // 更新其他卡片 + new Thread(new Runnable() { + @Override + public void run() { + // 获取responseCode(key为申请人number) + Integer originator = mainRecord.getOriginator(); + UserByPort userByPort = PageController.FindUserById(originator, userToken); + //获取申请人信息 + String key = "user:" + userByPort.getNumber() + ":QyWxStockTakingCompleteId:" + mainId; + String responseCode = (String) redisTemplate.opsForHash().get(key, "responseCode"); + qyWxOperationService.updateTemplateCard(responseCode, userToken.getName(), "处理"); + } + }).start(); + + return result; + } + + + /** + * 用于企业微信的盘点处理 + * + * @param templateCard + * @return + */ + @Transactional + @Override + public Integer completeStockTakingByQyWx(TemplateCard templateCard) { + Map result = new HashMap<>(); + + + // 获取点击的按钮 + String clickKey = templateCard.getEventKey().split("_")[1]; + + // 点击用户 + String fromUserName = templateCard.getFromUserName(); + // 根据userId获取处理人 + Map portInfo = PortConfig.findUserByQyWxUserId(fromUserName); + UserByPort userByPort = (UserByPort) portInfo.get("user"); + + // 用于最终更新 + Map map = new HashMap<>(); + + + // 获取主表编号 + String o = templateCard.getEventKey().split("StockTakingId")[1]; + Integer mainId = ObjectFormatUtil.toInteger(o); + + // 用于存储子表id + List minIds = new ArrayList<>(); + // 获取主单 + StockTaking mainRecord = stockTakingMapper.selectStockTakingById(mainId); // 如果审核通过 - stockTakingResult = "通过"; // 定义错误信息 Map errMsg = new HashMap<>(); @@ -522,6 +767,8 @@ public class StockTakingServiceImpl implements StockTakingService { for (int i = 0; i < minRecordList.size(); i++) { // 获取子单详情 StockTakingChildP minRecord = minRecordList.get(i); + + // 获取盘点的物料详情 // 获取当前盘点结果 @@ -566,7 +813,6 @@ public class StockTakingServiceImpl implements StockTakingService { materialById.setQuantity(oldQuantity + newInventory); - // 用于计算新的库位数量 Integer newNumberForPlace = 0; // 用于计算新的库位与物料对应关系的数量 @@ -630,7 +876,9 @@ public class StockTakingServiceImpl implements StockTakingService { // 更新当前物料信息 materialMapper.updateMaterial(materialById); - + + minIds.add(minRecord.getId()); + } if (errIds.size() > 0) { // 如果有出错的情况 @@ -640,99 +888,133 @@ public class StockTakingServiceImpl implements StockTakingService { result.put("errMsg", errMsg); } - - } // 更新结果 + map.put("id", mainId); + map.put("state", 1); String simpleTime = DateUtil.getSimpleTime(new Date()); map.put("completeTime", DateUtil.DateTimeToTimeStamp(simpleTime)); - map.put("departmentManager",userToken.getId()); + map.put("departmentManager", userByPort.getId()); stockTakingMapper.updateStockTaking(map); - // 抄送盘点记录给负责人 + // 开启一个线程用于发送抄送信息给负责人 + StockTaking finalMainRecord = mainRecord; new Thread(new Runnable() { @Override public void run() { - + map.put("minIds",minIds); + String departmentManager = mainRecord.getDepartmentManager(); + StringBuilder QyWxUid = new StringBuilder(); + String[] split = departmentManager.split(","); + for (int i = 0; i < split.length; i++) { + String s = split[i]; + if("".equals(s)){ + continue; + } + UserByPort userByPort1 = PageController.FindUserById(ObjectFormatUtil.toInteger(s),null); + QyWxUid.append(userByPort1.getWorkwechat()).append(","); + } + String s = QyWxUid.toString(); +// s= "PangFuZhen,"; + JSONObject jsonObject = qyWxOperationService.sendCcStockTakingMessageToHead(s, map, null, finalMainRecord); } }).start(); - - return result; + return 1; } + /** * 用于进行盘点结果转移 + * * @param map * @return */ @Transactional @Override - public Integer stockTakingTransfer(Map map,UserByPort userToken) { + public Integer stockTakingTransfer(Map map, UserByPort userToken) { List minIds = (List) map.get("minIds"); - + List minRecorIds = new ArrayList<>(); Integer res = 0; // 获取对应主订单 StockTaking mainRecord = null; + + // 获取转移前的库位 + Integer oldPlaceId = ObjectFormatUtil.toInteger(mainRecord.getPlaceId()); + Place oldPlace = placeMapper.findPlaceById(oldPlaceId); + // 获取转移到的库位 + Integer newPlaceId = ObjectFormatUtil.toInteger(map.get("placeId")); + Place newPlace = placeMapper.findPlaceById(newPlaceId); + + + // 设置转移后盘点库位的总数 + Integer sumTransferAfter = oldPlace.getQuantity(); + // 设置转移到到库位的总数 + Integer sumTransfer = newPlace.getQuantity(); for (int i = 0; i < minIds.size(); i++) { Integer minId = minIds.get(i); // 获取对应子订单 StockTakingChildP minRecord = stockTakingMapper.selectStockTakingChildPById(minId); + minRecorIds.add(minRecord.getId()); // 获取当前物料 Material material = materialMapper.findMaterialById(minRecord.getMid()); // 获取对应主订单 mainRecord = stockTakingMapper.selectStockTakingById(minRecord.getMainId()); - // 获取转移数量 - Integer inventory = ObjectFormatUtil.toInteger(map.get("inventory")); - // 获取转移前的库位 - Integer oldPlaceId = ObjectFormatUtil.toInteger(mainRecord.getPlaceId()); - Place oldPlace = placeMapper.findPlaceById(oldPlaceId); + Integer inventory = ObjectFormatUtil.toInteger(map.get("invnetory"+minId)); + + // 获取转移后库位的总数 + sumTransfer += inventory; // 获取转移后的数量 Integer newInventory = minRecord.getNewInventory() - inventory; - // 获取转移到的库位 - Integer newPlaceId = ObjectFormatUtil.toInteger(map.get("placeId")); - Place newPlace = placeMapper.findPlaceById(newPlaceId); + // 获取转移后盘点库位的总数 + sumTransferAfter += minRecord.getInventory() - inventory; - if(Integer.compare(newPlace.getDid(),oldPlace.getDid()) != 0){ + // 获取新转移的库位所在仓库 + Integer depositoryId = newPlace.getDid(); + if(Integer.compare(depositoryId,0) == 0){ + // 如果转入的为默认库位 + depositoryId = ObjectFormatUtil.toInteger(map.get("depositoryId")); + } + + if (Integer.compare(newPlace.getDid(), oldPlace.getDid()) != 0) { // 转移前后不在同一仓库 material.setQuantity(newInventory); // 进行物料转移 - Map paramForMaterialToDepository = new HashMap<>(); - paramForMaterialToDepository.put("depositoryId",newPlace.getDid()); - paramForMaterialToDepository.put("code",material.getCode()); + Map paramForMaterialToDepository = new HashMap<>(); + paramForMaterialToDepository.put("depositoryId", depositoryId); + paramForMaterialToDepository.put("code", material.getCode()); // 获取转移后的仓库中的该物料 List materialByDepository = materialMapper.findInventory(paramForMaterialToDepository); - if(materialByDepository.size() > 0){ + if (materialByDepository.size() > 0) { // 如果转移后的仓库中存在该物料 Material transferMaterial = materialByDepository.get(0); //获取物料与转移后库位的对应关系 - Map paramForMaterialAndPlace = new HashMap<>(); - paramForMaterialAndPlace.put("mid",transferMaterial.getId()); - paramForMaterialAndPlace.put("pid",newPlace.getId()); + Map paramForMaterialAndPlace = new HashMap<>(); + paramForMaterialAndPlace.put("mid", transferMaterial.getId()); + paramForMaterialAndPlace.put("pid", newPlace.getId()); MaterialAndPlace newPlaceAndMaterial = placeMapper.findPlaceAndMaterialByMidAndPid(paramForMaterialAndPlace); - if(newPlaceAndMaterial == null){ + if (newPlaceAndMaterial == null) { // 如果转移之后没有该物料 - paramForMaterialAndPlace.put("quantity",inventory); + paramForMaterialAndPlace.put("quantity", inventory); placeMapper.addMaterialOnPlace(paramForMaterialAndPlace); - }else{ + } else { // 如果转移之后有该物料 newPlaceAndMaterial.setQuantity(newPlaceAndMaterial.getQuantity() + inventory); placeMapper.updateMaterialAndPlace(newPlaceAndMaterial); } - } - else{ + } else { // 如果不存在 Material mt = new Material(); @@ -752,61 +1034,59 @@ public class StockTakingServiceImpl implements StockTakingService { materialMapper.insertMaterial(mt); // 添加当前物料与库位之间的映射 - Map paramForMaterialAndPlace = new HashMap<>(); - paramForMaterialAndPlace.put("mid",mt.getId()); - paramForMaterialAndPlace.put("pid",newPlace.getId()); - paramForMaterialAndPlace.put("quantity",newInventory); + Map paramForMaterialAndPlace = new HashMap<>(); + paramForMaterialAndPlace.put("mid", mt.getId()); + paramForMaterialAndPlace.put("pid", newPlace.getId()); + paramForMaterialAndPlace.put("quantity", newInventory); placeMapper.addMaterialOnPlace(paramForMaterialAndPlace); } //获取物料与转移前库位的对应关系 - Map paramForMaterialAndPlace = new HashMap<>(); - paramForMaterialAndPlace.put("mid",material.getId()); - paramForMaterialAndPlace.put("pid",oldPlace.getId()); + Map paramForMaterialAndPlace = new HashMap<>(); + paramForMaterialAndPlace.put("mid", material.getId()); + paramForMaterialAndPlace.put("pid", oldPlace.getId()); MaterialAndPlace oldPlaceAndMaterial = placeMapper.findPlaceAndMaterialByMidAndPid(paramForMaterialAndPlace); - if(oldPlaceAndMaterial == null){ + if (oldPlaceAndMaterial == null) { // 如果转移之前没有该物料 - paramForMaterialAndPlace.put("quantity",newInventory); + paramForMaterialAndPlace.put("quantity", newInventory); placeMapper.addMaterialOnPlace(paramForMaterialAndPlace); - } - else{ + } else { // 如果转移之前有该物料 - oldPlaceAndMaterial.setQuantity(oldPlaceAndMaterial.getQuantity() + newInventory); + oldPlaceAndMaterial.setQuantity(newInventory); placeMapper.updateMaterialAndPlace(oldPlaceAndMaterial); } - } - else{ + } else { // 如果在同一仓库 // 更新物料容量 material.setQuantity(minRecord.getNewInventory()); //获取物料与转移前库位的对应关系 - Map paramForMaterialAndPlace = new HashMap<>(); - paramForMaterialAndPlace.put("mid",material.getId()); - paramForMaterialAndPlace.put("pid",oldPlace.getId()); + Map paramForMaterialAndPlace = new HashMap<>(); + paramForMaterialAndPlace.put("mid", material.getId()); + paramForMaterialAndPlace.put("pid", oldPlace.getId()); MaterialAndPlace oldPlaceAndMaterial = placeMapper.findPlaceAndMaterialByMidAndPid(paramForMaterialAndPlace); - if(oldPlaceAndMaterial == null){ + if (oldPlaceAndMaterial == null) { // 如果转移之前没有该物料 - paramForMaterialAndPlace.put("quantity",newInventory); + paramForMaterialAndPlace.put("quantity", newInventory); placeMapper.addMaterialOnPlace(paramForMaterialAndPlace); - }else{ + } else { // 如果转移之前有该物料 - oldPlaceAndMaterial.setQuantity(oldPlaceAndMaterial.getQuantity() + newInventory); + oldPlaceAndMaterial.setQuantity(newInventory); placeMapper.updateMaterialAndPlace(oldPlaceAndMaterial); } // 获取物料与转移后库位的对应关系 - paramForMaterialAndPlace.put("pid",newPlace.getId()); + paramForMaterialAndPlace.put("pid", newPlace.getId()); MaterialAndPlace newPlaceAndMaterial = placeMapper.findPlaceAndMaterialByMidAndPid(paramForMaterialAndPlace); - if(newPlaceAndMaterial == null){ + if (newPlaceAndMaterial == null) { // 如果转移后没有该物料 - paramForMaterialAndPlace.put("quantity",inventory); + paramForMaterialAndPlace.put("quantity", inventory); placeMapper.addMaterialOnPlace(paramForMaterialAndPlace); - }else{ + } else { // 如果转移后有该物料 newPlaceAndMaterial.setQuantity(newPlaceAndMaterial.getQuantity() + inventory); placeMapper.updateMaterialAndPlace(newPlaceAndMaterial); @@ -819,61 +1099,51 @@ public class StockTakingServiceImpl implements StockTakingService { res += materialMapper.updateMaterial(material); - // 更新转移前库位数量 - oldPlace.setQuantity(oldPlace.getQuantity() + newInventory); - placeMapper.UpdatePlace(oldPlace); - // 更新转移后库位数量 - newPlace.setQuantity(newPlace.getQuantity() + inventory); - placeMapper.UpdatePlace(newPlace); - } - // 开启一个线程用于发送抄送信息给盘点人员 + } + // 更新转移前库位数量 + oldPlace.setQuantity(sumTransferAfter); + placeMapper.UpdatePlace(oldPlace); + // 更新转移后库位数量 + newPlace.setQuantity(sumTransfer); + placeMapper.UpdatePlace(newPlace); + + // 开启一个线程用于发送转移信息给盘点人员 StockTaking finalMainRecord = mainRecord; new Thread(new Runnable() { @Override public void run() { Integer originator = finalMainRecord.getOriginator(); + map.put("minIds",minRecorIds); StringBuilder departMentHeadQyWxName = new StringBuilder(); UserByPort userByPort = PageController.FindUserById(ObjectFormatUtil.toInteger(originator), userToken); -// departMentHeadQyWxName.append(userByPort.getWorkwechat()+","); - departMentHeadQyWxName.append("PangFuZhen,"); - JSONObject jsonObject = qyWxOperationService.sendCcStockTakingMessageToHead(departMentHeadQyWxName.toString(), map, userToken, finalMainRecord); + departMentHeadQyWxName.append(userByPort.getWorkwechat()+","); +// departMentHeadQyWxName.append("PangFuZhen,"); + JSONObject jsonObject = qyWxOperationService.sendCcStockTakingTransferMessageToHead(departMentHeadQyWxName.toString(), map, userToken, finalMainRecord); } }).start(); - /* // 开启一个线程用于发送抄送信息给盘点人员 - StockTaking finalMainRecord = mainRecord; - new Thread(new Runnable() { - @Override - public void run() { - String departmentManager = finalMainRecord.getDepartmentManager(); - String[] strings = departmentManager.split(","); - StringBuilder departMentHeadQyWxName = new StringBuilder(); - for (int j = 0; j < strings.length; j++) { - String s = strings[j]; - if("".equals(s)){ - continue; - } - UserByPort userByPort = PageController.FindUserById(ObjectFormatUtil.toInteger(s), userToken); - departMentHeadQyWxName.append(userByPort.getWorkwechat()+","); - } - JSONObject jsonObject = qyWxOperationService.sendCcStockTakingMessageToHead(departMentHeadQyWxName.toString(), map, userToken, finalMainRecord); - } - }).start();*/ - + // 更新盘点记录 + Map updateMap = new HashMap<>(); + updateMap.put("id", mainRecord.getId()); + updateMap.put("state", 1); + String simpleTime = DateUtil.getSimpleTime(new Date()); + updateMap.put("completeTime", DateUtil.DateTimeToTimeStamp(simpleTime)); + stockTakingMapper.updateStockTaking(updateMap); return res; } /** * 用于企业微信的审核申请处理 + * * @param templateCard * @return */ @Transactional @Override - public Integer reviewByQyWx(TemplateCard templateCard) { + public Map reviewByQyWx(TemplateCard templateCard) { Map result = new HashMap<>(); @@ -882,6 +1152,10 @@ public class StockTakingServiceImpl implements StockTakingService { // 获取点击的按钮 String clickKey = templateCard.getEventKey().split("_")[1]; + + // 用于存储正常处理的订单 + List normalMinIds = new ArrayList<>(); + // 点击用户 String fromUserName = templateCard.getFromUserName(); // 根据userId获取处理人 @@ -889,16 +1163,20 @@ public class StockTakingServiceImpl implements StockTakingService { UserByPort userByPort = (UserByPort) portInfo.get("user"); // 用于最终更新 - Map map = new HashMap<>(); + Map map = new HashMap<>(); // 获取主表编号 - String o = templateCard.getEventKey().split("StockTakingId")[1]; + String o = templateCard.getEventKey().split("StockTakingId")[1]; Integer mainId = ObjectFormatUtil.toInteger(o); + + // 用于标识是否向盘点人员发送卡片 + Boolean flag = true; + // 获取主单 StockTaking mainRecord = stockTakingMapper.selectStockTakingById(mainId); Integer departmentManagerState = 2; - if ("pass".equals(clickKey)) { + if (clickKey.contains("pass")) { // 如果审核通过 departmentManagerState = 1; @@ -965,7 +1243,6 @@ public class StockTakingServiceImpl implements StockTakingService { materialById.setQuantity(oldQuantity + newInventory); - // 用于计算新的库位数量 Integer newNumberForPlace = 0; // 用于计算新的库位与物料对应关系的数量 @@ -1017,49 +1294,79 @@ public class StockTakingServiceImpl implements StockTakingService { placeAndMaterialByMidAndPid.setQuantity(newNumberForMatrialAndPlace); } - - - // 更新库位 - placeMapper.UpdatePlace(placeById); - - - // 更新库位与物料的对应关系 - placeMapper.updateMaterialAndPlace(placeAndMaterialByMidAndPid); - - - // 更新当前物料信息 - materialMapper.updateMaterial(materialById); + normalMinIds.add(minRecord.getId()); } + if (errIds.size() > 0) { // 如果有出错的情况 - errMsg.put("errIds", errIds); errMsg.put("errMsg", err); result.put("errMsg", errMsg); + flag = false; } - } - else{ - map.put("state",departmentManagerState); + + if(flag) { + // 抄送盘点调账记录给盘点人员 + new Thread(new Runnable() { + @Override + public void run() { + // 获取盘点人员 + UserByPort originator = PageController.FindUserById(mainRecord.getOriginator(), null); + String workwechat = originator.getWorkwechat(); +// JSONObject jsonObject = qyWxOperationService.sendQyWxToStockTakingMessage("PangFuZhen,", mainId, normalMinIds); + JSONObject jsonObject = qyWxOperationService.sendQyWxToStockTakingMessage(workwechat, mainId, normalMinIds); + if(jsonObject!=null){ + // 将当前返回结果保存到redis中 + Map QyWxMessageMap = new HashMap<>(); + QyWxMessageMap.put("MsgId",jsonObject.getString("msgid")); + QyWxMessageMap.put("responseCode",jsonObject.getString("response_code")); + // key user:300450:QyWxOut:1 + // 申请人number + redisTemplate.opsForHash().putAll("user:"+originator.getNumber()+":QyWxStockTakingCompleteId:"+mainId,QyWxMessageMap); + // 设置过期时间为三天 + redisTemplate.expire("user:"+originator.getNumber()+":QyWxStockTakingCompleteId:"+mainId,72, TimeUnit.HOURS); + } + } + }).start(); + + }else{ + // 发送错误消息提醒负责人 + new Thread(new Runnable() { + @Override + public void run() { + // 获取盘点人员 + UserByPort originator = PageController.FindUserById(mainRecord.getOriginator(), null); + String workwechat = originator.getWorkwechat(); +// qyWxOperationService.sendStockTakingErrMessageToHead("PangFuZhen,", errIds, mainRecord,null); + qyWxOperationService.sendStockTakingErrMessageToHead(workwechat, errIds, mainRecord,null); + } + }).start(); + } + } else { + map.put("state", departmentManagerState); } // 更新结果 - - map.put("id", mainId); - map.put("departmentManagerState",departmentManagerState); - String simpleTime = DateUtil.getSimpleTime(new Date()); - map.put("completeTime", DateUtil.DateTimeToTimeStamp(simpleTime)); - map.put("departmentManager",userByPort.getId()); - stockTakingMapper.updateStockTaking(map); - return 1; + if(flag) { + map.put("id", mainId); + map.put("departmentManagerState", departmentManagerState); + String simpleTime = DateUtil.getSimpleTime(new Date()); + map.put("reviewTime", DateUtil.DateTimeToTimeStamp(simpleTime)); + map.put("departmentManager", userByPort.getId()); + stockTakingMapper.updateStockTaking(map); + } + return result; } - - - + /** + * 用于创建编码 + * @param depositoryName + * @return + */ public String createTakingCode(String depositoryName) { String key = "wms_stockTakingNumber"; RLock lock = redissonClient.getLock(key); diff --git a/src/main/resources/application-test.yml b/src/main/resources/application-test.yml index 18c56b83..369191bd 100644 --- a/src/main/resources/application-test.yml +++ b/src/main/resources/application-test.yml @@ -17,8 +17,8 @@ spring: ##数据库设置 datasource: - username: root - password: root + username: depository + password: NhE47edekBHxhjYk url: jdbc:mysql://localhost:3306/depository?serverTimezone=Asia/Shanghai&zeroDateTimeBehavior=convertToNull driver-class-name: com.mysql.cj.jdbc.Driver type: com.alibaba.druid.pool.DruidDataSource diff --git a/src/main/resources/templates/pages/application/application-in.html b/src/main/resources/templates/pages/application/application-in.html index 20bd1f1a..ed82ada1 100644 --- a/src/main/resources/templates/pages/application/application-in.html +++ b/src/main/resources/templates/pages/application/application-in.html @@ -441,12 +441,16 @@ contentType: "application/json;charset=utf-8", success: function (d) { var d = d.data; + var idNumber = materialId.name.split("mid")[1]; if (d == null) { layer.msg("没有该编码,请确认是否输入正确"); materialName.value = ""; materialId.value = ""; priceValue.value = ""; obj.value = ""; + $("#barCode"+idNumber).remove(); + form.render(); + } else { materialName.value = d.mname; materialId.value = d.id; @@ -459,15 +463,18 @@ var barCodeImg = barCodeItem.childNodes[1].childNodes[3]; var id = barCodeInput.id; $("#"+id).remove(); - $("#barCode").remove(); - // barCodeInput.style = "display:none"; - var idNumber = materialId.name.split("mid")[1]; - var barCodeSelect = ` - `; - - $("#"+barCodeImg.id).before(barCodeSelect); + $("#" + barCodeImg.id).before(barCodeSelect); + } form.render(); + $.each(materialAndBarCodeList, function (index, item) { $("#barCode"+idNumber).append(new Option(item.bmcode, item.id));//往下拉菜单里添加元素 }); @@ -760,6 +767,7 @@ } if (materialList.length > 0) { for (let i = 1; i <= materialList.length; i++) { + materialList[i-1].mid = materialList[i-1].id; Coverpage(i, materialList[i - 1]); var materialbyBarCodeList = materialList[i-1]["materialAndBarCodeList"]; $.each(materialbyBarCodeList, function (index, item) { 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 6c9966aa..8a1accec 100644 --- a/src/main/resources/templates/pages/application/application-in_back.html +++ b/src/main/resources/templates/pages/application/application-in_back.html @@ -61,14 +61,14 @@
-
-
@@ -80,7 +80,7 @@ lay-verify="required"/> - diff --git a/src/main/resources/templates/pages/application/application-in_scanQrCode.html b/src/main/resources/templates/pages/application/application-in_scanQrCode.html index c9057df2..d7d99d42 100644 --- a/src/main/resources/templates/pages/application/application-in_scanQrCode.html +++ b/src/main/resources/templates/pages/application/application-in_scanQrCode.html @@ -140,12 +140,17 @@ if (materialList.length > 0) { for (let i = 0; i < materialList.length; i++) { initForm(i, materialList[i]); + form.render(); var materialAndBarCodeList = materialList[i]["materialAndBarCodeList"]; + var num = i; + if(num === 0){ + num = ""; + } $.each(materialAndBarCodeList, function (index, item) { - $("#barCode"+i).append(new Option(item.bmcode, item.id));//往下拉菜单里添加元素 + $("#barCode"+num).append(new Option(item.bmcode, item.id));//往下拉菜单里添加元素 }); + form.render() } - form.render() } else { var material = {}; material.mname = ''; @@ -245,14 +250,14 @@
- +
-
@@ -445,6 +450,18 @@ class="layui-input" lay-verify="required"> +
+ +
+
+ + +
+
+
@@ -473,7 +490,7 @@ // 获取当前高度 var height = parseInt(($("#stepForm").css('height')).split("px")[0]); params.push(NewIdNumber) - $("#stepForm").css("height", height + 475 + 'px'); + $("#stepForm").css("height", height + 530 + 'px'); var materialItem = firstItem + depositoryItem + lastItem; $("#" + parentId).after(materialItem); }; @@ -487,7 +504,7 @@ // 获取祖父节点 var reparent = parent.parentNode; var height = parseInt(($("#stepForm").css('height')).split("px")[0]); - $("#stepForm").css("height", height - 475 + 'px'); + $("#stepForm").css("height", height - 530 + 'px'); params = remove(params, parentId); reparent.removeChild(parent); }; @@ -512,10 +529,19 @@ var code = obj.value; // 获取对应元素 var parent = obj.parentNode.parentNode.parentNode; - var children = parent.childNodes[5]; - var materialItem = children.childNodes[3].childNodes[1].childNodes; + var materialChildren = parent.childNodes[5]; + var priceChildren = parent.childNodes[11]; + var barCodeChildren = parent.childNodes[9]; + // 物料条目 + var materialItem = materialChildren.childNodes[3].childNodes[1].childNodes; var materialName = materialItem[1]; var materialId = materialName.parentNode.parentNode.childNodes[3]; + // 单价条目 + var priceItem = priceChildren.childNodes[3].childNodes; + var priceValue = priceItem[1]; + // 条形码条码 + var barCodeItem = barCodeChildren.childNodes[3]; + var req = {}; req.code = code; req.type = "in"; @@ -527,14 +553,44 @@ contentType: "application/json;charset=utf-8", success: function (d) { var d = d.data; + var idNumber = materialId.name.split("mid")[1]; if (d == null) { layer.msg("没有该编码,请确认是否输入正确"); materialName.value = ""; materialId.value = ""; + priceValue.value = ""; obj.value = ""; + $("#barCode" + idNumber).remove(); + form.render(); } else { materialName.value = d.mname; materialId.value = d.id; + priceValue.value = d.price; + // 获取物料与条形码的对应关系 + var materialAndBarCodeList = d["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(); + } } } }); @@ -626,6 +682,52 @@ }); }; + scanBarCode = function (obj) { + layer.open({ + type: 2, + title: '扫码', + skin: 'layui-layer-rim', + maxmin: true, + shadeClose: true, //点击遮罩关闭层 + area: ['100%', '100%'], + move: '.layui-layer-title', + fixed: false, + content: '/scanBarCodeIn', + end: function () { + $.ajax({ + url: "/material/application_in_scanBarCode", + type: "get", + dataType: 'json', + contentType: "application/json;charset=utf-8", + success: function (d) { + var data = d.data; + var materialList = data["materialList"]; + var depository = data["depository"]; + var place = data["place"]; + if (depository !== undefined && depository !== null && depository !== "") { + // 如果扫描到仓库 + scanValue.depository = depository; + } + if (place !== undefined && place !== null && place !== "") { + // 如果扫描到库位 + scanValue.place = place; + } + if (materialList.length > 0) { + for (let i = 1; i <= materialList.length; i++) { + materialList[i-1].code = materialList[i-1].mcode; + Coverpage(i, materialList[i - 1]); + $.each(materialList, function (index, item) { + $("#barCode"+i).append(new Option(item.bmcode, item.id));//往下拉菜单里添加元素 + }); + } + form.render(); + } + } + }) + } + }) + }; + // 用于打开仓库树形菜单 openDepositoryTree = function (obj) { var parent = obj.parentNode.parentNode.parentNode; diff --git a/src/main/resources/templates/pages/application/application-out.html b/src/main/resources/templates/pages/application/application-out.html index f4a1abab..4c5ba740 100644 --- a/src/main/resources/templates/pages/application/application-out.html +++ b/src/main/resources/templates/pages/application/application-out.html @@ -23,6 +23,11 @@ margin-left: 80px; } + .layui-form-select{ + width: 100%; + border-style: none; + } +
@@ -215,7 +220,7 @@ complete: function () { layer.close(this.layerIndex); } - }) + }); return false; }); @@ -269,7 +274,7 @@ value="" class="layui-input" style="border-style: none"> -
@@ -432,23 +437,25 @@ { materialName.value = d.mname; materialId.value = d.id; + var idNumber = materialId.name.split("mid")[1]; // 获取物料与条形码的对应关系 var materialAndBarCodeList = d["materialAndBarCodeList"]; if (materialAndBarCodeList.length > 0) { // 如果有对应的条形码 var barCodeInput = barCodeItem.childNodes[1].childNodes[1]; var barCodeImg = barCodeItem.childNodes[1].childNodes[3]; - console.log(barCodeItem) var id = barCodeInput.id; - $("#" + id).remove(); - $("#barCode").remove(); - // barCodeInput.style = "display:none"; - var idNumber = materialId.name.split("mid")[1]; - var barCodeSelect = ` + $("#"+id).remove(); + $("#barCode"+idNumber).empty(); + var barCode = $("#barCode"+idNumber); + if(barCode.length > 0) { + barCode.empty(); + }else{ + var barCodeSelect = ` `; - - $("#" + barCodeImg.id).before(barCodeSelect); + $("#" + barCodeImg.id).before(barCodeSelect); + } form.render(); $.each(materialAndBarCodeList, function (index, item) { $("#barCode" + idNumber).append(new Option(item.bmcode, item.id));//往下拉菜单里添加元素 diff --git a/src/main/resources/templates/pages/chart/chart-in_back.html b/src/main/resources/templates/pages/chart/chart-in_back.html index 7a5463c4..b55472d4 100644 --- a/src/main/resources/templates/pages/chart/chart-in_back.html +++ b/src/main/resources/templates/pages/chart/chart-in_back.html @@ -474,21 +474,26 @@ type: 'get', async: true, dataType: "json", + complete: function (XHR, TS) { if (XHR.status != 200) { layer.alert("系统繁忙,稍后重试"); } }, + beforeSend: function () { + this.layerIndex = layer.load(0, {shade: [0.5, '#393D49']}); + }, success: function (result) { + layer.close(this.layerIndex); echartsRecords.setOption(optionRecords); // 折线图 var optionRecordsSeries = []; - for (let i = 0; i < result.data.depository_name.length; i++) { + for (let i = 0; i < result.depository_name.length; i++) { optionRecordsSeries.push({ - name: result.data.depository_name[i], + name: result.depository_name[i], type: 'line', stack: '金额', - data: result.data.depository_data.data[result.data.depository_name[i]], + data: result.data[result.depository_name[i]], areaStyle: {} }); } @@ -506,7 +511,7 @@ } }, legend: { - data: result.data.depository_name + data: result.depository_name }, toolbox: { feature: { @@ -523,7 +528,7 @@ { type: 'category', boundaryGap: false, - data: result.data.depository_data.week + data: result.week } ], yAxis: [ @@ -536,7 +541,7 @@ echartsRecords.setOption(optionRecords); } }) - }) + }); form.on('submit(lastWeek)', function () { $.ajax({ @@ -549,16 +554,20 @@ layer.alert("系统繁忙,稍后重试"); } }, + beforeSend: function () { + this.layerIndex = layer.load(0, {shade: [0.5, '#393D49']}); + }, success: function (result) { + layer.close(this.layerIndex); echartsRecords.setOption(optionRecords); // 折线图 var optionRecordsSeries = []; - for (let i = 0; i < result.data.depository_name.length; i++) { + for (let i = 0; i < result.depository_name.length; i++) { optionRecordsSeries.push({ - name: result.data.depository_name[i], + name: result.depository_name[i], type: 'line', stack: '金额', - data: result.data.depository_data.data[result.data.depository_name[i]], + data: result.data[result.depository_name[i]], areaStyle: {} }); } @@ -576,7 +585,7 @@ } }, legend: { - data: result.data.depository_name + data: result.depository_name }, toolbox: { feature: { @@ -593,7 +602,7 @@ { type: 'category', boundaryGap: false, - data: result.data.depository_data.week + data: result.week } ], yAxis: [ diff --git a/src/main/resources/templates/pages/chart/chart-out_back.html b/src/main/resources/templates/pages/chart/chart-out_back.html index 20966ea6..5a6d7415 100644 --- a/src/main/resources/templates/pages/chart/chart-out_back.html +++ b/src/main/resources/templates/pages/chart/chart-out_back.html @@ -465,7 +465,7 @@ // 获取本周 form.on('submit(thisWeek)', function () { $.ajax({ - url: '/repository/layui/echart_back?type=2', + url: '/repository/layui/echart_back_thisWeek?type=2', type: 'get', async: true, dataType: "json", @@ -474,16 +474,20 @@ layer.alert("系统繁忙,稍后重试"); } }, + beforeSend: function () { + this.layerIndex = layer.load(0, {shade: [0.5, '#393D49']}); + }, success: function (result) { + layer.close(this.layerIndex); echartsRecords.setOption(optionRecords); // 折线图 var optionRecordsSeries = []; - for (let i = 0; i < result.data.depository_name.length; i++) { + for (let i = 0; i < result.depository_name.length; i++) { optionRecordsSeries.push({ - name: result.data.depository_name[i], + name: result.depository_name[i], type: 'line', stack: '金额', - data: result.data.depository_data.data[result.data.depository_name[i]], + data: result.data[result.depository_name[i]], areaStyle: {} }); } @@ -501,7 +505,7 @@ } }, legend: { - data: result.data.depository_name + data: result.depository_name }, toolbox: { feature: { @@ -518,7 +522,7 @@ { type: 'category', boundaryGap: false, - data: result.data.depository_data.week + data: result.week } ], yAxis: [ @@ -536,7 +540,7 @@ // 获取上周 form.on('submit(lastWeek)', function () { $.ajax({ - url: '/repository/layui/echart_back?type=2&last=1', + url: '/repository/layui/echart_back_lastWeek?type=2', type: 'get', async: true, dataType: "json", @@ -545,16 +549,20 @@ layer.alert("系统繁忙,稍后重试"); } }, + beforeSend: function () { + this.layerIndex = layer.load(0, {shade: [0.5, '#393D49']}); + }, success: function (result) { + layer.close(this.layerIndex); echartsRecords.setOption(optionRecords); // 折线图 var optionRecordsSeries = []; - for (let i = 0; i < result.data.depository_name.length; i++) { + for (let i = 0; i < result.depository_name.length; i++) { optionRecordsSeries.push({ - name: result.data.depository_name[i], + name: result.depository_name[i], type: 'line', stack: '金额', - data: result.data.depository_data.data[result.data.depository_name[i]], + data: result.data[result.depository_name[i]], areaStyle: {} }); } @@ -572,7 +580,7 @@ } }, legend: { - data: result.data.depository_name + data: result.depository_name }, toolbox: { feature: { @@ -589,7 +597,7 @@ { type: 'category', boundaryGap: false, - data: result.data.depository_data.week + data: result.week } ], yAxis: [ diff --git a/src/main/resources/templates/pages/chart/chart-stock.html b/src/main/resources/templates/pages/chart/chart-stock.html index b8e93f1c..07f2baab 100644 --- a/src/main/resources/templates/pages/chart/chart-stock.html +++ b/src/main/resources/templates/pages/chart/chart-stock.html @@ -33,84 +33,14 @@
-
-
- -
-
库存物料数量
-
-
-
- 9,054,056 -
-
- 比昨天 ▲0.12
- 比七日 ▼0.06 -
-
-
-
- -
-
- -
-
库存物料金额
-
-
-
- 9,054,056 -
-
- 比昨天 ▲0.12
- 比七日 ▼0.06 -
-
-
-
- -
-
- -
-
库存物料数量
-
-
-
- 9,054,056 -
-
- 比昨天 ▲0.12
- 比七日 ▼0.06 -
-
-
-
- -
-
- -
-
库存物料金额
-
-
-
- 9,054,056 -
-
- 比昨天 ▲0.12
- 比七日 ▼0.06 -
-
-
-
- -
- -
-
+ +
@@ -131,22 +61,23 @@
+ diff --git a/src/main/resources/templates/pages/chart/chart-stock_back.html b/src/main/resources/templates/pages/chart/chart-stock_back.html index f1faf7d4..849d5b3e 100644 --- a/src/main/resources/templates/pages/chart/chart-stock_back.html +++ b/src/main/resources/templates/pages/chart/chart-stock_back.html @@ -388,7 +388,7 @@ form.on('submit(thisWeek)', function () { $.ajax({ - url:'/repository/layui/echart_back?type=0', + url:'/repository/layui/echart_back_thisWeek?type=0', type:'get', async:true, dataType: "json", @@ -397,16 +397,20 @@ layer.alert("系统繁忙,稍后重试"); } }, - success:function (result){ + beforeSend: function () { + this.layerIndex = layer.load(0, {shade: [0.5, '#393D49']}); + }, + success: function (result) { + layer.close(this.layerIndex); echartsRecords.setOption(optionRecords); // 折线图 var optionRecordsSeries=[]; - for (let i = 0; i < result.data.depository_name.length; i++) { + for (let i = 0; i < result.depository_name.length; i++) { optionRecordsSeries.push({ - name: result.data.depository_name[i], + name: result.depository_name[i], type: 'line', stack: '金额', - data:result.data.depository_data.ThisWeekInventory[result.data.depository_name[i]], + data:result.ThisWeekInventory[result.depository_name[i]], areaStyle: {} }); } @@ -424,7 +428,7 @@ } }, legend: { - data: result.data.depository_name + data: result.depository_name }, toolbox: { feature: { @@ -441,7 +445,7 @@ { type: 'category', boundaryGap: false, - data: result.data.depository_data.week + data: result.week } ], yAxis: [ @@ -458,7 +462,7 @@ form.on('submit(lastWeek)', function () { $.ajax({ - url:'/repository/layui/echart_back?type=0&last=1', + url:'/repository/layui/echart_back_lastWeek?type=0', type:'get', async:true, dataType: "json", @@ -467,16 +471,20 @@ layer.alert("系统繁忙,稍后重试"); } }, - success:function (result){ + beforeSend: function () { + this.layerIndex = layer.load(0, {shade: [0.5, '#393D49']}); + }, + success: function (result) { + layer.close(this.layerIndex); echartsRecords.setOption(optionRecords); // 折线图 var optionRecordsSeries=[]; - for (let i = 0; i < result.data.depository_name.length; i++) { + for (let i = 0; i < result.depository_name.length; i++) { optionRecordsSeries.push({ - name: result.data.depository_name[i], + name: result.depository_name[i], type: 'line', stack: '金额', - data:result.data.depository_data.BeforeInventory[result.data.depository_name[i]], + data:result.BeforeInventory[result.depository_name[i]], areaStyle: {} }); } @@ -494,7 +502,7 @@ } }, legend: { - data: result.data.depository_name + data: result.depository_name }, toolbox: { feature: { @@ -511,7 +519,7 @@ { type: 'category', boundaryGap: false, - data: result.data.depository_data.week + data: result.week } ], yAxis: [ diff --git a/src/main/resources/templates/pages/depository/table-stock.html b/src/main/resources/templates/pages/depository/table-stock.html index b4a63a9c..5a05266f 100644 --- a/src/main/resources/templates/pages/depository/table-stock.html +++ b/src/main/resources/templates/pages/depository/table-stock.html @@ -247,6 +247,7 @@ table.on('tool(currentTableFilter)', function (obj) { let data = obj.data; + console.log(data) if (obj.event === 'applicationIn') { // 入库申请 var index = layer.open({ diff --git a/src/main/resources/templates/pages/stockTaking/stockTaking.html b/src/main/resources/templates/pages/stockTaking/stockTaking.html index 06687cae..e69480a3 100644 --- a/src/main/resources/templates/pages/stockTaking/stockTaking.html +++ b/src/main/resources/templates/pages/stockTaking/stockTaking.html @@ -299,6 +299,11 @@ let placeId; // 用于存储当前选择的负责人 let departmentManagerId; + + // 用于存储没有对应关系的物料 + let barCodeList = {}; + + let needToUpdate = {}; layui.use(['form', 'step', 'flow'], function () { var $ = layui.$, form = layui.form, @@ -374,6 +379,8 @@ form.on('submit(formStep)', function (data) { data = data.field; data.params = params; + data.needToUpdate = needToUpdate; + data.barCodeListByNoMaterial = barCodeList; $.ajax({ url: "/stockTaking/addStockTakingRecord", type: 'post', @@ -1081,7 +1088,9 @@ } }; // 用于扫描条形码 - scanBarCodeForTaking = function () { + scanBarCodeForTaking = function (obj) { + var id = obj.id; + id = id.split("barCodeImg")[1]; if (depositoryId !== undefined && departmentManagerId !== undefined && departmentManagerId !== "") { layer.open({ type: 2, @@ -1106,6 +1115,7 @@ success: function (d) { var data = d.data; var materialList = data["materialList"]; + var barCodeListByNoMaterial = data["barCodeListByNoMaterial"]; if (materialList.length > 0) { for (let i = 1; i <= materialList.length; i++) { Coverpage(i, materialList[i - 1]); @@ -1116,6 +1126,41 @@ } form.render(); } + if(barCodeListByNoMaterial.length > 0){ + // 如果扫描的条形码没有对应的物料 + var content = '
' + + '

未发现的条码,是否需要添加对应关系


' + + ''; + for (let i = 0; i < barCodeListByNoMaterial.length; i++) { + var item = "" + content+=item; + } + content+='
"+barCodeListByNoMaterial[i]+"
'; + layer.open({ + type: 1 + ,title: false //不显示标题栏 + ,closeBtn: false + ,area: '300px;' + ,shade: 0.8 + ,id: 'LAY_layuipro' //设定一个id,防止重复弹出 + ,btn: ['添加', '取消'] + ,btnAlign:'c' + ,moveType: 1 //拖拽模式,0或者1 + ,content: content + ,success: function(layero){ + var btn = layero.find('.layui-layer-btn'); + btn.find('.layui-layer-btn0').click(function () { + $.each(barCodeListByNoMaterial, function (index, item) { + $("#barCode"+id).append(new Option(item, index));//往下拉菜单里添加元素 + }); + barCodeList["barCode"+id] = barCodeListByNoMaterial; + needToUpdate["barCode"+id] = true; + form.render() + }); + } + }); + + } } }) } diff --git a/src/main/resources/templates/pages/stockTaking/stockTakingComplete.html b/src/main/resources/templates/pages/stockTaking/stockTakingComplete.html index 8688354d..94d89dc8 100644 --- a/src/main/resources/templates/pages/stockTaking/stockTakingComplete.html +++ b/src/main/resources/templates/pages/stockTaking/stockTakingComplete.html @@ -51,7 +51,8 @@
- + @@ -119,6 +121,7 @@
@@ -157,7 +160,7 @@
@@ -167,7 +170,7 @@
@@ -185,7 +188,7 @@
- @@ -195,7 +198,7 @@
- @@ -205,7 +208,6 @@
@@ -218,21 +220,12 @@
-
- +
-
- -
-
-
-
- -
@@ -251,15 +244,16 @@ diff --git a/target/classes/templates/pages/chart/chart-stock_back.html b/target/classes/templates/pages/chart/chart-stock_back.html index f1faf7d4..849d5b3e 100644 --- a/target/classes/templates/pages/chart/chart-stock_back.html +++ b/target/classes/templates/pages/chart/chart-stock_back.html @@ -388,7 +388,7 @@ form.on('submit(thisWeek)', function () { $.ajax({ - url:'/repository/layui/echart_back?type=0', + url:'/repository/layui/echart_back_thisWeek?type=0', type:'get', async:true, dataType: "json", @@ -397,16 +397,20 @@ layer.alert("系统繁忙,稍后重试"); } }, - success:function (result){ + beforeSend: function () { + this.layerIndex = layer.load(0, {shade: [0.5, '#393D49']}); + }, + success: function (result) { + layer.close(this.layerIndex); echartsRecords.setOption(optionRecords); // 折线图 var optionRecordsSeries=[]; - for (let i = 0; i < result.data.depository_name.length; i++) { + for (let i = 0; i < result.depository_name.length; i++) { optionRecordsSeries.push({ - name: result.data.depository_name[i], + name: result.depository_name[i], type: 'line', stack: '金额', - data:result.data.depository_data.ThisWeekInventory[result.data.depository_name[i]], + data:result.ThisWeekInventory[result.depository_name[i]], areaStyle: {} }); } @@ -424,7 +428,7 @@ } }, legend: { - data: result.data.depository_name + data: result.depository_name }, toolbox: { feature: { @@ -441,7 +445,7 @@ { type: 'category', boundaryGap: false, - data: result.data.depository_data.week + data: result.week } ], yAxis: [ @@ -458,7 +462,7 @@ form.on('submit(lastWeek)', function () { $.ajax({ - url:'/repository/layui/echart_back?type=0&last=1', + url:'/repository/layui/echart_back_lastWeek?type=0', type:'get', async:true, dataType: "json", @@ -467,16 +471,20 @@ layer.alert("系统繁忙,稍后重试"); } }, - success:function (result){ + beforeSend: function () { + this.layerIndex = layer.load(0, {shade: [0.5, '#393D49']}); + }, + success: function (result) { + layer.close(this.layerIndex); echartsRecords.setOption(optionRecords); // 折线图 var optionRecordsSeries=[]; - for (let i = 0; i < result.data.depository_name.length; i++) { + for (let i = 0; i < result.depository_name.length; i++) { optionRecordsSeries.push({ - name: result.data.depository_name[i], + name: result.depository_name[i], type: 'line', stack: '金额', - data:result.data.depository_data.BeforeInventory[result.data.depository_name[i]], + data:result.BeforeInventory[result.depository_name[i]], areaStyle: {} }); } @@ -494,7 +502,7 @@ } }, legend: { - data: result.data.depository_name + data: result.depository_name }, toolbox: { feature: { @@ -511,7 +519,7 @@ { type: 'category', boundaryGap: false, - data: result.data.depository_data.week + data: result.week } ], yAxis: [ diff --git a/target/classes/templates/pages/depository/table-stock.html b/target/classes/templates/pages/depository/table-stock.html index b4a63a9c..5a05266f 100644 --- a/target/classes/templates/pages/depository/table-stock.html +++ b/target/classes/templates/pages/depository/table-stock.html @@ -247,6 +247,7 @@ table.on('tool(currentTableFilter)', function (obj) { let data = obj.data; + console.log(data) if (obj.event === 'applicationIn') { // 入库申请 var index = layer.open({ diff --git a/target/classes/templates/pages/stockTaking/stockTaking.html b/target/classes/templates/pages/stockTaking/stockTaking.html index 06687cae..e69480a3 100644 --- a/target/classes/templates/pages/stockTaking/stockTaking.html +++ b/target/classes/templates/pages/stockTaking/stockTaking.html @@ -299,6 +299,11 @@ let placeId; // 用于存储当前选择的负责人 let departmentManagerId; + + // 用于存储没有对应关系的物料 + let barCodeList = {}; + + let needToUpdate = {}; layui.use(['form', 'step', 'flow'], function () { var $ = layui.$, form = layui.form, @@ -374,6 +379,8 @@ form.on('submit(formStep)', function (data) { data = data.field; data.params = params; + data.needToUpdate = needToUpdate; + data.barCodeListByNoMaterial = barCodeList; $.ajax({ url: "/stockTaking/addStockTakingRecord", type: 'post', @@ -1081,7 +1088,9 @@ } }; // 用于扫描条形码 - scanBarCodeForTaking = function () { + scanBarCodeForTaking = function (obj) { + var id = obj.id; + id = id.split("barCodeImg")[1]; if (depositoryId !== undefined && departmentManagerId !== undefined && departmentManagerId !== "") { layer.open({ type: 2, @@ -1106,6 +1115,7 @@ success: function (d) { var data = d.data; var materialList = data["materialList"]; + var barCodeListByNoMaterial = data["barCodeListByNoMaterial"]; if (materialList.length > 0) { for (let i = 1; i <= materialList.length; i++) { Coverpage(i, materialList[i - 1]); @@ -1116,6 +1126,41 @@ } form.render(); } + if(barCodeListByNoMaterial.length > 0){ + // 如果扫描的条形码没有对应的物料 + var content = '
' + + '

未发现的条码,是否需要添加对应关系


' + + ''; + for (let i = 0; i < barCodeListByNoMaterial.length; i++) { + var item = "" + content+=item; + } + content+='
"+barCodeListByNoMaterial[i]+"
'; + layer.open({ + type: 1 + ,title: false //不显示标题栏 + ,closeBtn: false + ,area: '300px;' + ,shade: 0.8 + ,id: 'LAY_layuipro' //设定一个id,防止重复弹出 + ,btn: ['添加', '取消'] + ,btnAlign:'c' + ,moveType: 1 //拖拽模式,0或者1 + ,content: content + ,success: function(layero){ + var btn = layero.find('.layui-layer-btn'); + btn.find('.layui-layer-btn0').click(function () { + $.each(barCodeListByNoMaterial, function (index, item) { + $("#barCode"+id).append(new Option(item, index));//往下拉菜单里添加元素 + }); + barCodeList["barCode"+id] = barCodeListByNoMaterial; + needToUpdate["barCode"+id] = true; + form.render() + }); + } + }); + + } } }) } diff --git a/target/classes/templates/pages/stockTaking/stockTakingComplete.html b/target/classes/templates/pages/stockTaking/stockTakingComplete.html new file mode 100644 index 00000000..94d89dc8 --- /dev/null +++ b/target/classes/templates/pages/stockTaking/stockTakingComplete.html @@ -0,0 +1,306 @@ + + + + + 仓库盘点 + + + + + + + + + +
+
+ +
+
+ + + + + \ No newline at end of file diff --git a/target/classes/templates/pages/stockTaking/stockTakingReview.html b/target/classes/templates/pages/stockTaking/stockTakingReview.html index b951d090..b6bdba1c 100644 --- a/target/classes/templates/pages/stockTaking/stockTakingReview.html +++ b/target/classes/templates/pages/stockTaking/stockTakingReview.html @@ -195,7 +195,7 @@
- @@ -279,7 +279,7 @@ let data = {}; data.mainId = $("#mainId").val(); data.auditOpinion = $("#auditOpinion").val(); - data.state = pass; + data.departmentManagerState = pass; $.ajax({ url:"/stockTaking/review", @@ -304,12 +304,13 @@ skin: 'layui-layer-rim', maxmin: true, shadeClose: true, //点击遮罩关闭层 - area: ['70%', '70%'], + area: ['100%', '100%'], move: '.layui-layer-title', fixed: false, content: '/stockTakingTransfer?minIds='+errMsg.errIds, end: function (res) { if(res.status >= 300){ + layer.close(layer.index); layer.msg("提交失败,联系开发人员解决", { icon: 5,//成功的表情 time: 500 //1秒关闭(如果不配置,默认是3秒) @@ -317,6 +318,7 @@ window.location = '/StockTakingView?id='+data.mainId; }); }else{ + layer.close(layer.index); layer.msg("提交成功", { icon: 6,//成功的表情 time: 500 //1秒关闭(如果不配置,默认是3秒) diff --git a/target/classes/templates/pages/stockTaking/stockTakingView.html b/target/classes/templates/pages/stockTaking/stockTakingView.html index cea6c1b5..5ab54afa 100644 --- a/target/classes/templates/pages/stockTaking/stockTakingView.html +++ b/target/classes/templates/pages/stockTaking/stockTakingView.html @@ -51,7 +51,8 @@
- + -
@@ -250,28 +267,40 @@