Browse Source

解决bug:

1.当审批人不在企业微信通知中直接点同意时(在仓储系统中进行审批时),有平衡岗的流程在平衡岗和综合办负责人处陷入无限循环审批
2.出库申请填写页面,不输入物料数量也可以提交造成后台500错误
3.出库完成后,因Redis原因某些流程状态未更正为已完成
4.无法扫码出库(原因:1.出库申请的前端页面和后台逻辑中,物料编码,库存id,仓库id对应关系错误。如选择了a仓库,提交后却变为b仓库,a仓库的库存id被设置为b仓库的库存id,2.系统审批流程所有数据存储完全依赖Redis缓存,没有做redis和mysql的数据同步 3.获取到的仓库列表错误)
5.出库申请填写页面,三种选择物料的方式获取的仓库列表不同,其中只有输入物料编码获取到的仓库列表是正确的仓库列表。
6.出库申请选择仓库时当中心仓办公用品库和前置仓办公用品库都有同一个物料时,均显示为办公用品库,用户无法区分
7.某些审批人接收不到企业微信的审批通知
8.出库申请提交后仓库被篡改bug
9.库存出现了负数,用户反应库存数目和实际数目对不上
liwx
liwenxuan 2 years ago
parent
commit
9c3f8e613e
  1. 78
      src/main/java/com/dreamchaser/depository_manage/controller/DepositoryRecordController.java
  2. 338
      src/main/java/com/dreamchaser/depository_manage/controller/MaterialController.java
  3. 1
      src/main/java/com/dreamchaser/depository_manage/controller/PageController.java
  4. 2
      src/main/java/com/dreamchaser/depository_manage/controller/StockTakingController.java
  5. 2
      src/main/java/com/dreamchaser/depository_manage/controller/UserController.java
  6. 7
      src/main/java/com/dreamchaser/depository_manage/depository_mapper/QrCodeMapper.java
  7. 8
      src/main/java/com/dreamchaser/depository_manage/depository_mapper/QrCodeMapper.xml
  8. 3
      src/main/java/com/dreamchaser/depository_manage/depository_mapper/RedisfifteenMinRecordMapper.java
  9. 8
      src/main/java/com/dreamchaser/depository_manage/depository_mapper/RedisfifteenMinRecordMapper.xml
  10. 2
      src/main/java/com/dreamchaser/depository_manage/depository_mapper/RedisfifteenUserMapper.java
  11. 8
      src/main/java/com/dreamchaser/depository_manage/depository_mapper/RedisfifteenUserMapper.xml
  12. 9
      src/main/java/com/dreamchaser/depository_manage/entity/Depository.java
  13. 9
      src/main/java/com/dreamchaser/depository_manage/entity/RedisfifteenUser.java
  14. 15
      src/main/java/com/dreamchaser/depository_manage/intercepter/UserInterceptor.java
  15. 2
      src/main/java/com/dreamchaser/depository_manage/service/MaterialService.java
  16. 3
      src/main/java/com/dreamchaser/depository_manage/service/RedisfifteenMinRecordService.java
  17. 2
      src/main/java/com/dreamchaser/depository_manage/service/RedisfifteenUserService.java
  18. 466
      src/main/java/com/dreamchaser/depository_manage/service/impl/DepositoryRecordServiceImpl.java
  19. 27
      src/main/java/com/dreamchaser/depository_manage/service/impl/MaterialServiceImpl.java
  20. 20
      src/main/java/com/dreamchaser/depository_manage/service/impl/QyWxOperationService.java
  21. 6
      src/main/java/com/dreamchaser/depository_manage/service/impl/RedisfifteenMinRecordServiceImpl.java
  22. 5
      src/main/java/com/dreamchaser/depository_manage/service/impl/RedisfifteenUserServiceImpl.java
  23. 2
      src/main/java/com/dreamchaser/depository_manage/service/impl/SplitUnitServiceImpl.java
  24. 27
      src/main/java/com/dreamchaser/depository_manage/service/impl/StockTakingServiceImpl.java
  25. 136
      src/main/java/com/dreamchaser/depository_manage/utils/RedisSynchronizeMysqlUtil.java
  26. 7
      src/main/resources/application-test.yml
  27. 1
      src/main/resources/templates/pages/application/application-in.html
  28. 662
      src/main/resources/templates/pages/application/application-out.html
  29. 2
      src/main/resources/templates/pages/application/application-out_min-mobile.html
  30. 100
      src/main/resources/templates/pages/application/application-review.html
  31. 4
      src/main/resources/templates/pages/application/form-step-look_back.html
  32. 248
      src/main/resources/templates/pages/applicationForStorageCenter/application-out.html
  33. 2
      src/main/resources/templates/pages/scanQrCode/ScanBarCodeByNew.html
  34. 2
      src/main/resources/templates/pages/scanQrCode/ScanBarCodeForTaking.html
  35. 27
      src/main/resources/templates/pages/scanQrCode/ScanBarOrQrCodeOut.html
  36. 2
      src/main/resources/templates/pages/scanQrCode/ScanBarOrQrCodeOut_selectMaterial.html
  37. 2
      src/main/resources/templates/pages/scanQrCode/ScanCodeByTaking.html
  38. 2
      src/main/resources/templates/pages/scanQrCode/ScanMaterialCodeForTaking.html
  39. 2
      src/main/resources/templates/pages/scanQrCode/ScanQrCode.html
  40. 2
      src/main/resources/templates/pages/scanQrCode/ScanQrCodeIn.html
  41. 2
      src/main/resources/templates/pages/scanQrCode/scanQrCodeOut.html
  42. 2
      src/main/resources/templates/pages/scanQrCode/scanQrCodeTransfer.html

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

@ -62,12 +62,12 @@ public class DepositoryRecordController {
@Autowired
private UserService userService;
//redis15 mysql 都查询
@Autowired
private RedisfifteenUser redisfifteenUser;
/*@Autowired
private RedisfifteenUser redisfifteenUser;*/
@Autowired
private RedisfifteenUserService redisfifteenUserService;
@Autowired
private RedisfifteenMinRecord redisfifteenMinRecord;
/*@Autowired
private RedisfifteenMinRecord redisfifteenMinRecord;*/
@Autowired
private RedisfifteenMinRecordService redisfifteenMinRecordService;
/* @Autowired
@ -239,15 +239,22 @@ public class DepositoryRecordController {
simpleApplicationOutMinRecordP.setCode(applicationOutRecordPById.getCode());
List<Object> objectList = (List<Object>) userManageHouse.get(depositoryRecordById.getCode());
if (objectList == null) {
objectList = new ArrayList<>();
objectList = new ArrayList<>();//-----------------------system.out.println("zhuan")
}
objectList.add(simpleApplicationOutMinRecordP);
userManageHouse.put(depositoryRecordById.getCode(), objectList);
}
return new RestResponse(userManageHouse);
}*/
//
//
}*/
//System.out.println(objectList.toString())
//return new RestResponse(userManageHouse);
//List<SimpleApplicationOutMinRecordP> result = new ArrayList<>();system.out.println(objectList.notsweetanddelicerousenough
//
// 查找当前用户所有的扫码出库订单
//redis and mysql
@ -266,9 +273,10 @@ public class DepositoryRecordController {
String minRecord = (String) redisPool.getRedisTemplateByDb(15).opsForHash().get(key, "minRecord");
//mysql
if(minRecord==null){//redis里查不到再去mysql查一次.
//redisfifteenUser.setUser(userToken.getId().toString());
redisfifteenUser.setUser("714");//测试,当前登录用户先改成刘畅 上线要改回来,李文轩 liwenxuan
List<RedisfifteenUser> redisfifteenUsers = redisfifteenUserService.queryRedisfifteenUser(redisfifteenUser);
RedisfifteenUser redisfifteenUser_1 = new RedisfifteenUser();
redisfifteenUser_1.setUser(userToken.getId().toString());
//redisfifteenUser.setUser("714");//测试,当前登录用户先改成刘畅 上线要改回来,李文轩 liwenxuan
List<RedisfifteenUser> redisfifteenUsers = redisfifteenUserService.queryRedisfifteenUser(redisfifteenUser_1);
if(redisfifteenUsers.size()>0){
if(redisfifteenUsers.size()>1){
throw new MyException("redisfifteenUsers超过一条记录!");
@ -293,11 +301,15 @@ public class DepositoryRecordController {
//redis中若查不到,mysql中再查一次
if(state==null){
String[] valueArray = value.split(":");
redisfifteenMinRecord.setMinRecord(valueArray[1]);
List<RedisfifteenMinRecord> redisfifteenMinRecords = redisfifteenMinRecordService.queryRedisfifteenMinRecord(redisfifteenMinRecord);
RedisfifteenMinRecord redisfifteenMinRecord_2 = new RedisfifteenMinRecord();
redisfifteenMinRecord_2.setMinRecord(valueArray[1]);
List<RedisfifteenMinRecord> redisfifteenMinRecords = redisfifteenMinRecordService.queryRedisfifteenMinRecord(redisfifteenMinRecord_2);
if(redisfifteenMinRecords.size()>0){
state = redisfifteenMinRecords.get(0).getState();
}
}
if ("1".equals(state)) {
// 如果当前订单未完成
ongoingSplit.append(value).append(",");
@ -383,6 +395,7 @@ public class DepositoryRecordController {
@PostMapping("/applicationIn")
@Transactional(rollbackFor = Exception.class)
public RestResponse insertApplicationInRecord(@RequestBody Map<String, Object> map, HttpServletRequest request) {
String header = request.getHeader("user-agent");
String crypt = Md5.crypt(header);
String token = request.getHeader("user-token");
@ -613,6 +626,8 @@ public class DepositoryRecordController {
int classes = mt.getClasses();
Long uid = mt.getUid();
//liwenxuan 测试环境 上线要改回来 将出库管理员的审批改为开发者.
//uid = 9458L;
if (classes == 1) {
// 如果是个人
@ -674,6 +689,8 @@ public class DepositoryRecordController {
int classes = mt.getClasses();
Long uid = mt.getUserId();
//liwenxuan 测试环境 上线要改回来 将出库管理员的审批改为开发者.
//uid = 9458L;
if (classes == 1) {
// 如果是个人
@ -758,7 +775,7 @@ public class DepositoryRecordController {
//李文轩liwenxuan 测试配置 start
departmentHeadId = new StringBuilder("9458").append(",");
//李文轩 liwenxuan测试配置 end
// departmentHeadId = new StringBuilder("78").append(",");
map.put("departmenthead", departmentHeadId.toString());
List<Integer> params = ObjectFormatUtil.objToList(map.get("params"), Integer.class);
Integer integer = 0;
@ -842,6 +859,8 @@ public class DepositoryRecordController {
insert.put("placeId", map.get("placeId"));
insert.put("unit", map.get("unit" + temp));
insert.put("project", map.get("project" + temp));
//20230907 liwenxuan 修复提交后仓库变更bug 不行
insert.put("depositoryId",map.get("depositoryId" + temp));
// 获取主订单编号
insert.put("parentId", id);
// 插入子订单
@ -1063,6 +1082,14 @@ public class DepositoryRecordController {
}
// 当前仓库中该用户的子订单详情
/**
* rangwozaikanqingnideliansuiwuyanleimanmianrenleishuipumanleshuangyanzhiyaonidepingfan
* @param map
* @param request
* @return
* kexinicongweixintengwodebendaitinipeizhewodeshinianlun
*/
@GetMapping("/ApplicationOutMinByDid")
public RestResponse ApplicationOutMinByDid(@RequestParam Map<String, Object> map, HttpServletRequest request) {
List<SimpleApplicationOutMinRecordP> applicationOutRecordMinList = new ArrayList<>();
@ -1079,14 +1106,15 @@ public class DepositoryRecordController {
// 获取当前仓库信息
Depository depositoryRecordById = depositoryService.findDepositoryById(depositoryId);
//李文轩测试 liwenxuan 上线要改回来
String minRecord = (String) redisPool.getRedisTemplateByDb(15).opsForHash().get("user:" + "714", "minRecord");
//String minRecord = (String) redisPool.getRedisTemplateByDb(15).opsForHash().get("user:" + "714", "minRecord");
// 获取当前用户要处理的记录信息
//String minRecord = (String) redisPool.getRedisTemplateByDb(15).opsForHash().get("user:" + userToken.getId(), "minRecord");
String minRecord = (String) redisPool.getRedisTemplateByDb(15).opsForHash().get("user:" + userToken.getId(), "minRecord");
//mysql
if(minRecord==null){//redis里查不到再去mysql查一次.
//redisfifteenUser.setUser(userToken.getId().toString());
redisfifteenUser.setUser("714");//测试,当前登录用户先改成刘畅 上线要改回来,李文轩 liwenxuan
List<RedisfifteenUser> redisfifteenUsers = redisfifteenUserService.queryRedisfifteenUser(redisfifteenUser);
RedisfifteenUser redisfifteenUser_3 = new RedisfifteenUser();
redisfifteenUser_3.setUser(userToken.getId().toString());
//redisfifteenUser.setUser("714");//测试,当前登录用户先改成刘畅 上线要改回来,李文轩 liwenxuan
List<RedisfifteenUser> redisfifteenUsers = redisfifteenUserService.queryRedisfifteenUser(redisfifteenUser_3);
if(redisfifteenUsers.size()>0){
if(redisfifteenUsers.size()>1){
throw new MyException("redisfifteenUsers超过一条记录!");
@ -1122,11 +1150,15 @@ public class DepositoryRecordController {
//redis中若查不到,mysql中再查一次
if(state==null){
String[] valueArray = s.split(":");
redisfifteenMinRecord.setMinRecord(valueArray[1]);
List<RedisfifteenMinRecord> redisfifteenMinRecords = redisfifteenMinRecordService.queryRedisfifteenMinRecord(redisfifteenMinRecord);
RedisfifteenMinRecord redisfifteenMinRecord_4 = new RedisfifteenMinRecord();
redisfifteenMinRecord_4.setMinRecord(valueArray[1]);
List<RedisfifteenMinRecord> redisfifteenMinRecords = redisfifteenMinRecordService.queryRedisfifteenMinRecord(redisfifteenMinRecord_4);
if(redisfifteenMinRecords.size()>0){
state = redisfifteenMinRecords.get(0).getState();
}
}
if ("1".equals(state)) {
// 如果当前订单未完成
state = "进行中";
@ -1620,7 +1652,7 @@ public class DepositoryRecordController {
List<UserByPort> managerList = new ArrayList<>();
for (ApplicationOutRecordMinP recordMinP : applicationOutMinByParentId) {
Long checkId = recordMinP.getCheckId();
if (checkId == null) {
if (checkId == null) {//checkId为出货人编号
// 如果当前未完成出库
// 构造redis中的key
@ -1629,9 +1661,11 @@ public class DepositoryRecordController {
Object managers = redisPool.getRedisTemplateByDb(15).opsForHash().get(minKey, "manager");
//redis里查不到则mysql里再查一次.
if(managers==null){
String minRecordParam = Long.toString(recordMinP.getId()) ;
redisfifteenMinRecord.setMinRecord(minRecordParam);
List<RedisfifteenMinRecord> redisfifteenMinRecords = redisfifteenMinRecordService.queryRedisfifteenMinRecord(redisfifteenMinRecord);
RedisfifteenMinRecord redisfifteenMinRecord_5 = new RedisfifteenMinRecord();
redisfifteenMinRecord_5.setMinRecord(minRecordParam);
List<RedisfifteenMinRecord> redisfifteenMinRecords = redisfifteenMinRecordService.queryRedisfifteenMinRecord(redisfifteenMinRecord_5);
if(redisfifteenMinRecords.size()>0){
if(redisfifteenMinRecords.size()>1){
throw new MyException("redisfifteenMinRecords结果大于1");

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

@ -460,6 +460,97 @@ public class MaterialController {
}
/**
* 根据id获取物料
*
* @param mid 物料id
* @return
*/
@GetMapping("/findMatrialByIdVersion2")
public RestResponse findMaterialByIdVersion2(@RequestParam(value = "mid", required = false) String mid, @RequestParam(value = "type", required = false) String type, HttpServletRequest request) {
String token = request.getHeader("user-token");
if (token == null) {
token = (String) request.getSession().getAttribute("userToken");
}
UserByPort userToken = AuthenticationTokenPool.getUserToken(token);
if ("".equals(mid)) {
return new RestResponse("", 0, 200);
}
Map<String, Object> map = new HashMap<>();
Material materialById = materialService.findMaterialById(ObjectFormatUtil.toLong(mid));
String mcode = materialById.getCode();
Inventory inventoryById = null;
if ("out".equals(type)) {
inventoryById = materialService.findInventoryById(ObjectFormatUtil.toLong(mid));
mcode = inventoryById.getCode();
}
List<PlaceP> placePList = new ArrayList<>();
List<Depository> depositoryByAdminorg = depositoryService.findDepositoryByAdminorg(userToken.getMaindeparment().toString());
for (Depository depository : depositoryByAdminorg) {
List<PlaceP> placeByMidAndDid = placeService.findPlaceByMidAndDid(ObjectFormatUtil.toLong(mid), depository.getId());
placePList.addAll(placeByMidAndDid);
}
Map<String, Object> param = new HashMap<>();
param.put("mcode", mcode);
//inventoryPS 各仓库库位所有有该物料库存信息
List<InventoryP> inventoryPS = materialService.findInventory(param);
Map<String, Object> paramByBarcode = new HashMap<>();
paramByBarcode.put("mcode", mcode);
paramByBarcode.put("codeFlag", 1);
List<MaterialAndBarCode> materialByBarCodeByCondition = materialService.findMaterialByBarCodeByCondition(paramByBarcode);
if (inventoryPS.size() > 0) {
List<Long> depositoryIdList = roleService.findDepositoryIdForWareHouseVisiblePermissionByUser(userToken);
List<Long> depositoryIdList1 = roleService.findDepositoryIdForUserHas(userToken);
List<Long> tempDepositoryID = new ArrayList<>();
List<Long> tempDepositoryID1 = new ArrayList<>();
List<Long> tempDepositoryID2 = new ArrayList<>();
for (InventoryP inventory : inventoryPS
) {
tempDepositoryID.add(inventory.getDepositoryId());
}
//修改bug---应该是取交集而不是取并集.
tempDepositoryID2 = (List<Long>) CollectionUtils.intersection(depositoryIdList, tempDepositoryID);
tempDepositoryID1 = (List<Long>) CollectionUtils.intersection(depositoryIdList1, tempDepositoryID);
tempDepositoryID = (List<Long>) CollectionUtils.union(tempDepositoryID2, tempDepositoryID1);
//depositoryByIds 筛选出的仓库的对象,放到map里返回前端.
List<Depository> depositoryByIds = depositoryService.findDepositoryByIds(tempDepositoryID);
//给对应的depositoryByIds的mid和placecode赋值
if(depositoryByIds.size()>0){
for(Depository d:depositoryByIds){
for(InventoryP inventoryP:inventoryPS){
if(d.getId()==inventoryP.getDepositoryId()){
d.setInventoryId(inventoryP.getId().toString());
d.setInventoryPlaceCode(inventoryP.getPlaceCode());
}
}
}
}
InventoryP materialP = null;
if (inventoryById != null) {
materialP = new InventoryP(inventoryById);
} else {
materialP = inventoryPS.get(0);
}
materialP.setMaterialAndBarCodeList(materialByBarCodeByCondition);
List<SplitInfo> splitInfoByMid = splitUnitService.findSplitInfoByMid(materialP.getMid());
materialP.setSplitInfoList(splitInfoByMid);
materialP.setDepositoryList(depositoryByIds);
map.put("materialById", materialP);
} else {
materialById.setPrice(0.0);
List<SplitInfo> splitInfoByMid = splitUnitService.findSplitInfoByMid(materialById.getId());
MaterialP m = new MaterialP(materialById);
m.setSplitInfoList(splitInfoByMid);
m.setMaterialAndBarCodeList(materialByBarCodeByCondition);
map.put("materialById", m);
}
map.put("placeList", placePList);
return new RestResponse(map, 1, 200);
}
@GetMapping("/findInventoryByIdForImmediately")
public RestResponse findInventoryByIdForImmediately(@RequestParam(value = "mid", required = false) String mid, HttpServletRequest request) {
String token = request.getHeader("user-token");
@ -562,6 +653,134 @@ public class MaterialController {
}
/**
* 根据物料编码获取物料
*
* @param map
* @param request
* @return
*/
@GetMapping("/findMatrialByCodeVersion2")
public RestResponse findMatrialByCodeVersion2(@RequestParam Map<String, Object> map, HttpServletRequest request) {
String token = request.getHeader("user-token");
if (token == null) {
token = (String) request.getSession().getAttribute("userToken");
}
UserByPort userToken = AuthenticationTokenPool.getUserToken(token);
Map<String, Object> param = new HashMap<>();
String code = map.get("code").toString();
String type = map.get("type").toString();
if ("".equals(code)) {
return new RestResponse(null, 1, 200);
}
// 如果是普通物料编码
List<MaterialP> materialPByCondition = new ArrayList<>();
List<InventoryP> inventoryPByCondition2 = new ArrayList<>();
List<InventoryP> inventoryPByCondition1 = new ArrayList<>();
List<InventoryP> inventoryPByCondition = new ArrayList<>();
param.put("mcode", code);
List<Long> depositoryIdList = roleService.findDepositoryIdForUserHas(userToken);
List<Long> depositoryIdList1 = roleService.findDepositoryIdForWareHouseVisiblePermissionByUser(userToken);
// 用于存储存在库存的仓库id
List<Long> showDepository = new ArrayList<>();
List<Long> showDepository1 = new ArrayList<>();
for (Long depositoryId : depositoryIdList
) {
param.put("depositoryId", depositoryId);
List<InventoryP> inventoryPS = materialService.findInventory(param);
if (inventoryPS.size() > 0) {
showDepository.add(depositoryId);
}
inventoryPByCondition2.addAll(inventoryPS);
}
for (Long depositoryId : depositoryIdList1
) {
param.put("depositoryId", depositoryId);
List<InventoryP> inventoryPS = materialService.findInventory(param);
if (inventoryPS.size() > 0) {
showDepository1.add(depositoryId);
}
inventoryPByCondition1.addAll(inventoryPS);
}
showDepository = (List<Long>) CollectionUtils.union(showDepository, showDepository1);
for (Long depositoryId : showDepository
) {
param.put("depositoryId", depositoryId);
List<InventoryP> inventoryPS = materialService.findInventory(param);
inventoryPByCondition.addAll(inventoryPS);
}
MaterialP mp = null;
InventoryP ip = null;
// 用于获取单价
Map<String, Object> paramByPrice = new HashMap<>();
if (inventoryPByCondition.size() > 0) {
ip = inventoryPByCondition.get(0);
paramByPrice.put("mcode", ip.getCode());
// 获取当前库存中的物料单价
List<InventoryP> inventory = materialService.findInventory(paramByPrice);
if (inventory.size() > 0) {
ip.setPrice(inventory.get(0).getPrice());
} else {
ip.setPrice(0.0);
}
paramByPrice.put("mcode", ip.getCode());
// 获取条形码与物料对应关系
paramByPrice.put("codeFlag", 1);
List<MaterialAndBarCode> materialByBarCodeByCondition = materialService.findMaterialByBarCodeByCondition(paramByPrice);
ip.setMaterialAndBarCodeList(materialByBarCodeByCondition);
List<SplitInfo> splitInfoByMid = splitUnitService.findSplitInfoByMid(ip.getMid());
ip.setSplitInfoList(splitInfoByMid);
List<Depository> depositoryByIds = depositoryService.findDepositoryByIds(showDepository);
ip.setDepositoryList(depositoryByIds);
//liwenxuan 修改无法扫码出库bug (原因applicationMin.mid错误)start
for(InventoryP item : inventoryPByCondition){
for(Depository d : depositoryByIds){
if(item.getDepositoryId()==d.getId()){
d.setInventoryId(item.getId().toString());
d.setInventoryPlaceCode(item.getPlaceCode());
d.setInventoryPlaceCode(d.getInventoryPlaceCode().trim());
}
}
}
//liwenxuan 修改无法扫码出库bug (原因applicationMin.mid错误)end
return new RestResponse(ip, 1, 200);
} else if ("in".equals(type)) {
param.put("code", code);
materialPByCondition = materialService.findMaterialPByCondition(param);
if (materialPByCondition.size() > 0) {
mp = materialPByCondition.get(0);
mp.setPrice(0.0);
mp.setMid(mp.getId());
paramByPrice.put("mcode", mp.getCode());
paramByPrice.remove("code");
// 获取条形码与物料对应关系
paramByPrice.put("codeFlag", 1);
List<MaterialAndBarCode> materialByBarCodeByCondition = materialService.findMaterialByBarCodeByCondition(paramByPrice);
mp.setMaterialAndBarCodeList(materialByBarCodeByCondition);
}
if (mp != null) {
List<SplitInfo> splitInfoByMid = splitUnitService.findSplitInfoByMid(mp.getId());
mp.setSplitInfoList(splitInfoByMid);
}
return new RestResponse(mp, 1, 200);
}
if (ip != null) {
List<SplitInfo> splitInfoByMid = splitUnitService.findSplitInfoByMid(ip.getMid());
ip.setSplitInfoList(splitInfoByMid);
}
return new RestResponse(ip, 1, 200);
}
/**
* 根据物料编码获取物料
*
@ -1444,6 +1663,119 @@ public class MaterialController {
}
// 获取条形码扫描结果
@PostMapping("/qywxApplicationOutScanBarCodeVersion2")
public RestResponse qywxApplicationOutScanBarCodeVersion2(@RequestBody Map<String, Object> map, HttpServletRequest request) {
String token = request.getHeader("user-token");
if (token == null) {
token = (String) request.getSession().getAttribute("userToken");
}
UserByPort userByPort = AuthenticationTokenPool.getUserToken(token);
String barCode = (String) map.get("qrCode");
// 获取条形码与物料的映射
MaterialAndBarCode materialByBarCode = materialService.findMaterialByBarCode(barCode);
if (materialByBarCode != null) {
List<Long> depositoryIdList = new ArrayList<>();
if (map.containsKey("outType")) {
List<Depository> depositoryByAdminorg = depositoryService.findDepositoryByAdminorg(userByPort.getMaindeparment().toString());
for (Depository depository : depositoryByAdminorg
) {
depositoryIdList.add(depository.getId());
}
} else {
depositoryIdList = roleService.findDepositoryIdForUserHas(userByPort);
List<Long> depositoryIdList1 = roleService.findDepositoryIdForWareHouseVisiblePermissionByUser(userByPort);
//version2 start 20230926
String mcode = materialByBarCode.getMcode();
Map<String, Object> param1 = new HashMap<>();
param1.put("mcode", mcode);
//inventoryPS 各仓库库位所有有该物料库存信息
List<InventoryP> inventoryPS = materialService.findInventory(param1);
Map<String, Object> paramByBarcode = new HashMap<>();
paramByBarcode.put("mcode", mcode);
paramByBarcode.put("codeFlag", 1);
List<MaterialAndBarCode> materialByBarCodeByCondition = materialService.findMaterialByBarCodeByCondition(paramByBarcode);
if (inventoryPS.size() > 0) {
//List<Long> depositoryIdList = roleService.findDepositoryIdForWareHouseVisiblePermissionByUser(userToken);
List<Long> tempDepositoryID = new ArrayList<>();
for (InventoryP inventory : inventoryPS
) {
tempDepositoryID.add(inventory.getDepositoryId());
}
//修改bug---应该是取交集而不是取并集.
List<Long> depositoryIdList2 = new ArrayList<>();
List<Long> depositoryIdList3 = new ArrayList<>();
depositoryIdList2 = (List<Long>) CollectionUtils.intersection(depositoryIdList, tempDepositoryID);
depositoryIdList3 = (List<Long>) CollectionUtils.intersection(depositoryIdList1, tempDepositoryID);
depositoryIdList = (List<Long>) CollectionUtils.union(depositoryIdList2, depositoryIdList3);
}
//version2 end 20230926
}
List<PlaceP> placePList = new ArrayList<>();
List<InventoryP> inventoryPList = new ArrayList<>();
int isExistCount = 0;
for (Long depositoryId : depositoryIdList) {
boolean isExist = false;
Map<String, Object> param = new HashMap<>();
param.put("depositoryId", depositoryId);
param.put("mid", materialByBarCode.getMid());
List<InventoryP> inventory = materialService.findInventory(param);
if (inventory.size() > 0) {
// 如果存在该物料
InventoryP inventoryP = inventory.get(0);
List<PlaceP> placeByMidAndDid = placeService.findPlaceByMidAndDid(inventoryP.getId(), depositoryId);
materialByBarCode.setIid(inventoryP.getId());
placePList.addAll(placeByMidAndDid);
isExist = true;
isExistCount++;
inventoryPList.add(inventoryP);
}
/*if (isExist) {
List<SplitInfo> splitInfoByMid = splitUnitService.findSplitInfoByMid(materialByBarCode.getMid());
materialByBarCode.setSplitInfoList(splitInfoByMid);
List<Depository> depositoryByIds = depositoryService.findDepositoryByIds(depositoryIdList);
materialByBarCode.setDepositoryList(depositoryByIds);
return new RestResponse(materialByBarCode);
}*/
}
if(isExistCount>0){
List<SplitInfo> splitInfoByMid = splitUnitService.findSplitInfoByMid(materialByBarCode.getMid());
materialByBarCode.setSplitInfoList(splitInfoByMid);
List<Depository> depositoryByIds = depositoryService.findDepositoryByIds(depositoryIdList);
//liwenxuan 修改无法扫码出库bug (原因applicationMin.mid错误)start
for(InventoryP item : inventoryPList){
for(Depository d : depositoryByIds){
if(item.getDepositoryId()==d.getId()){
d.setInventoryId(item.getId().toString());
d.setInventoryPlaceCode(item.getPlaceCode());
d.setInventoryPlaceCode(d.getInventoryPlaceCode().trim());
}
}
}
//liwenxuan 修改无法扫码出库bug (原因applicationMin.mid错误)end
materialByBarCode.setDepositoryList(depositoryByIds);
return new RestResponse(materialByBarCode);
}
return new RestResponse(null);
}
return new RestResponse(null);
}
@PostMapping("/qywxStockTakingScanBarCode")
public RestResponse qywxStockTakingScanBarCode(@RequestBody Map<String, Object> map, HttpServletRequest request) {
String token = request.getHeader("user-token");
@ -1551,7 +1883,7 @@ public class MaterialController {
Long mid = ObjectFormatUtil.toLong(map.get("mid"));
Material materialById = materialService.findMaterialById(mid);
map.put("mcode", materialById.getCode());
//李文轩上线要改回来.liwenxuan flag=2(二维码)的也查询出来
//李文轩.liwenxuan flag=2(二维码)的也查询出来
//map.put("codeFlag", 1);
List<MaterialAndBarCode> materialByBarCodeByCondition = materialService.findMaterialByBarCodeByCondition(map);
@ -1786,7 +2118,9 @@ public class MaterialController {
@PostMapping("/qywxScanCodeOut")
public RestResponse qywxScanCodeOut(@RequestBody Map<String, Object> map, HttpServletRequest request) {
String qrCode = (String) map.get("qrCode");
String materialCode = materialService.findMaterialCodeByQrCode(qrCode);
//liwenxuan 20230921 目前的仓储管理扫码出库只查flag=2的......应该都查,然后判断一下,有flag=2的就取2的,没有2的就取1的,最终也保证只取一个
//String materialCode = materialService.findMaterialCodeByQrCode(qrCode);
String materialCode = materialService.findMaterialCodeByQrCodelwx(qrCode);
Map<String, Object> result = new HashMap<>();
// 0为非法码,1为物料,2为库位,3为仓库
int flag = 0;

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

@ -3353,7 +3353,6 @@ public class PageController {
return "pages/QyWxScanCode/QyWxScanBarCodeIn";
}
@GetMapping("/qywxScanBarCodeIn")
public ModelAndView qywxScanBarCodeIn(HttpServletRequest request) {
ModelAndView mv = new ModelAndView();

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

@ -461,7 +461,7 @@ public class StockTakingController {
if (workwechat == null || "".equals(workwechat)) {
workwechat = departmentManager.getWechat();
}
// QyWxDepartmentManager.append(workwechat+",");
///QyWxDepartmentManager.append(workwechat+",");
}
QyWxDepartmentManager.append("LiWenXuan");
if (map.containsKey("mainIdList")) {

2
src/main/java/com/dreamchaser/depository_manage/controller/UserController.java

@ -112,7 +112,7 @@ public class UserController {
String userKey = (String) session.getAttribute("userKey");
String userToken = (String) session.getAttribute("userToken");
AuthenticationTokenPool.removeUserToken(userToken);
//liwenxuan 20230804 本地环境登出时不删redis,
//liwenxuan 20230804 本地环境登出时不删redis, 上线要改回来 测试用
//redisPool.getRedisTemplateByDb(5).delete(PublicConfig.LoginRedisPrefix + userKey);
}
session.invalidate();

7
src/main/java/com/dreamchaser/depository_manage/depository_mapper/QrCodeMapper.java

@ -44,6 +44,13 @@ public interface QrCodeMapper {
*/
String findMaterialCodeByQrCode(String qrCode);
/**
* 根据条码获取对应的物料编码
* @param qrCode
* @return
*/
String findMaterialCodeByQrCodeFlag1(String qrCode);
/**
* 根据条件删除物料与二维码的对应关系
* @param map

8
src/main/java/com/dreamchaser/depository_manage/depository_mapper/QrCodeMapper.xml

@ -88,6 +88,14 @@
where barCode = #{qrcode} and flag = 2
</select>
<select id="findMaterialCodeByQrCodeFlag1" parameterType="string" resultType="string">
select mcode
from qrcodeandmaterial
where barCode = #{qrcode} and flag = 1
</select>
<!-- 删除映射-->
<delete id="deleteQrCodeAndMaterial" parameterType="map">

3
src/main/java/com/dreamchaser/depository_manage/depository_mapper/RedisfifteenMinRecordMapper.java

@ -1,6 +1,7 @@
package com.dreamchaser.depository_manage.depository_mapper;
import com.dreamchaser.depository_manage.entity.RedisfifteenMinRecord;
import com.dreamchaser.depository_manage.entity.RedisfifteenUser;
import org.apache.ibatis.annotations.Mapper;
import java.util.List;
@ -14,4 +15,6 @@ public interface RedisfifteenMinRecordMapper {
int addRedisfifteenMinRecord(RedisfifteenMinRecord redisfifteenMinRecord);
int updateRedisfifteenMinRecord(RedisfifteenMinRecord redisfifteenMinRecord);
List<RedisfifteenMinRecord> queryAllRedisMin();
}

8
src/main/java/com/dreamchaser/depository_manage/depository_mapper/RedisfifteenMinRecordMapper.xml

@ -51,4 +51,12 @@
WHERE min_record = #{minRecord}
</update>
<select id="queryAllRedisMin" resultType="com.dreamchaser.depository_manage.entity.RedisfifteenMinRecord">
SELECT
*
FROM redisfifteen_min_record WHERE 1 = 1
</select>
</mapper>

2
src/main/java/com/dreamchaser/depository_manage/depository_mapper/RedisfifteenUserMapper.java

@ -15,4 +15,6 @@ public interface RedisfifteenUserMapper {
int updateRedisfifteenUser(RedisfifteenUser redisfifteenUser);
int addRedisfifteenUser(RedisfifteenUser redisfifteenUser);
List<RedisfifteenUser> queryAllRedisUser();
}

8
src/main/java/com/dreamchaser/depository_manage/depository_mapper/RedisfifteenUserMapper.xml

@ -42,5 +42,13 @@
</insert>
<select id="queryAllRedisUser" resultType="com.dreamchaser.depository_manage.entity.RedisfifteenUser">
SELECT
*
FROM redisfifteen_user
</select>
</mapper>

9
src/main/java/com/dreamchaser/depository_manage/entity/Depository.java

@ -15,9 +15,12 @@ public class Depository {
/** id */
private Long id;
//出库申请填写页面选择的物料有多个仓库和库位时(在inventory表中有多条数据时)使用.start
//liwenxuan 修改无法扫码出库bug (原因applicationMin.mid错误)start
private String inventoryId;
private String inventoryPlaceCode;
//出库申请填写页面选择的物料有多个仓库和库位时(在inventory表中有多条数据时)使用.end
//liwenxuan 修改无法扫码出库bug (原因applicationMin.mid错误)end
/** 仓库名称 */
private String dname;

9
src/main/java/com/dreamchaser/depository_manage/entity/RedisfifteenUser.java

@ -34,4 +34,13 @@ public class RedisfifteenUser {
public void setMinRecord(String minRecord) {
this.minRecord = minRecord;
}
@Override
public String toString() {
return "RedisfifteenUser{" +
"id='" + id + '\'' +
", user='" + user + '\'' +
", minRecord='" + minRecord + '\'' +
'}';
}
}

15
src/main/java/com/dreamchaser/depository_manage/intercepter/UserInterceptor.java

@ -77,20 +77,29 @@ public class UserInterceptor extends HandlerInterceptorAdapter {
}
if ( "/".equals(servletPath)) {
// 如果是企业微信登录
log.info("是企业微信登录");
System.out.println("企业微信登录");
try {
if (isMobileDevice(request)) {
if (token == null || !token.equals(userToken)) {
if (header.contains("wxwork")) {
// 如果是企业微信跳转
log.info("是企业微信跳转");
System.out.println("是企业微信跳转");
response.sendRedirect(QyWxConfig.getQYWXCodeUrl());
} else {
log.info("不是企业微信跳转");
System.out.println("不是企业微信跳转");
response.sendRedirect("/login");
}
return false;
}
} else {
log.info("notMobileDevice");
System.out.println("notMobileDevice");
if (token == null || !token.equals(userToken)) {
log.info("token == null || !token.equals(userToken)");
System.out.println("token == null || !token.equals(userToken)");
response.sendRedirect("/login");
return false;
}
@ -101,6 +110,8 @@ public class UserInterceptor extends HandlerInterceptorAdapter {
}
if (token == null || !token.equals(userToken)) {
log.info("token == null || !token.equals(userToken)");
System.out.println("token == null || !token.equals(userToken)");
try {
response.sendRedirect("/login");
} catch (IOException e) {
@ -110,6 +121,8 @@ public class UserInterceptor extends HandlerInterceptorAdapter {
}
UserByPort userByPort = AuthenticationTokenPool.getUserToken(token);
if (!"".equals(token) && userByPort != null) {
log.info("token == null || !token.equals(userToken)");
System.out.println("token == null || !token.equals(userToken)");
AuthenticationTokenPool.addUserToken(token, userByPort);
return true;
} else {

2
src/main/java/com/dreamchaser/depository_manage/service/MaterialService.java

@ -463,4 +463,6 @@ public interface MaterialService {
* @return
*/
Double calMaterialTypeTopCount(Map<String, Object> map);
String findMaterialCodeByQrCodelwx(String qrCode);
}

3
src/main/java/com/dreamchaser/depository_manage/service/RedisfifteenMinRecordService.java

@ -1,6 +1,7 @@
package com.dreamchaser.depository_manage.service;
import com.dreamchaser.depository_manage.entity.RedisfifteenMinRecord;
import com.dreamchaser.depository_manage.entity.RedisfifteenUser;
import java.util.List;
@ -12,4 +13,6 @@ public interface RedisfifteenMinRecordService {
int addRedisfifteenMinRecord(RedisfifteenMinRecord redisfifteenMinRecord);
int updateRedisfifteenMinRecord(RedisfifteenMinRecord redisfifteenMinRecord);
List<RedisfifteenMinRecord> queryAllRedisMin();
}

2
src/main/java/com/dreamchaser/depository_manage/service/RedisfifteenUserService.java

@ -12,4 +12,6 @@ public interface RedisfifteenUserService {
int updateRedisfifteenUser(RedisfifteenUser redisfifteenUser);
int addRedisfifteenUser(RedisfifteenUser redisfifteenUser);
List<RedisfifteenUser> queryAllRedisUser();
}

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

@ -79,18 +79,18 @@ public class DepositoryRecordServiceImpl implements DepositoryRecordService {
private AdministrativeService administrativeService;
//redis15 mysql同步 都查询
@Autowired
private RedisfifteenUser redisfifteenUser;
/*@Autowired
private RedisfifteenUser redisfifteenUser;*/
@Autowired
private RedisfifteenUserService redisfifteenUserService;
@Autowired
private RedisfifteenMinRecord redisfifteenMinRecord;
/*@Autowired
private RedisfifteenMinRecord redisfifteenMinRecord;*/
@Autowired
private RedisfifteenMinRecordService redisfifteenMinRecordService;
@Autowired
private RedisfifteenRecordService redisfifteenRecordService;
@Autowired
private RedisfifteenRecord redisfifteenRecord;
/*@Autowired
private RedisfifteenRecord redisfifteenRecord;*/
@Autowired
private RedisSynchronizeMysqlUtil redisSynchronizeMysqlUtil;
@ -325,9 +325,10 @@ public class DepositoryRecordServiceImpl implements DepositoryRecordService {
String minRecord = (String) redisPool.getRedisTemplateByDb(15).opsForHash().get(key, "minRecord");
//mysql
if(minRecord==null){//redis里查不到再去mysql查一次.
//redisfifteenUser.setUser(userToken.getId().toString());
redisfifteenUser.setUser("714");//测试,当前登录用户先改成刘畅 上线要改回来,李文轩 liwenxuan
List<RedisfifteenUser> redisfifteenUsers = redisfifteenUserService.queryRedisfifteenUser(redisfifteenUser);
RedisfifteenUser redisfifteenUser_6 = new RedisfifteenUser();
redisfifteenUser_6.setUser(recordP.getApplicantId().toString());//?????
//redisfifteenUser.setUser("714");//测试,当前登录用户先改成刘畅 上线要改回来,李文轩 liwenxuan
List<RedisfifteenUser> redisfifteenUsers = redisfifteenUserService.queryRedisfifteenUser(redisfifteenUser_6);
if(redisfifteenUsers.size()>0){
if(redisfifteenUsers.size()>1){
throw new MyException("redisfifteenUsers超过一条记录!");
@ -349,28 +350,32 @@ public class DepositoryRecordServiceImpl implements DepositoryRecordService {
// 如果当前用户已经没有剩余订单,则删除
redisPool.getRedisTemplateByDb(15).delete(key);
//mysql同步redis
redisfifteenUser.setUser(Long.toString(recordP.getApplicantId()));
int redisfifteenUserdelCount = redisfifteenUserService.deleteRedisfifteenUser(redisfifteenUser);
RedisfifteenUser redisfifteenUser_7 = new RedisfifteenUser();
redisfifteenUser_7.setUser(Long.toString(recordP.getApplicantId()));
int redisfifteenUserdelCount = redisfifteenUserService.deleteRedisfifteenUser(redisfifteenUser_7);
} else {
redisPool.getRedisTemplateByDb(15).opsForHash().put(key, "minRecord", minRecord);
//mysql同步redis 查一下库里有没有记录,没有则新增,有则修改.
redisfifteenUser.setUser(Long.toString(recordP.getApplicantId()));
redisfifteenUser.setMinRecord(minRecord);
int redisfifteenUserdelCount = redisfifteenUserService.updateRedisfifteenUser(redisfifteenUser);
RedisfifteenUser redisfifteenUser_8 = new RedisfifteenUser();
redisfifteenUser_8.setUser(Long.toString(recordP.getApplicantId()));
redisfifteenUser_8.setMinRecord(minRecord);
int redisfifteenUserdelCount = redisfifteenUserService.updateRedisfifteenUser(redisfifteenUser_8);
}
redisPool.getRedisTemplateByDb(15).delete(redisMinRecordKey);
//mysql同步reids 删除redisfifteen_min_record表中的相关数据
redisfifteenMinRecord.setMinRecord(Long.toString(recordMin.getId()));
redisfifteenMinRecordService.deleteRedisfifteenMinRecord(redisfifteenMinRecord);
RedisfifteenMinRecord redisfifteenMinRecord_9 = new RedisfifteenMinRecord();
redisfifteenMinRecord_9.setMinRecord(Long.toString(recordMin.getId()));
redisfifteenMinRecordService.deleteRedisfifteenMinRecord(redisfifteenMinRecord_9);
}
String redisMainRecordKey = "record:" + id; // 设置redis中主订单键值
redisPool.getRedisTemplateByDb(15).delete(redisMainRecordKey);
//mysql同步reids 删除redisfifteen_record表中的相关数据
redisfifteenRecord.setRecord(Long.toString(id));
redisfifteenRecordService.deleteRedisfifteenRecord(redisfifteenRecord);
RedisfifteenRecord redisfifteenRecord_10 = new RedisfifteenRecord();
redisfifteenRecord_10.setRecord(Long.toString(id));
redisfifteenRecordService.deleteRedisfifteenRecord(redisfifteenRecord_10);
});
@ -408,8 +413,9 @@ public class DepositoryRecordServiceImpl implements DepositoryRecordService {
// 删除redis中该子单记录
redisTemplateByDb.delete(minRedisKey);
//mysql同步reids 删除redisfifteen_min_record表中的相关数据
redisfifteenMinRecord.setMinRecord(Long.toString(id));
redisfifteenMinRecordService.deleteRedisfifteenMinRecord(redisfifteenMinRecord);
RedisfifteenMinRecord redisfifteenMinRecord_11 = new RedisfifteenMinRecord();
redisfifteenMinRecord_11.setMinRecord(Long.toString(id));
redisfifteenMinRecordService.deleteRedisfifteenMinRecord(redisfifteenMinRecord_11);
// 获取redis中存储的当前单的出库人
@ -417,7 +423,7 @@ public class DepositoryRecordServiceImpl implements DepositoryRecordService {
//mysql同步redis
if(manager==null){
//String managerStr = redisfifteenMinRecordService.queryRedisfifteenMinRecord(redisfifteenMinRecord).get(0).getManager();
List<RedisfifteenMinRecord> redisfifteenMinRecords = redisfifteenMinRecordService.queryRedisfifteenMinRecord(redisfifteenMinRecord);
List<RedisfifteenMinRecord> redisfifteenMinRecords = redisfifteenMinRecordService.queryRedisfifteenMinRecord(redisfifteenMinRecord_11);
if(redisfifteenMinRecords.size()>0){
if(redisfifteenMinRecords.size()>1){
throw new MyException("redisfifteenMinRecords.size>1");
@ -435,10 +441,12 @@ public class DepositoryRecordServiceImpl implements DepositoryRecordService {
String managerRedisKey = "user:" + s;
Object minRecord = redisTemplateByDb.opsForHash().get(managerRedisKey, "minRecord");
//mysql同步redis
RedisfifteenUser redisfifteenUser_12 = new RedisfifteenUser();
redisfifteenUser_12.setUser(s);
if (minRecord==null) {
redisfifteenUser.setUser(s);
//String minRecordStr = redisfifteenUserService.queryRedisfifteenUser(redisfifteenUser).get(0).getMinRecord();
List<RedisfifteenUser> redisfifteenUsers = redisfifteenUserService.queryRedisfifteenUser(redisfifteenUser);
List<RedisfifteenUser> redisfifteenUsers = redisfifteenUserService.queryRedisfifteenUser(redisfifteenUser_12);
if(redisfifteenUsers.size()>0){
if(redisfifteenUsers.size()>1){
throw new MyException("redisfifteenUsers.size>1");
@ -459,13 +467,13 @@ public class DepositoryRecordServiceImpl implements DepositoryRecordService {
// 如果当前用户已经没有剩余订单,则删除
redisTemplateByDb.delete(managerRedisKey);
//mysql同步redis
redisfifteenUserService.deleteRedisfifteenUser(redisfifteenUser);
redisfifteenUserService.deleteRedisfifteenUser(redisfifteenUser_12);
} else {
redisTemplateByDb.opsForHash().put(managerRedisKey, "minRecord", minRecordString);
//mysql同步redis
redisfifteenUser.setUser(s);
redisfifteenUser.setMinRecord(minRecordString);
int redisfifteenUserdelCount = redisfifteenUserService.updateRedisfifteenUser(redisfifteenUser);
redisfifteenUser_12.setUser(s);
redisfifteenUser_12.setMinRecord(minRecordString);
int redisfifteenUserdelCount = redisfifteenUserService.updateRedisfifteenUser(redisfifteenUser_12);
}
}
}
@ -477,18 +485,21 @@ public class DepositoryRecordServiceImpl implements DepositoryRecordService {
// 获取删除结果
Integer result = depositoryRecordMapper.deleteApplicationOutRecordMinById(id);
String mainRedisKey = "record:" + parentId;
RedisfifteenRecord redisfifteenRecord_13 = new RedisfifteenRecord();
redisfifteenRecord_13.setRecord(Long.toString(parentId));
if (recordMinList.size() <= 1) {
// 如果主单的子单数小于等于1个,则删除主单
Integer integer = depositoryRecordMapper.deleteApplicationOutRecordById(parentId);
redisTemplateByDb.delete(mainRedisKey);
//mysql同步redis
redisfifteenRecord.setRecord(Long.toString(parentId));
redisfifteenRecordService.deleteRedisfifteenRecord(redisfifteenRecord);
redisfifteenRecordService.deleteRedisfifteenRecord(redisfifteenRecord_13);
}
else {
Object minRecord = redisTemplateByDb.opsForHash().get(mainRedisKey, "minRecord");
//mysql同步redis
List<RedisfifteenRecord> redisfifteenRecords = redisfifteenRecordService.queryRedisfifteenRecord(redisfifteenRecord);
List<RedisfifteenRecord> redisfifteenRecords = redisfifteenRecordService.queryRedisfifteenRecord(redisfifteenRecord_13);
if(redisfifteenRecords.size()>0){
if(redisfifteenRecords.size()>1){
throw new MyException("redisfifteenRecords.size>1");
@ -507,8 +518,8 @@ public class DepositoryRecordServiceImpl implements DepositoryRecordService {
// 如果当前主单已经没有剩余订单,则删除
redisTemplateByDb.delete(mainRedisKey);
//mysql同步redis 删除Record
redisfifteenRecord.setRecord(Long.toString(parentId));
redisfifteenRecordService.deleteRedisfifteenRecord(redisfifteenRecord);
redisfifteenRecord_13.setRecord(Long.toString(parentId));
redisfifteenRecordService.deleteRedisfifteenRecord(redisfifteenRecord_13);
} else {
redisTemplateByDb.opsForHash().put(mainRedisKey, "minRecord", minRecordList);
//mysql同步redis 新增或修改 record
@ -980,6 +991,8 @@ public class DepositoryRecordServiceImpl implements DepositoryRecordService {
flagForApproval = true;
StringBuilder approverId = new StringBuilder();
for (RoleAndDepository roleAndDepository : roleAndDepositoryByDid) {
//liwenxuan 本地测试用 上线要改回去 将入库时的审批人设置为开发人员 直接注释/反注释就好
//roleAndDepository.setUserId(9458L);
// 获取该权限类型
int classes = roleAndDepository.getClasses();
// 获取userid
@ -2488,8 +2501,9 @@ public class DepositoryRecordServiceImpl implements DepositoryRecordService {
String manager = (String) redisPool.getRedisTemplateByDb(15).opsForHash().get(redisMinRecordKey, "manager");
//mysql同步redis query MinRecord
if(manager==null){
redisfifteenMinRecord = redisSynchronizeMysqlUtil.queryRedis15Min(Long.toString(id));
manager = redisfifteenMinRecord.getManager();
RedisfifteenMinRecord redisfifteenMinRecord_15 = new RedisfifteenMinRecord();
redisfifteenMinRecord_15 = redisSynchronizeMysqlUtil.queryRedis15Min(Long.toString(id));
manager = redisfifteenMinRecord_15.getManager();
}
@ -2501,7 +2515,11 @@ public class DepositoryRecordServiceImpl implements DepositoryRecordService {
managerSplit = new String[0];
}
}
//if(managerSplit!=null && managerSplit != "")
for (String item : managerSplit) {
if(item.equals("")){
continue;
}
// 删除其他管理员的订单记录
String otherManager = "user:" + item;
String minRecord = (String) redisPool.getRedisTemplateByDb(15).opsForHash().get(otherManager, "minRecord");
@ -2559,7 +2577,7 @@ public class DepositoryRecordServiceImpl implements DepositoryRecordService {
// 删除用户中当前已完成的订单
minRecord = minRecord.replace(redisMinRecordKey + ",", "");
if (minRecord.length() == 2) {
// []
// []=====>bug原因:实际上,minRecord可以是[\r\n]????,更改判断方式为不含"minRecord"
// 如果当前用户已经没有剩余订单,则删除
redisPool.getRedisTemplateByDb(15).delete("user:" + userByPort.getId());
//mysql同步redis user delete
@ -2601,11 +2619,11 @@ public class DepositoryRecordServiceImpl implements DepositoryRecordService {
for (String value : split) {
// 获取所有子订单状态
String state = (String) redisPool.getRedisTemplateByDb(15).opsForHash().get(value, "state");
//mysql同步redis MinRecord query
if(state==null){
//mysql同步redis MinRecord query 出库后,状态未更正为已完成.看一下state--暂时通过注释掉了mysql同步redis的代码解决,
/*if(state==null){
String minRecordStr = value.split(":")[1];
state = redisSynchronizeMysqlUtil.queryRedis15Min(minRecordStr).getState();
}
}*/
if ("1".equals(state)) {
// 如果有子订单未完成
pass = 3; // 设置主订单状态为处理中
@ -3455,7 +3473,9 @@ public class DepositoryRecordServiceImpl implements DepositoryRecordService {
//mysql同步redis query user
if(userMinRecord==null){
RedisfifteenUser redisfifteenUser1 = redisSynchronizeMysqlUtil.queryRedis15User(integer.toString());
System.out.println(redisfifteenUser1.toString());
userMinRecord = redisfifteenUser1.getMinRecord();
System.out.println(userMinRecord);
}
if (userMinRecord == null) { // 如果当前用户没有子订单
@ -3476,7 +3496,16 @@ public class DepositoryRecordServiceImpl implements DepositoryRecordService {
*
* @param map 仓库调度信息
* @return 受影响的行数
*
*
*/
/*
* 对于带有平衡岗的审批流程,不在企业微信中的通知中审批,而是进入应用里面我的任务中进行审批的话,流程走不通,
* 会陷入平衡岗无限循环审批bug,其实不算bug,我看了代码,这部分内容只开发了一半就上线了.这样的话,想在测试
* 涉及到平衡岗的流程只能在生产环境让所有相关人员协助测试,这样根本不现实.所以之前根本就不测试......接手
* 此系统后好多违反开发常识的绝不应该出现的事情接连发生,真是令我大开眼界... 2023.09.20 liwenxuan
* */
@Override
@Transactional(rollbackFor = Exception.class)
public Integer review(Map<String, Object> map, Long userid, UserByPort userToken, String userAgent, String userKey, String token) {
@ -3630,7 +3659,7 @@ public class DepositoryRecordServiceImpl implements DepositoryRecordService {
}
QyWxUid.append("LiWenXuan,");
//QyWxUid.append("LiWenXuan,");
if (record.getDepositoryManager() == null) {
map.put("depositoryManager", depositoryManager.toString());
} else {
@ -3713,10 +3742,11 @@ public class DepositoryRecordServiceImpl implements DepositoryRecordService {
QyWxUid.append(workwechat).append(",");
}
String s = QyWxUid.toString();
s = "LiWenXuan,";
//s = "LiWenXuan,";
qyWxOperationService.sendMessageForOtherUserByCard(ObjectFormatUtil.toLong(id), s, userAgent, 1, userKey, token);
});
} else if (map.containsKey("balancePosterPass") && !flagForHasOtherDepository) {
}
else if (map.containsKey("balancePosterPass") && !flagForHasOtherDepository) {
// 如果是平衡岗人员审批且进入该流程
String result = "";
@ -3836,7 +3866,341 @@ public class DepositoryRecordServiceImpl implements DepositoryRecordService {
// s = "LiWenXuan,";
qyWxOperationService.sendMessageForOtherUserByCard(ObjectFormatUtil.toLong(id), s, userAgent, 1, userKey, token);
});
}
else if (map.containsKey("balancePosterPassM") && !flagForHasOtherDepository) {//liwenxuan 增加综合办负责人的流程处理.
// 如果是综合办负责人审批且可进入该流程
String result = "";
String simpleTime = DateUtil.getSimpleTime(new Date());
map.put("balancePosterPassMTime", DateUtil.DateTimeToTimeStamp(simpleTime));
map.put("balancePosterMid", userid);
Integer balancePosterPassM = (Integer) map.get("balancePosterPassM");
/* String result = "";
// 开启线程更改其他用户卡片模板样式
String simpleTime = DateUtil.getSimpleTime(new Date());
map.put("depositoryManagerTime", DateUtil.DateTimeToTimeStamp(simpleTime));
map.put("depositoryManager", userid);
map.put("depositoryId", record.getDepositoryId());
Integer depositoryManagerPass = (Integer) map.get("depositoryManagerPass");*/
if (balancePosterPassM == null) {
balancePosterPassM = (Integer) map.get("balancePosterPassM");
}
String departmentheadTime = record.getDepartmentheadTime();
// 用于标识部门负责人是否审批
boolean flagFordepartmentTime = false; // 默认审批过
if ("0".equals(departmentheadTime)) {
flagFordepartmentTime = true;
}
if (balancePosterPassM == 1) {
// 如果审核通过
result = "通过";
// 获取主单下的所有子单
// 根据仓库分类明细
Map<String, Object> minIdByMaterialType = new HashMap<>();
// 定义仓库列表
List<Long> materialTypeIdList = new ArrayList<>();
// 定义类型列表
List<Long> depositoryIdList = new ArrayList<>();
StringBuilder minRecordByMain = new StringBuilder("[]");
List<ApplicationOutRecordMin> applicationOutRecordMinByParent = depositoryRecordMapper.findApplicationOutRecordMinByParent(record.getId());
List<Depository> depositoryAll = depositoryMapper.findDepositoryAll();
for (ApplicationOutRecordMin applicationOutRecordMin : applicationOutRecordMinByParent) {
// 获取子单信息
// 获取对应的物料编号
Long mid = applicationOutRecordMin.getMid();
// 获取物料信息
Inventory inventory = materialMapper.findInventoryById(mid);
//设置子订单在redis中的主键
String minRecordKey = "minRecord:" + applicationOutRecordMin.getId();
minRecordByMain.insert(1, minRecordKey + ","); // 将子订单主键插入到主订单的子订单列表
// 设置当前子订单对应仓库管理员记录
StringBuilder minRecordManage = new StringBuilder();
// 将要存储到redis中的子订单信息
Map<String, Object> minRecord = new HashMap<>();
minRecord.put("parentId", record.getId().toString()); // 当前子订单主订单
minRecord.put("state", "1"); // 当前子订单状态 1待处理2处理
// 获取出库仓库
Long depositoryId = applicationOutRecordMin.getDepositoryId();
Depository depositoryById = depositoryMapper.findDepositoryById(depositoryId);
// 用于标志出库人员通过物料类型还说仓库获取 // 默认是仓库
boolean flagForMtOrDepository = true;
Depository parentDepository = findParentDepository(depositoryById, depositoryAll);
if (!parentDepository.getDname().contains("前置仓")) {
// 如果不是前置仓下的仓库
flagForMtOrDepository = false;
}
if (!flagForMtOrDepository) {
// 如果是通过类型
// 用于存储企业微信uid
StringBuilder QyWxUid = new StringBuilder();
// 获取具体物料类型
Long materialTypeId = inventory.getMaterialTypeId();
if (!findThisIdIsExistForMaterialType(materialTypeIdList, materialTypeId)) {
// 如果当前仓库id没有存入过
materialTypeIdList.add(materialTypeId);
}
List<Long> minIdList = new ArrayList<>();
Object o = minIdByMaterialType.get("materialType" + materialTypeId);
if (o != null) {
minIdList = (List<Long>) o;
}
// 将当前子订单添加到该仓库下的子订单列表中
minIdList.add(applicationOutRecordMin.getId());
minIdByMaterialType.put("materialType" + materialTypeId, minIdList);
// 获取该物料所处类型的管理员
List<Long> userIdByDid = new ArrayList<>();
// 用于查询对应的管理员权限
Map<String, Object> paramForUserManager = new HashMap<>();
paramForUserManager.put("mtid", materialTypeId);
List<RoleAndMaterialType> roleAndMaterialTypeByCondition = roleService.findRoleAndMaterialTypeByCondition(paramForUserManager);
for (RoleAndMaterialType roleAndMaterialType : roleAndMaterialTypeByCondition) {
int classes = roleAndMaterialType.getClasses();
if (classes == 1) {
// 如果是对人设置的权限
userIdByDid.add(roleAndMaterialType.getUid());
} else {
// 如果是对岗位
// 定义用于获取当前岗位下的人的参数map
Map<String, Object> paramForGetUserByPost = new HashMap<>();
paramForGetUserByPost.put("position", roleAndMaterialType.getUid());
List<UserByPort> userByPortList = PublicConfig.FindUserByMap(paramForGetUserByPost, userKey, token);
for (UserByPort userByPort : userByPortList) {
int emptype = userByPort.getEmptype();
if (emptype > 10) {
continue;
}
Long userId = userByPort.getId();
// 修改redis中用户的数据
updateRedisDataForUserManager(userId, minRecordKey);
minRecordManage.append(userId).append(",");
// 获取企业微信id或微信id
String userByPortWorkwechat = userByPort.getWorkwechat();
if (userByPortWorkwechat == null || "".equals(userByPortWorkwechat)) {
userByPortWorkwechat = userByPort.getWechat();
}
QyWxUid.append(userByPortWorkwechat).append(",");
}
}
}
for (Long integer : userIdByDid) {
// 获取仓库管理员信息
UserByPort manager = PublicConfig.FindUserById(integer, userKey, token);
// 获取用户的用工关系
int emptype = manager.getEmptype();
if (emptype > 10) {
continue;
}
List<RedisfifteenUser> redisfifteenUsers111 = redisSynchronizeMysqlUtil.queryAllRedisUser();
updateRedisDataForUserManager(integer, minRecordKey);
List<RedisfifteenUser> redisfifteenUsers112 = redisSynchronizeMysqlUtil.queryAllRedisUser();
minRecordManage.append(integer).append(",");
String workwechat = manager.getWorkwechat();
if (workwechat == null || "".equals(workwechat)) {
workwechat = manager.getWechat();
}
QyWxUid.append(workwechat+",");
}
// QyWxUid.append("LiWenXuan,");
minRecord.put("manager", minRecordManage.toString());
// 添加子订单到redis中
redisPool.getRedisTemplateByDb(15).opsForHash().putAll(minRecordKey, minRecord);
//mysql同步redis addorupdate MinRecord
List<RedisfifteenMinRecord> redisfifteenMinRecords111 = redisSynchronizeMysqlUtil.queryAllRedisMin();
int addOrUpdateCount = redisSynchronizeMysqlUtil.addOrUpdateRedis15Min(minRecordKey,minRecord);
List<RedisfifteenMinRecord> redisfifteenMinRecords121 = redisSynchronizeMysqlUtil.queryAllRedisMin();
// 开启线程向仓库管理员发送消息
SendQyWxMessageThreadPool.execute(() -> {
JSONObject jsonObject = qyWxOperationService.sendNotificationToDepositoryManager(QyWxUid.toString(), applicationOutRecordMin.getId(), userAgent, userKey, token);
String redisOutKey = "wms_notificationOut_" + applicationOutRecordMin.getId();
Map<String, String> stringObjectMap = PublicConfig.returnMapString(jsonObject);
redisPool.getRedisTemplateByDb(14).opsForHash().putAll(redisOutKey, stringObjectMap);
redisPool.getRedisTemplateByDb(14).expire(redisOutKey, 72, TimeUnit.HOURS);
});
} else {
// 如果是通过仓库
// 用于存储企业微信uid
StringBuilder QyWxUid = new StringBuilder();
if (!findThisIdIsExistForDepository(depositoryIdList, depositoryId)) {
// 如果当前仓库id没有存入过
depositoryIdList.add(depositoryId);
}
List<Long> minIdList = new ArrayList<>();
Object o = minIdByMaterialType.get("depository" + depositoryId);
if (o != null) {
minIdList = ObjectFormatUtil.objToList(o, Long.class);
}
// 将当前子订单添加到该仓库下的子订单列表中
minIdList.add(applicationOutRecordMin.getId());
minIdByMaterialType.put("depository" + depositoryId, minIdList);
// 获取该物料所处仓库的仓库管理员
List<Long> userIdByDid = new ArrayList<>();
// 用于查询对应的管理员权限
Map<String, Object> paramForUserManager = new HashMap<>();
paramForUserManager.put("depositoryId", depositoryId);
List<RoleAndDepository> roleAndDepositoryByCondition = roleService.findRoleAndDepositoryByCondition(paramForUserManager);
for (RoleAndDepository roleAndDepository : roleAndDepositoryByCondition) {
int classes = roleAndDepository.getClasses();
if (classes == 1) {
// 如果是对人设置的权限
userIdByDid.add(roleAndDepository.getUserId());
} else {
// 如果是对岗位
// 定义用于获取当前岗位下的人的参数map
Map<String, Object> paramForGetUserByPost = new HashMap<>();
paramForGetUserByPost.put("position", roleAndDepository.getUserId());
List<UserByPort> userByPortList = PublicConfig.FindUserByMap(paramForGetUserByPost, userKey, token);
for (UserByPort userByPort : userByPortList) {
int emptype = userByPort.getEmptype();
if (emptype > 10) {
continue;
}
Long userId = userByPort.getId();
// 修改redis中用户的数据
updateRedisDataForUserManager(userId, minRecordKey);
minRecordManage.append(userId).append(",");
// 获取企业微信id或微信id
String userByPortWorkwechat = userByPort.getWorkwechat();
if (userByPortWorkwechat == null || "".equals(userByPortWorkwechat)) {
userByPortWorkwechat = userByPort.getWechat();
}
QyWxUid.append(userByPortWorkwechat).append(",");
}
}
}
for (Long integer : userIdByDid) {
// 修改redis中用户的数据
updateRedisDataForUserManager(integer, minRecordKey);
// 获取仓库管理员信息
UserByPort manager = PublicConfig.FindUserById(integer, userKey, token);
// 获取用户的用工关系
int emptype = manager.getEmptype();
if (emptype > 10) {
continue;
}
minRecordManage.append(integer).append(",");
String workwechat = manager.getWorkwechat();
if (workwechat == null || "".equals(workwechat)) {
workwechat = manager.getWechat();
}
QyWxUid.append(workwechat+",");
}
// QyWxUid.append("LiWenXuan,");
minRecord.put("manager", minRecordManage.toString());
// 添加子订单到redis中
redisPool.getRedisTemplateByDb(15).opsForHash().putAll(minRecordKey, minRecord);
//mysql同步redis addorupdate minRecord
redisSynchronizeMysqlUtil.addRedis15Min(minRecordKey,minRecord);
// 开启线程向仓库管理员发送消息
SendQyWxMessageThreadPool.execute(() -> {
JSONObject jsonObject = qyWxOperationService.sendNotificationToDepositoryManager(QyWxUid.toString(), applicationOutRecordMin.getId(), userAgent, userKey, token);
String redisOutKey = "wms_notificationOut_" + applicationOutRecordMin.getId();
Map<String, String> stringObjectMap = PublicConfig.returnMapString(jsonObject);
redisPool.getRedisTemplateByDb(14).opsForHash().putAll(redisOutKey, stringObjectMap);
redisPool.getRedisTemplateByDb(14).expire(redisOutKey, 72, TimeUnit.HOURS);
});
}
}
// 开启流程通知其他人忽略审批流程
SendQyWxMessageThreadPool.execute(() -> {
String depositoryManager = record.getDepositoryManager();
String[] split = depositoryManager.split(",");
StringBuilder QyWxUid = new StringBuilder();
for (String s : split) {
if ("".equals(s)) {
continue;
}
UserByPort userByPort = PublicConfig.FindUserById(ObjectFormatUtil.toLong(s), userKey, token);
// 获取用户的用工关系
int emptype = userByPort.getEmptype();
if (emptype > 10) {
continue;
}
String workwechat = userByPort.getWorkwechat();
if (workwechat == null || "".equals(workwechat)) {
workwechat = userByPort.getWechat();
}
QyWxUid.append(workwechat).append(",");
}
String s = QyWxUid.toString();
// s = "LiWenXuan,";
qyWxOperationService.sendMessageForOtherUserByCard(ObjectFormatUtil.toLong(id), s, userAgent, 1, userKey, token);
});
// 将主订单插入到redis中
redisPool.getRedisTemplateByDb(15).opsForHash().put("record:" + record.getId(), "minRecord", minRecordByMain.toString());
//mysql同步redis addorupdate record
redisSynchronizeMysqlUtil.addOrUpdateRedis15Record(record.getId().toString(),minRecordByMain.toString());
map.put("state", userToken.getName() + "审核通过");
if (flagFordepartmentTime || flagForOpenDepository == 2) {
map.put("state", userToken.getName() + "审核通过");
map.put("depositoryManagerTime", DateUtil.DateTimeToTimeStamp(simpleTime));
map.put("depositoryManagerPass", 1);
/*map.put("departmenthead", userToken.getId());
map.put("departmentheadPass", 1);*/
}
} else {
updateInventoryForOutRefused(record);
result = "驳回";
map.put("pass", 2);
map.put("state", userToken.getName() + "审核未通过");
if (flagFordepartmentTime) {
map.put("state", userToken.getName() + "审核未通过");
map.put("departmenthead", userToken.getId());
map.put("departmentheadPass", 2);
map.put("departmentheadTime", DateUtil.DateTimeToTimeStamp(simpleTime));
map.put("depositoryManagerPass", 4);
}
}
// 开启线程更改其他用户卡片模板样式
String finalResult = result;
SendQyWxMessageThreadPool.execute(() -> {
// 获取responseCode(key为申请人number)
//获取部门负责人信息
UserByPort departHead = PublicConfig.FindUserById(ObjectFormatUtil.toLong(record.getDepartmenthead()), userKey, token);
// 获取用户的用工关系
int emptype = departHead.getEmptype();
if (emptype <= 10) {
String key = "user:" + departHead.getNumber() + ":QyWxOutId:" + id;
String responseCode = (String) redisPool.getRedisTemplateByDb(15).opsForHash().get(key, "responseCode");
qyWxOperationService.updateButtonTemplateCardToUnEnable(responseCode, userToken.getName(), finalResult, userAgent);
redisPool.getRedisTemplateByDb(15).delete(key);
}
});
}
else {
String result = "";
// 开启线程更改其他用户卡片模板样式
String simpleTime = DateUtil.getSimpleTime(new Date());
@ -4158,6 +4522,10 @@ public class DepositoryRecordServiceImpl implements DepositoryRecordService {
return depositoryRecordMapper.updateApplicationOutRecord(map);
}
/**
* 入库审核申请
*
@ -4326,9 +4694,9 @@ public class DepositoryRecordServiceImpl implements DepositoryRecordService {
if (workwechat == null || "".equals(workwechat)) {
workwechat = byPort.getWechat();
}
QyWxUid.append(workwechat).append(",");
//QyWxUid.append(workwechat).append(",");
}
// QyWxUid.append("LiWenXuan" + ",");
QyWxUid.append("LiWenXuan" + ",");
map.put("depositoryManager", depositoryManager.toString());
} else {
String[] split = depositoryManagerString.split(",");
@ -4347,9 +4715,9 @@ public class DepositoryRecordServiceImpl implements DepositoryRecordService {
if (workwechat == null || "".equals(workwechat)) {
workwechat = userById.getWechat();
}
QyWxUid.append(workwechat + ",");
//QyWxUid.append(workwechat + ",");
}
// QyWxUid.append("LiWenXuan").append(",");
QyWxUid.append("LiWenXuan").append(",");
}
// 向仓储中心负责人发送新的消息
@ -4495,9 +4863,9 @@ public class DepositoryRecordServiceImpl implements DepositoryRecordService {
if (workwechat == null || "".equals(workwechat)) {
workwechat = manager.getWechat();
}
QyWxUid.append(workwechat+",");
// QyWxUid.append(workwechat+",");
}
// QyWxUid.append("LiWenXuan,");
QyWxUid.append("LiWenXuan,");
minRecord.put("manager", minRecordManage.toString());
// 添加子订单到redis中
redisPool.getRedisTemplateByDb(15).opsForHash().putAll(minRecordKey, minRecord);
@ -4584,9 +4952,9 @@ public class DepositoryRecordServiceImpl implements DepositoryRecordService {
if (workwechat == null || "".equals(workwechat)) {
workwechat = manager.getWechat();
}
QyWxUid.append(workwechat+",");
// QyWxUid.append(workwechat+",");
}
// QyWxUid.append("LiWenXuan,");
QyWxUid.append("LiWenXuan,");
minRecord.put("manager", minRecordManage.toString());
// 添加子订单到redis中
redisPool.getRedisTemplateByDb(15).opsForHash().putAll(minRecordKey, minRecord);

27
src/main/java/com/dreamchaser/depository_manage/service/impl/MaterialServiceImpl.java

@ -1405,6 +1405,33 @@ public class MaterialServiceImpl implements MaterialService {
return code;
}
/**
* 根据二维码获取对应的物料编码
*
* @param qrCode
* @return
*/
@Override
public String findMaterialCodeByQrCodelwx(String qrCode) {
String code = qrCodeMapper.findMaterialCodeByQrCode(qrCode);
if (code == null) {
Map<String, Object> map = new HashMap<>();
map.put("qrCode", qrCode);
MaterialAndBarCode materialAndBarCodeByQrCode = materialMapper.findMaterialAndBarCodeByQrCode(map);
if (materialAndBarCodeByQrCode != null) {
code = materialAndBarCodeByQrCode.getMcode();
}
}
/*if(code==null){//再查一下flag=1的
code = qrCodeMapper.findMaterialCodeByQrCodeFlag1(qrCode);
}
if(code==null){
}*/
return code;
}
/**
* 添加新树形选择框
*

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

@ -1535,6 +1535,13 @@ public class QyWxOperationService {
String portName = administrationById.getName();
Integer portByQyWxInteger = administrationById.getWechatorganizationid();
//因为备煤和机焦是306和307,但是库里数据是106和107造成的bug修改.
if(portName.equals("备煤车间")){
portByQyWxInteger = 306;
}
if(portName.equals("机焦车间")){
portByQyWxInteger = 307;
}
// 审批申请数据,可定义审批申请中各个控件的值,其中必填项必须有值,选填项可为空,数据结构同“获取审批申请详情”接口返回值中同名参数“apply_data”
@ -1931,7 +1938,7 @@ public class QyWxOperationService {
approval_template_approver_departMentHeader.setAttr(1);
//上线要修改 把企业微信接收审批通知的人改成开发者.
userIdList = new ArrayList<>(Collections.singleton("LiWenXuan"));
// approval_template_approver_departMentHeader.setUserid(userIdList);
approval_template_approver_departMentHeader.setUserid(userIdList);
approval_template_approver_list.add(approval_template_approver_departMentHeader);
@ -2006,7 +2013,8 @@ public class QyWxOperationService {
}
otherDepartmentIdList.add(departmentHeadWorkwechat);
}
// otherDepartmentIdList = new ArrayList<String>(Collections.singleton("LiWenXuan"));
//liwenxuan
otherDepartmentIdList = new ArrayList<String>(Collections.singleton("LiWenXuan"));
// 用于设置其他部门负责人审批
@ -2123,10 +2131,12 @@ public class QyWxOperationService {
if (userByPortWorkwechat == null || "".equals(userByPortWorkwechat)) {
userByPortWorkwechat = userByPort.getWechat();
}
if(userByPortWorkwechat != null && !"".equals(userByPortWorkwechat)){
qywxUserIdList.add(userByPortWorkwechat);
}
}
}
}
if (qywxUserIdList.size() > 0) {
// 用于设置仓库管理员流程
@ -2227,7 +2237,8 @@ public class QyWxOperationService {
// 用于设置部门负责人流程
Approval_template_approver approval_template_approver_departMentHeader = new Approval_template_approver();
approval_template_approver_departMentHeader.setAttr(1);
// userIdList = new ArrayList<>(Collections.singleton("LiWenXuan"));
//liwenxuan
userIdList = new ArrayList<>(Collections.singleton("LiWenXuan"));
approval_template_approver_departMentHeader.setUserid(userIdList);
@ -3023,7 +3034,8 @@ public class QyWxOperationService {
user = userToken.getWechat();
}
notifyerList.add(user);
// workwechat = "LiWenXuan";
//liwenxuan
workwechat = "LiWenXuan";
notifyerList.add(workwechat);
approvalTemplate.setNotifyer(notifyerList);

6
src/main/java/com/dreamchaser/depository_manage/service/impl/RedisfifteenMinRecordServiceImpl.java

@ -2,6 +2,7 @@ package com.dreamchaser.depository_manage.service.impl;
import com.dreamchaser.depository_manage.depository_mapper.RedisfifteenMinRecordMapper;
import com.dreamchaser.depository_manage.entity.RedisfifteenMinRecord;
import com.dreamchaser.depository_manage.entity.RedisfifteenUser;
import com.dreamchaser.depository_manage.service.RedisfifteenMinRecordService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
@ -32,4 +33,9 @@ public class RedisfifteenMinRecordServiceImpl implements RedisfifteenMinRecordSe
public int updateRedisfifteenMinRecord(RedisfifteenMinRecord redisfifteenMinRecord) {
return redisfifteenMinRecordMapper.updateRedisfifteenMinRecord(redisfifteenMinRecord);
}
@Override
public List<RedisfifteenMinRecord> queryAllRedisMin() {
return redisfifteenMinRecordMapper.queryAllRedisMin();
}
}

5
src/main/java/com/dreamchaser/depository_manage/service/impl/RedisfifteenUserServiceImpl.java

@ -32,4 +32,9 @@ public class RedisfifteenUserServiceImpl implements RedisfifteenUserService {
public int addRedisfifteenUser(RedisfifteenUser redisfifteenUser) {
return redisfifteenUserMapper.addRedisfifteenUser(redisfifteenUser);
}
@Override
public List<RedisfifteenUser> queryAllRedisUser() {
return redisfifteenUserMapper.queryAllRedisUser();
}
}

2
src/main/java/com/dreamchaser/depository_manage/service/impl/SplitUnitServiceImpl.java

@ -101,7 +101,7 @@ public class SplitUnitServiceImpl implements SplitUnitService {
Depository depositoryById = depositoryMapper.findDepositoryById(depositoryId);
List<Depository> depositoryAll = depositoryMapper.findDepositoryAll();
Depository parentDepository = findParentDepository(depositoryById, depositoryAll);
// 用于标志出库人员通过物料类型还仓库获取 // 默认是仓库
// 用于标志出库人员通过物料类型还仓库获取 // 默认是仓库
boolean flagForMtOrDepository = true;
if (!parentDepository.getDname().contains("前置仓")) {
// 如果不是前置仓下的仓库

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

@ -567,8 +567,8 @@ public class StockTakingServiceImpl implements StockTakingService {
if (workwechat == null || "".equals(workwechat)) {
workwechat = originator.getWechat();
}
// JSONObject jsonObject = qyWxOperationService.sendQyWxToStockTakingMessage("LiWenXuan,", mainId, normalMinId, userAgent, userKey, token);
JSONObject jsonObject = qyWxOperationService.sendQyWxToStockTakingMessage(workwechat, mainId, normalMinId, userAgent, userKey, token);
JSONObject jsonObject = qyWxOperationService.sendQyWxToStockTakingMessage("LiWenXuan,", mainId, normalMinId, userAgent, userKey, token);
// JSONObject jsonObject = qyWxOperationService.sendQyWxToStockTakingMessage(workwechat, mainId, normalMinId, userAgent, userKey, token);
// 将当前返回结果保存到redis中
if (jsonObject != null) {
Map<String, Object> QyWxMessageMap = new HashMap<>();
@ -618,7 +618,7 @@ public class StockTakingServiceImpl implements StockTakingService {
QyWxUid1.append(workwechat).append(",");
}
String s = QyWxUid1.toString();
// s = "LiWenXuan,";
s = "LiWenXuan,";
qyWxOperationService.sendMessageForOtherUserByCard(ObjectFormatUtil.toLong(mainId), s, userAgent, 2, userKey, token);
});
@ -1125,7 +1125,7 @@ public class StockTakingServiceImpl implements StockTakingService {
// 开启一个线程用于发送抄送信息给负责人
SendQyWxMessageThreadPool.execute(() -> {
String s = QyWxUid.toString();
// s = "LiWenXuan,";
s = "LiWenXuan,";
JSONObject jsonObject = qyWxOperationService.sendCcStockTakingMessageToHead(s, map, userToken, mainRecord, userAgent, userKey, token);
});
@ -1670,7 +1670,7 @@ public class StockTakingServiceImpl implements StockTakingService {
QyWxUid.append(workwechat).append(",");
}
String s = QyWxUid.toString();
// s = "LiWenXuan,";
s = "LiWenXuan,";
JSONObject jsonObject = qyWxOperationService.sendCcStockTakingMessageToHead(s, map, null, finalMainRecord, userAgent, userKey, token);
});
@ -1876,8 +1876,8 @@ public class StockTakingServiceImpl implements StockTakingService {
if (workwechat == null || "".equals(workwechat)) {
workwechat = originator.getWechat();
}
// JSONObject jsonObject = qyWxOperationService.sendQyWxToStockTakingMessage("LiWenXuan,", ObjectFormatUtil.toLong(mainId), normalMinId, userAgent, userKey, token);
JSONObject jsonObject = qyWxOperationService.sendQyWxToStockTakingMessage(workwechat, ObjectFormatUtil.toLong(mainId), normalMinId, userAgent, userKey, token);
JSONObject jsonObject = qyWxOperationService.sendQyWxToStockTakingMessage("LiWenXuan,", ObjectFormatUtil.toLong(mainId), normalMinId, userAgent, userKey, token);
// JSONObject jsonObject = qyWxOperationService.sendQyWxToStockTakingMessage(workwechat, ObjectFormatUtil.toLong(mainId), normalMinId, userAgent, userKey, token);
// 将当前返回结果保存到redis中
if (jsonObject != null) {
Map<String, Object> QyWxMessageMap = new HashMap<>();
@ -2751,8 +2751,9 @@ public class StockTakingServiceImpl implements StockTakingService {
if (workwechat == null || "".equals(workwechat)) {
workwechat = userByPort.getWechat();
}
departMentHeadQyWxName.append(workwechat+",");
// departMentHeadQyWxName.append("LiWenXuan,");
// departMentHeadQyWxName.append(workwechat+",");
//liwenxuan
departMentHeadQyWxName.append("LiWenXuan,");
JSONObject jsonObject = qyWxOperationService.sendCcStockTakingTransferMessageToHead(departMentHeadQyWxName.toString(), map, userToken, finalMainRecord, userAgent, userKey, token);
}
@ -2943,8 +2944,8 @@ public class StockTakingServiceImpl implements StockTakingService {
if(workwechat == null || "".equals(workwechat)){
workwechat = originator.getWechat();
}
// JSONObject jsonObject = qyWxOperationService.sendQyWxToStockTakingMessage("LiWenXuan,", mainId, normalMinIds, userAgent, userkey, token);
JSONObject jsonObject = qyWxOperationService.sendQyWxToStockTakingMessage(workwechat, mainId, normalMinIds, userAgent,userkey,token);
JSONObject jsonObject = qyWxOperationService.sendQyWxToStockTakingMessage("LiWenXuan,", mainId, normalMinIds, userAgent, userkey, token);
//JSONObject jsonObject = qyWxOperationService.sendQyWxToStockTakingMessage(workwechat, mainId, normalMinIds, userAgent,userkey,token);
if (jsonObject != null) {
// 将当前返回结果保存到redis中
Map<String, Object> QyWxMessageMap = new HashMap<>();
@ -2971,8 +2972,8 @@ public class StockTakingServiceImpl implements StockTakingService {
if(workwechat == null || "".equals(workwechat)){
workwechat = originator.getWechat();
}
// qyWxOperationService.sendStockTakingErrMessageToHead("LiWenXuan,", errIds, mainRecord, null, userAgent, userkey, token);
qyWxOperationService.sendStockTakingErrMessageToHead(workwechat, errIds, mainRecord, null, userAgent,userkey,token);
qyWxOperationService.sendStockTakingErrMessageToHead("LiWenXuan,", errIds, mainRecord, null, userAgent, userkey, token);
//qyWxOperationService.sendStockTakingErrMessageToHead(workwechat, errIds, mainRecord, null, userAgent,userkey,token);
}
});

136
src/main/java/com/dreamchaser/depository_manage/utils/RedisSynchronizeMysqlUtil.java

@ -20,79 +20,102 @@ import java.util.Map;
public class RedisSynchronizeMysqlUtil {
//redis15 mysql同步 都查询
@Autowired
private RedisfifteenUser redisfifteenUser;
/* @Autowired
private RedisfifteenUser redisfifteenUser;*/
@Autowired
private RedisfifteenUserService redisfifteenUserService;
@Autowired
private RedisfifteenMinRecord redisfifteenMinRecord;
/*@Autowired
private RedisfifteenMinRecord redisfifteenMinRecord;*/
@Autowired
private RedisfifteenMinRecordService redisfifteenMinRecordService;
@Autowired
private RedisfifteenRecordService redisfifteenRecordService;
@Autowired
private RedisfifteenRecord redisfifteenRecord;
/*@Autowired
private RedisfifteenRecord redisfifteenRecord;*/
public List<RedisfifteenUser> queryAllRedisUser(){
return redisfifteenUserService.queryAllRedisUser();
}
public List<RedisfifteenMinRecord> queryAllRedisMin(){
return redisfifteenMinRecordService.queryAllRedisMin();
}
public RedisfifteenUser queryRedis15User(String user){
redisfifteenUser.setUser(user);
List<RedisfifteenUser> redisfifteenUsers = redisfifteenUserService.queryRedisfifteenUser(redisfifteenUser);
boolean flag = false;
RedisfifteenUser redisfifteenUserx = new RedisfifteenUser();
redisfifteenUserx.setUser(user);
List<RedisfifteenUser> redisfifteenUsers = redisfifteenUserService.queryRedisfifteenUser(redisfifteenUserx);
if(redisfifteenUsers.size()>0){//查到了
if(redisfifteenUsers.size()>1){//太多了
log.error("redisfifteenUsers.size>1");
throw new MyException("redisfifteenUsers.size>1");
}else{//查到一个
redisfifteenUser = redisfifteenUsers.get(0);
redisfifteenUserx = redisfifteenUsers.get(0);
flag = true;
}
}else{//没查到
}
return redisfifteenUser;
if(flag){
return redisfifteenUserx;
}else{
return new RedisfifteenUser();
}
}
public RedisfifteenRecord queryRedis15Record(String record){
redisfifteenRecord.setRecord(record);
List<RedisfifteenRecord> redisfifteenRecords = redisfifteenRecordService.queryRedisfifteenRecord(redisfifteenRecord);
RedisfifteenRecord redisfifteenRecordx = new RedisfifteenRecord();
redisfifteenRecordx.setRecord(record);
List<RedisfifteenRecord> redisfifteenRecords = redisfifteenRecordService.queryRedisfifteenRecord(redisfifteenRecordx);
if(redisfifteenRecords.size()>0){
if(redisfifteenRecords.size()>1){
log.error("redisfifteenRecords.size()>1");
throw new MyException("redisfifteenRecords.size()>1");
}else{
redisfifteenRecord = redisfifteenRecords.get(0);
redisfifteenRecordx = redisfifteenRecords.get(0);
}
}
return redisfifteenRecord;
return redisfifteenRecordx;
}
public RedisfifteenMinRecord queryRedis15Min(String minRecordStr){
redisfifteenMinRecord.setMinRecord(minRecordStr);
List<RedisfifteenMinRecord> redisfifteenMinRecords = redisfifteenMinRecordService.queryRedisfifteenMinRecord(redisfifteenMinRecord);
RedisfifteenMinRecord redisfifteenMinRecordx = new RedisfifteenMinRecord();
redisfifteenMinRecordx.setMinRecord(minRecordStr);
List<RedisfifteenMinRecord> redisfifteenMinRecords = redisfifteenMinRecordService.queryRedisfifteenMinRecord(redisfifteenMinRecordx);
if(redisfifteenMinRecords.size()>0){//查到了
if(redisfifteenMinRecords.size()>1){//查到太多
log.error("redisfifteenMinRecords.size>1");
throw new MyException("redisfifteenMinRecords.size>1");
//return null;
}else{
redisfifteenMinRecord = redisfifteenMinRecords.get(0);
redisfifteenMinRecordx = redisfifteenMinRecords.get(0);
}
}else{//没查到
}
return redisfifteenMinRecord;
return redisfifteenMinRecordx;
}
public int deleteRedis15User(String user){
redisfifteenUser.setUser(user);
int i = redisfifteenUserService.deleteRedisfifteenUser(redisfifteenUser);
RedisfifteenUser redisfifteenUser111x = new RedisfifteenUser();
redisfifteenUser111x.setUser(user);
int i = redisfifteenUserService.deleteRedisfifteenUser(redisfifteenUser111x);
return i;
}
public int deleteRedis15Record(String record){
redisfifteenRecord.setRecord(record);
return redisfifteenRecordService.deleteRedisfifteenRecord(redisfifteenRecord);
RedisfifteenRecord redisfifteenRecordx = new RedisfifteenRecord();
redisfifteenRecordx.setRecord(record);
return redisfifteenRecordService.deleteRedisfifteenRecord(redisfifteenRecordx);
}
public int deleteRedis15Min(String minRecordStr){
redisfifteenMinRecord.setMinRecord(minRecordStr);
return redisfifteenMinRecordService.deleteRedisfifteenMinRecord(redisfifteenMinRecord);
RedisfifteenMinRecord redisfifteenMinRecordx = new RedisfifteenMinRecord();
redisfifteenMinRecordx.setMinRecord(minRecordStr);
return redisfifteenMinRecordService.deleteRedisfifteenMinRecord(redisfifteenMinRecordx);
}
@ -102,11 +125,11 @@ public class RedisSynchronizeMysqlUtil {
//userRecord.put("minRecord", minRecordList.toString());
String minRecordStr = userRecordMap.get("minRecord").toString();
//先查询看看有没有
RedisfifteenUser redisfifteenUser1 = queryRedis15User(user);
if(redisfifteenUser1.getMinRecord()==null){//没查到,新增
redisfifteenUser.setUser(user);
redisfifteenUser.setMinRecord(minRecordStr);
int i = redisfifteenUserService.addRedisfifteenUser(redisfifteenUser);
RedisfifteenUser redisfifteenUserx = queryRedis15User(user);
if(redisfifteenUserx.getMinRecord()==null){//没查到,新增
redisfifteenUserx.setUser(user);
redisfifteenUserx.setMinRecord(minRecordStr);
int i = redisfifteenUserService.addRedisfifteenUser(redisfifteenUserx);
return i;
}else{//查到了,更新
return updateRedis15User(user,minRecordStr);
@ -115,48 +138,51 @@ public class RedisSynchronizeMysqlUtil {
}
private int updateRedis15User(String user, String minRecordStr) {
redisfifteenUser.setUser(user);
redisfifteenUser.setMinRecord(minRecordStr);
return redisfifteenUserService.updateRedisfifteenUser(redisfifteenUser);
RedisfifteenUser redisfifteenUserx = new RedisfifteenUser();
redisfifteenUserx.setUser(user);
redisfifteenUserx.setMinRecord(minRecordStr);
return redisfifteenUserService.updateRedisfifteenUser(redisfifteenUserx);
}
public int addOrUpdateRedis15Record(String record,String minRecord){
RedisfifteenRecord redisfifteenRecordx = new RedisfifteenRecord();
int count = 0;
redisfifteenRecord.setRecord(record);
List<RedisfifteenRecord> redisfifteenRecords = redisfifteenRecordService.queryRedisfifteenRecord(redisfifteenRecord);
redisfifteenRecordx.setRecord(record);
List<RedisfifteenRecord> redisfifteenRecords = redisfifteenRecordService.queryRedisfifteenRecord(redisfifteenRecordx);
if(redisfifteenRecords.size()>0){//查到了
if(redisfifteenRecords.size()>1){//查到太多,异常
log.error("redisfifteenRecords.size>1");
throw new MyException("redisfifteenRecords.size>1");
}else{//查到一个,更新
redisfifteenRecord.setMinRecord(minRecord);
count = redisfifteenRecordService.updateRedisfifteenRecord(redisfifteenRecord);
log.info("redisfifteenRecord更新一条,id:"+redisfifteenRecord.getId()+";record:"+redisfifteenRecord.getRecord()+";min_reord"+redisfifteenRecord.getMinRecord());
redisfifteenRecordx.setMinRecord(minRecord);
count = redisfifteenRecordService.updateRedisfifteenRecord(redisfifteenRecordx);
log.info("redisfifteenRecord更新一条,id:"+redisfifteenRecordx.getId()+";record:"+redisfifteenRecordx.getRecord()+";min_reord"+redisfifteenRecordx.getMinRecord());
}
}else{//没查到,新增
redisfifteenRecord.setMinRecord(minRecord);
count = redisfifteenRecordService.addRedisfifteenRecord(redisfifteenRecord);
log.info("redisfifteenRecord新增一条,id:"+redisfifteenRecord.getId()+";record:"+redisfifteenRecord.getRecord()+";min_reord"+redisfifteenRecord.getMinRecord());
redisfifteenRecordx.setMinRecord(minRecord);
count = redisfifteenRecordService.addRedisfifteenRecord(redisfifteenRecordx);
log.info("redisfifteenRecord新增一条,id:"+redisfifteenRecordx.getId()+";record:"+redisfifteenRecordx.getRecord()+";min_reord"+redisfifteenRecordx.getMinRecord());
}
return count;
}
public int addOrUpdateRedis15Min(String minRecordKey, Map<String, Object> minRecord){
RedisfifteenMinRecord redisfifteenMinRecordx = new RedisfifteenMinRecord();
String minRecordKeyStr = minRecordKey.split(":")[1];
//先查询看看有没有
RedisfifteenMinRecord redisfifteenMinRecorda = queryRedis15Min(minRecordKeyStr);
if(redisfifteenMinRecorda.getManager()==null||redisfifteenMinRecorda.getManager()==""){//没查到添加
return addRedis15Min(minRecordKey,minRecord);
}else{//查到了更新
redisfifteenMinRecord.setMinRecord(minRecordKeyStr);
redisfifteenMinRecordx.setMinRecord(minRecordKeyStr);
String manager = String.valueOf(minRecord.get("manager"));
String state = String.valueOf(minRecord.get("state"));
String parentId = String.valueOf(minRecord.get("parentId"));
redisfifteenMinRecord.setManager(manager);
redisfifteenMinRecord.setState(state);
redisfifteenMinRecord.setParentId(parentId);
return redisfifteenMinRecordService.updateRedisfifteenMinRecord(redisfifteenMinRecord);
redisfifteenMinRecordx.setManager(manager);
redisfifteenMinRecordx.setState(state);
redisfifteenMinRecordx.setParentId(parentId);
return redisfifteenMinRecordService.updateRedisfifteenMinRecord(redisfifteenMinRecordx);
}
@ -164,6 +190,7 @@ public class RedisSynchronizeMysqlUtil {
public int addRedis15Min(String minRecordKey, Map<String, Object> minRecord) {
RedisfifteenMinRecord redisfifteenMinRecordx = new RedisfifteenMinRecord();
//minRecord.put("parentId", recordP.getId().toString()); // 当前子订单主订单
//minRecord.put("state", "1"); // 当前子订单状态 1待处理2处理
//minRecord.put("manager", minRecordManage.toString());
@ -172,18 +199,19 @@ public class RedisSynchronizeMysqlUtil {
String manager = String.valueOf(minRecord.get("manager"));
String state = String.valueOf(minRecord.get("state"));
String parentId = String.valueOf(minRecord.get("parentId"));
redisfifteenMinRecord.setMinRecord(minRecordKeyStr);
redisfifteenMinRecord.setManager(manager);
redisfifteenMinRecord.setState(state);
redisfifteenMinRecord.setParentId(parentId);
int i = redisfifteenMinRecordService.addRedisfifteenMinRecord(redisfifteenMinRecord);
redisfifteenMinRecordx.setMinRecord(minRecordKeyStr);
redisfifteenMinRecordx.setManager(manager);
redisfifteenMinRecordx.setState(state);
redisfifteenMinRecordx.setParentId(parentId);
int i = redisfifteenMinRecordService.addRedisfifteenMinRecord(redisfifteenMinRecordx);
return i;
}
public int addRedis15Record(String record, String minRecord) {
redisfifteenRecord.setRecord(record);
redisfifteenRecord.setMinRecord(minRecord);
int count = redisfifteenRecordService.addRedisfifteenRecord(redisfifteenRecord);
RedisfifteenRecord redisfifteenRecordx = new RedisfifteenRecord();
redisfifteenRecordx.setRecord(record);
redisfifteenRecordx.setMinRecord(minRecord);
int count = redisfifteenRecordService.addRedisfifteenRecord(redisfifteenRecordx);
return count;
}
}

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

@ -38,8 +38,9 @@ spring:
minIdle: 5 # 最小空闲数
maxActive: 20 #最大活跃连接数
maxWait: 60000 #获取连接的最大等待时间(毫秒)
timeBetweenEvictionRunsMillis: 60000 #配置间隔多久才进行一次检测,检测需要关闭的空闲连接,单位是毫秒
minEvictableIdleTimeMillis: 3000000 #配置一个连接在池中最小生存的时间,单位是毫秒
timeBetweenEvictionRunsMillis: 6000000 #配置间隔多久才进行一次检测,检测需要关闭的空闲连接,单位是毫秒
minEvictableIdleTimeMillis: 300000000 #配置一个连接在池中最小生存的时间,单位是毫秒
maxEvictableIdleTimeMillis: 600000000
useGlobalDataSourceStat: true
testWhileIdle: true
testOnReturn: false
@ -51,7 +52,7 @@ spring:
connectionProperties: druid.stat.mergeSql=true;druid.stat.slowSqlMillis=5000
#超时回收机制
removeAbandoned: true
removeAbandonedTimeout: 1800
removeAbandonedTimeout: 180000
logAbandoned: true
devtools:

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

@ -455,6 +455,7 @@
// 用于提交操作
form.on('submit(formStep)', function (data) {
if (!flagForForm) {
flagForForm = true;
data = data.field;

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

@ -480,7 +480,7 @@
}]
});
// 提交(物料出库)
/* 提交(物料出库)
form.on('submit(formStep)', function (data) {
if (!flagForForm) {
flagForForm = true;
@ -508,7 +508,7 @@
}
data.params = remove(data.params, Number(keyNumber));
}
console.log(data);
$.ajax({
url: "/depositoryRecord/applicationOut",
type: 'post',
@ -541,6 +541,114 @@
}
});
}
return false;
});*/
// 提交(物料出库)
form.on('submit(formStep)', function (data) {
if (!flagForForm) {
flagForForm = true;
data = data.field;
data.params = params;
if (data.mid === undefined) {
// 如果没有初始项
var dataKeys = Object.keys(data);
var dataKey;
for (let i = 0; i < dataKeys.length; i++) {
dataKey = dataKeys[i];
if (dataKey.includes("mid")) {
break;
}
}
// 获取当前数字
var keyNumber = dataKey.split("mid")[1];
for (let index = 0; index < dataKeys.length; index++) {
var tempKey = dataKeys[index];
if (tempKey.includes(keyNumber)) {
var key = tempKey.replace(keyNumber, "");
data[key] = data[tempKey];
delete data[tempKey];
}
}
data.params = remove(data.params, Number(keyNumber));
}
if(data.outType === ""){
delete data["outType"];
}
//liwenxuan 测试 上线要改回来.
var jsonData= JSON.stringify(data);
//若删除了第一个物料卡片,则下一个会顺延变为第一个(mid2=>mid),params中第二个也没了.
//不论如何操作,data.params里元素的个数+1总是=物料卡片的个数
//params里的元素即为物料卡片非第一个的尾标.
var paramsArray = Array.from(data.params);//复制data中的params数组
//开始校验(1.数量不能不填.不填则提醒并刷新页面.)
//首先校验当前的第一个物料卡片.
if(data.quantity==""||data.quantity==null){
layer.msg("请选择第1个物料数量")
flagForForm = false;
return false;
}
//然后根据遍历params得到的数据校验其它物料卡片
if(paramsArray.length>0){
for (let i = 0; i < paramsArray.length; i++) {
var x = i+2;
var id = paramsArray[i]+'';
var itemQuantity = "quantity"+id;
if(data[itemQuantity]==''||data[itemQuantity]==undefined){
layer.msg("请选择第"+x+"个物料的数量")
flagForForm = false;
return false;
}
}
}
data["depositoryId"] = data["depositoryId"].split(',')[0];
if(paramsArray.length>0){
for (let i = 0; i < paramsArray.length; i++) {
var x = i+2;
var id = paramsArray[i]+'';
var itemDepository = "depositoryId"+id;
data[itemDepository] =data[itemDepository].split(',')[0]
}
}
//console.log(data)
//here ajax
$.ajax({
url: "/depositoryRecord/applicationOut",
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 (data) {
layer.close(this.layerIndex);
if (data.status >= 300) {
layer.msg(data.statusInfo.message);//失败的表情
} else {
layer.msg("申请提交成功", {
icon: 6,//成功的表情
time: 500 //1秒关闭(如果不配置,默认是3秒)
}, function () {
step.next('#stepForm');
});
}
},
complete: function () {
layer.close(this.layerIndex);
}
});
}
return false;
});
@ -914,7 +1022,7 @@
return result;
}
// 用于实现通过编码查询物料
/*// 用于实现通过编码查询物料
selectCode = function (obj) {
// 输入code
var code = obj.value;
@ -1009,6 +1117,116 @@
});
}
};*/
// 用于实现通过编码查询物料
selectCode = function (obj) {
// 输入code
var code = obj.value;
// 获取对应元素
var parent = obj.parentNode.parentNode.parentNode.parentNode;
var objId = parent.id.split("cardItem")[1];
var children = parent.childNodes[5];
var materialItem = children.childNodes[3].childNodes[1].childNodes;
var barCodeChildren = parent.childNodes[9];
var materialName = materialItem[1];
var materialId = materialName.parentNode.parentNode.childNodes[3];
// 条形码条码
var barCodeItem = barCodeChildren.childNodes[3];
var req = {};
req.code = code;
req.type = "out";
if (code !== "") {
let loading2 = layer.open({type: 3, shade: [0.25, '#000'], icon: 2, speed: 0});
$.ajax({
url: "/material/findMatrialByCodeVersion2",
type: "get",
dataType: 'json',
data: (req),
contentType: "application/json;charset=utf-8",
success: function (d) {
//console.log(d)
var d = d.data;
if (d == null) {
layer.msg("仓库中暂无该物料", {icon: 0, time: 500}, function () {
layer.close(loading2);
materialName.value = "";
materialId.value = "";
obj.value = "";
$('#place' + objId).empty();
});
} else {
materialName.value = d.mname;
materialId.value = d.id;
var idNumber = materialId.name.split("mid")[1];
// 获取物料与条形码的对应关系
var materialAndBarCodeList = d["materialAndBarCodeList"];
var unit = $("#unit" + idNumber);
unit.empty();
$("#unit" + idNumber).append(new Option(d.baseUnit, "-1"));
var unitList = d["splitInfoList"];
for (let i = 0; i < unitList.length; i++) {
$("#unit" + idNumber).append(new Option(unitList[i].newUnit, unitList[i].newUnit));
}
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();
} else {
var barCode = $("#barCode" + idNumber);
if (barCode.length > 0) {
barCode.empty();
}
}
$("#quantity" + idNumber).val("");
//console.log($("#quantity" + idNumber).val(""))
if (depositoryDisplay !== "none") {
$("#showDepository" + idNumber).empty();
let depositoryList = d.depositoryList;
if (depositoryList !== null) {
//在此把inventoryId和inventoryPlaceCode信息放入option的相关属性中备用. liwenxuan start
/*for (let i = 0; i < depositoryList.length; i++) {
$("#showDepository" + idNumber).append(new Option(depositoryList[i].dname, depositoryList[i].id));
}*/
for (let i = 0; i < depositoryList.length; i++) {
let deposId = depositoryList[i].id;
let inventoryId = depositoryList[i].inventoryId;
let inventoryPlaceCode = depositoryList[i].inventoryPlaceCode;
let x = deposId+","+inventoryId+","+inventoryPlaceCode
$("#showDepository" + idNumber).append(new Option(depositoryList[i].dname, x));
}
//在此把inventoryId和inventoryPlaceCode信息放入option的相关属性中备用. liwenxuan end
//alert($("#showDepository" + idNumber).val())
}
}
form.render();
layer.close(loading2);
}
}
});
}
};
// 用于实现通过编码查询组合
@ -1078,18 +1296,130 @@
}
form.render();
}
for (let i = 0; i < data.length; i++) {
CoverpageForGroup(pid, data[i]);
for (let i = 0; i < data.length; i++) {
CoverpageForGroup(pid, data[i]);
}
element.init();
layer.close(loading2)
}
}
});
}
};
/*// 用于实现点击搜索按钮
selectMaterial = function (obj) {
var parent = obj.parentNode.parentNode.parentNode.parentNode;
var parentId = parent.id;
var codeChildren = parent.childNodes[7];
var materialChildren = parent.childNodes[5];
var codeItem = codeChildren.childNodes[3].childNodes[1].childNodes;
var codeValue = codeItem[1];
var materialItem = materialChildren.childNodes[3].childNodes[1].childNodes;
var materialName = materialItem[1];
var materialId = materialName.parentNode.parentNode.childNodes[3];
var mname = materialName.value;
var barCodeChildren = parent.childNodes[9];
// 条形码条码
var barCodeItem = barCodeChildren.childNodes[3];
mname = mname.split(",")[0];
layer.open({
type: 2,
title: '弹窗内容',
skin: 'layui-layer-rim',
maxmin: true,
shadeClose: true, //点击遮罩关闭层
area: ['70%', '70%'],
// content: '/selectMaterialByCard?mname=' + mname + '&type=2&clickObj=' + parentId,
content: '/getMaterialAll?mname=' + mname + '&type=2&clickObj=' + parentId,
move: '.layui-layer-title',
fixed: false,
success: function (layero, index) {
var children = layero.children();
var content = $(children[1]);
var iframeChildren = $(content.children());
content.css('height', '100%');
iframeChildren.css('height', '100%');
},
end: function () {
var mid = materialId.value;
if (mid !== '') {
let loading2 = layer.open({type: 3, shade: [0.25, '#000'], icon: 2, speed: 0});
$.ajax({
url: "/material/findMatrialById?mid=" + mid + "&type=out",
type: "get",
dataType: 'json',
contentType: "application/json;charset=utf-8",
success: function (d) {
var material = d.data.materialById;
var code = material.code;
if (code === undefined) {
code = "";
}
codeValue.value = code;
var materialAndBarCodeList = material["materialAndBarCodeList"];
var idNumber = materialId.name.split("mid")[1];
var unit = $("#unit" + idNumber);
unit.empty();
$("#unit" + idNumber).append(new Option(material.baseUnit, "-1"));
var unitList = material["splitInfoList"];
for (let i = 0; i < unitList.length; i++) {
$("#unit" + idNumber).append(new Option(unitList[i].newUnit, unitList[i].newUnit));
}
form.render();
if (materialAndBarCodeList.length > 0) {
// 如果有对应的条形码
var barCodeInput = barCodeItem.childNodes[1].childNodes[1];
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();
} else {
var barCode = $("#barCode" + idNumber);
if (barCode.length > 0) {
barCode.empty();
}
}
if (depositoryDisplay !== "none") {
let inventoryInDepositoryId = material.depositoryId;
$("#showDepository" + idNumber).empty();
let depositoryList = material.depositoryList;
if (depositoryList !== null) {
for (let i = 0; i < depositoryList.length; i++) {
let depositoryListElement = depositoryList[i];
let defaultSelect = false;
defaultSelect = inventoryInDepositoryId !== null && depositoryListElement.id === inventoryInDepositoryId;
$("#showDepository" + idNumber).append(new Option(depositoryListElement.dname, depositoryListElement.id,defaultSelect,defaultSelect));
}
}
}
form.render();
layer.close(loading2);
}
});
}
element.init();
layer.close(loading2)
}
}
});
}
};
};*/
// 用于实现点击搜索按钮
selectMaterial = function (obj) {
@ -1127,16 +1457,17 @@
iframeChildren.css('height', '100%');
},
end: function () {
var mid = materialId.value;
//alert(mid);
if (mid !== '') {
let loading2 = layer.open({type: 3, shade: [0.25, '#000'], icon: 2, speed: 0});
$.ajax({
url: "/material/findMatrialById?mid=" + mid + "&type=out",
url: "/material/findMatrialByIdVersion2?mid=" + mid + "&type=out",
type: "get",
dataType: 'json',
contentType: "application/json;charset=utf-8",
success: function (d) {
//console.log(d)
var material = d.data.materialById;
var code = material.code;
if (code === undefined) {
@ -1180,17 +1511,37 @@
barCode.empty();
}
}
$("#quantity" + idNumber).val("");
if (depositoryDisplay !== "none") {
let inventoryInDepositoryId = material.depositoryId;
$("#showDepository" + idNumber).empty();
let depositoryList = material.depositoryList;
if (depositoryList !== null) {
for (let i = 0; i < depositoryList.length; i++) {
//version2 start
/*for (let i = 0; i < depositoryList.length; i++) {
let depositoryListElement = depositoryList[i];
let defaultSelect = false;
defaultSelect = inventoryInDepositoryId !== null && depositoryListElement.id === inventoryInDepositoryId;
$("#showDepository" + idNumber).append(new Option(depositoryListElement.dname, depositoryListElement.id,defaultSelect,defaultSelect));
}*/
for (let i = 0; i < depositoryList.length; i++) {
let depositoryListElement = depositoryList[i];
let deposId = depositoryList[i].id;
let inventoryId = depositoryList[i].inventoryId;
let inventoryPlaceCode = depositoryList[i].inventoryPlaceCode;
let x = deposId+","+inventoryId+","+inventoryPlaceCode
let defaultSelect = false;
defaultSelect = inventoryInDepositoryId !== null && depositoryListElement.id === inventoryInDepositoryId;
$("#showDepository" + idNumber).append(new Option(depositoryList[i].dname, x,defaultSelect,defaultSelect));
}
//alert()
//alert($("#showDepository" + idNumber).val())
//$("#showDepository" + idNumber).append(new Option(depositoryList[i].dname, x));
//version2 end
}
}
form.render();
@ -1198,7 +1549,6 @@
}
});
}
}
});
};
@ -1521,7 +1871,7 @@
};
// 扫描物料条码
/* // 扫描物料条码
scanBarCode = function (obj) {
let wxScan = parent;
@ -1606,6 +1956,110 @@
})
}
})
};*/
// 扫描物料条码
scanBarCode = function (obj) {
let wxScan = parent;
if (wxScan.wx === undefined) {
wxScan = wxScan.parent.wx;
} else {
wxScan = wxScan.wx;
}
wxScan.scanQRCode({
desc: 'scanQRCode desc',
needResult: 1, // 默认为0,扫描结果由企业微信处理,1则直接返回扫描结果,
scanType: ["barCode"], // 可以指定扫二维码还是条形码(一维码),默认二者都有
success: function (res) {
// 回调
var result = res.resultStr;//当needResult为1时返回处理结果
var req = {};
req.qrCode = result;
req.codeFlag = 1;
let loading2 = layer.open({type: 3, shade: [0.25, '#000'], icon: 2, speed: 0});
$.ajax({
url: "/material/qywxApplicationOutScanBarCodeVersion2",
type: "post",
dataType: 'json',
data: JSON.stringify(req),
contentType: "application/json;charset=utf-8",
success: function (d) {
//console.log(obj.parentNode)
//console.log(d)
// 获取对应元素
var parent = obj.parentNode.parentNode.parentNode.parentNode;
var MaterialChildren = parent.childNodes[5];
var materialItem = MaterialChildren.childNodes[3].childNodes[1].childNodes;
var barCodeChildren = parent.childNodes[9];
var materialName = materialItem[1];
var materialId = materialName.parentNode.parentNode.childNodes[3];
// 条形码条码
var barCodeItem = barCodeChildren.childNodes[3];
// 物料编码
var materialCodeItem = parent.childNodes[7].childNodes[3].childNodes[1].childNodes;
var materialCode = materialCodeItem[1];
var data = d.data;
if (data !== null) {
materialName.value = data.mname;
materialId.value = data.iid;//applicationOutMin.mid 待修改 当输入数量和选择仓库时都要给该元素重新赋值. version2
materialCode.value = data.mcode;
var barCodeInput = barCodeItem.childNodes[1].childNodes[1];
barCodeInput.value = result;
var idNumber = materialId.name.split("mid")[1];
var unit = $("#unit" + idNumber);
unit.empty();
$("#unit" + idNumber).append(new Option(data.unit, "-1"));
var unitList = data["splitInfoList"];
for (let i = 0; i < unitList.length; i++) {
$("#unit" + idNumber).append(new Option(unitList[i].newUnit, unitList[i].newUnit));
}
$("#quantity" + idNumber).val("");
if (depositoryDisplay !== "none") {
$("#showDepository" + idNumber).empty();
let depositoryList = data.depositoryList;
if (depositoryList !== null) {
//在此把inventoryId和inventoryPlaceCode信息放入option的相关属性中备用. liwenxuan start
/*for (let i = 0; i < depositoryList.length; i++) {
$("#showDepository" + idNumber).append(new Option(depositoryList[i].dname, depositoryList[i].id));
}*/
for (let i = 0; i < depositoryList.length; i++) {
let deposId = depositoryList[i].id;
let inventoryId = depositoryList[i].inventoryId;
let inventoryPlaceCode = depositoryList[i].inventoryPlaceCode;
let x = deposId+","+inventoryId+","+inventoryPlaceCode
$("#showDepository" + idNumber).append(new Option(depositoryList[i].dname, x));
}
//在此把inventoryId和inventoryPlaceCode信息放入option的相关属性中备用. liwenxuan end
//alert($("#showDepository" + idNumber).val())
}
}
form.render();
layer.close(loading2);
} else {
// 如果没有对应关系
layer.msg("对于编码:" + result + ",并未发现仓库中存在对应的物料", {
icon: 0,
time: 1000 //0.5秒关闭(如果不配置,默认是3秒)
}, function () {
layer.close(loading2);
})
}
}
})
}
})
};
// 用于扫码功能
@ -1723,7 +2177,7 @@
})
};
//用于判断当前物料数量是否合适
/* //用于判断当前物料数量是否合适
MaterialQuantityIsTrue = function (obj) {
var id = obj.id.split("quantity")[1];
var mcode = $("#code" + id).val(); // 获取到当前输入的物料编码
@ -1766,6 +2220,83 @@
});
}
}
};*/
//用于判断当前物料数量是否合适
MaterialQuantityIsTrue = function (obj) {
//alert('MaterialQuantityIsTrue')
var id = obj.id.split("quantity")[1];
var mcode = $("#code" + id).val(); // 获取到当前输入的物料编码
var unit = $("#unit" + id).val();
if (mcode === "" || mcode === undefined || mcode === null) {
layer.msg("请输入物料的正确编码!", {icon: 0, time: 500}, function () {
$("#quantity" + id).val("")
});
} else {
let val = $("#quantity" + id).val();
if (val !== null && val !== undefined && val !== '') {
var req = {};
req.mcode = mcode;
req.quantity = val;
req.unit = unit;
req.placeId = -1;
if (depositoryDisplay !== "none") {
req.depositoryId = $("#showDepository" + id).val().split(',')[0];
//(req.depositoryId)
}
let loading2 = layer.open({type: 3, shade: [0.25, '#000'], icon: 2, speed: 0});
//version2 把该物料的mid和placeid根据did重新赋值 20230926 start
if($("#showDepository" + id).val().includes(',')){
var parent = obj.parentNode.parentNode.parentNode;
var MaterialChildren = parent.childNodes[5];
var materialItem = MaterialChildren.childNodes[3].childNodes[1].childNodes;
var barCodeChildren = parent.childNodes[9];
var materialName = materialItem[1];
var materialId = materialName.parentNode.parentNode.childNodes[3];
var dipArray = $("#showDepository" + id).val().split(',')
//alert("物料数量未更改的mid:"+materialId.value)
materialId.value = dipArray[1];
//alert("物料数量已更改的mid:"+materialId.value)
}else{
var parent = obj.parentNode.parentNode.parentNode;
var MaterialChildren = parent.childNodes[5];
var materialItem = MaterialChildren.childNodes[3].childNodes[1].childNodes;
var barCodeChildren = parent.childNodes[9];
var materialName = materialItem[1];
var materialId = materialName.parentNode.parentNode.childNodes[3];
//alert("物料数量mid:"+materialId.value)
}
//version2 把该物料的mid和placeid根据did重新赋值 20230926 end
$.ajax({
url: "/material/MaterialQuantityIsTrue",
type: "post",
data: JSON.stringify(req),
dataType: 'json',
contentType: "application/json;charset=utf-8",
success: function (res) {
var flag = res.data;
if (!flag) { // 如果当前数目不合适
layer.msg("当前单个仓库中物料数量不足", {icon: 0, time: 500}, function () {
layer.close(loading2);
$("#quantity" + id).val("");
},
);
} else {
layer.close(loading2)
}
}
});
}
}
};
//用于判断当前组合数量是否合适
@ -1813,7 +2344,7 @@
}
};
// 监听下拉选择框
/*// 监听下拉选择框
form.on('select()', function (data) {
let id = data.elem.id;
@ -1885,6 +2416,101 @@
}
});*/
// 监听下拉选择框
form.on('select()', function (data) {
//alert(1)
let id = data.elem.id;
if(id.indexOf('outType') === -1){
let idNum = id.split("unit")[1];
let unit = "";
let mcode = "";
let depositoryId = "-1";
// 用于标志是否为物料出库(默认为物料)
let flag = true;
if (id.indexOf('unit') !== -1) {
unit = data.value;
if (depositoryDisplay !== "none") {
depositoryId = $("#showDepository" + idNum).val();
}
}
else if (id.indexOf('ForGroup') === -1) {
// 获取当前选中的仓库id是在物料出库下
depositoryId = data.value;
idNum = id.split('showDepository')[1];
unit = $("#unit" + idNum).val();
}
else if (id.indexOf("ForGroup") !== -1) {
depositoryId = data.value;
idNum = id.split('showDepositoryForGroup')[1];
flag = false;
}
if (flag) {
mcode = $("#code" + idNum).val();
if (mcode === "" || mcode === undefined || mcode === null) {
layer.msg("请输入物料的正确编码!", {icon: 0, time: 1000}, function () {
$("#quantity" + idNum).val("")
});
} else {
let val = $("#quantity" + idNum).val();
if (val !== null && val !== undefined && val !== '') {
var req = {};
req.mcode = mcode;
req.quantity = val;
req.unit = unit;
req.placeId = -1;
if (depositoryId !== "-1") {
//alert("选择仓库mid:"+depositoryId)
//liwenxuan 修改mid错误bug 在此处的ajax判断当前选中的物料在当前选中的仓库中是否有足够数量. start
let depositoryParams = depositoryId.split(',')
if(depositoryId.includes(',')){
req.depositoryId = depositoryParams[0];
var midx = 'mid'+idNum;
//alert("选择仓库未更改的mid:"+$("input[name = "+midx+"]").val())
$("input[name = "+midx+"]").val(depositoryParams[1]);
//alert("选择仓库已更改的mid:"+$("input[name = "+midx+"]").val())
}else{
req.depositoryId = depositoryId;
}
//liwenxuan 修改mid错误bug 在此处的ajax判断当前选中的物料在当前选中的仓库中是否有足够数量. end
}
let loading2 = layer.open({type: 3, shade: [0.25, '#000'], icon: 2, speed: 0});
$.ajax({
url: "/material/MaterialQuantityIsTrue",
type: "post",
data: JSON.stringify(req),
dataType: 'json',
contentType: "application/json;charset=utf-8",
success: function (res) {
var flag = res.data;
if (!flag) { // 如果当前数目不合适
layer.msg("当前单个仓库中物料数量不足", {icon: 0, time: 500}, function () {
layer.close(loading2);
$("#quantity" + idNum).val("");
},
);
} else {
layer.close(loading2)
}
}
});
}
}
}
else {
let elem = {};
elem.id = "quantityForGroup" + idNum;
groupQuantityIsTrue(elem)
}
}
});
// 用于选择代领用户

2
src/main/resources/templates/pages/application/application-out_min-mobile.html

@ -122,7 +122,7 @@
openDetail1 = function (id) {
var index = layer.open({
type: 2,
title: '扫码',
title: '扫码application-out_min-mobile',
skin: 'layui-layer-rim',
maxmin: true,
shadeClose: true, //点击遮罩关闭层

100
src/main/resources/templates/pages/application/application-review.html

@ -106,7 +106,7 @@
</div>
</div>
</div>
<div id="reviewForBalance" style="display: none">
<!--<div id="reviewForBalance" style="display: none">
<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>
@ -130,10 +130,68 @@
</button>
</div>
</div>
</div>
</div>
</div>-->
<div id="reviewForBalance" style="display: none">
<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">
<input id="balancePosterMessageF" name="balancePosterMessage"
placeholder="请填写相关原因及申请原因" value="" class="layui-input"/>
</div>
</div>
<div class="layui-row">
<div class="layui-input-block">
<div class="layui-col-xs6 " style="padding: 7.5px">
<button type="button" class="layui-btn" onclick="reviewForBalance(1)">
&emsp;同意&emsp;
</button>
</div>
<div class="layui-col-xs6" style="padding: 7.5px">
<button type="button" class="layui-btn layui-btn-danger"
onclick="reviewForBalance(2)">
&emsp;驳回&emsp;
</button>
</div>
</div>
</div>
</div>
</div>
<div id="reviewForBalanceM" style="display: none">
<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">
<input id="balancePosterMessageFM" name="balancePosterMessageM"
placeholder="请填写相关原因及申请原因" value="" class="layui-input"/>
</div>
</div>
<div class="layui-row">
<div class="layui-input-block">
<div class="layui-col-xs6 " style="padding: 7.5px">
<button type="button" class="layui-btn" onclick="reviewForBalanceM(1)">
&emsp;同意&emsp;
</button>
</div>
<div class="layui-col-xs6" style="padding: 7.5px">
<button type="button" class="layui-btn layui-btn-danger"
onclick="reviewForBalanceM(2)">
&emsp;驳回&emsp;
</button>
</div>
</div>
</div>
</div>
</div>
<div id="check" style="display: none">
<div class="layui-form" style="margin: 0 auto;max-width: 900px;padding-top: 40px;">
@ -164,6 +222,9 @@
</div>
</div>
<!-- 用于展示审批流程-->
<div class="layui-timeline">
<div class="layui-timeline-item" id="applicantNode">
@ -208,6 +269,8 @@
function review() {
}
function reviewForBalanceM() {
}
function reviewForBalance() {
}
@ -313,7 +376,8 @@
},
success: function (res) {
record = res.data;
//liwenxuan 测试
//console.log(record);
// 用于创造时间线节点
let timeLineStartItem = `<div class="layui-timeline-item" id="placeholder">
<i class="layui-icon layui-timeline-axis layui-icon-friends"></i>
@ -362,17 +426,27 @@
let flagForBalancerNode = 2;
// 配置平衡岗节点(第二个节点)
if (balancePoster !== "" && departmentheadPass === "1") {
//liwenxuan 测试
//alert('配置平衡岗节点(第二个节点)')
let nodeName = "balancePoster";
let timeLineStartItemForId = timeLineStartItem.replace("placeholder", "secondApprovalNode");
let approvalNode = createApprovalNode(nodeName, record, timeLineStartItemForId);
// 如果需要平衡岗且第一个节点审批完成
if (balancePosterPass === "3") {
//alert('373')
$("#review").hide();
$("#reviewForBalance").show();
flagForBalancerNode = -1; // 不展示
} else {
if (balancePosterPass === "1") {
//alert('379')
// 如果平衡岗审批通过
$("#review").hide();
$("#reviewForBalanceM").show();
flagForBalancerNode = 3; // 为第三个节点
} else if (balancePosterPass === "2") {
//alert('383')
// 如果平衡岗未审批通过
flagForBalancerNode = -1; // 不展示
}
@ -382,7 +456,7 @@
// 配置仓储管理员节点(第三或第二个节点)
if (depositoryManagerPass !== "4" && departmentheadPass === "1" && flagForBalancerNode !== -1) {
//alert('393')
let timeLineStartItemForId;
if (flagForBalancerNode === 2) {
// 如果是第二个节点
@ -406,6 +480,7 @@
// 配置出库人员节点
if (departmentheadPass === "1" && (depositoryManagerPass === "4" || depositoryManagerPass === "1")) {
alert('415')
let completeOutTime = record.outTime;
let pass = record.pass;
let approvalNodeForCompleteOutUserName = '<h3 class="layui-timeline-title">出库人员:';
@ -451,6 +526,7 @@
reviewForBalance = function (pass) {
//alert('reviewForBalance')
if (!flagForForm) {
flagForForm = true;
let data = {};
@ -465,6 +541,22 @@
}
};
reviewForBalanceM = function (pass) {
//alert('reviewForBalance')
if (!flagForForm) {
flagForForm = true;
let data = {};
data.id = id;
if (pass === 1) {
data.balancePosterPassM = 1;
} else {
data.balancePosterPassM = 2;
}
data.balancePosterMessage = $("#balancePosterMessageFM").val();
send(data);
}
};
review = function (pass) {
if (!flagForForm) {
flagForForm = true;
@ -472,8 +564,10 @@
data.id = id;
if (pass === 1) {
data.departmentheadPass = 1;
} else {
data.departmentheadPass = 2;
}
data.departmentheadMessage = $("#departmentheadMessageF").val();
send(data);

4
src/main/resources/templates/pages/application/form-step-look_back.html

@ -235,7 +235,7 @@
success: function (res) {
record = res.data;
//liwenxuan test
console.log(record);
//console.log(record);
// 用于创造时间线节点
let timeLineStartItem = `<div class="layui-timeline-item" id="placeholder">
<i class="layui-icon layui-timeline-axis layui-icon-friends"></i>
@ -352,7 +352,7 @@
approvalNodeForCompleteOutUserName+='出库中</h3>';
approvalCompleteOutNode = timeLineStartItem + approvalNodeForCompleteOutUserName + approvalNodeForCompleteOutUserIconPhoto + timeLineEndItem;
}
console.log(approvalCompleteOutNode)
//console.log(approvalCompleteOutNode)
if (flagForBalancerNode === 2) {
if (depositoryManagerPass !== "4") {

248
src/main/resources/templates/pages/applicationForStorageCenter/application-out.html

@ -600,6 +600,7 @@
// 提交(物料出库)
form.on('submit(formStep)', function (data) {
if (!flagForForm) {
flagForForm = true;
data = data.field;
@ -629,6 +630,48 @@
if(data.outType === ""){
delete data["outType"];
}
//liwenxuan 测试 上线要改回来.
var jsonData= JSON.stringify(data);
//若删除了第一个物料卡片,则下一个会顺延变为第一个(mid2=>mid),params中第二个也没了.
//不论如何操作,data.params里元素的个数+1总是=物料卡片的个数
//params里的元素即为物料卡片非第一个的尾标.
var paramsArray = Array.from(data.params);//复制data中的params数组
//开始校验(1.数量不能不填.不填则提醒并刷新页面.)
//首先校验当前的第一个物料卡片.
if(data.quantity==""||data.quantity==null){
layer.msg("请选择第1个物料数量")
flagForForm = false;
return false;
}
//然后根据遍历params得到的数据校验其它物料卡片
if(paramsArray.length>0){
for (let i = 0; i < paramsArray.length; i++) {
var x = i+2;
var id = paramsArray[i]+'';
var itemQuantity = "quantity"+id;
if(data[itemQuantity]==''||data[itemQuantity]==undefined){
layer.msg("请选择第"+x+"个物料的数量")
flagForForm = false;
return false;
}
}
}
data["depositoryId"] = data["depositoryId"].split(',')[0];
if(paramsArray.length>0){
for (let i = 0; i < paramsArray.length; i++) {
var x = i+2;
var id = paramsArray[i]+'';
var itemDepository = "depositoryId"+id;
data[itemDepository] =data[itemDepository].split(',')[0]
}
}
//console.log(data)
//here ajax
$.ajax({
url: "/depositoryRecord/applicationOut",
type: 'post',
@ -1054,12 +1097,13 @@
if (code !== "") {
let loading2 = layer.open({type: 3, shade: [0.25, '#000'], icon: 2, speed: 0});
$.ajax({
url: "/material/findMatrialByCode",
url: "/material/findMatrialByCodeVersion2",
type: "get",
dataType: 'json',
data: (req),
contentType: "application/json;charset=utf-8",
success: function (d) {
//console.log(d)
var d = d.data;
if (d == null) {
layer.msg("仓库中暂无该物料", {icon: 0, time: 500}, function () {
@ -1111,13 +1155,26 @@
barCode.empty();
}
}
$("#quantity" + idNumber).val("");
//console.log($("#quantity" + idNumber).val(""))
if (depositoryDisplay !== "none") {
$("#showDepository" + idNumber).empty();
let depositoryList = d.depositoryList;
if (depositoryList !== null) {
for (let i = 0; i < depositoryList.length; i++) {
//在此把inventoryId和inventoryPlaceCode信息放入option的相关属性中备用. liwenxuan start
/*for (let i = 0; i < depositoryList.length; i++) {
$("#showDepository" + idNumber).append(new Option(depositoryList[i].dname, depositoryList[i].id));
}*/
for (let i = 0; i < depositoryList.length; i++) {
let deposId = depositoryList[i].id;
let inventoryId = depositoryList[i].inventoryId;
let inventoryPlaceCode = depositoryList[i].inventoryPlaceCode;
let x = deposId+","+inventoryId+","+inventoryPlaceCode
$("#showDepository" + idNumber).append(new Option(depositoryList[i].dname, x));
}
//在此把inventoryId和inventoryPlaceCode信息放入option的相关属性中备用. liwenxuan end
//alert($("#showDepository" + idNumber).val())
}
}
form.render();
@ -1244,14 +1301,16 @@
},
end: function () {
var mid = materialId.value;
//alert(mid);
if (mid !== '') {
let loading2 = layer.open({type: 3, shade: [0.25, '#000'], icon: 2, speed: 0});
$.ajax({
url: "/material/findMatrialById?mid=" + mid + "&type=out",
url: "/material/findMatrialByIdVersion2?mid=" + mid + "&type=out",
type: "get",
dataType: 'json',
contentType: "application/json;charset=utf-8",
success: function (d) {
//console.log(d)
var material = d.data.materialById;
var code = material.code;
if (code === undefined) {
@ -1295,17 +1354,37 @@
barCode.empty();
}
}
$("#quantity" + idNumber).val("");
if (depositoryDisplay !== "none") {
let inventoryInDepositoryId = material.depositoryId;
$("#showDepository" + idNumber).empty();
let depositoryList = material.depositoryList;
if (depositoryList !== null) {
for (let i = 0; i < depositoryList.length; i++) {
//version2 start
/*for (let i = 0; i < depositoryList.length; i++) {
let depositoryListElement = depositoryList[i];
let defaultSelect = false;
defaultSelect = inventoryInDepositoryId !== null && depositoryListElement.id === inventoryInDepositoryId;
$("#showDepository" + idNumber).append(new Option(depositoryListElement.dname, depositoryListElement.id,defaultSelect,defaultSelect));
}*/
for (let i = 0; i < depositoryList.length; i++) {
let depositoryListElement = depositoryList[i];
let deposId = depositoryList[i].id;
let inventoryId = depositoryList[i].inventoryId;
let inventoryPlaceCode = depositoryList[i].inventoryPlaceCode;
let x = deposId+","+inventoryId+","+inventoryPlaceCode
let defaultSelect = false;
defaultSelect = inventoryInDepositoryId !== null && depositoryListElement.id === inventoryInDepositoryId;
$("#showDepository" + idNumber).append(new Option(depositoryList[i].dname, x,defaultSelect,defaultSelect));
}
//alert()
//alert($("#showDepository" + idNumber).val())
//$("#showDepository" + idNumber).append(new Option(depositoryList[i].dname, x));
//version2 end
}
}
form.render();
@ -1533,6 +1612,7 @@
//用于实现物料名称搜索
selectMaterialByName = function (obj) {
var data = obj.value;
// 获取对应元素
var parent = obj.parentNode.parentNode.parentNode.parentNode;
@ -1558,6 +1638,7 @@
data: JSON.stringify(req),
contentType: "application/json;charset=utf-8",
success: function (d) {
if (d.count > 1) {
layer.msg("请点击右侧搜索确定物品", {icon: 0, time: 500}, function () {
layer.close(loading2);
@ -1656,12 +1737,14 @@
req.codeFlag = 1;
let loading2 = layer.open({type: 3, shade: [0.25, '#000'], icon: 2, speed: 0});
$.ajax({
url: "/material/qywxApplicationOutScanBarCode",
url: "/material/qywxApplicationOutScanBarCodeVersion2",
type: "post",
dataType: 'json',
data: JSON.stringify(req),
contentType: "application/json;charset=utf-8",
success: function (d) {
//console.log(obj.parentNode)
//console.log(d)
// 获取对应元素
var parent = obj.parentNode.parentNode.parentNode.parentNode;
@ -1683,7 +1766,7 @@
var data = d.data;
if (data !== null) {
materialName.value = data.mname;
materialId.value = data.iid;
materialId.value = data.iid;//applicationOutMin.mid 待修改 当输入数量和选择仓库时都要给该元素重新赋值. version2
materialCode.value = data.mcode;
var barCodeInput = barCodeItem.childNodes[1].childNodes[1];
barCodeInput.value = result;
@ -1695,13 +1778,25 @@
for (let i = 0; i < unitList.length; i++) {
$("#unit" + idNumber).append(new Option(unitList[i].newUnit, unitList[i].newUnit));
}
$("#quantity" + idNumber).val("");
if (depositoryDisplay !== "none") {
$("#showDepository" + idNumber).empty();
let depositoryList = data.depositoryList;
if (depositoryList !== null) {
for (let i = 0; i < depositoryList.length; i++) {
//在此把inventoryId和inventoryPlaceCode信息放入option的相关属性中备用. liwenxuan start
/*for (let i = 0; i < depositoryList.length; i++) {
$("#showDepository" + idNumber).append(new Option(depositoryList[i].dname, depositoryList[i].id));
}*/
for (let i = 0; i < depositoryList.length; i++) {
let deposId = depositoryList[i].id;
let inventoryId = depositoryList[i].inventoryId;
let inventoryPlaceCode = depositoryList[i].inventoryPlaceCode;
let x = deposId+","+inventoryId+","+inventoryPlaceCode
$("#showDepository" + idNumber).append(new Option(depositoryList[i].dname, x));
}
//在此把inventoryId和inventoryPlaceCode信息放入option的相关属性中备用. liwenxuan end
//alert($("#showDepository" + idNumber).val())
}
}
form.render();
@ -1724,8 +1819,96 @@
};
/*// 扫描物料条码
scanBarCode = function (obj) {
// 回调
var result = '1701791680746004480';//当needResult为1时返回处理结果
var req = {};
req.qrCode = result;
req.codeFlag = 1;
let loading2 = layer.open({type: 3, shade: [0.25, '#000'], icon: 2, speed: 0});
$.ajax({
url: "/material/qywxApplicationOutScanBarCodeVersion2",
type: "post",
dataType: 'json',
data: JSON.stringify(req),
contentType: "application/json;charset=utf-8",
success: function (d) {
//console.log(obj.parentNode)
// 获取对应元素
var parent = obj.parentNode.parentNode.parentNode.parentNode;
var MaterialChildren = parent.childNodes[5];
var materialItem = MaterialChildren.childNodes[3].childNodes[1].childNodes;
var barCodeChildren = parent.childNodes[9];
var materialName = materialItem[1];
var materialId = materialName.parentNode.parentNode.childNodes[3];
// 条形码条码
var barCodeItem = barCodeChildren.childNodes[3];
// 物料编码
var materialCodeItem = parent.childNodes[7].childNodes[3].childNodes[1].childNodes;
var materialCode = materialCodeItem[1];
var data = d.data;
if (data !== null) {
materialName.value = data.mname;
materialId.value = data.iid;//applicationOutMin.mid 待修改 当输入数量和选择仓库时都要给该元素重新赋值. version2
materialCode.value = data.mcode;
var barCodeInput = barCodeItem.childNodes[1].childNodes[1];
barCodeInput.value = result;
var idNumber = materialId.name.split("mid")[1];
var unit = $("#unit" + idNumber);
unit.empty();
$("#unit" + idNumber).append(new Option(data.unit, "-1"));
var unitList = data["splitInfoList"];
for (let i = 0; i < unitList.length; i++) {
$("#unit" + idNumber).append(new Option(unitList[i].newUnit, unitList[i].newUnit));
}
if (depositoryDisplay !== "none") {
$("#showDepository" + idNumber).empty();
let depositoryList = data.depositoryList;
if (depositoryList !== null) {
//在此把inventoryId和inventoryPlaceCode信息放入option的相关属性中备用. liwenxuan start
/!*for (let i = 0; i < depositoryList.length; i++) {
$("#showDepository" + idNumber).append(new Option(depositoryList[i].dname, depositoryList[i].id));
}*!/
for (let i = 0; i < depositoryList.length; i++) {
let deposId = depositoryList[i].id;
let inventoryId = depositoryList[i].inventoryId;
let inventoryPlaceCode = depositoryList[i].inventoryPlaceCode;
let x = deposId+","+inventoryId+","+inventoryPlaceCode
$("#showDepository" + idNumber).append(new Option(depositoryList[i].dname, x));
}
//在此把inventoryId和inventoryPlaceCode信息放入option的相关属性中备用. liwenxuan end
}
}
form.render();
layer.close(loading2);
} else {
// 如果没有对应关系
layer.msg("对于编码:" + result + ",并未发现仓库中存在对应的物料", {
icon: 0,
time: 1000 //0.5秒关闭(如果不配置,默认是3秒)
}, function () {
layer.close(loading2);
})
}
}
})
};*/
// 用于扫码功能
scanCodeByOut = function (obj) {
scanCodeByOut = function (obj) {//待处理 liwenxuan 扫码时#showDepository
let wxScan = parent;
if (wxScan.wx === undefined) {
@ -1843,6 +2026,8 @@
//用于判断当前物料数量是否合适
MaterialQuantityIsTrue = function (obj) {
//alert('MaterialQuantityIsTrue')
var id = obj.id.split("quantity")[1];
var mcode = $("#code" + id).val(); // 获取到当前输入的物料编码
var unit = $("#unit" + id).val();
@ -1859,9 +2044,39 @@
req.unit = unit;
req.placeId = -1;
if (depositoryDisplay !== "none") {
req.depositoryId = $("#showDepository" + id).val();
req.depositoryId = $("#showDepository" + id).val().split(',')[0];
//(req.depositoryId)
}
let loading2 = layer.open({type: 3, shade: [0.25, '#000'], icon: 2, speed: 0});
//version2 把该物料的mid和placeid根据did重新赋值 20230926 start
if($("#showDepository" + id).val().includes(',')){
var parent = obj.parentNode.parentNode.parentNode;
var MaterialChildren = parent.childNodes[5];
var materialItem = MaterialChildren.childNodes[3].childNodes[1].childNodes;
var barCodeChildren = parent.childNodes[9];
var materialName = materialItem[1];
var materialId = materialName.parentNode.parentNode.childNodes[3];
var dipArray = $("#showDepository" + id).val().split(',')
//alert("物料数量未更改的mid:"+materialId.value)
materialId.value = dipArray[1];
//alert("物料数量已更改的mid:"+materialId.value)
}else{
var parent = obj.parentNode.parentNode.parentNode;
var MaterialChildren = parent.childNodes[5];
var materialItem = MaterialChildren.childNodes[3].childNodes[1].childNodes;
var barCodeChildren = parent.childNodes[9];
var materialName = materialItem[1];
var materialId = materialName.parentNode.parentNode.childNodes[3];
//alert("物料数量mid:"+materialId.value)
}
//version2 把该物料的mid和placeid根据did重新赋值 20230926 end
$.ajax({
url: "/material/MaterialQuantityIsTrue",
type: "post",
@ -1933,6 +2148,7 @@
// 监听下拉选择框
form.on('select()', function (data) {
//alert(1)
let id = data.elem.id;
if(id.indexOf('outType') === -1){
@ -1974,8 +2190,22 @@
req.unit = unit;
req.placeId = -1;
if (depositoryId !== "-1") {
//alert("选择仓库mid:"+depositoryId)
//liwenxuan 修改mid错误bug 在此处的ajax判断当前选中的物料在当前选中的仓库中是否有足够数量. start
let depositoryParams = depositoryId.split(',')
if(depositoryId.includes(',')){
req.depositoryId = depositoryParams[0];
var midx = 'mid'+idNum;
//alert("选择仓库未更改的mid:"+$("input[name = "+midx+"]").val())
$("input[name = "+midx+"]").val(depositoryParams[1]);
//alert("选择仓库已更改的mid:"+$("input[name = "+midx+"]").val())
}else{
req.depositoryId = depositoryId;
}
//liwenxuan 修改mid错误bug 在此处的ajax判断当前选中的物料在当前选中的仓库中是否有足够数量. end
}
let loading2 = layer.open({type: 3, shade: [0.25, '#000'], icon: 2, speed: 0});
$.ajax({
url: "/material/MaterialQuantityIsTrue",

2
src/main/resources/templates/pages/scanQrCode/ScanBarCodeByNew.html

@ -3,7 +3,7 @@
<html xmlns:th="http://www.thymeleaf.org">
<head>
<meta charset="utf-8">
<title>扫码</title>
<title>扫码ScanBarCodeByNew</title>
<link rel="stylesheet" href="/static/lib/layui-v2.8.6/css/layui.css" media="all">
<link rel="stylesheet" href="/static/css/layuimini.css?v=2.0.4.2" media="all">
<link rel="stylesheet" href="/static/css/themes/default.css" media="all">

2
src/main/resources/templates/pages/scanQrCode/ScanBarCodeForTaking.html

@ -3,7 +3,7 @@
<html xmlns:th="http://www.thymeleaf.org">
<head>
<meta charset="utf-8">
<title>扫码</title>
<title>扫码ScanBarCodeForTaking</title>
<link rel="stylesheet" href="/static/lib/layui-v2.8.6/css/layui.css" media="all">
<link rel="stylesheet" href="/static/css/layuimini.css?v=2.0.4.2" media="all">
<link rel="stylesheet" href="/static/css/themes/default.css" media="all">

27
src/main/resources/templates/pages/scanQrCode/ScanBarOrQrCodeOut.html

@ -3,7 +3,7 @@
<html xmlns:th="http://www.thymeleaf.org">
<head>
<meta charset="utf-8">
<title>扫码</title>
<title>扫码ScanBarOrQrCodeOut</title>
<link rel="stylesheet" href="/static/lib/layui-v2.8.6/css/layui.css" media="all">
<link rel="stylesheet" href="/static/css/layuimini.css?v=2.0.4.2" media="all">
<link rel="stylesheet" href="/static/css/themes/default.css" media="all">
@ -57,7 +57,9 @@
let flagForForm = false;
layui.$(function () {
let wxScan = parent.parent.parent;
//liwenxuan上线要改回来 开发环境扫码
/*let wxScan = parent.parent.parent;
if (wxScan.wx !== undefined) {
wxScan = wxScan.wx;
} else {
@ -82,7 +84,12 @@
}
});
});*/
var result = "1701796293431828480";//当needResult为1时返回处理结果 1701795870830534656
var req = {};
req.qrCode = result;
outboundLogic(req);
});
@ -94,6 +101,7 @@
},
function () { // 如果确定出库
if (!flagForForm) {
//alert(1)
flagForForm = true;
layui.$.ajax({
url: "/depositoryRecord/isCheckOut",
@ -265,12 +273,14 @@
} else {
barCode = req.qrCode;
}
console.log(req);
layer.confirm("请扫描仓库或库位", {
btn: ["扫描", "取消"]
}, function () { // 继续
layer.close(layer.index); // 关闭弹窗
parent.parent.parent.wx.scanQRCode({
//liwenxuan 上线要改回来,扫码直接赋值.
/*parent.parent.parent.wx.scanQRCode({
desc: 'scanQRCode desc',
needResult: 1, // 默认为0,扫描结果由企业微信处理,1则直接返回扫描结果,
scanType: ["barCode", "qrCode"], // 可以指定扫二维码还是条形码(一维码),默认二者都有
@ -281,7 +291,12 @@
req.qrCode = result;
outboundLogic(req);
}
})
})*/
// 回调
var result = '1648852355050151936';//1638091255811710976当needResult为1时返回处理结果1641262864907149312
var req = {};
req.qrCode = result;
outboundLogic(req);
}, function () { // 取消
// 关闭当前页

2
src/main/resources/templates/pages/scanQrCode/ScanBarOrQrCodeOut_selectMaterial.html

@ -2,7 +2,7 @@
<html lang="en" xmlns:th="http://www.thymeleaf.org">
<head>
<meta charset="utf-8">
<title>首页二</title>
<title>首页二ScanBarOrQrCodeOut_selectMaterial</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">

2
src/main/resources/templates/pages/scanQrCode/ScanCodeByTaking.html

@ -3,7 +3,7 @@
<html xmlns:th="http://www.thymeleaf.org">
<head>
<meta charset="utf-8">
<title>扫码</title>
<title>扫码ScanCodeByTaking</title>
<link rel="stylesheet" href="/static/lib/layui-v2.8.6/css/layui.css" media="all">
<link rel="stylesheet" href="/static/css/layuimini.css?v=2.0.4.2" media="all">
<link rel="stylesheet" href="/static/css/themes/default.css" media="all">

2
src/main/resources/templates/pages/scanQrCode/ScanMaterialCodeForTaking.html

@ -3,7 +3,7 @@
<html xmlns:th="http://www.thymeleaf.org">
<head>
<meta charset="utf-8">
<title>扫码</title>
<title>扫码ScanMaterialCodeForTaking</title>
<link rel="stylesheet" href="/static/lib/layui-v2.8.6/css/layui.css" media="all">
<link rel="stylesheet" href="/static/css/layuimini.css?v=2.0.4.2" media="all">
<link rel="stylesheet" href="/static/css/themes/default.css" media="all">

2
src/main/resources/templates/pages/scanQrCode/ScanQrCode.html

@ -3,7 +3,7 @@
<html xmlns:th="http://www.thymeleaf.org">
<head>
<meta charset="utf-8">
<title>扫码</title>
<title>扫码ScanQrCode</title>
<link rel="stylesheet" href="/static/lib/layui-v2.8.6/css/layui.css" media="all">
<link rel="stylesheet" href="/static/css/layuimini.css?v=2.0.4.2" media="all">
<link rel="stylesheet" href="/static/css/themes/default.css" media="all">

2
src/main/resources/templates/pages/scanQrCode/ScanQrCodeIn.html

@ -3,7 +3,7 @@
<html xmlns:th="http://www.thymeleaf.org">
<head>
<meta charset="utf-8">
<title>扫码</title>
<title>扫码ScanQrCodeIn</title>
<link rel="stylesheet" href="/static/lib/layui-v2.8.6/css/layui.css" media="all">
<link rel="stylesheet" href="/static/css/layuimini.css?v=2.0.4.2" media="all">
<link rel="stylesheet" href="/static/css/themes/default.css" media="all">

2
src/main/resources/templates/pages/scanQrCode/scanQrCodeOut.html

@ -3,7 +3,7 @@
<html xmlns:th="http://www.thymeleaf.org">
<head>
<meta charset="utf-8">
<title>扫码</title>
<title>扫码scanQrCodeOut</title>
<link rel="stylesheet" href="/static/lib/layui-v2.8.6/css/layui.css" media="all">
<link rel="stylesheet" href="/static/css/layuimini.css?v=2.0.4.2" media="all">
<link rel="stylesheet" href="/static/css/themes/default.css" media="all">

2
src/main/resources/templates/pages/scanQrCode/scanQrCodeTransfer.html

@ -3,7 +3,7 @@
<html xmlns:th="http://www.thymeleaf.org">
<head>
<meta charset="utf-8">
<title>扫码</title>
<title>扫码scanQrCodeTransfer</title>
<link rel="stylesheet" href="/static/lib/layui-v2.8.6/css/layui.css" media="all">
<link rel="stylesheet" href="/static/css/layuimini.css?v=2.0.4.2" media="all">
<link rel="stylesheet" href="/static/css/themes/default.css" media="all">

Loading…
Cancel
Save