Browse Source

完成库存盘点功能

lwx_dev
erdanergou 3 years ago
parent
commit
4aefe2917f
  1. 8
      src/main/java/com/dreamchaser/depository_manage/config/PortConfig.java
  2. 55
      src/main/java/com/dreamchaser/depository_manage/controller/DepositoryController.java
  3. 36
      src/main/java/com/dreamchaser/depository_manage/controller/DepositoryRecordController.java
  4. 83
      src/main/java/com/dreamchaser/depository_manage/controller/MaterialController.java
  5. 28
      src/main/java/com/dreamchaser/depository_manage/controller/PageController.java
  6. 39
      src/main/java/com/dreamchaser/depository_manage/controller/QyWxOperationController.java
  7. 33
      src/main/java/com/dreamchaser/depository_manage/controller/StockTakingController.java
  8. 12
      src/main/java/com/dreamchaser/depository_manage/entity/StockTaking.java
  9. 15
      src/main/java/com/dreamchaser/depository_manage/mapper/StockTakingMapper.java
  10. 46
      src/main/java/com/dreamchaser/depository_manage/mapper/StockTakingMapper.xml
  11. 12
      src/main/java/com/dreamchaser/depository_manage/pojo/StockTakingP.java
  12. 19
      src/main/java/com/dreamchaser/depository_manage/service/StockTakingService.java
  13. 24
      src/main/java/com/dreamchaser/depository_manage/service/impl/DepositoryRecordServiceImpl.java
  14. 484
      src/main/java/com/dreamchaser/depository_manage/service/impl/QyWxOperationService.java
  15. 617
      src/main/java/com/dreamchaser/depository_manage/service/impl/StockTakingServiceImpl.java
  16. 4
      src/main/resources/application-test.yml
  17. 22
      src/main/resources/templates/pages/application/application-in.html
  18. 6
      src/main/resources/templates/pages/application/application-in_back.html
  19. 118
      src/main/resources/templates/pages/application/application-in_scanQrCode.html
  20. 27
      src/main/resources/templates/pages/application/application-out.html
  21. 31
      src/main/resources/templates/pages/chart/chart-in_back.html
  22. 32
      src/main/resources/templates/pages/chart/chart-out_back.html
  23. 468
      src/main/resources/templates/pages/chart/chart-stock.html
  24. 36
      src/main/resources/templates/pages/chart/chart-stock_back.html
  25. 1
      src/main/resources/templates/pages/depository/table-stock.html
  26. 47
      src/main/resources/templates/pages/stockTaking/stockTaking.html
  27. 108
      src/main/resources/templates/pages/stockTaking/stockTakingComplete.html
  28. 8
      src/main/resources/templates/pages/stockTaking/stockTakingReview.html
  29. 55
      src/main/resources/templates/pages/stockTaking/stockTakingView.html
  30. 4
      src/main/resources/templates/pages/stockTaking/stockTransfer.html
  31. 5
      src/test/java/com/dreamchaser/depository_manage/Test.java
  32. 0
      target/classes/.restartTriggerFile
  33. BIN
      target/classes/META-INF/depository_manage (2).kotlin_module
  34. 17
      target/classes/META-INF/spring-configuration-metadata.json
  35. 4
      target/classes/application-test.yml
  36. 46
      target/classes/com/dreamchaser/depository_manage/mapper/StockTakingMapper.xml
  37. 22
      target/classes/templates/pages/application/application-in.html
  38. 6
      target/classes/templates/pages/application/application-in_back.html
  39. 118
      target/classes/templates/pages/application/application-in_scanQrCode.html
  40. 27
      target/classes/templates/pages/application/application-out.html
  41. 31
      target/classes/templates/pages/chart/chart-in_back.html
  42. 32
      target/classes/templates/pages/chart/chart-out_back.html
  43. 468
      target/classes/templates/pages/chart/chart-stock.html
  44. 36
      target/classes/templates/pages/chart/chart-stock_back.html
  45. 1
      target/classes/templates/pages/depository/table-stock.html
  46. 47
      target/classes/templates/pages/stockTaking/stockTaking.html
  47. 306
      target/classes/templates/pages/stockTaking/stockTakingComplete.html
  48. 8
      target/classes/templates/pages/stockTaking/stockTakingReview.html
  49. 55
      target/classes/templates/pages/stockTaking/stockTakingView.html
  50. 4
      target/classes/templates/pages/stockTaking/stockTransfer.html

8
src/main/java/com/dreamchaser/depository_manage/config/PortConfig.java

@ -24,10 +24,10 @@ import java.util.Map;
@Data @Data
public class PortConfig { public class PortConfig {
// 接口地址 // 接口地址
public static String external_url = "http://172.20.2.87:39168"; // 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 = "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://172.20.2.87:6666";
// public static String external_url_6666 = "http://127.0.0.1:6666"; public static String external_url_6666 = "http://127.0.0.1:6666";
/** /**

55
src/main/java/com/dreamchaser/depository_manage/controller/DepositoryController.java

@ -734,30 +734,38 @@ public class DepositoryController {
Map<String, Object> show_data = new HashMap<>(); Map<String, Object> show_data = new HashMap<>();
List<Long> days = getLastTimeInterval(); List<Long> days = getLastTimeInterval();
List<Double> drCountbyDrName = new ArrayList<>(); List<Double> drCountbyDrName = new ArrayList<>();
while (it.hasNext()) {
int i;
Object key = it.next(); while (it.hasNext()) {
for (i = days.size() - 1; i > 0; i--) { int i;
// 遍历 Map并计算各仓库的入库数 Object key = it.next();
if (i == days.size() - 1) { for (i = days.size() - 1; i > 0; i--) {
depositoryName.add(key.toString()); // 遍历 Map并计算各仓库的入库数
} if (i == days.size() - 1) {
Integer val = (Integer) depositoryAllNameAndId.get(key); 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) { Double depositoryRecordByDateAndType1 = depositoryRecordService.findApplicationRecordByDate(days.get(i), days.get(i - 1), Integer.parseInt(type), val);
yesterdayData.put(key.toString(), depositoryRecordByDateAndType1); drCountbyDrName.add(depositoryRecordByDateAndType1);
if (i == 2 && flag) {
yesterdayData.put(key.toString(), depositoryRecordByDateAndType1);
}
} }
Collections.reverse(drCountbyDrName);
show_data.put(key.toString(), ((ArrayList<Double>) drCountbyDrName).clone());
drCountbyDrName.clear();
} }
Collections.reverse(drCountbyDrName);
show_data.put(key.toString(), ((ArrayList<Double>) drCountbyDrName).clone());
drCountbyDrName.clear();
}
Map<String, Object> depository_data = new HashMap<>(); Map<String, Object> depository_data = new HashMap<>();
depository_data.put("data", show_data); 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; return depository_data;
} }
@ -865,7 +873,14 @@ public class DepositoryController {
} }
Map<String, Object> depository_data = new HashMap<>(); Map<String, Object> 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("data", show_data);
depository_data.put("week", show_weekday);
depository_data.put("depository_name", depositoryName);
return depository_data; return depository_data;
} }

36
src/main/java/com/dreamchaser/depository_manage/controller/DepositoryRecordController.java

@ -292,12 +292,12 @@ public class DepositoryRecordController {
List<UserByPort> departmentHeadByUsers = findDepartmentHeadByUser(userToken); List<UserByPort> departmentHeadByUsers = findDepartmentHeadByUser(userToken);
StringBuilder departmentHeadId = new StringBuilder(); StringBuilder departmentHeadId = new StringBuilder();
StringBuilder departMentHeadQyWxName = 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(","); departmentHeadId.append(departmentHeadByUsers.get(i).getId()).append(",");
departMentHeadQyWxName.append(departmentHeadByUsers.get(i).getWorkwechat()+","); departMentHeadQyWxName.append(departmentHeadByUsers.get(i).getWorkwechat()+",");
}*/ }
departmentHeadId.append("78").append(","); departmentHeadId.append("78").append(",");
departMentHeadQyWxName.append("PangFuZhen").append(","); // departMentHeadQyWxName.append("PangFuZhen").append(",");
map.put("departmenthead",departmentHeadId.toString()); map.put("departmenthead",departmentHeadId.toString());
List<Integer> params = (List<Integer>) map.get("params"); List<Integer> params = (List<Integer>) map.get("params");
Integer integer = 0; Integer integer = 0;
@ -604,12 +604,12 @@ public class DepositoryRecordController {
List<UserByPort> departmentHeadByUsers = findDepartmentHeadByUser(userToken); List<UserByPort> departmentHeadByUsers = findDepartmentHeadByUser(userToken);
StringBuilder departmentHeadId = new StringBuilder(); StringBuilder departmentHeadId = new StringBuilder();
StringBuilder departMentHeadQyWxName = 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(","); departmentHeadId.append(departmentHeadByUsers.get(i).getId()).append(",");
departMentHeadQyWxName.append(departmentHeadByUsers.get(i).getWorkwechat()+","); departMentHeadQyWxName.append(departmentHeadByUsers.get(i).getWorkwechat()+",");
}*/ }
departmentHeadId.append("78").append(","); // departmentHeadId.append("78").append(",");
departMentHeadQyWxName.append("PangFuZhen").append(","); // departMentHeadQyWxName.append("PangFuZhen").append(",");
map.put("departmenthead",departmentHeadId.toString()); map.put("departmenthead",departmentHeadId.toString());
map.put("departMentHeadQyWxName",departMentHeadQyWxName.toString()); map.put("departMentHeadQyWxName",departMentHeadQyWxName.toString());
List<Integer> params = (List<Integer>) map.get("params"); List<Integer> params = (List<Integer>) map.get("params");
@ -782,12 +782,12 @@ public class DepositoryRecordController {
List<UserByPort> departmentHeadByUsers = findDepartmentHeadByUser(userToken); List<UserByPort> departmentHeadByUsers = findDepartmentHeadByUser(userToken);
StringBuilder departmentHeadId = new StringBuilder(); StringBuilder departmentHeadId = new StringBuilder();
StringBuilder departMentHeadQyWxName = 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(","); departmentHeadId.append(departmentHeadByUsers.get(i).getId()).append(",");
departMentHeadQyWxName.append(departmentHeadByUsers.get(i).getWorkwechat()+","); departMentHeadQyWxName.append(departmentHeadByUsers.get(i).getWorkwechat()+",");
}*/ }
departmentHeadId.append("78").append(","); // departmentHeadId.append("78").append(",");
departMentHeadQyWxName.append("PangFuZhen").append(","); // departMentHeadQyWxName.append("PangFuZhen").append(",");
map.put("departmenthead",departmentHeadId.toString()); map.put("departmenthead",departmentHeadId.toString());
Integer res = depositoryRecordService.insertApplicationOutRecord(map,userToken); // 插入主订单 Integer res = depositoryRecordService.insertApplicationOutRecord(map,userToken); // 插入主订单
if(res == 1){ // 如果插入成功 if(res == 1){ // 如果插入成功
@ -889,12 +889,12 @@ public class DepositoryRecordController {
List<UserByPort> departmentHeadByUsers = findDepartmentHeadByUser(userToken); List<UserByPort> departmentHeadByUsers = findDepartmentHeadByUser(userToken);
StringBuilder departmentHeadId = new StringBuilder(); StringBuilder departmentHeadId = new StringBuilder();
StringBuilder departMentHeadQyWxName = 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(","); departmentHeadId.append(departmentHeadByUsers.get(i).getId()).append(",");
departMentHeadQyWxName.append(departmentHeadByUsers.get(i).getWorkwechat()+","); departMentHeadQyWxName.append(departmentHeadByUsers.get(i).getWorkwechat()+",");
}*/ }
departmentHeadId.append("78").append(","); // departmentHeadId.append("78").append(",");
departMentHeadQyWxName.append("PangFuZhen").append(","); // departMentHeadQyWxName.append("PangFuZhen").append(",");
mainRecord.put("applicantId",userToken.getId()); mainRecord.put("applicantId",userToken.getId());
mainRecord.put("applyRemark",""); mainRecord.put("applyRemark","");
mainRecord.put("quantity",sumQuantity.toString()); mainRecord.put("quantity",sumQuantity.toString());
@ -915,7 +915,7 @@ public class DepositoryRecordController {
Integer place = 0; Integer place = 0;
// 用于标志该库位是否可以出库 // 用于标志该库位是否可以出库
Boolean flag = false; Boolean flag = false;
if(s.length > 1){ if(s.length >= 1){
// 获取当前仓库所有库位 // 获取当前仓库所有库位
List<Place> placeByDid = placeService.findPlaceByDid(depositoryId); List<Place> placeByDid = placeService.findPlaceByDid(depositoryId);
// 遍历当前物料存储的库位 // 遍历当前物料存储的库位

83
src/main/java/com/dreamchaser/depository_manage/controller/MaterialController.java

@ -747,51 +747,59 @@ public class MaterialController {
Map<String, Object> result = new HashMap<>(); Map<String, Object> result = new HashMap<>();
List<MaterialP> materialList = new ArrayList<>(); List<MaterialP> materialList = new ArrayList<>();
String placeId = (String) map.get("placeId"); String placeId = (String) map.get("placeId");
// 用于存储没有对应关系的条形码
List<String> barCodeListByNoMaterial = new ArrayList<>();
for (int i = 0; i < barCodeList.size(); i++) { for (int i = 0; i < barCodeList.size(); i++) {
// 获取具体的条形码 // 获取具体的条形码
String barCode = barCodeList.getString(i); String barCode = barCodeList.getString(i);
// 获取条形码与物料的映射 // 获取条形码与物料的映射
MaterialAndBarCode materialByBarCode = materialService.findMaterialByBarCode(barCode); MaterialAndBarCode materialByBarCode = materialService.findMaterialByBarCode(barCode);
Boolean isExist = false; if (materialByBarCode != null) {
Map<String, Object> param = new HashMap<>(); // 如果存在对应关系
param.put("depositoryId", map.get("depositoryId")); Boolean isExist = false;
param.put("code", materialByBarCode.getMcode()); Map<String, Object> param = new HashMap<>();
List<MaterialP> inventory = materialService.findInventory(param); param.put("depositoryId", map.get("depositoryId"));
MaterialP mp = new MaterialP(); param.put("code", materialByBarCode.getMcode());
if (inventory.size() > 0) { List<MaterialP> inventory = materialService.findInventory(param);
// 如果存在该物料 MaterialP mp = new MaterialP();
MaterialP materialP = inventory.get(0); if (inventory.size() > 0) {
Map<String, Object> paramByBarCode = new HashMap<>(); // 如果存在该物料
paramByBarCode.put("mcode", materialP.getCode()); MaterialP materialP = inventory.get(0);
List<MaterialAndBarCode> materialByBarCodeByCondition = materialService.findMaterialByBarCodeByCondition(paramByBarCode); Map<String, Object> paramByBarCode = new HashMap<>();
materialP.setMaterialAndBarCodeList(materialByBarCodeByCondition); paramByBarCode.put("mcode", materialP.getCode());
isExist = true; List<MaterialAndBarCode> materialByBarCodeByCondition = materialService.findMaterialByBarCodeByCondition(paramByBarCode);
if (!"0".equals(placeId)) { materialP.setMaterialAndBarCodeList(materialByBarCodeByCondition);
// 如果不是默认库位 isExist = true;
// 获取物料与库位的对应关系 if (!"0".equals(placeId)) {
MaterialAndPlace placeAndMaterialByMidAndPid = placeService.findPlaceAndMaterialByMidAndPid(ObjectFormatUtil.toInteger(placeId), materialP.getId()); // 如果不是默认库位
if (placeAndMaterialByMidAndPid == null) { // 获取物料与库位的对应关系
isExist = false; MaterialAndPlace placeAndMaterialByMidAndPid = placeService.findPlaceAndMaterialByMidAndPid(ObjectFormatUtil.toInteger(placeId), materialP.getId());
}else{ if (placeAndMaterialByMidAndPid == null) {
mp.setQuantity(placeAndMaterialByMidAndPid.getQuantity()); isExist = false;
} } else {
} else { mp.setQuantity(placeAndMaterialByMidAndPid.getQuantity());
// 获取物料与库位的对应关系 }
MaterialAndPlace placeAndMaterialByMidAndPid = placeService.findPlaceAndMaterialByMidAndPid(0, materialP.getId()); } else {
if (placeAndMaterialByMidAndPid == null) { // 获取物料与库位的对应关系
isExist = false; MaterialAndPlace placeAndMaterialByMidAndPid = placeService.findPlaceAndMaterialByMidAndPid(0, materialP.getId());
}else{ mp.setQuantity(placeAndMaterialByMidAndPid.getQuantity()); if (placeAndMaterialByMidAndPid == null) {
isExist = false;
} else {
mp.setQuantity(placeAndMaterialByMidAndPid.getQuantity());
}
} }
} mp = materialP;
mp = materialP;
} }
if (isExist) { if (isExist) {
materialList.add(mp); materialList.add(mp);
}
} else {
// 如果当前条形码不存对应物料
barCodeListByNoMaterial.add(barCode);
} }
} }
if (flag) { if (flag) {
String scanQrCodeValue = redisTemplate.opsForValue().get("scanQrCodeValue" + userByPort.getNumber()).toString(); String scanQrCodeValue = redisTemplate.opsForValue().get("scanQrCodeValue" + userByPort.getNumber()).toString();
redisTemplate.delete("scanQrCodeValue" + userByPort.getNumber()); redisTemplate.delete("scanQrCodeValue" + userByPort.getNumber());
@ -839,6 +847,7 @@ public class MaterialController {
} }
} }
result.put("materialList", materialList); result.put("materialList", materialList);
result.put("barCodeListByNoMaterial",barCodeListByNoMaterial);
return new RestResponse(result); return new RestResponse(result);
} }
@ -974,7 +983,7 @@ public class MaterialController {
if (placeAndMaterialByMidAndPid == null) { if (placeAndMaterialByMidAndPid == null) {
// 如果当前库位没有该物料 // 如果当前库位没有该物料
mp = null; mp = null;
}else{ } else {
mp.setQuantity(placeAndMaterialByMidAndPid.getQuantity()); mp.setQuantity(placeAndMaterialByMidAndPid.getQuantity());
} }
@ -984,7 +993,7 @@ public class MaterialController {
if (placeAndMaterialByMidAndPid == null) { if (placeAndMaterialByMidAndPid == null) {
// 如果当前库位没有该物料 // 如果当前库位没有该物料
mp = null; mp = null;
}else{ } else {
mp.setQuantity(placeAndMaterialByMidAndPid.getQuantity()); mp.setQuantity(placeAndMaterialByMidAndPid.getQuantity());
} }

28
src/main/java/com/dreamchaser/depository_manage/controller/PageController.java

@ -1315,7 +1315,7 @@ public class PageController {
public ModelAndView StockTakingReview(Integer id,HttpServletRequest request){ public ModelAndView StockTakingReview(Integer id,HttpServletRequest request){
ModelAndView mv = new ModelAndView(); ModelAndView mv = new ModelAndView();
UserByPort userToken = (UserByPort) request.getAttribute("userToken"); UserByPort userToken = (UserByPort) request.getAttribute("userToken");
mv.setViewName("pages/stockTaking/stockTakingReview");
// 获取盘点记录主表 // 获取盘点记录主表
StockTaking stockTaking = stockTakingService.findStockTakingById(id); StockTaking stockTaking = stockTakingService.findStockTakingById(id);
// 获取主表下的所有子表 // 获取主表下的所有子表
@ -1357,6 +1357,17 @@ public class PageController {
stp.setDepositoryName(location.toString()); stp.setDepositoryName(location.toString());
mv.addObject("mainRecord",stp); mv.addObject("mainRecord",stp);
mv.addObject("recordChild",stockTakingChildPByMainId); 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; return mv;
} }
@ -1375,7 +1386,16 @@ public class PageController {
// 设置发起时间 // 设置发起时间
stp.setCreateTime(DateUtil.TimeStampToDateTime(stockTaking.getCreateTime())); stp.setCreateTime(DateUtil.TimeStampToDateTime(stockTaking.getCreateTime()));
// 设置审核时间
stp.setReviewTime("");
// 获取审核时间
Long reviewTime = stockTaking.getReviewTime();
if(reviewTime != null){
// 如果已经完成审核
stp.setReviewTime(DateUtil.TimeStampToDateTime(reviewTime));
}
// 设置完成时间
stp.setCompleteTime(""); stp.setCompleteTime("");
// 获取完成时间 // 获取完成时间
Long completeTime = stockTaking.getCompleteTime(); Long completeTime = stockTaking.getCompleteTime();
@ -1384,6 +1404,7 @@ public class PageController {
stp.setCompleteTime(DateUtil.TimeStampToDateTime(completeTime)); stp.setCompleteTime(DateUtil.TimeStampToDateTime(completeTime));
} }
// 获取申请人 // 获取申请人
UserByPort userByPort = FindUserById(stockTaking.getOriginator(),userToken); UserByPort userByPort = FindUserById(stockTaking.getOriginator(),userToken);
// 设置盘点发起人姓名 // 设置盘点发起人姓名
@ -1850,6 +1871,7 @@ public class PageController {
param.put("mid",mp.getId()); param.put("mid",mp.getId());
param.put("mname",mp.getMname()); param.put("mname",mp.getMname());
param.put("code",mp.getCode()); param.put("code",mp.getCode());
param.put("price",mp.getPrice());
param.put("version",mp.getVersion()); param.put("version",mp.getVersion());
List<MaterialAndBarCode> materialByBarCodeByCondition = materialService.findMaterialByBarCodeByCondition(param); List<MaterialAndBarCode> materialByBarCodeByCondition = materialService.findMaterialByBarCodeByCondition(param);
param.put("materialAndBarCodeList",materialByBarCodeByCondition); param.put("materialAndBarCodeList",materialByBarCodeByCondition);
@ -1969,8 +1991,8 @@ public class PageController {
// 获取当前物料在其库位中的数量 // 获取当前物料在其库位中的数量
MaterialAndPlace placeAndMaterialByMidAndPid = placeService.findPlaceAndMaterialByMidAndPid(placeId, stcp.getMid()); MaterialAndPlace placeAndMaterialByMidAndPid = placeService.findPlaceAndMaterialByMidAndPid(placeId, stcp.getMid());
// 获取盘点数量 // 获取盈亏数量
Integer newInventory = stcp.getNewInventory(); Integer newInventory = stcp.getInventory();
// 获取当前盘点后超出的数量 // 获取当前盘点后超出的数量
Integer inventory = newInventory + placeById.getQuantity() - placeById.getMax(); Integer inventory = newInventory + placeById.getQuantity() - placeById.getMax();

39
src/main/java/com/dreamchaser/depository_manage/controller/QyWxOperationController.java

@ -170,24 +170,40 @@ public class QyWxOperationController {
String result = ""; String result = "";
if("pass".equals(clickKey)){ if(clickKey.contains("pass")){
result = "通过"; result = "通过";
}else{ }else{
result = "驳回"; result = "驳回";
} }
if(templateCardType.contains("StockTaking")){ if(templateCardType.contains("StockTaking")){
// 如果点击的是库存盘点审核 // 如果点击的是库存盘点有关的卡片
// 开启线程处理审批 String stockTakingType =templateCard.getEventKey().split("_")[1];
new Thread(new Runnable() {
@Override if(stockTakingType.contains("review")) {
public void run() { // 开启线程处理审批
stockTakingService.reviewByQyWx(templateCard); new Thread(new Runnable() {
} @Override
}).start(); public void run() {
Map<String, Object> 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() { new Thread(new Runnable() {
@ -197,6 +213,7 @@ public class QyWxOperationController {
} }
}).start(); }).start();
} }
// 开启线程更改其他用户卡片模板样式 // 开启线程更改其他用户卡片模板样式
String finalResult = result; String finalResult = result;
new Thread(new Runnable() { new Thread(new Runnable() {

33
src/main/java/com/dreamchaser/depository_manage/controller/StockTakingController.java

@ -54,13 +54,16 @@ public class StockTakingController {
public RestResponse addStockTakingRecord(@RequestBody Map<String,Object> map, HttpServletRequest request){ public RestResponse addStockTakingRecord(@RequestBody Map<String,Object> map, HttpServletRequest request){
UserByPort userToken = (UserByPort) request.getAttribute("userToken"); UserByPort userToken = (UserByPort) request.getAttribute("userToken");
List params = (ArrayList) map.get("params"); List params = (ArrayList) map.get("params");
String departmentManagerId = (String) map.get("departmentManagerId"); String departmentManagerId = (String) map.get("departmentManagerId");
// map.put("departmentManager",departmentManagerId); // map.put("departmentManager",departmentManagerId);
map.put("departmentManager","6235"); map.put("departmentManager","6235");
map.put("temp",0);
// 用于设置企业微信接收人 // 用于设置企业微信接收人
StringBuilder QyWxDepartmentManager = new StringBuilder(); StringBuilder QyWxDepartmentManager = new StringBuilder();
/*String[] split = departmentManagerId.split(","); String[] split = departmentManagerId.split(",");
for (int i = 0; i < split.length; i++) { for (int i = 0; i < split.length; i++) {
String s = split[i]; String s = split[i];
if("".equals(s)){ if("".equals(s)){
@ -68,9 +71,10 @@ public class StockTakingController {
} }
UserByPort departmentManager = PageController.FindUserById(ObjectFormatUtil.toInteger(s), userToken); UserByPort departmentManager = PageController.FindUserById(ObjectFormatUtil.toInteger(s), userToken);
QyWxDepartmentManager.append(departmentManager.getWorkwechat()+","); QyWxDepartmentManager.append(departmentManager.getWorkwechat()+",");
}*/ }
QyWxDepartmentManager.append("PangFuZhen").append(","); // QyWxDepartmentManager.append("PangFuZhen").append(",");
map.put("state",3); map.put("state",3);
map.put("departmentManagerState",3);
map.remove("departmentManagerId"); map.remove("departmentManagerId");
map.put("originator",userToken.getId()); map.put("originator",userToken.getId());
String mcode = (String) map.get("code"); String mcode = (String) map.get("code");
@ -83,6 +87,7 @@ public class StockTakingController {
param.put("placeId",map.get("placeId")); param.put("placeId",map.get("placeId"));
param.put("departmentManager",map.get("departmentManager")); param.put("departmentManager",map.get("departmentManager"));
param.put("state",3); param.put("state",3);
param.put("departmentManagerState",3);
param.put("originator",userToken.getId()); param.put("originator",userToken.getId());
for (int i = 0; i < params.size(); i++) { for (int i = 0; i < params.size(); i++) {
Integer temp = ObjectFormatUtil.toInteger(params.get(i)); Integer temp = ObjectFormatUtil.toInteger(params.get(i));
@ -93,9 +98,11 @@ public class StockTakingController {
param.put("newInventory",map.get("newInventory"+temp)); param.put("newInventory",map.get("newInventory"+temp));
param.put("takingResult",map.get("takingResult"+temp)); param.put("takingResult",map.get("takingResult"+temp));
param.put("inventory",map.get("inventory"+temp)); param.put("inventory",map.get("inventory"+temp));
param.put("temp",temp);
success += stockTakingService.insertStockTaking(param); success += stockTakingService.insertStockTaking(param);
param.remove("id"); param.remove("id");
} }
param.put("temp",map.get("temp"));
param.put("mid",map.get("mid")); param.put("mid",map.get("mid"));
param.put("barCode",map.get("barCode")); param.put("barCode",map.get("barCode"));
param.put("oldInventory",map.get("oldInventory")); param.put("oldInventory",map.get("oldInventory"));
@ -106,7 +113,7 @@ public class StockTakingController {
Object mainId = param.get("mainId"); Object mainId = param.get("mainId");
// 向企业微信发送消息 // 向企业微信发送消息
JSONObject jsonObject = qyWxOperationService.sendQyWxToStockTakingMessage(QyWxDepartmentManager.toString(), ObjectFormatUtil.toInteger(mainId)); JSONObject jsonObject = qyWxOperationService.sendQyWxToStockTakingDepartmentManagerMessage(QyWxDepartmentManager.toString(), ObjectFormatUtil.toInteger(mainId));
// 将当前返回结果保存到redis中 // 将当前返回结果保存到redis中
Map<String,Object> QyWxMessageMap = new HashMap<>(); Map<String,Object> QyWxMessageMap = new HashMap<>();
QyWxMessageMap.put("MsgId",jsonObject.getString("msgid")); QyWxMessageMap.put("MsgId",jsonObject.getString("msgid"));
@ -122,7 +129,7 @@ public class StockTakingController {
success += stockTakingService.insertStockTaking(map); success += stockTakingService.insertStockTaking(map);
// 向企业微信发送消息 // 向企业微信发送消息
Object mainId = map.get("mainId"); Object mainId = map.get("mainId");
JSONObject jsonObject = qyWxOperationService.sendQyWxToStockTakingMessage(QyWxDepartmentManager.toString(), ObjectFormatUtil.toInteger(mainId)); JSONObject jsonObject = qyWxOperationService.sendQyWxToStockTakingDepartmentManagerMessage(QyWxDepartmentManager.toString(), ObjectFormatUtil.toInteger(mainId));
// 将当前返回结果保存到redis中 // 将当前返回结果保存到redis中
Map<String,Object> QyWxMessageMap = new HashMap<>(); Map<String,Object> QyWxMessageMap = new HashMap<>();
QyWxMessageMap.put("MsgId",jsonObject.getString("msgid")); QyWxMessageMap.put("MsgId",jsonObject.getString("msgid"));
@ -164,7 +171,20 @@ public class StockTakingController {
}else { }else {
return CrudUtil.postHandle(1, 1); return CrudUtil.postHandle(1, 1);
} }
}
// 用于完成订单
@PostMapping("/complete")
public RestResponse complete(@RequestBody Map<String,Object> map,HttpServletRequest request){
UserByPort userToken= (UserByPort) request.getAttribute("userToken");
Map<String, Object> 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("minIds",minIdList);
map.put("inventory",map.get("invnetory5"));
map.remove("invnetory5");
Integer transfer = stockTakingService.stockTakingTransfer(map, userToken); Integer transfer = stockTakingService.stockTakingTransfer(map, userToken);
return CrudUtil.postHandle(transfer,minIdList.size()); return CrudUtil.postHandle(transfer,minIdList.size());
} }

12
src/main/java/com/dreamchaser/depository_manage/entity/StockTaking.java

@ -38,6 +38,11 @@ public class StockTaking {
*/ */
private Integer state; private Integer state;
/**
* 负责人审核意见1通过2驳回3待处理
*/
private Integer departmentManagerState;
/** /**
* 盘点发起人 * 盘点发起人
*/ */
@ -51,10 +56,17 @@ public class StockTaking {
/** /**
* 审核时间 * 审核时间
*/ */
private Long reviewTime;
/**
* 处理时间
*/
private Long completeTime; private Long completeTime;
/** /**
* 审核意见 * 审核意见
*/ */
private String auditOpinion; private String auditOpinion;
} }

15
src/main/java/com/dreamchaser/depository_manage/mapper/StockTakingMapper.java

@ -110,6 +110,14 @@ public interface StockTakingMapper {
List<StockTakingChildP> selectStockTakingChildByMainId(Integer mainId); List<StockTakingChildP> selectStockTakingChildByMainId(Integer mainId);
/**
* 根据主键批量查询子表
* @param list
* @return
*/
List<StockTakingChildP> selectStockTakingChildByIds(List<Long> list);
/** /**
* 根据条件查询主表 * 根据条件查询主表
* @param map * @param map
@ -145,6 +153,13 @@ public interface StockTakingMapper {
*/ */
StockTakingChildP selectStockTakingChildPById(Integer id); StockTakingChildP selectStockTakingChildPById(Integer id);
/**
* 根据主键查找盘点详情
* @param id
* @return
*/
StockTakingChildP selectStockTakingChildPById(Long id);
/** /**
* 查询用户的任务 * 查询用户的任务

46
src/main/java/com/dreamchaser/depository_manage/mapper/StockTakingMapper.xml

@ -11,8 +11,10 @@
<result column="depositoryId" property="depositoryId" jdbcType="INTEGER" /> <result column="depositoryId" property="depositoryId" jdbcType="INTEGER" />
<result column="placeId" property="placeId" jdbcType="INTEGER" /> <result column="placeId" property="placeId" jdbcType="INTEGER" />
<result column="state" property="state" jdbcType="INTEGER" /> <result column="state" property="state" jdbcType="INTEGER" />
<result column="departmentManagerState" property="departmentManagerState" jdbcType="INTEGER" />
<result column="crateTime" property="crateTime" jdbcType="INTEGER" /> <result column="crateTime" property="crateTime" jdbcType="INTEGER" />
<result column="completeTime" property="completeTime" jdbcType="INTEGER" /> <result column="completeTime" property="completeTime" jdbcType="INTEGER" />
<result column="reviewTime" property="reviewTime" jdbcType="INTEGER" />
<result column="originator" property="originator" jdbcType="INTEGER" /> <result column="originator" property="originator" jdbcType="INTEGER" />
<result column="departmentManager" property="departmentManager" jdbcType="VARCHAR" /> <result column="departmentManager" property="departmentManager" jdbcType="VARCHAR" />
<result column="auditOpinion" property="auditOpinion" jdbcType="VARCHAR" /> <result column="auditOpinion" property="auditOpinion" jdbcType="VARCHAR" />
@ -40,7 +42,7 @@
<!-- 表查询字段 --> <!-- 表查询字段 -->
<sql id="StockTakingAllColumns"> <sql id="StockTakingAllColumns">
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
</sql> </sql>
<sql id="StockTakingChildPAllColumns"> <sql id="StockTakingChildPAllColumns">
@ -49,7 +51,7 @@
<!-- 插入主表--> <!-- 插入主表-->
<insert id="insertStockTaking" useGeneratedKeys="true" keyProperty="id"> <insert id="insertStockTaking" useGeneratedKeys="true" keyProperty="id">
INSERT INTO stocktaking (id,code,depositoryId,placeId,departmentManager,state,createTime,originator) INSERT INTO stocktaking (id,code,depositoryId,placeId,departmentManager,state,createTime,originator,departmentManagerState)
values ( values (
#{id}, #{id},
#{code}, #{code},
@ -58,7 +60,8 @@
#{departmentManager}, #{departmentManager},
#{state}, #{state},
#{createTime}, #{createTime},
#{originator} #{originator},
#{departmentManagerState}
) )
</insert> </insert>
@ -113,6 +116,9 @@
<if test="state != null and state != ''"> <if test="state != null and state != ''">
state = #{state}, state = #{state},
</if> </if>
<if test="departmentManagerState != null and departmentManagerState != ''">
departmentManagerState = #{departmentManagerState},
</if>
<if test="createTime != null and createTime != ''"> <if test="createTime != null and createTime != ''">
createTime = #{createTime}, createTime = #{createTime},
</if> </if>
@ -123,8 +129,12 @@
auditOpinion = #{auditOpinion}, auditOpinion = #{auditOpinion},
</if> </if>
<if test="completeTime != null and completeTime != ''"> <if test="completeTime != null and completeTime != ''">
completeTime = #{completeTime} completeTime = #{completeTime},
</if>
<if test="reviewTime != null and reviewTime != ''">
reviewTime = #{reviewTime}
</if> </if>
</set> </set>
where id = #{id} where id = #{id}
</update> </update>
@ -162,6 +172,17 @@
where mainId = #{mainId} where mainId = #{mainId}
</select> </select>
<select id="selectStockTakingChildByIds" parameterType="list" resultMap="StockTakingChildMap">
select
<include refid="StockTakingChildPAllColumns"/>
from stocktakingchildinfo
where id in
<foreach collection="list" index="index" item="id" open="(" separator="," close=")">
#{id}
</foreach>
</select>
<select id="selectStockTakingByCondition" parameterType="map" resultMap="StockTakingMap"> <select id="selectStockTakingByCondition" parameterType="map" resultMap="StockTakingMap">
select select
<include refid="StockTakingAllColumns"/> <include refid="StockTakingAllColumns"/>
@ -176,6 +197,9 @@
<if test="placeId != null"> <if test="placeId != null">
and st.placeId = #{placeId} and st.placeId = #{placeId}
</if> </if>
<if test="departmentManagerState != null and departmentManagerState != ''">
and st.departmentManagerState = #{departmentManagerState}
</if>
<if test="departmentManager != null and departmentManager != ''"> <if test="departmentManager != null and departmentManager != ''">
and FIND_IN_SET(#{departmentManager},st.departmentManager) != 0 and FIND_IN_SET(#{departmentManager},st.departmentManager) != 0
</if> </if>
@ -235,7 +259,7 @@
where st.id = #{id} where st.id = #{id}
</select> </select>
<select id="selectStockTakingChildPById" parameterType="int" resultMap="StockTakingChildMap"> <select id="selectStockTakingChildPById" resultMap="StockTakingChildMap">
select select
<include refid="StockTakingChildPAllColumns"/> <include refid="StockTakingChildPAllColumns"/>
from stocktakingchildinfo from stocktakingchildinfo
@ -248,10 +272,12 @@
from stocktaking st from stocktaking st
where 1 = 1 where 1 = 1
<if test='isDone == "0"'> <if test='isDone == "0"'>
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)
</if> </if>
<if test='isDone == "1"'> <if test='isDone == "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)
</if> </if>
<if test="begin != null and size != null"> <if test="begin != null and size != null">
LIMIT #{begin},#{size} LIMIT #{begin},#{size}
@ -264,10 +290,12 @@
from stocktaking st from stocktaking st
where 1 = 1 where 1 = 1
<if test='isDone == "0"'> <if test='isDone == "0"'>
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)
</if> </if>
<if test='isDone == "1"'> <if test='isDone == "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)
</if> </if>
</select> </select>

12
src/main/java/com/dreamchaser/depository_manage/pojo/StockTakingP.java

@ -52,6 +52,11 @@ public class StockTakingP {
*/ */
private Integer state; private Integer state;
/**
* 负责人审核意见1通过2驳回3待处理
*/
private Integer departmentManagerState;
/** /**
* 申请时间 * 申请时间
*/ */
@ -61,6 +66,11 @@ public class StockTakingP {
/** /**
* 审核时间 * 审核时间
*/ */
private String reviewTime;
/**
* 处理时间
*/
private String completeTime; private String completeTime;
/** /**
@ -68,6 +78,7 @@ public class StockTakingP {
*/ */
private Integer originator; private Integer originator;
/** /**
* 盘点发起人姓名 * 盘点发起人姓名
*/ */
@ -86,6 +97,7 @@ public class StockTakingP {
this.depositoryId = st.getDepositoryId(); this.depositoryId = st.getDepositoryId();
this.placeId = st.getPlaceId(); this.placeId = st.getPlaceId();
this.state = st.getState(); this.state = st.getState();
this.departmentManagerState = st.getDepartmentManagerState();
this.createTime = DateUtil.TimeStampToDateTime(st.getCreateTime()); this.createTime = DateUtil.TimeStampToDateTime(st.getCreateTime());
this.originator = st.getOriginator(); this.originator = st.getOriginator();
this.auditOpinion = st.getAuditOpinion(); this.auditOpinion = st.getAuditOpinion();

19
src/main/java/com/dreamchaser/depository_manage/service/StockTakingService.java

@ -103,6 +103,23 @@ public interface StockTakingService {
* @param templateCard * @param templateCard
* @return * @return
*/ */
Integer reviewByQyWx(TemplateCard templateCard); Map<String,Object> reviewByQyWx(TemplateCard templateCard);
/**
* 对盘点进行处理
* @param map
* @param userToken
* @return
*/
Map<String,Object> completeStockTaking(Map<String,Object> map, UserByPort userToken);
/**
* 用于企业微信的审核申请处理
* @param templateCard
* @return
*/
Integer completeStockTakingByQyWx(TemplateCard templateCard);
} }

24
src/main/java/com/dreamchaser/depository_manage/service/impl/DepositoryRecordServiceImpl.java

@ -254,6 +254,9 @@ public class DepositoryRecordServiceImpl implements DepositoryRecordService {
@Override @Override
public Integer applicationInPlace(Map<String, Object> map) { public Integer applicationInPlace(Map<String, Object> map) {
Integer placeId = ObjectFormatUtil.toInteger(map.get("placeId")); Integer placeId = ObjectFormatUtil.toInteger(map.get("placeId"));
if(placeId == null){
placeId = 0;
}
Integer quantity = ObjectFormatUtil.toInteger(map.get("quantity")); Integer quantity = ObjectFormatUtil.toInteger(map.get("quantity"));
Place placeById = placeMapper.findPlaceById(placeId); Place placeById = placeMapper.findPlaceById(placeId);
// 获取当前物料基本信息 // 获取当前物料基本信息
@ -606,9 +609,9 @@ public class DepositoryRecordServiceImpl implements DepositoryRecordService {
for (int i = 0; i < depositoryManagers.length; i++) { for (int i = 0; i < depositoryManagers.length; i++) {
Integer uid = ObjectFormatUtil.toInteger(depositoryManagers[i]); Integer uid = ObjectFormatUtil.toInteger(depositoryManagers[i]);
UserByPort depositoryManager = PageController.FindUserById(uid, userByPort); 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()); JSONObject jsonObject = qyWxOperationService.sendCcMessageToUsers(depositoryManagerByQyWx.toString(), record.getId());
// 删除redis中本订单 // 删除redis中本订单
@ -719,9 +722,9 @@ public class DepositoryRecordServiceImpl implements DepositoryRecordService {
StringBuilder QyWxUid = new StringBuilder(); StringBuilder QyWxUid = new StringBuilder();
for (int i = 0; i < departmentHeadByUser.size(); i++) { for (int i = 0; i < departmentHeadByUser.size(); i++) {
depositoryManager.append(departmentHeadByUser.get(i).getId() + ","); 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()); map.put("depositoryManager", depositoryManager.toString());
// 向仓储中心负责人发送新的消息 // 向仓储中心负责人发送新的消息
new Thread(new Runnable() { new Thread(new Runnable() {
@ -813,9 +816,9 @@ public class DepositoryRecordServiceImpl implements DepositoryRecordService {
// 更新redis中用户记录 // 更新redis中用户记录
redisTemplate.opsForHash().putAll("user:" + userIdByDid.get(j), userRecord); redisTemplate.opsForHash().putAll("user:" + userIdByDid.get(j), userRecord);
minRecordManage.append(userIdByDid.get(j)).append(","); 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()); minRecord.put("manager", minRecordManage.toString());
// 添加子订单到redis中 // 添加子订单到redis中
redisTemplate.opsForHash().putAll(minRecordKey, minRecord); redisTemplate.opsForHash().putAll(minRecordKey, minRecord);
@ -901,9 +904,9 @@ public class DepositoryRecordServiceImpl implements DepositoryRecordService {
StringBuilder QyWxUid = new StringBuilder(); StringBuilder QyWxUid = new StringBuilder();
for (int i = 0; i < departmentHeadByUser.size(); i++) { for (int i = 0; i < departmentHeadByUser.size(); i++) {
depositoryManager.append(departmentHeadByUser.get(i).getId() + ","); 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()); map.put("depositoryManager", depositoryManager.toString());
// 向仓储中心负责人发送新的消息 // 向仓储中心负责人发送新的消息
JSONObject jsonObject = qyWxOperationService.sendQyWxToApplicationOutMessage(QyWxUid.toString(), ObjectFormatUtil.toInteger(outId), false); JSONObject jsonObject = qyWxOperationService.sendQyWxToApplicationOutMessage(QyWxUid.toString(), ObjectFormatUtil.toInteger(outId), false);
@ -974,9 +977,9 @@ public class DepositoryRecordServiceImpl implements DepositoryRecordService {
// 更新redis中用户记录 // 更新redis中用户记录
redisTemplate.opsForHash().putAll("user:" + userIdByDid.get(j), userRecord); redisTemplate.opsForHash().putAll("user:" + userIdByDid.get(j), userRecord);
minRecordManage.append(userIdByDid.get(j)).append(","); 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()); minRecord.put("manager", minRecordManage.toString());
// 添加子订单到redis中 // 添加子订单到redis中
redisTemplate.opsForHash().putAll(minRecordKey, minRecord); redisTemplate.opsForHash().putAll(minRecordKey, minRecord);
@ -1479,7 +1482,6 @@ public class DepositoryRecordServiceImpl implements DepositoryRecordService {
return depositoryRecordMapper.findApplicationInRecordByDate(map); return depositoryRecordMapper.findApplicationInRecordByDate(map);
} else { } else {
map.put("state", "已出库"); map.put("state", "已出库");
return depositoryRecordMapper.findApplicationOutRecordByDate(map); return depositoryRecordMapper.findApplicationOutRecordByDate(map);
} }
} }

484
src/main/java/com/dreamchaser/depository_manage/service/impl/QyWxOperationService.java

@ -239,12 +239,12 @@ public class QyWxOperationService {
/** /**
* 用于向企业微信发送盘点消息 * 用于向企业微信中该盘点记录的负责人发送盘点消息
* @param uid 接收人 * @param uid 接收人
* @param mainId 盘点记录编号 * @param mainId 盘点记录编号
* @return * @return
*/ */
public JSONObject sendQyWxToStockTakingMessage(String uid,Integer mainId){ public JSONObject sendQyWxToStockTakingDepartmentManagerMessage(String uid, Integer mainId){
// 获取盘点主记录 // 获取盘点主记录
StockTaking mainRecord = stockTakingMapper.selectStockTakingById(mainId); StockTaking mainRecord = stockTakingMapper.selectStockTakingById(mainId);
@ -452,12 +452,12 @@ public class QyWxOperationService {
List<TemplateCard_button> buttonList = new ArrayList<>(); List<TemplateCard_button> buttonList = new ArrayList<>();
TemplateCard_button button1 = new TemplateCard_button(); TemplateCard_button button1 = new TemplateCard_button();
button1.setKey("wms_pass_StockTakingId" + mainId); button1.setKey("wms_reviewpass_StockTakingId" + mainId);
button1.setStyle(1); button1.setStyle(1);
button1.setText("通过"); button1.setText("通过");
TemplateCard_button button2 = new TemplateCard_button(); TemplateCard_button button2 = new TemplateCard_button();
button2.setKey("wms_reject_StockTakingId" + mainId); button2.setKey("wms_reviewreject_StockTakingId" + mainId);
button2.setStyle(2); button2.setStyle(2);
button2.setText("驳回"); button2.setText("驳回");
@ -485,7 +485,249 @@ public class QyWxOperationService {
/** /**
* 将最终完成的订单抄送给仓储负责人 * 用于向企业微信盘点人员发送盘点消息
* @param uid 接收人
* @param mainId 盘点记录编号
* @return
*/
public JSONObject sendQyWxToStockTakingMessage(String uid, Integer mainId,List<Long> normalMinId){
// 获取盘点主记录
StockTaking mainRecord = stockTakingMapper.selectStockTakingById(mainId);
if(normalMinId.size() == 0){
return null;
}
// 获取所有子记录
List<StockTakingChildP> 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<TemplateCard_action> 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<TemplateCard_horizontal_content> 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<TemplateCard_button_selection_option> 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<TemplateCard_button> 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 uid 仓储负责人编号
* @param outId 订单编号 * @param outId 订单编号
@ -569,10 +811,212 @@ public class QyWxOperationService {
*/ */
public JSONObject sendCcStockTakingMessageToHead(String uid, Map<String, Object> map, UserByPort userToken, StockTaking mainRecord) { public JSONObject sendCcStockTakingMessageToHead(String uid, Map<String, Object> map, UserByPort userToken, StockTaking mainRecord) {
/**
* 获取完成的订单
*/
List<Long> minIds = (List<Long>) 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<String, String> markdown = new HashMap<>();
// 抄送内容
StringBuilder content = new StringBuilder("## `抄送信息:`%n");
// 获取发起人信息
UserByPort originator = PageController.FindUserById(mainRecord.getOriginator(), userToken);
// 设置content
content.append(">### **" + originator.getName() + "的物料调账记录** %n<font color='warning'>时间:" + DateUtil.TimeStampToDateTime(mainRecord.getCreateTime()) + "</font> %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<Long> 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<String, String> markdown = new HashMap<>();
// 抄送内容
StringBuilder content = new StringBuilder("## `盘点发生错误:`%n");
// 获取发起人信息
UserByPort originator = PageController.FindUserById(mainRecord.getOriginator(), userToken);
// 设置content
content.append(">### **" + originator.getName() + "的物料盘点记录** %n<font color='warning'>时间:" + DateUtil.TimeStampToDateTime(mainRecord.getCreateTime()) + "</font> %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<String, Object> map, UserByPort userToken, StockTaking mainRecord){
/** /**
* 获取要转移的订单 * 获取要转移的订单
*/ */
List<Integer> minIds = (List<Integer>) map.get("minIds"); List<Long> minIds = (List<Long>) map.get("minIds");
MessageByMarkDown markDown = new MessageByMarkDown(); MessageByMarkDown markDown = new MessageByMarkDown();
//设置消息接收者 //设置消息接收者
@ -602,7 +1046,7 @@ public class QyWxOperationService {
for (int i = 0; i < minIds.size(); i++) { for (int i = 0; i < minIds.size(); i++) {
Integer minId = minIds.get(i); Long minId = minIds.get(i);
// 获取对应子订单 // 获取对应子订单
StockTakingChildP minRecord = stockTakingMapper.selectStockTakingChildPById(minId); 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()); Integer oldPlaceId = ObjectFormatUtil.toInteger(mainRecord.getPlaceId());
Place oldPlace = placeMapper.findPlaceById(oldPlaceId); Place oldPlace = placeMapper.findPlaceById(oldPlaceId);
Integer depositoryId = mainRecord.getDepositoryId();
Depository fromDepository = depositoryMapper.findDepositoryById(depositoryId);
// 获取转移后的数量 // 获取转移后的数量
Integer newInventory = minRecord.getNewInventory() - inventory; Integer newInventory = minRecord.getNewInventory() - inventory;
// 获取转移到的库位 // 获取转移到的库位
@ -628,10 +1076,13 @@ public class QyWxOperationService {
String fromLocation = ""; String fromLocation = "";
// 转移位置 // 转移位置
String toLocation = ""; String toLocation = "";
// 获取转移前的仓库
Depository fromDepository = depositoryMapper.findDepositoryById(oldPlace.getDid());
// 获取转移后的仓库 // 获取转移后的仓库
Depository toDepository = depositoryMapper.findDepositoryById(newPlace.getDid()); Depository toDepository = depositoryMapper.findDepositoryById(newPlace.getDid());
if(toDepository == null){
}
if(Integer.compare(0,oldPlaceId) == 0){ if(Integer.compare(0,oldPlaceId) == 0){
// 如果转移前的位置为默认库位 // 如果转移前的位置为默认库位
@ -661,7 +1112,7 @@ public class QyWxOperationService {
content.append(">- 物料名称:").append(material.getMname()).append("%n"); content.append(">- 物料名称:").append(material.getMname()).append("%n");
content.append(">- 盘点数量:").append(minRecord.getNewInventory()).append("%n"); content.append(">- 盘点数量:").append(minRecord.getNewInventory()).append("%n");
content.append(">- 盘点位置:").append(fromLocation).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(toLocation).append("%n");
content.append(">- 转移后盘点位置物料数量:").append(oldPlaceAndMaterial.getQuantity()).append("%n"); content.append(">- 转移后盘点位置物料数量:").append(oldPlaceAndMaterial.getQuantity()).append("%n");
content.append(">- 转移位置物料数量:").append(newPlaceAndMaterial.getQuantity()).append("%n"); content.append(">- 转移位置物料数量:").append(newPlaceAndMaterial.getQuantity()).append("%n");
@ -690,17 +1141,6 @@ public class QyWxOperationService {
return jsonObject; return jsonObject;
} }
/**
* 将转移信息发送给盘点人员
* @param map
* @return
*/
public JSONObject sendCcStockTakingTransferMessageToHead(Map<String,Object>map){
return null;
}
/** /**
* 给仓库管理员发送出库通知 * 给仓库管理员发送出库通知
* *

617
src/main/java/com/dreamchaser/depository_manage/service/impl/StockTakingServiceImpl.java

@ -87,6 +87,27 @@ public class StockTakingServiceImpl implements StockTakingService {
map.remove("id"); map.remove("id");
map.put("mainId", id); map.put("mainId", id);
} }
Map<String,Object> needToUpdate = (Map<String, Object>) map.get("needToUpdate");
Map<String,Object> barCodeListByNoMaterial = (Map<String, Object>) 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<String,Object> param = new HashMap<>();
param.put("list",barCodeList);
Material materialById = materialMapper.findMaterialById(mid);
param.put("code",materialById.getCode());
materialMapper.addBarCodeAndMaterialForMoreOne(param);
}
}
return stockTakingMapper.insertStockTakingChild(map); return stockTakingMapper.insertStockTakingChild(map);
} }
@ -149,6 +170,7 @@ public class StockTakingServiceImpl implements StockTakingService {
/** /**
* 根据条件查询自己的申请 * 根据条件查询自己的申请
*
* @param map 查询参数 * @param map 查询参数
* @return 我的任务 * @return 我的任务
*/ */
@ -180,6 +202,7 @@ public class StockTakingServiceImpl implements StockTakingService {
/** /**
* 查询用户的申请数量 * 查询用户的申请数量
*
* @param map * @param map
* @return * @return
*/ */
@ -270,12 +293,15 @@ public class StockTakingServiceImpl implements StockTakingService {
// 获取主单 // 获取主单
StockTaking mainRecord = stockTakingMapper.selectStockTakingById(mainId); StockTaking mainRecord = stockTakingMapper.selectStockTakingById(mainId);
// 用于存储可以正常处理的订单
List<Long> normalMinId = new ArrayList<>();
// 获取负责人 // 获取负责人
String departmentManager = mainRecord.getDepartmentManager(); String departmentManager = mainRecord.getDepartmentManager();
String[] split = departmentManager.split(","); String[] split = departmentManager.split(",");
for (int i = 0; i < split.length; i++) { for (int i = 0; i < split.length; i++) {
String s = split[i]; String s = split[i];
if("".equals(s)){ if ("".equals(s)) {
continue; continue;
} }
UserByPort userByPort = PageController.FindUserById(ObjectFormatUtil.toInteger(s), userToken); UserByPort userByPort = PageController.FindUserById(ObjectFormatUtil.toInteger(s), userToken);
@ -285,6 +311,7 @@ public class StockTakingServiceImpl implements StockTakingService {
// 如果审核通过 // 如果审核通过
stockTakingResult = "通过"; stockTakingResult = "通过";
// 定义错误信息 // 定义错误信息
Map<String, Object> errMsg = new HashMap<>(); Map<String, Object> errMsg = new HashMap<>();
// 定义出错单号 // 定义出错单号
@ -338,8 +365,6 @@ public class StockTakingServiceImpl implements StockTakingService {
// 新的均价 // 新的均价
avgPrice = (amounts / newInventory) * 100; avgPrice = (amounts / newInventory) * 100;
} }
materialById.setPrice(avgPrice); materialById.setPrice(avgPrice);
// 获取当前库位上物料数量 // 获取当前库位上物料数量
@ -348,7 +373,6 @@ public class StockTakingServiceImpl implements StockTakingService {
materialById.setQuantity(oldQuantity + newInventory); materialById.setQuantity(oldQuantity + newInventory);
// 用于计算新的库位数量 // 用于计算新的库位数量
Integer newNumberForPlace = 0; Integer newNumberForPlace = 0;
// 用于计算新的库位与物料对应关系的数量 // 用于计算新的库位与物料对应关系的数量
@ -377,7 +401,8 @@ public class StockTakingServiceImpl implements StockTakingService {
// 更新物料与库位对应关系的数量 // 更新物料与库位对应关系的数量
placeAndMaterialByMidAndPid.setQuantity(newNumberForMatrialAndPlace); placeAndMaterialByMidAndPid.setQuantity(newNumberForMatrialAndPlace);
} else { }
else {
// 如果盘亏 // 如果盘亏
newNumberForPlace = placeById.getQuantity() - inventory; newNumberForPlace = placeById.getQuantity() - inventory;
@ -401,18 +426,7 @@ public class StockTakingServiceImpl implements StockTakingService {
} }
normalMinId.add(minRecord.getId());
// 更新库位
placeMapper.UpdatePlace(placeById);
// 更新库位与物料的对应关系
placeMapper.updateMaterialAndPlace(placeAndMaterialByMidAndPid);
// 更新当前物料信息
materialMapper.updateMaterial(materialById);
} }
if (errIds.size() > 0) { if (errIds.size() > 0) {
@ -424,15 +438,38 @@ public class StockTakingServiceImpl implements StockTakingService {
result.put("errMsg", errMsg); 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<String, Object> 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); map.put("id", mainId);
String simpleTime = DateUtil.getSimpleTime(new Date()); String simpleTime = DateUtil.getSimpleTime(new Date());
map.put("completeTime", DateUtil.DateTimeToTimeStamp(simpleTime)); map.put("reviewTime", DateUtil.DateTimeToTimeStamp(simpleTime));
map.put("departmentManager",userToken.getId()); map.put("departmentManager", userToken.getId());
stockTakingMapper.updateStockTaking(map); stockTakingMapper.updateStockTaking(map);
// 更新其他卡片 // 更新其他卡片
@ -442,28 +479,25 @@ public class StockTakingServiceImpl implements StockTakingService {
public void run() { public void run() {
// 获取responseCode(key为申请人number) // 获取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"); String responseCode = (String) redisTemplate.opsForHash().get(key, "responseCode");
qyWxOperationService.updateTemplateCard(responseCode,userToken.getName(), finalStockTakingResult); qyWxOperationService.updateTemplateCard(responseCode, userToken.getName(), finalStockTakingResult);
} }
}).start(); }).start();
// 抄送盘点调账记录给盘点人员
new Thread(new Runnable() {
@Override
public void run() {
}
}).start();
return result; return result;
} }
/** /**
* 对盘点进行处理 * 对盘点进行处理
*
* @param map * @param map
* @param userToken * @param userToken
* @return * @return
@ -478,30 +512,241 @@ public class StockTakingServiceImpl implements StockTakingService {
StringBuilder QyWxUid = new StringBuilder(); StringBuilder QyWxUid = new StringBuilder();
Integer state = ObjectFormatUtil.toInteger(map.get("state")); Integer state = ObjectFormatUtil.toInteger(map.get("state"));
Object o = (map.get("mainId")); Object o = (map.get("mainId"));
Integer res = 0;
if (o == null) { if (o == null) {
throw new MyException("缺少必要参数"); throw new MyException("缺少必要参数");
} }
String stockTakingResult = "驳回";
// 获取主表编号 // 获取主表编号
Integer mainId = ObjectFormatUtil.toInteger(o); Integer mainId = ObjectFormatUtil.toInteger(o);
// 获取主单 // 获取主单
StockTaking mainRecord = stockTakingMapper.selectStockTakingById(mainId); StockTaking mainRecord = stockTakingMapper.selectStockTakingById(mainId);
// 用于存储正常处理的订单
List<Long> minIds = new ArrayList<>();
// 获取负责人 // 获取负责人
String departmentManager = mainRecord.getDepartmentManager(); String departmentManager = mainRecord.getDepartmentManager();
String[] split = departmentManager.split(","); String[] split = departmentManager.split(",");
for (int i = 0; i < split.length; i++) { for (int i = 0; i < split.length; i++) {
String s = split[i]; String s = split[i];
if("".equals(s)){ if ("".equals(s)) {
continue; continue;
} }
UserByPort userByPort = PageController.FindUserById(ObjectFormatUtil.toInteger(s), userToken); UserByPort userByPort = PageController.FindUserById(ObjectFormatUtil.toInteger(s), userToken);
QyWxUid.append(userByPort.getWorkwechat()).append(","); QyWxUid.append(userByPort.getWorkwechat()).append(",");
} }
// 定义错误信息
Map<String, Object> errMsg = new HashMap<>();
// 定义出错单号
List<Long> errIds = new ArrayList<>();
// 定义出错信息
List<String> err = new ArrayList<>();
Integer placeId = mainRecord.getPlaceId();
// 获取库位详情
Place placeById = placeMapper.findPlaceById(placeId);
Integer depositoryId = mainRecord.getDepositoryId();
// 获取所有子单
List<StockTakingChildP> 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<String, Object> 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<String, Object> result = new HashMap<>();
// 获取点击的按钮
String clickKey = templateCard.getEventKey().split("_")[1];
// 点击用户
String fromUserName = templateCard.getFromUserName();
// 根据userId获取处理人
Map<String, Object> portInfo = PortConfig.findUserByQyWxUserId(fromUserName);
UserByPort userByPort = (UserByPort) portInfo.get("user");
// 用于最终更新
Map<String, Object> map = new HashMap<>();
// 获取主表编号
String o = templateCard.getEventKey().split("StockTakingId")[1];
Integer mainId = ObjectFormatUtil.toInteger(o);
// 用于存储子表id
List<Long> minIds = new ArrayList<>();
// 获取主单
StockTaking mainRecord = stockTakingMapper.selectStockTakingById(mainId);
// 如果审核通过 // 如果审核通过
stockTakingResult = "通过";
// 定义错误信息 // 定义错误信息
Map<String, Object> errMsg = new HashMap<>(); Map<String, Object> errMsg = new HashMap<>();
@ -522,6 +767,8 @@ public class StockTakingServiceImpl implements StockTakingService {
for (int i = 0; i < minRecordList.size(); i++) { for (int i = 0; i < minRecordList.size(); i++) {
// 获取子单详情 // 获取子单详情
StockTakingChildP minRecord = minRecordList.get(i); StockTakingChildP minRecord = minRecordList.get(i);
// 获取盘点的物料详情 // 获取盘点的物料详情
// 获取当前盘点结果 // 获取当前盘点结果
@ -566,7 +813,6 @@ public class StockTakingServiceImpl implements StockTakingService {
materialById.setQuantity(oldQuantity + newInventory); materialById.setQuantity(oldQuantity + newInventory);
// 用于计算新的库位数量 // 用于计算新的库位数量
Integer newNumberForPlace = 0; Integer newNumberForPlace = 0;
// 用于计算新的库位与物料对应关系的数量 // 用于计算新的库位与物料对应关系的数量
@ -630,7 +876,9 @@ public class StockTakingServiceImpl implements StockTakingService {
// 更新当前物料信息 // 更新当前物料信息
materialMapper.updateMaterial(materialById); materialMapper.updateMaterial(materialById);
minIds.add(minRecord.getId());
}
if (errIds.size() > 0) { if (errIds.size() > 0) {
// 如果有出错的情况 // 如果有出错的情况
@ -640,99 +888,133 @@ public class StockTakingServiceImpl implements StockTakingService {
result.put("errMsg", errMsg); result.put("errMsg", errMsg);
} }
}
// 更新结果 // 更新结果
map.put("id", mainId); map.put("id", mainId);
map.put("state", 1);
String simpleTime = DateUtil.getSimpleTime(new Date()); String simpleTime = DateUtil.getSimpleTime(new Date());
map.put("completeTime", DateUtil.DateTimeToTimeStamp(simpleTime)); map.put("completeTime", DateUtil.DateTimeToTimeStamp(simpleTime));
map.put("departmentManager",userToken.getId()); map.put("departmentManager", userByPort.getId());
stockTakingMapper.updateStockTaking(map); stockTakingMapper.updateStockTaking(map);
// 抄送盘点记录给负责人 // 开启一个线程用于发送抄送信息给负责人
StockTaking finalMainRecord = mainRecord;
new Thread(new Runnable() { new Thread(new Runnable() {
@Override @Override
public void run() { 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(); }).start();
return 1;
return result;
} }
/** /**
* 用于进行盘点结果转移 * 用于进行盘点结果转移
*
* @param map * @param map
* @return * @return
*/ */
@Transactional @Transactional
@Override @Override
public Integer stockTakingTransfer(Map<String, Object> map,UserByPort userToken) { public Integer stockTakingTransfer(Map<String, Object> map, UserByPort userToken) {
List<Integer> minIds = (List<Integer>) map.get("minIds"); List<Integer> minIds = (List<Integer>) map.get("minIds");
List<Long> minRecorIds = new ArrayList<>();
Integer res = 0; Integer res = 0;
// 获取对应主订单 // 获取对应主订单
StockTaking mainRecord = null; 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++) { for (int i = 0; i < minIds.size(); i++) {
Integer minId = minIds.get(i); Integer minId = minIds.get(i);
// 获取对应子订单 // 获取对应子订单
StockTakingChildP minRecord = stockTakingMapper.selectStockTakingChildPById(minId); StockTakingChildP minRecord = stockTakingMapper.selectStockTakingChildPById(minId);
minRecorIds.add(minRecord.getId());
// 获取当前物料 // 获取当前物料
Material material = materialMapper.findMaterialById(minRecord.getMid()); Material material = materialMapper.findMaterialById(minRecord.getMid());
// 获取对应主订单 // 获取对应主订单
mainRecord = stockTakingMapper.selectStockTakingById(minRecord.getMainId()); mainRecord = stockTakingMapper.selectStockTakingById(minRecord.getMainId());
// 获取转移数量 // 获取转移数量
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); sumTransfer += inventory;
// 获取转移后的数量 // 获取转移后的数量
Integer newInventory = minRecord.getNewInventory() - 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); material.setQuantity(newInventory);
// 进行物料转移 // 进行物料转移
Map<String,Object> paramForMaterialToDepository = new HashMap<>(); Map<String, Object> paramForMaterialToDepository = new HashMap<>();
paramForMaterialToDepository.put("depositoryId",newPlace.getDid()); paramForMaterialToDepository.put("depositoryId", depositoryId);
paramForMaterialToDepository.put("code",material.getCode()); paramForMaterialToDepository.put("code", material.getCode());
// 获取转移后的仓库中的该物料 // 获取转移后的仓库中的该物料
List<Material> materialByDepository = materialMapper.findInventory(paramForMaterialToDepository); List<Material> materialByDepository = materialMapper.findInventory(paramForMaterialToDepository);
if(materialByDepository.size() > 0){ if (materialByDepository.size() > 0) {
// 如果转移后的仓库中存在该物料 // 如果转移后的仓库中存在该物料
Material transferMaterial = materialByDepository.get(0); Material transferMaterial = materialByDepository.get(0);
//获取物料与转移后库位的对应关系 //获取物料与转移后库位的对应关系
Map<String,Object> paramForMaterialAndPlace = new HashMap<>(); Map<String, Object> paramForMaterialAndPlace = new HashMap<>();
paramForMaterialAndPlace.put("mid",transferMaterial.getId()); paramForMaterialAndPlace.put("mid", transferMaterial.getId());
paramForMaterialAndPlace.put("pid",newPlace.getId()); paramForMaterialAndPlace.put("pid", newPlace.getId());
MaterialAndPlace newPlaceAndMaterial = placeMapper.findPlaceAndMaterialByMidAndPid(paramForMaterialAndPlace); MaterialAndPlace newPlaceAndMaterial = placeMapper.findPlaceAndMaterialByMidAndPid(paramForMaterialAndPlace);
if(newPlaceAndMaterial == null){ if (newPlaceAndMaterial == null) {
// 如果转移之后没有该物料 // 如果转移之后没有该物料
paramForMaterialAndPlace.put("quantity",inventory); paramForMaterialAndPlace.put("quantity", inventory);
placeMapper.addMaterialOnPlace(paramForMaterialAndPlace); placeMapper.addMaterialOnPlace(paramForMaterialAndPlace);
}else{ } else {
// 如果转移之后有该物料 // 如果转移之后有该物料
newPlaceAndMaterial.setQuantity(newPlaceAndMaterial.getQuantity() + inventory); newPlaceAndMaterial.setQuantity(newPlaceAndMaterial.getQuantity() + inventory);
placeMapper.updateMaterialAndPlace(newPlaceAndMaterial); placeMapper.updateMaterialAndPlace(newPlaceAndMaterial);
} }
} } else {
else{
// 如果不存在 // 如果不存在
Material mt = new Material(); Material mt = new Material();
@ -752,61 +1034,59 @@ public class StockTakingServiceImpl implements StockTakingService {
materialMapper.insertMaterial(mt); materialMapper.insertMaterial(mt);
// 添加当前物料与库位之间的映射 // 添加当前物料与库位之间的映射
Map<String,Object> paramForMaterialAndPlace = new HashMap<>(); Map<String, Object> paramForMaterialAndPlace = new HashMap<>();
paramForMaterialAndPlace.put("mid",mt.getId()); paramForMaterialAndPlace.put("mid", mt.getId());
paramForMaterialAndPlace.put("pid",newPlace.getId()); paramForMaterialAndPlace.put("pid", newPlace.getId());
paramForMaterialAndPlace.put("quantity",newInventory); paramForMaterialAndPlace.put("quantity", newInventory);
placeMapper.addMaterialOnPlace(paramForMaterialAndPlace); placeMapper.addMaterialOnPlace(paramForMaterialAndPlace);
} }
//获取物料与转移前库位的对应关系 //获取物料与转移前库位的对应关系
Map<String,Object> paramForMaterialAndPlace = new HashMap<>(); Map<String, Object> paramForMaterialAndPlace = new HashMap<>();
paramForMaterialAndPlace.put("mid",material.getId()); paramForMaterialAndPlace.put("mid", material.getId());
paramForMaterialAndPlace.put("pid",oldPlace.getId()); paramForMaterialAndPlace.put("pid", oldPlace.getId());
MaterialAndPlace oldPlaceAndMaterial = placeMapper.findPlaceAndMaterialByMidAndPid(paramForMaterialAndPlace); MaterialAndPlace oldPlaceAndMaterial = placeMapper.findPlaceAndMaterialByMidAndPid(paramForMaterialAndPlace);
if(oldPlaceAndMaterial == null){ if (oldPlaceAndMaterial == null) {
// 如果转移之前没有该物料 // 如果转移之前没有该物料
paramForMaterialAndPlace.put("quantity",newInventory); paramForMaterialAndPlace.put("quantity", newInventory);
placeMapper.addMaterialOnPlace(paramForMaterialAndPlace); placeMapper.addMaterialOnPlace(paramForMaterialAndPlace);
} } else {
else{
// 如果转移之前有该物料 // 如果转移之前有该物料
oldPlaceAndMaterial.setQuantity(oldPlaceAndMaterial.getQuantity() + newInventory); oldPlaceAndMaterial.setQuantity(newInventory);
placeMapper.updateMaterialAndPlace(oldPlaceAndMaterial); placeMapper.updateMaterialAndPlace(oldPlaceAndMaterial);
} }
} } else {
else{
// 如果在同一仓库 // 如果在同一仓库
// 更新物料容量 // 更新物料容量
material.setQuantity(minRecord.getNewInventory()); material.setQuantity(minRecord.getNewInventory());
//获取物料与转移前库位的对应关系 //获取物料与转移前库位的对应关系
Map<String,Object> paramForMaterialAndPlace = new HashMap<>(); Map<String, Object> paramForMaterialAndPlace = new HashMap<>();
paramForMaterialAndPlace.put("mid",material.getId()); paramForMaterialAndPlace.put("mid", material.getId());
paramForMaterialAndPlace.put("pid",oldPlace.getId()); paramForMaterialAndPlace.put("pid", oldPlace.getId());
MaterialAndPlace oldPlaceAndMaterial = placeMapper.findPlaceAndMaterialByMidAndPid(paramForMaterialAndPlace); MaterialAndPlace oldPlaceAndMaterial = placeMapper.findPlaceAndMaterialByMidAndPid(paramForMaterialAndPlace);
if(oldPlaceAndMaterial == null){ if (oldPlaceAndMaterial == null) {
// 如果转移之前没有该物料 // 如果转移之前没有该物料
paramForMaterialAndPlace.put("quantity",newInventory); paramForMaterialAndPlace.put("quantity", newInventory);
placeMapper.addMaterialOnPlace(paramForMaterialAndPlace); placeMapper.addMaterialOnPlace(paramForMaterialAndPlace);
}else{ } else {
// 如果转移之前有该物料 // 如果转移之前有该物料
oldPlaceAndMaterial.setQuantity(oldPlaceAndMaterial.getQuantity() + newInventory); oldPlaceAndMaterial.setQuantity(newInventory);
placeMapper.updateMaterialAndPlace(oldPlaceAndMaterial); placeMapper.updateMaterialAndPlace(oldPlaceAndMaterial);
} }
// 获取物料与转移后库位的对应关系 // 获取物料与转移后库位的对应关系
paramForMaterialAndPlace.put("pid",newPlace.getId()); paramForMaterialAndPlace.put("pid", newPlace.getId());
MaterialAndPlace newPlaceAndMaterial = placeMapper.findPlaceAndMaterialByMidAndPid(paramForMaterialAndPlace); MaterialAndPlace newPlaceAndMaterial = placeMapper.findPlaceAndMaterialByMidAndPid(paramForMaterialAndPlace);
if(newPlaceAndMaterial == null){ if (newPlaceAndMaterial == null) {
// 如果转移后没有该物料 // 如果转移后没有该物料
paramForMaterialAndPlace.put("quantity",inventory); paramForMaterialAndPlace.put("quantity", inventory);
placeMapper.addMaterialOnPlace(paramForMaterialAndPlace); placeMapper.addMaterialOnPlace(paramForMaterialAndPlace);
}else{ } else {
// 如果转移后有该物料 // 如果转移后有该物料
newPlaceAndMaterial.setQuantity(newPlaceAndMaterial.getQuantity() + inventory); newPlaceAndMaterial.setQuantity(newPlaceAndMaterial.getQuantity() + inventory);
placeMapper.updateMaterialAndPlace(newPlaceAndMaterial); placeMapper.updateMaterialAndPlace(newPlaceAndMaterial);
@ -819,61 +1099,51 @@ public class StockTakingServiceImpl implements StockTakingService {
res += materialMapper.updateMaterial(material); 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; StockTaking finalMainRecord = mainRecord;
new Thread(new Runnable() { new Thread(new Runnable() {
@Override @Override
public void run() { public void run() {
Integer originator = finalMainRecord.getOriginator(); Integer originator = finalMainRecord.getOriginator();
map.put("minIds",minRecorIds);
StringBuilder departMentHeadQyWxName = new StringBuilder(); StringBuilder departMentHeadQyWxName = new StringBuilder();
UserByPort userByPort = PageController.FindUserById(ObjectFormatUtil.toInteger(originator), userToken); UserByPort userByPort = PageController.FindUserById(ObjectFormatUtil.toInteger(originator), userToken);
// departMentHeadQyWxName.append(userByPort.getWorkwechat()+","); departMentHeadQyWxName.append(userByPort.getWorkwechat()+",");
departMentHeadQyWxName.append("PangFuZhen,"); // departMentHeadQyWxName.append("PangFuZhen,");
JSONObject jsonObject = qyWxOperationService.sendCcStockTakingMessageToHead(departMentHeadQyWxName.toString(), map, userToken, finalMainRecord); JSONObject jsonObject = qyWxOperationService.sendCcStockTakingTransferMessageToHead(departMentHeadQyWxName.toString(), map, userToken, finalMainRecord);
} }
}).start(); }).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<String,Object> 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; return res;
} }
/** /**
* 用于企业微信的审核申请处理 * 用于企业微信的审核申请处理
*
* @param templateCard * @param templateCard
* @return * @return
*/ */
@Transactional @Transactional
@Override @Override
public Integer reviewByQyWx(TemplateCard templateCard) { public Map<String, Object> reviewByQyWx(TemplateCard templateCard) {
Map<String, Object> result = new HashMap<>(); Map<String, Object> result = new HashMap<>();
@ -882,6 +1152,10 @@ public class StockTakingServiceImpl implements StockTakingService {
// 获取点击的按钮 // 获取点击的按钮
String clickKey = templateCard.getEventKey().split("_")[1]; String clickKey = templateCard.getEventKey().split("_")[1];
// 用于存储正常处理的订单
List<Long> normalMinIds = new ArrayList<>();
// 点击用户 // 点击用户
String fromUserName = templateCard.getFromUserName(); String fromUserName = templateCard.getFromUserName();
// 根据userId获取处理人 // 根据userId获取处理人
@ -889,16 +1163,20 @@ public class StockTakingServiceImpl implements StockTakingService {
UserByPort userByPort = (UserByPort) portInfo.get("user"); UserByPort userByPort = (UserByPort) portInfo.get("user");
// 用于最终更新 // 用于最终更新
Map<String,Object> map = new HashMap<>(); Map<String, Object> map = new HashMap<>();
// 获取主表编号 // 获取主表编号
String o = templateCard.getEventKey().split("StockTakingId")[1]; String o = templateCard.getEventKey().split("StockTakingId")[1];
Integer mainId = ObjectFormatUtil.toInteger(o); Integer mainId = ObjectFormatUtil.toInteger(o);
// 用于标识是否向盘点人员发送卡片
Boolean flag = true;
// 获取主单 // 获取主单
StockTaking mainRecord = stockTakingMapper.selectStockTakingById(mainId); StockTaking mainRecord = stockTakingMapper.selectStockTakingById(mainId);
Integer departmentManagerState = 2; Integer departmentManagerState = 2;
if ("pass".equals(clickKey)) { if (clickKey.contains("pass")) {
// 如果审核通过 // 如果审核通过
departmentManagerState = 1; departmentManagerState = 1;
@ -965,7 +1243,6 @@ public class StockTakingServiceImpl implements StockTakingService {
materialById.setQuantity(oldQuantity + newInventory); materialById.setQuantity(oldQuantity + newInventory);
// 用于计算新的库位数量 // 用于计算新的库位数量
Integer newNumberForPlace = 0; Integer newNumberForPlace = 0;
// 用于计算新的库位与物料对应关系的数量 // 用于计算新的库位与物料对应关系的数量
@ -1017,49 +1294,79 @@ public class StockTakingServiceImpl implements StockTakingService {
placeAndMaterialByMidAndPid.setQuantity(newNumberForMatrialAndPlace); placeAndMaterialByMidAndPid.setQuantity(newNumberForMatrialAndPlace);
} }
normalMinIds.add(minRecord.getId());
// 更新库位
placeMapper.UpdatePlace(placeById);
// 更新库位与物料的对应关系
placeMapper.updateMaterialAndPlace(placeAndMaterialByMidAndPid);
// 更新当前物料信息
materialMapper.updateMaterial(materialById);
} }
if (errIds.size() > 0) { if (errIds.size() > 0) {
// 如果有出错的情况 // 如果有出错的情况
errMsg.put("errIds", errIds); errMsg.put("errIds", errIds);
errMsg.put("errMsg", err); errMsg.put("errMsg", err);
result.put("errMsg", errMsg); result.put("errMsg", errMsg);
flag = false;
} }
}
else{ if(flag) {
map.put("state",departmentManagerState); // 抄送盘点调账记录给盘点人员
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<String,Object> 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);
} }
// 更新结果 // 更新结果
if(flag) {
map.put("id", mainId); map.put("id", mainId);
map.put("departmentManagerState",departmentManagerState); map.put("departmentManagerState", departmentManagerState);
String simpleTime = DateUtil.getSimpleTime(new Date()); String simpleTime = DateUtil.getSimpleTime(new Date());
map.put("completeTime", DateUtil.DateTimeToTimeStamp(simpleTime)); map.put("reviewTime", DateUtil.DateTimeToTimeStamp(simpleTime));
map.put("departmentManager",userByPort.getId()); map.put("departmentManager", userByPort.getId());
stockTakingMapper.updateStockTaking(map); stockTakingMapper.updateStockTaking(map);
return 1; }
return result;
} }
/**
* 用于创建编码
* @param depositoryName
* @return
*/
public String createTakingCode(String depositoryName) { public String createTakingCode(String depositoryName) {
String key = "wms_stockTakingNumber"; String key = "wms_stockTakingNumber";
RLock lock = redissonClient.getLock(key); RLock lock = redissonClient.getLock(key);

4
src/main/resources/application-test.yml

@ -17,8 +17,8 @@ spring:
##数据库设置 ##数据库设置
datasource: datasource:
username: root username: depository
password: root password: NhE47edekBHxhjYk
url: jdbc:mysql://localhost:3306/depository?serverTimezone=Asia/Shanghai&zeroDateTimeBehavior=convertToNull url: jdbc:mysql://localhost:3306/depository?serverTimezone=Asia/Shanghai&zeroDateTimeBehavior=convertToNull
driver-class-name: com.mysql.cj.jdbc.Driver driver-class-name: com.mysql.cj.jdbc.Driver
type: com.alibaba.druid.pool.DruidDataSource type: com.alibaba.druid.pool.DruidDataSource

22
src/main/resources/templates/pages/application/application-in.html

@ -441,12 +441,16 @@
contentType: "application/json;charset=utf-8", contentType: "application/json;charset=utf-8",
success: function (d) { success: function (d) {
var d = d.data; var d = d.data;
var idNumber = materialId.name.split("mid")[1];
if (d == null) { if (d == null) {
layer.msg("没有该编码,请确认是否输入正确"); layer.msg("没有该编码,请确认是否输入正确");
materialName.value = ""; materialName.value = "";
materialId.value = ""; materialId.value = "";
priceValue.value = ""; priceValue.value = "";
obj.value = ""; obj.value = "";
$("#barCode"+idNumber).remove();
form.render();
} else { } else {
materialName.value = d.mname; materialName.value = d.mname;
materialId.value = d.id; materialId.value = d.id;
@ -459,15 +463,18 @@
var barCodeImg = barCodeItem.childNodes[1].childNodes[3]; var barCodeImg = barCodeItem.childNodes[1].childNodes[3];
var id = barCodeInput.id; var id = barCodeInput.id;
$("#"+id).remove(); $("#"+id).remove();
$("#barCode").remove(); $("#barCode"+idNumber).empty();
// barCodeInput.style = "display:none"; var barCode = $("#barCode"+idNumber);
var idNumber = materialId.name.split("mid")[1]; if(barCode.length > 0) {
var barCodeSelect = ` barCode.empty();
<select id=`+"barCode"+idNumber+` name=`+"barCode"+idNumber+ `> }else{
var barCodeSelect = `
<select id=` + "barCode" + idNumber + ` name=` + "barCode" + idNumber + `>
</select>`; </select>`;
$("#" + barCodeImg.id).before(barCodeSelect);
$("#"+barCodeImg.id).before(barCodeSelect); }
form.render(); form.render();
$.each(materialAndBarCodeList, function (index, item) { $.each(materialAndBarCodeList, function (index, item) {
$("#barCode"+idNumber).append(new Option(item.bmcode, item.id));//往下拉菜单里添加元素 $("#barCode"+idNumber).append(new Option(item.bmcode, item.id));//往下拉菜单里添加元素
}); });
@ -760,6 +767,7 @@
} }
if (materialList.length > 0) { if (materialList.length > 0) {
for (let i = 1; i <= materialList.length; i++) { for (let i = 1; i <= materialList.length; i++) {
materialList[i-1].mid = materialList[i-1].id;
Coverpage(i, materialList[i - 1]); Coverpage(i, materialList[i - 1]);
var materialbyBarCodeList = materialList[i-1]["materialAndBarCodeList"]; var materialbyBarCodeList = materialList[i-1]["materialAndBarCodeList"];
$.each(materialbyBarCodeList, function (index, item) { $.each(materialbyBarCodeList, function (index, item) {

6
src/main/resources/templates/pages/application/application-in_back.html

@ -61,14 +61,14 @@
<div class="layui-form-item"> <div class="layui-form-item">
<label class="layui-form-label">物料单价:</label> <label class="layui-form-label">物料单价:</label>
<div class="layui-input-block"> <div class="layui-input-block">
<input name="price" type="number" placeholder="请填写入物料单价" value="" <input name="price" type="number" placeholder="请填写入物料单价" th:value="${materialById.getPrice()}"
class="layui-input" lay-verify="number"> class="layui-input" lay-verify="number">
</div> </div>
</div> </div>
<div class="layui-form-item"> <div class="layui-form-item">
<label class="layui-form-label">物料数量:</label> <label class="layui-form-label">物料数量:</label>
<div class="layui-input-block"> <div class="layui-input-block">
<input name="quantity" type="number" placeholder="请填写入物料数量" value="" <input name="quantity" type="number" placeholder="请填写入物料数量" th:value="${materialById.getQuantity()}"
class="layui-input" lay-verify="number"> class="layui-input" lay-verify="number">
</div> </div>
</div> </div>
@ -80,7 +80,7 @@
lay-verify="required"/> lay-verify="required"/>
<input type="text" name="depositoryId" class="layui-input" id="depositoryId" th:value="${depository.getId()}" <input type="text" name="depositoryId" class="layui-input" id="depositoryId" th:value="${depository.getId()}"
style="display: none" lay-verify="required"/> style="display: none" lay-verify="required"/>
<input type="text" name="placeId" class="layui-input" id="placeId" <input type="text" name="placeId" class="layui-input" id="placeId" value="0"
style="display: none" lay-verify="required"/> style="display: none" lay-verify="required"/>
</div> </div>
</div> </div>

118
src/main/resources/templates/pages/application/application-in_scanQrCode.html

@ -140,12 +140,17 @@
if (materialList.length > 0) { if (materialList.length > 0) {
for (let i = 0; i < materialList.length; i++) { for (let i = 0; i < materialList.length; i++) {
initForm(i, materialList[i]); initForm(i, materialList[i]);
form.render();
var materialAndBarCodeList = materialList[i]["materialAndBarCodeList"]; var materialAndBarCodeList = materialList[i]["materialAndBarCodeList"];
var num = i;
if(num === 0){
num = "";
}
$.each(materialAndBarCodeList, function (index, item) { $.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 { } else {
var material = {}; var material = {};
material.mname = ''; material.mname = '';
@ -245,14 +250,14 @@
<div class="inputdiv"> <div class="inputdiv">
<select id=`+"barCode"+NewIdNumber+` name=`+"barCode"+NewIdNumber+`></select> <select id=`+"barCode"+NewIdNumber+` name=`+"barCode"+NewIdNumber+`></select>
<img src="/static/images/search.ico" height="16" width="16" style="margin-top: 10px" onclick="scanBarCode(this)" > <img id= `+"barCodeImg"+NewIdNumber+` name=`+"barCodeImg"+NewIdNumber+` src="/static/images/search.ico" height="16" width="16" style="margin-top: 10px" onclick="scanBarCode(this)" >
</div> </div>
</div> </div>
</div> </div>
<div class="layui-form-item"> <div class="layui-form-item">
<label class="layui-form-label">物料单价:</label> <label class="layui-form-label">物料单价:</label>
<div class="layui-input-block"> <div class="layui-input-block">
<input name=` + "price" + NewIdNumber + ` type="number" placeholder="请填写入物料单价" value="" <input name=` + "price" + NewIdNumber + ` type="number" placeholder="请填写入物料单价" value="${obj.price}"
class="layui-input" lay-verify="number"> class="layui-input" lay-verify="number">
</div> </div>
</div> </div>
@ -445,6 +450,18 @@
class="layui-input" lay-verify="required"> class="layui-input" lay-verify="required">
</div> </div>
</div> </div>
<div class="layui-form-item">
<label class="layui-form-label">条形编码:</label>
<div class="layui-input-block" style="margin: 0px;">
<div class="inputdiv">
<input id="barcode" name=` + "barCode" + NewIdNumber + ` type="text" placeholder="请填写入条形编码" value=""
class="layui-input" style="border-style: none">
<img src="/static/images/search.ico" height="16"
id = `+"barCodeImg"+NewIdNumber+`
width="16" style="margin-top: 10px" onclick="scanBarCode(this)" >
</div>
</div>
</div>
<div class="layui-form-item"> <div class="layui-form-item">
<label class="layui-form-label">物料单价:</label> <label class="layui-form-label">物料单价:</label>
<div class="layui-input-block"> <div class="layui-input-block">
@ -473,7 +490,7 @@
// 获取当前高度 // 获取当前高度
var height = parseInt(($("#stepForm").css('height')).split("px")[0]); var height = parseInt(($("#stepForm").css('height')).split("px")[0]);
params.push(NewIdNumber) params.push(NewIdNumber)
$("#stepForm").css("height", height + 475 + 'px'); $("#stepForm").css("height", height + 530 + 'px');
var materialItem = firstItem + depositoryItem + lastItem; var materialItem = firstItem + depositoryItem + lastItem;
$("#" + parentId).after(materialItem); $("#" + parentId).after(materialItem);
}; };
@ -487,7 +504,7 @@
// 获取祖父节点 // 获取祖父节点
var reparent = parent.parentNode; var reparent = parent.parentNode;
var height = parseInt(($("#stepForm").css('height')).split("px")[0]); 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); params = remove(params, parentId);
reparent.removeChild(parent); reparent.removeChild(parent);
}; };
@ -512,10 +529,19 @@
var code = obj.value; var code = obj.value;
// 获取对应元素 // 获取对应元素
var parent = obj.parentNode.parentNode.parentNode; var parent = obj.parentNode.parentNode.parentNode;
var children = parent.childNodes[5]; var materialChildren = parent.childNodes[5];
var materialItem = children.childNodes[3].childNodes[1].childNodes; var priceChildren = parent.childNodes[11];
var barCodeChildren = parent.childNodes[9];
// 物料条目
var materialItem = materialChildren.childNodes[3].childNodes[1].childNodes;
var materialName = materialItem[1]; var materialName = materialItem[1];
var materialId = materialName.parentNode.parentNode.childNodes[3]; var materialId = materialName.parentNode.parentNode.childNodes[3];
// 单价条目
var priceItem = priceChildren.childNodes[3].childNodes;
var priceValue = priceItem[1];
// 条形码条码
var barCodeItem = barCodeChildren.childNodes[3];
var req = {}; var req = {};
req.code = code; req.code = code;
req.type = "in"; req.type = "in";
@ -527,14 +553,44 @@
contentType: "application/json;charset=utf-8", contentType: "application/json;charset=utf-8",
success: function (d) { success: function (d) {
var d = d.data; var d = d.data;
var idNumber = materialId.name.split("mid")[1];
if (d == null) { if (d == null) {
layer.msg("没有该编码,请确认是否输入正确"); layer.msg("没有该编码,请确认是否输入正确");
materialName.value = ""; materialName.value = "";
materialId.value = ""; materialId.value = "";
priceValue.value = "";
obj.value = ""; obj.value = "";
$("#barCode" + idNumber).remove();
form.render();
} else { } else {
materialName.value = d.mname; materialName.value = d.mname;
materialId.value = d.id; 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 = `
<select id=` + "barCode" + idNumber + ` name=` + "barCode" + idNumber + `>
</select>`;
$("#" + 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) { openDepositoryTree = function (obj) {
var parent = obj.parentNode.parentNode.parentNode; var parent = obj.parentNode.parentNode.parentNode;

27
src/main/resources/templates/pages/application/application-out.html

@ -23,6 +23,11 @@
margin-left: 80px; margin-left: 80px;
} }
.layui-form-select{
width: 100%;
border-style: none;
}
</style> </style>
<div class="layuimini-container"> <div class="layuimini-container">
<div class="layuimini-main"> <div class="layuimini-main">
@ -215,7 +220,7 @@
complete: function () { complete: function () {
layer.close(this.layerIndex); layer.close(this.layerIndex);
} }
}) });
return false; return false;
}); });
@ -269,7 +274,7 @@
value="" value=""
class="layui-input" class="layui-input"
style="border-style: none"> style="border-style: none">
<img src="/static/images/search.ico" height="16" width="16" id="barCodeImg" <img src="/static/images/search.ico" height="16" width="16" id=`+"barCodeImg"+NewIdNumber+`
style="margin-top: 10px" onclick="scanBarCode(this)"> style="margin-top: 10px" onclick="scanBarCode(this)">
</div> </div>
</div> </div>
@ -432,23 +437,25 @@
{ {
materialName.value = d.mname; materialName.value = d.mname;
materialId.value = d.id; materialId.value = d.id;
var idNumber = materialId.name.split("mid")[1];
// 获取物料与条形码的对应关系 // 获取物料与条形码的对应关系
var materialAndBarCodeList = d["materialAndBarCodeList"]; var materialAndBarCodeList = d["materialAndBarCodeList"];
if (materialAndBarCodeList.length > 0) { if (materialAndBarCodeList.length > 0) {
// 如果有对应的条形码 // 如果有对应的条形码
var barCodeInput = barCodeItem.childNodes[1].childNodes[1]; var barCodeInput = barCodeItem.childNodes[1].childNodes[1];
var barCodeImg = barCodeItem.childNodes[1].childNodes[3]; var barCodeImg = barCodeItem.childNodes[1].childNodes[3];
console.log(barCodeItem)
var id = barCodeInput.id; var id = barCodeInput.id;
$("#" + id).remove(); $("#"+id).remove();
$("#barCode").remove(); $("#barCode"+idNumber).empty();
// barCodeInput.style = "display:none"; var barCode = $("#barCode"+idNumber);
var idNumber = materialId.name.split("mid")[1]; if(barCode.length > 0) {
var barCodeSelect = ` barCode.empty();
}else{
var barCodeSelect = `
<select id=` + "barCode" + idNumber + ` name=` + "barCode" + idNumber + `> <select id=` + "barCode" + idNumber + ` name=` + "barCode" + idNumber + `>
</select>`; </select>`;
$("#" + barCodeImg.id).before(barCodeSelect);
$("#" + barCodeImg.id).before(barCodeSelect); }
form.render(); form.render();
$.each(materialAndBarCodeList, function (index, item) { $.each(materialAndBarCodeList, function (index, item) {
$("#barCode" + idNumber).append(new Option(item.bmcode, item.id));//往下拉菜单里添加元素 $("#barCode" + idNumber).append(new Option(item.bmcode, item.id));//往下拉菜单里添加元素

31
src/main/resources/templates/pages/chart/chart-in_back.html

@ -474,21 +474,26 @@
type: 'get', type: 'get',
async: true, async: true,
dataType: "json", dataType: "json",
complete: function (XHR, TS) { complete: function (XHR, TS) {
if (XHR.status != 200) { if (XHR.status != 200) {
layer.alert("系统繁忙,稍后重试"); layer.alert("系统繁忙,稍后重试");
} }
}, },
beforeSend: function () {
this.layerIndex = layer.load(0, {shade: [0.5, '#393D49']});
},
success: function (result) { success: function (result) {
layer.close(this.layerIndex);
echartsRecords.setOption(optionRecords); echartsRecords.setOption(optionRecords);
// 折线图 // 折线图
var optionRecordsSeries = []; 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({ optionRecordsSeries.push({
name: result.data.depository_name[i], name: result.depository_name[i],
type: 'line', type: 'line',
stack: '金额', stack: '金额',
data: result.data.depository_data.data[result.data.depository_name[i]], data: result.data[result.depository_name[i]],
areaStyle: {} areaStyle: {}
}); });
} }
@ -506,7 +511,7 @@
} }
}, },
legend: { legend: {
data: result.data.depository_name data: result.depository_name
}, },
toolbox: { toolbox: {
feature: { feature: {
@ -523,7 +528,7 @@
{ {
type: 'category', type: 'category',
boundaryGap: false, boundaryGap: false,
data: result.data.depository_data.week data: result.week
} }
], ],
yAxis: [ yAxis: [
@ -536,7 +541,7 @@
echartsRecords.setOption(optionRecords); echartsRecords.setOption(optionRecords);
} }
}) })
}) });
form.on('submit(lastWeek)', function () { form.on('submit(lastWeek)', function () {
$.ajax({ $.ajax({
@ -549,16 +554,20 @@
layer.alert("系统繁忙,稍后重试"); layer.alert("系统繁忙,稍后重试");
} }
}, },
beforeSend: function () {
this.layerIndex = layer.load(0, {shade: [0.5, '#393D49']});
},
success: function (result) { success: function (result) {
layer.close(this.layerIndex);
echartsRecords.setOption(optionRecords); echartsRecords.setOption(optionRecords);
// 折线图 // 折线图
var optionRecordsSeries = []; 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({ optionRecordsSeries.push({
name: result.data.depository_name[i], name: result.depository_name[i],
type: 'line', type: 'line',
stack: '金额', stack: '金额',
data: result.data.depository_data.data[result.data.depository_name[i]], data: result.data[result.depository_name[i]],
areaStyle: {} areaStyle: {}
}); });
} }
@ -576,7 +585,7 @@
} }
}, },
legend: { legend: {
data: result.data.depository_name data: result.depository_name
}, },
toolbox: { toolbox: {
feature: { feature: {
@ -593,7 +602,7 @@
{ {
type: 'category', type: 'category',
boundaryGap: false, boundaryGap: false,
data: result.data.depository_data.week data: result.week
} }
], ],
yAxis: [ yAxis: [

32
src/main/resources/templates/pages/chart/chart-out_back.html

@ -465,7 +465,7 @@
// 获取本周 // 获取本周
form.on('submit(thisWeek)', function () { form.on('submit(thisWeek)', function () {
$.ajax({ $.ajax({
url: '/repository/layui/echart_back?type=2', url: '/repository/layui/echart_back_thisWeek?type=2',
type: 'get', type: 'get',
async: true, async: true,
dataType: "json", dataType: "json",
@ -474,16 +474,20 @@
layer.alert("系统繁忙,稍后重试"); layer.alert("系统繁忙,稍后重试");
} }
}, },
beforeSend: function () {
this.layerIndex = layer.load(0, {shade: [0.5, '#393D49']});
},
success: function (result) { success: function (result) {
layer.close(this.layerIndex);
echartsRecords.setOption(optionRecords); echartsRecords.setOption(optionRecords);
// 折线图 // 折线图
var optionRecordsSeries = []; 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({ optionRecordsSeries.push({
name: result.data.depository_name[i], name: result.depository_name[i],
type: 'line', type: 'line',
stack: '金额', stack: '金额',
data: result.data.depository_data.data[result.data.depository_name[i]], data: result.data[result.depository_name[i]],
areaStyle: {} areaStyle: {}
}); });
} }
@ -501,7 +505,7 @@
} }
}, },
legend: { legend: {
data: result.data.depository_name data: result.depository_name
}, },
toolbox: { toolbox: {
feature: { feature: {
@ -518,7 +522,7 @@
{ {
type: 'category', type: 'category',
boundaryGap: false, boundaryGap: false,
data: result.data.depository_data.week data: result.week
} }
], ],
yAxis: [ yAxis: [
@ -536,7 +540,7 @@
// 获取上周 // 获取上周
form.on('submit(lastWeek)', function () { form.on('submit(lastWeek)', function () {
$.ajax({ $.ajax({
url: '/repository/layui/echart_back?type=2&last=1', url: '/repository/layui/echart_back_lastWeek?type=2',
type: 'get', type: 'get',
async: true, async: true,
dataType: "json", dataType: "json",
@ -545,16 +549,20 @@
layer.alert("系统繁忙,稍后重试"); layer.alert("系统繁忙,稍后重试");
} }
}, },
beforeSend: function () {
this.layerIndex = layer.load(0, {shade: [0.5, '#393D49']});
},
success: function (result) { success: function (result) {
layer.close(this.layerIndex);
echartsRecords.setOption(optionRecords); echartsRecords.setOption(optionRecords);
// 折线图 // 折线图
var optionRecordsSeries = []; 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({ optionRecordsSeries.push({
name: result.data.depository_name[i], name: result.depository_name[i],
type: 'line', type: 'line',
stack: '金额', stack: '金额',
data: result.data.depository_data.data[result.data.depository_name[i]], data: result.data[result.depository_name[i]],
areaStyle: {} areaStyle: {}
}); });
} }
@ -572,7 +580,7 @@
} }
}, },
legend: { legend: {
data: result.data.depository_name data: result.depository_name
}, },
toolbox: { toolbox: {
feature: { feature: {
@ -589,7 +597,7 @@
{ {
type: 'category', type: 'category',
boundaryGap: false, boundaryGap: false,
data: result.data.depository_data.week data: result.week
} }
], ],
yAxis: [ yAxis: [

468
src/main/resources/templates/pages/chart/chart-stock.html

@ -33,84 +33,14 @@
<!--<div class="layuimini-container">--> <!--<div class="layuimini-container">-->
<div class="layuimini-main"> <div class="layuimini-main">
<div class="layui-row layui-col-space15">
<div class="layui-col-xs12 layui-col-md3">
<div class="layui-card top-panel">
<div class="layui-card-header">库存物料数量</div>
<div class="layui-card-body">
<div class="layui-row layui-col-space5">
<div class="layui-col-xs7 layui-col-md7 top-panel-number">
9,054,056
</div>
<div class="layui-col-xs5 layui-col-md5 top-panel-tips">
比昨天 <a style="color: #1aa094">▲0.12</a><br>
比七日 <a style="color: #bd3004">▼0.06</a>
</div>
</div>
</div>
</div>
</div>
<div class="layui-col-xs12 layui-col-md3">
<div class="layui-card top-panel">
<div class="layui-card-header">库存物料金额</div>
<div class="layui-card-body">
<div class="layui-row layui-col-space5">
<div class="layui-col-xs7 layui-col-md7 top-panel-number">
9,054,056
</div>
<div class="layui-col-xs5 layui-col-md5 top-panel-tips">
比昨天 <a style="color: #1aa094">▲0.12</a><br>
比七日 <a style="color: #bd3004">▼0.06</a>
</div>
</div>
</div>
</div>
</div>
<div class="layui-col-xs12 layui-col-md3">
<div class="layui-card top-panel">
<div class="layui-card-header">库存物料数量</div>
<div class="layui-card-body">
<div class="layui-row layui-col-space5">
<div class="layui-col-xs7 layui-col-md7 top-panel-number">
9,054,056
</div>
<div class="layui-col-xs5 layui-col-md5 top-panel-tips">
比昨天 <a style="color: #1aa094">▲0.12</a><br>
比七日 <a style="color: #bd3004">▼0.06</a>
</div>
</div>
</div>
</div>
</div>
<div class="layui-col-xs12 layui-col-md3">
<div class="layui-card top-panel">
<div class="layui-card-header">库存物料金额</div>
<div class="layui-card-body">
<div class="layui-row layui-col-space5">
<div class="layui-col-xs7 layui-col-md7 top-panel-number">
9,054,056
</div>
<div class="layui-col-xs5 layui-col-md5 top-panel-tips">
比昨天 <a style="color: #1aa094">▲0.12</a><br>
比七日 <a style="color: #bd3004">▼0.06</a>
</div>
</div>
</div>
</div>
</div>
</div>
<div class="layui-row layui-col-space15"> <div class="layui-row layui-col-space15">
<div class="layui-col-xs12 layui-col-md9"> <div class="layui-col-xs12 layui-col-md9">
<button class="layui-btn" lay-submit lay-filter="thisWeek">
&emsp;本周&emsp;
</button>
<button class="layui-btn" lay-submit lay-filter="lastWeek" >
&emsp;上周&emsp;
</button>
<div id="echarts-records" style="background-color:#ffffff;min-height:400px;padding: 10px"></div> <div id="echarts-records" style="background-color:#ffffff;min-height:400px;padding: 10px"></div>
</div> </div>
<div class="layui-col-xs12 layui-col-md3"> <div class="layui-col-xs12 layui-col-md3">
@ -131,22 +61,23 @@
</div> </div>
<!--</div>--> <!--</div>-->
<script src="/static/lib/layui-v2.6.3/layui.js" charset="utf-8"></script> <script src="/static/lib/layui-v2.6.3/layui.js" charset="utf-8"></script>
<script src="/static/js/lay-config.js?v=1.0.4" charset="utf-8"></script> <script src="/static/js/lay-config.js?v=1.0.4" charset="utf-8"></script>
<script> <script>
layui.use(['layer', 'echarts'], function () { layui.use(['layer', 'echarts'], function () {
var $ = layui.jquery, var $ = layui.jquery,
layer = layui.layer, layer = layui.layer,
echarts = layui.echarts; echarts = layui.echarts,
form = layui.form;
/** /**
* 报表功能 * 折线图
*/ */
var echartsRecords = echarts.init(document.getElementById('echarts-records'), 'walden'); var echartsRecords = echarts.init(document.getElementById('echarts-records'), 'walden');
var optionRecords = { var optionRecords = {
title: { title: {
text: '入库仓库-报表图' text: '仓库库存-报表图'
}, },
tooltip: { tooltip: {
trigger: 'axis', trigger: 'axis',
@ -158,7 +89,7 @@
} }
}, },
legend: { legend: {
data: ['外芯仓库', '义乌仓库', '宁波仓库', '杭州仓库', '北京仓库'] data: []
}, },
toolbox: { toolbox: {
feature: { feature: {
@ -175,7 +106,7 @@
{ {
type: 'category', type: 'category',
boundaryGap: false, boundaryGap: false,
data: ['周一', '周二', '周三', '周四', '周五', '周六', '周日'] data: []
} }
], ],
yAxis: [ yAxis: [
@ -184,33 +115,6 @@
} }
], ],
series: [ series: [
{
name: '外芯仓库',
type: 'line',
stack: '金额',
areaStyle: {},
data: [120, 132, 101, 134, 90, 230, 210]
},
{
name: '义乌仓库',
type: 'line',
areaStyle: {},
data: [220, 182, 191, 234, 290, 330, 310]
},
{
name: '宁波仓库',
type: 'line',
stack: '金额',
areaStyle: {},
data: [150, 232, 201, 154, 190, 330, 410]
},
{
name: '杭州仓库',
type: 'line',
stack: '金额',
areaStyle: {},
data: [320, 332, 301, 334, 390, 330, 320]
},
{ {
name: '北京仓库', name: '北京仓库',
type: 'line', type: 'line',
@ -222,12 +126,10 @@
} }
}, },
areaStyle: {}, areaStyle: {},
data: [820, 932, 901, 934, 1290, 1330, 1320] data: []
} }
] ]
}; };
echartsRecords.setOption(optionRecords);
/** /**
* 玫瑰图表 * 玫瑰图表
@ -271,30 +173,22 @@
} }
] ]
}; };
echartsPies.setOption(optionPies);
/** /**
* 柱状图 * 柱状图
*/ */
var echartsDataset = echarts.init(document.getElementById('echarts-dataset'), 'walden'); var echartsDataset = echarts.init(document.getElementById('echarts-dataset'), 'walden');
var optionDataset = { var optionDataset = {
legend: {}, legend: {},
tooltip: {}, tooltip: {},
dataset: { dataset: {
dimensions: ['product', '3月', '4月', '5月'], dimensions: [],
source: [ source: [
{product: '电子产品类', '3月': 43.3, '4月': 85.8, '5月': 93.7},
{product: '食品类', '3月': 83.1, '4月': 73.4, '5月': 55.1},
{product: '饮品类', '3月': 86.4, '4月': 65.2, '5月': 82.5},
{product: '海产品类', '3月': 72.4, '4月': 53.9, '5月': 39.1}
] ]
}, },
xAxis: {type: 'category'}, xAxis: {type: 'category'},
yAxis: {}, yAxis: {},
// Declare several bar series, each will be mapped
// to a column of dataset.source by default.
series: [ series: [
{type: 'bar'}, {type: 'bar'},
{type: 'bar'}, {type: 'bar'},
@ -302,15 +196,11 @@
] ]
}; };
echartsDataset.setOption(optionDataset);
/** /**
* 中国地图 * 中国地图
*/ */
var echartsMap = echarts.init(document.getElementById('echarts-map'), 'walden'); var echartsMap = echarts.init(document.getElementById('echarts-map'), 'walden');
var optionMap = { var optionMap = {
legend: {}, legend: {},
tooltip: { tooltip: {
@ -319,46 +209,322 @@
}, },
dataset: { dataset: {
source: [ source: [
['product', '3月', '4月', '5月', '6月', '7月', '8月'],
['电子产品类', 41.1, 30.4, 65.1, 53.3, 83.8, 98.7],
['食品类', 86.5, 92.1, 85.7, 83.1, 73.4, 55.1],
['饮品类', 24.1, 67.2, 79.5, 86.4, 65.2, 82.5],
['海产品类', 55.2, 67.1, 69.2, 72.4, 53.9, 39.1]
] ]
}, },
xAxis: {type: 'category'}, xAxis: {type: 'category'},
yAxis: {gridIndex: 0}, yAxis: {gridIndex: 0},
grid: {top: '55%'}, grid: {top: '55%'},
series: [ series: [
{type: 'line', smooth: true, seriesLayoutBy: 'row'},
{type: 'line', smooth: true, seriesLayoutBy: 'row'},
{type: 'line', smooth: true, seriesLayoutBy: 'row'},
{type: 'line', smooth: true, seriesLayoutBy: 'row'},
{
type: 'pie',
id: 'pie',
radius: '30%',
center: ['50%', '25%'],
label: {
formatter: '{b}: {@3月} ({d}%)'
},
encode: {
itemName: 'product',
value: '3月',
tooltip: '3月'
}
}
] ]
}; };
echartsMap.setOption(optionMap);
//动态加载相关数据
$.ajax({
url:'/repository/layui/echart_back?type=0',
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);
if(result.code == 0){
echartsRecords.setOption(optionRecords);
echartsPies.setOption(optionPies);
echartsDataset.setOption(optionDataset);
echartsMap.setOption(optionMap);
// 折线图
var optionRecordsSeries=[];
// 饼状图
var optionPiesSeries = {
name: '昨日占比',
type: 'pie',
radius: '55%',
center: ['50%', '60%'],
roseType: 'radius',
emphasis: {
itemStyle: {
shadowBlur: 10,
shadowOffsetX: 0,
shadowColor: 'rgba(0, 0, 0, 0.5)'
}
},
data:[]
}
// 柱状图
optionDataset = {
legend: {},
tooltip: {},
dataset: {
dimensions:[],
source:[]
},
series:[]
};
for (let i = 0; i < result.data.depository_name.length; i++) {
optionRecordsSeries.push({
name: result.data.depository_name[i],
type: 'line',
stack: '金额',
data:result.data.depository_data.ThisWeekInventory[result.data.depository_name[i]],
areaStyle: {}
});
optionPiesSeries.data.push({
value:result.data.depository_data.todayInventory[result.data.depository_name[i]],name:result.data.depository_name[i]
})
}
var dimensions = result.data.depository_data.sourceListByMonth[result.data.depository_data.sourceListByMonth.length - 1]
optionDataset.dataset.dimensions = dimensions
for (let i = result.data.depository_data.sourceListByMonth.length - 2; i >= 0; i--) {
optionDataset.dataset.source.push(result.data.depository_data.sourceListByMonth[i])
}
for (let i = 0; i < dimensions.length - 1; i++) {
optionDataset.series.push({type:'bar'})
}
for (let i = 0; i < result.data.depository_data.MapInventory.mapDataList.length ; i++) {
optionMap.dataset.source.push(result.data.depository_data.MapInventory.mapDataList[i])
if(i < result.data.depository_data.MapInventory.mapDataList.length - 1) {
optionMap.series.push({type: 'line', smooth: true, seriesLayoutBy: 'row'})
}
}
var month = new Date().getMonth() + 1;
optionMap.series.push(
{
type: 'pie',
// id: 'pie',
radius: '30%',
center: ['50%', '25%'],
label: {
formatter: '{b}: {@'+month+'月} ({d}%)'
},
encode: {
itemName: 'product',
value: month+'月',
tooltip: month+'月'
}
}
);
optionRecords = {
title: {
text: '仓库库存-报表图'
},
tooltip: {
trigger: 'axis',
axisPointer: {
type: 'cross',
label: {
backgroundColor: '#6a7985'
}
}
},
legend: {
data: result.data.depository_name
},
toolbox: {
feature: {
saveAsImage: {}
}
},
grid: {
left: '3%',
right: '4%',
bottom: '3%',
containLabel: true
},
xAxis: [
{
type: 'category',
boundaryGap: false,
data: result.data.depository_data.week
}
],
yAxis: [
{
type: 'value'
}
],
series: optionRecordsSeries
};
optionPies = {
title: {
text: '仓库分布图',
left: 'center'
},
tooltip: {
trigger: 'item',
formatter: '{a} <br/>{b} : {c} ({d}%)'
},
legend: {
orient: 'vertical',
left: 'left',
data: result.data.depository_name
},
series: optionPiesSeries
};
echartsRecords.setOption(optionRecords);
echartsPies.setOption(optionPies);
echartsDataset.setOption(optionDataset);
echartsMap.setOption(optionMap);
}
}
});
// echarts 窗口缩放自适应 // echarts 窗口缩放自适应
window.onresize = function () { window.onresize = function () {
echartsRecords.resize(); echartsRecords.resize();
} };
form.on('submit(thisWeek)', function () {
$.ajax({
url:'/repository/layui/echart_back?type=0',
type:'get',
async:true,
dataType: "json",
complete:function (XHR,TS){
if(XHR.status != 200){
layer.alert("系统繁忙,稍后重试");
}
},
success:function (result){
echartsRecords.setOption(optionRecords);
// 折线图
var optionRecordsSeries=[];
for (let i = 0; i < result.data.depository_name.length; i++) {
optionRecordsSeries.push({
name: result.data.depository_name[i],
type: 'line',
stack: '金额',
data:result.data.depository_data.ThisWeekInventory[result.data.depository_name[i]],
areaStyle: {}
});
}
optionRecords = {
title: {
text: '仓库库存-报表图'
},
tooltip: {
trigger: 'axis',
axisPointer: {
type: 'cross',
label: {
backgroundColor: '#6a7985'
}
}
},
legend: {
data: result.data.depository_name
},
toolbox: {
feature: {
saveAsImage: {}
}
},
grid: {
left: '3%',
right: '4%',
bottom: '3%',
containLabel: true
},
xAxis: [
{
type: 'category',
boundaryGap: false,
data: result.data.depository_data.week
}
],
yAxis: [
{
type: 'value'
}
],
series: optionRecordsSeries
};
echartsRecords.setOption(optionRecords);
}
})
})
form.on('submit(lastWeek)', function () {
$.ajax({
url:'/repository/layui/echart_back?type=0&last=1',
type:'get',
async:true,
dataType: "json",
complete:function (XHR,TS){
if(XHR.status != 200){
layer.alert("系统繁忙,稍后重试");
}
},
success:function (result){
echartsRecords.setOption(optionRecords);
// 折线图
var optionRecordsSeries=[];
for (let i = 0; i < result.data.depository_name.length; i++) {
optionRecordsSeries.push({
name: result.data.depository_name[i],
type: 'line',
stack: '金额',
data:result.data.depository_data.BeforeInventory[result.data.depository_name[i]],
areaStyle: {}
});
}
optionRecords = {
title: {
text: '仓库库存-报表图'
},
tooltip: {
trigger: 'axis',
axisPointer: {
type: 'cross',
label: {
backgroundColor: '#6a7985'
}
}
},
legend: {
data: result.data.depository_name
},
toolbox: {
feature: {
saveAsImage: {}
}
},
grid: {
left: '3%',
right: '4%',
bottom: '3%',
containLabel: true
},
xAxis: [
{
type: 'category',
boundaryGap: false,
data: result.data.depository_data.week
}
],
yAxis: [
{
type: 'value'
}
],
series: optionRecordsSeries
};
echartsRecords.setOption(optionRecords);
}
})
})
}); });
</script> </script>
</body> </body>

36
src/main/resources/templates/pages/chart/chart-stock_back.html

@ -388,7 +388,7 @@
form.on('submit(thisWeek)', function () { form.on('submit(thisWeek)', function () {
$.ajax({ $.ajax({
url:'/repository/layui/echart_back?type=0', url:'/repository/layui/echart_back_thisWeek?type=0',
type:'get', type:'get',
async:true, async:true,
dataType: "json", dataType: "json",
@ -397,16 +397,20 @@
layer.alert("系统繁忙,稍后重试"); 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); echartsRecords.setOption(optionRecords);
// 折线图 // 折线图
var optionRecordsSeries=[]; 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({ optionRecordsSeries.push({
name: result.data.depository_name[i], name: result.depository_name[i],
type: 'line', type: 'line',
stack: '金额', stack: '金额',
data:result.data.depository_data.ThisWeekInventory[result.data.depository_name[i]], data:result.ThisWeekInventory[result.depository_name[i]],
areaStyle: {} areaStyle: {}
}); });
} }
@ -424,7 +428,7 @@
} }
}, },
legend: { legend: {
data: result.data.depository_name data: result.depository_name
}, },
toolbox: { toolbox: {
feature: { feature: {
@ -441,7 +445,7 @@
{ {
type: 'category', type: 'category',
boundaryGap: false, boundaryGap: false,
data: result.data.depository_data.week data: result.week
} }
], ],
yAxis: [ yAxis: [
@ -458,7 +462,7 @@
form.on('submit(lastWeek)', function () { form.on('submit(lastWeek)', function () {
$.ajax({ $.ajax({
url:'/repository/layui/echart_back?type=0&last=1', url:'/repository/layui/echart_back_lastWeek?type=0',
type:'get', type:'get',
async:true, async:true,
dataType: "json", dataType: "json",
@ -467,16 +471,20 @@
layer.alert("系统繁忙,稍后重试"); 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); echartsRecords.setOption(optionRecords);
// 折线图 // 折线图
var optionRecordsSeries=[]; 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({ optionRecordsSeries.push({
name: result.data.depository_name[i], name: result.depository_name[i],
type: 'line', type: 'line',
stack: '金额', stack: '金额',
data:result.data.depository_data.BeforeInventory[result.data.depository_name[i]], data:result.BeforeInventory[result.depository_name[i]],
areaStyle: {} areaStyle: {}
}); });
} }
@ -494,7 +502,7 @@
} }
}, },
legend: { legend: {
data: result.data.depository_name data: result.depository_name
}, },
toolbox: { toolbox: {
feature: { feature: {
@ -511,7 +519,7 @@
{ {
type: 'category', type: 'category',
boundaryGap: false, boundaryGap: false,
data: result.data.depository_data.week data: result.week
} }
], ],
yAxis: [ yAxis: [

1
src/main/resources/templates/pages/depository/table-stock.html

@ -247,6 +247,7 @@
table.on('tool(currentTableFilter)', function (obj) { table.on('tool(currentTableFilter)', function (obj) {
let data = obj.data; let data = obj.data;
console.log(data)
if (obj.event === 'applicationIn') { if (obj.event === 'applicationIn') {
// 入库申请 // 入库申请
var index = layer.open({ var index = layer.open({

47
src/main/resources/templates/pages/stockTaking/stockTaking.html

@ -299,6 +299,11 @@
let placeId; let placeId;
// 用于存储当前选择的负责人 // 用于存储当前选择的负责人
let departmentManagerId; let departmentManagerId;
// 用于存储没有对应关系的物料
let barCodeList = {};
let needToUpdate = {};
layui.use(['form', 'step', 'flow'], function () { layui.use(['form', 'step', 'flow'], function () {
var $ = layui.$, var $ = layui.$,
form = layui.form, form = layui.form,
@ -374,6 +379,8 @@
form.on('submit(formStep)', function (data) { form.on('submit(formStep)', function (data) {
data = data.field; data = data.field;
data.params = params; data.params = params;
data.needToUpdate = needToUpdate;
data.barCodeListByNoMaterial = barCodeList;
$.ajax({ $.ajax({
url: "/stockTaking/addStockTakingRecord", url: "/stockTaking/addStockTakingRecord",
type: 'post', 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 !== "") { if (depositoryId !== undefined && departmentManagerId !== undefined && departmentManagerId !== "") {
layer.open({ layer.open({
type: 2, type: 2,
@ -1106,6 +1115,7 @@
success: function (d) { success: function (d) {
var data = d.data; var data = d.data;
var materialList = data["materialList"]; var materialList = data["materialList"];
var barCodeListByNoMaterial = data["barCodeListByNoMaterial"];
if (materialList.length > 0) { if (materialList.length > 0) {
for (let i = 1; i <= materialList.length; i++) { for (let i = 1; i <= materialList.length; i++) {
Coverpage(i, materialList[i - 1]); Coverpage(i, materialList[i - 1]);
@ -1116,6 +1126,41 @@
} }
form.render(); form.render();
} }
if(barCodeListByNoMaterial.length > 0){
// 如果扫描的条形码没有对应的物料
var content = '<div style="padding: 50px; line-height: 22px; background-color: #393D49; color: #fff; font-weight: 300;">' +
'<p>未发现的条码,是否需要添加对应关系</p><hr>' +
'<table>';
for (let i = 0; i < barCodeListByNoMaterial.length; i++) {
var item = "<tr><td>"+barCodeListByNoMaterial[i]+"</td></tr>"
content+=item;
}
content+='</table></div>';
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()
});
}
});
}
} }
}) })
} }

108
src/main/resources/templates/pages/stockTaking/stockTakingComplete.html

@ -51,7 +51,8 @@
<div class="layui-form-item"> <div class="layui-form-item">
<label class="layui-form-label">盘点位置:</label> <label class="layui-form-label">盘点位置:</label>
<div class="layui-input-block"> <div class="layui-input-block">
<input type="text" name="mainId" id="mainId" th:value="${mainRecord.getId()}" style="display:none;"> <input type="text" name="mainId" id="mainId"
th:value="${mainRecord.getId()}" style="display:none;">
<input type="text" class="layui-input" <input type="text" class="layui-input"
th:value="${mainRecord.getDepositoryName()}" th:value="${mainRecord.getDepositoryName()}"
style="border-style: none" style="border-style: none"
@ -108,6 +109,7 @@
<div class="inputdiv"> <div class="inputdiv">
<input th:attr="name='code' +${recordMin.getId()},id='code'+${recordMin.getId()}" <input th:attr="name='code' +${recordMin.getId()},id='code'+${recordMin.getId()}"
type="text" placeholder="请填写入物料编码" type="text" placeholder="请填写入物料编码"
readonly
th:value="${recordMin.getMcode()}" th:value="${recordMin.getMcode()}"
class="layui-input" lay-verify="required" class="layui-input" lay-verify="required"
style="border-style: none"> style="border-style: none">
@ -119,6 +121,7 @@
<div class="layui-input-block" style="margin: 0px;"> <div class="layui-input-block" style="margin: 0px;">
<div class="inputdiv"> <div class="inputdiv">
<select <select
readonly
th:attr="id='barCode'+${recordMin.getId()},name='barCode'+${recordMin.getId()}" th:attr="id='barCode'+${recordMin.getId()},name='barCode'+${recordMin.getId()}"
style="border-style: none"> style="border-style: none">
@ -147,7 +150,7 @@
<label class="layui-form-label">材质:</label> <label class="layui-form-label">材质:</label>
<div class="layui-input-block"> <div class="layui-input-block">
<input type="text" placeholder="请填写材质名称" <input type="text" placeholder="请填写材质名称"
class="layui-input" class="layui-input" readonly
th:value="${recordMin.getMtexture()}" th:value="${recordMin.getMtexture()}"
th:attr="id='texture'+${recordMin.getId()},name='texture'+${recordMin.getId()}" th:attr="id='texture'+${recordMin.getId()},name='texture'+${recordMin.getId()}"
/> />
@ -157,7 +160,7 @@
<label class="layui-form-label">规格型号:</label> <label class="layui-form-label">规格型号:</label>
<div class="layui-input-block"> <div class="layui-input-block">
<input type="text" placeholder="请填写规格型号" <input type="text" placeholder="请填写规格型号"
class="layui-input" class="layui-input" readonly
th:value="${recordMin.getMversion()}" th:value="${recordMin.getMversion()}"
th:attr="id='version'+${recordMin.getId()},name='version'+${recordMin.getId()}" th:attr="id='version'+${recordMin.getId()},name='version'+${recordMin.getId()}"
/> />
@ -167,7 +170,7 @@
<label class="layui-form-label">计量单位:</label> <label class="layui-form-label">计量单位:</label>
<div class="layui-input-block"> <div class="layui-input-block">
<input type="text" placeholder="请填写计量单位" <input type="text" placeholder="请填写计量单位"
class="layui-input" class="layui-input" readonly
th:value="${recordMin.getMunit()}" th:value="${recordMin.getMunit()}"
th:attr="id='unit'+${recordMin.getId()},name='unit'+${recordMin.getId()}" th:attr="id='unit'+${recordMin.getId()},name='unit'+${recordMin.getId()}"
/> />
@ -185,7 +188,7 @@
<div class="layui-form-item"> <div class="layui-form-item">
<label class="layui-form-label">盘点数量:</label> <label class="layui-form-label">盘点数量:</label>
<div class="layui-input-block"> <div class="layui-input-block">
<input type="number" class="layui-input" <input type="number" class="layui-input" readonly
th:value="${recordMin.getNewInventory()}" th:value="${recordMin.getNewInventory()}"
th:attr="id='newInventory'+${recordMin.getId()},name='newInventory'+${recordMin.getId()}" th:attr="id='newInventory'+${recordMin.getId()},name='newInventory'+${recordMin.getId()}"
lay-verify="required"/> lay-verify="required"/>
@ -195,7 +198,7 @@
<label class="layui-form-label">盘点结果:</label> <label class="layui-form-label">盘点结果:</label>
<div class="layui-input-block"> <div class="layui-input-block">
<input type="text" class="layui-input" id="takingResult" <input type="text" class="layui-input" id="takingResult" readonly
th:value="${recordMin.getTakingResultShow()}" th:value="${recordMin.getTakingResultShow()}"
th:attr="id='takingResult'+${recordMin.getId()},name='takingResult'+${recordMin.getId()}" th:attr="id='takingResult'+${recordMin.getId()},name='takingResult'+${recordMin.getId()}"
lay-verify="required"/> lay-verify="required"/>
@ -205,7 +208,6 @@
<label class="layui-form-label">盈亏数量:</label> <label class="layui-form-label">盈亏数量:</label>
<div class="layui-input-block"> <div class="layui-input-block">
<input type="number" class="layui-input" readonly <input type="number" class="layui-input" readonly
th:value="${recordMin.getInventory()}" th:value="${recordMin.getInventory()}"
th:attr="id='inventory'+${recordMin.getId()},name='inventory'+${recordMin.getId()}" th:attr="id='inventory'+${recordMin.getId()},name='inventory'+${recordMin.getId()}"
lay-verify="required"/> lay-verify="required"/>
@ -218,21 +220,12 @@
</fieldset> </fieldset>
<div id="review"> <div id="review">
<div class="layui-form" style="margin: 0 auto;max-width: 900px;padding-top: 40px;"> <div class="layui-form"
style="margin: 0 auto;max-width: 900px;padding-top: 40px;">
<div class="layui-form-item"> <div class="layui-form-item">
<label class="layui-form-label">审核备注:</label>
<div class="layui-input-block"> <div class="layui-input-block">
<textarea id="auditOpinion" name="auditOpinion" placeholder="请填写相关原因及申请原因" value="" class="layui-textarea"></textarea> <button type="button" class="layui-btn" onclick="complete(1)">
</div> &emsp;处理&emsp;
</div>
<div class="layui-form-item">
<div class="layui-input-block">
<button type="button" class="layui-btn" onclick="review(1)">
&emsp;审核通过&emsp;
</button>
<button type="button" class="layui-btn layui-btn-danger" onclick="review(2)">
&emsp;审核不通过&emsp;
</button> </button>
</div> </div>
</div> </div>
@ -251,15 +244,16 @@
<script src="/static/js/lay-config.js?v=1.0.4" charset="utf-8"></script> <script src="/static/js/lay-config.js?v=1.0.4" charset="utf-8"></script>
<script> <script>
function review(data){} function complete(data) {
layui.use(['form','step','element'], function () { }
layui.use(['form', 'step', 'element'], function () {
var $ = layui.$, var $ = layui.$,
step = layui.step, step = layui.step,
element = layui.element, element = layui.element,
form = layui.form; form = layui.form;
var position=0,states={},number = 2; var position = 0, states = {}, number = 3;
states = [ {title: "待审核"}]; states = [{title: "待处理"}];
// 用于分步表单加载 // 用于分步表单加载
step.render({ step.render({
elem: '#stepForm', elem: '#stepForm',
@ -268,74 +262,36 @@
stepWidth: '750px', stepWidth: '750px',
height: '1495px', height: '1495px',
position: position, position: position,
number:number, number: number,
stepItems: states stepItems: states
}); });
// 用于获取审核结果与审核的单号 // 用于获取审核结果与审核的单号
review=function (pass) { complete = function (pass) {
let data = {}; let data = {};
data.mainId = $("#mainId").val(); data.mainId = $("#mainId").val();
data.auditOpinion = $("#auditOpinion").val(); data.state = pass;
data.departmentManagerState = pass;
$.ajax({ $.ajax({
url:"/stockTaking/review", url: "/stockTaking/complete",
type:'post', type: 'post',
dataType:'json', dataType: 'json',
contentType: "application/json;charset=utf-8", contentType: "application/json;charset=utf-8",
data:JSON.stringify(data), data: JSON.stringify(data),
beforeSend:function () { beforeSend: function () {
this.layerIndex = layer.load(0, { shade: [0.5, '#393D49'] }); this.layerIndex = layer.load(0, {shade: [0.5, '#393D49']});
}, },
success:function(d){ success: function (d) {
layer.close(this.layerIndex); layer.close(this.layerIndex);
if(d.status >= 300){ if (d.status >= 300) {
var errMsg = d.data.errMsg;
// 获取出错的子订单
layer.confirm("当前盘点数量中有溢出情况,需要进行转移", {
btn:["确定"]
},function () { // 继续
layer.open({
type: 2,
title: '转移物料',
skin: 'layui-layer-rim',
maxmin: true,
shadeClose: true, //点击遮罩关闭层
area: ['70%', '70%'],
move: '.layui-layer-title',
fixed: false,
content: '/stockTakingTransfer?minIds='+errMsg.errIds,
end: function (res) {
if(res.status >= 300){
layer.msg("提交失败,联系开发人员解决", {
icon: 5,//成功的表情
time: 500 //1秒关闭(如果不配置,默认是3秒)
}, function(){
window.location = '/StockTakingView?id='+data.mainId;
});
}else{
layer.msg("提交成功", {
icon: 6,//成功的表情
time: 500 //1秒关闭(如果不配置,默认是3秒)
}, function(){
window.location = '/StockTakingView?id='+data.mainId;
});
}
}
});
});
} } else {
else{
layer.msg("提交成功", { layer.msg("提交成功", {
icon: 6,//成功的表情 icon: 6,//成功的表情
time: 500 //1秒关闭(如果不配置,默认是3秒) time: 500 //1秒关闭(如果不配置,默认是3秒)
}, function(){ }, function () {
window.location = '/StockTakingView?id='+data.mainId; window.location = '/StockTakingView?id=' + data.mainId;
}); });
} }
}, },

8
src/main/resources/templates/pages/stockTaking/stockTakingReview.html

@ -195,7 +195,7 @@
<label class="layui-form-label">盘点结果:</label> <label class="layui-form-label">盘点结果:</label>
<div class="layui-input-block"> <div class="layui-input-block">
<input type="text" class="layui-input" id="takingResult" <input type="text" class="layui-input" id="takingResult" readonly
th:value="${recordMin.getTakingResultShow()}" th:value="${recordMin.getTakingResultShow()}"
th:attr="id='takingResult'+${recordMin.getId()},name='takingResult'+${recordMin.getId()}" th:attr="id='takingResult'+${recordMin.getId()},name='takingResult'+${recordMin.getId()}"
lay-verify="required"/> lay-verify="required"/>
@ -279,7 +279,7 @@
let data = {}; let data = {};
data.mainId = $("#mainId").val(); data.mainId = $("#mainId").val();
data.auditOpinion = $("#auditOpinion").val(); data.auditOpinion = $("#auditOpinion").val();
data.state = pass; data.departmentManagerState = pass;
$.ajax({ $.ajax({
url:"/stockTaking/review", url:"/stockTaking/review",
@ -304,12 +304,13 @@
skin: 'layui-layer-rim', skin: 'layui-layer-rim',
maxmin: true, maxmin: true,
shadeClose: true, //点击遮罩关闭层 shadeClose: true, //点击遮罩关闭层
area: ['70%', '70%'], area: ['100%', '100%'],
move: '.layui-layer-title', move: '.layui-layer-title',
fixed: false, fixed: false,
content: '/stockTakingTransfer?minIds='+errMsg.errIds, content: '/stockTakingTransfer?minIds='+errMsg.errIds,
end: function (res) { end: function (res) {
if(res.status >= 300){ if(res.status >= 300){
layer.close(layer.index);
layer.msg("提交失败,联系开发人员解决", { layer.msg("提交失败,联系开发人员解决", {
icon: 5,//成功的表情 icon: 5,//成功的表情
time: 500 //1秒关闭(如果不配置,默认是3秒) time: 500 //1秒关闭(如果不配置,默认是3秒)
@ -317,6 +318,7 @@
window.location = '/StockTakingView?id='+data.mainId; window.location = '/StockTakingView?id='+data.mainId;
}); });
}else{ }else{
layer.close(layer.index);
layer.msg("提交成功", { layer.msg("提交成功", {
icon: 6,//成功的表情 icon: 6,//成功的表情
time: 500 //1秒关闭(如果不配置,默认是3秒) time: 500 //1秒关闭(如果不配置,默认是3秒)

55
src/main/resources/templates/pages/stockTaking/stockTakingView.html

@ -51,7 +51,8 @@
<div class="layui-form-item"> <div class="layui-form-item">
<label class="layui-form-label">盘点位置:</label> <label class="layui-form-label">盘点位置:</label>
<div class="layui-input-block"> <div class="layui-input-block">
<input type="text" name="mainId" th:value="${mainRecord.getId()}" style="display:none;"> <input type="text" name="mainId" th:value="${mainRecord.getId()}"
style="display:none;">
<input type="text" class="layui-input" <input type="text" class="layui-input"
th:value="${mainRecord.getDepositoryName()}" th:value="${mainRecord.getDepositoryName()}"
style="border-style: none" style="border-style: none"
@ -219,23 +220,39 @@
</div> </div>
</fieldset> </fieldset>
<div class="layui-card-body" id="takingFooter" style="padding-right: 0px;display: none"> <div class="layui-card-body" id="takingFooter"
style="padding-right: 0px;display: none">
<div class="layui-form-item"> <div class="layui-form-item">
<label class="layui-form-label">处理时间:</label> <label class="layui-form-label">审核时间:</label>
<div class="layui-input-block">
<input type="text" id="reviewTime" class="layui-input"
th:value="${mainRecord.getReviewTime()}" readonly>
</div>
<div class="layui-input-block"> <div class="layui-input-block">
<input type="text" id="completeTime" class="layui-input" th:value="${mainRecord.getCompleteTime()}" readonly> <input type="text" id="departmentManagerState" class="layui-input" style="display: none"
th:value="${mainRecord.getDepartmentManagerState()}" readonly>
</div> </div>
</div> </div>
<div class="layui-form-item"> <div class="layui-form-item">
<label class="layui-form-label">审核意见:</label> <label class="layui-form-label">审核意见:</label>
<div class="layui-input-block"> <div class="layui-input-block">
<input type="text" placeholder="" class="layui-input" <input type="text" placeholder="" class="layui-input"
readonly readonly
th:value="${mainRecord.getAuditOpinion()}" th:value="${mainRecord.getAuditOpinion()}"
lay-verify="required"/> lay-verify="required"/>
</div> </div>
</div> </div>
</div> </div>
<div class="layui-card-body" id="takingFooter1"
style="padding-right: 0px;display: none">
<div class="layui-form-item">
<label class="layui-form-label">处理时间:</label>
<div class="layui-input-block">
<input type="text" id="completeTime" class="layui-input"
th:value="${mainRecord.getCompleteTime()}" readonly>
</div>
</div>
</div>
</form> </form>
</div> </div>
</div> </div>
@ -250,28 +267,40 @@
<script> <script>
layui.use(['form', 'flow','step','element'], function () { layui.use(['form', 'flow', 'step', 'element'], function () {
var $ = layui.$, var $ = layui.$,
step = layui.step, step = layui.step,
element = layui.element, element = layui.element,
form = layui.form; form = layui.form;
var position=0,states={},number = 2; var position = 0, states = {}, number = 2;
var ifShow1 = ($("#reviewTime").val() === "");
var ifShow = ($("#completeTime").val() === ""); var ifShow = ($("#completeTime").val() === "");
if (ifShow1) {
// 如果还未处理
states = [{title: "待审核"}];
} else{
$("#takingFooter").show();
states = [{title: "已审核"}]
}
console.log($("#completeTime").val())
console.log(ifShow)
if(ifShow){ if(ifShow){
// 如果还未处理 var state = $("#departmentManagerState").val();
states = [ {title: "待审核"}]; if(state === "1"){
states = [{title: "待处理"}]
}else if(state === "2"){
states = [{title: "已驳回"}]
}
}else{ }else{
$("#takingFooter").show(); $("#takingFooter1").show();
states = [{title: "已处理"}] states = [{title: "已处理"}]
} }
// 用于分步表单加载 // 用于分步表单加载
step.render({ step.render({
elem: '#stepForm', elem: '#stepForm',
@ -280,7 +309,7 @@
stepWidth: '750px', stepWidth: '750px',
height: '1300px', height: '1300px',
position: position, position: position,
number:number, number: number,
stepItems: states stepItems: states
}); });

4
src/main/resources/templates/pages/stockTaking/stockTransfer.html

@ -282,7 +282,9 @@
icon: 6,//成功的表情 icon: 6,//成功的表情
time: 500 //1秒关闭(如果不配置,默认是3秒) time: 500 //1秒关闭(如果不配置,默认是3秒)
}, function () { }, function () {
step.next('#stepForm'); // 关闭当前页
var index = parent.layer.getFrameIndex(window.name);
parent.layer.close(index);
}); });
}, },
complete: function () { complete: function () {

5
src/test/java/com/dreamchaser/depository_manage/Test.java

@ -47,6 +47,10 @@ import sun.misc.BASE64Encoder;
import javax.crypto.Cipher; import javax.crypto.Cipher;
import javax.crypto.SecretKey; import javax.crypto.SecretKey;
import javax.crypto.spec.SecretKeySpec; import javax.crypto.spec.SecretKeySpec;
import javax.print.DocFlavor;
import javax.print.PrintService;
import javax.print.PrintServiceLookup;
import javax.print.attribute.HashPrintRequestAttributeSet;
import javax.swing.*; import javax.swing.*;
import javax.xml.parsers.DocumentBuilder; import javax.xml.parsers.DocumentBuilder;
import javax.xml.parsers.DocumentBuilderFactory; import javax.xml.parsers.DocumentBuilderFactory;
@ -80,7 +84,6 @@ public class Test {
} }

0
target/classes/.restartTriggerFile

BIN
target/classes/META-INF/depository_manage (2).kotlin_module

Binary file not shown.

17
target/classes/META-INF/spring-configuration-metadata.json

@ -1,17 +0,0 @@
{
"groups": [
{
"name": "file",
"type": "com.dreamchaser.depository_manage.config.FileConfig",
"sourceType": "com.dreamchaser.depository_manage.config.FileConfig"
}
],
"properties": [
{
"name": "file.upload-path",
"type": "java.lang.String",
"sourceType": "com.dreamchaser.depository_manage.config.FileConfig"
}
],
"hints": []
}

4
target/classes/application-test.yml

@ -17,8 +17,8 @@ spring:
##数据库设置 ##数据库设置
datasource: datasource:
username: root username: depository
password: root password: NhE47edekBHxhjYk
url: jdbc:mysql://localhost:3306/depository?serverTimezone=Asia/Shanghai&zeroDateTimeBehavior=convertToNull url: jdbc:mysql://localhost:3306/depository?serverTimezone=Asia/Shanghai&zeroDateTimeBehavior=convertToNull
driver-class-name: com.mysql.cj.jdbc.Driver driver-class-name: com.mysql.cj.jdbc.Driver
type: com.alibaba.druid.pool.DruidDataSource type: com.alibaba.druid.pool.DruidDataSource

46
target/classes/com/dreamchaser/depository_manage/mapper/StockTakingMapper.xml

@ -11,8 +11,10 @@
<result column="depositoryId" property="depositoryId" jdbcType="INTEGER" /> <result column="depositoryId" property="depositoryId" jdbcType="INTEGER" />
<result column="placeId" property="placeId" jdbcType="INTEGER" /> <result column="placeId" property="placeId" jdbcType="INTEGER" />
<result column="state" property="state" jdbcType="INTEGER" /> <result column="state" property="state" jdbcType="INTEGER" />
<result column="departmentManagerState" property="departmentManagerState" jdbcType="INTEGER" />
<result column="crateTime" property="crateTime" jdbcType="INTEGER" /> <result column="crateTime" property="crateTime" jdbcType="INTEGER" />
<result column="completeTime" property="completeTime" jdbcType="INTEGER" /> <result column="completeTime" property="completeTime" jdbcType="INTEGER" />
<result column="reviewTime" property="reviewTime" jdbcType="INTEGER" />
<result column="originator" property="originator" jdbcType="INTEGER" /> <result column="originator" property="originator" jdbcType="INTEGER" />
<result column="departmentManager" property="departmentManager" jdbcType="VARCHAR" /> <result column="departmentManager" property="departmentManager" jdbcType="VARCHAR" />
<result column="auditOpinion" property="auditOpinion" jdbcType="VARCHAR" /> <result column="auditOpinion" property="auditOpinion" jdbcType="VARCHAR" />
@ -40,7 +42,7 @@
<!-- 表查询字段 --> <!-- 表查询字段 -->
<sql id="StockTakingAllColumns"> <sql id="StockTakingAllColumns">
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
</sql> </sql>
<sql id="StockTakingChildPAllColumns"> <sql id="StockTakingChildPAllColumns">
@ -49,7 +51,7 @@
<!-- 插入主表--> <!-- 插入主表-->
<insert id="insertStockTaking" useGeneratedKeys="true" keyProperty="id"> <insert id="insertStockTaking" useGeneratedKeys="true" keyProperty="id">
INSERT INTO stocktaking (id,code,depositoryId,placeId,departmentManager,state,createTime,originator) INSERT INTO stocktaking (id,code,depositoryId,placeId,departmentManager,state,createTime,originator,departmentManagerState)
values ( values (
#{id}, #{id},
#{code}, #{code},
@ -58,7 +60,8 @@
#{departmentManager}, #{departmentManager},
#{state}, #{state},
#{createTime}, #{createTime},
#{originator} #{originator},
#{departmentManagerState}
) )
</insert> </insert>
@ -113,6 +116,9 @@
<if test="state != null and state != ''"> <if test="state != null and state != ''">
state = #{state}, state = #{state},
</if> </if>
<if test="departmentManagerState != null and departmentManagerState != ''">
departmentManagerState = #{departmentManagerState},
</if>
<if test="createTime != null and createTime != ''"> <if test="createTime != null and createTime != ''">
createTime = #{createTime}, createTime = #{createTime},
</if> </if>
@ -123,8 +129,12 @@
auditOpinion = #{auditOpinion}, auditOpinion = #{auditOpinion},
</if> </if>
<if test="completeTime != null and completeTime != ''"> <if test="completeTime != null and completeTime != ''">
completeTime = #{completeTime} completeTime = #{completeTime},
</if>
<if test="reviewTime != null and reviewTime != ''">
reviewTime = #{reviewTime}
</if> </if>
</set> </set>
where id = #{id} where id = #{id}
</update> </update>
@ -162,6 +172,17 @@
where mainId = #{mainId} where mainId = #{mainId}
</select> </select>
<select id="selectStockTakingChildByIds" parameterType="list" resultMap="StockTakingChildMap">
select
<include refid="StockTakingChildPAllColumns"/>
from stocktakingchildinfo
where id in
<foreach collection="list" index="index" item="id" open="(" separator="," close=")">
#{id}
</foreach>
</select>
<select id="selectStockTakingByCondition" parameterType="map" resultMap="StockTakingMap"> <select id="selectStockTakingByCondition" parameterType="map" resultMap="StockTakingMap">
select select
<include refid="StockTakingAllColumns"/> <include refid="StockTakingAllColumns"/>
@ -176,6 +197,9 @@
<if test="placeId != null"> <if test="placeId != null">
and st.placeId = #{placeId} and st.placeId = #{placeId}
</if> </if>
<if test="departmentManagerState != null and departmentManagerState != ''">
and st.departmentManagerState = #{departmentManagerState}
</if>
<if test="departmentManager != null and departmentManager != ''"> <if test="departmentManager != null and departmentManager != ''">
and FIND_IN_SET(#{departmentManager},st.departmentManager) != 0 and FIND_IN_SET(#{departmentManager},st.departmentManager) != 0
</if> </if>
@ -235,7 +259,7 @@
where st.id = #{id} where st.id = #{id}
</select> </select>
<select id="selectStockTakingChildPById" parameterType="int" resultMap="StockTakingChildMap"> <select id="selectStockTakingChildPById" resultMap="StockTakingChildMap">
select select
<include refid="StockTakingChildPAllColumns"/> <include refid="StockTakingChildPAllColumns"/>
from stocktakingchildinfo from stocktakingchildinfo
@ -248,10 +272,12 @@
from stocktaking st from stocktaking st
where 1 = 1 where 1 = 1
<if test='isDone == "0"'> <if test='isDone == "0"'>
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)
</if> </if>
<if test='isDone == "1"'> <if test='isDone == "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)
</if> </if>
<if test="begin != null and size != null"> <if test="begin != null and size != null">
LIMIT #{begin},#{size} LIMIT #{begin},#{size}
@ -264,10 +290,12 @@
from stocktaking st from stocktaking st
where 1 = 1 where 1 = 1
<if test='isDone == "0"'> <if test='isDone == "0"'>
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)
</if> </if>
<if test='isDone == "1"'> <if test='isDone == "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)
</if> </if>
</select> </select>

22
target/classes/templates/pages/application/application-in.html

@ -441,12 +441,16 @@
contentType: "application/json;charset=utf-8", contentType: "application/json;charset=utf-8",
success: function (d) { success: function (d) {
var d = d.data; var d = d.data;
var idNumber = materialId.name.split("mid")[1];
if (d == null) { if (d == null) {
layer.msg("没有该编码,请确认是否输入正确"); layer.msg("没有该编码,请确认是否输入正确");
materialName.value = ""; materialName.value = "";
materialId.value = ""; materialId.value = "";
priceValue.value = ""; priceValue.value = "";
obj.value = ""; obj.value = "";
$("#barCode"+idNumber).remove();
form.render();
} else { } else {
materialName.value = d.mname; materialName.value = d.mname;
materialId.value = d.id; materialId.value = d.id;
@ -459,15 +463,18 @@
var barCodeImg = barCodeItem.childNodes[1].childNodes[3]; var barCodeImg = barCodeItem.childNodes[1].childNodes[3];
var id = barCodeInput.id; var id = barCodeInput.id;
$("#"+id).remove(); $("#"+id).remove();
$("#barCode").remove(); $("#barCode"+idNumber).empty();
// barCodeInput.style = "display:none"; var barCode = $("#barCode"+idNumber);
var idNumber = materialId.name.split("mid")[1]; if(barCode.length > 0) {
var barCodeSelect = ` barCode.empty();
<select id=`+"barCode"+idNumber+` name=`+"barCode"+idNumber+ `> }else{
var barCodeSelect = `
<select id=` + "barCode" + idNumber + ` name=` + "barCode" + idNumber + `>
</select>`; </select>`;
$("#" + barCodeImg.id).before(barCodeSelect);
$("#"+barCodeImg.id).before(barCodeSelect); }
form.render(); form.render();
$.each(materialAndBarCodeList, function (index, item) { $.each(materialAndBarCodeList, function (index, item) {
$("#barCode"+idNumber).append(new Option(item.bmcode, item.id));//往下拉菜单里添加元素 $("#barCode"+idNumber).append(new Option(item.bmcode, item.id));//往下拉菜单里添加元素
}); });
@ -760,6 +767,7 @@
} }
if (materialList.length > 0) { if (materialList.length > 0) {
for (let i = 1; i <= materialList.length; i++) { for (let i = 1; i <= materialList.length; i++) {
materialList[i-1].mid = materialList[i-1].id;
Coverpage(i, materialList[i - 1]); Coverpage(i, materialList[i - 1]);
var materialbyBarCodeList = materialList[i-1]["materialAndBarCodeList"]; var materialbyBarCodeList = materialList[i-1]["materialAndBarCodeList"];
$.each(materialbyBarCodeList, function (index, item) { $.each(materialbyBarCodeList, function (index, item) {

6
target/classes/templates/pages/application/application-in_back.html

@ -61,14 +61,14 @@
<div class="layui-form-item"> <div class="layui-form-item">
<label class="layui-form-label">物料单价:</label> <label class="layui-form-label">物料单价:</label>
<div class="layui-input-block"> <div class="layui-input-block">
<input name="price" type="number" placeholder="请填写入物料单价" value="" <input name="price" type="number" placeholder="请填写入物料单价" th:value="${materialById.getPrice()}"
class="layui-input" lay-verify="number"> class="layui-input" lay-verify="number">
</div> </div>
</div> </div>
<div class="layui-form-item"> <div class="layui-form-item">
<label class="layui-form-label">物料数量:</label> <label class="layui-form-label">物料数量:</label>
<div class="layui-input-block"> <div class="layui-input-block">
<input name="quantity" type="number" placeholder="请填写入物料数量" value="" <input name="quantity" type="number" placeholder="请填写入物料数量" th:value="${materialById.getQuantity()}"
class="layui-input" lay-verify="number"> class="layui-input" lay-verify="number">
</div> </div>
</div> </div>
@ -80,7 +80,7 @@
lay-verify="required"/> lay-verify="required"/>
<input type="text" name="depositoryId" class="layui-input" id="depositoryId" th:value="${depository.getId()}" <input type="text" name="depositoryId" class="layui-input" id="depositoryId" th:value="${depository.getId()}"
style="display: none" lay-verify="required"/> style="display: none" lay-verify="required"/>
<input type="text" name="placeId" class="layui-input" id="placeId" <input type="text" name="placeId" class="layui-input" id="placeId" value="0"
style="display: none" lay-verify="required"/> style="display: none" lay-verify="required"/>
</div> </div>
</div> </div>

118
target/classes/templates/pages/application/application-in_scanQrCode.html

@ -140,12 +140,17 @@
if (materialList.length > 0) { if (materialList.length > 0) {
for (let i = 0; i < materialList.length; i++) { for (let i = 0; i < materialList.length; i++) {
initForm(i, materialList[i]); initForm(i, materialList[i]);
form.render();
var materialAndBarCodeList = materialList[i]["materialAndBarCodeList"]; var materialAndBarCodeList = materialList[i]["materialAndBarCodeList"];
var num = i;
if(num === 0){
num = "";
}
$.each(materialAndBarCodeList, function (index, item) { $.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 { } else {
var material = {}; var material = {};
material.mname = ''; material.mname = '';
@ -245,14 +250,14 @@
<div class="inputdiv"> <div class="inputdiv">
<select id=`+"barCode"+NewIdNumber+` name=`+"barCode"+NewIdNumber+`></select> <select id=`+"barCode"+NewIdNumber+` name=`+"barCode"+NewIdNumber+`></select>
<img src="/static/images/search.ico" height="16" width="16" style="margin-top: 10px" onclick="scanBarCode(this)" > <img id= `+"barCodeImg"+NewIdNumber+` name=`+"barCodeImg"+NewIdNumber+` src="/static/images/search.ico" height="16" width="16" style="margin-top: 10px" onclick="scanBarCode(this)" >
</div> </div>
</div> </div>
</div> </div>
<div class="layui-form-item"> <div class="layui-form-item">
<label class="layui-form-label">物料单价:</label> <label class="layui-form-label">物料单价:</label>
<div class="layui-input-block"> <div class="layui-input-block">
<input name=` + "price" + NewIdNumber + ` type="number" placeholder="请填写入物料单价" value="" <input name=` + "price" + NewIdNumber + ` type="number" placeholder="请填写入物料单价" value="${obj.price}"
class="layui-input" lay-verify="number"> class="layui-input" lay-verify="number">
</div> </div>
</div> </div>
@ -445,6 +450,18 @@
class="layui-input" lay-verify="required"> class="layui-input" lay-verify="required">
</div> </div>
</div> </div>
<div class="layui-form-item">
<label class="layui-form-label">条形编码:</label>
<div class="layui-input-block" style="margin: 0px;">
<div class="inputdiv">
<input id="barcode" name=` + "barCode" + NewIdNumber + ` type="text" placeholder="请填写入条形编码" value=""
class="layui-input" style="border-style: none">
<img src="/static/images/search.ico" height="16"
id = `+"barCodeImg"+NewIdNumber+`
width="16" style="margin-top: 10px" onclick="scanBarCode(this)" >
</div>
</div>
</div>
<div class="layui-form-item"> <div class="layui-form-item">
<label class="layui-form-label">物料单价:</label> <label class="layui-form-label">物料单价:</label>
<div class="layui-input-block"> <div class="layui-input-block">
@ -473,7 +490,7 @@
// 获取当前高度 // 获取当前高度
var height = parseInt(($("#stepForm").css('height')).split("px")[0]); var height = parseInt(($("#stepForm").css('height')).split("px")[0]);
params.push(NewIdNumber) params.push(NewIdNumber)
$("#stepForm").css("height", height + 475 + 'px'); $("#stepForm").css("height", height + 530 + 'px');
var materialItem = firstItem + depositoryItem + lastItem; var materialItem = firstItem + depositoryItem + lastItem;
$("#" + parentId).after(materialItem); $("#" + parentId).after(materialItem);
}; };
@ -487,7 +504,7 @@
// 获取祖父节点 // 获取祖父节点
var reparent = parent.parentNode; var reparent = parent.parentNode;
var height = parseInt(($("#stepForm").css('height')).split("px")[0]); 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); params = remove(params, parentId);
reparent.removeChild(parent); reparent.removeChild(parent);
}; };
@ -512,10 +529,19 @@
var code = obj.value; var code = obj.value;
// 获取对应元素 // 获取对应元素
var parent = obj.parentNode.parentNode.parentNode; var parent = obj.parentNode.parentNode.parentNode;
var children = parent.childNodes[5]; var materialChildren = parent.childNodes[5];
var materialItem = children.childNodes[3].childNodes[1].childNodes; var priceChildren = parent.childNodes[11];
var barCodeChildren = parent.childNodes[9];
// 物料条目
var materialItem = materialChildren.childNodes[3].childNodes[1].childNodes;
var materialName = materialItem[1]; var materialName = materialItem[1];
var materialId = materialName.parentNode.parentNode.childNodes[3]; var materialId = materialName.parentNode.parentNode.childNodes[3];
// 单价条目
var priceItem = priceChildren.childNodes[3].childNodes;
var priceValue = priceItem[1];
// 条形码条码
var barCodeItem = barCodeChildren.childNodes[3];
var req = {}; var req = {};
req.code = code; req.code = code;
req.type = "in"; req.type = "in";
@ -527,14 +553,44 @@
contentType: "application/json;charset=utf-8", contentType: "application/json;charset=utf-8",
success: function (d) { success: function (d) {
var d = d.data; var d = d.data;
var idNumber = materialId.name.split("mid")[1];
if (d == null) { if (d == null) {
layer.msg("没有该编码,请确认是否输入正确"); layer.msg("没有该编码,请确认是否输入正确");
materialName.value = ""; materialName.value = "";
materialId.value = ""; materialId.value = "";
priceValue.value = "";
obj.value = ""; obj.value = "";
$("#barCode" + idNumber).remove();
form.render();
} else { } else {
materialName.value = d.mname; materialName.value = d.mname;
materialId.value = d.id; 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 = `
<select id=` + "barCode" + idNumber + ` name=` + "barCode" + idNumber + `>
</select>`;
$("#" + 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) { openDepositoryTree = function (obj) {
var parent = obj.parentNode.parentNode.parentNode; var parent = obj.parentNode.parentNode.parentNode;

27
target/classes/templates/pages/application/application-out.html

@ -23,6 +23,11 @@
margin-left: 80px; margin-left: 80px;
} }
.layui-form-select{
width: 100%;
border-style: none;
}
</style> </style>
<div class="layuimini-container"> <div class="layuimini-container">
<div class="layuimini-main"> <div class="layuimini-main">
@ -215,7 +220,7 @@
complete: function () { complete: function () {
layer.close(this.layerIndex); layer.close(this.layerIndex);
} }
}) });
return false; return false;
}); });
@ -269,7 +274,7 @@
value="" value=""
class="layui-input" class="layui-input"
style="border-style: none"> style="border-style: none">
<img src="/static/images/search.ico" height="16" width="16" id="barCodeImg" <img src="/static/images/search.ico" height="16" width="16" id=`+"barCodeImg"+NewIdNumber+`
style="margin-top: 10px" onclick="scanBarCode(this)"> style="margin-top: 10px" onclick="scanBarCode(this)">
</div> </div>
</div> </div>
@ -432,23 +437,25 @@
{ {
materialName.value = d.mname; materialName.value = d.mname;
materialId.value = d.id; materialId.value = d.id;
var idNumber = materialId.name.split("mid")[1];
// 获取物料与条形码的对应关系 // 获取物料与条形码的对应关系
var materialAndBarCodeList = d["materialAndBarCodeList"]; var materialAndBarCodeList = d["materialAndBarCodeList"];
if (materialAndBarCodeList.length > 0) { if (materialAndBarCodeList.length > 0) {
// 如果有对应的条形码 // 如果有对应的条形码
var barCodeInput = barCodeItem.childNodes[1].childNodes[1]; var barCodeInput = barCodeItem.childNodes[1].childNodes[1];
var barCodeImg = barCodeItem.childNodes[1].childNodes[3]; var barCodeImg = barCodeItem.childNodes[1].childNodes[3];
console.log(barCodeItem)
var id = barCodeInput.id; var id = barCodeInput.id;
$("#" + id).remove(); $("#"+id).remove();
$("#barCode").remove(); $("#barCode"+idNumber).empty();
// barCodeInput.style = "display:none"; var barCode = $("#barCode"+idNumber);
var idNumber = materialId.name.split("mid")[1]; if(barCode.length > 0) {
var barCodeSelect = ` barCode.empty();
}else{
var barCodeSelect = `
<select id=` + "barCode" + idNumber + ` name=` + "barCode" + idNumber + `> <select id=` + "barCode" + idNumber + ` name=` + "barCode" + idNumber + `>
</select>`; </select>`;
$("#" + barCodeImg.id).before(barCodeSelect);
$("#" + barCodeImg.id).before(barCodeSelect); }
form.render(); form.render();
$.each(materialAndBarCodeList, function (index, item) { $.each(materialAndBarCodeList, function (index, item) {
$("#barCode" + idNumber).append(new Option(item.bmcode, item.id));//往下拉菜单里添加元素 $("#barCode" + idNumber).append(new Option(item.bmcode, item.id));//往下拉菜单里添加元素

31
target/classes/templates/pages/chart/chart-in_back.html

@ -474,21 +474,26 @@
type: 'get', type: 'get',
async: true, async: true,
dataType: "json", dataType: "json",
complete: function (XHR, TS) { complete: function (XHR, TS) {
if (XHR.status != 200) { if (XHR.status != 200) {
layer.alert("系统繁忙,稍后重试"); layer.alert("系统繁忙,稍后重试");
} }
}, },
beforeSend: function () {
this.layerIndex = layer.load(0, {shade: [0.5, '#393D49']});
},
success: function (result) { success: function (result) {
layer.close(this.layerIndex);
echartsRecords.setOption(optionRecords); echartsRecords.setOption(optionRecords);
// 折线图 // 折线图
var optionRecordsSeries = []; 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({ optionRecordsSeries.push({
name: result.data.depository_name[i], name: result.depository_name[i],
type: 'line', type: 'line',
stack: '金额', stack: '金额',
data: result.data.depository_data.data[result.data.depository_name[i]], data: result.data[result.depository_name[i]],
areaStyle: {} areaStyle: {}
}); });
} }
@ -506,7 +511,7 @@
} }
}, },
legend: { legend: {
data: result.data.depository_name data: result.depository_name
}, },
toolbox: { toolbox: {
feature: { feature: {
@ -523,7 +528,7 @@
{ {
type: 'category', type: 'category',
boundaryGap: false, boundaryGap: false,
data: result.data.depository_data.week data: result.week
} }
], ],
yAxis: [ yAxis: [
@ -536,7 +541,7 @@
echartsRecords.setOption(optionRecords); echartsRecords.setOption(optionRecords);
} }
}) })
}) });
form.on('submit(lastWeek)', function () { form.on('submit(lastWeek)', function () {
$.ajax({ $.ajax({
@ -549,16 +554,20 @@
layer.alert("系统繁忙,稍后重试"); layer.alert("系统繁忙,稍后重试");
} }
}, },
beforeSend: function () {
this.layerIndex = layer.load(0, {shade: [0.5, '#393D49']});
},
success: function (result) { success: function (result) {
layer.close(this.layerIndex);
echartsRecords.setOption(optionRecords); echartsRecords.setOption(optionRecords);
// 折线图 // 折线图
var optionRecordsSeries = []; 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({ optionRecordsSeries.push({
name: result.data.depository_name[i], name: result.depository_name[i],
type: 'line', type: 'line',
stack: '金额', stack: '金额',
data: result.data.depository_data.data[result.data.depository_name[i]], data: result.data[result.depository_name[i]],
areaStyle: {} areaStyle: {}
}); });
} }
@ -576,7 +585,7 @@
} }
}, },
legend: { legend: {
data: result.data.depository_name data: result.depository_name
}, },
toolbox: { toolbox: {
feature: { feature: {
@ -593,7 +602,7 @@
{ {
type: 'category', type: 'category',
boundaryGap: false, boundaryGap: false,
data: result.data.depository_data.week data: result.week
} }
], ],
yAxis: [ yAxis: [

32
target/classes/templates/pages/chart/chart-out_back.html

@ -465,7 +465,7 @@
// 获取本周 // 获取本周
form.on('submit(thisWeek)', function () { form.on('submit(thisWeek)', function () {
$.ajax({ $.ajax({
url: '/repository/layui/echart_back?type=2', url: '/repository/layui/echart_back_thisWeek?type=2',
type: 'get', type: 'get',
async: true, async: true,
dataType: "json", dataType: "json",
@ -474,16 +474,20 @@
layer.alert("系统繁忙,稍后重试"); layer.alert("系统繁忙,稍后重试");
} }
}, },
beforeSend: function () {
this.layerIndex = layer.load(0, {shade: [0.5, '#393D49']});
},
success: function (result) { success: function (result) {
layer.close(this.layerIndex);
echartsRecords.setOption(optionRecords); echartsRecords.setOption(optionRecords);
// 折线图 // 折线图
var optionRecordsSeries = []; 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({ optionRecordsSeries.push({
name: result.data.depository_name[i], name: result.depository_name[i],
type: 'line', type: 'line',
stack: '金额', stack: '金额',
data: result.data.depository_data.data[result.data.depository_name[i]], data: result.data[result.depository_name[i]],
areaStyle: {} areaStyle: {}
}); });
} }
@ -501,7 +505,7 @@
} }
}, },
legend: { legend: {
data: result.data.depository_name data: result.depository_name
}, },
toolbox: { toolbox: {
feature: { feature: {
@ -518,7 +522,7 @@
{ {
type: 'category', type: 'category',
boundaryGap: false, boundaryGap: false,
data: result.data.depository_data.week data: result.week
} }
], ],
yAxis: [ yAxis: [
@ -536,7 +540,7 @@
// 获取上周 // 获取上周
form.on('submit(lastWeek)', function () { form.on('submit(lastWeek)', function () {
$.ajax({ $.ajax({
url: '/repository/layui/echart_back?type=2&last=1', url: '/repository/layui/echart_back_lastWeek?type=2',
type: 'get', type: 'get',
async: true, async: true,
dataType: "json", dataType: "json",
@ -545,16 +549,20 @@
layer.alert("系统繁忙,稍后重试"); layer.alert("系统繁忙,稍后重试");
} }
}, },
beforeSend: function () {
this.layerIndex = layer.load(0, {shade: [0.5, '#393D49']});
},
success: function (result) { success: function (result) {
layer.close(this.layerIndex);
echartsRecords.setOption(optionRecords); echartsRecords.setOption(optionRecords);
// 折线图 // 折线图
var optionRecordsSeries = []; 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({ optionRecordsSeries.push({
name: result.data.depository_name[i], name: result.depository_name[i],
type: 'line', type: 'line',
stack: '金额', stack: '金额',
data: result.data.depository_data.data[result.data.depository_name[i]], data: result.data[result.depository_name[i]],
areaStyle: {} areaStyle: {}
}); });
} }
@ -572,7 +580,7 @@
} }
}, },
legend: { legend: {
data: result.data.depository_name data: result.depository_name
}, },
toolbox: { toolbox: {
feature: { feature: {
@ -589,7 +597,7 @@
{ {
type: 'category', type: 'category',
boundaryGap: false, boundaryGap: false,
data: result.data.depository_data.week data: result.week
} }
], ],
yAxis: [ yAxis: [

468
target/classes/templates/pages/chart/chart-stock.html

@ -33,84 +33,14 @@
<!--<div class="layuimini-container">--> <!--<div class="layuimini-container">-->
<div class="layuimini-main"> <div class="layuimini-main">
<div class="layui-row layui-col-space15">
<div class="layui-col-xs12 layui-col-md3">
<div class="layui-card top-panel">
<div class="layui-card-header">库存物料数量</div>
<div class="layui-card-body">
<div class="layui-row layui-col-space5">
<div class="layui-col-xs7 layui-col-md7 top-panel-number">
9,054,056
</div>
<div class="layui-col-xs5 layui-col-md5 top-panel-tips">
比昨天 <a style="color: #1aa094">▲0.12</a><br>
比七日 <a style="color: #bd3004">▼0.06</a>
</div>
</div>
</div>
</div>
</div>
<div class="layui-col-xs12 layui-col-md3">
<div class="layui-card top-panel">
<div class="layui-card-header">库存物料金额</div>
<div class="layui-card-body">
<div class="layui-row layui-col-space5">
<div class="layui-col-xs7 layui-col-md7 top-panel-number">
9,054,056
</div>
<div class="layui-col-xs5 layui-col-md5 top-panel-tips">
比昨天 <a style="color: #1aa094">▲0.12</a><br>
比七日 <a style="color: #bd3004">▼0.06</a>
</div>
</div>
</div>
</div>
</div>
<div class="layui-col-xs12 layui-col-md3">
<div class="layui-card top-panel">
<div class="layui-card-header">库存物料数量</div>
<div class="layui-card-body">
<div class="layui-row layui-col-space5">
<div class="layui-col-xs7 layui-col-md7 top-panel-number">
9,054,056
</div>
<div class="layui-col-xs5 layui-col-md5 top-panel-tips">
比昨天 <a style="color: #1aa094">▲0.12</a><br>
比七日 <a style="color: #bd3004">▼0.06</a>
</div>
</div>
</div>
</div>
</div>
<div class="layui-col-xs12 layui-col-md3">
<div class="layui-card top-panel">
<div class="layui-card-header">库存物料金额</div>
<div class="layui-card-body">
<div class="layui-row layui-col-space5">
<div class="layui-col-xs7 layui-col-md7 top-panel-number">
9,054,056
</div>
<div class="layui-col-xs5 layui-col-md5 top-panel-tips">
比昨天 <a style="color: #1aa094">▲0.12</a><br>
比七日 <a style="color: #bd3004">▼0.06</a>
</div>
</div>
</div>
</div>
</div>
</div>
<div class="layui-row layui-col-space15"> <div class="layui-row layui-col-space15">
<div class="layui-col-xs12 layui-col-md9"> <div class="layui-col-xs12 layui-col-md9">
<button class="layui-btn" lay-submit lay-filter="thisWeek">
&emsp;本周&emsp;
</button>
<button class="layui-btn" lay-submit lay-filter="lastWeek" >
&emsp;上周&emsp;
</button>
<div id="echarts-records" style="background-color:#ffffff;min-height:400px;padding: 10px"></div> <div id="echarts-records" style="background-color:#ffffff;min-height:400px;padding: 10px"></div>
</div> </div>
<div class="layui-col-xs12 layui-col-md3"> <div class="layui-col-xs12 layui-col-md3">
@ -131,22 +61,23 @@
</div> </div>
<!--</div>--> <!--</div>-->
<script src="/static/lib/layui-v2.6.3/layui.js" charset="utf-8"></script> <script src="/static/lib/layui-v2.6.3/layui.js" charset="utf-8"></script>
<script src="/static/js/lay-config.js?v=1.0.4" charset="utf-8"></script> <script src="/static/js/lay-config.js?v=1.0.4" charset="utf-8"></script>
<script> <script>
layui.use(['layer', 'echarts'], function () { layui.use(['layer', 'echarts'], function () {
var $ = layui.jquery, var $ = layui.jquery,
layer = layui.layer, layer = layui.layer,
echarts = layui.echarts; echarts = layui.echarts,
form = layui.form;
/** /**
* 报表功能 * 折线图
*/ */
var echartsRecords = echarts.init(document.getElementById('echarts-records'), 'walden'); var echartsRecords = echarts.init(document.getElementById('echarts-records'), 'walden');
var optionRecords = { var optionRecords = {
title: { title: {
text: '入库仓库-报表图' text: '仓库库存-报表图'
}, },
tooltip: { tooltip: {
trigger: 'axis', trigger: 'axis',
@ -158,7 +89,7 @@
} }
}, },
legend: { legend: {
data: ['外芯仓库', '义乌仓库', '宁波仓库', '杭州仓库', '北京仓库'] data: []
}, },
toolbox: { toolbox: {
feature: { feature: {
@ -175,7 +106,7 @@
{ {
type: 'category', type: 'category',
boundaryGap: false, boundaryGap: false,
data: ['周一', '周二', '周三', '周四', '周五', '周六', '周日'] data: []
} }
], ],
yAxis: [ yAxis: [
@ -184,33 +115,6 @@
} }
], ],
series: [ series: [
{
name: '外芯仓库',
type: 'line',
stack: '金额',
areaStyle: {},
data: [120, 132, 101, 134, 90, 230, 210]
},
{
name: '义乌仓库',
type: 'line',
areaStyle: {},
data: [220, 182, 191, 234, 290, 330, 310]
},
{
name: '宁波仓库',
type: 'line',
stack: '金额',
areaStyle: {},
data: [150, 232, 201, 154, 190, 330, 410]
},
{
name: '杭州仓库',
type: 'line',
stack: '金额',
areaStyle: {},
data: [320, 332, 301, 334, 390, 330, 320]
},
{ {
name: '北京仓库', name: '北京仓库',
type: 'line', type: 'line',
@ -222,12 +126,10 @@
} }
}, },
areaStyle: {}, areaStyle: {},
data: [820, 932, 901, 934, 1290, 1330, 1320] data: []
} }
] ]
}; };
echartsRecords.setOption(optionRecords);
/** /**
* 玫瑰图表 * 玫瑰图表
@ -271,30 +173,22 @@
} }
] ]
}; };
echartsPies.setOption(optionPies);
/** /**
* 柱状图 * 柱状图
*/ */
var echartsDataset = echarts.init(document.getElementById('echarts-dataset'), 'walden'); var echartsDataset = echarts.init(document.getElementById('echarts-dataset'), 'walden');
var optionDataset = { var optionDataset = {
legend: {}, legend: {},
tooltip: {}, tooltip: {},
dataset: { dataset: {
dimensions: ['product', '3月', '4月', '5月'], dimensions: [],
source: [ source: [
{product: '电子产品类', '3月': 43.3, '4月': 85.8, '5月': 93.7},
{product: '食品类', '3月': 83.1, '4月': 73.4, '5月': 55.1},
{product: '饮品类', '3月': 86.4, '4月': 65.2, '5月': 82.5},
{product: '海产品类', '3月': 72.4, '4月': 53.9, '5月': 39.1}
] ]
}, },
xAxis: {type: 'category'}, xAxis: {type: 'category'},
yAxis: {}, yAxis: {},
// Declare several bar series, each will be mapped
// to a column of dataset.source by default.
series: [ series: [
{type: 'bar'}, {type: 'bar'},
{type: 'bar'}, {type: 'bar'},
@ -302,15 +196,11 @@
] ]
}; };
echartsDataset.setOption(optionDataset);
/** /**
* 中国地图 * 中国地图
*/ */
var echartsMap = echarts.init(document.getElementById('echarts-map'), 'walden'); var echartsMap = echarts.init(document.getElementById('echarts-map'), 'walden');
var optionMap = { var optionMap = {
legend: {}, legend: {},
tooltip: { tooltip: {
@ -319,46 +209,322 @@
}, },
dataset: { dataset: {
source: [ source: [
['product', '3月', '4月', '5月', '6月', '7月', '8月'],
['电子产品类', 41.1, 30.4, 65.1, 53.3, 83.8, 98.7],
['食品类', 86.5, 92.1, 85.7, 83.1, 73.4, 55.1],
['饮品类', 24.1, 67.2, 79.5, 86.4, 65.2, 82.5],
['海产品类', 55.2, 67.1, 69.2, 72.4, 53.9, 39.1]
] ]
}, },
xAxis: {type: 'category'}, xAxis: {type: 'category'},
yAxis: {gridIndex: 0}, yAxis: {gridIndex: 0},
grid: {top: '55%'}, grid: {top: '55%'},
series: [ series: [
{type: 'line', smooth: true, seriesLayoutBy: 'row'},
{type: 'line', smooth: true, seriesLayoutBy: 'row'},
{type: 'line', smooth: true, seriesLayoutBy: 'row'},
{type: 'line', smooth: true, seriesLayoutBy: 'row'},
{
type: 'pie',
id: 'pie',
radius: '30%',
center: ['50%', '25%'],
label: {
formatter: '{b}: {@3月} ({d}%)'
},
encode: {
itemName: 'product',
value: '3月',
tooltip: '3月'
}
}
] ]
}; };
echartsMap.setOption(optionMap);
//动态加载相关数据
$.ajax({
url:'/repository/layui/echart_back?type=0',
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);
if(result.code == 0){
echartsRecords.setOption(optionRecords);
echartsPies.setOption(optionPies);
echartsDataset.setOption(optionDataset);
echartsMap.setOption(optionMap);
// 折线图
var optionRecordsSeries=[];
// 饼状图
var optionPiesSeries = {
name: '昨日占比',
type: 'pie',
radius: '55%',
center: ['50%', '60%'],
roseType: 'radius',
emphasis: {
itemStyle: {
shadowBlur: 10,
shadowOffsetX: 0,
shadowColor: 'rgba(0, 0, 0, 0.5)'
}
},
data:[]
}
// 柱状图
optionDataset = {
legend: {},
tooltip: {},
dataset: {
dimensions:[],
source:[]
},
series:[]
};
for (let i = 0; i < result.data.depository_name.length; i++) {
optionRecordsSeries.push({
name: result.data.depository_name[i],
type: 'line',
stack: '金额',
data:result.data.depository_data.ThisWeekInventory[result.data.depository_name[i]],
areaStyle: {}
});
optionPiesSeries.data.push({
value:result.data.depository_data.todayInventory[result.data.depository_name[i]],name:result.data.depository_name[i]
})
}
var dimensions = result.data.depository_data.sourceListByMonth[result.data.depository_data.sourceListByMonth.length - 1]
optionDataset.dataset.dimensions = dimensions
for (let i = result.data.depository_data.sourceListByMonth.length - 2; i >= 0; i--) {
optionDataset.dataset.source.push(result.data.depository_data.sourceListByMonth[i])
}
for (let i = 0; i < dimensions.length - 1; i++) {
optionDataset.series.push({type:'bar'})
}
for (let i = 0; i < result.data.depository_data.MapInventory.mapDataList.length ; i++) {
optionMap.dataset.source.push(result.data.depository_data.MapInventory.mapDataList[i])
if(i < result.data.depository_data.MapInventory.mapDataList.length - 1) {
optionMap.series.push({type: 'line', smooth: true, seriesLayoutBy: 'row'})
}
}
var month = new Date().getMonth() + 1;
optionMap.series.push(
{
type: 'pie',
// id: 'pie',
radius: '30%',
center: ['50%', '25%'],
label: {
formatter: '{b}: {@'+month+'月} ({d}%)'
},
encode: {
itemName: 'product',
value: month+'月',
tooltip: month+'月'
}
}
);
optionRecords = {
title: {
text: '仓库库存-报表图'
},
tooltip: {
trigger: 'axis',
axisPointer: {
type: 'cross',
label: {
backgroundColor: '#6a7985'
}
}
},
legend: {
data: result.data.depository_name
},
toolbox: {
feature: {
saveAsImage: {}
}
},
grid: {
left: '3%',
right: '4%',
bottom: '3%',
containLabel: true
},
xAxis: [
{
type: 'category',
boundaryGap: false,
data: result.data.depository_data.week
}
],
yAxis: [
{
type: 'value'
}
],
series: optionRecordsSeries
};
optionPies = {
title: {
text: '仓库分布图',
left: 'center'
},
tooltip: {
trigger: 'item',
formatter: '{a} <br/>{b} : {c} ({d}%)'
},
legend: {
orient: 'vertical',
left: 'left',
data: result.data.depository_name
},
series: optionPiesSeries
};
echartsRecords.setOption(optionRecords);
echartsPies.setOption(optionPies);
echartsDataset.setOption(optionDataset);
echartsMap.setOption(optionMap);
}
}
});
// echarts 窗口缩放自适应 // echarts 窗口缩放自适应
window.onresize = function () { window.onresize = function () {
echartsRecords.resize(); echartsRecords.resize();
} };
form.on('submit(thisWeek)', function () {
$.ajax({
url:'/repository/layui/echart_back?type=0',
type:'get',
async:true,
dataType: "json",
complete:function (XHR,TS){
if(XHR.status != 200){
layer.alert("系统繁忙,稍后重试");
}
},
success:function (result){
echartsRecords.setOption(optionRecords);
// 折线图
var optionRecordsSeries=[];
for (let i = 0; i < result.data.depository_name.length; i++) {
optionRecordsSeries.push({
name: result.data.depository_name[i],
type: 'line',
stack: '金额',
data:result.data.depository_data.ThisWeekInventory[result.data.depository_name[i]],
areaStyle: {}
});
}
optionRecords = {
title: {
text: '仓库库存-报表图'
},
tooltip: {
trigger: 'axis',
axisPointer: {
type: 'cross',
label: {
backgroundColor: '#6a7985'
}
}
},
legend: {
data: result.data.depository_name
},
toolbox: {
feature: {
saveAsImage: {}
}
},
grid: {
left: '3%',
right: '4%',
bottom: '3%',
containLabel: true
},
xAxis: [
{
type: 'category',
boundaryGap: false,
data: result.data.depository_data.week
}
],
yAxis: [
{
type: 'value'
}
],
series: optionRecordsSeries
};
echartsRecords.setOption(optionRecords);
}
})
})
form.on('submit(lastWeek)', function () {
$.ajax({
url:'/repository/layui/echart_back?type=0&last=1',
type:'get',
async:true,
dataType: "json",
complete:function (XHR,TS){
if(XHR.status != 200){
layer.alert("系统繁忙,稍后重试");
}
},
success:function (result){
echartsRecords.setOption(optionRecords);
// 折线图
var optionRecordsSeries=[];
for (let i = 0; i < result.data.depository_name.length; i++) {
optionRecordsSeries.push({
name: result.data.depository_name[i],
type: 'line',
stack: '金额',
data:result.data.depository_data.BeforeInventory[result.data.depository_name[i]],
areaStyle: {}
});
}
optionRecords = {
title: {
text: '仓库库存-报表图'
},
tooltip: {
trigger: 'axis',
axisPointer: {
type: 'cross',
label: {
backgroundColor: '#6a7985'
}
}
},
legend: {
data: result.data.depository_name
},
toolbox: {
feature: {
saveAsImage: {}
}
},
grid: {
left: '3%',
right: '4%',
bottom: '3%',
containLabel: true
},
xAxis: [
{
type: 'category',
boundaryGap: false,
data: result.data.depository_data.week
}
],
yAxis: [
{
type: 'value'
}
],
series: optionRecordsSeries
};
echartsRecords.setOption(optionRecords);
}
})
})
}); });
</script> </script>
</body> </body>

36
target/classes/templates/pages/chart/chart-stock_back.html

@ -388,7 +388,7 @@
form.on('submit(thisWeek)', function () { form.on('submit(thisWeek)', function () {
$.ajax({ $.ajax({
url:'/repository/layui/echart_back?type=0', url:'/repository/layui/echart_back_thisWeek?type=0',
type:'get', type:'get',
async:true, async:true,
dataType: "json", dataType: "json",
@ -397,16 +397,20 @@
layer.alert("系统繁忙,稍后重试"); 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); echartsRecords.setOption(optionRecords);
// 折线图 // 折线图
var optionRecordsSeries=[]; 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({ optionRecordsSeries.push({
name: result.data.depository_name[i], name: result.depository_name[i],
type: 'line', type: 'line',
stack: '金额', stack: '金额',
data:result.data.depository_data.ThisWeekInventory[result.data.depository_name[i]], data:result.ThisWeekInventory[result.depository_name[i]],
areaStyle: {} areaStyle: {}
}); });
} }
@ -424,7 +428,7 @@
} }
}, },
legend: { legend: {
data: result.data.depository_name data: result.depository_name
}, },
toolbox: { toolbox: {
feature: { feature: {
@ -441,7 +445,7 @@
{ {
type: 'category', type: 'category',
boundaryGap: false, boundaryGap: false,
data: result.data.depository_data.week data: result.week
} }
], ],
yAxis: [ yAxis: [
@ -458,7 +462,7 @@
form.on('submit(lastWeek)', function () { form.on('submit(lastWeek)', function () {
$.ajax({ $.ajax({
url:'/repository/layui/echart_back?type=0&last=1', url:'/repository/layui/echart_back_lastWeek?type=0',
type:'get', type:'get',
async:true, async:true,
dataType: "json", dataType: "json",
@ -467,16 +471,20 @@
layer.alert("系统繁忙,稍后重试"); 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); echartsRecords.setOption(optionRecords);
// 折线图 // 折线图
var optionRecordsSeries=[]; 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({ optionRecordsSeries.push({
name: result.data.depository_name[i], name: result.depository_name[i],
type: 'line', type: 'line',
stack: '金额', stack: '金额',
data:result.data.depository_data.BeforeInventory[result.data.depository_name[i]], data:result.BeforeInventory[result.depository_name[i]],
areaStyle: {} areaStyle: {}
}); });
} }
@ -494,7 +502,7 @@
} }
}, },
legend: { legend: {
data: result.data.depository_name data: result.depository_name
}, },
toolbox: { toolbox: {
feature: { feature: {
@ -511,7 +519,7 @@
{ {
type: 'category', type: 'category',
boundaryGap: false, boundaryGap: false,
data: result.data.depository_data.week data: result.week
} }
], ],
yAxis: [ yAxis: [

1
target/classes/templates/pages/depository/table-stock.html

@ -247,6 +247,7 @@
table.on('tool(currentTableFilter)', function (obj) { table.on('tool(currentTableFilter)', function (obj) {
let data = obj.data; let data = obj.data;
console.log(data)
if (obj.event === 'applicationIn') { if (obj.event === 'applicationIn') {
// 入库申请 // 入库申请
var index = layer.open({ var index = layer.open({

47
target/classes/templates/pages/stockTaking/stockTaking.html

@ -299,6 +299,11 @@
let placeId; let placeId;
// 用于存储当前选择的负责人 // 用于存储当前选择的负责人
let departmentManagerId; let departmentManagerId;
// 用于存储没有对应关系的物料
let barCodeList = {};
let needToUpdate = {};
layui.use(['form', 'step', 'flow'], function () { layui.use(['form', 'step', 'flow'], function () {
var $ = layui.$, var $ = layui.$,
form = layui.form, form = layui.form,
@ -374,6 +379,8 @@
form.on('submit(formStep)', function (data) { form.on('submit(formStep)', function (data) {
data = data.field; data = data.field;
data.params = params; data.params = params;
data.needToUpdate = needToUpdate;
data.barCodeListByNoMaterial = barCodeList;
$.ajax({ $.ajax({
url: "/stockTaking/addStockTakingRecord", url: "/stockTaking/addStockTakingRecord",
type: 'post', 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 !== "") { if (depositoryId !== undefined && departmentManagerId !== undefined && departmentManagerId !== "") {
layer.open({ layer.open({
type: 2, type: 2,
@ -1106,6 +1115,7 @@
success: function (d) { success: function (d) {
var data = d.data; var data = d.data;
var materialList = data["materialList"]; var materialList = data["materialList"];
var barCodeListByNoMaterial = data["barCodeListByNoMaterial"];
if (materialList.length > 0) { if (materialList.length > 0) {
for (let i = 1; i <= materialList.length; i++) { for (let i = 1; i <= materialList.length; i++) {
Coverpage(i, materialList[i - 1]); Coverpage(i, materialList[i - 1]);
@ -1116,6 +1126,41 @@
} }
form.render(); form.render();
} }
if(barCodeListByNoMaterial.length > 0){
// 如果扫描的条形码没有对应的物料
var content = '<div style="padding: 50px; line-height: 22px; background-color: #393D49; color: #fff; font-weight: 300;">' +
'<p>未发现的条码,是否需要添加对应关系</p><hr>' +
'<table>';
for (let i = 0; i < barCodeListByNoMaterial.length; i++) {
var item = "<tr><td>"+barCodeListByNoMaterial[i]+"</td></tr>"
content+=item;
}
content+='</table></div>';
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()
});
}
});
}
} }
}) })
} }

306
target/classes/templates/pages/stockTaking/stockTakingComplete.html

@ -0,0 +1,306 @@
<!DOCTYPE html>
<html lang="en" xmlns:th="http://www.thymeleaf.org">
<head>
<meta charset="utf-8">
<title>仓库盘点</title>
<meta name="renderer" content="webkit">
<meta http-equiv="X-UA-Compatible" content="IE=edge,chrome=1">
<meta name="viewport" content="width=device-width, initial-scale=1, maximum-scale=1">
<link rel="stylesheet" href="/static/lib/layui-v2.6.3/css/layui.css" media="all">
<link rel="stylesheet" href="/static/css/public.css" media="all">
<link rel="stylesheet" href="/static/js/lay-module/step-lay/step.css" media="all">
<style>
.inputdiv {
display: flex;
background-color: #fff;
height: 38px;
line-height: 38px;
border: 1px solid rgb(238, 238, 238);
}
.layui-form-label {
padding: 9px 0px;
text-align: left;
}
.layui-input-block {
margin-left: 80px;
}
.layui-form-select {
width: 100%;
border-style: none;
}
</style>
</head>
<body>
<div class="layuimini-container">
<div class="layuimini-main">
<div class="layui-carousel" id="stepForm" lay-filter="stepForm" style="margin: 0 auto; ">
<div carousel-item style="overflow: inherit">
<div>
<fieldset class="table-search-fieldset">
<legend>库存盘点</legend>
<div class="layui-fluid">
<div class="layui-card">
<form class="layui-form"
style="margin: 0 auto;max-width: 700px;padding-top: 100px; padding-bottom: 200px"
lay-filter="form1" id="form1">
<div class="layui-card-body" id="takingHeader" style="padding-right: 0px">
<div class="layui-form-item">
<label class="layui-form-label">盘点位置:</label>
<div class="layui-input-block">
<input type="text" name="mainId" id="mainId"
th:value="${mainRecord.getId()}" style="display:none;">
<input type="text" class="layui-input"
th:value="${mainRecord.getDepositoryName()}"
style="border-style: none"
id="openSonByDepository" readonly
lay-verify="required"/>
<input type="text" name="depositoryId" class="layui-input"
id="depositoryId" th:value="${mainRecord.getDepositoryId()}"
style="display: none" lay-verify="required"/>
<input type="text" name="placeId" class="layui-input" id="placeId"
th:value="${mainRecord.getPlaceId()}"
style="display: none" lay-verify="required"/>
</div>
</div>
<div class="layui-form-item">
<label class="layui-form-label">负责人:</label>
<div class="layui-input-block">
<input type="text" placeholder="请选择负责人" class="layui-input"
id="departmentManager" readonly
th:value="${mainRecord.getDepartmentManagerName()}"
lay-verify="required"/>
<input type="text" id="departmentManagerId" name="departmentManagerId"
th:value="${mainRecord.getDepartmentManager()}"
class="layui-input" style="display: none" lay-verify="required"/>
</div>
</div>
<div class="layui-form-item">
<label class="layui-form-label">发起人:</label>
<div class="layui-input-block">
<input type="text" placeholder="请选择负责人" class="layui-input"
id="originatorName" readonly
th:value="${mainRecord.getOriginatorName()}"
lay-verify="required"/>
<input type="text" id="originator" name="departmentManagerId"
th:value="${mainRecord.getOriginator()}"
class="layui-input" style="display: none" lay-verify="required"/>
</div>
</div>
</div>
<fieldset class="table-search-fieldset">
<legend>盘点明细</legend>
<div class="layui-card-body" id="InventoryDetails" style="padding-right: 0px">
<hr>
<div class="layui-collapse" lay-accordion>
<div class="layui-colla-item"
th:each="recordMin,iterStar:${recordChild}">
<h2 class="layui-colla-title"
th:text="${recordMin.getMname()}"></h2>
<div class="layui-colla-content">
<div class="layui-form-item">
<label class="layui-form-label">物料编码:</label>
<div class="layui-input-block" style="margin: 0px;">
<div class="inputdiv">
<input th:attr="name='code' +${recordMin.getId()},id='code'+${recordMin.getId()}"
type="text" placeholder="请填写入物料编码"
readonly
th:value="${recordMin.getMcode()}"
class="layui-input" lay-verify="required"
style="border-style: none">
</div>
</div>
</div>
<div class="layui-form-item">
<label class="layui-form-label">条形编码:</label>
<div class="layui-input-block" style="margin: 0px;">
<div class="inputdiv">
<select
readonly
th:attr="id='barCode'+${recordMin.getId()},name='barCode'+${recordMin.getId()}"
style="border-style: none">
</select>
</div>
</div>
</div>
<div class="layui-form-item">
<label class="layui-form-label">物料类型:</label>
<div class="layui-input-block">
<input type="text" placeholder="请选择物料类型"
class="layui-input"
th:value="${recordMin.getTname()}"
th:attr="id='openSonByMateralType'+${recordMin.getId()}"
readonly
lay-verify="required"/>
<input type="text"
th:value="${recordMin.getMtId()}"
th:attr="id='materialTypeId'+${recordMin.getId()},name='typeId'+${recordMin.getId()}"
placeholder="请选择物料类型" class="layui-input"
style="display: none" lay-verify="required"/>
</div>
</div>
<div class="layui-form-item">
<label class="layui-form-label">材质:</label>
<div class="layui-input-block">
<input type="text" placeholder="请填写材质名称"
class="layui-input" readonly
th:value="${recordMin.getMtexture()}"
th:attr="id='texture'+${recordMin.getId()},name='texture'+${recordMin.getId()}"
/>
</div>
</div>
<div class="layui-form-item">
<label class="layui-form-label">规格型号:</label>
<div class="layui-input-block">
<input type="text" placeholder="请填写规格型号"
class="layui-input" readonly
th:value="${recordMin.getMversion()}"
th:attr="id='version'+${recordMin.getId()},name='version'+${recordMin.getId()}"
/>
</div>
</div>
<div class="layui-form-item">
<label class="layui-form-label">计量单位:</label>
<div class="layui-input-block">
<input type="text" placeholder="请填写计量单位"
class="layui-input" readonly
th:value="${recordMin.getMunit()}"
th:attr="id='unit'+${recordMin.getId()},name='unit'+${recordMin.getId()}"
/>
</div>
</div>
<div class="layui-form-item">
<label class="layui-form-label">库存数量:</label>
<div class="layui-input-block">
<input type="number" class="layui-input" readonly
th:value="${recordMin.getOldInventory()}"
th:attr="id='oldInventory'+${recordMin.getId()},name='oldInventory'+${recordMin.getId()}"
lay-verify="required"/>
</div>
</div>
<div class="layui-form-item">
<label class="layui-form-label">盘点数量:</label>
<div class="layui-input-block">
<input type="number" class="layui-input" readonly
th:value="${recordMin.getNewInventory()}"
th:attr="id='newInventory'+${recordMin.getId()},name='newInventory'+${recordMin.getId()}"
lay-verify="required"/>
</div>
</div>
<div class="layui-form-item">
<label class="layui-form-label">盘点结果:</label>
<div class="layui-input-block">
<input type="text" class="layui-input" id="takingResult" readonly
th:value="${recordMin.getTakingResultShow()}"
th:attr="id='takingResult'+${recordMin.getId()},name='takingResult'+${recordMin.getId()}"
lay-verify="required"/>
</div>
</div>
<div class="layui-form-item">
<label class="layui-form-label">盈亏数量:</label>
<div class="layui-input-block">
<input type="number" class="layui-input" readonly
th:value="${recordMin.getInventory()}"
th:attr="id='inventory'+${recordMin.getId()},name='inventory'+${recordMin.getId()}"
lay-verify="required"/>
</div>
</div>
</div>
</div>
</div>
</div>
</fieldset>
<div id="review">
<div class="layui-form"
style="margin: 0 auto;max-width: 900px;padding-top: 40px;">
<div class="layui-form-item">
<div class="layui-input-block">
<button type="button" class="layui-btn" onclick="complete(1)">
&emsp;处理&emsp;
</button>
</div>
</div>
</div>
</div>
</form>
</div>
</div>
</fieldset>
</div>
</div>
</div>
</div>
</div>
<script src="/static/lib/layui-v2.6.3/layui.js" charset="utf-8"></script>
<script src="/static/js/lay-config.js?v=1.0.4" charset="utf-8"></script>
<script>
function complete(data) {
}
layui.use(['form', 'step', 'element'], function () {
var $ = layui.$,
step = layui.step,
element = layui.element,
form = layui.form;
var position = 0, states = {}, number = 3;
states = [{title: "待处理"}];
// 用于分步表单加载
step.render({
elem: '#stepForm',
filter: 'stepForm',
width: '100%', //设置容器宽度
stepWidth: '750px',
height: '1495px',
position: position,
number: number,
stepItems: states
});
// 用于获取审核结果与审核的单号
complete = function (pass) {
let data = {};
data.mainId = $("#mainId").val();
data.state = pass;
$.ajax({
url: "/stockTaking/complete",
type: 'post',
dataType: 'json',
contentType: "application/json;charset=utf-8",
data: JSON.stringify(data),
beforeSend: function () {
this.layerIndex = layer.load(0, {shade: [0.5, '#393D49']});
},
success: function (d) {
layer.close(this.layerIndex);
if (d.status >= 300) {
} else {
layer.msg("提交成功", {
icon: 6,//成功的表情
time: 500 //1秒关闭(如果不配置,默认是3秒)
}, function () {
window.location = '/StockTakingView?id=' + data.mainId;
});
}
},
})
};
});
</script>
</body>
</html>

8
target/classes/templates/pages/stockTaking/stockTakingReview.html

@ -195,7 +195,7 @@
<label class="layui-form-label">盘点结果:</label> <label class="layui-form-label">盘点结果:</label>
<div class="layui-input-block"> <div class="layui-input-block">
<input type="text" class="layui-input" id="takingResult" <input type="text" class="layui-input" id="takingResult" readonly
th:value="${recordMin.getTakingResultShow()}" th:value="${recordMin.getTakingResultShow()}"
th:attr="id='takingResult'+${recordMin.getId()},name='takingResult'+${recordMin.getId()}" th:attr="id='takingResult'+${recordMin.getId()},name='takingResult'+${recordMin.getId()}"
lay-verify="required"/> lay-verify="required"/>
@ -279,7 +279,7 @@
let data = {}; let data = {};
data.mainId = $("#mainId").val(); data.mainId = $("#mainId").val();
data.auditOpinion = $("#auditOpinion").val(); data.auditOpinion = $("#auditOpinion").val();
data.state = pass; data.departmentManagerState = pass;
$.ajax({ $.ajax({
url:"/stockTaking/review", url:"/stockTaking/review",
@ -304,12 +304,13 @@
skin: 'layui-layer-rim', skin: 'layui-layer-rim',
maxmin: true, maxmin: true,
shadeClose: true, //点击遮罩关闭层 shadeClose: true, //点击遮罩关闭层
area: ['70%', '70%'], area: ['100%', '100%'],
move: '.layui-layer-title', move: '.layui-layer-title',
fixed: false, fixed: false,
content: '/stockTakingTransfer?minIds='+errMsg.errIds, content: '/stockTakingTransfer?minIds='+errMsg.errIds,
end: function (res) { end: function (res) {
if(res.status >= 300){ if(res.status >= 300){
layer.close(layer.index);
layer.msg("提交失败,联系开发人员解决", { layer.msg("提交失败,联系开发人员解决", {
icon: 5,//成功的表情 icon: 5,//成功的表情
time: 500 //1秒关闭(如果不配置,默认是3秒) time: 500 //1秒关闭(如果不配置,默认是3秒)
@ -317,6 +318,7 @@
window.location = '/StockTakingView?id='+data.mainId; window.location = '/StockTakingView?id='+data.mainId;
}); });
}else{ }else{
layer.close(layer.index);
layer.msg("提交成功", { layer.msg("提交成功", {
icon: 6,//成功的表情 icon: 6,//成功的表情
time: 500 //1秒关闭(如果不配置,默认是3秒) time: 500 //1秒关闭(如果不配置,默认是3秒)

55
target/classes/templates/pages/stockTaking/stockTakingView.html

@ -51,7 +51,8 @@
<div class="layui-form-item"> <div class="layui-form-item">
<label class="layui-form-label">盘点位置:</label> <label class="layui-form-label">盘点位置:</label>
<div class="layui-input-block"> <div class="layui-input-block">
<input type="text" name="mainId" th:value="${mainRecord.getId()}" style="display:none;"> <input type="text" name="mainId" th:value="${mainRecord.getId()}"
style="display:none;">
<input type="text" class="layui-input" <input type="text" class="layui-input"
th:value="${mainRecord.getDepositoryName()}" th:value="${mainRecord.getDepositoryName()}"
style="border-style: none" style="border-style: none"
@ -219,23 +220,39 @@
</div> </div>
</fieldset> </fieldset>
<div class="layui-card-body" id="takingFooter" style="padding-right: 0px;display: none"> <div class="layui-card-body" id="takingFooter"
style="padding-right: 0px;display: none">
<div class="layui-form-item"> <div class="layui-form-item">
<label class="layui-form-label">处理时间:</label> <label class="layui-form-label">审核时间:</label>
<div class="layui-input-block">
<input type="text" id="reviewTime" class="layui-input"
th:value="${mainRecord.getReviewTime()}" readonly>
</div>
<div class="layui-input-block"> <div class="layui-input-block">
<input type="text" id="completeTime" class="layui-input" th:value="${mainRecord.getCompleteTime()}" readonly> <input type="text" id="departmentManagerState" class="layui-input" style="display: none"
th:value="${mainRecord.getDepartmentManagerState()}" readonly>
</div> </div>
</div> </div>
<div class="layui-form-item"> <div class="layui-form-item">
<label class="layui-form-label">审核意见:</label> <label class="layui-form-label">审核意见:</label>
<div class="layui-input-block"> <div class="layui-input-block">
<input type="text" placeholder="" class="layui-input" <input type="text" placeholder="" class="layui-input"
readonly readonly
th:value="${mainRecord.getAuditOpinion()}" th:value="${mainRecord.getAuditOpinion()}"
lay-verify="required"/> lay-verify="required"/>
</div> </div>
</div> </div>
</div> </div>
<div class="layui-card-body" id="takingFooter1"
style="padding-right: 0px;display: none">
<div class="layui-form-item">
<label class="layui-form-label">处理时间:</label>
<div class="layui-input-block">
<input type="text" id="completeTime" class="layui-input"
th:value="${mainRecord.getCompleteTime()}" readonly>
</div>
</div>
</div>
</form> </form>
</div> </div>
</div> </div>
@ -250,28 +267,40 @@
<script> <script>
layui.use(['form', 'flow','step','element'], function () { layui.use(['form', 'flow', 'step', 'element'], function () {
var $ = layui.$, var $ = layui.$,
step = layui.step, step = layui.step,
element = layui.element, element = layui.element,
form = layui.form; form = layui.form;
var position=0,states={},number = 2; var position = 0, states = {}, number = 2;
var ifShow1 = ($("#reviewTime").val() === "");
var ifShow = ($("#completeTime").val() === ""); var ifShow = ($("#completeTime").val() === "");
if (ifShow1) {
// 如果还未处理
states = [{title: "待审核"}];
} else{
$("#takingFooter").show();
states = [{title: "已审核"}]
}
console.log($("#completeTime").val())
console.log(ifShow)
if(ifShow){ if(ifShow){
// 如果还未处理 var state = $("#departmentManagerState").val();
states = [ {title: "待审核"}]; if(state === "1"){
states = [{title: "待处理"}]
}else if(state === "2"){
states = [{title: "已驳回"}]
}
}else{ }else{
$("#takingFooter").show(); $("#takingFooter1").show();
states = [{title: "已处理"}] states = [{title: "已处理"}]
} }
// 用于分步表单加载 // 用于分步表单加载
step.render({ step.render({
elem: '#stepForm', elem: '#stepForm',
@ -280,7 +309,7 @@
stepWidth: '750px', stepWidth: '750px',
height: '1300px', height: '1300px',
position: position, position: position,
number:number, number: number,
stepItems: states stepItems: states
}); });

4
target/classes/templates/pages/stockTaking/stockTransfer.html

@ -282,7 +282,9 @@
icon: 6,//成功的表情 icon: 6,//成功的表情
time: 500 //1秒关闭(如果不配置,默认是3秒) time: 500 //1秒关闭(如果不配置,默认是3秒)
}, function () { }, function () {
step.next('#stepForm'); // 关闭当前页
var index = parent.layer.getFrameIndex(window.name);
parent.layer.close(index);
}); });
}, },
complete: function () { complete: function () {

Loading…
Cancel
Save