Browse Source

测试-修改redisson加锁方式

lwx_dev
erdanergou 3 years ago
parent
commit
b56bf9683c
  1. 16
      src/main/java/com/dreamchaser/depository_manage/config/PublicConfig.java
  2. 18
      src/main/java/com/dreamchaser/depository_manage/config/QyWxConfig.java
  3. 8
      src/main/java/com/dreamchaser/depository_manage/controller/CompanyController.java
  4. 33
      src/main/java/com/dreamchaser/depository_manage/controller/DepositoryController.java
  5. 298
      src/main/java/com/dreamchaser/depository_manage/controller/DepositoryRecordController.java
  6. 13
      src/main/java/com/dreamchaser/depository_manage/controller/DownLoadFileController.java
  7. 49
      src/main/java/com/dreamchaser/depository_manage/controller/GroupController.java
  8. 35
      src/main/java/com/dreamchaser/depository_manage/controller/MaterialController.java
  9. 76
      src/main/java/com/dreamchaser/depository_manage/controller/PageController.java
  10. 44
      src/main/java/com/dreamchaser/depository_manage/controller/QyWxOperationController.java
  11. 110
      src/main/java/com/dreamchaser/depository_manage/controller/StockTakingController.java
  12. 25
      src/main/java/com/dreamchaser/depository_manage/controller/UserController.java
  13. 6
      src/main/java/com/dreamchaser/depository_manage/entity/UserByPort.java
  14. 22
      src/main/java/com/dreamchaser/depository_manage/intercepter/UserInterceptor.java
  15. 6
      src/main/java/com/dreamchaser/depository_manage/security/pool/AuthenticationTokenPool.java
  16. 16
      src/main/java/com/dreamchaser/depository_manage/security/pool/SendQyWxMessageThreadPool.java
  17. 5
      src/main/java/com/dreamchaser/depository_manage/service/RedisService.java
  18. 25
      src/main/java/com/dreamchaser/depository_manage/service/impl/CompanyServiceImpl.java
  19. 280
      src/main/java/com/dreamchaser/depository_manage/service/impl/DepositoryRecordServiceImpl.java
  20. 13
      src/main/java/com/dreamchaser/depository_manage/service/impl/DepositoryServiceImpl.java
  21. 16
      src/main/java/com/dreamchaser/depository_manage/service/impl/ExcelServiceImpl.java
  22. 32
      src/main/java/com/dreamchaser/depository_manage/service/impl/GroupServiceImpl.java
  23. 69
      src/main/java/com/dreamchaser/depository_manage/service/impl/MaterialServiceImpl.java
  24. 3
      src/main/java/com/dreamchaser/depository_manage/service/impl/MaterialTypeServiceImpl.java
  25. 5
      src/main/java/com/dreamchaser/depository_manage/service/impl/NoticeServiceImpl.java
  26. 23
      src/main/java/com/dreamchaser/depository_manage/service/impl/QyWxOperationService.java
  27. 220
      src/main/java/com/dreamchaser/depository_manage/service/impl/RedisServiceImpl.java
  28. 153
      src/main/java/com/dreamchaser/depository_manage/service/impl/StockTakingServiceImpl.java
  29. 3
      src/main/java/com/dreamchaser/depository_manage/service/impl/UserServiceImpl.java
  30. 27
      src/main/java/com/dreamchaser/depository_manage/utils/LinkInterfaceUtil.java
  31. 5
      src/main/java/com/dreamchaser/depository_manage/utils/Md5Util.java
  32. 8
      src/main/resources/application-test.yml
  33. 3
      src/main/resources/logback-spring.xml
  34. 4
      src/main/resources/redisson-config.yml
  35. 8
      src/test/java/com/dreamchaser/depository_manage/BarChartTest.java
  36. 4
      src/test/java/com/dreamchaser/depository_manage/InventoryLineChartTest.java
  37. 3
      src/test/java/com/dreamchaser/depository_manage/InventorySunburstDataTest.java
  38. 4
      src/test/java/com/dreamchaser/depository_manage/LineChartTest.java
  39. 80
      src/test/java/com/dreamchaser/depository_manage/OtherTest.java
  40. 6
      src/test/java/com/dreamchaser/depository_manage/SunburstChartTest.java

16
src/main/java/com/dreamchaser/depository_manage/config/PortConfig.java → src/main/java/com/dreamchaser/depository_manage/config/PublicConfig.java

@ -3,11 +3,8 @@ package com.dreamchaser.depository_manage.config;
import com.alibaba.fastjson.JSON;
import com.alibaba.fastjson.JSONArray;
import com.alibaba.fastjson.JSONObject;
import com.dreamchaser.depository_manage.entity.Administration;
import com.dreamchaser.depository_manage.entity.Post;
import com.dreamchaser.depository_manage.entity.UserByPort;
import com.dreamchaser.depository_manage.utils.HttpUtils;
import com.dreamchaser.depository_manage.utils.LinkInterfaceUtil;
import lombok.Data;
import org.apache.http.protocol.HTTP;
@ -18,7 +15,7 @@ import java.util.*;
* 用于对接HR系统
*/
@Data
public class PortConfig {
public class PublicConfig {
// 部署数据库 depository NhE47edekBHxhjYk
@ -30,7 +27,12 @@ public class PortConfig {
// 高权限部门列表
public static List<Integer> roleAdminorgList = Arrays.asList(361,102,268);
// 定义登录存储在redis中的前缀
public static String LoginRedisPrefix = "HXGK_GO_ZhixingCollege:ScanCode:Authentication:LoginApi_dev_";
// 定义存储在redis中的用户信息
public static String userInfoRedisPrefix = "HXGK_GO_ZhixingCollege:ScanCode:Authentication:UserCont_dev_";
// 定义redis加锁的名称
public static String redis_Lock_name = "Wms_redis_lock";
/**
* 获取相应部门的部门负责人
@ -39,7 +41,7 @@ public class PortConfig {
*/
public static List<UserByPort> findDepartmentHeadByUser(Integer maindeparment,UserByPort userToken){
List<UserByPort> userByPortList = new ArrayList<>();
String url = PortConfig.external_url + "/staff/archiveslist";
String url = PublicConfig.external_url + "/staff/archiveslist";
Map<String,Object> map = new HashMap<>();
map.put("adminorg",maindeparment);
map.put("role","");
@ -128,7 +130,7 @@ public class PortConfig {
* @return
*/
public static UserByPort findUserByPortByNumber(String number){
String url = PortConfig.external_url + "/staff/archiveslist";
String url = PublicConfig.external_url + "/staff/archiveslist";
Map<String,Object> map = new HashMap<>();
map.put("number",number);
String jsonString = JSONObject.toJSONString(map);

18
src/main/java/com/dreamchaser/depository_manage/config/QyWxConfig.java

@ -10,6 +10,7 @@ import com.dreamchaser.depository_manage.entity.qywxDepartment;
import com.dreamchaser.depository_manage.entity.qywxLabel;
import com.dreamchaser.depository_manage.entity.qywxLabelUser;
import com.dreamchaser.depository_manage.exception.MyException;
import com.dreamchaser.depository_manage.security.pool.RedisPool;
import com.dreamchaser.depository_manage.utils.HttpUtils;
import com.dreamchaser.depository_manage.utils.ObjectFormatUtil;
import lombok.Data;
@ -35,7 +36,7 @@ public class QyWxConfig {
public static String code = ""; //userCode
public static String sendMessage_url = "https://qyapi.weixin.qq.com/cgi-bin/message/send?access_token=ACCESS_TOKEN";
public static RedisTemplate<String, String> redisTemplate;
public static RedisTemplate<String,String> redisTemplate;
// 用于回调配置的token
public static String sToken = "sM4MFE44fAKdtqvq81HYygqmrdUn";
@ -62,6 +63,14 @@ public class QyWxConfig {
// 用于jsapi的url
public static String jsApiUrl = "https://jy.hxgk.group/";
@Autowired
public void setRedisTemplate(RedisPool redisPool) {
QyWxConfig.redisTemplate = redisPool.redisTemplate(14);
}
// 用于获取企业微信对应token
public static String GetQYWXToken(String UserAgent) {
// 获取redis中当前用户的user-agent
@ -292,11 +301,4 @@ public class QyWxConfig {
@Autowired
public void setRedisTemplate(RedisTemplate<String, String> redisTemplate) {
QyWxConfig.redisTemplate = redisTemplate;
}
}

8
src/main/java/com/dreamchaser/depository_manage/controller/CompanyController.java

@ -2,7 +2,7 @@ package com.dreamchaser.depository_manage.controller;
import com.alibaba.fastjson.JSONArray;
import com.alibaba.fastjson.JSONObject;
import com.dreamchaser.depository_manage.config.PortConfig;
import com.dreamchaser.depository_manage.config.PublicConfig;
import com.dreamchaser.depository_manage.entity.*;
import com.dreamchaser.depository_manage.exception.MyException;
import com.dreamchaser.depository_manage.pojo.*;
@ -53,7 +53,7 @@ public class CompanyController {
token = (String) request.getSession().getAttribute("userToken");
}
UserByPort userToken = AuthenticationTokenPool.getUserToken(token);
String url = PortConfig.external_url + "/org/govlist";
String url = PublicConfig.external_url + "/org/govlist";
Object page = map.get("page");
Object pagesize = map.get("size");
String superior = (String) map.get("superior");
@ -140,7 +140,7 @@ public class CompanyController {
token = (String) request.getSession().getAttribute("userToken");
}
UserByPort userByPort = AuthenticationTokenPool.getUserToken(token);
String url = PortConfig.external_url + "/org/govlist";
String url = PublicConfig.external_url + "/org/govlist";
if (map.containsKey("state")) {
Object state = map.get("state");
map.put("state", ObjectFormatUtil.toInteger(state));
@ -186,7 +186,7 @@ public class CompanyController {
token = (String) request.getSession().getAttribute("userToken");
}
UserByPort userByPort = AuthenticationTokenPool.getUserToken(token);
String url = PortConfig.external_url + "/org/positionlist";
String url = PublicConfig.external_url + "/org/positionlist";
Object page = map.get("page");
Object pagesize = map.get("size");
map.put("page", ObjectFormatUtil.toInteger(page));

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

@ -416,7 +416,9 @@ public class DepositoryController {
depository_data.put("week", show_weekday);
if ("0".equals(type)) {
ExecutorService exs = Executors.newFixedThreadPool(depositoryAllNameAndId.size());
int threadSize = depositoryAllNameAndId.size();
ExecutorService exs = new ThreadPoolExecutor(threadSize, threadSize, 100, TimeUnit.SECONDS, new LinkedBlockingQueue<>(threadSize));
// 结果集
List<Future<Object>> futureList = new ArrayList<Future<Object>>();
// 1.定义CompletionService
@ -444,7 +446,9 @@ public class DepositoryController {
depository_data.put("data", show_data);
} else {
// 定义线程
ExecutorService exs = Executors.newFixedThreadPool(depositoryAllNameAndId.size());
int threadSize = depositoryAllNameAndId.size();
ExecutorService exs = new ThreadPoolExecutor(threadSize, threadSize, 100, TimeUnit.SECONDS, new LinkedBlockingQueue<>(threadSize));
// 结果集
List<Future<Object>> futureList = new ArrayList<Future<Object>>();
// 1.定义CompletionService
@ -544,7 +548,9 @@ public class DepositoryController {
// 获取各仓库名称以及id
Map<String, Integer> depositoryAllNameAndId = depositoryService.findDepositoryAllNameAndId(userByPort);
ExecutorService exs = Executors.newFixedThreadPool(20);
int threadSize = 10;
ExecutorService exs = new ThreadPoolExecutor(threadSize, threadSize, 100, TimeUnit.SECONDS, new LinkedBlockingQueue<>(threadSize));
// 结果集
List<Future<Object>> futureList = new ArrayList<Future<Object>>();
// 1.定义CompletionService
@ -674,7 +680,9 @@ public class DepositoryController {
days.add(format);
}
// 定义线程
ExecutorService exs = Executors.newFixedThreadPool(depositoryAllNameAndId.size());
int threadSize = depositoryAllNameAndId.size();
ExecutorService exs = new ThreadPoolExecutor(threadSize, threadSize, 100, TimeUnit.SECONDS, new LinkedBlockingQueue<>(threadSize));
// 结果集
List<Future<Object>> futureList = new ArrayList<Future<Object>>();
// 1.定义CompletionService
@ -719,7 +727,9 @@ public class DepositoryController {
List<Object> sourceList = (List<Object>) previousMonth.get("sourceList");
// 结果集
List<Future<Object>> futureList = new ArrayList<Future<Object>>();
ExecutorService exs = Executors.newFixedThreadPool(months.size());
int threadSize = months.size();
ExecutorService exs = new ThreadPoolExecutor(threadSize, threadSize, 100, TimeUnit.SECONDS, new LinkedBlockingQueue<>(threadSize));
// 1.定义CompletionService
CompletionService<Object> completionService = new ExecutorCompletionService<Object>(exs);
for (int num = 0; num < months.size() - 1; num++) {
@ -761,7 +771,7 @@ public class DepositoryController {
// 定义每次开启的线程数
int threadSize = depositoryList.size();
// 开启对应数量的线程
ExecutorService exs = Executors.newFixedThreadPool(threadSize);
ExecutorService exs = new ThreadPoolExecutor(threadSize, threadSize, 100, TimeUnit.SECONDS, new LinkedBlockingQueue<>(threadSize));
// 定义线程结果集
List<Future<Object>> futureList = new ArrayList<Future<Object>>();
// 定义CompletionService
@ -1250,7 +1260,9 @@ public class DepositoryController {
*/
Map<Object, Object> getBarChartData(UserByPort userByPort) {
Map<String, Integer> depositoryAllNameAndId = depositoryService.findDepositoryAllNameAndId(userByPort);
ExecutorService exs = Executors.newFixedThreadPool(2);
int threadSize = 2;
ExecutorService exs = new ThreadPoolExecutor(threadSize, threadSize, 100, TimeUnit.SECONDS, new LinkedBlockingQueue<>(threadSize));
// 结果集
List<Future<Object>> futureList = new ArrayList<Future<Object>>();
// 定义CompletionService
@ -1325,7 +1337,9 @@ public class DepositoryController {
}
// 定义线程
ExecutorService exs = Executors.newFixedThreadPool(depositoryAllNameAndId.size());
int threadSize = depositoryAllNameAndId.size();
ExecutorService exs = new ThreadPoolExecutor(threadSize, threadSize, 100, TimeUnit.SECONDS, new LinkedBlockingQueue<>(threadSize));
// 结果集
List<Future<Object>> futureList = new ArrayList<Future<Object>>();
// 1.定义CompletionService
@ -1717,7 +1731,8 @@ public class DepositoryController {
@Override
public Object call() throws Exception {
List<MaterialType> materialTypeAll = materialTypeService.findMaterialTypeNoParent();
ExecutorService exs = Executors.newFixedThreadPool(materialTypeAll.size());
int threadSize = materialTypeAll.size();
ExecutorService exs = new ThreadPoolExecutor(threadSize, threadSize, 100, TimeUnit.SECONDS, new LinkedBlockingQueue<>(threadSize));
// 结果集
List<Future<Object>> futureList = new ArrayList<Future<Object>>();
// 1.定义CompletionService

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

@ -1,27 +1,24 @@
package com.dreamchaser.depository_manage.controller;
import com.alibaba.fastjson.JSONObject;
import com.dreamchaser.depository_manage.config.PortConfig;
import com.dreamchaser.depository_manage.config.PublicConfig;
import com.dreamchaser.depository_manage.entity.*;
import com.dreamchaser.depository_manage.exception.MyException;
import com.dreamchaser.depository_manage.pojo.*;
import com.dreamchaser.depository_manage.security.pool.AuthenticationTokenPool;
import com.dreamchaser.depository_manage.security.pool.RedisPool;
import com.dreamchaser.depository_manage.security.pool.SendQyWxMessageThreadPool;
import com.dreamchaser.depository_manage.service.*;
import com.dreamchaser.depository_manage.service.impl.QyWxOperationService;
import com.dreamchaser.depository_manage.utils.*;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.data.redis.core.RedisTemplate;
import org.springframework.transaction.annotation.Transactional;
import org.springframework.web.bind.annotation.*;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.io.File;
import java.io.IOException;
import java.io.InputStream;
import java.io.OutputStream;
import java.math.BigDecimal;
import java.net.URLEncoder;
import java.util.*;
import java.util.concurrent.TimeUnit;
@ -44,7 +41,7 @@ public class DepositoryRecordController {
@Autowired
private ExcelService excelService;
@Autowired
private RedisTemplate<String, String> redisTemplateForHash;
private RedisPool redisPool;
@Autowired
private PlaceService placeService;
@ -131,7 +128,7 @@ public class DepositoryRecordController {
UserByPort userToken = AuthenticationTokenPool.getUserToken(token);
// 获取当前用户下所有未完成的扫码出库订单
String key = "user:" + userToken.getId().toString();
String minRecord = (String) redisTemplateForHash.opsForHash().get(key, "minRecord");
String minRecord = (String) redisPool.getRedisTemplateByDb(15).opsForHash().get(key, "minRecord");
if (minRecord == null && "0".equals(isDone)) {
return new RestResponse(result, result.size(), 200);
@ -140,17 +137,17 @@ public class DepositoryRecordController {
}
// 获取子订单键值
String[] split = minRecord.replace("[", "").replace("]", "").split(",");
String completeSplit = "";// 已完成
String ongoingSplit = ""; // 进行中
for (int i = 0; i < split.length; i++) {
StringBuilder completeSplit = new StringBuilder();// 已完成
StringBuilder ongoingSplit = new StringBuilder(); // 进行中
for (String value : split) {
// 获取所有子订单状态
String state = (String) redisTemplateForHash.opsForHash().get(split[i], "state");
String state = (String) redisPool.getRedisTemplateByDb(15).opsForHash().get(value, "state");
if ("1".equals(state)) {
// 如果当前订单未完成
ongoingSplit += split[i] + ",";
ongoingSplit.append(value).append(",");
} else if ("2".equals(state)) {
// 如果当前订单已完成
completeSplit += split[i] + ",";
completeSplit.append(value).append(",");
}
}
// 用户管理仓库
@ -170,7 +167,7 @@ public class DepositoryRecordController {
} else {
// 如果获取未完成
split = ongoingSplit.split(",");
split = ongoingSplit.toString().split(",");
}
for (String s : split) {
// 获取子订单编码
@ -393,10 +390,8 @@ public class DepositoryRecordController {
result.put("success", successMsg);
}
// 开启一个线程用于发送入库申请
new Thread(new Runnable() {
@Override
public void run() {
// 调用一个线程用于发送入库申请
SendQyWxMessageThreadPool.execute(() -> {
Map<Long, List<Integer>> MtIdToRecordId = new HashMap<>();
Map<Integer, List<Integer>> depositoryIdToRecordId = new HashMap<>();
for (int i = 0; i < recordIds.size(); i++) {
@ -461,9 +456,9 @@ public class DepositoryRecordController {
Map<String, Object> QyWxApprovalMap = new HashMap<>();
QyWxApprovalMap.put("sp_no", sp_no);
QyWxApprovalMap.put("mainId", integerList.toString());
redisTemplateForHash.opsForHash().putAll(sp_no, QyWxApprovalMap);
redisPool.getRedisTemplateByDb(14).opsForHash().putAll("wms_QyWxMessage_"+sp_no, QyWxApprovalMap);
// 设置过期为7天
redisTemplateForHash.expire(sp_no, 7, TimeUnit.DAYS);
redisPool.getRedisTemplateByDb(14).expire("wms_QyWxMessage_"+sp_no, 7, TimeUnit.DAYS);
}
@ -492,13 +487,13 @@ public class DepositoryRecordController {
Map<String, Object> QyWxApprovalMap = new HashMap<>();
QyWxApprovalMap.put("sp_no", sp_no);
QyWxApprovalMap.put("mainId", integerList.toString());
redisTemplateForHash.opsForHash().putAll(sp_no, QyWxApprovalMap);
redisPool.getRedisTemplateByDb(14).opsForHash().putAll("wms_QyWxMessage_"+sp_no, QyWxApprovalMap);
// 设置过期为7天
redisTemplateForHash.expire(sp_no, 7, TimeUnit.DAYS);
redisPool.getRedisTemplateByDb(14).expire("wms_QyWxMessage_"+sp_no, 7, TimeUnit.DAYS);
}
}
}).start();
});
if (integer != 0 && params.size() < 1 && integer != -1) {
return CrudUtil.insertHandle(integer, 1);
} else if (integer != 0 && params.size() > 0) {
@ -525,7 +520,7 @@ public class DepositoryRecordController {
String crypt = Md5.crypt(header);
map.put("applicantId", userToken.getId());
// 获取当前部门负责人
List<UserByPort> departmentHeadByUsers = PortConfig.findDepartmentHeadByUser(userToken.getMaindeparment(), userToken);
List<UserByPort> departmentHeadByUsers = PublicConfig.findDepartmentHeadByUser(userToken.getMaindeparment(), userToken);
StringBuilder departmentHeadId = new StringBuilder();
StringBuilder departMentHeadQyWxName = new StringBuilder();
// for (int i = 0; i < departmentHeadByUsers.size(); i++) {
@ -567,38 +562,19 @@ public class DepositoryRecordController {
integer += depositoryRecordService.insertApplicationOutMin(map);
// 开启一个线程执行发送信息操作
/*new Thread(new Runnable() {
@Override
public void run() {
// 向企业微信中对应用户发送消息
JSONObject jsonObject = qyWxOperationService.sendQyWxToApplicationOutMessage(departMentHeadQyWxName.toString(), ObjectFormatUtil.toInteger(id), true,crypt);
// 将当前返回结果保存到redis中
Map<String,Object> QyWxMessageMap = new HashMap<>();
QyWxMessageMap.put("MsgId",jsonObject.getString("msgid"));
QyWxMessageMap.put("responseCode",jsonObject.getString("response_code"));
// key user:300450:QyWxOut:1
// 申请人number
redisTemplateForHash.opsForHash().putAll("user:"+userToken.getNumber()+":QyWxOutId:"+id,QyWxMessageMap);
// 设置过期时间为三天
redisTemplateForHash.expire("user:"+userToken.getNumber()+":QyWxOutId:"+id,72,TimeUnit.HOURS);
}
}).start();*/
// 开启一个线程开启审批
new Thread(new Runnable() {
@Override
public void run() {
SendQyWxMessageThreadPool.execute(() -> {
JSONObject jsonObject = qyWxOperationService.sendOutApprovalTemplate(crypt, userToken, ObjectFormatUtil.toInteger(id));
String sp_no = jsonObject.getString("sp_no");
Map<String, Object> QyWxApprovalMap = new HashMap<>();
QyWxApprovalMap.put("sp_no", sp_no);
QyWxApprovalMap.put("otherDepartmentIdList", jsonObject.getString("otherDepartmentIdList"));
QyWxApprovalMap.put("mainId", id.toString());
redisTemplateForHash.opsForHash().putAll(sp_no, QyWxApprovalMap);
redisPool.getRedisTemplateByDb(14).opsForHash().putAll("wms_QyWxMessage_"+sp_no, QyWxApprovalMap);
// 设置过期为7天
redisTemplateForHash.expire(sp_no, 7, TimeUnit.DAYS);
}
}).start();
redisPool.getRedisTemplateByDb(14).expire("wms_QyWxMessage_"+sp_no, 7, TimeUnit.DAYS);
});
}
} else {
@ -642,38 +618,19 @@ public class DepositoryRecordController {
// 插入子订单
integer += depositoryRecordService.insertApplicationOutMin(map);
/*// 开启一个线程用于发送消息
new Thread(new Runnable() {
@Override
public void run() {
JSONObject jsonObject = qyWxOperationService.sendQyWxToApplicationOutMessage(departMentHeadQyWxName.toString(), ObjectFormatUtil.toInteger(id), true,crypt);
// 将当前返回结果保存到redis中
Map<String,Object> QyWxMessageMap = new HashMap<>();
QyWxMessageMap.put("MsgId",jsonObject.getString("msgid"));
QyWxMessageMap.put("responseCode",jsonObject.getString("response_code"));
// key user:300450:QyWxOut:1
redisTemplateForHash.opsForHash().putAll("user:"+userToken.getNumber()+":QyWxOutId:"+id,QyWxMessageMap);
// 设置过期时间为三天
// 申请人number
redisTemplateForHash.expire("user:"+userToken.getNumber()+":QyWxOutId:"+id,72,TimeUnit.HOURS);
}
}).start();*/
// 开启一个线程开启审批
new Thread(new Runnable() {
@Override
public void run() {
SendQyWxMessageThreadPool.execute(() -> {
JSONObject jsonObject = qyWxOperationService.sendOutApprovalTemplate(crypt, userToken, ObjectFormatUtil.toInteger(id));
String sp_no = jsonObject.getString("sp_no");
Map<String, Object> QyWxApprovalMap = new HashMap<>();
QyWxApprovalMap.put("sp_no", sp_no);
QyWxApprovalMap.put("otherDepartmentIdList", jsonObject.getString("otherDepartmentIdList"));
QyWxApprovalMap.put("mainId", id.toString());
redisTemplateForHash.opsForHash().putAll(sp_no, QyWxApprovalMap);
redisPool.getRedisTemplateByDb(14).opsForHash().putAll("wms_QyWxMessage_"+sp_no, QyWxApprovalMap);
// 设置过期为7天
redisTemplateForHash.expire(sp_no, 7, TimeUnit.DAYS);
}
}).start();
redisPool.getRedisTemplateByDb(14).expire(sp_no, 7, TimeUnit.DAYS);
});
}
@ -699,7 +656,7 @@ public class DepositoryRecordController {
List<ApplicationInRecordP> list = new ArrayList<>();
Integer recordPCount = 0;
Integer maindeparment = userToken.getMaindeparment();
if (PortConfig.roleAdminorgList.contains(maindeparment)) {
if (PublicConfig.roleAdminorgList.contains(maindeparment)) {
list = depositoryRecordService.findApplicationInRecordPByCondition(map, userToken);
recordPCount = depositoryRecordService.findApplicationInRecordPCountByCondition(map);
} else {
@ -732,7 +689,7 @@ public class DepositoryRecordController {
// 获取当前仓库信息
Depository depositoryRecordById = depositoryService.findDepositoryById(depositoryId);
// 获取当前用户要处理的记录信息
String minRecord = (String) redisTemplateForHash.opsForHash().get("user:" + userToken.getId(), "minRecord");
String minRecord = (String) redisPool.getRedisTemplateByDb(15).opsForHash().get("user:" + userToken.getId(), "minRecord");
// 获取子订单键值
if (minRecord == null && Integer.compare(stateOnView, 0) == 0) {
return new RestResponse(applicationOutRecordMinList, applicationOutRecordMinList.size(), 200);
@ -755,7 +712,7 @@ public class DepositoryRecordController {
for (int i = 0; i < split.length; i++) {
//获取当前订单状态
String state = (String) redisTemplateForHash.opsForHash().get(split[i], "state");
String state = (String) redisPool.getRedisTemplateByDb(15).opsForHash().get(split[i], "state");
if ("1".equals(state)) {
// 如果当前订单未完成
state = "进行中";
@ -790,9 +747,8 @@ public class DepositoryRecordController {
// 获取当前物料所存在的库位
List<PlaceP> placeByMidAndDid = placeService.findPlaceByMidAndDid(materialById.getId(), applicationOutMinById.getDepositoryId());
// 获取库位编码
StringBuffer sb = new StringBuffer();
for (int j = 0; j < placeByMidAndDid.size(); j++) {
PlaceP placeP = placeByMidAndDid.get(j);
StringBuilder sb = new StringBuilder();
for (PlaceP placeP : placeByMidAndDid) {
String code = placeP.getCode();
if ("0000".equals(code)) {
code = "默认库位";
@ -857,7 +813,7 @@ public class DepositoryRecordController {
List<ApplicationOutRecordP> list = new ArrayList<>();
Integer countBy = 0;
Integer maindeparment = userByPort.getMaindeparment();
if (PortConfig.roleAdminorgList.contains(maindeparment)) {
if (PublicConfig.roleAdminorgList.contains(maindeparment)) {
list = depositoryRecordService.findApplicationOutRecordPByCondition(map, userByPort);
countBy = depositoryRecordService.findApplicationOutRecordPCountByCondition(map);
} else {
@ -947,19 +903,19 @@ public class DepositoryRecordController {
List<Integer> mids = (List<Integer>) map.get("mids");
List<Integer> depositoryIds = (List<Integer>) map.get("depositoryIds");
List<String> placeCodes = (List<String>) map.get("placeCodes");
List<String> nowmids = redisTemplateForHash.opsForList().range("mids" + userToken.getId(), 0, -1);
List<String> nowmids = redisPool.getRedisTemplateByDb(15).opsForList().range("mids" + userToken.getId(), 0, -1);
for (int i = 0; i < mids.size(); i++) {
if (nowmids.contains(mids.get(i))) {
continue;
}
redisTemplateForHash.opsForList().leftPush("mids" + userToken.getId(), mids.get(i).toString());
redisTemplateForHash.opsForList().leftPush("depositoryIds" + userToken.getId(), depositoryIds.get(i).toString());
redisTemplateForHash.opsForList().leftPush("placeCodes" + userToken.getId(), placeCodes.get(i).toString());
redisPool.getRedisTemplateByDb(15).opsForList().leftPush("mids" + userToken.getId(), mids.get(i).toString());
redisPool.getRedisTemplateByDb(15).opsForList().leftPush("depositoryIds" + userToken.getId(), depositoryIds.get(i).toString());
redisPool.getRedisTemplateByDb(15).opsForList().leftPush("placeCodes" + userToken.getId(), placeCodes.get(i).toString());
}
redisTemplateForHash.expire("mids" + userToken.getId(), 24 * 60 * 60, TimeUnit.SECONDS);
redisTemplateForHash.expire("depositoryIds" + userToken.getId(), 24 * 60 * 60, TimeUnit.SECONDS);
redisTemplateForHash.expire("placeCodes" + userToken.getId(), 24 * 60 * 60, TimeUnit.SECONDS);
redisPool.getRedisTemplateByDb(15).expire("mids" + userToken.getId(), 24 * 60 * 60, TimeUnit.SECONDS);
redisPool.getRedisTemplateByDb(15).expire("depositoryIds" + userToken.getId(), 24 * 60 * 60, TimeUnit.SECONDS);
redisPool.getRedisTemplateByDb(15).expire("placeCodes" + userToken.getId(), 24 * 60 * 60, TimeUnit.SECONDS);
return CrudUtil.insertHandle(1, 1);
}
@ -981,13 +937,13 @@ public class DepositoryRecordController {
List<Integer> depositoryIds = (List<Integer>) map.get("depositoryIds");
List<String> placeCodes = (List<String>) map.get("placeCodes");
for (Integer mid : mids) {
redisTemplateForHash.opsForList().remove("mids" + userToken.getId(), 1, mid.toString());
redisPool.getRedisTemplateByDb(15).opsForList().remove("mids" + userToken.getId(), 1, mid.toString());
}
for (Integer depositoryId : depositoryIds) {
redisTemplateForHash.opsForList().remove("depositoryIds" + userToken.getId(), 1, depositoryId.toString());
redisPool.getRedisTemplateByDb(15).opsForList().remove("depositoryIds" + userToken.getId(), 1, depositoryId.toString());
}
for (String placeCode : placeCodes) {
redisTemplateForHash.opsForList().remove("placeCodes" + userToken.getId(), 1, placeCode + " ");
redisPool.getRedisTemplateByDb(15).opsForList().remove("placeCodes" + userToken.getId(), 1, placeCode + " ");
}
return CrudUtil.insertHandle(1, 1);
}
@ -1037,7 +993,7 @@ public class DepositoryRecordController {
String header = request.getHeader("user-agent");
String crypt = Md5.crypt(header);
UserByPort userToken = AuthenticationTokenPool.getUserToken(token);
List<UserByPort> departmentHeadByUsers = PortConfig.findDepartmentHeadByUser(userToken.getMaindeparment(), userToken);
List<UserByPort> departmentHeadByUsers = PublicConfig.findDepartmentHeadByUser(userToken.getMaindeparment(), userToken);
StringBuilder departmentHeadId = new StringBuilder();
StringBuilder departMentHeadQyWxName = new StringBuilder();
// for (int i = 0; i < departmentHeadByUsers.size(); i++) {
@ -1075,40 +1031,21 @@ public class DepositoryRecordController {
integer += depositoryRecordService.transferApply(map, userToken);
Object id = map.get("parentId");
/*new Thread(new Runnable() {
@Override
public void run() {
JSONObject jsonObject = qyWxOperationService.sendQyWxToApplicationOutMessage(departMentHeadQyWxName.toString(), ObjectFormatUtil.toInteger(id), true,crypt);
// 将当前返回结果保存到redis中
Map<String,Object> QyWxMessageMap = new HashMap<>();
QyWxMessageMap.put("MsgId",jsonObject.getString("msgid"));
QyWxMessageMap.put("responseCode",jsonObject.getString("response_code"));
// key user:300450:QyWxOut:1
redisTemplate.opsForHash().putAll("user:"+userToken.getNumber()+":QyWxOutId:"+id,QyWxMessageMap);
// 设置过期时间为三天
redisTemplate.expire("user:"+userToken.getNumber()+":QyWxOutId:"+id,72,TimeUnit.HOURS);
}
}).start();*/
// 开启一个线程开启审批
new Thread(new Runnable() {
@Override
public void run() {
SendQyWxMessageThreadPool.execute(() -> {
JSONObject jsonObject = qyWxOperationService.sendOutApprovalTemplate(crypt, userToken, ObjectFormatUtil.toInteger(id));
String sp_no = jsonObject.getString("sp_no");
Map<String, Object> QyWxApprovalMap = new HashMap<>();
QyWxApprovalMap.put("sp_no", sp_no);
QyWxApprovalMap.put("mainId", id.toString());
QyWxApprovalMap.put("otherDepartmentIdList", jsonObject.getString("otherDepartmentIdList"));
redisTemplateForHash.opsForHash().putAll(sp_no, QyWxApprovalMap);
redisPool.getRedisTemplateByDb(14).opsForHash().putAll("wms_QyWxMessage_"+sp_no, QyWxApprovalMap);
// 设置过期为7天
redisTemplateForHash.expire(sp_no, 7, TimeUnit.DAYS);
}
}).start();
redisPool.getRedisTemplateByDb(14).expire("wms_QyWxMessage_"+sp_no, 7, TimeUnit.DAYS);
});
} else if (params.size() > 0) {
for (int i = 0; i < params.size(); i++) {
Integer temp = params.get(i);
for (Integer temp : params) {
Map<String, Object> insert = new HashMap<>();
insert.put("departmenthead", departmentHeadId.toString());
insert.put("applicantId", userToken.getId());
@ -1130,35 +1067,18 @@ public class DepositoryRecordController {
}
integer += depositoryRecordService.transferApply(map, userToken);
Object id = map.get("parentId");
/* new Thread(new Runnable() {
@Override
public void run() {
JSONObject jsonObject = qyWxOperationService.sendQyWxToApplicationOutMessage(departMentHeadQyWxName.toString(), ObjectFormatUtil.toInteger(id), true,crypt);
// 将当前返回结果保存到redis中
Map<String,Object> QyWxMessageMap = new HashMap<>();
QyWxMessageMap.put("MsgId",jsonObject.getString("msgid"));
QyWxMessageMap.put("responseCode",jsonObject.getString("response_code"));
// key user:300450:QyWxOut:1
redisTemplate.opsForHash().putAll("user:"+userToken.getNumber()+":QyWxOutId:"+id,QyWxMessageMap);
// 设置过期时间为三天
redisTemplate.expire("user:"+userToken.getNumber()+":QyWxOutId:"+id,72,TimeUnit.HOURS);
}
}).start();*/
// 开启一个线程开启审批
new Thread(new Runnable() {
@Override
public void run() {
SendQyWxMessageThreadPool.execute(() -> {
JSONObject jsonObject = qyWxOperationService.sendOutApprovalTemplate(crypt, userToken, ObjectFormatUtil.toInteger(id));
String sp_no = jsonObject.getString("sp_no");
Map<String, Object> QyWxApprovalMap = new HashMap<>();
QyWxApprovalMap.put("sp_no", sp_no);
QyWxApprovalMap.put("mainId", id.toString());
QyWxApprovalMap.put("otherDepartmentIdList", jsonObject.getString("otherDepartmentIdList"));
redisTemplateForHash.opsForHash().putAll(sp_no, QyWxApprovalMap);
redisPool.getRedisTemplateByDb(14).opsForHash().putAll("wms_QyWxMessage_"+sp_no, QyWxApprovalMap);
// 设置过期为7天
redisTemplateForHash.expire(sp_no, 7, TimeUnit.DAYS);
}
}).start();
redisPool.getRedisTemplateByDb(14).expire("wms_QyWxMessage_"+sp_no, 7, TimeUnit.DAYS);
});
}
if (params.size() < 1) {
@ -1253,7 +1173,7 @@ public class DepositoryRecordController {
token = (String) request.getSession().getAttribute("userToken");
}
UserByPort userToken = AuthenticationTokenPool.getUserToken(token);
Long size = redisTemplateForHash.boundListOps("mids" + userToken.getId()).size();
Long size = redisPool.getRedisTemplateByDb(15).boundListOps("mids" + userToken.getId()).size();
if (size == null) {
size = 0L;
}
@ -1263,11 +1183,11 @@ public class DepositoryRecordController {
List<ApplicationModel> list = new ArrayList<>();
for (int i = start; i < end; i++) {
// 获取物料编号
Integer mid = ObjectFormatUtil.toInteger(redisTemplateForHash.opsForList().index("mids" + userToken.getId(), i));
Integer mid = ObjectFormatUtil.toInteger( redisPool.getRedisTemplateByDb(15).opsForList().index("mids" + userToken.getId(), i));
// 获取仓库编号
Integer depositoryId = ObjectFormatUtil.toInteger(redisTemplateForHash.opsForList().index("depositoryIds" + userToken.getId(), i));
Integer depositoryId = ObjectFormatUtil.toInteger( redisPool.getRedisTemplateByDb(15).opsForList().index("depositoryIds" + userToken.getId(), i));
// 获取库位编码
String placeCode = (String) (redisTemplateForHash.opsForList().index("placeCodes" + userToken.getId(), i));
String placeCode = (String) ( redisPool.getRedisTemplateByDb(15).opsForList().index("placeCodes" + userToken.getId(), i));
// 获取物料信息
Inventory materialById = materialService.findInventoryById(mid);
// 获取仓库信息
@ -1353,17 +1273,15 @@ public class DepositoryRecordController {
depositoryIdList.add(ObjectFormatUtil.toInteger(map.get("depositoryId")));
}
// 开启一个线程用于发送入库申请
new Thread(new Runnable() {
@Override
public void run() {
SendQyWxMessageThreadPool.execute(() -> {
Map<Long, List<Integer>> MtIdToRecordId = new HashMap<>();
Map<Integer, List<Integer>> depositoryIdToRecordId = new HashMap<>();
for (int i = 0; i < recordIds.size(); i++) {
Integer recordId = recordIds.get(i);
if (recordId != null) {
// 如果当前id不是空 获取对应的入库仓库id
String type = typeList.get(i);
if ("mt".equals(type)) {
String type1 = typeList.get(i);
if ("mt".equals(type1)) {
Long mtId = mtIdList.get(i);
// 将对应仓库与订单id添加映射关系
List<Integer> integers = MtIdToRecordId.get(mtId);
@ -1420,9 +1338,9 @@ public class DepositoryRecordController {
Map<String, Object> QyWxApprovalMap = new HashMap<>();
QyWxApprovalMap.put("sp_no", sp_no);
QyWxApprovalMap.put("mainId", integerList.toString());
redisTemplateForHash.opsForHash().putAll(sp_no, QyWxApprovalMap);
redisPool.getRedisTemplateByDb(14).opsForHash().putAll("wms_QyWxMessage_"+sp_no, QyWxApprovalMap);
// 设置过期为7天
redisTemplateForHash.expire(sp_no, 7, TimeUnit.DAYS);
redisPool.getRedisTemplateByDb(14).expire("wms_QyWxMessage_"+sp_no, 7, TimeUnit.DAYS);
}
@ -1451,17 +1369,16 @@ public class DepositoryRecordController {
Map<String, Object> QyWxApprovalMap = new HashMap<>();
QyWxApprovalMap.put("sp_no", sp_no);
QyWxApprovalMap.put("mainId", integerList.toString());
redisTemplateForHash.opsForHash().putAll(sp_no, QyWxApprovalMap);
redisPool.getRedisTemplateByDb(14).opsForHash().putAll("wms_QyWxMessage_"+sp_no, QyWxApprovalMap);
// 设置过期为7天
redisTemplateForHash.expire(sp_no, 7, TimeUnit.DAYS);
redisPool.getRedisTemplateByDb(14).expire("wms_QyWxMessage_"+sp_no, 7, TimeUnit.DAYS);
}
}
}).start();
});
} else if ("out".equals(type)) {
// 获取部门负责人
List<UserByPort> departmentHeadByUsers = PortConfig.findDepartmentHeadByUser(userToken.getMaindeparment(), userToken);
List<UserByPort> departmentHeadByUsers = PublicConfig.findDepartmentHeadByUser(userToken.getMaindeparment(), userToken);
StringBuilder departmentHeadId = new StringBuilder();
StringBuilder departMentHeadQyWxName = new StringBuilder();
// for (UserByPort departmentHeadByUser : departmentHeadByUsers) {
@ -1493,37 +1410,19 @@ public class DepositoryRecordController {
success += depositoryRecordService.insertApplicationOutMin(map);
// 向企业微信中对应用户发送消息
/*new Thread(new Runnable() {
@Override
public void run() {
JSONObject jsonObject = qyWxOperationService.sendQyWxToApplicationOutMessage(departMentHeadQyWxName.toString(), ObjectFormatUtil.toInteger(id), true,crypt);
// 将当前返回结果保存到redis中
Map<String,Object> QyWxMessageMap = new HashMap<>();
QyWxMessageMap.put("MsgId",jsonObject.getString("msgid"));
QyWxMessageMap.put("responseCode",jsonObject.getString("response_code"));
// key user:300450:QyWxOut:1
redisTemplateForHash.opsForHash().putAll("user:"+userToken.getNumber()+":QyWxOutId:"+id,QyWxMessageMap);
// 设置过期时间为三天
redisTemplateForHash.expire("user:"+userToken.getNumber()+":QyWxOutId:"+id,72,TimeUnit.HOURS);
}
}).start();*/
// 开启一个线程开启审批
new Thread(new Runnable() {
@Override
public void run() {
SendQyWxMessageThreadPool.execute(() -> {
JSONObject jsonObject = qyWxOperationService.sendOutApprovalTemplate(crypt, userToken, ObjectFormatUtil.toInteger(id));
String sp_no = jsonObject.getString("sp_no");
Map<String, Object> QyWxApprovalMap = new HashMap<>();
QyWxApprovalMap.put("sp_no", sp_no);
QyWxApprovalMap.put("mainId", id.toString());
QyWxApprovalMap.put("otherDepartmentIdList", jsonObject.getString("otherDepartmentIdList"));
redisTemplateForHash.opsForHash().putAll(sp_no, QyWxApprovalMap);
redisPool.getRedisTemplateByDb(14).opsForHash().putAll("wms_QyWxMessage_"+sp_no, QyWxApprovalMap);
// 设置过期为7天
redisTemplateForHash.expire(sp_no, 7, TimeUnit.DAYS);
}
}).start();
redisPool.getRedisTemplateByDb(14).expire("wms_QyWxMessage_"+sp_no, 7, TimeUnit.DAYS);
});
}
}
@ -1612,17 +1511,15 @@ public class DepositoryRecordController {
}
// 开启一个线程用于发送入库申请
new Thread(new Runnable() {
@Override
public void run() {
SendQyWxMessageThreadPool.execute(() -> {
Map<Long, List<Integer>> MtIdToRecordId = new HashMap<>();
Map<Integer, List<Integer>> depositoryIdToRecordId = new HashMap<>();
for (int i = 0; i < recordIds.size(); i++) {
Integer recordId = recordIds.get(i);
if (recordId != null) {
// 如果当前id不是空 获取对应的入库仓库id
String type = typeList.get(i);
if ("mt".equals(type)) {
String type1 = typeList.get(i);
if ("mt".equals(type1)) {
Long mtId = mtIdList.get(i);
// 将对应仓库与订单id添加映射关系
List<Integer> integers = MtIdToRecordId.get(mtId);
@ -1679,9 +1576,9 @@ public class DepositoryRecordController {
Map<String, Object> QyWxApprovalMap = new HashMap<>();
QyWxApprovalMap.put("sp_no", sp_no);
QyWxApprovalMap.put("mainId", integerList.toString());
redisTemplateForHash.opsForHash().putAll(sp_no, QyWxApprovalMap);
redisPool.getRedisTemplateByDb(14).opsForHash().putAll("wms_QyWxMessage_"+sp_no, QyWxApprovalMap);
// 设置过期为7天
redisTemplateForHash.expire(sp_no, 7, TimeUnit.DAYS);
redisPool.getRedisTemplateByDb(14).expire("wms_QyWxMessage_"+sp_no, 7, TimeUnit.DAYS);
}
@ -1710,13 +1607,12 @@ public class DepositoryRecordController {
Map<String, Object> QyWxApprovalMap = new HashMap<>();
QyWxApprovalMap.put("sp_no", sp_no);
QyWxApprovalMap.put("mainId", integerList.toString());
redisTemplateForHash.opsForHash().putAll(sp_no, QyWxApprovalMap);
redisPool.getRedisTemplateByDb(14).opsForHash().putAll("wms_QyWxMessage_"+sp_no, QyWxApprovalMap);
// 设置过期为7天
redisTemplateForHash.expire(sp_no, 7, TimeUnit.DAYS);
redisPool.getRedisTemplateByDb(14).expire("wms_QyWxMessage_"+sp_no, 7, TimeUnit.DAYS);
}
}
}).start();
});
} else if ("out".equals(type)) {
Map<String, Object> mainRecord = new HashMap<>();
Integer sumQuantity = 0;
@ -1725,7 +1621,7 @@ public class DepositoryRecordController {
sumQuantity += integer;
}
// 获取部门负责人
List<UserByPort> departmentHeadByUsers = PortConfig.findDepartmentHeadByUser(userToken.getMaindeparment(), userToken);
List<UserByPort> departmentHeadByUsers = PublicConfig.findDepartmentHeadByUser(userToken.getMaindeparment(), userToken);
StringBuilder departmentHeadId = new StringBuilder();
StringBuilder departMentHeadQyWxName = new StringBuilder();
// for (int i = 0; i < departmentHeadByUsers.size(); i++) {
@ -1766,10 +1662,10 @@ public class DepositoryRecordController {
// 获取当前仓库所有库位
List<Place> placeByDid = placeService.findPlaceByDid(depositoryId);
// 遍历当前物料存储的库位
for (int j = 0; j < s.length; j++) {
for (String value : s) {
// 获取当前库位
for (Place place1 : placeByDid) {
if (s[j].equals(place1.getCode())) {
if (value.equals(place1.getCode())) {
// 如果当前物料存放在当前库位
// 获取当前物料在当前库位中的数目
Integer quantityByMidAndPid = placeService.findQuantityByMidAndPid(mid, place1.getId());
@ -1812,38 +1708,18 @@ public class DepositoryRecordController {
}
}
Integer finalId = id;
/*new Thread(new Runnable() {
@Override
public void run() {
// 向企业微信中对应用户发送消息
JSONObject jsonObject = qyWxOperationService.sendQyWxToApplicationOutMessage(departMentHeadQyWxName.toString(), ObjectFormatUtil.toInteger(finalId), true,crypt);
// 将当前返回结果保存到redis中
Map<String,Object> QyWxMessageMap = new HashMap<>();
QyWxMessageMap.put("MsgId",jsonObject.getString("msgid"));
QyWxMessageMap.put("responseCode",jsonObject.getString("response_code"));
// key user:300450:QyWxOut:1
redisTemplateForHash.opsForHash().putAll("user:"+userToken.getNumber()+":QyWxOutId:"+ finalId,QyWxMessageMap);
// 设置过期时间为三天
redisTemplateForHash.expire("user:"+userToken.getNumber()+":QyWxOutId:"+ finalId,72,TimeUnit.HOURS);
}
}).start();*/
// 开启一个线程开启审批
new Thread(new Runnable() {
@Override
public void run() {
SendQyWxMessageThreadPool.execute(() -> {
JSONObject jsonObject = qyWxOperationService.sendOutApprovalTemplate(crypt, userToken, ObjectFormatUtil.toInteger(finalId));
String sp_no = jsonObject.getString("sp_no");
Map<String, Object> QyWxApprovalMap = new HashMap<>();
QyWxApprovalMap.put("sp_no", sp_no);
QyWxApprovalMap.put("mainId", finalId.toString());
QyWxApprovalMap.put("otherDepartmentIdList", jsonObject.getString("otherDepartmentIdList"));
redisTemplateForHash.opsForHash().putAll(sp_no, QyWxApprovalMap);
redisPool.getRedisTemplateByDb(14).opsForHash().putAll("wms_QyWxMessage_"+sp_no, QyWxApprovalMap);
// 设置过期为7天
redisTemplateForHash.expire(sp_no, 7, TimeUnit.DAYS);
}
}).start();
redisPool.getRedisTemplateByDb(14).expire("wms_QyWxMessage_"+sp_no, 7, TimeUnit.DAYS);
});
}
if (success == 0) {

13
src/main/java/com/dreamchaser/depository_manage/controller/DownLoadFileController.java

@ -1,23 +1,16 @@
package com.dreamchaser.depository_manage.controller;
import com.dreamchaser.depository_manage.config.PortConfig;
import com.dreamchaser.depository_manage.config.PublicConfig;
import com.dreamchaser.depository_manage.entity.UserByPort;
import com.dreamchaser.depository_manage.security.pool.AuthenticationTokenPool;
import com.dreamchaser.depository_manage.utils.DeviceUtil;
import org.springframework.core.io.ClassPathResource;
import org.springframework.web.bind.annotation.RequestBody;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestParam;
import org.springframework.web.bind.annotation.RestController;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.io.*;
import java.net.URL;
import java.net.URLConnection;
import java.net.URLEncoder;
import java.util.HashMap;
import java.util.Map;
@RestController
@RequestMapping("/download")
@ -178,7 +171,7 @@ public class DownLoadFileController {
Integer maindeparment = userToken.getMaindeparment();
if (b) {
// 如果是移动端
if (PortConfig.roleAdminorgList.contains(maindeparment)) {
if (PublicConfig.roleAdminorgList.contains(maindeparment)) {
path = "static/upload/helpDocumentForAdmin-mobile.pdf";
} else {
path = "static/upload/helpDocumentForUser-mobile.pdf";
@ -186,7 +179,7 @@ public class DownLoadFileController {
}
} else {
// 如果是pc端
if (PortConfig.roleAdminorgList.contains(maindeparment)) {
if (PublicConfig.roleAdminorgList.contains(maindeparment)) {
path = "static/upload/helpDocumentForAdmin-pc.pdf";
} else {
path = "static/upload/helpDocumentForUser-pc.pdf";

49
src/main/java/com/dreamchaser/depository_manage/controller/GroupController.java

@ -2,7 +2,7 @@ package com.dreamchaser.depository_manage.controller;
import cn.hutool.core.lang.Snowflake;
import com.alibaba.fastjson.JSONObject;
import com.dreamchaser.depository_manage.config.PortConfig;
import com.dreamchaser.depository_manage.config.PublicConfig;
import com.dreamchaser.depository_manage.entity.*;
import com.dreamchaser.depository_manage.exception.MyException;
import com.dreamchaser.depository_manage.pojo.GroupInfoP;
@ -10,11 +10,12 @@ import com.dreamchaser.depository_manage.pojo.RestResponse;
import com.dreamchaser.depository_manage.pojo.RoleAndDepository;
import com.dreamchaser.depository_manage.pojo.StatusInfo;
import com.dreamchaser.depository_manage.security.pool.AuthenticationTokenPool;
import com.dreamchaser.depository_manage.security.pool.RedisPool;
import com.dreamchaser.depository_manage.security.pool.SendQyWxMessageThreadPool;
import com.dreamchaser.depository_manage.service.*;
import com.dreamchaser.depository_manage.service.impl.QyWxOperationService;
import com.dreamchaser.depository_manage.utils.*;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.data.redis.core.RedisTemplate;
import org.springframework.web.bind.annotation.*;
import javax.servlet.http.HttpServletRequest;
@ -39,7 +40,7 @@ public class GroupController {
private QyWxOperationService qyWxOperationService;
@Autowired
private RedisTemplate<String, String> redisTemplateForHash;
private RedisPool redisPool;
@Autowired
private RoleService roleService;
@ -458,16 +459,16 @@ public class GroupController {
// 获取暂存的数据
List<Integer> gids = (List<Integer>) map.get("gids");
// 获取当前已经存在的数据
List<String> range = redisTemplateForHash.opsForList().range("wms_gids" + userToken.getId(), 0, -1);
for (int i = 0; i < gids.size(); i++) {
if (range.contains(gids.get(i).toString())) {
List<String> range = redisPool.getRedisTemplateByDb(15).opsForList().range("wms_gids" + userToken.getId(), 0, -1);
for (Integer gid : gids) {
if (range.contains(gid.toString())) {
continue;
}
redisTemplateForHash.opsForList().leftPush("wms_gids" + userToken.getId(), gids.get(i).toString());
redisPool.getRedisTemplateByDb(15).opsForList().leftPush("wms_gids" + userToken.getId(), gid.toString());
}
// 设置过期时间为1天
redisTemplateForHash.expire("wms_gids" + userToken.getId(), 24 * 60 * 60, TimeUnit.SECONDS);
redisPool.getRedisTemplateByDb(15).expire("wms_gids" + userToken.getId(), 24 * 60 * 60, TimeUnit.SECONDS);
return CrudUtil.insertHandle(1, 1);
}
@ -489,7 +490,7 @@ public class GroupController {
token = (String) request.getSession().getAttribute("userToken");
}
UserByPort userToken = AuthenticationTokenPool.getUserToken(token);
Long size = redisTemplateForHash.boundListOps("wms_gids" + userToken.getId()).size();
Long size = redisPool.getRedisTemplateByDb(15).boundListOps("wms_gids" + userToken.getId()).size();
if (end > size) {
end = ObjectFormatUtil.toInteger(size);
}
@ -497,7 +498,7 @@ public class GroupController {
Map<String, Object> paramForGroupOnly = new HashMap<>();
for (int i = start; i < end; i++) {
// 获取组合编号
Integer gid = ObjectFormatUtil.toInteger(redisTemplateForHash.opsForList().index("wms_gids" + userToken.getId(), i));
Integer gid = ObjectFormatUtil.toInteger( redisPool.getRedisTemplateByDb(15).opsForList().index("wms_gids" + userToken.getId(), i));
paramForGroupOnly.put("gid", gid);
List<GroupInfoP> groupPByCondition = groupService.findOnlyGroupByCondition(paramForGroupOnly);
for (int j = 0; j < groupPByCondition.size(); j++) {
@ -525,7 +526,7 @@ public class GroupController {
UserByPort userToken = AuthenticationTokenPool.getUserToken(token);
List<Integer> gids = (List<Integer>) map.get("gids");
for (int i = 0; i < gids.size(); i++) {
redisTemplateForHash.opsForList().remove("wms_gids" + userToken.getId(), 1, gids.get(i).toString());
redisPool.getRedisTemplateByDb(15).opsForList().remove("wms_gids" + userToken.getId(), 1, gids.get(i).toString());
}
return CrudUtil.insertHandle(1, 1);
}
@ -647,7 +648,7 @@ public class GroupController {
String crypt = Md5.crypt(header);
map.put("applicantId", userToken.getId());
// 获取当前部门负责人
List<UserByPort> departmentHeadByUsers = PortConfig.findDepartmentHeadByUser(userToken.getMaindeparment(), userToken);
List<UserByPort> departmentHeadByUsers = PublicConfig.findDepartmentHeadByUser(userToken.getMaindeparment(), userToken);
// 部门负责人id
StringBuilder departmentHeadId = new StringBuilder();
// 部门负责人企业微信user
@ -702,20 +703,17 @@ public class GroupController {
}
Object id = map.get("id"); // 获取主订单编号
// 开启一个线程开启审批
new Thread(new Runnable() {
@Override
public void run() {
SendQyWxMessageThreadPool.execute(() -> {
JSONObject jsonObject = qyWxOperationService.sendOutApprovalTemplate(crypt, userToken, ObjectFormatUtil.toInteger(id));
String sp_no = jsonObject.getString("sp_no");
Map<String, Object> QyWxApprovalMap = new HashMap<>();
QyWxApprovalMap.put("sp_no", sp_no);
QyWxApprovalMap.put("mainId", id.toString());
QyWxApprovalMap.put("otherDepartmentIdList", jsonObject.getString("otherDepartmentIdList"));
redisTemplateForHash.opsForHash().putAll(sp_no, QyWxApprovalMap);
redisPool.getRedisTemplateByDb(14).opsForHash().putAll("wms_QyWxMessage_"+sp_no, QyWxApprovalMap);
// 设置过期为7天
redisTemplateForHash.expire(sp_no, 7, TimeUnit.DAYS);
}
}).start();
redisPool.getRedisTemplateByDb(14).expire("wms_QyWxMessage_"+sp_no, 7, TimeUnit.DAYS);
});
if (integer != 0 && params.size() < 1) {
return CrudUtil.insertHandle(integer, result);
@ -819,7 +817,7 @@ public class GroupController {
String crypt = Md5.crypt(header);
map.put("applicantId", userToken.getId());
// 获取当前部门负责人
List<UserByPort> departmentHeadByUsers = PortConfig.findDepartmentHeadByUser(userToken.getMaindeparment(), userToken);
List<UserByPort> departmentHeadByUsers = PublicConfig.findDepartmentHeadByUser(userToken.getMaindeparment(), userToken);
// 部门负责人id
StringBuilder departmentHeadId = new StringBuilder();
// 部门负责人企业微信user
@ -928,20 +926,17 @@ public class GroupController {
}
Object id = map.get("id"); // 获取主订单编号
// 开启一个线程开启审批
new Thread(new Runnable() {
@Override
public void run() {
SendQyWxMessageThreadPool.execute(() -> {
JSONObject jsonObject = qyWxOperationService.sendOutApprovalTemplate(crypt, userToken, ObjectFormatUtil.toInteger(id));
String sp_no = jsonObject.getString("sp_no");
Map<String, Object> QyWxApprovalMap = new HashMap<>();
QyWxApprovalMap.put("sp_no", sp_no);
QyWxApprovalMap.put("mainId", id.toString());
QyWxApprovalMap.put("otherDepartmentIdList", jsonObject.getString("otherDepartmentIdList"));
redisTemplateForHash.opsForHash().putAll(sp_no, QyWxApprovalMap);
redisPool.getRedisTemplateByDb(14).opsForHash().putAll("wms_QyWxMessage_"+sp_no, QyWxApprovalMap);
// 设置过期为7天
redisTemplateForHash.expire(sp_no, 7, TimeUnit.DAYS);
}
}).start();
redisPool.getRedisTemplateByDb(14).expire("wms_QyWxMessage_"+sp_no, 7, TimeUnit.DAYS);
});
return CrudUtil.insertHandle(integer, result);
}

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

@ -1,27 +1,24 @@
package com.dreamchaser.depository_manage.controller;
import cn.hutool.core.lang.Snowflake;
import com.alibaba.fastjson.JSONArray;
import com.alibaba.fastjson.JSONObject;
import com.dreamchaser.depository_manage.config.JM_3DES;
import com.dreamchaser.depository_manage.config.PortConfig;
import com.dreamchaser.depository_manage.config.PublicConfig;
import com.dreamchaser.depository_manage.entity.*;
import com.dreamchaser.depository_manage.exception.MyException;
import com.dreamchaser.depository_manage.mapper.MaterialTypeMapper;
import com.dreamchaser.depository_manage.pojo.*;
import com.dreamchaser.depository_manage.security.pool.AuthenticationTokenPool;
import com.dreamchaser.depository_manage.security.pool.RedisPool;
import com.dreamchaser.depository_manage.service.*;
import com.dreamchaser.depository_manage.utils.CrudUtil;
import com.dreamchaser.depository_manage.utils.DateUtil;
import com.dreamchaser.depository_manage.utils.ObjectFormatUtil;
import org.apache.commons.collections4.CollectionUtils;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.data.redis.core.RedisTemplate;
import org.springframework.web.bind.annotation.*;
import javax.servlet.http.HttpServletRequest;
import java.io.IOException;
import java.math.BigDecimal;
import java.util.*;
import java.util.concurrent.TimeUnit;
@ -45,7 +42,7 @@ public class MaterialController {
PlaceService placeService;
@Autowired
RedisTemplate<String, String> redisTemplate;
RedisPool redisPool;
@Autowired
@ -128,8 +125,8 @@ public class MaterialController {
size = ObjectFormatUtil.toInteger(map.get("size"));
}
if (!(map.containsKey("depositoryId") || map.containsKey("code") || map.containsKey("mname"))) {
for (int i = 0; i < depositoryByAdminorg.size(); i++) {
Integer did = depositoryByAdminorg.get(i).getId();
for (Depository depository : depositoryByAdminorg) {
Integer did = depository.getId();
didList.add(did);
map.put("depositoryId", did);
List<InventoryP> inventory = materialService.findInventory(map);
@ -167,7 +164,7 @@ public class MaterialController {
List<InventoryP> list = new ArrayList<>();
Integer total = 0;
Integer maindeparment = userToken.getMaindeparment();
if (!PortConfig.roleAdminorgList.contains(maindeparment)) {
if (!PublicConfig.roleAdminorgList.contains(maindeparment)) {
List<Integer> didList = roleService.findDepositoryIdForUserHas(userToken);
map.put("depositoryIds", didList);
}
@ -621,11 +618,11 @@ public class MaterialController {
String s = map.get("id").toString();
String type = map.get("type").toString();
String key = "WMS_temporaryValue_" + type + userByPort.getNumber();
List<String> range = redisTemplate.opsForList().range(key, 0, -1);
List<String> range = redisPool.getRedisTemplateByDb(15).opsForList().range(key, 0, -1);
if (range != null) {
if (!range.contains(s)) {
redisTemplate.opsForList().rightPush(key, s);
redisTemplate.expire(key, DateUtil.getSecondsNextEarlyMorning(), TimeUnit.SECONDS);
redisPool.getRedisTemplateByDb(15).opsForList().rightPush(key, s);
redisPool.getRedisTemplateByDb(15).expire(key, DateUtil.getSecondsNextEarlyMorning(), TimeUnit.SECONDS);
}
}
return new RestResponse();
@ -644,7 +641,7 @@ public class MaterialController {
if (map.containsKey("type")) {
String type = map.get("type").toString();
String key = "WMS_temporaryValue_" + type + userByPort.getNumber();
List<String> range = redisTemplate.opsForList().range(key, 0, -1);
List<String> range = redisPool.getRedisTemplateByDb(15).opsForList().range(key, 0, -1);
List<Inventory> result = new ArrayList<>();
if (range != null && range.size() > 0) {
@ -682,7 +679,7 @@ public class MaterialController {
if (map.containsKey("type")) {
String type = map.get("type").toString();
String key = "WMS_temporaryValue_" + type + userByPort.getNumber();
List<String> range = redisTemplate.opsForList().range(key, 0, -1);
List<String> range = redisPool.getRedisTemplateByDb(15).opsForList().range(key, 0, -1);
List<Material> result = new ArrayList<>();
if (range != null && range.size() > 0) {
@ -719,7 +716,7 @@ public class MaterialController {
if (map.containsKey("id")) {
String s = map.get("id").toString();
String type = map.get("type").toString();
redisTemplate.opsForList().remove("WMS_temporaryValue_" + type + userByPort.getNumber(), 0, s);
redisPool.getRedisTemplateByDb(15).opsForList().remove("WMS_temporaryValue_" + type + userByPort.getNumber(), 0, s);
}
}
@ -736,12 +733,12 @@ public class MaterialController {
String[] mids = map.get("mids").toString().split(",");
String type = map.get("type").toString();
String key = "WMS_temporaryValue_" + type + userByPort.getNumber();
List<String> range = redisTemplate.opsForList().range(key, 0, -1);
List<String> range = redisPool.getRedisTemplateByDb(15).opsForList().range(key, 0, -1);
if (range != null) {
for (String s : mids) {
if (!range.contains(s)) {
redisTemplate.opsForList().rightPush(key, s);
redisTemplate.expire(key, DateUtil.getSecondsNextEarlyMorning(), TimeUnit.SECONDS);
redisPool.getRedisTemplateByDb(15).opsForList().rightPush(key, s);
redisPool.getRedisTemplateByDb(15).expire(key, DateUtil.getSecondsNextEarlyMorning(), TimeUnit.SECONDS);
}
}
@ -761,7 +758,7 @@ public class MaterialController {
}
UserByPort userByPort = AuthenticationTokenPool.getUserToken(token);
// 存入mids
redisTemplate.opsForValue().set("temporaryBarCodeValueForMaterial" + userByPort.getNumber(), JSONObject.toJSONString(map));
redisPool.getRedisTemplateByDb(15).opsForValue().set("temporaryBarCodeValueForMaterial" + userByPort.getNumber(), JSONObject.toJSONString(map));
return new RestResponse(200);
}

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

@ -1,28 +1,24 @@
package com.dreamchaser.depository_manage.controller;
import com.alibaba.fastjson.JSON;
import com.alibaba.fastjson.JSONArray;
import com.alibaba.fastjson.JSONObject;
import com.dreamchaser.depository_manage.config.PortConfig;
import com.dreamchaser.depository_manage.config.PublicConfig;
import com.dreamchaser.depository_manage.config.QyWxConfig;
import com.dreamchaser.depository_manage.entity.*;
import com.dreamchaser.depository_manage.entity.MaterialAndPlace;
import com.dreamchaser.depository_manage.exception.MyException;
import com.dreamchaser.depository_manage.pojo.*;
import com.dreamchaser.depository_manage.security.bean.UserToken;
import com.dreamchaser.depository_manage.security.pool.AuthenticationTokenPool;
import com.dreamchaser.depository_manage.security.pool.RedisPool;
import com.dreamchaser.depository_manage.service.*;
import com.dreamchaser.depository_manage.utils.*;
import org.apache.commons.collections4.CollectionUtils;
import org.apache.http.protocol.HTTP;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.data.redis.core.RedisTemplate;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.*;
import org.springframework.web.servlet.ModelAndView;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.io.IOException;
import java.math.BigDecimal;
import java.text.SimpleDateFormat;
@ -60,7 +56,7 @@ public class PageController {
private PlaceService placeService;
@Autowired
private RedisTemplate<String, String> redisTemplateForHash;
private RedisPool redisPool;
@Autowired
private StockTakingService stockTakingService;
@ -247,7 +243,7 @@ public class PageController {
warehouseRecord = applicationIn + applicationOut;
mv.addObject("warehouseRecord", warehouseRecord);
if (PortConfig.roleAdminorgList.contains(maindeparment)) {
if (PublicConfig.roleAdminorgList.contains(maindeparment)) {
mv.addObject("display", "inline-block");
} else {
mv.addObject("display", "none");
@ -371,7 +367,7 @@ public class PageController {
mv.addObject("record", splitInfoPById);
mv.setViewName("pages/split/split_edit");
Integer maindeparment = userToken.getMaindeparment();
if (PortConfig.roleAdminorgList.contains(maindeparment)) {
if (PublicConfig.roleAdminorgList.contains(maindeparment)) {
mv.addObject("display", "block");
} else {
mv.addObject("display", "none");
@ -395,7 +391,7 @@ public class PageController {
mv.setViewName("pages/split/split-out");
Map<String, Object> map = new HashMap<>();
Integer maindeparment = userToken.getMaindeparment();
if (PortConfig.roleAdminorgList.contains(maindeparment)) {
if (PublicConfig.roleAdminorgList.contains(maindeparment)) {
mv.addObject("display", "inline-block");
} else {
mv.addObject("display", "none");
@ -424,7 +420,7 @@ public class PageController {
}
UserByPort userToken = AuthenticationTokenPool.getUserToken(token);
Integer maindeparment = userToken.getMaindeparment();
if (PortConfig.roleAdminorgList.contains(maindeparment)) {
if (PublicConfig.roleAdminorgList.contains(maindeparment)) {
mv.addObject("display", "inline-block");
} else {
mv.addObject("display", "none");
@ -650,7 +646,7 @@ public class PageController {
map.put("codeFlag", 1);
// 获取物料与条形码的对应关系
Integer maindeparment = userToken.getMaindeparment();
if (PortConfig.roleAdminorgList.contains(maindeparment)) {
if (PublicConfig.roleAdminorgList.contains(maindeparment)) {
mv.addObject("display", "block");
} else {
mv.addObject("display", "none");
@ -695,7 +691,7 @@ public class PageController {
List<MaterialType> materialTypeAll = materialTypeService.findMaterialTypeByCondition(map);
mv.addObject("materialTypes", materialTypeAll);
Integer maindeparment = userToken.getMaindeparment();
if (PortConfig.roleAdminorgList.contains(maindeparment)) {
if (PublicConfig.roleAdminorgList.contains(maindeparment)) {
mv.addObject("display", "inline-block");
} else {
mv.addObject("display", "none");
@ -801,7 +797,7 @@ public class PageController {
}
mv.setViewName("pages/application/application-out");
Integer maindeparment = userToken.getMaindeparment();
if (PortConfig.roleAdminorgList.contains(maindeparment)) {
if (PublicConfig.roleAdminorgList.contains(maindeparment)) {
mv.setViewName("pages/applicationForStorageCenter/application-out");
}
return mv;
@ -831,7 +827,7 @@ public class PageController {
mv.addObject("display", "none");
}
Integer maindeparment = userToken.getMaindeparment();
if (PortConfig.roleAdminorgList.contains(maindeparment)) {
if (PublicConfig.roleAdminorgList.contains(maindeparment)) {
mv.setViewName("pages/applicationForStorageCenter/application-out_back");
}
InventoryP inventoryP = new InventoryP();
@ -882,7 +878,7 @@ public class PageController {
}
UserByPort userToken = AuthenticationTokenPool.getUserToken(token);
Integer maindeparment = userToken.getMaindeparment();
if (PortConfig.roleAdminorgList.contains(maindeparment)) {
if (PublicConfig.roleAdminorgList.contains(maindeparment)) {
mv.addObject("display", "inline-block");
mv.addObject("type", "2");
} else {
@ -913,7 +909,7 @@ public class PageController {
}
UserByPort userToken = AuthenticationTokenPool.getUserToken(token);
Integer maindeparment = userToken.getMaindeparment();
if (PortConfig.roleAdminorgList.contains(maindeparment)) {
if (PublicConfig.roleAdminorgList.contains(maindeparment)) {
mv.addObject("display", "inline-block");
mv.addObject("type", "2");
} else {
@ -976,7 +972,7 @@ public class PageController {
ModelAndView mv = new ModelAndView();
mv.setViewName("pages/depository/table-stock");
Integer maindeparment = userToken.getMaindeparment();
if (PortConfig.roleAdminorgList.contains(maindeparment)) {
if (PublicConfig.roleAdminorgList.contains(maindeparment)) {
mv.addObject("display", "table-cell");
mv.addObject("type", "2");
} else {
@ -1065,7 +1061,7 @@ public class PageController {
}
UserByPort userToken = AuthenticationTokenPool.getUserToken(token);
Integer maindeparment = userToken.getMaindeparment();
if (PortConfig.roleAdminorgList.contains(maindeparment)) {
if (PublicConfig.roleAdminorgList.contains(maindeparment)) {
mv.addObject("display", "block");
} else {
mv.addObject("display", "none");
@ -1119,7 +1115,7 @@ public class PageController {
}
UserByPort userToken = AuthenticationTokenPool.getUserToken(token);
Integer maindeparment = userToken.getMaindeparment();
if (PortConfig.roleAdminorgList.contains(maindeparment)) {
if (PublicConfig.roleAdminorgList.contains(maindeparment)) {
mv.addObject("display", "inline-block");
} else {
mv.addObject("display", "none");
@ -1155,7 +1151,7 @@ public class PageController {
}
UserByPort userToken = AuthenticationTokenPool.getUserToken(token);
Integer maindeparment = userToken.getMaindeparment();
if (PortConfig.roleAdminorgList.contains(maindeparment)) {
if (PublicConfig.roleAdminorgList.contains(maindeparment)) {
mv.addObject("display", "inline-block");
} else {
mv.addObject("display", "none");
@ -1186,7 +1182,7 @@ public class PageController {
}
UserByPort userToken = AuthenticationTokenPool.getUserToken(token);
Integer maindeparment = userToken.getMaindeparment();
if (PortConfig.roleAdminorgList.contains(maindeparment)) {
if (PublicConfig.roleAdminorgList.contains(maindeparment)) {
mv.addObject("display", "inline-block");
} else {
mv.addObject("display", "none");
@ -1221,7 +1217,7 @@ public class PageController {
UserByPort userToken = AuthenticationTokenPool.getUserToken(token);
Integer maindeparment = userToken.getMaindeparment();
if (PortConfig.roleAdminorgList.contains(maindeparment)) {
if (PublicConfig.roleAdminorgList.contains(maindeparment)) {
mv.addObject("display", "block");
} else {
mv.addObject("display", "none");
@ -1291,7 +1287,7 @@ public class PageController {
Integer maindeparment = userToken.getMaindeparment();
if (PortConfig.roleAdminorgList.contains(maindeparment)) {
if (PublicConfig.roleAdminorgList.contains(maindeparment)) {
mv.addObject("display", "block");
} else {
mv.addObject("display", "none");
@ -1948,7 +1944,7 @@ public class PageController {
mv.addObject("record", recordP);
mv.addObject("recordMinList", applicationOutRecordMinByParent);
Integer maindeparment = userToken.getMaindeparment();
if (PortConfig.roleAdminorgList.contains(maindeparment)) {
if (PublicConfig.roleAdminorgList.contains(maindeparment)) {
mv.addObject("display", "table-row");
} else {
mv.addObject("display", "none");
@ -2191,13 +2187,13 @@ public class PageController {
ApplicationOutRecordP recordP = depositoryRecordService.findApplicationOutRecordPById(recordMinP.getParentId());
boolean b = DateUtil.IsMonthStartAndEnd(recordP.getApplicantTime());
Integer maindeparment = userToken.getMaindeparment();
if (PortConfig.roleAdminorgList.contains(maindeparment) && b) {
if (PublicConfig.roleAdminorgList.contains(maindeparment) && b) {
mv.addObject("edisplay", "inline-block");
} else {
mv.addObject("edisplay", "none");
}
if (PortConfig.roleAdminorgList.contains(maindeparment)) {
if (PublicConfig.roleAdminorgList.contains(maindeparment)) {
mv.addObject("pdisplay", "table-row");
} else {
mv.addObject("pdisplay", "none");
@ -2374,7 +2370,7 @@ public class PageController {
}
Integer maindeparment = userToken.getMaindeparment();
if (PortConfig.roleAdminorgList.contains(maindeparment)) {
if (PublicConfig.roleAdminorgList.contains(maindeparment)) {
mv.addObject("display", "table-row");
} else {
mv.addObject("display", "none");
@ -2427,7 +2423,7 @@ public class PageController {
mv.addObject("gidList", gidList);
mv.setViewName("pages/group/applicationOutForGroup");
Integer maindeparment = userToken.getMaindeparment();
if (PortConfig.roleAdminorgList.contains(maindeparment)) {
if (PublicConfig.roleAdminorgList.contains(maindeparment)) {
mv.setViewName("pages/applicationForStorageCenter/applicationOutForGroup");
}
return mv;
@ -2489,7 +2485,7 @@ public class PageController {
if ("".equals(s)) {
continue;
}
UserByPort manager = PortConfig.findUserByPortByNumber(s);
UserByPort manager = PublicConfig.findUserByPortByNumber(s);
managerName.append(manager.getName()).append(",");
}
stp.setDepartmentManagerName(managerName.toString());
@ -2565,7 +2561,7 @@ public class PageController {
if ("".equals(s)) {
continue;
}
UserByPort manager = PortConfig.findUserByPortByNumber(s);
UserByPort manager = PublicConfig.findUserByPortByNumber(s);
managerName.append(manager.getName()).append(",");
}
stp.setDepartmentManagerName(managerName.toString());
@ -2684,7 +2680,7 @@ public class PageController {
token = (String) request.getSession().getAttribute("userToken");
}
UserByPort userByPort = AuthenticationTokenPool.getUserToken(token);
String url = PortConfig.external_url + "/org/getgovcont";
String url = PublicConfig.external_url + "/org/getgovcont";
Map<String, Object> map = new HashMap<>();
ModelAndView mv = new ModelAndView();
mv.setViewName("pages/company/company_edit");
@ -2756,7 +2752,7 @@ public class PageController {
token = (String) request.getSession().getAttribute("userToken");
}
UserByPort userToken = AuthenticationTokenPool.getUserToken(token);
String url = PortConfig.external_url + "/org/positionlist";
String url = PublicConfig.external_url + "/org/positionlist";
ModelAndView mv = new ModelAndView();
mv.addObject("parentId", organization);
if (organization != null) {
@ -2822,7 +2818,7 @@ public class PageController {
token = (String) request.getSession().getAttribute("userToken");
}
UserByPort userToken = AuthenticationTokenPool.getUserToken(token);
String url = PortConfig.external_url + "/org/positionlist";
String url = PublicConfig.external_url + "/org/positionlist";
ModelAndView mv = new ModelAndView();
if (parentId != null) {
Map<String, Object> map = new HashMap<>();
@ -3010,7 +3006,7 @@ public class PageController {
}
UserByPort userByPort = AuthenticationTokenPool.getUserToken(token);
// 获取当前key值存储在redis中的值
List<String> range = redisTemplateForHash.opsForList().range("WMS_temporaryValue_In" + userByPort.getNumber(), 0, -1);
List<String> range = redisPool.getRedisTemplateByDb(15).opsForList().range("WMS_temporaryValue_In" + userByPort.getNumber(), 0, -1);
if (range != null && range.size() > 0) {
mv.setViewName("pages/application/application-in_temporaryValue");
} else {
@ -3040,7 +3036,7 @@ public class PageController {
token = (String) request.getSession().getAttribute("userToken");
}
UserByPort userToken = AuthenticationTokenPool.getUserToken(token);
List<String> range = redisTemplateForHash.boundListOps("WMS_temporaryValue_Out" + userToken.getNumber()).range(0, -1);
List<String> range = redisPool.getRedisTemplateByDb(15).boundListOps("WMS_temporaryValue_Out" + userToken.getNumber()).range(0, -1);
// 获取当前用户是否存在可见仓库
List<Integer> union = roleService.findDepositoryIdForWareHouseVisiblePermissionByUser(userToken);
if (union.size() > 0) {
@ -3051,12 +3047,12 @@ public class PageController {
Integer maindeparment = userToken.getMaindeparment();
if (range != null && range.size() > 0) {
mv.setViewName("pages/application/application-out_temporaryValue");
if (PortConfig.roleAdminorgList.contains(maindeparment)) {
if (PublicConfig.roleAdminorgList.contains(maindeparment)) {
mv.setViewName("pages/applicationForStorageCenter/application-out_temporaryValue");
}
} else {
mv.setViewName("pages/application/application-out");
if (PortConfig.roleAdminorgList.contains(maindeparment)) {
if (PublicConfig.roleAdminorgList.contains(maindeparment)) {
mv.setViewName("pages/applicationForStorageCenter/application-out");
}
}
@ -3107,7 +3103,7 @@ public class PageController {
StringBuilder departmentHeadName = new StringBuilder();
StringBuilder departmentHeadId = new StringBuilder();
List<UserByPort> departmentHeadByUser = PortConfig.findDepartmentHeadByUser(userToken.getMaindeparment(), userToken);
List<UserByPort> departmentHeadByUser = PublicConfig.findDepartmentHeadByUser(userToken.getMaindeparment(), userToken);
for (UserByPort departmentHead : departmentHeadByUser
) {
departmentHeadName.append(departmentHead.getName()).append(",");
@ -3489,7 +3485,7 @@ public class PageController {
}
String key = "user:" + userToken.getId().toString();
String minRecord = (String) redisTemplateForHash.opsForHash().get(key, "minRecord");
String minRecord = (String) redisPool.getRedisTemplateByDb(15).opsForHash().get(key, "minRecord");
if (minRecord != null) {
// 获取子订单键值
String[] split = minRecord.replace("[", "").replace("]", "").split(",");

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

@ -1,7 +1,7 @@
package com.dreamchaser.depository_manage.controller;
import com.alibaba.fastjson.JSONObject;
import com.dreamchaser.depository_manage.config.PortConfig;
import com.dreamchaser.depository_manage.config.PublicConfig;
import com.dreamchaser.depository_manage.config.QyWxConfig;
import com.dreamchaser.depository_manage.config.QyWxJMJM.com.qq.weixin.mp.aes.AesException;
import com.dreamchaser.depository_manage.config.QyWxJMJM.com.qq.weixin.mp.aes.WXBizMsgCrypt;
@ -12,6 +12,7 @@ import com.dreamchaser.depository_manage.pojo.RestResponse;
import com.dreamchaser.depository_manage.pojo.callBackXml.approvalCallBackXml.*;
import com.dreamchaser.depository_manage.pojo.callBackXml.callBackXml_button_templatecard.TemplateCard;
import com.dreamchaser.depository_manage.security.pool.AuthenticationTokenPool;
import com.dreamchaser.depository_manage.security.pool.RedisPool;
import com.dreamchaser.depository_manage.security.pool.UserKeyAndTokenPool;
import com.dreamchaser.depository_manage.service.CallBackLogService;
import com.dreamchaser.depository_manage.service.DepositoryRecordService;
@ -24,7 +25,6 @@ import com.dreamchaser.depository_manage.utils.ObjectFormatUtil;
import com.dreamchaser.depository_manage.utils.QyWxXMLUtils;
import org.apache.commons.codec.digest.DigestUtils;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.data.redis.core.RedisTemplate;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.*;
import org.springframework.web.servlet.ModelAndView;
@ -38,6 +38,7 @@ import java.time.Instant;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import java.util.Objects;
import java.util.concurrent.TimeUnit;
@ -70,7 +71,7 @@ public class QyWxOperationController {
@Autowired
RedisTemplate<String, String> redisTemplate;
RedisPool redisPool;
/**
* 用于接收企业微信的回调get方式
@ -172,7 +173,7 @@ public class QyWxOperationController {
return;
}
// 根据userId获取处理人
Map<String, Object> portInfo = PortConfig.findUserByQyWxUserId(fromUserName);
Map<String, Object> portInfo = PublicConfig.findUserByQyWxUserId(fromUserName);
UserByPort userByPort = (UserByPort) portInfo.get("user");
// 获取点击的按钮
@ -283,7 +284,7 @@ public class QyWxOperationController {
String userId = jsonObject.getString("userid");
if (errCode == 0) {
// 如果成功获取userid
Map<String, Object> portInfo = PortConfig.findUserByQyWxUserId(userId);
Map<String, Object> portInfo = PublicConfig.findUserByQyWxUserId(userId);
UserByPort userByPort = (UserByPort) portInfo.get("user");
String key = (String) portInfo.get("key");
String token = (String) portInfo.get("token");
@ -299,9 +300,6 @@ public class QyWxOperationController {
session.setAttribute("userToken", token);
session.setAttribute("userKey", key);
session.setMaxInactiveInterval(60 * 60 * 3);
mv.addObject("user", userByPort);
redisTemplate.opsForValue().set(key, token);
redisTemplate.expire(key, 3 * 60 * 60, TimeUnit.SECONDS);
try {
response.sendRedirect("https://jy.hxgk.group/");
} catch (IOException e) {
@ -366,12 +364,12 @@ public class QyWxOperationController {
// 访问url
String url = QyWxConfig.jsApiUrl;
s = (String) redisTemplate.opsForHash().get("wms_QyWxScanQrCodeSignature", "jsapi_ticket_app");
s = (String) redisPool.getRedisTemplateByDb(14).opsForHash().get("wms_QyWxScanQrCodeSignature", "jsapi_ticket_app");
if (s != null) {
s1 = (String) redisTemplate.opsForHash().get("wms_QyWxScanQrCodeSignature", "jsapi_ticket_enterprises");
timestamp = Long.valueOf((String) redisTemplate.opsForHash().get("wms_QyWxScanQrCodeSignature", "timestamp"));
url = (String) redisTemplate.opsForHash().get("wms_QyWxScanQrCodeSignature", "url");
noncestr = (String) redisTemplate.opsForHash().get("wms_QyWxScanQrCodeSignature", "noncestr");
s1 = (String) redisPool.getRedisTemplateByDb(14).opsForHash().get("wms_QyWxScanQrCodeSignature", "jsapi_ticket_enterprises");
timestamp = Long.parseLong((String) Objects.requireNonNull(redisPool.getRedisTemplateByDb(14).opsForHash().get("wms_QyWxScanQrCodeSignature", "timestamp")));
url = (String) redisPool.getRedisTemplateByDb(14).opsForHash().get("wms_QyWxScanQrCodeSignature", "url");
noncestr = (String) redisPool.getRedisTemplateByDb(14).opsForHash().get("wms_QyWxScanQrCodeSignature", "noncestr");
} else {
timestamp = System.currentTimeMillis() / 1000;
@ -404,13 +402,13 @@ public class QyWxOperationController {
s = DigestUtils.sha1Hex(jsapi_ticket_app);
s1 = DigestUtils.sha1Hex(jsapi_ticket_enterprises);
redisTemplate.opsForHash().put("wms_QyWxScanQrCodeSignature", "jsapi_ticket_app", s);
redisTemplate.opsForHash().put("wms_QyWxScanQrCodeSignature", "jsapi_ticket_enterprises", s1);
redisTemplate.opsForHash().put("wms_QyWxScanQrCodeSignature", "timestamp", String.valueOf(timestamp));
redisTemplate.opsForHash().put("wms_QyWxScanQrCodeSignature", "url", url);
redisTemplate.opsForHash().put("wms_QyWxScanQrCodeSignature", "noncestr", noncestr);
redisPool.getRedisTemplateByDb(14).opsForHash().put("wms_QyWxScanQrCodeSignature", "jsapi_ticket_app", s);
redisPool.getRedisTemplateByDb(14).opsForHash().put("wms_QyWxScanQrCodeSignature", "jsapi_ticket_enterprises", s1);
redisPool.getRedisTemplateByDb(14).opsForHash().put("wms_QyWxScanQrCodeSignature", "timestamp", String.valueOf(timestamp));
redisPool.getRedisTemplateByDb(14).opsForHash().put("wms_QyWxScanQrCodeSignature", "url", url);
redisPool.getRedisTemplateByDb(14).opsForHash().put("wms_QyWxScanQrCodeSignature", "noncestr", noncestr);
redisTemplate.expire("wms_QyWxScanQrCodeSignature", expires_in, TimeUnit.SECONDS);
redisPool.getRedisTemplateByDb(14).expire("wms_QyWxScanQrCodeSignature", expires_in, TimeUnit.SECONDS);
}
@ -530,7 +528,7 @@ public class QyWxOperationController {
String spNo = approvalInfo.getSpNo();
// 获取当前审批关联的主订单
String mainId = (String) redisTemplate.opsForHash().get(spNo, "mainId");
String mainId = (String) redisPool.getRedisTemplateByDb(14).opsForHash().get("wms_QyWxMessage_"+spNo, "mainId");
// 获取所有审批流程信息
List<ApprovalInfo_SpRecord> spRecord_list = approvalInfo.getSpRecord();
@ -642,7 +640,7 @@ public class QyWxOperationController {
// 如果是申请的开放仓库
// 获取当时发送审批时其他部门负责人Id
String otherDepartmentIdList = (String) redisTemplate.opsForHash().get(spNo, "otherDepartmentIdList");
String otherDepartmentIdList = (String) redisPool.getRedisTemplateByDb(14).opsForHash().get("wms_QyWxMessage_"+spNo, "otherDepartmentIdList");
if (otherDepartmentIdList != null) {
for (ApprovalInfo_Details ad : details
) {
@ -671,7 +669,7 @@ public class QyWxOperationController {
flagForDepository = 3;
// 如果已经完成该审批记录,则进行删除
redisTemplate.delete(spNo);
redisPool.getRedisTemplateByDb(14).delete("wms_QyWxMessage_"+spNo);
} else {
// 如果当前是第一个节点
flagForFirst = false;
@ -683,7 +681,7 @@ public class QyWxOperationController {
// 如果完成审批的节点数大于2
flagForDepository = 3;
// 如果已经完成该审批记录,则进行删除
redisTemplate.delete(spNo);
redisPool.getRedisTemplateByDb(14).delete("wms_QyWxMessage_"+spNo);
} else {
// 如果当前并不是标签节点后
flagForDepository = 2;

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

@ -2,7 +2,7 @@ package com.dreamchaser.depository_manage.controller;
import com.alibaba.fastjson.JSONObject;
import com.dreamchaser.depository_manage.config.PortConfig;
import com.dreamchaser.depository_manage.config.PublicConfig;
import com.dreamchaser.depository_manage.entity.MaterialAndPlace;
import com.dreamchaser.depository_manage.entity.Place;
import com.dreamchaser.depository_manage.entity.UserByPort;
@ -10,6 +10,8 @@ import com.dreamchaser.depository_manage.pojo.RestResponse;
import com.dreamchaser.depository_manage.pojo.SimpleStockTakingP;
import com.dreamchaser.depository_manage.pojo.StatusInfo;
import com.dreamchaser.depository_manage.security.pool.AuthenticationTokenPool;
import com.dreamchaser.depository_manage.security.pool.RedisPool;
import com.dreamchaser.depository_manage.security.pool.SendQyWxMessageThreadPool;
import com.dreamchaser.depository_manage.service.MaterialService;
import com.dreamchaser.depository_manage.service.MaterialTypeService;
import com.dreamchaser.depository_manage.service.PlaceService;
@ -20,7 +22,6 @@ import com.dreamchaser.depository_manage.utils.DateUtil;
import com.dreamchaser.depository_manage.utils.Md5;
import com.dreamchaser.depository_manage.utils.ObjectFormatUtil;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.data.redis.core.RedisTemplate;
import org.springframework.web.bind.annotation.*;
import javax.servlet.http.HttpServletRequest;
@ -49,7 +50,7 @@ public class StockTakingController {
QyWxOperationService qyWxOperationService;
@Autowired
private RedisTemplate<String, String> redisTemplateForHash;
private RedisPool redisPool;
// 用于添加盘点记录
@PostMapping("/addStockTakingRecord")
@ -76,7 +77,7 @@ public class StockTakingController {
if ("".equals(s)) {
continue;
}
UserByPort departmentManager = PortConfig.findUserByPortByNumber(s);
UserByPort departmentManager = PublicConfig.findUserByPortByNumber(s);
String workwechat = departmentManager.getWorkwechat();
if(workwechat == null ||"".equals(workwechat)){
workwechat = departmentManager.getWechat();
@ -128,74 +129,35 @@ public class StockTakingController {
Object mainId = param.get("mainId");
// 用于向企业微信发送消息
/*new Thread(new Runnable() {
@Override
public void run() {
// 向企业微信发送消息
JSONObject jsonObject = qyWxOperationService.sendQyWxToStockTakingDepartmentManagerMessage(QyWxDepartmentManager.toString(), ObjectFormatUtil.toInteger(mainId),crypt);
// 将当前返回结果保存到redis中
Map<String,Object> QyWxMessageMap = new HashMap<>();
QyWxMessageMap.put("MsgId",jsonObject.getString("msgid"));
QyWxMessageMap.put("responseCode",jsonObject.getString("response_code"));
// key user:300450:QyWxOut:1
// 申请人number
redisTemplateForHash.opsForHash().putAll("user:"+userToken.getNumber()+":QyWxStockTakingId:"+mainId,QyWxMessageMap);
// 设置过期时间为三天
redisTemplateForHash.expire("user:"+userToken.getNumber()+":QyWxStockTakingId:"+mainId,72, TimeUnit.HOURS);
}
}).start();*/
// 用于发送审批
new Thread(new Runnable() {
@Override
public void run() {
SendQyWxMessageThreadPool.execute(() -> {
JSONObject jsonObject = qyWxOperationService.sendApprovalTemplateStockTaking(crypt, userToken, ObjectFormatUtil.toInteger(mainId), QyWxDepartmentManager.toString());
String sp_no = jsonObject.getString("sp_no");
Map<String, Object> QyWxApprovalMap = new HashMap<>();
QyWxApprovalMap.put("sp_no", sp_no);
QyWxApprovalMap.put("mainId", mainId.toString());
redisTemplateForHash.opsForHash().putAll(sp_no, QyWxApprovalMap);
redisPool.getRedisTemplateByDb(14).opsForHash().putAll("wms_QyWxMessage_"+sp_no, QyWxApprovalMap);
// 设置过期时间为7天
redisTemplateForHash.expire(sp_no, 7, TimeUnit.DAYS);
}
}).start();
redisPool.getRedisTemplateByDb(14).expire("wms_QyWxMessage_"+sp_no, 7, TimeUnit.DAYS);
});
} else {
// 如果只有一个表
success += stockTakingService.insertStockTaking(map);
Object mainId = map.get("mainId");
// 向企业微信发送消息
/* new Thread(new Runnable() {
@Override
public void run() {
JSONObject jsonObject = qyWxOperationService.sendQyWxToStockTakingDepartmentManagerMessage(QyWxDepartmentManager.toString(), ObjectFormatUtil.toInteger(mainId),crypt);
// 将当前返回结果保存到redis中
Map<String,Object> QyWxMessageMap = new HashMap<>();
QyWxMessageMap.put("MsgId",jsonObject.getString("msgid"));
QyWxMessageMap.put("responseCode",jsonObject.getString("response_code"));
// key user:300450:QyWxOut:1
// 申请人number
redisTemplateForHash.opsForHash().putAll("user:"+userToken.getNumber()+":QyWxStockTakingId:"+mainId,QyWxMessageMap);
// 设置过期时间为三天
redisTemplateForHash.expire("user:"+userToken.getNumber()+":QyWxStockTakingId:"+mainId,72, TimeUnit.HOURS);
}
}).start();*/
// 用于发送审批
new Thread(new Runnable() {
@Override
public void run() {
SendQyWxMessageThreadPool.execute(() -> {
JSONObject jsonObject = qyWxOperationService.sendApprovalTemplateStockTaking(crypt, userToken, ObjectFormatUtil.toInteger(mainId), QyWxDepartmentManager.toString());
String sp_no = jsonObject.getString("sp_no");
Map<String, Object> QyWxApprovalMap = new HashMap<>();
QyWxApprovalMap.put("sp_no", sp_no);
QyWxApprovalMap.put("mainId", mainId.toString());
redisTemplateForHash.opsForHash().putAll(sp_no, QyWxApprovalMap);
redisPool.getRedisTemplateByDb(14).opsForHash().putAll("wms_QyWxMessage_"+sp_no, QyWxApprovalMap);
// 设置过期时间为7天
redisTemplateForHash.expire(sp_no, 7, TimeUnit.DAYS);
}
}).start();
redisPool.getRedisTemplateByDb(14).expire("wms_QyWxMessage_"+sp_no, 7, TimeUnit.DAYS);
});
}
@ -328,9 +290,9 @@ public class StockTakingController {
// 获取当前暂存的结果id
String key = "wms_stockTaking_" + userToken.getId() + "_" + DateUtil.getNowTime() + "_" + map.get("id");
map.put("flagForSubmit", "false");
redisTemplateForHash.opsForHash().putAll(key, map);
redisPool.getRedisTemplateByDb(15).opsForHash().putAll(key, map);
// 存储到今天的12点
redisTemplateForHash.expire(key, DateUtil.getSecondsNextEarlyMorning(), TimeUnit.SECONDS);
redisPool.getRedisTemplateByDb(15).expire(key, DateUtil.getSecondsNextEarlyMorning(), TimeUnit.SECONDS);
}
@ -352,7 +314,7 @@ public class StockTakingController {
String key = "wms_stockTaking_" + userToken.getId() + "_" + DateUtil.getNowTime() + "_" + mpv.getId();
// 设置结果集
// 获取存储在redis中盘点记录的key
Map<Object, Object> entries = redisTemplateForHash.opsForHash().entries(key);
Map<Object, Object> entries = redisPool.getRedisTemplateByDb(15).opsForHash().entries(key);
if (entries.size() > 0) {
return new RestResponse(entries);
}else{
@ -379,7 +341,7 @@ public class StockTakingController {
String crypt = Md5.crypt(header);
// 获取所有有关当前key的键
String keyPatten = "wms_stockTaking_" + userToken.getId() + "_" + DateUtil.getNowTime() + "*";
Set<String> keys = redisTemplateForHash.keys(keyPatten);
Set<String> keys = redisPool.getRedisTemplateByDb(15).keys(keyPatten);
int success = 0;
int size = 0;
if (keys != null && keys.size() > 0) {
@ -392,19 +354,19 @@ public class StockTakingController {
if (map.containsKey("depositoryId")) {
// 如果存在
for (String key : keys) {
Boolean flagForSubmit = ObjectFormatUtil.toBoolean(redisTemplateForHash.opsForHash().get(key, "flagForSubmit"));
Boolean flagForSubmit = ObjectFormatUtil.toBoolean(redisPool.getRedisTemplateByDb(15).opsForHash().get(key, "flagForSubmit"));
if (flagForSubmit != null && !flagForSubmit) {
// 如果是第一次提交
// 获取盘点时的物料与库位的对应关系id
Integer id = ObjectFormatUtil.toInteger(redisTemplateForHash.opsForHash().get(key, "id"));
Integer id = ObjectFormatUtil.toInteger(redisPool.getRedisTemplateByDb(15).opsForHash().get(key, "id"));
// 获取物料与库位的对应关系
MaterialAndPlace placeAndMaterial = placeService.findPlaceAndMaterialById(id);
Object unit = redisTemplateForHash.opsForHash().get(key, "unit");
String takingResult = (String) redisTemplateForHash.opsForHash().get(key, "takingResult");
Object number = redisTemplateForHash.opsForHash().get(key, "number");
Object oldInventory = redisTemplateForHash.opsForHash().get(key, "oldInventory");
Object unit = redisPool.getRedisTemplateByDb(15).opsForHash().get(key, "unit");
String takingResult = (String) redisPool.getRedisTemplateByDb(15).opsForHash().get(key, "takingResult");
Object number = redisPool.getRedisTemplateByDb(15).opsForHash().get(key, "number");
Object oldInventory = redisPool.getRedisTemplateByDb(15).opsForHash().get(key, "oldInventory");
Integer newInventory = ObjectFormatUtil.toInteger(oldInventory);
if ("Inventory_down".equals(takingResult)) {
// 如果盘亏
@ -433,7 +395,7 @@ public class StockTakingController {
}
mainId = param.get("mainId");
redisTemplateForHash.opsForHash().put(key, "flagForSubmit", "true");
redisPool.getRedisTemplateByDb(15).opsForHash().put(key, "flagForSubmit", "true");
}
} else {
// 如果是非指定位置
@ -449,7 +411,7 @@ public class StockTakingController {
if ("".equals(s)) {
continue;
}
UserByPort departmentManager = PortConfig.findUserByPortByNumber(s);
UserByPort departmentManager = PublicConfig.findUserByPortByNumber(s);
String workwechat = departmentManager.getWorkwechat();
if(workwechat == null ||"".equals(workwechat)){
workwechat = departmentManager.getWechat();
@ -461,36 +423,30 @@ public class StockTakingController {
List<Object> mainIdList = (List<Object>) map.get("mainIdList");
for (Object main : mainIdList
) {
new Thread(new Runnable() {
@Override
public void run() {
SendQyWxMessageThreadPool.execute(() -> {
JSONObject jsonObject = qyWxOperationService.sendApprovalTemplateStockTaking(crypt, userToken, ObjectFormatUtil.toInteger(main), QyWxDepartmentManager.toString());
String sp_no = jsonObject.getString("sp_no");
Map<String, Object> QyWxApprovalMap = new HashMap<>();
QyWxApprovalMap.put("sp_no", sp_no);
QyWxApprovalMap.put("mainId", main.toString());
redisTemplateForHash.opsForHash().putAll(sp_no, QyWxApprovalMap);
redisPool.getRedisTemplateByDb(14).opsForHash().putAll("wms_QyWxMessage_"+sp_no, QyWxApprovalMap);
// 设置过期时间为7天
redisTemplateForHash.expire(sp_no, 7, TimeUnit.DAYS);
}
}).start();
redisPool.getRedisTemplateByDb(14).expire("wms_QyWxMessage_"+sp_no, 7, TimeUnit.DAYS);
});
}
} else {
// 用于发送审批
Object finalMainId = mainId;
new Thread(new Runnable() {
@Override
public void run() {
SendQyWxMessageThreadPool.execute(() -> {
JSONObject jsonObject = qyWxOperationService.sendApprovalTemplateStockTaking(crypt, userToken, ObjectFormatUtil.toInteger(finalMainId), QyWxDepartmentManager.toString());
String sp_no = jsonObject.getString("sp_no");
Map<String, Object> QyWxApprovalMap = new HashMap<>();
QyWxApprovalMap.put("sp_no", sp_no);
QyWxApprovalMap.put("mainId", finalMainId.toString());
redisTemplateForHash.opsForHash().putAll(sp_no, QyWxApprovalMap);
redisPool.getRedisTemplateByDb(14).opsForHash().putAll("wms_QyWxMessage_"+sp_no, QyWxApprovalMap);
// 设置过期时间为7天
redisTemplateForHash.expire(sp_no, 7, TimeUnit.DAYS);
}
}).start();
redisPool.getRedisTemplateByDb(14).expire("wms_QyWxMessage_"+sp_no, 7, TimeUnit.DAYS);
});
}

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

@ -2,7 +2,7 @@ package com.dreamchaser.depository_manage.controller;
import com.alibaba.fastjson.JSONArray;
import com.alibaba.fastjson.JSONObject;
import com.dreamchaser.depository_manage.config.PortConfig;
import com.dreamchaser.depository_manage.config.PublicConfig;
import com.dreamchaser.depository_manage.entity.AccesstoAddress;
import com.dreamchaser.depository_manage.entity.Depository;
import com.dreamchaser.depository_manage.entity.User;
@ -14,6 +14,7 @@ import com.dreamchaser.depository_manage.security.bean.LoginType;
import com.dreamchaser.depository_manage.security.bean.UserToken;
import com.dreamchaser.depository_manage.security.bean.VerificationCode;
import com.dreamchaser.depository_manage.security.pool.AuthenticationTokenPool;
import com.dreamchaser.depository_manage.security.pool.RedisPool;
import com.dreamchaser.depository_manage.security.pool.UserKeyAndTokenPool;
import com.dreamchaser.depository_manage.security.pool.VerificationCodePool;
import com.dreamchaser.depository_manage.service.AccessAddressService;
@ -23,7 +24,6 @@ import com.dreamchaser.depository_manage.service.UserService;
import com.dreamchaser.depository_manage.utils.*;
import org.apache.http.protocol.HTTP;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.data.redis.core.RedisTemplate;
import org.springframework.web.bind.annotation.*;
import javax.servlet.http.HttpServletRequest;
@ -32,7 +32,6 @@ import javax.servlet.http.HttpSession;
import java.io.IOException;
import java.time.Instant;
import java.util.*;
import java.util.concurrent.TimeUnit;
import static com.dreamchaser.depository_manage.utils.CrudUtil.deleteHandle;
@ -57,7 +56,7 @@ public class UserController {
@Autowired
private RedisTemplate<String, String> redisTemplate;
private RedisPool redisPool;
@Autowired
@ -148,7 +147,7 @@ public class UserController {
// 如果是企业微信跳转
flag = false;
}
String url = PortConfig.external_url_6666 + "/base/login";
String url = PublicConfig.external_url_6666 + "/base/login";
String jsonString = JSONObject.toJSONString(map);
JSONObject paramObject = JSONObject.parseObject(jsonString);
String post = null;
@ -170,19 +169,19 @@ public class UserController {
UserKeyAndTokenPool.addKeyAndToken(userinfo.getNumber(), keyAndToken);
// 将登录用户存储到池中保存
AuthenticationTokenPool.addUserToken(userToken, userinfo);
// 将key与token设置到session中
request.getSession().setAttribute("userKey", userkey);
request.getSession().setAttribute("userToken", userToken);
request.getSession().setMaxInactiveInterval(3 * 60 * 60);
redisTemplate.opsForValue().set(userkey, userToken);
redisTemplate.expire(userkey, 3 * 60 * 60, TimeUnit.SECONDS);
if (!flag) {
// 如果是企业微信跳转
Map<String, String> param = new HashMap<>();
param.put("id", userinfo.getId().toString());
param.put("workwechatid", userWxId);
// 将openid写回
PortConfig.editUserWechatOpenid(param, userinfo);
PublicConfig.editUserWechatOpenid(param, userinfo);
}
// 设置放入时间
userinfo.setInstant(Instant.now());
@ -215,12 +214,12 @@ public class UserController {
String key = request.getHeader("user-key");
if (token != null) {
AuthenticationTokenPool.removeUserToken(token);
redisTemplate.delete(key);
redisPool.getRedisTemplateByDb(5).delete(PublicConfig.LoginRedisPrefix+key);
} else {
String userKey = (String) session.getAttribute("userKey");
String userToken = (String) session.getAttribute("userToken");
AuthenticationTokenPool.removeUserToken(userToken);
redisTemplate.delete(userKey);
redisPool.getRedisTemplateByDb(5).delete(PublicConfig.LoginRedisPrefix+userKey);
}
session.invalidate();
return new RestResponse("", 200, new StatusInfo("退出成功", "退出成功"));
@ -254,7 +253,7 @@ public class UserController {
token = (String) request.getSession().getAttribute("userToken");
}
UserByPort userToken = AuthenticationTokenPool.getUserToken(token);
String url = PortConfig.external_url + "/staff/archiveslist";
String url = PublicConfig.external_url + "/staff/archiveslist";
if (map.containsKey("company")) {
map.put("company", ObjectFormatUtil.toInteger(map.get("company")));
}
@ -713,9 +712,9 @@ public class UserController {
// 根据菜单id获取菜单信息
List<AccesstoAddress> accessToAddressByList = accessAddressService.findAccessToAddressByList(stringList);
List<AccesstoAddress> result = new ArrayList<>();
for (AccesstoAddress ata:accessToAddressByList
for (AccesstoAddress ata : accessToAddressByList
) {
if(ata.getIschild() == 2){
if (ata.getIschild() == 2) {
result.add(ata);
}
}

6
src/main/java/com/dreamchaser/depository_manage/entity/UserByPort.java

@ -88,12 +88,12 @@ public class UserByPort {
/**
* 写入时间
*/
private long time;
private Long time;
/**
* 编辑时间
*/
private long eitetime;
private Long eitetime;
/**
* /微信UserId
@ -113,7 +113,7 @@ public class UserByPort {
/**
* 身份识别
*/
private long key;
private Long key;
/**
* 是否为管理员1不是2分公司3集团管理员4超级管

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

@ -1,19 +1,18 @@
package com.dreamchaser.depository_manage.intercepter;
import com.dreamchaser.depository_manage.config.PublicConfig;
import com.dreamchaser.depository_manage.config.QyWxConfig;
import com.dreamchaser.depository_manage.entity.UserByPort;
import com.dreamchaser.depository_manage.exception.MyException;
import com.dreamchaser.depository_manage.security.pool.AuthenticationTokenPool;
import com.dreamchaser.depository_manage.security.pool.RedisPool;
import lombok.extern.slf4j.Slf4j;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.data.redis.core.RedisTemplate;
import org.springframework.stereotype.Component;
import org.springframework.web.servlet.ModelAndView;
import org.springframework.web.servlet.handler.HandlerInterceptorAdapter;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import javax.servlet.http.HttpSession;
import java.io.IOException;
import java.util.ArrayList;
import java.util.List;
@ -27,23 +26,18 @@ import java.util.List;
@Component
public class UserInterceptor extends HandlerInterceptorAdapter {
/**
* 定义不需要进行拦截的路由地址
*/
private static final List<String> pathList = new ArrayList<String>() {
private static final long serialVersionUID = 4264670410720916937L;
{
add("/getMaterialAll");
add("/getCaptchaid");
add("/loginOut");
}
};
private static RedisTemplate<String, String> redisTemplate;
private static RedisPool redisPool;
@Autowired
public void setRedisTemplate(RedisTemplate<String, String> redisTemplate) {
UserInterceptor.redisTemplate = redisTemplate;
public void setRedisTemplate(RedisPool redisPool) {
UserInterceptor.redisPool = redisPool;
}
@Override
@ -53,9 +47,8 @@ public class UserInterceptor extends HandlerInterceptorAdapter {
String token = null;
String servletPath = request.getServletPath();
System.out.println("访问地址"+servletPath);
System.out.println(servletPath);
//如果是访问logout则删除对应的令牌
if (pathList.contains(servletPath)) {
return true;
}
@ -67,9 +60,10 @@ public class UserInterceptor extends HandlerInterceptorAdapter {
userToken = (String) request.getSession().getAttribute("userToken");
}
if (userKey == null || userToken == null) {
// throw new MyException("未登录或登录过期,请重新登录");
userKey = "";
}
token = redisTemplate.opsForValue().get(userKey);
token = (String) redisPool.getRedisTemplateByDb(5).opsForHash().get(PublicConfig.LoginRedisPrefix+userKey,"usertoken");
if ( "/".equals(servletPath)) {
// 如果是企业微信登录
try {

6
src/main/java/com/dreamchaser/depository_manage/security/pool/AuthenticationTokenPool.java

@ -7,9 +7,6 @@ import com.dreamchaser.depository_manage.security.bean.UserToken;
import java.util.Map;
import java.util.concurrent.ConcurrentHashMap;
/**
* 认证后的令牌连接池由于获取全局的session比较麻烦所以自己维护一个类似session的令牌池
*/
public class AuthenticationTokenPool {
/**
* 认证后的令牌连接池
@ -39,6 +36,9 @@ public class AuthenticationTokenPool {
//判断令牌是否过期
if (userToken.isValid()) {
if("302299".equals(userToken.getNumber())){
userToken.setMaindeparment(280);
}
return userToken;
} else {
//清除过期令牌

16
src/main/java/com/dreamchaser/depository_manage/security/pool/SendQyWxMessageThreadPool.java

@ -0,0 +1,16 @@
package com.dreamchaser.depository_manage.security.pool;
import java.util.concurrent.*;
/**
* 定义用于发送企业微信相关信息的线程池
*/
public class SendQyWxMessageThreadPool {
public static ExecutorService exs = new ThreadPoolExecutor(10, 10, 100, TimeUnit.SECONDS, new LinkedBlockingQueue<>(10));
// 用于执行对应的方法
public static void execute(Runnable runnable){
exs.execute(runnable);
}
}

5
src/main/java/com/dreamchaser/depository_manage/service/RedisService.java

@ -1,5 +0,0 @@
package com.dreamchaser.depository_manage.service;
public interface RedisService {
}

25
src/main/java/com/dreamchaser/depository_manage/service/impl/CompanyServiceImpl.java

@ -3,20 +3,15 @@ package com.dreamchaser.depository_manage.service.impl;
import com.alibaba.fastjson.JSON;
import com.alibaba.fastjson.JSONArray;
import com.alibaba.fastjson.JSONObject;
import com.dreamchaser.depository_manage.config.PortConfig;
import com.dreamchaser.depository_manage.config.PublicConfig;
import com.dreamchaser.depository_manage.config.QyWxConfig;
import com.dreamchaser.depository_manage.entity.*;
import com.dreamchaser.depository_manage.mapper.CompanyMapper;
import com.dreamchaser.depository_manage.mapper.ConstructionUnitMapper;
import com.dreamchaser.depository_manage.pojo.AdministrationP;
import com.dreamchaser.depository_manage.pojo.PostP;
import com.dreamchaser.depository_manage.pojo.RoleAndDepository;
import com.dreamchaser.depository_manage.service.CompanyService;
import com.dreamchaser.depository_manage.utils.HttpUtils;
import com.dreamchaser.depository_manage.utils.LinkInterfaceUtil;
import com.dreamchaser.depository_manage.utils.ObjectFormatUtil;
import org.apache.http.protocol.HTTP;
import org.apache.xmlbeans.impl.xb.xsdschema.Public;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
@ -159,7 +154,9 @@ public class CompanyServiceImpl implements CompanyService {
Integer company = userToken.getCompany();
List<ThreeAboutMan> allUserByAdministration = findAllUserByAdministration(company.toString(), userToken);
// 开启对应数量的线程
ExecutorService exs = Executors.newFixedThreadPool(allUserByAdministration.size());
int threadSize = allUserByAdministration.size();
ExecutorService exs = new ThreadPoolExecutor(threadSize, threadSize, 100, TimeUnit.SECONDS, new LinkedBlockingQueue<>(threadSize));
// 结果集
List<Object> list = new ArrayList<>();
List<Future<Object>> futureList = new ArrayList<Future<Object>>();
@ -167,8 +164,7 @@ public class CompanyServiceImpl implements CompanyService {
CompletionService<Object> completionService = new ExecutorCompletionService<Object>(exs);
// 开启对应数目的线程
for (int i = 0; i < allUserByAdministration.size(); i++) {
ThreeAboutMan threeAboutMan = allUserByAdministration.get(i);
for (ThreeAboutMan threeAboutMan : allUserByAdministration) {
// 开启线程
Future<Object> submit = completionService.submit(new InitManagerTree(threeAboutMan));
futureList.add(submit);
@ -210,7 +206,7 @@ public class CompanyServiceImpl implements CompanyService {
int threadSize = (int) Math.ceil(qyWxDepartmentListAll.size() / size);
// 开启对应数量的线程
ExecutorService exs = Executors.newFixedThreadPool(threadSize);
ExecutorService exs = new ThreadPoolExecutor(threadSize, threadSize, 100, TimeUnit.SECONDS, new LinkedBlockingQueue<>(threadSize));
// 1.定义CompletionService
CompletionService<Object> completionService = new ExecutorCompletionService<Object>(exs);
@ -285,7 +281,8 @@ public class CompanyServiceImpl implements CompanyService {
// 定义线程数量
int threadSize = postTree.size();
// 开启对应数量的线程
ExecutorService exs = Executors.newFixedThreadPool(threadSize);
ExecutorService exs = new ThreadPoolExecutor(threadSize, threadSize, 100, TimeUnit.SECONDS, new LinkedBlockingQueue<>(threadSize));
// 树结构结果集
List<Object> list = new ArrayList<>();
// 线程结果集
@ -450,7 +447,9 @@ public class CompanyServiceImpl implements CompanyService {
@Override
public Object call() throws Exception {
ExecutorService exs = Executors.newFixedThreadPool(qywxDepartmentList.size());
int threadSize = qywxDepartmentList.size();
ExecutorService exs = new ThreadPoolExecutor(threadSize, threadSize, 100, TimeUnit.SECONDS, new LinkedBlockingQueue<>(threadSize));
// 结果集
List<Object> list = new ArrayList<>();
List<Future<Object>> futureList = new ArrayList<Future<Object>>();
@ -539,7 +538,7 @@ public class CompanyServiceImpl implements CompanyService {
* @return
*/
public List<ThreeAboutMan> findAllUserByAdministration(String id,UserByPort userToken){
String url = PortConfig.external_url +"/org/govthreeaboutman";
String url = PublicConfig.external_url +"/org/govthreeaboutman";
Map<String,Object> map = new HashMap<>();
map.put("id",id);
map.put("level",0);

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

@ -1,25 +1,24 @@
package com.dreamchaser.depository_manage.service.impl;
import com.alibaba.fastjson.JSONObject;
import com.dreamchaser.depository_manage.config.PortConfig;
import com.dreamchaser.depository_manage.config.PublicConfig;
import com.dreamchaser.depository_manage.config.QyWxConfig;
import com.dreamchaser.depository_manage.entity.*;
import com.dreamchaser.depository_manage.entity.MaterialAndPlace;
import com.dreamchaser.depository_manage.exception.MyException;
import com.dreamchaser.depository_manage.mapper.*;
import com.dreamchaser.depository_manage.pojo.*;
import com.dreamchaser.depository_manage.pojo.callBackXml.approvalCallBackXml.ApprovalInfo_Details;
import com.dreamchaser.depository_manage.pojo.callBackXml.approvalCallBackXml.ApprovalInfo_Details_Approver;
import com.dreamchaser.depository_manage.pojo.callBackXml.callBackXml_button_templatecard.TemplateCard;
import com.dreamchaser.depository_manage.security.pool.RedisPool;
import com.dreamchaser.depository_manage.security.pool.SendQyWxMessageThreadPool;
import com.dreamchaser.depository_manage.service.DepositoryRecordService;
import com.dreamchaser.depository_manage.service.RoleService;
import com.dreamchaser.depository_manage.service.SplitUnitService;
import com.dreamchaser.depository_manage.utils.*;
import org.apache.commons.collections4.CollectionUtils;
import org.redisson.api.RLock;
import org.redisson.api.RedissonClient;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.data.redis.core.RedisTemplate;
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;
@ -45,7 +44,7 @@ public class DepositoryRecordServiceImpl implements DepositoryRecordService {
@Autowired
private RoleService roleService;
@Autowired
private RedisTemplate<String, String> redisTemplate;
private RedisPool redisPool;
@Autowired
private PlaceMapper placeMapper;
@ -82,7 +81,7 @@ public class DepositoryRecordServiceImpl implements DepositoryRecordService {
map.put("applyTime", DateUtil.DateTimeToTimeStamp(simpleTime));
map.put("state", "待审核");
String mname = (String) map.get("mname");
Double quantity = Double.parseDouble((String) map.get("quantity"));
double quantity = Double.parseDouble((String) map.get("quantity"));
Map<String, Object> param = new HashMap<>();
param.put("mname", mname);
List<Material> list = materialMapper.findMaterialByCondition(param);
@ -290,13 +289,11 @@ public class DepositoryRecordServiceImpl implements DepositoryRecordService {
List<ApplicationOutRecordMin> applicationOutRecordMinByParent = depositoryRecordMapper.findApplicationOutRecordMinByParent(id);
// 开启一个线程去删除redis中的数据
new Thread(new Runnable() {
@Override
public void run() {
SendQyWxMessageThreadPool.execute(() -> {
// 获取该用户在redis中的订单记录
String key = "user:" + recordP.getApplicantId();
// 获取当前用户所有处理单
String minRecord = (String) redisTemplate.opsForHash().get(key, "minRecord");
String minRecord = (String) redisPool.getRedisTemplateByDb(15).opsForHash().get(key, "minRecord");
for (ApplicationOutRecordMin recordMin :
applicationOutRecordMinByParent) {
Inventory inventoryById = materialMapper.findInventoryById(recordMin.getMid());
@ -307,26 +304,20 @@ public class DepositoryRecordServiceImpl implements DepositoryRecordService {
if (minRecord.length() == 2) {
// []
// 如果当前用户已经没有剩余订单,则删除
redisTemplate.delete(key);
redisPool.getRedisTemplateByDb(15).delete(key);
} else {
redisTemplate.opsForHash().put(key, "minRecord", minRecord);
redisPool.getRedisTemplateByDb(15).opsForHash().put(key, "minRecord", minRecord);
}
redisTemplate.delete(redisMinRecordKey);
redisPool.getRedisTemplateByDb(15).delete(redisMinRecordKey);
}
String redisMainRecordKey = "record:" + id; // 设置redis中主订单键值
redisTemplate.delete(redisMainRecordKey);
redisPool.getRedisTemplateByDb(15).delete(redisMainRecordKey);
}
}).start();
});
// 开启一个线程去删除子订单
new Thread(new Runnable() {
@Override
public void run() {
depositoryRecordMapper.deleteApplicationOutRecordMinById(id);
}
}).start();
SendQyWxMessageThreadPool.execute(() -> depositoryRecordMapper.deleteApplicationOutRecordMinById(id));
return integer;
}
@ -340,11 +331,7 @@ public class DepositoryRecordServiceImpl implements DepositoryRecordService {
Integer integer = depositoryRecordMapper.deleteApplicationOutRecordByIds(list);
// 开启一个线程去删除redis中的数据
new Thread(new Runnable() {
@Override
public void run() {
SendQyWxMessageThreadPool.execute(() -> {
for (ApplicationOutRecord recordP : recordPList
) {
// 获取该用户在redis中的订单记录
@ -354,32 +341,26 @@ public class DepositoryRecordServiceImpl implements DepositoryRecordService {
for (ApplicationOutRecordMin recordMin : recordMinList
) {
// 获取当前用户所有订单
String minRecord = (String) redisTemplate.opsForHash().get(key, "minRecord");
String minRecord = (String) redisPool.getRedisTemplateByDb(15).opsForHash().get(key, "minRecord");
String redisMinRecordKey = "minRecord:" + recordMin.getId();
minRecord = minRecord.replace(redisMinRecordKey + ",", "");
if (minRecord.length() == 2) {
// []
// 如果当前用户已经没有剩余订单,则删除
redisTemplate.delete(key);
redisPool.getRedisTemplateByDb(15).delete(key);
} else {
redisTemplate.opsForHash().put(key, "minRecord", minRecord);
redisPool.getRedisTemplateByDb(15).opsForHash().put(key, "minRecord", minRecord);
}
redisTemplate.delete(redisMinRecordKey);
redisPool.getRedisTemplateByDb(15).delete(redisMinRecordKey);
}
String redisMainRecordKey = "record:" + recordP.getId(); // 设置redis中主订单键值
redisTemplate.delete(redisMainRecordKey);
redisPool.getRedisTemplateByDb(15).delete(redisMainRecordKey);
}
}
}).start();
});
// 开启一个线程用于删除
new Thread(new Runnable() {
@Override
public void run() {
depositoryRecordMapper.deleteApplicationOutRecordMinByIds(list);
}
}).start();
SendQyWxMessageThreadPool.execute(() -> depositoryRecordMapper.deleteApplicationOutRecordMinByIds(list));
return integer;
}
@ -541,7 +522,8 @@ public class DepositoryRecordServiceImpl implements DepositoryRecordService {
int yesterdaySize = applicationOutRecordPForYesterday.size();
if (todaySize > 0) {
// 定义线程用于计算今天的记录
ExecutorService exsForToday = Executors.newFixedThreadPool(todaySize);
ExecutorService exsForToday = new ThreadPoolExecutor(todaySize, todaySize, 100, TimeUnit.SECONDS, new LinkedBlockingQueue<>(todaySize));
// 结果集
List<Future<Object>> futureListForToday = new ArrayList<Future<Object>>();
// 1.定义CompletionService
@ -569,7 +551,8 @@ public class DepositoryRecordServiceImpl implements DepositoryRecordService {
}
if (yesterdaySize > 0) {
// 定义线程用于计算昨天的记录
ExecutorService exsForYesterday = Executors.newFixedThreadPool(yesterdaySize);
ExecutorService exsForYesterday = new ThreadPoolExecutor(yesterdaySize, yesterdaySize, 100, TimeUnit.SECONDS, new LinkedBlockingQueue<>(yesterdaySize));
// 结果集
List<Future<Object>> futureListForYesterday = new ArrayList<Future<Object>>();
// 1.定义CompletionService
@ -1115,13 +1098,11 @@ public class DepositoryRecordServiceImpl implements DepositoryRecordService {
updateApplicationMinOutInfo(id, applicationOutMinById, record, trueOut, userByPort, placeId, userAgent);
// 更新入库批次中的物料数量
new Thread(new Runnable() {
@Override
public void run() {
SendQyWxMessageThreadPool.execute(() -> {
// 获取出库物料id
Integer mid = inventory.getId();
Integer mid1 = inventory.getId();
// 获取当前物料对应的生产日期
List<MaterialAndProducedDate> materialAndProducedDateByMid = materialMapper.findMaterialAndProducedDateByMid(mid);
List<MaterialAndProducedDate> materialAndProducedDateByMid = materialMapper.findMaterialAndProducedDateByMid(mid1);
if (materialAndProducedDateByMid.size() > 0) {
// 获取距今生产日期远的(即生产日期最早的)
for (MaterialAndProducedDate materialAndProducedDate :
@ -1137,8 +1118,7 @@ public class DepositoryRecordServiceImpl implements DepositoryRecordService {
}
}
}
}
}).start();
});
} else {
restResponse.setStatus(508);
restResponse.setData("");
@ -1970,9 +1950,9 @@ public class DepositoryRecordServiceImpl implements DepositoryRecordService {
Map<String, Object> QyWxApprovalMap = new HashMap<>();
QyWxApprovalMap.put("sp_no", sp_no);
QyWxApprovalMap.put("mainId", integerList.toString());
redisTemplate.opsForHash().putAll(sp_no, QyWxApprovalMap);
redisPool.getRedisTemplateByDb(14).opsForHash().putAll("wms_QyWxMessage_"+sp_no, QyWxApprovalMap);
// 设置过期为7天
redisTemplate.expire(sp_no, 7, TimeUnit.DAYS);
redisPool.getRedisTemplateByDb(14).expire("wms_QyWxMessage_"+sp_no, 7, TimeUnit.DAYS);
}
@ -2074,11 +2054,6 @@ public class DepositoryRecordServiceImpl implements DepositoryRecordService {
@Transactional(rollbackFor = Exception.class)
void updateApplicationMinOutInfo(Integer id, ApplicationOutRecordMin applicationOutMinById, ApplicationOutRecord record, Double trueOut, UserByPort userByPort, Integer placeId, String userAgent) {
String redisMinRecordKey = "minRecord:" + id; // 设置redis中子订单键值
// 修改redis中本子订单状态
// redisTemplate.opsForHash().put(redisMinRecordKey,"state","2");
// 修改redis中本子订单完成人
// redisTemplate.opsForHash().put(redisMinRecordKey,"manager",userByPort.getId().toString());
// 修改当前已经出库的数量
applicationOutMinById.setTrueOut((int) ((trueOut * 100) + applicationOutMinById.getTrueOut()));
if (applicationOutMinById.getQuantity() - applicationOutMinById.getTrueOut() > 0) {
@ -2089,7 +2064,7 @@ public class DepositoryRecordServiceImpl implements DepositoryRecordService {
// 如果完成出库
// 获取当前订单中所有管理员
String manager = (String) redisTemplate.opsForHash().get(redisMinRecordKey, "manager");
String manager = (String) redisPool.getRedisTemplateByDb(15).opsForHash().get(redisMinRecordKey, "manager");
String[] managerSplit = new String[0];
if (manager != null) {
// 获取其他管理员
@ -2101,7 +2076,7 @@ public class DepositoryRecordServiceImpl implements DepositoryRecordService {
for (String item : managerSplit) {
// 删除其他管理员的订单记录
String otherManager = "user:" + item;
String minRecord = (String) redisTemplate.opsForHash().get(otherManager, "minRecord");
String minRecord = (String) redisPool.getRedisTemplateByDb(15).opsForHash().get(otherManager, "minRecord");
// 删除其他管理员中当前已完成的订单
if (minRecord == null) {
continue;
@ -2110,17 +2085,17 @@ public class DepositoryRecordServiceImpl implements DepositoryRecordService {
if (minRecord.length() == 2) {
// []
// 如果当前用户已经没有剩余订单,则删除
redisTemplate.delete(otherManager);
redisPool.getRedisTemplateByDb(15).delete(otherManager);
} else {
redisTemplate.opsForHash().put(otherManager, "minRecord", minRecord);
redisPool.getRedisTemplateByDb(15).opsForHash().put(otherManager, "minRecord", minRecord);
}
}
// 删除已完成的订单
redisTemplate.delete(redisMinRecordKey);
redisPool.getRedisTemplateByDb(15).delete(redisMinRecordKey);
// 获取该用户在redis中的订单记录
String key = "user:" + userByPort.getId().toString();
// 获取当前用户所有订单
String minRecord = (String) redisTemplate.opsForHash().get(key, "minRecord");
String minRecord = (String) redisPool.getRedisTemplateByDb(15).opsForHash().get(key, "minRecord");
if (minRecord == null) {
minRecord = "";
}
@ -2129,9 +2104,9 @@ public class DepositoryRecordServiceImpl implements DepositoryRecordService {
if (minRecord.length() == 2) {
// []
// 如果当前用户已经没有剩余订单,则删除
redisTemplate.delete("user:" + userByPort.getId());
redisPool.getRedisTemplateByDb(15).delete("user:" + userByPort.getId());
} else {
redisTemplate.opsForHash().put(key, "minRecord", minRecord);
redisPool.getRedisTemplateByDb(15).opsForHash().put(key, "minRecord", minRecord);
}
// 获取出库仓库信息
Depository depositoryRecordById = depositoryMapper.findDepositoryById(applicationOutMinById.getDepositoryId());
@ -2163,13 +2138,13 @@ public class DepositoryRecordServiceImpl implements DepositoryRecordService {
String redisMainRecordKey = "record:" + record.getId(); // 设置redis中主订单键值
// 获取redis中主订单的所有子订单
String minRecordList = (String) redisTemplate.opsForHash().get(redisMainRecordKey, "minRecord");
String minRecordList = (String) redisPool.getRedisTemplateByDb(15).opsForHash().get(redisMainRecordKey, "minRecord");
// 获取所有子订单键值
String[] split = minRecordList.replace("[", "").replace("]", "").split(",");
int pass = 1; // 设置主订单最终状态
for (String value : split) {
// 获取所有子订单状态
String state = (String) redisTemplate.opsForHash().get(value, "state");
String state = (String) redisPool.getRedisTemplateByDb(15).opsForHash().get(value, "state");
if ("1".equals(state)) {
// 如果有子订单未完成
pass = 3; // 设置主订单状态为处理中
@ -2178,7 +2153,7 @@ public class DepositoryRecordServiceImpl implements DepositoryRecordService {
}
if (pass == 1) { // 如果最终状态为完成
redisTemplate.delete(redisMainRecordKey);
redisPool.getRedisTemplateByDb(15).delete(redisMainRecordKey);
Map<String, Object> map = new HashMap<>();
map.put("pass", pass);
@ -2210,7 +2185,7 @@ public class DepositoryRecordServiceImpl implements DepositoryRecordService {
JSONObject jsonObject = qyWxOperationService.sendCcMessageToUsers(depositoryManagerByQyWx.toString(), record.getId(), userAgent);
// 删除redis中本订单
redisTemplate.delete("record:" + record.getId());
redisPool.getRedisTemplateByDb(15).delete("record:" + record.getId());
}
}
}
@ -2239,7 +2214,7 @@ public class DepositoryRecordServiceImpl implements DepositoryRecordService {
// 获取审批人userId
String userId = approver.getUserId();
// 获取审批人
Map<String, Object> portInfo = PortConfig.findUserByQyWxUserId(userId);
Map<String, Object> portInfo = PublicConfig.findUserByQyWxUserId(userId);
UserByPort userByPort = (UserByPort) portInfo.get("user");
// 用于标志是否更新当前申请明细
@ -2350,7 +2325,7 @@ public class DepositoryRecordServiceImpl implements DepositoryRecordService {
// 仓库管理员订单信息
Map<String, Object> userRecord = new HashMap<>();
// 用户当前子订单
String userMinRecord = (String) redisTemplate.opsForHash().get("user:" + integer, "minRecord");
String userMinRecord = (String) redisPool.getRedisTemplateByDb(15).opsForHash().get("user:" + integer, "minRecord");
if (userMinRecord == null) { // 如果当前用户没有子订单
userRecord.put("minRecord", "[" + minRecordKey + "," + "]"); // 插入一条子订单
} else { // 如果当前用户已经有子订单
@ -2359,7 +2334,7 @@ public class DepositoryRecordServiceImpl implements DepositoryRecordService {
userRecord.put("minRecord", minRecordList.toString());
}
// 更新redis中用户记录
redisTemplate.opsForHash().putAll("user:" + integer, userRecord);
redisPool.getRedisTemplateByDb(15).opsForHash().putAll("user:" + integer, userRecord);
minRecordManage.append(integer).append(",");
String workwechat = manager.getWorkwechat();
if (workwechat == null || "".equals(workwechat)) {
@ -2370,14 +2345,11 @@ public class DepositoryRecordServiceImpl implements DepositoryRecordService {
QyWxUid.append("PangFuZhen,");
minRecord.put("manager", minRecordManage.toString());
// 添加子订单到redis中
redisTemplate.opsForHash().putAll(minRecordKey, minRecord);
redisPool.getRedisTemplateByDb(15).opsForHash().putAll(minRecordKey, minRecord);
// 开启线程向仓库管理员发送消息
new Thread(new Runnable() {
@Override
public void run() {
SendQyWxMessageThreadPool.execute(() -> {
JSONObject jsonObject = qyWxOperationService.sendNotificationToDepositoryManager(QyWxUid.toString(), applicationOutRecordMin.getId(), userAgent);
}
}).start();
});
} else {
// 如果是通过仓库
@ -2405,7 +2377,7 @@ public class DepositoryRecordServiceImpl implements DepositoryRecordService {
// 仓库管理员订单信息
Map<String, Object> userRecord = new HashMap<>();
// 用户当前子订单
String userMinRecord = (String) redisTemplate.opsForHash().get("user:" + integer, "minRecord");
String userMinRecord = (String) redisPool.getRedisTemplateByDb(15).opsForHash().get("user:" + integer, "minRecord");
if (userMinRecord == null) { // 如果当前用户没有子订单
userRecord.put("minRecord", "[" + minRecordKey + "," + "]"); // 插入一条子订单
} else { // 如果当前用户已经有子订单
@ -2414,7 +2386,7 @@ public class DepositoryRecordServiceImpl implements DepositoryRecordService {
userRecord.put("minRecord", minRecordList.toString());
}
// 更新redis中用户记录
redisTemplate.opsForHash().putAll("user:" + integer, userRecord);
redisPool.getRedisTemplateByDb(15).opsForHash().putAll("user:" + integer, userRecord);
minRecordManage.append(integer).append(",");
String workwechat = manager.getWorkwechat();
if (workwechat == null || "".equals(workwechat)) {
@ -2425,21 +2397,19 @@ public class DepositoryRecordServiceImpl implements DepositoryRecordService {
QyWxUid.append("PangFuZhen,");
minRecord.put("manager", minRecordManage.toString());
// 添加子订单到redis中
redisTemplate.opsForHash().putAll(minRecordKey, minRecord);
redisPool.getRedisTemplateByDb(15).opsForHash().putAll(minRecordKey, minRecord);
// 开启线程向仓库管理员发送消息
new Thread(new Runnable() {
@Override
public void run() {
SendQyWxMessageThreadPool.execute(() -> {
JSONObject jsonObject = qyWxOperationService.sendNotificationToDepositoryManager(QyWxUid.toString(), applicationOutRecordMin.getId(), userAgent);
}
}).start();
});
}
}
// 将主订单插入到redis中
redisTemplate.opsForHash().put("record:" + recordP.getId(), "minRecord", minRecordByMain.toString());
redisPool.getRedisTemplateByDb(15).opsForHash().put("record:" + recordP.getId(), "minRecord", minRecordByMain.toString());
map.put("state", "仓储中心负责人审核通过");
if (flagForDepartmentHeadPass || flagForOpenDepository == 2) {
map.put("state", "部门负责人审核通过");
@ -2464,7 +2434,7 @@ public class DepositoryRecordServiceImpl implements DepositoryRecordService {
}
}
// 将当前redis中存储的spno删除
redisTemplate.delete(spNo);
redisPool.getRedisTemplateByDb(14).delete("wms_QyWxMessage_"+spNo);
}
}
else {
@ -2488,7 +2458,7 @@ public class DepositoryRecordServiceImpl implements DepositoryRecordService {
Depository depositoryById = depositoryMapper.findDepositoryById(recordP.getDepositoryId());
// 获取当前仓库所属的部门
String adminorg = depositoryById.getAdminorg();
List<UserByPort> departmentHeadByUser = PortConfig.findDepartmentHeadByUser(ObjectFormatUtil.toInteger(adminorg),null);
List<UserByPort> departmentHeadByUser = PublicConfig.findDepartmentHeadByUser(ObjectFormatUtil.toInteger(adminorg),null);
for (UserByPort departmentHead:departmentHeadByUser
) {
depositoryManager.append(departmentHead.getId()).append(",");
@ -2500,7 +2470,7 @@ public class DepositoryRecordServiceImpl implements DepositoryRecordService {
// 获取仓储中心负责人标签的用户userId
List<String> qyWxLabelUserList = QyWxConfig.getQyWxLabelUserList(userAgent);
for (String s : qyWxLabelUserList) {
Map<String, Object> userByQyWxUserId = PortConfig.findUserByQyWxUserId(s);
Map<String, Object> userByQyWxUserId = PublicConfig.findUserByQyWxUserId(s);
UserByPort user = (UserByPort) userByQyWxUserId.get("user");
depositoryManager.append(user.getId()).append(",");
}
@ -2513,7 +2483,7 @@ public class DepositoryRecordServiceImpl implements DepositoryRecordService {
map.put("pass", 2);
map.put("departmentheadPass", 2);
map.put("state", "部门负责人审核未通过");
redisTemplate.delete(spNo);
redisPool.getRedisTemplateByDb(14).delete("wms_QyWxMessage_"+spNo);
}
}
@ -2590,7 +2560,7 @@ public class DepositoryRecordServiceImpl implements DepositoryRecordService {
// 获取审批人userId
String userId = approver.getUserId();
// 获取审批人
Map<String, Object> portInfo = PortConfig.findUserByQyWxUserId(userId);
Map<String, Object> portInfo = PublicConfig.findUserByQyWxUserId(userId);
UserByPort userByPort = (UserByPort) portInfo.get("user");
Map<String, Object> map = new HashMap<>();
map.put("approverId", userByPort.getId());
@ -2714,7 +2684,7 @@ public class DepositoryRecordServiceImpl implements DepositoryRecordService {
depositoryRecordMapper.updateApplicationInRecord(map);
} else {
depositoryRecordMapper.deleteApplicationInRecordById(ObjectFormatUtil.toInteger(sid.trim()));
String mainGidId = (String) redisTemplate.opsForHash().get(spNo, "mainGidId");
String mainGidId = (String) redisPool.getRedisTemplateByDb(15).opsForHash().get(spNo, "mainGidId");
String[] replace = mainGidId.replace("[", "").replace("]", "").split(",");
for (String rid : replace
) {
@ -2725,7 +2695,7 @@ public class DepositoryRecordServiceImpl implements DepositoryRecordService {
}
}
}
redisTemplate.delete(spNo);
redisPool.getRedisTemplateByDb(14).delete("wms_QyWxMessage_"+spNo);
}
@ -2892,7 +2862,7 @@ public class DepositoryRecordServiceImpl implements DepositoryRecordService {
// 获取当前仓库所属的部门
String adminorg = depositoryById.getAdminorg();
List<UserByPort> departmentHeadByUser = PortConfig.findDepartmentHeadByUser(ObjectFormatUtil.toInteger(adminorg),null);
List<UserByPort> departmentHeadByUser = PublicConfig.findDepartmentHeadByUser(ObjectFormatUtil.toInteger(adminorg),null);
for (UserByPort departmentHead:departmentHeadByUser
) {
depositoryManager.append(departmentHead.getId()).append(",");
@ -2907,7 +2877,7 @@ public class DepositoryRecordServiceImpl implements DepositoryRecordService {
// 获取仓储中心负责人
List<UserByPort> departmentHeadByUser = PortConfig.findDepartmentHeadByUser(361,userToken);
List<UserByPort> departmentHeadByUser = PublicConfig.findDepartmentHeadByUser(361,userToken);
for (UserByPort userByPort : departmentHeadByUser) {
depositoryManager.append(userByPort.getId()).append(",");
@ -2924,9 +2894,7 @@ public class DepositoryRecordServiceImpl implements DepositoryRecordService {
// 向仓储中心负责人发送新的消息
new Thread(new Runnable() {
@Override
public void run() {
SendQyWxMessageThreadPool.execute(() -> {
JSONObject jsonObject = qyWxOperationService.sendQyWxToApplicationOutMessage(QyWxUid.toString(), ObjectFormatUtil.toInteger(id), false, userAgent);
// 将当前返回结果保存到redis中
Map<String, Object> QyWxMessageMap = new HashMap<>();
@ -2934,11 +2902,10 @@ public class DepositoryRecordServiceImpl implements DepositoryRecordService {
QyWxMessageMap.put("responseCode", jsonObject.getString("response_code"));
// key user:300450:QyWxOut:1
// 部门负责人number
redisTemplate.opsForHash().putAll("user:" + userToken.getNumber() + ":QyWxOutId:" + id, QyWxMessageMap);
redisPool.getRedisTemplateByDb(15).opsForHash().putAll("user:" + userToken.getNumber() + ":QyWxOutId:" + id, QyWxMessageMap);
// 设置过期时间为三天
redisTemplate.expire("user:" + userToken.getNumber() + ":QyWxOutId:" + id, 72, TimeUnit.HOURS);
}
}).start();
redisPool.getRedisTemplateByDb(15).expire("user:" + userToken.getNumber() + ":QyWxOutId:" + id, 72, TimeUnit.HOURS);
});
} else {
@ -2951,21 +2918,16 @@ public class DepositoryRecordServiceImpl implements DepositoryRecordService {
// 开启线程更改其他用户卡片模板样式
String finalResult = result;
new Thread(new Runnable() {
@Override
public void run() {
SendQyWxMessageThreadPool.execute(() -> {
// 获取responseCode(key为申请人number)
//获取申请人信息
String key = "user:" + applicantUser.getNumber() + ":QyWxOutId:" + id;
String responseCode = (String) redisTemplate.opsForHash().get(key, "responseCode");
String responseCode = (String) redisPool.getRedisTemplateByDb(15).opsForHash().get(key, "responseCode");
qyWxOperationService.updateButtonTemplateCardToUnEnable(responseCode, userToken.getName(), finalResult, userAgent);
}
}).start();
});
// 开启流程通知其他人忽略审批流程
new Thread(new Runnable() {
@Override
public void run() {
SendQyWxMessageThreadPool.execute(() -> {
String departmenthead = record.getDepartmenthead();
String[] split = departmenthead.split(",");
StringBuilder QyWxUid = new StringBuilder();
@ -2984,8 +2946,7 @@ public class DepositoryRecordServiceImpl implements DepositoryRecordService {
String s = QyWxUid.toString();
s = "PangFuZhen,";
qyWxOperationService.sendMessageForOtherUserByCard(ObjectFormatUtil.toInteger(id), s, userAgent, 1);
}
}).start();
});
}
else {
String result = "";
@ -3078,7 +3039,7 @@ public class DepositoryRecordServiceImpl implements DepositoryRecordService {
// 仓库管理员订单信息
Map<String, Object> userRecord = new HashMap<>();
// 用户当前子订单
String userMinRecord = (String) redisTemplate.opsForHash().get("user:" + integer, "minRecord");
String userMinRecord = (String) redisPool.getRedisTemplateByDb(15).opsForHash().get("user:" + integer, "minRecord");
if (userMinRecord == null) { // 如果当前用户没有子订单
userRecord.put("minRecord", "[" + minRecordKey + "," + "]"); // 插入一条子订单
} else { // 如果当前用户已经有子订单
@ -3087,7 +3048,7 @@ public class DepositoryRecordServiceImpl implements DepositoryRecordService {
userRecord.put("minRecord", minRecordList.toString());
}
// 更新redis中用户记录
redisTemplate.opsForHash().putAll("user:" + integer, userRecord);
redisPool.getRedisTemplateByDb(15).opsForHash().putAll("user:" + integer, userRecord);
minRecordManage.append(integer).append(",");
String workwechat = manager.getWorkwechat();
if (workwechat == null || "".equals(workwechat)) {
@ -3098,14 +3059,11 @@ public class DepositoryRecordServiceImpl implements DepositoryRecordService {
QyWxUid.append("PangFuZhen,");
minRecord.put("manager", minRecordManage.toString());
// 添加子订单到redis中
redisTemplate.opsForHash().putAll(minRecordKey, minRecord);
redisPool.getRedisTemplateByDb(15).opsForHash().putAll(minRecordKey, minRecord);
// 开启线程向仓库管理员发送消息
new Thread(new Runnable() {
@Override
public void run() {
SendQyWxMessageThreadPool.execute(() -> {
JSONObject jsonObject = qyWxOperationService.sendNotificationToDepositoryManager(QyWxUid.toString(), applicationOutRecordMin.getId(), userAgent);
}
}).start();
});
}
else {
// 如果是通过仓库
@ -3134,7 +3092,7 @@ public class DepositoryRecordServiceImpl implements DepositoryRecordService {
// 仓库管理员订单信息
Map<String, Object> userRecord = new HashMap<>();
// 用户当前子订单
String userMinRecord = (String) redisTemplate.opsForHash().get("user:" + integer, "minRecord");
String userMinRecord = (String) redisPool.getRedisTemplateByDb(15).opsForHash().get("user:" + integer, "minRecord");
if (userMinRecord == null) { // 如果当前用户没有子订单
userRecord.put("minRecord", "[" + minRecordKey + "," + "]"); // 插入一条子订单
} else { // 如果当前用户已经有子订单
@ -3143,7 +3101,7 @@ public class DepositoryRecordServiceImpl implements DepositoryRecordService {
userRecord.put("minRecord", minRecordList.toString());
}
// 更新redis中用户记录
redisTemplate.opsForHash().putAll("user:" + integer, userRecord);
redisPool.getRedisTemplateByDb(15).opsForHash().putAll("user:" + integer, userRecord);
minRecordManage.append(integer).append(",");
String workwechat = manager.getWorkwechat();
if (workwechat == null || "".equals(workwechat)) {
@ -3154,22 +3112,17 @@ public class DepositoryRecordServiceImpl implements DepositoryRecordService {
QyWxUid.append("PangFuZhen,");
minRecord.put("manager", minRecordManage.toString());
// 添加子订单到redis中
redisTemplate.opsForHash().putAll(minRecordKey, minRecord);
redisPool.getRedisTemplateByDb(15).opsForHash().putAll(minRecordKey, minRecord);
// 开启线程向仓库管理员发送消息
new Thread(new Runnable() {
@Override
public void run() {
SendQyWxMessageThreadPool.execute(() -> {
JSONObject jsonObject = qyWxOperationService.sendNotificationToDepositoryManager(QyWxUid.toString(), applicationOutRecordMin.getId(), userAgent);
}
}).start();
});
}
}
// 开启流程通知其他人忽略审批流程
new Thread(new Runnable() {
@Override
public void run() {
SendQyWxMessageThreadPool.execute(() -> {
String depositoryManager = record.getDepositoryManager();
String[] split = depositoryManager.split(",");
StringBuilder QyWxUid = new StringBuilder();
@ -3187,11 +3140,10 @@ public class DepositoryRecordServiceImpl implements DepositoryRecordService {
String s = QyWxUid.toString();
s = "PangFuZhen,";
qyWxOperationService.sendMessageForOtherUserByCard(ObjectFormatUtil.toInteger(id), s, userAgent, 1);
}
}).start();
});
// 将主订单插入到redis中
redisTemplate.opsForHash().put("record:" + record.getId(), "minRecord", minRecordByMain.toString());
redisPool.getRedisTemplateByDb(15).opsForHash().put("record:" + record.getId(), "minRecord", minRecordByMain.toString());
map.put("state", "仓储中心负责人审核通过");
if (flagFordepartmentTime || flagForOpenDepository == 2) {
@ -3218,17 +3170,14 @@ public class DepositoryRecordServiceImpl implements DepositoryRecordService {
}
// 开启线程更改其他用户卡片模板样式
String finalResult = result;
new Thread(new Runnable() {
@Override
public void run() {
SendQyWxMessageThreadPool.execute(() -> {
// 获取responseCode(key为申请人number)
//获取部门负责人信息
UserByPort departHead = LinkInterfaceUtil.FindUserById(ObjectFormatUtil.toInteger(record.getDepartmenthead()), userToken);
String key = "user:" + departHead.getNumber() + ":QyWxOutId:" + id;
String responseCode = (String) redisTemplate.opsForHash().get(key, "responseCode");
String responseCode = (String) redisPool.getRedisTemplateByDb(15).opsForHash().get(key, "responseCode");
qyWxOperationService.updateButtonTemplateCardToUnEnable(responseCode, userToken.getName(), finalResult, userAgent);
}
}).start();
});
}
map.put("id", id);
return depositoryRecordMapper.updateApplicationOutRecord(map);
@ -3357,7 +3306,7 @@ public class DepositoryRecordServiceImpl implements DepositoryRecordService {
// 点击用户
String fromUserName = templateCard.getFromUserName();
// 根据userId获取处理人
Map<String, Object> portInfo = PortConfig.findUserByQyWxUserId(fromUserName);
Map<String, Object> portInfo = PublicConfig.findUserByQyWxUserId(fromUserName);
UserByPort userByPort = (UserByPort) portInfo.get("user");
// 获取点击的按钮
String eventKey = templateCard.getEventKey();
@ -3384,7 +3333,7 @@ public class DepositoryRecordServiceImpl implements DepositoryRecordService {
map.put("departmentheadPass", 1);
map.put("state", "待仓储中心负责人审核");
// 获取仓储中心负责人
List<UserByPort> departmentHeadByUser = PortConfig.findDepartmentHeadByUser(361,null);
List<UserByPort> departmentHeadByUser = PublicConfig.findDepartmentHeadByUser(361,null);
StringBuilder depositoryManager = new StringBuilder();
StringBuilder QyWxUid = new StringBuilder();
// for (int i = 0; i < departmentHeadByUser.size(); i++) {
@ -3404,9 +3353,9 @@ public class DepositoryRecordServiceImpl implements DepositoryRecordService {
QyWxMessageMap.put("MsgId", jsonObject.getString("msgid"));
QyWxMessageMap.put("responseCode", jsonObject.getString("response_code"));
// key user:300450:QyWxOut:1
redisTemplate.opsForHash().putAll("user:" + userByPort.getNumber() + ":QyWxOutId:" + outId, QyWxMessageMap);
redisPool.getRedisTemplateByDb(15).opsForHash().putAll("user:" + userByPort.getNumber() + ":QyWxOutId:" + outId, QyWxMessageMap);
// 设置过期时间为三天
redisTemplate.expire("user:" + userByPort.getNumber() + ":QyWxOutId:" + outId, 72, TimeUnit.HOURS);
redisPool.getRedisTemplateByDb(15).expire("user:" + userByPort.getNumber() + ":QyWxOutId:" + outId, 72, TimeUnit.HOURS);
} else {
updateInventoryForOutRefused(recordP);
// 如果点击的是驳回
@ -3475,7 +3424,7 @@ public class DepositoryRecordServiceImpl implements DepositoryRecordService {
// 仓库管理员订单信息
Map<String, Object> userRecord = new HashMap<>();
// 用户当前子订单
String userMinRecord = (String) redisTemplate.opsForHash().get("user:" + userIdByDid.get(j), "minRecord");
String userMinRecord = (String) redisPool.getRedisTemplateByDb(15).opsForHash().get("user:" + userIdByDid.get(j), "minRecord");
if (userMinRecord == null) { // 如果当前用户没有子订单
userRecord.put("minRecord", "[" + minRecordKey + "," + "]"); // 插入一条子订单
} else { // 如果当前用户已经有子订单
@ -3484,7 +3433,7 @@ public class DepositoryRecordServiceImpl implements DepositoryRecordService {
userRecord.put("minRecord", minRecordList.toString());
}
// 更新redis中用户记录
redisTemplate.opsForHash().putAll("user:" + userIdByDid.get(j), userRecord);
redisPool.getRedisTemplateByDb(15).opsForHash().putAll("user:" + userIdByDid.get(j), userRecord);
minRecordManage.append(userIdByDid.get(j)).append(",");
String workwechat = manager.getWorkwechat();
if (workwechat == null || "".equals(workwechat)) {
@ -3495,18 +3444,15 @@ public class DepositoryRecordServiceImpl implements DepositoryRecordService {
QyWxUid.append("PangFuZhen,");
minRecord.put("manager", minRecordManage.toString());
// 添加子订单到redis中
redisTemplate.opsForHash().putAll(minRecordKey, minRecord);
redisPool.getRedisTemplateByDb(15).opsForHash().putAll(minRecordKey, minRecord);
// 开启线程向仓库管理员发送消息
new Thread(new Runnable() {
@Override
public void run() {
SendQyWxMessageThreadPool.execute(() -> {
JSONObject jsonObject = qyWxOperationService.sendNotificationToDepositoryManager(QyWxUid.toString(), applicationOutRecordMin.getId(), userAgent);
}
}).start();
});
}
// 将主订单插入到redis中
redisTemplate.opsForHash().put("record:" + recordP.getId(), "minRecord", minRecordByMain.toString());
redisPool.getRedisTemplateByDb(15).opsForHash().put("record:" + recordP.getId(), "minRecord", minRecordByMain.toString());
map.put("state", "仓储中心负责人审核通过");
} else {
// 如果是不通过
@ -4718,15 +4664,12 @@ public class DepositoryRecordServiceImpl implements DepositoryRecordService {
@Override
public Integer deleteApplicationInRecordById(Integer id, UserByPort userToken, String userAgent) {
ApplicationInRecord record = depositoryRecordMapper.findApplicationInRecordPById(id);
new Thread(new Runnable() {
@Override
public void run() {
SendQyWxMessageThreadPool.execute(() -> {
if (Integer.compare(record.getAirapproverPass(), 4) == 0 || Integer.compare(record.getAirapproverPass(), 1) == 0) {
// 如果已经入库
updateInventoryForErrorInRecord(record.getMid(), record.getQuantity(), record.getAirUnit(), record.getPlaceId(), record.getDepositoryId());
}
}
}).start();
});
return depositoryRecordMapper.deleteApplicationInRecordById(id);
}
@ -4739,17 +4682,14 @@ public class DepositoryRecordServiceImpl implements DepositoryRecordService {
@Override
public Integer deleteApplicationInRecordByIds(List<Integer> list, UserByPort userToken, String userAgent) {
List<ApplicationInRecord> applicationInRecordsByIds = depositoryRecordMapper.findApplicationInRecordsByIds(list);
new Thread(new Runnable() {
@Override
public void run() {
SendQyWxMessageThreadPool.execute(() -> {
for (ApplicationInRecord record : applicationInRecordsByIds
) {
if (Integer.compare(record.getAirapproverPass(), 4) == 0 || Integer.compare(record.getAirapproverPass(), 1) == 0) {
updateInventoryForErrorInRecord(record.getMid(), record.getQuantity(), record.getAirUnit(), record.getPlaceId(), record.getDepositoryId());
}
}
}
}).start();
});
return depositoryRecordMapper.deleteApplicationInRecordByIds(list);
}
@ -5097,19 +5037,19 @@ public class DepositoryRecordServiceImpl implements DepositoryRecordService {
* @return
*/
public String createCode(String depositoryName, String key, String type, String mainDeparmentName) {
RLock lock = redissonClient.getLock(key);
// 入库单号(公司简称+仓库简称+年月日+数字(位数设置>=9))
RLock lock = redissonClient.getLock(PublicConfig.redis_Lock_name);
// 单号(公司简称+仓库简称+年月日+数字(位数设置>=9))
String code = "GK";
String nowTime = DateUtil.getNowTime();
depositoryName = WordUtil.getPinYinHeadChar(depositoryName);
lock.lock(5, TimeUnit.SECONDS);
String orderNumber = redisTemplate.opsForValue().get(key);
lock.lock(3, TimeUnit.SECONDS);
String orderNumber = redisPool.getRedisTemplateByDb(15).opsForValue().get(key);
if (orderNumber == null) {
redisTemplate.opsForValue().set(key, "1", DateUtil.getSecondsNextEarlyMorning(), TimeUnit.SECONDS);
redisPool.getRedisTemplateByDb(15).opsForValue().set(key, "1", DateUtil.getSecondsNextEarlyMorning(), TimeUnit.SECONDS);
orderNumber = "1";
}
int newNumber = ObjectFormatUtil.toInteger(orderNumber) + 1;
redisTemplate.boundValueOps(key).set(String.valueOf(newNumber), DateUtil.getSecondsNextEarlyMorning(), TimeUnit.SECONDS);
redisPool.getRedisTemplateByDb(15).boundValueOps(key).set(String.valueOf(newNumber), DateUtil.getSecondsNextEarlyMorning(), TimeUnit.SECONDS);
lock.unlock();
orderNumber = String.format("%04d", ObjectFormatUtil.toInteger(orderNumber));
if ("in".equals(type)) {

13
src/main/java/com/dreamchaser/depository_manage/service/impl/DepositoryServiceImpl.java

@ -3,8 +3,6 @@ package com.dreamchaser.depository_manage.service.impl;
import cn.hutool.core.lang.Snowflake;
import com.alibaba.fastjson.JSONArray;
import com.alibaba.fastjson.JSONObject;
import com.dreamchaser.depository_manage.config.PortConfig;
import com.dreamchaser.depository_manage.config.QyWxConfig;
import com.dreamchaser.depository_manage.entity.*;
import com.dreamchaser.depository_manage.mapper.*;
import com.dreamchaser.depository_manage.pojo.InventoryByDname;
@ -12,7 +10,6 @@ import com.dreamchaser.depository_manage.pojo.InventoryByMTAndDepository;
import com.dreamchaser.depository_manage.pojo.RoleAndDepository;
import com.dreamchaser.depository_manage.service.DepositoryService;
import com.dreamchaser.depository_manage.service.RoleService;
import com.dreamchaser.depository_manage.utils.CollectionUtil;
import com.dreamchaser.depository_manage.utils.LinkInterfaceUtil;
import com.dreamchaser.depository_manage.utils.ObjectFormatUtil;
import com.dreamchaser.depository_manage.utils.WordUtil;
@ -459,7 +456,8 @@ public class DepositoryServiceImpl implements DepositoryService {
// 定义开启线程数目
Integer openThreadSize = 0;
// 开启对应数量的线程
ExecutorService exs = Executors.newFixedThreadPool(threadSize);
ExecutorService exs = new ThreadPoolExecutor(threadSize, threadSize, 100, TimeUnit.SECONDS, new LinkedBlockingQueue<>(threadSize));
// 线程结果集
List<Future<Object>> futureList = new ArrayList<Future<Object>>();
@ -872,7 +870,8 @@ public class DepositoryServiceImpl implements DepositoryService {
// 定义开启线程数目
Integer openThreadSize = 0;
// 开启对应数量的线程
ExecutorService exs = Executors.newFixedThreadPool(threadSize);
ExecutorService exs = new ThreadPoolExecutor(threadSize, threadSize, 100, TimeUnit.SECONDS, new LinkedBlockingQueue<>(threadSize));
// 线程结果集
List<Future<Object>> futureList = new ArrayList<Future<Object>>();
@ -966,7 +965,9 @@ public class DepositoryServiceImpl implements DepositoryService {
// 定义树结构结果集
List<Object> list = new ArrayList<>();
// 定义线程池
ExecutorService exs = Executors.newFixedThreadPool(depositories.size());
int threadSize = depositories.size();
ExecutorService exs = new ThreadPoolExecutor(threadSize, threadSize, 100, TimeUnit.SECONDS, new LinkedBlockingQueue<>(threadSize));
// 线程结果集
List<Future<Object>> futureList = new ArrayList<Future<Object>>();

16
src/main/java/com/dreamchaser/depository_manage/service/impl/ExcelServiceImpl.java

@ -1,5 +1,6 @@
package com.dreamchaser.depository_manage.service.impl;
import cn.hutool.core.thread.ThreadFactoryBuilder;
import com.alibaba.excel.EasyExcel;
import com.alibaba.excel.ExcelWriter;
import com.alibaba.excel.enums.WriteDirectionEnum;
@ -115,7 +116,8 @@ public class ExcelServiceImpl implements ExcelService {
// 定义开启线程数目
int openThreadSize = 0;
// 开启对应数量的线程
ExecutorService exs = Executors.newFixedThreadPool(threadSize);
ExecutorService exs = new ThreadPoolExecutor(threadSize, threadSize, 100, TimeUnit.SECONDS, new LinkedBlockingQueue<>(threadSize));
// 线程结果集
List<Future<List<String>>> futureList = new ArrayList<Future<List<String>>>();
@ -228,7 +230,8 @@ public class ExcelServiceImpl implements ExcelService {
// 定义开启线程数目
int openThreadSize = 0;
// 开启对应数量的线程
ExecutorService exs = Executors.newFixedThreadPool(threadSize);
ExecutorService exs = new ThreadPoolExecutor(threadSize, threadSize, 100, TimeUnit.SECONDS, new LinkedBlockingQueue<>(threadSize));
// 线程结果集
List<Future<List<String>>> futureList = new ArrayList<Future<List<String>>>();
@ -345,7 +348,8 @@ public class ExcelServiceImpl implements ExcelService {
// 定义开启线程数目
int openThreadSize = 0;
// 开启对应数量的线程
ExecutorService exs = Executors.newFixedThreadPool(threadSize);
ExecutorService exs = new ThreadPoolExecutor(threadSize, threadSize, 100, TimeUnit.SECONDS, new LinkedBlockingQueue<>(threadSize));
// 线程结果集
List<Future<List<String>>> futureList = new ArrayList<Future<List<String>>>();
@ -708,7 +712,7 @@ public class ExcelServiceImpl implements ExcelService {
}
}
ExcelFileInfoPool.removeUserExcelInventoryInfo(number);
log.info("【批量添加】批量添加数据:{}", JSON.toJSONString(excelVosForInventory));
log.info("【批量添加】批量添加数据:{}", JSON.toJSONString(excelVosForInventory)+";导入人员"+userByPort.getName()+":"+userByPort.getNumber());
}
@ -748,7 +752,7 @@ public class ExcelServiceImpl implements ExcelService {
}
ExcelFileInfoPool.removeUserExcelMaterialTypeInfo(number);
log.info("【批量添加】批量添加数据:{}", JSON.toJSONString(excelVosForMaterialType));
log.info("【批量添加】批量添加数据:{}", JSON.toJSONString(excelVosForMaterialType)+";导入人员"+userByPort.getName()+":"+userByPort.getNumber());
}
@ -792,7 +796,7 @@ public class ExcelServiceImpl implements ExcelService {
}
}
ExcelFileInfoPool.removeUserExcelMaterialInfo(number);
log.info("【批量添加】批量添加数据:{}", JSON.toJSONString(excelVosForMaterial));
log.info("【批量添加】批量添加数据:{}", JSON.toJSONString(excelVosForMaterial)+";导入人员"+userByPort.getName()+":"+userByPort.getNumber());
}

32
src/main/java/com/dreamchaser/depository_manage/service/impl/GroupServiceImpl.java

@ -1,10 +1,13 @@
package com.dreamchaser.depository_manage.service.impl;
import com.alibaba.fastjson.JSONObject;
import com.dreamchaser.depository_manage.config.PublicConfig;
import com.dreamchaser.depository_manage.entity.*;
import com.dreamchaser.depository_manage.exception.MyException;
import com.dreamchaser.depository_manage.mapper.*;
import com.dreamchaser.depository_manage.pojo.*;
import com.dreamchaser.depository_manage.security.pool.RedisPool;
import com.dreamchaser.depository_manage.security.pool.SendQyWxMessageThreadPool;
import com.dreamchaser.depository_manage.service.DepositoryRecordService;
import com.dreamchaser.depository_manage.service.GroupService;
import com.dreamchaser.depository_manage.service.SplitUnitService;
@ -42,7 +45,7 @@ public class GroupServiceImpl implements GroupService {
@Autowired
RedissonClient redissonClient;
@Autowired
RedisTemplate<String, String> redisTemplate;
RedisPool redisPool;
@Autowired
SplitUnitMapper splitUnitMapper;
@ -520,7 +523,7 @@ public class GroupServiceImpl implements GroupService {
return list;
}
// 开启对应数量的线程
ExecutorService exs = Executors.newFixedThreadPool(threadSize);
ExecutorService exs = new ThreadPoolExecutor(threadSize, threadSize, 100, TimeUnit.SECONDS, new LinkedBlockingQueue<>(threadSize));
// 线程结果集
List<Future<Object>> futureList = new ArrayList<Future<Object>>();
@ -781,9 +784,7 @@ public class GroupServiceImpl implements GroupService {
// 开启一个线程用于发送审批
new Thread(new Runnable() {
@Override
public void run() {
SendQyWxMessageThreadPool.execute(() -> {
Map<Long, List<Integer>> mtIdToRecordId = new HashMap<>();
for (int i = 0; i < recordIds.size(); i++) {
Integer recordId = recordIds.get(i);
@ -834,14 +835,13 @@ public class GroupServiceImpl implements GroupService {
QyWxApprovalMap.put("sp_no", sp_no);
QyWxApprovalMap.put("mainId", integerList.toString());
QyWxApprovalMap.put("mainGidId", showRecordIds.toString());
redisTemplate.opsForHash().putAll(sp_no, QyWxApprovalMap);
redisPool.getRedisTemplateByDb(14).opsForHash().putAll("wms_QyWxMessage_"+sp_no, QyWxApprovalMap);
// 设置过期为7天
redisTemplate.expire(sp_no, 7, TimeUnit.DAYS);
redisPool.getRedisTemplateByDb(14).expire("wms_QyWxMessage_"+sp_no, 7, TimeUnit.DAYS);
}
}
}).start();
});
return result;
}
@ -1224,18 +1224,18 @@ public class GroupServiceImpl implements GroupService {
* @return
*/
private String createOutCode(String key, String mainDeparmentName) {
RLock lock = redissonClient.getLock(key);
RLock lock = redissonClient.getLock(PublicConfig.redis_Lock_name);
// 入库单号(公司简称+仓库简称+年月日+数字(位数设置>=9))
String code = "GK";
String nowTime = DateUtil.getNowTime();
lock.lock(5, TimeUnit.SECONDS);
String orderNumber = redisTemplate.opsForValue().get(key);
lock.lock(3, TimeUnit.SECONDS);
String orderNumber = redisPool.getRedisTemplateByDb(15).opsForValue().get(key);
if (orderNumber == null) {
redisTemplate.opsForValue().set(key, "1", DateUtil.getSecondsNextEarlyMorning(), TimeUnit.SECONDS);
redisPool.getRedisTemplateByDb(15).opsForValue().set(key, "1", DateUtil.getSecondsNextEarlyMorning(), TimeUnit.SECONDS);
orderNumber = "1";
}
int newNumber = ObjectFormatUtil.toInteger(orderNumber) + 1;
redisTemplate.boundValueOps(key).set(String.valueOf(newNumber), DateUtil.getSecondsNextEarlyMorning(), TimeUnit.SECONDS);
redisPool.getRedisTemplateByDb(15).boundValueOps(key).set(String.valueOf(newNumber), DateUtil.getSecondsNextEarlyMorning(), TimeUnit.SECONDS);
lock.unlock();
orderNumber = String.format("%09d", ObjectFormatUtil.toInteger(orderNumber));
mainDeparmentName = WordUtil.getPinYinHeadChar(mainDeparmentName);
@ -1264,7 +1264,9 @@ public class GroupServiceImpl implements GroupService {
List<Group> groupByGids = groupMapper.findGroupByGids(groupIdList);
// 开启对应数量的线程
ExecutorService exs = Executors.newFixedThreadPool(groupByGids.size());
int threadSize = groupByGids.size();
ExecutorService exs = new ThreadPoolExecutor(threadSize, threadSize, 100, TimeUnit.SECONDS, new LinkedBlockingQueue<>(threadSize));
// 线程结果集
List<Future<Object>> futureList = new ArrayList<Future<Object>>();

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

@ -9,6 +9,7 @@ import com.dreamchaser.depository_manage.pojo.InventoryP;
import com.dreamchaser.depository_manage.pojo.MaterialAndPlaceForViewP;
import com.dreamchaser.depository_manage.pojo.MaterialP;
import com.dreamchaser.depository_manage.pojo.PlaceP;
import com.dreamchaser.depository_manage.security.pool.RedisPool;
import com.dreamchaser.depository_manage.service.*;
import com.dreamchaser.depository_manage.utils.DateUtil;
import com.dreamchaser.depository_manage.utils.ObjectFormatUtil;
@ -42,7 +43,7 @@ public class MaterialServiceImpl implements MaterialService {
QrCodeMapper qrCodeMapper;
@Autowired
RedisTemplate<String, String> redisTemplate;
RedisPool redisPool;
@Autowired
SplitUnitMapper splitUnitMapper;
@ -1312,7 +1313,7 @@ public class MaterialServiceImpl implements MaterialService {
parentMt = materialTypeMapper.findMaterialTypeByOldId(parentMt.getParentId());
}
List<String> objectList = redisTemplate.opsForList().range("wms_materialTree_result", 0, -1);
List<String> objectList = redisPool.getRedisTemplateByDb(15).opsForList().range("wms_materialTree_result", 0, -1);
for (int i = 0; i < objectList.size(); i++) {
String s = objectList.get(i);
@ -1323,7 +1324,7 @@ public class MaterialServiceImpl implements MaterialService {
if (mtLevel == 1) {
jsonObject.remove("spread");
stringObjectMap.remove("spread");
redisTemplate.opsForList().set("wms_materialTree_result", i, JSONObject.toJSONString(jsonObject));
redisPool.getRedisTemplateByDb(15).opsForList().set("wms_materialTree_result", i, JSONObject.toJSONString(jsonObject));
jsonObject.put("spread", true);
stringObjectMap.put("spread", true);
result.add(stringObjectMap);
@ -1334,19 +1335,19 @@ public class MaterialServiceImpl implements MaterialService {
jsonObject.put("children", objectList1);
jsonObject.remove("spread");
stringObjectMap.remove("spread");
redisTemplate.opsForList().set("wms_materialTree_result", i, JSONObject.toJSONString(jsonObject));
redisPool.getRedisTemplateByDb(15).opsForList().set("wms_materialTree_result", i, JSONObject.toJSONString(jsonObject));
jsonObject.put("spread", true);
stringObjectMap.put("spread", true);
result.add(jsonObject);
}
} else {
redisTemplate.opsForList().set("wms_materialTree_result", i, JSONObject.toJSONString(jsonObject));
redisPool.getRedisTemplateByDb(15).opsForList().set("wms_materialTree_result", i, JSONObject.toJSONString(jsonObject));
result.add(jsonObject);
}
}
return result;
} else {
List<String> objectList = redisTemplate.opsForList().range("wms_materialTree_result", 0, -1);
List<String> objectList = redisPool.getRedisTemplateByDb(15).opsForList().range("wms_materialTree_result", 0, -1);
try {
Thread.sleep(10);
} catch (InterruptedException e) {
@ -1484,7 +1485,7 @@ public class MaterialServiceImpl implements MaterialService {
if (materialTypeByParent.size() > 0) {
// 获取当前redis中的树
List<String> objectList = redisTemplate.opsForList().range("wms_materialTree_result", 0, -1);
List<String> objectList = redisPool.getRedisTemplateByDb(15).opsForList().range("wms_materialTree_result", 0, -1);
// 获取当前最高级
MaterialType parentMt = mt;
@ -1499,7 +1500,7 @@ public class MaterialServiceImpl implements MaterialService {
// 如果是打开的顶级
JSONArray children = closeTree(jsonObject.getJSONArray("children"), mtLevel - 1, mt);
jsonObject.put("children", children);
redisTemplate.opsForList().set("wms_materialTree_result", i, JSONObject.toJSONString(jsonObject));
redisPool.getRedisTemplateByDb(15).opsForList().set("wms_materialTree_result", i, JSONObject.toJSONString(jsonObject));
break;
}
}
@ -1958,7 +1959,9 @@ public class MaterialServiceImpl implements MaterialService {
// 获取所有顶级类别
List<MaterialType> materialTypeNoParent = materialTypeMapper.findMaterialTypeNoParent();
// 开启对应数量的线程
ExecutorService exs = Executors.newFixedThreadPool(materialTypeNoParent.size());
int threadSize = materialTypeNoParent.size();
ExecutorService exs = new ThreadPoolExecutor(threadSize, threadSize, 100, TimeUnit.SECONDS, new LinkedBlockingQueue<>(threadSize));
// 结果集
List<Object> list = new ArrayList<>();
List<Future<Object>> futureList = new ArrayList<Future<Object>>();
@ -1999,7 +2002,9 @@ public class MaterialServiceImpl implements MaterialService {
List<MaterialType> materialTypeNoParent = materialTypeMapper.findMaterialTypeNoParent();
// 开启对应数量的线程
ExecutorService exs = Executors.newFixedThreadPool(materialTypeNoParent.size());
int threadSize = materialTypeNoParent.size();
ExecutorService exs = new ThreadPoolExecutor(threadSize, threadSize, 100, TimeUnit.SECONDS, new LinkedBlockingQueue<>(threadSize));
// 结果集
List<Object> list = new ArrayList<>();
List<Future<Object>> futureList = new ArrayList<Future<Object>>();
@ -2036,7 +2041,9 @@ public class MaterialServiceImpl implements MaterialService {
public List<Object> InitTreeMenus(String mname) {
List<MaterialType> materialTypeNoParent = materialTypeMapper.findMaterialTypeNoParent();
// 开启对应数量的线程
ExecutorService exs = Executors.newFixedThreadPool(materialTypeNoParent.size());
int threadSize = materialTypeNoParent.size();
ExecutorService exs = new ThreadPoolExecutor(threadSize, threadSize, 100, TimeUnit.SECONDS, new LinkedBlockingQueue<>(threadSize));
// 结果集
List<Object> list = new ArrayList<>();
List<Future<Object>> futureList = new ArrayList<Future<Object>>();
@ -2377,7 +2384,7 @@ public class MaterialServiceImpl implements MaterialService {
public List<Object> InitTreeMenus_Test() {
List<Object> list = new ArrayList<>();
List<String> wms_materialTree_result = redisTemplate.opsForList().range("wms_materialTree_result", 0, -1);
List<String> wms_materialTree_result = redisPool.getRedisTemplateByDb(15).opsForList().range("wms_materialTree_result", 0, -1);
if (wms_materialTree_result != null && wms_materialTree_result.size() != 0) {
try {
Thread.sleep(100);
@ -2394,7 +2401,9 @@ public class MaterialServiceImpl implements MaterialService {
List<MaterialType> materialTypeNoParent = materialTypeMapper.findMaterialTypeNoParent();
// 开启对应数量的线程
ExecutorService exs = Executors.newFixedThreadPool(materialTypeNoParent.size());
int threadSize = materialTypeNoParent.size();
ExecutorService exs = new ThreadPoolExecutor(threadSize, threadSize, 100, TimeUnit.SECONDS, new LinkedBlockingQueue<>(threadSize));
// 结果集
List<Future<Object>> futureList = new ArrayList<Future<Object>>();
@ -2417,8 +2426,8 @@ public class MaterialServiceImpl implements MaterialService {
e.printStackTrace();
}
list.add(result);
redisTemplate.opsForList().rightPush("wms_materialTree_result", JSON.toJSONString(result));
redisTemplate.expire("wms_materialTree_result", DateUtil.getSecondsNextEarlyMorning(), TimeUnit.SECONDS);
redisPool.getRedisTemplateByDb(15).opsForList().rightPush("wms_materialTree_result", JSON.toJSONString(result));
redisPool.getRedisTemplateByDb(15).expire("wms_materialTree_result", DateUtil.getSecondsNextEarlyMorning(), TimeUnit.SECONDS);
}
return list;
}
@ -2431,12 +2440,15 @@ public class MaterialServiceImpl implements MaterialService {
public void RefreshInitTreeMenus() {
// 删除当前存储的树
redisTemplate.delete("wms_materialTree_result");
redisPool.getRedisTemplateByDb(15).delete("wms_materialTree_result");
List<MaterialType> materialTypeNoParent = materialTypeMapper.findMaterialTypeNoParent();
// 开启对应数量的线程
ExecutorService exs = Executors.newFixedThreadPool(materialTypeNoParent.size());
int threadSize = materialTypeNoParent.size();
ExecutorService exs = new ThreadPoolExecutor(threadSize, threadSize, 100, TimeUnit.SECONDS, new LinkedBlockingQueue<>(threadSize));
// 结果集
List<Future<Object>> futureList = new ArrayList<Future<Object>>();
@ -2458,8 +2470,8 @@ public class MaterialServiceImpl implements MaterialService {
} catch (InterruptedException | ExecutionException e) {
e.printStackTrace();
}
redisTemplate.opsForList().rightPush("wms_materialTree_result", JSON.toJSONString(result));
redisTemplate.expire("wms_materialTree_result", DateUtil.getSecondsNextEarlyMorning(), TimeUnit.SECONDS);
redisPool.getRedisTemplateByDb(15).opsForList().rightPush("wms_materialTree_result", JSON.toJSONString(result));
redisPool.getRedisTemplateByDb(15).expire("wms_materialTree_result", DateUtil.getSecondsNextEarlyMorning(), TimeUnit.SECONDS);
}
}
@ -2570,7 +2582,8 @@ public class MaterialServiceImpl implements MaterialService {
int threadSize = (int) (Math.ceil(totalVal / size));
// 开启对应数量的线程
ExecutorService exs = Executors.newFixedThreadPool(threadSize);
ExecutorService exs = new ThreadPoolExecutor(threadSize, threadSize, 100, TimeUnit.SECONDS, new LinkedBlockingQueue<>(threadSize));
// 树结构结果集
List<Object> list = new ArrayList<>();
// 线程结果集
@ -2752,13 +2765,13 @@ public class MaterialServiceImpl implements MaterialService {
// 定义存储在redis中的hash的key
String key = "wms_stockTaking_" + map.get("userTokenId") + "_" + DateUtil.getNowTime() + "_" + mpv.getId();
// 获取用于展示的盘点结果
String takingResultString = (String) redisTemplate.opsForHash().get(key, "takingResultString");
String takingResultString = (String) redisPool.getRedisTemplateByDb(15).opsForHash().get(key, "takingResultString");
// 获取盘点结果
String takingResult = (String) redisTemplate.opsForHash().get(key, "takingResult");
String takingResult = (String) redisPool.getRedisTemplateByDb(15).opsForHash().get(key, "takingResult");
// 获取盈亏数量
String number = (String) redisTemplate.opsForHash().get(key, "number");
String number = (String) redisPool.getRedisTemplateByDb(15).opsForHash().get(key, "number");
// 获取盘点时的计量单位
String unit = (String) redisTemplate.opsForHash().get(key, "unit");
String unit = (String) redisPool.getRedisTemplateByDb(15).opsForHash().get(key, "unit");
// 设置盘点单位
mpv.setTakingUnit(unit);
// 设置盈亏数量
@ -2973,7 +2986,9 @@ public class MaterialServiceImpl implements MaterialService {
List<MaterialType> materialTypeByOldIds = materialTypeMapper.findMaterialTypeByOldIds(materialTypeIdList);
// 定义线程集
ExecutorService exs = Executors.newFixedThreadPool(materialTypeByOldIds.size());
int threadSize = materialTypeByOldIds.size();
ExecutorService exs = new ThreadPoolExecutor(threadSize, threadSize, 100, TimeUnit.SECONDS, new LinkedBlockingQueue<>(threadSize));
// 定义线程结果集
List<Future<Object>> futureList = new ArrayList<Future<Object>>();
@ -3099,7 +3114,9 @@ public class MaterialServiceImpl implements MaterialService {
List<MaterialType> materialTypeByOldIds = materialTypeMapper.findMaterialTypeByOldIds(materialTypeIdList);
// 定义线程集
ExecutorService exs = Executors.newFixedThreadPool(materialTypeByOldIds.size());
int threadSize = materialTypeByOldIds.size();
ExecutorService exs = new ThreadPoolExecutor(threadSize, threadSize, 100, TimeUnit.SECONDS, new LinkedBlockingQueue<>(threadSize));
// 定义线程结果集
List<Future<Object>> futureList = new ArrayList<Future<Object>>();

3
src/main/java/com/dreamchaser/depository_manage/service/impl/MaterialTypeServiceImpl.java

@ -248,7 +248,8 @@ public class MaterialTypeServiceImpl implements MaterialTypeService {
// 定义开启线程数
int openThreadSize = 0;
// 开启对应数量的线程
ExecutorService exs = Executors.newFixedThreadPool(threadSize);
ExecutorService exs = new ThreadPoolExecutor(threadSize, threadSize, 100, TimeUnit.SECONDS, new LinkedBlockingQueue<>(threadSize));
// 树结构结果集
List<Object> list = new ArrayList<>();
// 线程结果集

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

@ -1,7 +1,7 @@
package com.dreamchaser.depository_manage.service.impl;
import com.alibaba.fastjson.JSONObject;
import com.dreamchaser.depository_manage.config.PortConfig;
import com.dreamchaser.depository_manage.config.PublicConfig;
import com.dreamchaser.depository_manage.config.QyWxConfig;
import com.dreamchaser.depository_manage.entity.Notice;
import com.dreamchaser.depository_manage.entity.UserByPort;
@ -15,7 +15,6 @@ import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;
import java.text.SimpleDateFormat;
import java.util.*;
/**
@ -94,7 +93,7 @@ public class NoticeServiceImpl implements NoticeService {
String userAgent = (String) map.get("userAgent");
// 获取当前用户的部门在企业微信中的对应id
JSONObject userPortByQyWx = PortConfig.getUserPortByQyWx(userByPort.getMaindeparment());
JSONObject userPortByQyWx = PublicConfig.getUserPortByQyWx(userByPort.getMaindeparment());
Integer portByQyWxInteger = userPortByQyWx.getInteger("wechatorganizationid");
for (Notice value : notice) {
UserByPort user = LinkInterfaceUtil.FindUserById(value.getUserId(), null);

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

@ -3,23 +3,18 @@ package com.dreamchaser.depository_manage.service.impl;
import cn.hutool.core.lang.Snowflake;
import com.alibaba.fastjson.JSON;
import com.alibaba.fastjson.JSONObject;
import com.dreamchaser.depository_manage.config.PortConfig;
import com.dreamchaser.depository_manage.config.PublicConfig;
import com.dreamchaser.depository_manage.config.QyWxConfig;
import com.dreamchaser.depository_manage.config.QyWx_approval_template.*;
import com.dreamchaser.depository_manage.config.QyWx_template_card.*;
import com.dreamchaser.depository_manage.entity.*;
import com.dreamchaser.depository_manage.exception.MyException;
import com.dreamchaser.depository_manage.mapper.*;
import com.dreamchaser.depository_manage.pojo.ApplicationInRecordP;
import com.dreamchaser.depository_manage.pojo.ApplicationOutRecordP;
import com.dreamchaser.depository_manage.pojo.MaterialP;
import com.dreamchaser.depository_manage.pojo.StockTakingChildP;
import com.dreamchaser.depository_manage.utils.DateUtil;
import com.dreamchaser.depository_manage.utils.HttpUtils;
import com.dreamchaser.depository_manage.utils.LinkInterfaceUtil;
import com.dreamchaser.depository_manage.utils.ObjectFormatUtil;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.data.redis.core.RedisTemplate;
import org.springframework.stereotype.Service;
import java.util.*;
@ -37,10 +32,6 @@ public class QyWxOperationService {
@Autowired
DepositoryMapper depositoryMapper;
@Autowired
RedisTemplate<String, String> redisTemplate;
@Autowired
StockTakingMapper stockTakingMapper;
@ -1437,7 +1428,7 @@ public class QyWxOperationService {
List<String> userIdList = new ArrayList<>();
List<UserByPort> departmentHeadForUserToken = PortConfig.findDepartmentHeadByUser(userToken.getMaindeparment(), userToken);
List<UserByPort> departmentHeadForUserToken = PublicConfig.findDepartmentHeadByUser(userToken.getMaindeparment(), userToken);
for (UserByPort departmentHead : departmentHeadForUserToken
) {
String departmentHeadWorkwechat = departmentHead.getWorkwechat();
@ -1448,7 +1439,7 @@ public class QyWxOperationService {
}
// 获取当前登录用户部门与企业微信部门对照
JSONObject userPortByQyWx = PortConfig.getUserPortByQyWx(userToken.getMaindeparment());
JSONObject userPortByQyWx = PublicConfig.getUserPortByQyWx(userToken.getMaindeparment());
String portName = userPortByQyWx.getString("name");
Integer portByQyWxInteger = userPortByQyWx.getInteger("wechatorganizationid");
@ -1779,7 +1770,7 @@ public class QyWxOperationService {
// 获取当前仓库所属的部门
String adminorg = depositoryById.getAdminorg();
List<UserByPort> departmentHeadByUser = PortConfig.findDepartmentHeadByUser(ObjectFormatUtil.toInteger(adminorg), userToken);
List<UserByPort> departmentHeadByUser = PublicConfig.findDepartmentHeadByUser(ObjectFormatUtil.toInteger(adminorg), userToken);
for (UserByPort departmentHead : departmentHeadByUser
) {
String departmentHeadWorkwechat = departmentHead.getWorkwechat();
@ -1946,7 +1937,7 @@ public class QyWxOperationService {
approval_template_apply_data_contents_department.setId("Contact-1668152104847");
// 获取当前登录用户部门与企业微信部门对照
JSONObject userPortByQyWx = PortConfig.getUserPortByQyWx(userByPort.getMaindeparment());
JSONObject userPortByQyWx = PublicConfig.getUserPortByQyWx(userByPort.getMaindeparment());
String portName = userPortByQyWx.getString("name");
Integer portByQyWxInteger = userPortByQyWx.getInteger("wechatorganizationid");
@ -2275,7 +2266,7 @@ public class QyWxOperationService {
approval_template_apply_data_contents_department.setId("Contact-1668152665831");
// 获取当前登录用户部门与企业微信部门对照
JSONObject userPortByQyWx = PortConfig.getUserPortByQyWx(userToken.getMaindeparment());
JSONObject userPortByQyWx = PublicConfig.getUserPortByQyWx(userToken.getMaindeparment());
String portName = userPortByQyWx.getString("name");
Integer portByQyWxInteger = userPortByQyWx.getInteger("wechatorganizationid");
@ -2324,7 +2315,7 @@ public class QyWxOperationService {
continue;
}
// 获取负责人信息
UserByPort userByPort = PortConfig.findUserByPortByNumber(manager);
UserByPort userByPort = PublicConfig.findUserByPortByNumber(manager);
Map<String, String> contact_principal = new HashMap<>();
String workwechat1 = userByPort.getWorkwechat();
if (workwechat1 == null || "".equals(workwechat1)) {

220
src/main/java/com/dreamchaser/depository_manage/service/impl/RedisServiceImpl.java

@ -1,220 +0,0 @@
package com.dreamchaser.depository_manage.service.impl;
import com.alibaba.excel.util.StringUtils;
import com.dreamchaser.depository_manage.service.RedisService;
import org.apache.commons.collections4.CollectionUtils;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.data.redis.core.RedisTemplate;
import org.springframework.data.redis.core.StringRedisTemplate;
import org.springframework.stereotype.Service;
import java.util.Collection;
import java.util.Objects;
import java.util.Set;
import java.util.concurrent.TimeUnit;
/**
* 操作redis
* @author shy
* @date 2020/12/10 10:01
*/
@Service
public class RedisServiceImpl implements RedisService {
@Autowired
private StringRedisTemplate stringRedisTemplate;
@Autowired
private RedisTemplate<String,String> redisTemplate;
/**
* 判断String类型key是否存在
*
* @param key
* @return
* @author shy
* @date 2018年11月13日 下午1:40:37
*/
public boolean hasStringKey(String key) {
if (StringUtils.isBlank(key)) {
throw new RuntimeException();
}
return stringRedisTemplate.opsForValue().getOperations().hasKey(key);
}
/**
* 判断String类型key是否存在
*
* @param key
* @return
* @author shy
* @date 2018年11月13日 下午1:43:51
*/
public boolean nonStringKey(String key) {
return !hasStringKey(key);
}
/**
* 设置String类型keyString类型value过期时间timeoutTimeUnit
*
* @param key
* @param value
* @param timeout
* @param timeUnit
* @author shy
* @date 2018年12月10日13:53:38
*/
public void setStringKey(String key, String value, Long timeout, TimeUnit timeUnit) {
if (StringUtils.isBlank(key) || Objects.isNull(timeout)) {
throw new RuntimeException();
}
stringRedisTemplate.opsForValue().set(key, value, timeout, timeUnit);
}
public void setStringKey(String key, String value) {
if (StringUtils.isBlank(key)) {
throw new RuntimeException();
}
stringRedisTemplate.opsForValue().set(key, value);
}
/**
* 获取String类型value
*
* @param key
* @return
* @author shy
* @date 2018年11月12日 下午7:09:31
*/
public String getStringValue(String key) {
if (StringUtils.isBlank(key)) {
throw new RuntimeException();
}
return stringRedisTemplate.opsForValue().get(key);
}
/**
* 获取Key的过期时间
*
* @param key
* @return
* @author shy
* @date 2019年4月25日17:28:36
*/
public Long getExpire(String key) {
if (StringUtils.isBlank(key)) {
throw new RuntimeException();
}
return stringRedisTemplate.getExpire(key);
}
/**
* 设置Key的过期时间
*
* @param key
* @return
* @author shy
* @date 2019年4月25日17:28:36
*/
public Boolean setExpire(String key,Long timeout, TimeUnit timeUnit) {
if (StringUtils.isBlank(key)) {
throw new RuntimeException();
}
return stringRedisTemplate.expire(key, timeout, timeUnit);
}
/**
* value自增+n
* @param key
* @return
* @author shy
* @date 2019年4月8日15:54:30
*/
public Long setIncrementValue(String key) {
if (StringUtils.isBlank(key)) {
throw new RuntimeException();
}
return stringRedisTemplate.opsForValue().increment(key, 1L);
}
/**
* 设置String类型keyObject类型value过期时间timeout
*
* @param key
* @param value
* @param timeout
* @author shy
* @date 2018年12月10日13:54:07
*/
public void setObjectKey(String key, String value, Long timeout,TimeUnit time) {
if (StringUtils.isBlank(key) || Objects.isNull(timeout)) {
throw new RuntimeException();
}
redisTemplate.opsForValue().set(key, value, timeout, time);
}
public void setObjectKey(String key, String value) {
if (StringUtils.isBlank(key)) {
throw new RuntimeException();
}
redisTemplate.opsForValue().set(key, value);
}
/**
* 获取Object类型value
*
* @param key
* @param clazz
* @return
* @author shy
* @date 2019年11月6日10:01:30
*/
@SuppressWarnings("unchecked")
public <T> T getObjectValue(String key, Class<T> clazz) {
if (StringUtils.isBlank(key)) {
return null;
}
return (T) redisTemplate.opsForValue().get(key);
}
/**
* 移除单个String类型key
*
* @param key
* @author shy
* @date 2018年11月13日 上午10:42:01
*/
public void removeSingleStringKey(String key) {
if (StringUtils.isBlank(key)) {
throw new RuntimeException();
}
stringRedisTemplate.opsForValue().getOperations().delete(key);
}
/**
* 移除Collection<String>类型keys
*
* @param keys
* @author shy
* @date 2018年11月13日 下午3:15:16
*/
public void removeMultiStringKey(Collection<String> keys) {
if (CollectionUtils.isNotEmpty(keys)) {
stringRedisTemplate.opsForValue().getOperations().delete(keys);
}
}
/**
* redis key 模糊查询
* @author shy
* @date 2021年1月4日 上午11:21:45
* @param key
* @return
*/
public Set<String> queryStringKeys(String key) {
return redisTemplate.keys(key + "*");
}
}

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

@ -1,7 +1,7 @@
package com.dreamchaser.depository_manage.service.impl;
import com.alibaba.fastjson.JSONObject;
import com.dreamchaser.depository_manage.config.PortConfig;
import com.dreamchaser.depository_manage.config.PublicConfig;
import com.dreamchaser.depository_manage.entity.*;
import com.dreamchaser.depository_manage.exception.MyException;
import com.dreamchaser.depository_manage.mapper.*;
@ -9,7 +9,8 @@ import com.dreamchaser.depository_manage.pojo.*;
import com.dreamchaser.depository_manage.pojo.callBackXml.approvalCallBackXml.ApprovalInfo_Details;
import com.dreamchaser.depository_manage.pojo.callBackXml.approvalCallBackXml.ApprovalInfo_Details_Approver;
import com.dreamchaser.depository_manage.pojo.callBackXml.callBackXml_button_templatecard.TemplateCard;
import com.dreamchaser.depository_manage.security.pool.AuthenticationTokenPool;
import com.dreamchaser.depository_manage.security.pool.RedisPool;
import com.dreamchaser.depository_manage.security.pool.SendQyWxMessageThreadPool;
import com.dreamchaser.depository_manage.service.DepositoryRecordService;
import com.dreamchaser.depository_manage.service.SplitUnitService;
import com.dreamchaser.depository_manage.service.StockTakingService;
@ -24,7 +25,6 @@ import org.springframework.data.redis.core.RedisTemplate;
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;
import javax.servlet.http.HttpServletRequest;
import java.util.*;
import java.util.concurrent.TimeUnit;
@ -45,7 +45,7 @@ public class StockTakingServiceImpl implements StockTakingService {
RedissonClient redissonClient;
@Autowired
RedisTemplate<String, String> redisTemplate;
private RedisPool redisPool;
@Autowired
MaterialMapper materialMapper;
@ -151,11 +151,11 @@ public class StockTakingServiceImpl implements StockTakingService {
// 定义用于存储仓库与当前对应关系的map
Map<String, List<MaterialAndPlaceForViewP>> paramForDepositoryAndPid = new HashMap<>();
for (String key : keys) {
Boolean flagForSubmit = ObjectFormatUtil.toBoolean(redisTemplate.opsForHash().get(key, "flagForSubmit"));
Boolean flagForSubmit = ObjectFormatUtil.toBoolean(redisPool.getRedisTemplateByDb(15).opsForHash().get(key, "flagForSubmit"));
if (flagForSubmit != null && !flagForSubmit) {
// 获取盘点时的物料与库位的对应关系id
Integer id = ObjectFormatUtil.toInteger(redisTemplate.opsForHash().get(key, "id"));
Integer id = ObjectFormatUtil.toInteger(redisPool.getRedisTemplateByDb(15).opsForHash().get(key, "id"));
// 获取物料与库位的对应关系
MaterialAndPlaceForViewP placeAndMaterial = placeMapper.findPlaceAndMaterialForViewById(id);
// 获取对应的仓库编码
@ -188,10 +188,10 @@ public class StockTakingServiceImpl implements StockTakingService {
String key = "wms_stockTaking_" + userToken.getId() + "_" + DateUtil.getNowTime() + "_" + mpv.getId();
Object unit = redisTemplate.opsForHash().get(key, "unit");
String takingResult = (String) redisTemplate.opsForHash().get(key, "takingResult");
Object number = redisTemplate.opsForHash().get(key, "number");
Object oldInventory = redisTemplate.opsForHash().get(key, "oldInventory");
Object unit = redisPool.getRedisTemplateByDb(15).opsForHash().get(key, "unit");
String takingResult = (String) redisPool.getRedisTemplateByDb(15).opsForHash().get(key, "takingResult");
Object number = redisPool.getRedisTemplateByDb(15).opsForHash().get(key, "number");
Object oldInventory = redisPool.getRedisTemplateByDb(15).opsForHash().get(key, "oldInventory");
Double newInventory = ObjectFormatUtil.toDouble(oldInventory);
if ("Inventory_down".equals(takingResult)) {
// 如果盘亏
@ -218,7 +218,7 @@ public class StockTakingServiceImpl implements StockTakingService {
success += insertStockTaking(param);
param.remove("id");
redisTemplate.opsForHash().put(key, "flagForSubmit", "true");
redisPool.getRedisTemplateByDb(15).opsForHash().put(key, "flagForSubmit", "true");
}
mainIdList.add(param.get("mainId"));
}
@ -438,7 +438,7 @@ public class StockTakingServiceImpl implements StockTakingService {
if ("".equals(s.trim())) {
continue;
}
UserByPort userByPort = PortConfig.findUserByPortByNumber(s);
UserByPort userByPort = PublicConfig.findUserByPortByNumber(s);
String workwechat = userByPort.getWorkwechat();
if (workwechat == null || "".equals(workwechat)) {
workwechat = userByPort.getWechat();
@ -568,9 +568,7 @@ public class StockTakingServiceImpl implements StockTakingService {
if (normalMinId.size() > 0) {
// 抄送盘点调账记录给盘点人员
new Thread(new Runnable() {
@Override
public void run() {
SendQyWxMessageThreadPool.execute(() -> {
// 获取盘点人员
// UserByPort originator = LinkInterfaceUtil.FindUserById(mainRecord.getOriginator(), userToken);
// String workwechat = originator.getWorkwechat();
@ -585,12 +583,11 @@ public class StockTakingServiceImpl implements StockTakingService {
QyWxMessageMap.put("MsgId", jsonObject.getString("msgid"));
QyWxMessageMap.put("responseCode", jsonObject.getString("response_code"));
// key user:300450:QyWxOut:1
redisTemplate.opsForHash().putAll("user:" + userToken.getNumber() + ":QyWxStockTakingCompleteId:" + mainId, QyWxMessageMap);
redisPool.getRedisTemplateByDb(14).opsForHash().putAll("user:" + userToken.getNumber() + ":QyWxStockTakingCompleteId:" + mainId, QyWxMessageMap);
// 设置过期时间为三天
redisTemplate.expire("user:" + userToken.getNumber() + ":QyWxStockTakingCompleteId:" + mainId, 72, TimeUnit.HOURS);
}
redisPool.getRedisTemplateByDb(14).expire("user:" + userToken.getNumber() + ":QyWxStockTakingCompleteId:" + mainId, 72, TimeUnit.HOURS);
}
}).start();
});
} else {
map.put("state", 1);
}
@ -605,44 +602,27 @@ public class StockTakingServiceImpl implements StockTakingService {
map.put("departmentManager", userToken.getNumber());
stockTakingMapper.updateStockTaking(map);
/*// 更新其他卡片
String finalStockTakingResult = stockTakingResult;
new Thread(new Runnable() {
@Override
public void run() {
// 获取responseCode(key为申请人number)
//获取申请人信息
Integer originator = mainRecord.getOriginator();
UserByPort userByPort = LinkInterfaceUtil.FindUserById(originator, userToken);
String key = "user:" + userByPort.getNumber() + ":QyWxStockTakingId:" + mainId;
String responseCode = (String) redisTemplate.opsForHash().get(key, "responseCode");
qyWxOperationService.updateTemplateCard(responseCode, userToken.getName(), finalStockTakingResult, userAgent);
}
}).start();*/
// 开启流程通知其他人忽略审批流程
new Thread(new Runnable() {
@Override
public void run() {
SendQyWxMessageThreadPool.execute(() -> {
String departmentManager1 = mainRecord.getDepartmentManager();
String[] split = departmentManager1.split(",");
StringBuilder QyWxUid = new StringBuilder();
for (String s : split) {
String[] split1 = departmentManager1.split(",");
StringBuilder QyWxUid1 = new StringBuilder();
for (String s : split1) {
if ("".equals(s.trim())) {
continue;
}
UserByPort userByPort = PortConfig.findUserByPortByNumber(s);
UserByPort userByPort = PublicConfig.findUserByPortByNumber(s);
String workwechat = userByPort.getWorkwechat();
if (workwechat == null || "".equals(workwechat)) {
workwechat = userByPort.getWechat();
}
QyWxUid.append(workwechat).append(",");
QyWxUid1.append(workwechat).append(",");
}
String s = QyWxUid.toString();
String s = QyWxUid1.toString();
s = "PangFuZhen,";
qyWxOperationService.sendMessageForOtherUserByCard(ObjectFormatUtil.toInteger(mainId), s, userAgent, 2);
}
}).start();
});
return result;
}
@ -683,7 +663,7 @@ public class StockTakingServiceImpl implements StockTakingService {
if ("".equals(s.trim())) {
continue;
}
UserByPort userByPort = PortConfig.findUserByPortByNumber(s);
UserByPort userByPort = PublicConfig.findUserByPortByNumber(s);
String workwechat = userByPort.getWorkwechat();
if (workwechat == null || "".equals(workwechat)) {
workwechat = userByPort.getWechat();
@ -728,7 +708,7 @@ public class StockTakingServiceImpl implements StockTakingService {
String key = "wms_stockTaking_" + userToken.getId() + "_" + DateUtil.getNowTime() + "_" + placeAndMaterialByMidAndPid.getId();
redisTemplate.delete(key);
redisPool.getRedisTemplateByDb(15).delete(key);
if ("Inventory_normal".equals(takingResult)) {
@ -1141,28 +1121,22 @@ public class StockTakingServiceImpl implements StockTakingService {
map.put("minIds", minIds);
// 开启一个线程用于发送抄送信息给负责人
new Thread(new Runnable() {
@Override
public void run() {
SendQyWxMessageThreadPool.execute(() -> {
String s = QyWxUid.toString();
s = "PangFuZhen,";
JSONObject jsonObject = qyWxOperationService.sendCcStockTakingMessageToHead(s, map, userToken, mainRecord, userAgent);
}
}).start();
});
// 更新其他卡片
new Thread(new Runnable() {
@Override
public void run() {
SendQyWxMessageThreadPool.execute(() -> {
// 获取responseCode(key为申请人number)
Integer originator = mainRecord.getOriginator();
UserByPort userByPort = LinkInterfaceUtil.FindUserById(originator, userToken);
//获取申请人信息
String key = "user:" + userByPort.getNumber() + ":QyWxStockTakingCompleteId:" + mainId;
String responseCode = (String) redisTemplate.opsForHash().get(key, "responseCode");
String responseCode = (String) redisPool.getRedisTemplateByDb(14).opsForHash().get(key, "responseCode");
qyWxOperationService.updateButtonTemplateCardToUnEnable(responseCode, userToken.getName(), "处理", userAgent);
}
}).start();
});
return result;
}
@ -1187,7 +1161,7 @@ public class StockTakingServiceImpl implements StockTakingService {
// 点击用户
String fromUserName = templateCard.getFromUserName();
// 根据userId获取处理人
Map<String, Object> portInfo = PortConfig.findUserByQyWxUserId(fromUserName);
Map<String, Object> portInfo = PublicConfig.findUserByQyWxUserId(fromUserName);
UserByPort userByPort = (UserByPort) portInfo.get("user");
// 用于最终更新
@ -1246,7 +1220,7 @@ public class StockTakingServiceImpl implements StockTakingService {
String key = "wms_stockTaking_" + userByPort.getId() + "_" + DateUtil.getNowTime() + "_" + placeAndMaterialByMidAndPid.getId();
redisTemplate.delete(key);
redisPool.getRedisTemplateByDb(15).delete(key);
if ("Inventory_normal".equals(takingResult)) {
@ -1670,9 +1644,7 @@ public class StockTakingServiceImpl implements StockTakingService {
// 开启一个线程用于发送抄送信息给负责人
StockTaking finalMainRecord = mainRecord;
new Thread(new Runnable() {
@Override
public void run() {
SendQyWxMessageThreadPool.execute(() -> {
map.put("minIds", minIds);
String departmentManager = mainRecord.getDepartmentManager();
StringBuilder QyWxUid = new StringBuilder();
@ -1682,7 +1654,7 @@ public class StockTakingServiceImpl implements StockTakingService {
if ("".equals(s.trim())) {
continue;
}
UserByPort userByPort1 = PortConfig.findUserByPortByNumber(s);
UserByPort userByPort1 = PublicConfig.findUserByPortByNumber(s);
String workwechat = userByPort1.getWorkwechat();
if (workwechat == null || "".equals(workwechat)) {
workwechat = userByPort1.getWechat();
@ -1692,8 +1664,7 @@ public class StockTakingServiceImpl implements StockTakingService {
String s = QyWxUid.toString();
s = "PangFuZhen,";
JSONObject jsonObject = qyWxOperationService.sendCcStockTakingMessageToHead(s, map, null, finalMainRecord, userAgent);
}
}).start();
});
return 1;
}
@ -1722,7 +1693,7 @@ public class StockTakingServiceImpl implements StockTakingService {
// 获取审批人userId
String userId = approver.getUserId();
// 获取审批人
Map<String, Object> portInfo = PortConfig.findUserByQyWxUserId(userId);
Map<String, Object> portInfo = PublicConfig.findUserByQyWxUserId(userId);
UserByPort approver_user = (UserByPort) portInfo.get("user");
@ -1750,7 +1721,7 @@ public class StockTakingServiceImpl implements StockTakingService {
if ("".equals(s.trim())) {
continue;
}
UserByPort userByPort = PortConfig.findUserByPortByNumber(s);
UserByPort userByPort = PublicConfig.findUserByPortByNumber(s);
String workwechat = userByPort.getWorkwechat();
if (workwechat == null || "".equals(workwechat)) {
workwechat = userByPort.getWechat();
@ -1883,9 +1854,7 @@ public class StockTakingServiceImpl implements StockTakingService {
// 抄送盘点调账记录给盘点人员
if (normalMinId.size() > 0) {
new Thread(new Runnable() {
@Override
public void run() {
SendQyWxMessageThreadPool.execute(() -> {
// 获取盘点人员
// UserByPort originator = LinkInterfaceUtil.FindUserById(mainRecord.getOriginator(), null);
// String workwechat = originator.getWorkwechat();
@ -1900,12 +1869,11 @@ public class StockTakingServiceImpl implements StockTakingService {
QyWxMessageMap.put("MsgId", jsonObject.getString("msgid"));
QyWxMessageMap.put("responseCode", jsonObject.getString("response_code"));
// key user:300450:QyWxOut:1
redisTemplate.opsForHash().putAll("user:" + approver_user.getNumber() + ":QyWxStockTakingCompleteId:" + mainId, QyWxMessageMap);
redisPool.getRedisTemplateByDb(14).opsForHash().putAll("user:" + approver_user.getNumber() + ":QyWxStockTakingCompleteId:" + mainId, QyWxMessageMap);
// 设置过期时间为三天
redisTemplate.expire("user:" + approver_user.getNumber() + ":QyWxStockTakingCompleteId:" + mainId, 72, TimeUnit.HOURS);
redisPool.getRedisTemplateByDb(14).expire("user:" + approver_user.getNumber() + ":QyWxStockTakingCompleteId:" + mainId, 72, TimeUnit.HOURS);
}
}
}).start();
});
} else {
map.put("state", 1);
@ -2755,9 +2723,7 @@ public class StockTakingServiceImpl implements StockTakingService {
// 开启一个线程用于发送转移信息给盘点人员
StockTaking finalMainRecord = mainRecord;
new Thread(new Runnable() {
@Override
public void run() {
SendQyWxMessageThreadPool.execute(() -> {
Integer originator = finalMainRecord.getOriginator();
map.put("minIds", minIds);
StringBuilder departMentHeadQyWxName = new StringBuilder();
@ -2769,8 +2735,7 @@ public class StockTakingServiceImpl implements StockTakingService {
// departMentHeadQyWxName.append(workwechat+",");
departMentHeadQyWxName.append("PangFuZhen,");
JSONObject jsonObject = qyWxOperationService.sendCcStockTakingTransferMessageToHead(departMentHeadQyWxName.toString(), map, userToken, finalMainRecord, userAgent);
}
}).start();
});
// 更新盘点记录
@ -2808,7 +2773,7 @@ public class StockTakingServiceImpl implements StockTakingService {
// 点击用户
String fromUserName = templateCard.getFromUserName();
// 根据userId获取处理人
Map<String, Object> portInfo = PortConfig.findUserByQyWxUserId(fromUserName);
Map<String, Object> portInfo = PublicConfig.findUserByQyWxUserId(fromUserName);
UserByPort userByPort = (UserByPort) portInfo.get("user");
// 用于最终更新
@ -2946,9 +2911,7 @@ public class StockTakingServiceImpl implements StockTakingService {
if (flag) {
// 抄送盘点调账记录给盘点人员
new Thread(new Runnable() {
@Override
public void run() {
SendQyWxMessageThreadPool.execute((Runnable) () -> {
// 获取盘点人员
UserByPort originator = LinkInterfaceUtil.FindUserById(mainRecord.getOriginator(), null);
// String workwechat = originator.getWorkwechat();
@ -2964,18 +2927,15 @@ public class StockTakingServiceImpl implements StockTakingService {
QyWxMessageMap.put("responseCode", jsonObject.getString("response_code"));
// key user:300450:QyWxOut:1
// 申请人number
redisTemplate.opsForHash().putAll("user:" + originator.getNumber() + ":QyWxStockTakingCompleteId:" + mainId, QyWxMessageMap);
redisPool.getRedisTemplateByDb(14).opsForHash().putAll("user:" + originator.getNumber() + ":QyWxStockTakingCompleteId:" + mainId, QyWxMessageMap);
// 设置过期时间为三天
redisTemplate.expire("user:" + originator.getNumber() + ":QyWxStockTakingCompleteId:" + mainId, 72, TimeUnit.HOURS);
redisPool.getRedisTemplateByDb(14).expire("user:" + originator.getNumber() + ":QyWxStockTakingCompleteId:" + mainId, 72, TimeUnit.HOURS);
}
}
}).start();
});
} else {
// 发送错误消息提醒负责人
new Thread(new Runnable() {
@Override
public void run() {
SendQyWxMessageThreadPool.execute(() -> {
// 获取盘点人员
UserByPort originator = LinkInterfaceUtil.FindUserById(mainRecord.getOriginator(), null);
// String workwechat = originator.getWorkwechat();
@ -2984,8 +2944,7 @@ public class StockTakingServiceImpl implements StockTakingService {
// }
qyWxOperationService.sendStockTakingErrMessageToHead("PangFuZhen,", errIds, mainRecord, null, userAgent);
// qyWxOperationService.sendStockTakingErrMessageToHead(workwechat, errIds, mainRecord, null, userAgent);
}
}).start();
});
}
} else {
map.put("state", departmentManagerState);
@ -3012,21 +2971,21 @@ public class StockTakingServiceImpl implements StockTakingService {
*/
public String createTakingCode(String depositoryName) {
String key = "wms_stockTakingNumber";
RLock lock = redissonClient.getLock(key);
RLock lock = redissonClient.getLock(PublicConfig.redis_Lock_name);
String first = "GK";
// 获取仓库的首字母
depositoryName = WordUtil.getPinYinHeadChar(depositoryName);
String nowTime = DateUtil.getNowTime();
lock.lock(5, TimeUnit.SECONDS);
String orderNumber = redisTemplate.opsForValue().get(key);
String orderNumber = redisPool.getRedisTemplateByDb(15).opsForValue().get(key);
if (orderNumber == null) {
redisTemplate.opsForValue().set(key, "1", DateUtil.getSecondsNextEarlyMorning(), TimeUnit.SECONDS);
redisPool.getRedisTemplateByDb(15).opsForValue().set(key, "1", DateUtil.getSecondsNextEarlyMorning(), TimeUnit.SECONDS);
orderNumber = "1";
}
int newNumber = ObjectFormatUtil.toInteger(orderNumber) + 1;
redisTemplate.boundValueOps(key).set(String.valueOf(newNumber), DateUtil.getSecondsNextEarlyMorning(), TimeUnit.SECONDS);
redisPool.getRedisTemplateByDb(15).boundValueOps(key).set(String.valueOf(newNumber), DateUtil.getSecondsNextEarlyMorning(), TimeUnit.SECONDS);
lock.unlock();
orderNumber = String.format("%09d", ObjectFormatUtil.toInteger(orderNumber));
orderNumber = String.format("%04d", ObjectFormatUtil.toInteger(orderNumber));
String code = first + depositoryName + nowTime + orderNumber;
return code;
}

3
src/main/java/com/dreamchaser/depository_manage/service/impl/UserServiceImpl.java

@ -28,9 +28,6 @@ public class UserServiceImpl implements UserService {
@Autowired
DepositoryMapper depositoryMapper;
@Autowired
RedisTemplate<Object,Object> redisTemplate;
@Override
public Integer findCount() {
return userMapper.findCount();

27
src/main/java/com/dreamchaser/depository_manage/utils/LinkInterfaceUtil.java

@ -2,8 +2,7 @@ package com.dreamchaser.depository_manage.utils;
import com.alibaba.fastjson.JSONArray;
import com.alibaba.fastjson.JSONObject;
import com.dreamchaser.depository_manage.config.PortConfig;
import com.dreamchaser.depository_manage.config.QyWxConfig;
import com.dreamchaser.depository_manage.config.PublicConfig;
import com.dreamchaser.depository_manage.entity.*;
import com.dreamchaser.depository_manage.pojo.AdministrationP;
import com.dreamchaser.depository_manage.security.pool.AuthenticationTokenPool;
@ -29,7 +28,7 @@ public class LinkInterfaceUtil {
* @return 查询结果
*/
public static List<UserByPort> FindUserByMap(Map<String, Object> map, UserByPort userToken) {
String url = PortConfig.external_url + "/staff/archiveslist";
String url = PublicConfig.external_url + "/staff/archiveslist";
String jsonString = JSONObject.toJSONString(map);
JSONObject paramObject = JSONObject.parseObject(jsonString);
String post = null;
@ -58,7 +57,7 @@ public class LinkInterfaceUtil {
* @return
*/
public static List<AdministrationP> findAllCompany(UserByPort userByPort) {
String url = PortConfig.external_url + "/org/govlist";
String url = PublicConfig.external_url + "/org/govlist";
Map<String, Object> map = new HashMap<>();
map.put("superior", "313");
map.put("level", 3);
@ -94,7 +93,7 @@ public class LinkInterfaceUtil {
* @return 查询结果
*/
public static UserByPort FindUserById(Integer id, UserByPort userToken) {
String url = PortConfig.external_url + "/staff/archivescont";
String url = PublicConfig.external_url + "/staff/archivescont";
Map<String, Object> map = new HashMap<>();
map.put("id", id);
String jsonString = JSONObject.toJSONString(map);
@ -119,7 +118,7 @@ public class LinkInterfaceUtil {
* @return 查询结果
*/
public static List<UserByPort> FindUserByAdminorg(Integer id, UserByPort userToken) {
String url = PortConfig.external_url + "/staff/archivescont";
String url = PublicConfig.external_url + "/staff/archivescont";
Map<String, Object> map = new HashMap<>();
map.put("adminorg", id);
String jsonString = JSONObject.toJSONString(map);
@ -152,7 +151,7 @@ public class LinkInterfaceUtil {
* @return 查询结果
*/
public static Administration getCompany(Integer id, UserByPort userByPort) {
String url = PortConfig.external_url + "/org/getgovcont";
String url = PublicConfig.external_url + "/org/getgovcont";
Map<String, Object> map = new HashMap<>();
map.put("id", id);
map.put("idstr", id.toString());
@ -177,7 +176,7 @@ public class LinkInterfaceUtil {
* @return 查询结果
*/
public static List<AdministrationP> findCompanyBySuperior(String superior, UserByPort userByPort) {
String url = PortConfig.external_url + "/org/govthree";
String url = PublicConfig.external_url + "/org/govthree";
Map<String, Object> map = new HashMap<>();
map.put("idstr", superior);
map.put("level", 0);
@ -212,7 +211,7 @@ public class LinkInterfaceUtil {
* @return 查询结果
*/
public static Post findPostById(Integer id, UserByPort userByPort) {
String url = PortConfig.external_url + "/org/getpositioncont";
String url = PublicConfig.external_url + "/org/getpositioncont";
Map<String, Object> map = new HashMap<>();
map.put("id", id);
map.put("idstr", id.toString());
@ -242,7 +241,7 @@ public class LinkInterfaceUtil {
token = (String) request.getSession().getAttribute("userToken");
}
UserByPort userByPort = AuthenticationTokenPool.getUserToken(token);
String url = PortConfig.external_url_6666 + "/base/captcha";
String url = PublicConfig.external_url_6666 + "/base/captcha";
JSONObject param = new JSONObject();
String post = null;
try {
@ -262,7 +261,7 @@ public class LinkInterfaceUtil {
*/
public static Map<String, Object> findAdministration(UserByPort userByPort) {
Map<String, Object> map = new HashMap<>();
String url = PortConfig.external_url + "/org/govlist";
String url = PublicConfig.external_url + "/org/govlist";
String superior = "313";
map.put("superior", superior);
map.put("state", 1);
@ -301,7 +300,7 @@ public class LinkInterfaceUtil {
* @return
*/
public static JSONArray getPostTree(UserByPort userByPort) {
String url = PortConfig.external_url + "/org/govthreeing";
String url = PublicConfig.external_url + "/org/govthreeing";
Map<String, Object> param = new HashMap<>();
param.put("id", userByPort.getCompany());
param.put("idstr", "");
@ -328,7 +327,7 @@ public class LinkInterfaceUtil {
*/
public static List<String> getUserAccessToAddresses(UserByPort userToken) {
//定义链接地址
String url = PortConfig.external_url_6666 + "/system_authorizing/obtain_authorization";
String url = PublicConfig.external_url_6666 + "/system_authorizing/obtain_authorization";
System.out.println(url);
Map<String, Object> param = new HashMap<>();
param.put("system", "cangchu");
@ -353,7 +352,7 @@ public class LinkInterfaceUtil {
public static JSONArray getOrgAndPostThree(UserByPort userToken){
//定义链接地址
String url = PortConfig.external_url + "/org/get_organdpost_three";
String url = PublicConfig.external_url + "/org/get_organdpost_three";
Map<String, Object> param = new HashMap<>();
param.put("id", "309");
param.put("level", 0);

5
src/main/java/com/dreamchaser/depository_manage/utils/Md5Util.java

@ -1,5 +0,0 @@
package com.dreamchaser.depository_manage.utils;
public class Md5Util {
}

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

@ -60,7 +60,7 @@ spring:
redis:
port: 6379
host: 127.0.0.1
database: 0
database: 5
jedis:
pool:
min-idle: 10
@ -70,7 +70,11 @@ spring:
timeout: 2000ms
redisPool:
port: 6379
host: 127.0.0.1
dbs: 5,14,15
password:
server:
mybatis:

3
src/main/resources/logback-spring.xml

@ -29,7 +29,7 @@
<!-- 日志保留天数 -->
<maxHistory>30</maxHistory>
<!-- 日志文件上限大小,达到指定大小后删除旧的日志文件 -->
<totalSizeCap>2GB</totalSizeCap>
<totalSizeCap>1GB</totalSizeCap>
<!-- 每个日志文件的最大值 -->
<timeBasedFileNamingAndTriggeringPolicy
class="ch.qos.logback.core.rolling.SizeAndTimeBasedFNATP">
@ -148,7 +148,6 @@
<logger name="java.sql.PreparedStatement" level="DEBUG" />
<logger name="java.sql.ResultSet" level="DEBUG" />
<logger name="com.dreamchaser.dream.depository_manage.mapper" level="DEBUG" />
<!-- <logger name="com.dreamchaser.mapper" level="debug"/>-->
</springProfile>
<!-- endregion -->

4
src/main/resources/redisson-config.yml

@ -2,7 +2,7 @@
singleServerConfig:
address: "redis://127.0.0.1:6379"
clientName: null
database: 7 #选择使用哪个数据库0~15
database: 15 #选择使用哪个数据库0~15
idleConnectionTimeout: 10000
pingTimeout: 1000
connectTimeout: 10000
@ -22,5 +22,5 @@ singleServerConfig:
threads: 16
nettyThreads: 32
codec:
class: "org.redisson.codec.JsonJacksonCodec"
class: "org.redisson.client.codec.StringCodec"
transportMode: "NIO"

8
src/test/java/com/dreamchaser/depository_manage/BarChartTest.java

@ -84,7 +84,9 @@ public class BarChartTest {
*/
List<Object> getBarChartData( UserByPort userByPort){
Map<String, Integer> depositoryAllNameAndId = depositoryService.findDepositoryAllNameAndId(userByPort);
ExecutorService exs = Executors.newFixedThreadPool(2);
int threadSize = 2;
ExecutorService exs = new ThreadPoolExecutor(threadSize, threadSize, 100, TimeUnit.SECONDS, new LinkedBlockingQueue<>(threadSize));
// 结果集
List<Future<Object>> futureList = new ArrayList<Future<Object>>();
// 定义CompletionService
@ -164,7 +166,9 @@ public class BarChartTest {
days.add(format);
}
// 定义线程
ExecutorService exs = Executors.newFixedThreadPool(depositoryAllNameAndId.size());
int threadSize = depositoryAllNameAndId.size();
ExecutorService exs = new ThreadPoolExecutor(threadSize, threadSize, 100, TimeUnit.SECONDS, new LinkedBlockingQueue<>(threadSize));
// 结果集
List<Future<Object>> futureList = new ArrayList<Future<Object>>();
// 1.定义CompletionService

4
src/test/java/com/dreamchaser/depository_manage/InventoryLineChartTest.java

@ -125,7 +125,9 @@ public class InventoryLineChartTest {
}
// 定义线程
ExecutorService exs = Executors.newFixedThreadPool(depositoryAllNameAndId.size());
int threadSize = depositoryAllNameAndId.size();
ExecutorService exs = new ThreadPoolExecutor(threadSize, threadSize, 100, TimeUnit.SECONDS, new LinkedBlockingQueue<>(threadSize));
// 结果集
List<Future<Object>> futureList = new ArrayList<Future<Object>>();
// 1.定义CompletionService

3
src/test/java/com/dreamchaser/depository_manage/InventorySunburstDataTest.java

@ -96,7 +96,8 @@ public class InventorySunburstDataTest {
// 定义每次开启的线程数
int threadSize = depositoryList.size();
// 开启对应数量的线程
ExecutorService exs = Executors.newFixedThreadPool(threadSize);
ExecutorService exs = new ThreadPoolExecutor(threadSize, threadSize, 100, TimeUnit.SECONDS, new LinkedBlockingQueue<>(threadSize));
// 定义线程结果集
List<Future<Object>> futureList = new ArrayList<Future<Object>>();
// 定义CompletionService

4
src/test/java/com/dreamchaser/depository_manage/LineChartTest.java

@ -102,7 +102,9 @@ public class LineChartTest {
days.add(format);
}
// 定义线程
ExecutorService exs = Executors.newFixedThreadPool(depositoryAllNameAndId.size());
int threadSize = depositoryAllNameAndId.size();
ExecutorService exs = new ThreadPoolExecutor(threadSize, threadSize, 100, TimeUnit.SECONDS, new LinkedBlockingQueue<>(threadSize));
// 结果集
List<Future<Object>> futureList = new ArrayList<Future<Object>>();
// 1.定义CompletionService

80
src/test/java/com/dreamchaser/depository_manage/OtherTest.java

@ -1,37 +1,30 @@
package com.dreamchaser.depository_manage;
import com.alibaba.fastjson.JSON;
import com.alibaba.fastjson.JSONArray;
import com.alibaba.fastjson.JSONObject;
import com.dreamchaser.depository_manage.config.PortConfig;
import com.dreamchaser.depository_manage.config.QyWx_approval_template.Approval_template_approver;
import com.dreamchaser.depository_manage.entity.Administration;
import com.dreamchaser.depository_manage.entity.Depository;
import com.dreamchaser.depository_manage.entity.MaterialType;
import com.dreamchaser.depository_manage.config.PublicConfig;
import com.dreamchaser.depository_manage.entity.UserByPort;
import com.dreamchaser.depository_manage.security.pool.RedisPool;
import com.dreamchaser.depository_manage.mapper.DepositoryMapper;
import com.dreamchaser.depository_manage.pojo.AdministrationP;
import com.dreamchaser.depository_manage.pojo.callBackXml.approvalCallBackXml.ApprovalInfo_Details;
import com.dreamchaser.depository_manage.pojo.callBackXml.approvalCallBackXml.ApprovalInfo_Details_Approver;
import com.dreamchaser.depository_manage.service.*;
import com.dreamchaser.depository_manage.service.impl.QyWxOperationService;
import com.dreamchaser.depository_manage.utils.DateUtil;
import com.dreamchaser.depository_manage.utils.HttpUtils;
import com.dreamchaser.depository_manage.utils.LinkInterfaceUtil;
import com.dreamchaser.depository_manage.utils.ObjectFormatUtil;
import lombok.Data;
import org.apache.http.protocol.HTTP;
import com.dreamchaser.depository_manage.utils.WordUtil;
import javafx.scene.control.TableRow;
import org.junit.Test;
import org.junit.runner.RunWith;
import org.redisson.api.RLock;
import org.redisson.api.RedissonClient;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.boot.test.context.SpringBootTest;
import org.springframework.cglib.beans.BeanMap;
import org.springframework.test.context.junit4.SpringRunner;
import org.w3c.dom.ls.LSInput;
import java.io.IOException;
import java.text.SimpleDateFormat;
import java.util.*;
import java.util.concurrent.*;
import java.lang.reflect.Field;
import java.util.HashMap;
import java.util.Map;
import java.util.Set;
import java.util.concurrent.TimeUnit;
@SpringBootTest(webEnvironment = SpringBootTest.WebEnvironment.RANDOM_PORT)
@RunWith(SpringRunner.class)
@ -49,19 +42,52 @@ public class OtherTest {
@Autowired
QyWxOperationService qyWxOperationService;
@Autowired
static
RedisPool redisPool;
@Test
public void main() {
UserByPort userByPort = LinkInterfaceUtil.FindUserById(7060, null);
// ApprovalInfo_Details approvalInfo = new ApprovalInfo_Details();
// ApprovalInfo_Details_Approver approver = new ApprovalInfo_Details_Approver();
// approver.setUserId("PangFuZhen");
// approvalInfo.setApprover(approver);
// depositoryRecordService.reviewByQyWxApprovalIn("[2]",approvalInfo,"634c7f15fe74b4ba6c857df4032ed21e","2","202304260024");
// stockTakingService.reviewByQyWxApproval("4",approvalInfo,"42156e781cdc727e7d5deac872be45a9","2","202304240042");
JSONObject jsonObject = qyWxOperationService.sendOutApprovalTemplate("634c7f15fe74b4ba6c857df4032ed21e", userByPort, 20);
UserByPort userByPort = LinkInterfaceUtil.FindUserById(6235, null);
// Map<String, String> stringObjectMap = objectToMap(userByPort);
// redisPool.getRedisTemplateByDb(5).opsForHash().putAll(PublicConfig.userInfoRedisPrefix+"300450",stringObjectMap);
// System.out.println(stringObjectMap);
// Set<Object> keys = redisPool.getRedisTemplateByDb(5).opsForHash().keys(PublicConfig.userInfoRedisPrefix + "300450");
}
public static Map<String, String> objectToMap(Object object){
Map<String,String> dataMap = new HashMap<>();
Class<?> clazz = object.getClass();
for (Field field : clazz.getDeclaredFields()) {
try {
field.setAccessible(true);
Object o = field.get(object);
if(o != null){
dataMap.put(field.getName(), o.toString());
}else{
dataMap.put(field.getName(),"");
}
} catch (IllegalAccessException e) {
e.printStackTrace();
}
}
return dataMap;
}
public static <T> T mapToBean(Map<String, ?> map, Class<T> clazz)
throws IllegalAccessException, InstantiationException {
T bean = clazz.newInstance();
BeanMap beanMap = BeanMap.create(bean);
beanMap.putAll(map);
return bean;
}

6
src/test/java/com/dreamchaser/depository_manage/SunburstChartTest.java

@ -45,6 +45,8 @@ public class SunburstChartTest {
List<Object> sourceList = (List<Object>) previousMonth.get("sourceList");
// 结果集
List<Future<Object>> futureList = new ArrayList<Future<Object>>();
int threadSize = months.size();
ExecutorService exs = Executors.newFixedThreadPool(months.size());
// 1.定义CompletionService
CompletionService<Object> completionService = new ExecutorCompletionService<Object>(exs);
@ -86,7 +88,9 @@ public class SunburstChartTest {
@Override
public Object call() throws Exception {
List<MaterialType> materialTypeAll = materialTypeService.findMaterialTypeNoParent();
ExecutorService exs = Executors.newFixedThreadPool(materialTypeAll.size());
int threadSize = materialTypeAll.size();
ExecutorService exs = new ThreadPoolExecutor(threadSize, threadSize, 100, TimeUnit.SECONDS, new LinkedBlockingQueue<>(threadSize));
// 结果集
List<Future<Object>> futureList = new ArrayList<Future<Object>>();
// 1.定义CompletionService

Loading…
Cancel
Save