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
public class PortConfig {
// 接口地址
public static String external_url = "http://172.20.2.87:39168";
// public static String external_url = "http://127.0.0.1:39168";
public static String external_url_6666 = "http://172.20.2.87:6666";
// public static String external_url_6666 = "http://127.0.0.1:6666";
// public static String external_url = "http://172.20.2.87:39168";
public static String external_url = "http://127.0.0.1:39168";
// public static String external_url_6666 = "http://172.20.2.87:6666";
public static String external_url_6666 = "http://127.0.0.1:6666";
/**

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<>();
List<Long> days = getLastTimeInterval();
List<Double> drCountbyDrName = new ArrayList<>();
while (it.hasNext()) {
int i;
Object key = it.next();
for (i = days.size() - 1; i > 0; i--) {
// 遍历 Map并计算各仓库的入库数
if (i == days.size() - 1) {
depositoryName.add(key.toString());
}
Integer val = (Integer) depositoryAllNameAndId.get(key);
// 获取一段时间内的库存额度
// 测试
Double depositoryRecordByDateAndType1 = depositoryRecordService.findApplicationRecordByDate(days.get(i), days.get(i - 1), Integer.parseInt(type), val);
drCountbyDrName.add(depositoryRecordByDateAndType1);
if (i == 2 && flag) {
yesterdayData.put(key.toString(), depositoryRecordByDateAndType1);
while (it.hasNext()) {
int i;
Object key = it.next();
for (i = days.size() - 1; i > 0; i--) {
// 遍历 Map并计算各仓库的入库数
if (i == days.size() - 1) {
depositoryName.add(key.toString());
}
Integer val = (Integer) depositoryAllNameAndId.get(key);
// 获取一段时间内的库存额度
// 测试
Double depositoryRecordByDateAndType1 = depositoryRecordService.findApplicationRecordByDate(days.get(i), days.get(i - 1), Integer.parseInt(type), val);
drCountbyDrName.add(depositoryRecordByDateAndType1);
if (i == 2 && flag) {
yesterdayData.put(key.toString(), depositoryRecordByDateAndType1);
}
}
Collections.reverse(drCountbyDrName);
show_data.put(key.toString(), ((ArrayList<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<>();
depository_data.put("data", show_data);
depository_data.put("week", show_weekday);
depository_data.put("depository_name", depositoryName);
if ("0".equals(type)) {
// 如果是获取库存
depository_data.put("ThisWeekInventory", getThisWeekInventoryByDName(depositoryService, depositoryRecordService, userByPort));
depository_data.put("BeforeInventory", getBeforeInventoryByDName(depositoryService, depositoryRecordService, userByPort));
}
return depository_data;
}
@ -865,7 +873,14 @@ public class DepositoryController {
}
Map<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("week", show_weekday);
depository_data.put("depository_name", depositoryName);
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);
StringBuilder departmentHeadId = new StringBuilder();
StringBuilder departMentHeadQyWxName = new StringBuilder();
/*for (int i = 0; i < departmentHeadByUsers.size(); i++) {
for (int i = 0; i < departmentHeadByUsers.size(); i++) {
departmentHeadId.append(departmentHeadByUsers.get(i).getId()).append(",");
departMentHeadQyWxName.append(departmentHeadByUsers.get(i).getWorkwechat()+",");
}*/
}
departmentHeadId.append("78").append(",");
departMentHeadQyWxName.append("PangFuZhen").append(",");
// departMentHeadQyWxName.append("PangFuZhen").append(",");
map.put("departmenthead",departmentHeadId.toString());
List<Integer> params = (List<Integer>) map.get("params");
Integer integer = 0;
@ -604,12 +604,12 @@ public class DepositoryRecordController {
List<UserByPort> departmentHeadByUsers = findDepartmentHeadByUser(userToken);
StringBuilder departmentHeadId = new StringBuilder();
StringBuilder departMentHeadQyWxName = new StringBuilder();
/*for (int i = 0; i < departmentHeadByUsers.size(); i++) {
for (int i = 0; i < departmentHeadByUsers.size(); i++) {
departmentHeadId.append(departmentHeadByUsers.get(i).getId()).append(",");
departMentHeadQyWxName.append(departmentHeadByUsers.get(i).getWorkwechat()+",");
}*/
departmentHeadId.append("78").append(",");
departMentHeadQyWxName.append("PangFuZhen").append(",");
}
// departmentHeadId.append("78").append(",");
// departMentHeadQyWxName.append("PangFuZhen").append(",");
map.put("departmenthead",departmentHeadId.toString());
map.put("departMentHeadQyWxName",departMentHeadQyWxName.toString());
List<Integer> params = (List<Integer>) map.get("params");
@ -782,12 +782,12 @@ public class DepositoryRecordController {
List<UserByPort> departmentHeadByUsers = findDepartmentHeadByUser(userToken);
StringBuilder departmentHeadId = new StringBuilder();
StringBuilder departMentHeadQyWxName = new StringBuilder();
/*for (int i = 0; i < departmentHeadByUsers.size(); i++) {
for (int i = 0; i < departmentHeadByUsers.size(); i++) {
departmentHeadId.append(departmentHeadByUsers.get(i).getId()).append(",");
departMentHeadQyWxName.append(departmentHeadByUsers.get(i).getWorkwechat()+",");
}*/
departmentHeadId.append("78").append(",");
departMentHeadQyWxName.append("PangFuZhen").append(",");
}
// departmentHeadId.append("78").append(",");
// departMentHeadQyWxName.append("PangFuZhen").append(",");
map.put("departmenthead",departmentHeadId.toString());
Integer res = depositoryRecordService.insertApplicationOutRecord(map,userToken); // 插入主订单
if(res == 1){ // 如果插入成功
@ -889,12 +889,12 @@ public class DepositoryRecordController {
List<UserByPort> departmentHeadByUsers = findDepartmentHeadByUser(userToken);
StringBuilder departmentHeadId = new StringBuilder();
StringBuilder departMentHeadQyWxName = new StringBuilder();
/*for (int i = 0; i < departmentHeadByUsers.size(); i++) {
departmentHeadId.append(departmentHeadByUsers.get(i).getId()).append(",");
departMentHeadQyWxName.append(departmentHeadByUsers.get(i).getWorkwechat()+",");
}*/
departmentHeadId.append("78").append(",");
departMentHeadQyWxName.append("PangFuZhen").append(",");
for (int i = 0; i < departmentHeadByUsers.size(); i++) {
departmentHeadId.append(departmentHeadByUsers.get(i).getId()).append(",");
departMentHeadQyWxName.append(departmentHeadByUsers.get(i).getWorkwechat()+",");
}
// departmentHeadId.append("78").append(",");
// departMentHeadQyWxName.append("PangFuZhen").append(",");
mainRecord.put("applicantId",userToken.getId());
mainRecord.put("applyRemark","");
mainRecord.put("quantity",sumQuantity.toString());
@ -915,7 +915,7 @@ public class DepositoryRecordController {
Integer place = 0;
// 用于标志该库位是否可以出库
Boolean flag = false;
if(s.length > 1){
if(s.length >= 1){
// 获取当前仓库所有库位
List<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<>();
List<MaterialP> materialList = new ArrayList<>();
String placeId = (String) map.get("placeId");
// 用于存储没有对应关系的条形码
List<String> barCodeListByNoMaterial = new ArrayList<>();
for (int i = 0; i < barCodeList.size(); i++) {
// 获取具体的条形码
String barCode = barCodeList.getString(i);
// 获取条形码与物料的映射
MaterialAndBarCode materialByBarCode = materialService.findMaterialByBarCode(barCode);
Boolean isExist = false;
Map<String, Object> param = new HashMap<>();
param.put("depositoryId", map.get("depositoryId"));
param.put("code", materialByBarCode.getMcode());
List<MaterialP> inventory = materialService.findInventory(param);
MaterialP mp = new MaterialP();
if (inventory.size() > 0) {
// 如果存在该物料
MaterialP materialP = inventory.get(0);
Map<String, Object> paramByBarCode = new HashMap<>();
paramByBarCode.put("mcode", materialP.getCode());
List<MaterialAndBarCode> materialByBarCodeByCondition = materialService.findMaterialByBarCodeByCondition(paramByBarCode);
materialP.setMaterialAndBarCodeList(materialByBarCodeByCondition);
isExist = true;
if (!"0".equals(placeId)) {
// 如果不是默认库位
// 获取物料与库位的对应关系
MaterialAndPlace placeAndMaterialByMidAndPid = placeService.findPlaceAndMaterialByMidAndPid(ObjectFormatUtil.toInteger(placeId), materialP.getId());
if (placeAndMaterialByMidAndPid == null) {
isExist = false;
}else{
mp.setQuantity(placeAndMaterialByMidAndPid.getQuantity());
}
} else {
// 获取物料与库位的对应关系
MaterialAndPlace placeAndMaterialByMidAndPid = placeService.findPlaceAndMaterialByMidAndPid(0, materialP.getId());
if (placeAndMaterialByMidAndPid == null) {
isExist = false;
}else{ mp.setQuantity(placeAndMaterialByMidAndPid.getQuantity());
if (materialByBarCode != null) {
// 如果存在对应关系
Boolean isExist = false;
Map<String, Object> param = new HashMap<>();
param.put("depositoryId", map.get("depositoryId"));
param.put("code", materialByBarCode.getMcode());
List<MaterialP> inventory = materialService.findInventory(param);
MaterialP mp = new MaterialP();
if (inventory.size() > 0) {
// 如果存在该物料
MaterialP materialP = inventory.get(0);
Map<String, Object> paramByBarCode = new HashMap<>();
paramByBarCode.put("mcode", materialP.getCode());
List<MaterialAndBarCode> materialByBarCodeByCondition = materialService.findMaterialByBarCodeByCondition(paramByBarCode);
materialP.setMaterialAndBarCodeList(materialByBarCodeByCondition);
isExist = true;
if (!"0".equals(placeId)) {
// 如果不是默认库位
// 获取物料与库位的对应关系
MaterialAndPlace placeAndMaterialByMidAndPid = placeService.findPlaceAndMaterialByMidAndPid(ObjectFormatUtil.toInteger(placeId), materialP.getId());
if (placeAndMaterialByMidAndPid == null) {
isExist = false;
} else {
mp.setQuantity(placeAndMaterialByMidAndPid.getQuantity());
}
} else {
// 获取物料与库位的对应关系
MaterialAndPlace placeAndMaterialByMidAndPid = placeService.findPlaceAndMaterialByMidAndPid(0, materialP.getId());
if (placeAndMaterialByMidAndPid == null) {
isExist = false;
} else {
mp.setQuantity(placeAndMaterialByMidAndPid.getQuantity());
}
}
}
mp = materialP;
mp = materialP;
}
if (isExist) {
materialList.add(mp);
}
if (isExist) {
materialList.add(mp);
}
} else {
// 如果当前条形码不存对应物料
barCodeListByNoMaterial.add(barCode);
}
}
if (flag) {
String scanQrCodeValue = redisTemplate.opsForValue().get("scanQrCodeValue" + userByPort.getNumber()).toString();
redisTemplate.delete("scanQrCodeValue" + userByPort.getNumber());
@ -839,6 +847,7 @@ public class MaterialController {
}
}
result.put("materialList", materialList);
result.put("barCodeListByNoMaterial",barCodeListByNoMaterial);
return new RestResponse(result);
}
@ -974,7 +983,7 @@ public class MaterialController {
if (placeAndMaterialByMidAndPid == null) {
// 如果当前库位没有该物料
mp = null;
}else{
} else {
mp.setQuantity(placeAndMaterialByMidAndPid.getQuantity());
}
@ -984,7 +993,7 @@ public class MaterialController {
if (placeAndMaterialByMidAndPid == null) {
// 如果当前库位没有该物料
mp = null;
}else{
} else {
mp.setQuantity(placeAndMaterialByMidAndPid.getQuantity());
}

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

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

@ -170,24 +170,40 @@ public class QyWxOperationController {
String result = "";
if("pass".equals(clickKey)){
if(clickKey.contains("pass")){
result = "通过";
}else{
result = "驳回";
}
if(templateCardType.contains("StockTaking")){
// 如果点击的是库存盘点审核
// 开启线程处理审批
new Thread(new Runnable() {
@Override
public void run() {
stockTakingService.reviewByQyWx(templateCard);
}
}).start();
// 如果点击的是库存盘点有关的卡片
String stockTakingType =templateCard.getEventKey().split("_")[1];
if(stockTakingType.contains("review")) {
// 开启线程处理审批
new Thread(new Runnable() {
@Override
public void run() {
Map<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() {
@ -197,6 +213,7 @@ public class QyWxOperationController {
}
}).start();
}
// 开启线程更改其他用户卡片模板样式
String finalResult = result;
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){
UserByPort userToken = (UserByPort) request.getAttribute("userToken");
List params = (ArrayList) map.get("params");
String departmentManagerId = (String) map.get("departmentManagerId");
// map.put("departmentManager",departmentManagerId);
map.put("departmentManager","6235");
map.put("temp",0);
// 用于设置企业微信接收人
StringBuilder QyWxDepartmentManager = new StringBuilder();
/*String[] split = departmentManagerId.split(",");
String[] split = departmentManagerId.split(",");
for (int i = 0; i < split.length; i++) {
String s = split[i];
if("".equals(s)){
@ -68,9 +71,10 @@ public class StockTakingController {
}
UserByPort departmentManager = PageController.FindUserById(ObjectFormatUtil.toInteger(s), userToken);
QyWxDepartmentManager.append(departmentManager.getWorkwechat()+",");
}*/
QyWxDepartmentManager.append("PangFuZhen").append(",");
}
// QyWxDepartmentManager.append("PangFuZhen").append(",");
map.put("state",3);
map.put("departmentManagerState",3);
map.remove("departmentManagerId");
map.put("originator",userToken.getId());
String mcode = (String) map.get("code");
@ -83,6 +87,7 @@ public class StockTakingController {
param.put("placeId",map.get("placeId"));
param.put("departmentManager",map.get("departmentManager"));
param.put("state",3);
param.put("departmentManagerState",3);
param.put("originator",userToken.getId());
for (int i = 0; i < params.size(); i++) {
Integer temp = ObjectFormatUtil.toInteger(params.get(i));
@ -93,9 +98,11 @@ public class StockTakingController {
param.put("newInventory",map.get("newInventory"+temp));
param.put("takingResult",map.get("takingResult"+temp));
param.put("inventory",map.get("inventory"+temp));
param.put("temp",temp);
success += stockTakingService.insertStockTaking(param);
param.remove("id");
}
param.put("temp",map.get("temp"));
param.put("mid",map.get("mid"));
param.put("barCode",map.get("barCode"));
param.put("oldInventory",map.get("oldInventory"));
@ -106,7 +113,7 @@ public class StockTakingController {
Object mainId = param.get("mainId");
// 向企业微信发送消息
JSONObject jsonObject = qyWxOperationService.sendQyWxToStockTakingMessage(QyWxDepartmentManager.toString(), ObjectFormatUtil.toInteger(mainId));
JSONObject jsonObject = qyWxOperationService.sendQyWxToStockTakingDepartmentManagerMessage(QyWxDepartmentManager.toString(), ObjectFormatUtil.toInteger(mainId));
// 将当前返回结果保存到redis中
Map<String,Object> QyWxMessageMap = new HashMap<>();
QyWxMessageMap.put("MsgId",jsonObject.getString("msgid"));
@ -122,7 +129,7 @@ public class StockTakingController {
success += stockTakingService.insertStockTaking(map);
// 向企业微信发送消息
Object mainId = map.get("mainId");
JSONObject jsonObject = qyWxOperationService.sendQyWxToStockTakingMessage(QyWxDepartmentManager.toString(), ObjectFormatUtil.toInteger(mainId));
JSONObject jsonObject = qyWxOperationService.sendQyWxToStockTakingDepartmentManagerMessage(QyWxDepartmentManager.toString(), ObjectFormatUtil.toInteger(mainId));
// 将当前返回结果保存到redis中
Map<String,Object> QyWxMessageMap = new HashMap<>();
QyWxMessageMap.put("MsgId",jsonObject.getString("msgid"));
@ -164,7 +171,20 @@ public class StockTakingController {
}else {
return CrudUtil.postHandle(1, 1);
}
}
// 用于完成订单
@PostMapping("/complete")
public RestResponse complete(@RequestBody Map<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("inventory",map.get("invnetory5"));
map.remove("invnetory5");
Integer transfer = stockTakingService.stockTakingTransfer(map, userToken);
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;
/**
* 负责人审核意见1通过2驳回3待处理
*/
private Integer departmentManagerState;
/**
* 盘点发起人
*/
@ -51,10 +56,17 @@ public class StockTaking {
/**
* 审核时间
*/
private Long reviewTime;
/**
* 处理时间
*/
private Long completeTime;
/**
* 审核意见
*/
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);
/**
* 根据主键批量查询子表
* @param list
* @return
*/
List<StockTakingChildP> selectStockTakingChildByIds(List<Long> list);
/**
* 根据条件查询主表
* @param map
@ -145,6 +153,13 @@ public interface StockTakingMapper {
*/
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="placeId" property="placeId" 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="completeTime" property="completeTime" jdbcType="INTEGER" />
<result column="reviewTime" property="reviewTime" jdbcType="INTEGER" />
<result column="originator" property="originator" jdbcType="INTEGER" />
<result column="departmentManager" property="departmentManager" jdbcType="VARCHAR" />
<result column="auditOpinion" property="auditOpinion" jdbcType="VARCHAR" />
@ -40,7 +42,7 @@
<!-- 表查询字段 -->
<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 id="StockTakingChildPAllColumns">
@ -49,7 +51,7 @@
<!-- 插入主表-->
<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 (
#{id},
#{code},
@ -58,7 +60,8 @@
#{departmentManager},
#{state},
#{createTime},
#{originator}
#{originator},
#{departmentManagerState}
)
</insert>
@ -113,6 +116,9 @@
<if test="state != null and state != ''">
state = #{state},
</if>
<if test="departmentManagerState != null and departmentManagerState != ''">
departmentManagerState = #{departmentManagerState},
</if>
<if test="createTime != null and createTime != ''">
createTime = #{createTime},
</if>
@ -123,8 +129,12 @@
auditOpinion = #{auditOpinion},
</if>
<if test="completeTime != null and completeTime != ''">
completeTime = #{completeTime}
completeTime = #{completeTime},
</if>
<if test="reviewTime != null and reviewTime != ''">
reviewTime = #{reviewTime}
</if>
</set>
where id = #{id}
</update>
@ -162,6 +172,17 @@
where mainId = #{mainId}
</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
<include refid="StockTakingAllColumns"/>
@ -176,6 +197,9 @@
<if test="placeId != null">
and st.placeId = #{placeId}
</if>
<if test="departmentManagerState != null and departmentManagerState != ''">
and st.departmentManagerState = #{departmentManagerState}
</if>
<if test="departmentManager != null and departmentManager != ''">
and FIND_IN_SET(#{departmentManager},st.departmentManager) != 0
</if>
@ -235,7 +259,7 @@
where st.id = #{id}
</select>
<select id="selectStockTakingChildPById" parameterType="int" resultMap="StockTakingChildMap">
<select id="selectStockTakingChildPById" resultMap="StockTakingChildMap">
select
<include refid="StockTakingChildPAllColumns"/>
from stocktakingchildinfo
@ -248,10 +272,12 @@
from stocktaking st
where 1 = 1
<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 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 test="begin != null and size != null">
LIMIT #{begin},#{size}
@ -264,10 +290,12 @@
from stocktaking st
where 1 = 1
<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 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>
</select>

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

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

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

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

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

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

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

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

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

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

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

@ -61,14 +61,14 @@
<div class="layui-form-item">
<label class="layui-form-label">物料单价:</label>
<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">
</div>
</div>
<div class="layui-form-item">
<label class="layui-form-label">物料数量:</label>
<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">
</div>
</div>
@ -80,7 +80,7 @@
lay-verify="required"/>
<input type="text" name="depositoryId" class="layui-input" id="depositoryId" th:value="${depository.getId()}"
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"/>
</div>
</div>

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

@ -140,12 +140,17 @@
if (materialList.length > 0) {
for (let i = 0; i < materialList.length; i++) {
initForm(i, materialList[i]);
form.render();
var materialAndBarCodeList = materialList[i]["materialAndBarCodeList"];
var num = i;
if(num === 0){
num = "";
}
$.each(materialAndBarCodeList, function (index, item) {
$("#barCode"+i).append(new Option(item.bmcode, item.id));//往下拉菜单里添加元素
$("#barCode"+num).append(new Option(item.bmcode, item.id));//往下拉菜单里添加元素
});
form.render()
}
form.render()
} else {
var material = {};
material.mname = '';
@ -245,14 +250,14 @@
<div class="inputdiv">
<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 class="layui-form-item">
<label class="layui-form-label">物料单价:</label>
<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">
</div>
</div>
@ -445,6 +450,18 @@
class="layui-input" lay-verify="required">
</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">
<label class="layui-form-label">物料单价:</label>
<div class="layui-input-block">
@ -473,7 +490,7 @@
// 获取当前高度
var height = parseInt(($("#stepForm").css('height')).split("px")[0]);
params.push(NewIdNumber)
$("#stepForm").css("height", height + 475 + 'px');
$("#stepForm").css("height", height + 530 + 'px');
var materialItem = firstItem + depositoryItem + lastItem;
$("#" + parentId).after(materialItem);
};
@ -487,7 +504,7 @@
// 获取祖父节点
var reparent = parent.parentNode;
var height = parseInt(($("#stepForm").css('height')).split("px")[0]);
$("#stepForm").css("height", height - 475 + 'px');
$("#stepForm").css("height", height - 530 + 'px');
params = remove(params, parentId);
reparent.removeChild(parent);
};
@ -512,10 +529,19 @@
var code = obj.value;
// 获取对应元素
var parent = obj.parentNode.parentNode.parentNode;
var children = parent.childNodes[5];
var materialItem = children.childNodes[3].childNodes[1].childNodes;
var materialChildren = parent.childNodes[5];
var priceChildren = parent.childNodes[11];
var barCodeChildren = parent.childNodes[9];
// 物料条目
var materialItem = materialChildren.childNodes[3].childNodes[1].childNodes;
var materialName = materialItem[1];
var materialId = materialName.parentNode.parentNode.childNodes[3];
// 单价条目
var priceItem = priceChildren.childNodes[3].childNodes;
var priceValue = priceItem[1];
// 条形码条码
var barCodeItem = barCodeChildren.childNodes[3];
var req = {};
req.code = code;
req.type = "in";
@ -527,14 +553,44 @@
contentType: "application/json;charset=utf-8",
success: function (d) {
var d = d.data;
var idNumber = materialId.name.split("mid")[1];
if (d == null) {
layer.msg("没有该编码,请确认是否输入正确");
materialName.value = "";
materialId.value = "";
priceValue.value = "";
obj.value = "";
$("#barCode" + idNumber).remove();
form.render();
} else {
materialName.value = d.mname;
materialId.value = d.id;
priceValue.value = d.price;
// 获取物料与条形码的对应关系
var materialAndBarCodeList = d["materialAndBarCodeList"];
if (materialAndBarCodeList.length > 0) {
// 如果有对应的条形码
var barCodeInput = barCodeItem.childNodes[1].childNodes[1];
var barCodeImg = barCodeItem.childNodes[1].childNodes[3];
var id = barCodeInput.id;
$("#" + id).remove();
$("#barCode" + idNumber).empty();
var barCode = $("#barCode" + idNumber);
if (barCode.length > 0) {
barCode.empty();
} else {
var barCodeSelect = `
<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) {
var parent = obj.parentNode.parentNode.parentNode;

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

@ -23,6 +23,11 @@
margin-left: 80px;
}
.layui-form-select{
width: 100%;
border-style: none;
}
</style>
<div class="layuimini-container">
<div class="layuimini-main">
@ -215,7 +220,7 @@
complete: function () {
layer.close(this.layerIndex);
}
})
});
return false;
});
@ -269,7 +274,7 @@
value=""
class="layui-input"
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)">
</div>
</div>
@ -432,23 +437,25 @@
{
materialName.value = d.mname;
materialId.value = d.id;
var idNumber = materialId.name.split("mid")[1];
// 获取物料与条形码的对应关系
var materialAndBarCodeList = d["materialAndBarCodeList"];
if (materialAndBarCodeList.length > 0) {
// 如果有对应的条形码
var barCodeInput = barCodeItem.childNodes[1].childNodes[1];
var barCodeImg = barCodeItem.childNodes[1].childNodes[3];
console.log(barCodeItem)
var id = barCodeInput.id;
$("#" + id).remove();
$("#barCode").remove();
// barCodeInput.style = "display:none";
var idNumber = materialId.name.split("mid")[1];
var barCodeSelect = `
$("#"+id).remove();
$("#barCode"+idNumber).empty();
var barCode = $("#barCode"+idNumber);
if(barCode.length > 0) {
barCode.empty();
}else{
var barCodeSelect = `
<select id=` + "barCode" + idNumber + ` name=` + "barCode" + idNumber + `>
</select>`;
$("#" + barCodeImg.id).before(barCodeSelect);
$("#" + barCodeImg.id).before(barCodeSelect);
}
form.render();
$.each(materialAndBarCodeList, function (index, item) {
$("#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',
async: true,
dataType: "json",
complete: function (XHR, TS) {
if (XHR.status != 200) {
layer.alert("系统繁忙,稍后重试");
}
},
beforeSend: function () {
this.layerIndex = layer.load(0, {shade: [0.5, '#393D49']});
},
success: function (result) {
layer.close(this.layerIndex);
echartsRecords.setOption(optionRecords);
// 折线图
var optionRecordsSeries = [];
for (let i = 0; i < result.data.depository_name.length; i++) {
for (let i = 0; i < result.depository_name.length; i++) {
optionRecordsSeries.push({
name: result.data.depository_name[i],
name: result.depository_name[i],
type: 'line',
stack: '金额',
data: result.data.depository_data.data[result.data.depository_name[i]],
data: result.data[result.depository_name[i]],
areaStyle: {}
});
}
@ -506,7 +511,7 @@
}
},
legend: {
data: result.data.depository_name
data: result.depository_name
},
toolbox: {
feature: {
@ -523,7 +528,7 @@
{
type: 'category',
boundaryGap: false,
data: result.data.depository_data.week
data: result.week
}
],
yAxis: [
@ -536,7 +541,7 @@
echartsRecords.setOption(optionRecords);
}
})
})
});
form.on('submit(lastWeek)', function () {
$.ajax({
@ -549,16 +554,20 @@
layer.alert("系统繁忙,稍后重试");
}
},
beforeSend: function () {
this.layerIndex = layer.load(0, {shade: [0.5, '#393D49']});
},
success: function (result) {
layer.close(this.layerIndex);
echartsRecords.setOption(optionRecords);
// 折线图
var optionRecordsSeries = [];
for (let i = 0; i < result.data.depository_name.length; i++) {
for (let i = 0; i < result.depository_name.length; i++) {
optionRecordsSeries.push({
name: result.data.depository_name[i],
name: result.depository_name[i],
type: 'line',
stack: '金额',
data: result.data.depository_data.data[result.data.depository_name[i]],
data: result.data[result.depository_name[i]],
areaStyle: {}
});
}
@ -576,7 +585,7 @@
}
},
legend: {
data: result.data.depository_name
data: result.depository_name
},
toolbox: {
feature: {
@ -593,7 +602,7 @@
{
type: 'category',
boundaryGap: false,
data: result.data.depository_data.week
data: result.week
}
],
yAxis: [

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

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

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

@ -33,84 +33,14 @@
<!--<div class="layuimini-container">-->
<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-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>
<div class="layui-col-xs12 layui-col-md3">
@ -131,22 +61,23 @@
</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>
layui.use(['layer', 'echarts'], function () {
var $ = layui.jquery,
var $ = layui.jquery,
layer = layui.layer,
echarts = layui.echarts;
echarts = layui.echarts,
form = layui.form;
/**
* 报表功能
* 折线图
*/
var echartsRecords = echarts.init(document.getElementById('echarts-records'), 'walden');
var optionRecords = {
title: {
text: '入库仓库-报表图'
text: '仓库库存-报表图'
},
tooltip: {
trigger: 'axis',
@ -158,7 +89,7 @@
}
},
legend: {
data: ['外芯仓库', '义乌仓库', '宁波仓库', '杭州仓库', '北京仓库']
data: []
},
toolbox: {
feature: {
@ -175,7 +106,7 @@
{
type: 'category',
boundaryGap: false,
data: ['周一', '周二', '周三', '周四', '周五', '周六', '周日']
data: []
}
],
yAxis: [
@ -184,33 +115,6 @@
}
],
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: '北京仓库',
type: 'line',
@ -222,12 +126,10 @@
}
},
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 optionDataset = {
legend: {},
tooltip: {},
dataset: {
dimensions: ['product', '3月', '4月', '5月'],
dimensions: [],
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'},
yAxis: {},
// Declare several bar series, each will be mapped
// to a column of dataset.source by default.
series: [
{type: 'bar'},
{type: 'bar'},
@ -302,15 +196,11 @@
]
};
echartsDataset.setOption(optionDataset);
/**
* 中国地图
*/
var echartsMap = echarts.init(document.getElementById('echarts-map'), 'walden');
var optionMap = {
legend: {},
tooltip: {
@ -319,46 +209,322 @@
},
dataset: {
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'},
yAxis: {gridIndex: 0},
grid: {top: '55%'},
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 窗口缩放自适应
window.onresize = function () {
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>
</body>

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

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

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

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

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

@ -299,6 +299,11 @@
let placeId;
// 用于存储当前选择的负责人
let departmentManagerId;
// 用于存储没有对应关系的物料
let barCodeList = {};
let needToUpdate = {};
layui.use(['form', 'step', 'flow'], function () {
var $ = layui.$,
form = layui.form,
@ -374,6 +379,8 @@
form.on('submit(formStep)', function (data) {
data = data.field;
data.params = params;
data.needToUpdate = needToUpdate;
data.barCodeListByNoMaterial = barCodeList;
$.ajax({
url: "/stockTaking/addStockTakingRecord",
type: 'post',
@ -1081,7 +1088,9 @@
}
};
// 用于扫描条形码
scanBarCodeForTaking = function () {
scanBarCodeForTaking = function (obj) {
var id = obj.id;
id = id.split("barCodeImg")[1];
if (depositoryId !== undefined && departmentManagerId !== undefined && departmentManagerId !== "") {
layer.open({
type: 2,
@ -1106,6 +1115,7 @@
success: function (d) {
var data = d.data;
var materialList = data["materialList"];
var barCodeListByNoMaterial = data["barCodeListByNoMaterial"];
if (materialList.length > 0) {
for (let i = 1; i <= materialList.length; i++) {
Coverpage(i, materialList[i - 1]);
@ -1116,6 +1126,41 @@
}
form.render();
}
if(barCodeListByNoMaterial.length > 0){
// 如果扫描的条形码没有对应的物料
var content = '<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">
<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" 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"
@ -108,6 +109,7 @@
<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">
@ -119,6 +121,7 @@
<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">
@ -147,7 +150,7 @@
<label class="layui-form-label">材质:</label>
<div class="layui-input-block">
<input type="text" placeholder="请填写材质名称"
class="layui-input"
class="layui-input" readonly
th:value="${recordMin.getMtexture()}"
th:attr="id='texture'+${recordMin.getId()},name='texture'+${recordMin.getId()}"
/>
@ -157,7 +160,7 @@
<label class="layui-form-label">规格型号:</label>
<div class="layui-input-block">
<input type="text" placeholder="请填写规格型号"
class="layui-input"
class="layui-input" readonly
th:value="${recordMin.getMversion()}"
th:attr="id='version'+${recordMin.getId()},name='version'+${recordMin.getId()}"
/>
@ -167,7 +170,7 @@
<label class="layui-form-label">计量单位:</label>
<div class="layui-input-block">
<input type="text" placeholder="请填写计量单位"
class="layui-input"
class="layui-input" readonly
th:value="${recordMin.getMunit()}"
th:attr="id='unit'+${recordMin.getId()},name='unit'+${recordMin.getId()}"
/>
@ -185,7 +188,7 @@
<div class="layui-form-item">
<label class="layui-form-label">盘点数量:</label>
<div class="layui-input-block">
<input type="number" class="layui-input"
<input type="number" class="layui-input" readonly
th:value="${recordMin.getNewInventory()}"
th:attr="id='newInventory'+${recordMin.getId()},name='newInventory'+${recordMin.getId()}"
lay-verify="required"/>
@ -195,7 +198,7 @@
<label class="layui-form-label">盘点结果:</label>
<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:attr="id='takingResult'+${recordMin.getId()},name='takingResult'+${recordMin.getId()}"
lay-verify="required"/>
@ -205,7 +208,6 @@
<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"/>
@ -218,21 +220,12 @@
</fieldset>
<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">
<label class="layui-form-label">审核备注:</label>
<div class="layui-input-block">
<textarea id="auditOpinion" name="auditOpinion" placeholder="请填写相关原因及申请原因" value="" class="layui-textarea"></textarea>
</div>
</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 type="button" class="layui-btn" onclick="complete(1)">
&emsp;处理&emsp;
</button>
</div>
</div>
@ -251,15 +244,16 @@
<script src="/static/js/lay-config.js?v=1.0.4" charset="utf-8"></script>
<script>
function review(data){}
layui.use(['form','step','element'], function () {
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 = 2;
states = [ {title: "待审核"}];
var position = 0, states = {}, number = 3;
states = [{title: "待处理"}];
// 用于分步表单加载
step.render({
elem: '#stepForm',
@ -268,74 +262,36 @@
stepWidth: '750px',
height: '1495px',
position: position,
number:number,
number: number,
stepItems: states
});
// 用于获取审核结果与审核的单号
review=function (pass) {
complete = function (pass) {
let data = {};
data.mainId = $("#mainId").val();
data.auditOpinion = $("#auditOpinion").val();
data.departmentManagerState = pass;
data.state = pass;
$.ajax({
url:"/stockTaking/review",
type:'post',
dataType:'json',
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'] });
data: JSON.stringify(data),
beforeSend: function () {
this.layerIndex = layer.load(0, {shade: [0.5, '#393D49']});
},
success:function(d){
success: function (d) {
layer.close(this.layerIndex);
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;
});
}
}
});
});
if (d.status >= 300) {
}
else{
} else {
layer.msg("提交成功", {
icon: 6,//成功的表情
time: 500 //1秒关闭(如果不配置,默认是3秒)
}, function(){
window.location = '/StockTakingView?id='+data.mainId;
}, function () {
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>
<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:attr="id='takingResult'+${recordMin.getId()},name='takingResult'+${recordMin.getId()}"
lay-verify="required"/>
@ -279,7 +279,7 @@
let data = {};
data.mainId = $("#mainId").val();
data.auditOpinion = $("#auditOpinion").val();
data.state = pass;
data.departmentManagerState = pass;
$.ajax({
url:"/stockTaking/review",
@ -304,12 +304,13 @@
skin: 'layui-layer-rim',
maxmin: true,
shadeClose: true, //点击遮罩关闭层
area: ['70%', '70%'],
area: ['100%', '100%'],
move: '.layui-layer-title',
fixed: false,
content: '/stockTakingTransfer?minIds='+errMsg.errIds,
end: function (res) {
if(res.status >= 300){
layer.close(layer.index);
layer.msg("提交失败,联系开发人员解决", {
icon: 5,//成功的表情
time: 500 //1秒关闭(如果不配置,默认是3秒)
@ -317,6 +318,7 @@
window.location = '/StockTakingView?id='+data.mainId;
});
}else{
layer.close(layer.index);
layer.msg("提交成功", {
icon: 6,//成功的表情
time: 500 //1秒关闭(如果不配置,默认是3秒)

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

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

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

@ -282,7 +282,9 @@
icon: 6,//成功的表情
time: 500 //1秒关闭(如果不配置,默认是3秒)
}, function () {
step.next('#stepForm');
// 关闭当前页
var index = parent.layer.getFrameIndex(window.name);
parent.layer.close(index);
});
},
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.SecretKey;
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.xml.parsers.DocumentBuilder;
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:
username: root
password: root
username: depository
password: NhE47edekBHxhjYk
url: jdbc:mysql://localhost:3306/depository?serverTimezone=Asia/Shanghai&zeroDateTimeBehavior=convertToNull
driver-class-name: com.mysql.cj.jdbc.Driver
type: com.alibaba.druid.pool.DruidDataSource

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

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

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

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

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

@ -61,14 +61,14 @@
<div class="layui-form-item">
<label class="layui-form-label">物料单价:</label>
<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">
</div>
</div>
<div class="layui-form-item">
<label class="layui-form-label">物料数量:</label>
<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">
</div>
</div>
@ -80,7 +80,7 @@
lay-verify="required"/>
<input type="text" name="depositoryId" class="layui-input" id="depositoryId" th:value="${depository.getId()}"
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"/>
</div>
</div>

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

@ -140,12 +140,17 @@
if (materialList.length > 0) {
for (let i = 0; i < materialList.length; i++) {
initForm(i, materialList[i]);
form.render();
var materialAndBarCodeList = materialList[i]["materialAndBarCodeList"];
var num = i;
if(num === 0){
num = "";
}
$.each(materialAndBarCodeList, function (index, item) {
$("#barCode"+i).append(new Option(item.bmcode, item.id));//往下拉菜单里添加元素
$("#barCode"+num).append(new Option(item.bmcode, item.id));//往下拉菜单里添加元素
});
form.render()
}
form.render()
} else {
var material = {};
material.mname = '';
@ -245,14 +250,14 @@
<div class="inputdiv">
<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 class="layui-form-item">
<label class="layui-form-label">物料单价:</label>
<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">
</div>
</div>
@ -445,6 +450,18 @@
class="layui-input" lay-verify="required">
</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">
<label class="layui-form-label">物料单价:</label>
<div class="layui-input-block">
@ -473,7 +490,7 @@
// 获取当前高度
var height = parseInt(($("#stepForm").css('height')).split("px")[0]);
params.push(NewIdNumber)
$("#stepForm").css("height", height + 475 + 'px');
$("#stepForm").css("height", height + 530 + 'px');
var materialItem = firstItem + depositoryItem + lastItem;
$("#" + parentId).after(materialItem);
};
@ -487,7 +504,7 @@
// 获取祖父节点
var reparent = parent.parentNode;
var height = parseInt(($("#stepForm").css('height')).split("px")[0]);
$("#stepForm").css("height", height - 475 + 'px');
$("#stepForm").css("height", height - 530 + 'px');
params = remove(params, parentId);
reparent.removeChild(parent);
};
@ -512,10 +529,19 @@
var code = obj.value;
// 获取对应元素
var parent = obj.parentNode.parentNode.parentNode;
var children = parent.childNodes[5];
var materialItem = children.childNodes[3].childNodes[1].childNodes;
var materialChildren = parent.childNodes[5];
var priceChildren = parent.childNodes[11];
var barCodeChildren = parent.childNodes[9];
// 物料条目
var materialItem = materialChildren.childNodes[3].childNodes[1].childNodes;
var materialName = materialItem[1];
var materialId = materialName.parentNode.parentNode.childNodes[3];
// 单价条目
var priceItem = priceChildren.childNodes[3].childNodes;
var priceValue = priceItem[1];
// 条形码条码
var barCodeItem = barCodeChildren.childNodes[3];
var req = {};
req.code = code;
req.type = "in";
@ -527,14 +553,44 @@
contentType: "application/json;charset=utf-8",
success: function (d) {
var d = d.data;
var idNumber = materialId.name.split("mid")[1];
if (d == null) {
layer.msg("没有该编码,请确认是否输入正确");
materialName.value = "";
materialId.value = "";
priceValue.value = "";
obj.value = "";
$("#barCode" + idNumber).remove();
form.render();
} else {
materialName.value = d.mname;
materialId.value = d.id;
priceValue.value = d.price;
// 获取物料与条形码的对应关系
var materialAndBarCodeList = d["materialAndBarCodeList"];
if (materialAndBarCodeList.length > 0) {
// 如果有对应的条形码
var barCodeInput = barCodeItem.childNodes[1].childNodes[1];
var barCodeImg = barCodeItem.childNodes[1].childNodes[3];
var id = barCodeInput.id;
$("#" + id).remove();
$("#barCode" + idNumber).empty();
var barCode = $("#barCode" + idNumber);
if (barCode.length > 0) {
barCode.empty();
} else {
var barCodeSelect = `
<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) {
var parent = obj.parentNode.parentNode.parentNode;

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

@ -23,6 +23,11 @@
margin-left: 80px;
}
.layui-form-select{
width: 100%;
border-style: none;
}
</style>
<div class="layuimini-container">
<div class="layuimini-main">
@ -215,7 +220,7 @@
complete: function () {
layer.close(this.layerIndex);
}
})
});
return false;
});
@ -269,7 +274,7 @@
value=""
class="layui-input"
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)">
</div>
</div>
@ -432,23 +437,25 @@
{
materialName.value = d.mname;
materialId.value = d.id;
var idNumber = materialId.name.split("mid")[1];
// 获取物料与条形码的对应关系
var materialAndBarCodeList = d["materialAndBarCodeList"];
if (materialAndBarCodeList.length > 0) {
// 如果有对应的条形码
var barCodeInput = barCodeItem.childNodes[1].childNodes[1];
var barCodeImg = barCodeItem.childNodes[1].childNodes[3];
console.log(barCodeItem)
var id = barCodeInput.id;
$("#" + id).remove();
$("#barCode").remove();
// barCodeInput.style = "display:none";
var idNumber = materialId.name.split("mid")[1];
var barCodeSelect = `
$("#"+id).remove();
$("#barCode"+idNumber).empty();
var barCode = $("#barCode"+idNumber);
if(barCode.length > 0) {
barCode.empty();
}else{
var barCodeSelect = `
<select id=` + "barCode" + idNumber + ` name=` + "barCode" + idNumber + `>
</select>`;
$("#" + barCodeImg.id).before(barCodeSelect);
$("#" + barCodeImg.id).before(barCodeSelect);
}
form.render();
$.each(materialAndBarCodeList, function (index, item) {
$("#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',
async: true,
dataType: "json",
complete: function (XHR, TS) {
if (XHR.status != 200) {
layer.alert("系统繁忙,稍后重试");
}
},
beforeSend: function () {
this.layerIndex = layer.load(0, {shade: [0.5, '#393D49']});
},
success: function (result) {
layer.close(this.layerIndex);
echartsRecords.setOption(optionRecords);
// 折线图
var optionRecordsSeries = [];
for (let i = 0; i < result.data.depository_name.length; i++) {
for (let i = 0; i < result.depository_name.length; i++) {
optionRecordsSeries.push({
name: result.data.depository_name[i],
name: result.depository_name[i],
type: 'line',
stack: '金额',
data: result.data.depository_data.data[result.data.depository_name[i]],
data: result.data[result.depository_name[i]],
areaStyle: {}
});
}
@ -506,7 +511,7 @@
}
},
legend: {
data: result.data.depository_name
data: result.depository_name
},
toolbox: {
feature: {
@ -523,7 +528,7 @@
{
type: 'category',
boundaryGap: false,
data: result.data.depository_data.week
data: result.week
}
],
yAxis: [
@ -536,7 +541,7 @@
echartsRecords.setOption(optionRecords);
}
})
})
});
form.on('submit(lastWeek)', function () {
$.ajax({
@ -549,16 +554,20 @@
layer.alert("系统繁忙,稍后重试");
}
},
beforeSend: function () {
this.layerIndex = layer.load(0, {shade: [0.5, '#393D49']});
},
success: function (result) {
layer.close(this.layerIndex);
echartsRecords.setOption(optionRecords);
// 折线图
var optionRecordsSeries = [];
for (let i = 0; i < result.data.depository_name.length; i++) {
for (let i = 0; i < result.depository_name.length; i++) {
optionRecordsSeries.push({
name: result.data.depository_name[i],
name: result.depository_name[i],
type: 'line',
stack: '金额',
data: result.data.depository_data.data[result.data.depository_name[i]],
data: result.data[result.depository_name[i]],
areaStyle: {}
});
}
@ -576,7 +585,7 @@
}
},
legend: {
data: result.data.depository_name
data: result.depository_name
},
toolbox: {
feature: {
@ -593,7 +602,7 @@
{
type: 'category',
boundaryGap: false,
data: result.data.depository_data.week
data: result.week
}
],
yAxis: [

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

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

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

@ -33,84 +33,14 @@
<!--<div class="layuimini-container">-->
<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-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>
<div class="layui-col-xs12 layui-col-md3">
@ -131,22 +61,23 @@
</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>
layui.use(['layer', 'echarts'], function () {
var $ = layui.jquery,
var $ = layui.jquery,
layer = layui.layer,
echarts = layui.echarts;
echarts = layui.echarts,
form = layui.form;
/**
* 报表功能
* 折线图
*/
var echartsRecords = echarts.init(document.getElementById('echarts-records'), 'walden');
var optionRecords = {
title: {
text: '入库仓库-报表图'
text: '仓库库存-报表图'
},
tooltip: {
trigger: 'axis',
@ -158,7 +89,7 @@
}
},
legend: {
data: ['外芯仓库', '义乌仓库', '宁波仓库', '杭州仓库', '北京仓库']
data: []
},
toolbox: {
feature: {
@ -175,7 +106,7 @@
{
type: 'category',
boundaryGap: false,
data: ['周一', '周二', '周三', '周四', '周五', '周六', '周日']
data: []
}
],
yAxis: [
@ -184,33 +115,6 @@
}
],
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: '北京仓库',
type: 'line',
@ -222,12 +126,10 @@
}
},
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 optionDataset = {
legend: {},
tooltip: {},
dataset: {
dimensions: ['product', '3月', '4月', '5月'],
dimensions: [],
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'},
yAxis: {},
// Declare several bar series, each will be mapped
// to a column of dataset.source by default.
series: [
{type: 'bar'},
{type: 'bar'},
@ -302,15 +196,11 @@
]
};
echartsDataset.setOption(optionDataset);
/**
* 中国地图
*/
var echartsMap = echarts.init(document.getElementById('echarts-map'), 'walden');
var optionMap = {
legend: {},
tooltip: {
@ -319,46 +209,322 @@
},
dataset: {
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'},
yAxis: {gridIndex: 0},
grid: {top: '55%'},
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 窗口缩放自适应
window.onresize = function () {
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>
</body>

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

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

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

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

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

@ -299,6 +299,11 @@
let placeId;
// 用于存储当前选择的负责人
let departmentManagerId;
// 用于存储没有对应关系的物料
let barCodeList = {};
let needToUpdate = {};
layui.use(['form', 'step', 'flow'], function () {
var $ = layui.$,
form = layui.form,
@ -374,6 +379,8 @@
form.on('submit(formStep)', function (data) {
data = data.field;
data.params = params;
data.needToUpdate = needToUpdate;
data.barCodeListByNoMaterial = barCodeList;
$.ajax({
url: "/stockTaking/addStockTakingRecord",
type: 'post',
@ -1081,7 +1088,9 @@
}
};
// 用于扫描条形码
scanBarCodeForTaking = function () {
scanBarCodeForTaking = function (obj) {
var id = obj.id;
id = id.split("barCodeImg")[1];
if (depositoryId !== undefined && departmentManagerId !== undefined && departmentManagerId !== "") {
layer.open({
type: 2,
@ -1106,6 +1115,7 @@
success: function (d) {
var data = d.data;
var materialList = data["materialList"];
var barCodeListByNoMaterial = data["barCodeListByNoMaterial"];
if (materialList.length > 0) {
for (let i = 1; i <= materialList.length; i++) {
Coverpage(i, materialList[i - 1]);
@ -1116,6 +1126,41 @@
}
form.render();
}
if(barCodeListByNoMaterial.length > 0){
// 如果扫描的条形码没有对应的物料
var content = '<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>
<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:attr="id='takingResult'+${recordMin.getId()},name='takingResult'+${recordMin.getId()}"
lay-verify="required"/>
@ -279,7 +279,7 @@
let data = {};
data.mainId = $("#mainId").val();
data.auditOpinion = $("#auditOpinion").val();
data.state = pass;
data.departmentManagerState = pass;
$.ajax({
url:"/stockTaking/review",
@ -304,12 +304,13 @@
skin: 'layui-layer-rim',
maxmin: true,
shadeClose: true, //点击遮罩关闭层
area: ['70%', '70%'],
area: ['100%', '100%'],
move: '.layui-layer-title',
fixed: false,
content: '/stockTakingTransfer?minIds='+errMsg.errIds,
end: function (res) {
if(res.status >= 300){
layer.close(layer.index);
layer.msg("提交失败,联系开发人员解决", {
icon: 5,//成功的表情
time: 500 //1秒关闭(如果不配置,默认是3秒)
@ -317,6 +318,7 @@
window.location = '/StockTakingView?id='+data.mainId;
});
}else{
layer.close(layer.index);
layer.msg("提交成功", {
icon: 6,//成功的表情
time: 500 //1秒关闭(如果不配置,默认是3秒)

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

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

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

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

Loading…
Cancel
Save