From b56bf9683c29c85075286a1f440403c4a66fad1e Mon Sep 17 00:00:00 2001 From: erdanergou Date: Thu, 4 May 2023 16:11:46 +0800 Subject: [PATCH] =?UTF-8?q?=E6=B5=8B=E8=AF=95-=E4=BF=AE=E6=94=B9redisson?= =?UTF-8?q?=E5=8A=A0=E9=94=81=E6=96=B9=E5=BC=8F?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../{PortConfig.java => PublicConfig.java} | 16 +- .../depository_manage/config/QyWxConfig.java | 18 +- .../controller/CompanyController.java | 8 +- .../controller/DepositoryController.java | 33 +- .../DepositoryRecordController.java | 884 ++++++++---------- .../controller/DownLoadFileController.java | 13 +- .../controller/GroupController.java | 77 +- .../controller/MaterialController.java | 35 +- .../controller/PageController.java | 76 +- .../controller/QyWxOperationController.java | 44 +- .../controller/StockTakingController.java | 158 ++-- .../controller/UserController.java | 27 +- .../depository_manage/entity/UserByPort.java | 6 +- .../intercepter/UserInterceptor.java | 22 +- .../pool/AuthenticationTokenPool.java | 6 +- .../pool/SendQyWxMessageThreadPool.java | 16 + .../service/RedisService.java | 5 - .../service/impl/CompanyServiceImpl.java | 25 +- .../impl/DepositoryRecordServiceImpl.java | 508 +++++----- .../service/impl/DepositoryServiceImpl.java | 13 +- .../service/impl/ExcelServiceImpl.java | 16 +- .../service/impl/GroupServiceImpl.java | 128 +-- .../service/impl/MaterialServiceImpl.java | 69 +- .../service/impl/MaterialTypeServiceImpl.java | 3 +- .../service/impl/NoticeServiceImpl.java | 5 +- .../service/impl/QyWxOperationService.java | 23 +- .../service/impl/RedisServiceImpl.java | 220 ----- .../service/impl/StockTakingServiceImpl.java | 305 +++--- .../service/impl/UserServiceImpl.java | 3 - .../utils/LinkInterfaceUtil.java | 27 +- .../depository_manage/utils/Md5Util.java | 5 - src/main/resources/application-test.yml | 8 +- src/main/resources/logback-spring.xml | 3 +- src/main/resources/redisson-config.yml | 4 +- .../depository_manage/BarChartTest.java | 8 +- .../InventoryLineChartTest.java | 4 +- .../InventorySunburstDataTest.java | 3 +- .../depository_manage/LineChartTest.java | 4 +- .../depository_manage/OtherTest.java | 80 +- .../depository_manage/SunburstChartTest.java | 6 +- 40 files changed, 1237 insertions(+), 1677 deletions(-) rename src/main/java/com/dreamchaser/depository_manage/config/{PortConfig.java => PublicConfig.java} (90%) create mode 100644 src/main/java/com/dreamchaser/depository_manage/security/pool/SendQyWxMessageThreadPool.java delete mode 100644 src/main/java/com/dreamchaser/depository_manage/service/RedisService.java delete mode 100644 src/main/java/com/dreamchaser/depository_manage/service/impl/RedisServiceImpl.java delete mode 100644 src/main/java/com/dreamchaser/depository_manage/utils/Md5Util.java diff --git a/src/main/java/com/dreamchaser/depository_manage/config/PortConfig.java b/src/main/java/com/dreamchaser/depository_manage/config/PublicConfig.java similarity index 90% rename from src/main/java/com/dreamchaser/depository_manage/config/PortConfig.java rename to src/main/java/com/dreamchaser/depository_manage/config/PublicConfig.java index 4a558fd4..d5a03eee 100644 --- a/src/main/java/com/dreamchaser/depository_manage/config/PortConfig.java +++ b/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 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 findDepartmentHeadByUser(Integer maindeparment,UserByPort userToken){ List userByPortList = new ArrayList<>(); - String url = PortConfig.external_url + "/staff/archiveslist"; + String url = PublicConfig.external_url + "/staff/archiveslist"; Map 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 map = new HashMap<>(); map.put("number",number); String jsonString = JSONObject.toJSONString(map); diff --git a/src/main/java/com/dreamchaser/depository_manage/config/QyWxConfig.java b/src/main/java/com/dreamchaser/depository_manage/config/QyWxConfig.java index 3efab4c0..87f9335c 100644 --- a/src/main/java/com/dreamchaser/depository_manage/config/QyWxConfig.java +++ b/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 redisTemplate; + public static RedisTemplate 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 redisTemplate) { - QyWxConfig.redisTemplate = redisTemplate; - } - - } diff --git a/src/main/java/com/dreamchaser/depository_manage/controller/CompanyController.java b/src/main/java/com/dreamchaser/depository_manage/controller/CompanyController.java index a94d9b21..8756dedd 100644 --- a/src/main/java/com/dreamchaser/depository_manage/controller/CompanyController.java +++ b/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)); diff --git a/src/main/java/com/dreamchaser/depository_manage/controller/DepositoryController.java b/src/main/java/com/dreamchaser/depository_manage/controller/DepositoryController.java index b23d1129..7c78e66b 100644 --- a/src/main/java/com/dreamchaser/depository_manage/controller/DepositoryController.java +++ b/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> futureList = new ArrayList>(); // 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> futureList = new ArrayList>(); // 1.定义CompletionService @@ -544,7 +548,9 @@ public class DepositoryController { // 获取各仓库名称以及id Map 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> futureList = new ArrayList>(); // 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> futureList = new ArrayList>(); // 1.定义CompletionService @@ -719,7 +727,9 @@ public class DepositoryController { List sourceList = (List) previousMonth.get("sourceList"); // 结果集 List> futureList = new ArrayList>(); - 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 completionService = new ExecutorCompletionService(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> futureList = new ArrayList>(); // 定义CompletionService @@ -1250,7 +1260,9 @@ public class DepositoryController { */ Map getBarChartData(UserByPort userByPort) { Map 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> futureList = new ArrayList>(); // 定义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> futureList = new ArrayList>(); // 1.定义CompletionService @@ -1717,7 +1731,8 @@ public class DepositoryController { @Override public Object call() throws Exception { List 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> futureList = new ArrayList>(); // 1.定义CompletionService diff --git a/src/main/java/com/dreamchaser/depository_manage/controller/DepositoryRecordController.java b/src/main/java/com/dreamchaser/depository_manage/controller/DepositoryRecordController.java index 4a6c8444..025069e0 100644 --- a/src/main/java/com/dreamchaser/depository_manage/controller/DepositoryRecordController.java +++ b/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 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,112 +390,110 @@ public class DepositoryRecordController { result.put("success", successMsg); } - // 开启一个线程用于发送入库申请 - new Thread(new Runnable() { - @Override - public void run() { - Map> MtIdToRecordId = new HashMap<>(); - Map> 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)) { - Long mtId = mtIdList.get(i); - // 将对应仓库与订单id添加映射关系 - List integers = MtIdToRecordId.get(mtId); - if (integers != null) { - // 如果有对应关系 - integers.add(recordId); - } else { - // 如果没有 - integers = new ArrayList<>(); - integers.add(recordId); - MtIdToRecordId.put(mtId, integers); - } + // 调用一个线程用于发送入库申请 + SendQyWxMessageThreadPool.execute(() -> { + Map> MtIdToRecordId = new HashMap<>(); + Map> 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)) { + Long mtId = mtIdList.get(i); + // 将对应仓库与订单id添加映射关系 + List integers = MtIdToRecordId.get(mtId); + if (integers != null) { + // 如果有对应关系 + integers.add(recordId); } else { - Integer did = depositoryIdList.get(i); - // 将对应仓库与订单id添加映射关系 - List integers = depositoryIdToRecordId.get(did); - if (integers != null) { - // 如果有对应关系 - integers.add(recordId); - } else { - // 如果没有 - integers = new ArrayList<>(); - integers.add(recordId); - depositoryIdToRecordId.put(did, integers); - } + // 如果没有 + integers = new ArrayList<>(); + integers.add(recordId); + MtIdToRecordId.put(mtId, integers); } + } else { + Integer did = depositoryIdList.get(i); + // 将对应仓库与订单id添加映射关系 + List integers = depositoryIdToRecordId.get(did); + if (integers != null) { + // 如果有对应关系 + integers.add(recordId); + } else { + // 如果没有 + integers = new ArrayList<>(); + integers.add(recordId); + depositoryIdToRecordId.put(did, integers); + } + } - } } - // 获取遍历器 - Iterator iterator = MtIdToRecordId.keySet().iterator(); - if (iterator.hasNext()) { - // 获取当前类别 - Long next = iterator.next(); - // 获取入库到当前仓库的订单id - List integerList = MtIdToRecordId.get(next); - // 获取当前类型的管理员 - List materialTypeIdForIn = roleService.findRoleAndMaterialTypeByMtId(next); - // 用于存储当前仓库的管理员企业微信userId - StringBuilder sb = new StringBuilder(); - for (RoleAndMaterialType mt : materialTypeIdForIn - ) { - // 获取管理员数据 - UserByPort userByPort = LinkInterfaceUtil.FindUserById(mt.getUid(), userToken); - String workwechat = userByPort.getWorkwechat(); - if (workwechat == null || "".equals(workwechat)) { - workwechat = userByPort.getWechat(); - } - sb.append(workwechat).append(","); + } + // 获取遍历器 + Iterator iterator = MtIdToRecordId.keySet().iterator(); + if (iterator.hasNext()) { + // 获取当前类别 + Long next = iterator.next(); + // 获取入库到当前仓库的订单id + List integerList = MtIdToRecordId.get(next); + // 获取当前类型的管理员 + List materialTypeIdForIn = roleService.findRoleAndMaterialTypeByMtId(next); + // 用于存储当前仓库的管理员企业微信userId + StringBuilder sb = new StringBuilder(); + for (RoleAndMaterialType mt : materialTypeIdForIn + ) { + // 获取管理员数据 + UserByPort userByPort = LinkInterfaceUtil.FindUserById(mt.getUid(), userToken); + String workwechat = userByPort.getWorkwechat(); + if (workwechat == null || "".equals(workwechat)) { + workwechat = userByPort.getWechat(); } - JSONObject jsonObject = qyWxOperationService.sendApprovalTemplateIn(crypt, userToken, integerList, sb.toString()); - String sp_no = jsonObject.getString("sp_no"); - Map QyWxApprovalMap = new HashMap<>(); - QyWxApprovalMap.put("sp_no", sp_no); - QyWxApprovalMap.put("mainId", integerList.toString()); - redisTemplateForHash.opsForHash().putAll(sp_no, QyWxApprovalMap); - // 设置过期为7天 - redisTemplateForHash.expire(sp_no, 7, TimeUnit.DAYS); - + sb.append(workwechat).append(","); } + JSONObject jsonObject = qyWxOperationService.sendApprovalTemplateIn(crypt, userToken, integerList, sb.toString()); + String sp_no = jsonObject.getString("sp_no"); + Map QyWxApprovalMap = new HashMap<>(); + QyWxApprovalMap.put("sp_no", sp_no); + QyWxApprovalMap.put("mainId", integerList.toString()); + redisPool.getRedisTemplateByDb(14).opsForHash().putAll("wms_QyWxMessage_"+sp_no, QyWxApprovalMap); + // 设置过期为7天 + redisPool.getRedisTemplateByDb(14).expire("wms_QyWxMessage_"+sp_no, 7, TimeUnit.DAYS); - Iterator iterator1 = depositoryIdToRecordId.keySet().iterator(); - if (iterator1.hasNext()) { - // 获取当前类别 - Integer next = iterator1.next(); - // 获取入库到当前仓库的订单id - List integerList = depositoryIdToRecordId.get(next); - // 获取当前类型的管理员 - List materialTypeIdForIn = roleService.findRoleAndDepositoryByDid(next); - // 用于存储当前仓库的管理员企业微信userId - StringBuilder sb = new StringBuilder(); - for (RoleAndDepository mt : materialTypeIdForIn - ) { - // 获取管理员数据 - UserByPort userByPort = LinkInterfaceUtil.FindUserById(mt.getUserId(), userToken); - String workwechat = userByPort.getWorkwechat(); - if (workwechat == null || "".equals(workwechat)) { - workwechat = userByPort.getWechat(); - } - sb.append(workwechat).append(","); - } - JSONObject jsonObject = qyWxOperationService.sendApprovalTemplateIn(crypt, userToken, integerList, sb.toString()); - String sp_no = jsonObject.getString("sp_no"); - Map QyWxApprovalMap = new HashMap<>(); - QyWxApprovalMap.put("sp_no", sp_no); - QyWxApprovalMap.put("mainId", integerList.toString()); - redisTemplateForHash.opsForHash().putAll(sp_no, QyWxApprovalMap); - // 设置过期为7天 - redisTemplateForHash.expire(sp_no, 7, TimeUnit.DAYS); + } + Iterator iterator1 = depositoryIdToRecordId.keySet().iterator(); + if (iterator1.hasNext()) { + // 获取当前类别 + Integer next = iterator1.next(); + // 获取入库到当前仓库的订单id + List integerList = depositoryIdToRecordId.get(next); + // 获取当前类型的管理员 + List materialTypeIdForIn = roleService.findRoleAndDepositoryByDid(next); + // 用于存储当前仓库的管理员企业微信userId + StringBuilder sb = new StringBuilder(); + for (RoleAndDepository mt : materialTypeIdForIn + ) { + // 获取管理员数据 + UserByPort userByPort = LinkInterfaceUtil.FindUserById(mt.getUserId(), userToken); + String workwechat = userByPort.getWorkwechat(); + if (workwechat == null || "".equals(workwechat)) { + workwechat = userByPort.getWechat(); + } + sb.append(workwechat).append(","); } + JSONObject jsonObject = qyWxOperationService.sendApprovalTemplateIn(crypt, userToken, integerList, sb.toString()); + String sp_no = jsonObject.getString("sp_no"); + Map QyWxApprovalMap = new HashMap<>(); + QyWxApprovalMap.put("sp_no", sp_no); + QyWxApprovalMap.put("mainId", integerList.toString()); + redisPool.getRedisTemplateByDb(14).opsForHash().putAll("wms_QyWxMessage_"+sp_no, QyWxApprovalMap); + // 设置过期为7天 + 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 departmentHeadByUsers = PortConfig.findDepartmentHeadByUser(userToken.getMaindeparment(), userToken); + List 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 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() { - JSONObject jsonObject = qyWxOperationService.sendOutApprovalTemplate(crypt, userToken, ObjectFormatUtil.toInteger(id)); - String sp_no = jsonObject.getString("sp_no"); - Map 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); - // 设置过期为7天 - redisTemplateForHash.expire(sp_no, 7, TimeUnit.DAYS); - } - }).start(); + SendQyWxMessageThreadPool.execute(() -> { + JSONObject jsonObject = qyWxOperationService.sendOutApprovalTemplate(crypt, userToken, ObjectFormatUtil.toInteger(id)); + String sp_no = jsonObject.getString("sp_no"); + Map QyWxApprovalMap = new HashMap<>(); + QyWxApprovalMap.put("sp_no", sp_no); + QyWxApprovalMap.put("otherDepartmentIdList", jsonObject.getString("otherDepartmentIdList")); + QyWxApprovalMap.put("mainId", id.toString()); + redisPool.getRedisTemplateByDb(14).opsForHash().putAll("wms_QyWxMessage_"+sp_no, QyWxApprovalMap); + // 设置过期为7天 + 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 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() { - JSONObject jsonObject = qyWxOperationService.sendOutApprovalTemplate(crypt, userToken, ObjectFormatUtil.toInteger(id)); - String sp_no = jsonObject.getString("sp_no"); - Map 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); - // 设置过期为7天 - redisTemplateForHash.expire(sp_no, 7, TimeUnit.DAYS); - } - }).start(); + SendQyWxMessageThreadPool.execute(() -> { + JSONObject jsonObject = qyWxOperationService.sendOutApprovalTemplate(crypt, userToken, ObjectFormatUtil.toInteger(id)); + String sp_no = jsonObject.getString("sp_no"); + Map QyWxApprovalMap = new HashMap<>(); + QyWxApprovalMap.put("sp_no", sp_no); + QyWxApprovalMap.put("otherDepartmentIdList", jsonObject.getString("otherDepartmentIdList")); + QyWxApprovalMap.put("mainId", id.toString()); + redisPool.getRedisTemplateByDb(14).opsForHash().putAll("wms_QyWxMessage_"+sp_no, QyWxApprovalMap); + // 设置过期为7天 + redisPool.getRedisTemplateByDb(14).expire(sp_no, 7, TimeUnit.DAYS); + }); } @@ -699,7 +656,7 @@ public class DepositoryRecordController { List 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 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 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 mids = (List) map.get("mids"); List depositoryIds = (List) map.get("depositoryIds"); List placeCodes = (List) map.get("placeCodes"); - List nowmids = redisTemplateForHash.opsForList().range("mids" + userToken.getId(), 0, -1); + List 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 depositoryIds = (List) map.get("depositoryIds"); List placeCodes = (List) 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 departmentHeadByUsers = PortConfig.findDepartmentHeadByUser(userToken.getMaindeparment(), userToken); + List 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 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() { - JSONObject jsonObject = qyWxOperationService.sendOutApprovalTemplate(crypt, userToken, ObjectFormatUtil.toInteger(id)); - String sp_no = jsonObject.getString("sp_no"); - Map 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); - // 设置过期为7天 - redisTemplateForHash.expire(sp_no, 7, TimeUnit.DAYS); - } - }).start(); + SendQyWxMessageThreadPool.execute(() -> { + JSONObject jsonObject = qyWxOperationService.sendOutApprovalTemplate(crypt, userToken, ObjectFormatUtil.toInteger(id)); + String sp_no = jsonObject.getString("sp_no"); + Map QyWxApprovalMap = new HashMap<>(); + QyWxApprovalMap.put("sp_no", sp_no); + QyWxApprovalMap.put("mainId", id.toString()); + QyWxApprovalMap.put("otherDepartmentIdList", jsonObject.getString("otherDepartmentIdList")); + redisPool.getRedisTemplateByDb(14).opsForHash().putAll("wms_QyWxMessage_"+sp_no, QyWxApprovalMap); + // 设置过期为7天 + 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 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 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() { - JSONObject jsonObject = qyWxOperationService.sendOutApprovalTemplate(crypt, userToken, ObjectFormatUtil.toInteger(id)); - String sp_no = jsonObject.getString("sp_no"); - Map 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); - // 设置过期为7天 - redisTemplateForHash.expire(sp_no, 7, TimeUnit.DAYS); - } - }).start(); + SendQyWxMessageThreadPool.execute(() -> { + JSONObject jsonObject = qyWxOperationService.sendOutApprovalTemplate(crypt, userToken, ObjectFormatUtil.toInteger(id)); + String sp_no = jsonObject.getString("sp_no"); + Map QyWxApprovalMap = new HashMap<>(); + QyWxApprovalMap.put("sp_no", sp_no); + QyWxApprovalMap.put("mainId", id.toString()); + QyWxApprovalMap.put("otherDepartmentIdList", jsonObject.getString("otherDepartmentIdList")); + redisPool.getRedisTemplateByDb(14).opsForHash().putAll("wms_QyWxMessage_"+sp_no, QyWxApprovalMap); + // 设置过期为7天 + 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 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,115 +1273,112 @@ public class DepositoryRecordController { depositoryIdList.add(ObjectFormatUtil.toInteger(map.get("depositoryId"))); } // 开启一个线程用于发送入库申请 - new Thread(new Runnable() { - @Override - public void run() { - Map> MtIdToRecordId = new HashMap<>(); - Map> 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)) { - Long mtId = mtIdList.get(i); - // 将对应仓库与订单id添加映射关系 - List integers = MtIdToRecordId.get(mtId); - if (integers != null) { - // 如果有对应关系 - integers.add(recordId); - } else { - // 如果没有 - integers = new ArrayList<>(); - integers.add(recordId); - MtIdToRecordId.put(mtId, integers); - } + SendQyWxMessageThreadPool.execute(() -> { + Map> MtIdToRecordId = new HashMap<>(); + Map> depositoryIdToRecordId = new HashMap<>(); + for (int i = 0; i < recordIds.size(); i++) { + Integer recordId = recordIds.get(i); + if (recordId != null) { + // 如果当前id不是空 获取对应的入库仓库id + String type1 = typeList.get(i); + if ("mt".equals(type1)) { + Long mtId = mtIdList.get(i); + // 将对应仓库与订单id添加映射关系 + List integers = MtIdToRecordId.get(mtId); + if (integers != null) { + // 如果有对应关系 + integers.add(recordId); } else { - Integer did = depositoryIdList.get(i); - // 将对应仓库与订单id添加映射关系 - List integers = depositoryIdToRecordId.get(did); - if (integers != null) { - // 如果有对应关系 - integers.add(recordId); - } else { - // 如果没有 - integers = new ArrayList<>(); - integers.add(recordId); - depositoryIdToRecordId.put(did, integers); - } + // 如果没有 + integers = new ArrayList<>(); + integers.add(recordId); + MtIdToRecordId.put(mtId, integers); + } + } else { + Integer did = depositoryIdList.get(i); + // 将对应仓库与订单id添加映射关系 + List integers = depositoryIdToRecordId.get(did); + if (integers != null) { + // 如果有对应关系 + integers.add(recordId); + } else { + // 如果没有 + integers = new ArrayList<>(); + integers.add(recordId); + depositoryIdToRecordId.put(did, integers); } + } - } } - // 获取遍历器 - Iterator iterator = MtIdToRecordId.keySet().iterator(); - if (iterator.hasNext()) { - // 获取当前类别 - Long next = iterator.next(); - // 获取入库到当前仓库的订单id - List integerList = MtIdToRecordId.get(next); - // 获取当前类型的管理员 - List materialTypeIdForIn = roleService.findRoleAndMaterialTypeByMtId(next); - // 用于存储当前仓库的管理员企业微信userId - StringBuilder sb = new StringBuilder(); - for (RoleAndMaterialType mt : materialTypeIdForIn - ) { - // 获取管理员数据 - UserByPort userByPort = LinkInterfaceUtil.FindUserById(mt.getUid(), userToken); - String workwechat = userByPort.getWorkwechat(); - if (workwechat == null || "".equals(workwechat)) { - workwechat = userByPort.getWechat(); - } - sb.append(workwechat).append(","); + } + // 获取遍历器 + Iterator iterator = MtIdToRecordId.keySet().iterator(); + if (iterator.hasNext()) { + // 获取当前类别 + Long next = iterator.next(); + // 获取入库到当前仓库的订单id + List integerList = MtIdToRecordId.get(next); + // 获取当前类型的管理员 + List materialTypeIdForIn = roleService.findRoleAndMaterialTypeByMtId(next); + // 用于存储当前仓库的管理员企业微信userId + StringBuilder sb = new StringBuilder(); + for (RoleAndMaterialType mt : materialTypeIdForIn + ) { + // 获取管理员数据 + UserByPort userByPort = LinkInterfaceUtil.FindUserById(mt.getUid(), userToken); + String workwechat = userByPort.getWorkwechat(); + if (workwechat == null || "".equals(workwechat)) { + workwechat = userByPort.getWechat(); } - JSONObject jsonObject = qyWxOperationService.sendApprovalTemplateIn(crypt, userToken, integerList, sb.toString()); - String sp_no = jsonObject.getString("sp_no"); - Map QyWxApprovalMap = new HashMap<>(); - QyWxApprovalMap.put("sp_no", sp_no); - QyWxApprovalMap.put("mainId", integerList.toString()); - redisTemplateForHash.opsForHash().putAll(sp_no, QyWxApprovalMap); - // 设置过期为7天 - redisTemplateForHash.expire(sp_no, 7, TimeUnit.DAYS); - + sb.append(workwechat).append(","); } + JSONObject jsonObject = qyWxOperationService.sendApprovalTemplateIn(crypt, userToken, integerList, sb.toString()); + String sp_no = jsonObject.getString("sp_no"); + Map QyWxApprovalMap = new HashMap<>(); + QyWxApprovalMap.put("sp_no", sp_no); + QyWxApprovalMap.put("mainId", integerList.toString()); + redisPool.getRedisTemplateByDb(14).opsForHash().putAll("wms_QyWxMessage_"+sp_no, QyWxApprovalMap); + // 设置过期为7天 + redisPool.getRedisTemplateByDb(14).expire("wms_QyWxMessage_"+sp_no, 7, TimeUnit.DAYS); - Iterator iterator1 = depositoryIdToRecordId.keySet().iterator(); - if (iterator1.hasNext()) { - // 获取当前类别 - Integer next = iterator1.next(); - // 获取入库到当前仓库的订单id - List integerList = depositoryIdToRecordId.get(next); - // 获取当前类型的管理员 - List materialTypeIdForIn = roleService.findRoleAndDepositoryByDid(next); - // 用于存储当前仓库的管理员企业微信userId - StringBuilder sb = new StringBuilder(); - for (RoleAndDepository mt : materialTypeIdForIn - ) { - // 获取管理员数据 - UserByPort userByPort = LinkInterfaceUtil.FindUserById(mt.getUserId(), userToken); - String workwechat = userByPort.getWorkwechat(); - if (workwechat == null || "".equals(workwechat)) { - workwechat = userByPort.getWechat(); - } - sb.append(workwechat).append(","); - } - JSONObject jsonObject = qyWxOperationService.sendApprovalTemplateIn(crypt, userToken, integerList, sb.toString()); - String sp_no = jsonObject.getString("sp_no"); - Map QyWxApprovalMap = new HashMap<>(); - QyWxApprovalMap.put("sp_no", sp_no); - QyWxApprovalMap.put("mainId", integerList.toString()); - redisTemplateForHash.opsForHash().putAll(sp_no, QyWxApprovalMap); - // 设置过期为7天 - redisTemplateForHash.expire(sp_no, 7, TimeUnit.DAYS); + } + Iterator iterator1 = depositoryIdToRecordId.keySet().iterator(); + if (iterator1.hasNext()) { + // 获取当前类别 + Integer next = iterator1.next(); + // 获取入库到当前仓库的订单id + List integerList = depositoryIdToRecordId.get(next); + // 获取当前类型的管理员 + List materialTypeIdForIn = roleService.findRoleAndDepositoryByDid(next); + // 用于存储当前仓库的管理员企业微信userId + StringBuilder sb = new StringBuilder(); + for (RoleAndDepository mt : materialTypeIdForIn + ) { + // 获取管理员数据 + UserByPort userByPort = LinkInterfaceUtil.FindUserById(mt.getUserId(), userToken); + String workwechat = userByPort.getWorkwechat(); + if (workwechat == null || "".equals(workwechat)) { + workwechat = userByPort.getWechat(); + } + sb.append(workwechat).append(","); } + JSONObject jsonObject = qyWxOperationService.sendApprovalTemplateIn(crypt, userToken, integerList, sb.toString()); + String sp_no = jsonObject.getString("sp_no"); + Map QyWxApprovalMap = new HashMap<>(); + QyWxApprovalMap.put("sp_no", sp_no); + QyWxApprovalMap.put("mainId", integerList.toString()); + redisPool.getRedisTemplateByDb(14).opsForHash().putAll("wms_QyWxMessage_"+sp_no, QyWxApprovalMap); + // 设置过期为7天 + redisPool.getRedisTemplateByDb(14).expire("wms_QyWxMessage_"+sp_no, 7, TimeUnit.DAYS); + } - }).start(); + }); } else if ("out".equals(type)) { // 获取部门负责人 - List departmentHeadByUsers = PortConfig.findDepartmentHeadByUser(userToken.getMaindeparment(), userToken); + List 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 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() { - JSONObject jsonObject = qyWxOperationService.sendOutApprovalTemplate(crypt, userToken, ObjectFormatUtil.toInteger(id)); - String sp_no = jsonObject.getString("sp_no"); - Map 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); - // 设置过期为7天 - redisTemplateForHash.expire(sp_no, 7, TimeUnit.DAYS); - } - }).start(); + SendQyWxMessageThreadPool.execute(() -> { + JSONObject jsonObject = qyWxOperationService.sendOutApprovalTemplate(crypt, userToken, ObjectFormatUtil.toInteger(id)); + String sp_no = jsonObject.getString("sp_no"); + Map QyWxApprovalMap = new HashMap<>(); + QyWxApprovalMap.put("sp_no", sp_no); + QyWxApprovalMap.put("mainId", id.toString()); + QyWxApprovalMap.put("otherDepartmentIdList", jsonObject.getString("otherDepartmentIdList")); + redisPool.getRedisTemplateByDb(14).opsForHash().putAll("wms_QyWxMessage_"+sp_no, QyWxApprovalMap); + // 设置过期为7天 + redisPool.getRedisTemplateByDb(14).expire("wms_QyWxMessage_"+sp_no, 7, TimeUnit.DAYS); + }); } } @@ -1612,111 +1511,108 @@ public class DepositoryRecordController { } // 开启一个线程用于发送入库申请 - new Thread(new Runnable() { - @Override - public void run() { - Map> MtIdToRecordId = new HashMap<>(); - Map> 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)) { - Long mtId = mtIdList.get(i); - // 将对应仓库与订单id添加映射关系 - List integers = MtIdToRecordId.get(mtId); - if (integers != null) { - // 如果有对应关系 - integers.add(recordId); - } else { - // 如果没有 - integers = new ArrayList<>(); - integers.add(recordId); - MtIdToRecordId.put(mtId, integers); - } + SendQyWxMessageThreadPool.execute(() -> { + Map> MtIdToRecordId = new HashMap<>(); + Map> depositoryIdToRecordId = new HashMap<>(); + for (int i = 0; i < recordIds.size(); i++) { + Integer recordId = recordIds.get(i); + if (recordId != null) { + // 如果当前id不是空 获取对应的入库仓库id + String type1 = typeList.get(i); + if ("mt".equals(type1)) { + Long mtId = mtIdList.get(i); + // 将对应仓库与订单id添加映射关系 + List integers = MtIdToRecordId.get(mtId); + if (integers != null) { + // 如果有对应关系 + integers.add(recordId); } else { - Integer did = depositoryIdList.get(i); - // 将对应仓库与订单id添加映射关系 - List integers = depositoryIdToRecordId.get(did); - if (integers != null) { - // 如果有对应关系 - integers.add(recordId); - } else { - // 如果没有 - integers = new ArrayList<>(); - integers.add(recordId); - depositoryIdToRecordId.put(did, integers); - } + // 如果没有 + integers = new ArrayList<>(); + integers.add(recordId); + MtIdToRecordId.put(mtId, integers); } + } else { + Integer did = depositoryIdList.get(i); + // 将对应仓库与订单id添加映射关系 + List integers = depositoryIdToRecordId.get(did); + if (integers != null) { + // 如果有对应关系 + integers.add(recordId); + } else { + // 如果没有 + integers = new ArrayList<>(); + integers.add(recordId); + depositoryIdToRecordId.put(did, integers); + } + } - } } - // 获取遍历器 - Iterator iterator = MtIdToRecordId.keySet().iterator(); - if (iterator.hasNext()) { - // 获取当前类别 - Long next = iterator.next(); - // 获取入库到当前仓库的订单id - List integerList = MtIdToRecordId.get(next); - // 获取当前类型的管理员 - List materialTypeIdForIn = roleService.findRoleAndMaterialTypeByMtId(next); - // 用于存储当前仓库的管理员企业微信userId - StringBuilder sb = new StringBuilder(); - for (RoleAndMaterialType mt : materialTypeIdForIn - ) { - // 获取管理员数据 - UserByPort userByPort = LinkInterfaceUtil.FindUserById(mt.getUid(), userToken); - String workwechat = userByPort.getWorkwechat(); - if (workwechat == null || "".equals(workwechat)) { - workwechat = userByPort.getWechat(); - } - sb.append(workwechat).append(","); + } + // 获取遍历器 + Iterator iterator = MtIdToRecordId.keySet().iterator(); + if (iterator.hasNext()) { + // 获取当前类别 + Long next = iterator.next(); + // 获取入库到当前仓库的订单id + List integerList = MtIdToRecordId.get(next); + // 获取当前类型的管理员 + List materialTypeIdForIn = roleService.findRoleAndMaterialTypeByMtId(next); + // 用于存储当前仓库的管理员企业微信userId + StringBuilder sb = new StringBuilder(); + for (RoleAndMaterialType mt : materialTypeIdForIn + ) { + // 获取管理员数据 + UserByPort userByPort = LinkInterfaceUtil.FindUserById(mt.getUid(), userToken); + String workwechat = userByPort.getWorkwechat(); + if (workwechat == null || "".equals(workwechat)) { + workwechat = userByPort.getWechat(); } - JSONObject jsonObject = qyWxOperationService.sendApprovalTemplateIn(crypt, userToken, integerList, sb.toString()); - String sp_no = jsonObject.getString("sp_no"); - Map QyWxApprovalMap = new HashMap<>(); - QyWxApprovalMap.put("sp_no", sp_no); - QyWxApprovalMap.put("mainId", integerList.toString()); - redisTemplateForHash.opsForHash().putAll(sp_no, QyWxApprovalMap); - // 设置过期为7天 - redisTemplateForHash.expire(sp_no, 7, TimeUnit.DAYS); - + sb.append(workwechat).append(","); } + JSONObject jsonObject = qyWxOperationService.sendApprovalTemplateIn(crypt, userToken, integerList, sb.toString()); + String sp_no = jsonObject.getString("sp_no"); + Map QyWxApprovalMap = new HashMap<>(); + QyWxApprovalMap.put("sp_no", sp_no); + QyWxApprovalMap.put("mainId", integerList.toString()); + redisPool.getRedisTemplateByDb(14).opsForHash().putAll("wms_QyWxMessage_"+sp_no, QyWxApprovalMap); + // 设置过期为7天 + redisPool.getRedisTemplateByDb(14).expire("wms_QyWxMessage_"+sp_no, 7, TimeUnit.DAYS); - Iterator iterator1 = depositoryIdToRecordId.keySet().iterator(); - if (iterator1.hasNext()) { - // 获取当前类别 - Integer next = iterator1.next(); - // 获取入库到当前仓库的订单id - List integerList = depositoryIdToRecordId.get(next); - // 获取当前类型的管理员 - List materialTypeIdForIn = roleService.findRoleAndDepositoryByDid(next); - // 用于存储当前仓库的管理员企业微信userId - StringBuilder sb = new StringBuilder(); - for (RoleAndDepository mt : materialTypeIdForIn - ) { - // 获取管理员数据 - UserByPort userByPort = LinkInterfaceUtil.FindUserById(mt.getUserId(), userToken); - String workwechat = userByPort.getWorkwechat(); - if (workwechat == null || "".equals(workwechat)) { - workwechat = userByPort.getWechat(); - } - sb.append(workwechat).append(","); - } - JSONObject jsonObject = qyWxOperationService.sendApprovalTemplateIn(crypt, userToken, integerList, sb.toString()); - String sp_no = jsonObject.getString("sp_no"); - Map QyWxApprovalMap = new HashMap<>(); - QyWxApprovalMap.put("sp_no", sp_no); - QyWxApprovalMap.put("mainId", integerList.toString()); - redisTemplateForHash.opsForHash().putAll(sp_no, QyWxApprovalMap); - // 设置过期为7天 - redisTemplateForHash.expire(sp_no, 7, TimeUnit.DAYS); + } + Iterator iterator1 = depositoryIdToRecordId.keySet().iterator(); + if (iterator1.hasNext()) { + // 获取当前类别 + Integer next = iterator1.next(); + // 获取入库到当前仓库的订单id + List integerList = depositoryIdToRecordId.get(next); + // 获取当前类型的管理员 + List materialTypeIdForIn = roleService.findRoleAndDepositoryByDid(next); + // 用于存储当前仓库的管理员企业微信userId + StringBuilder sb = new StringBuilder(); + for (RoleAndDepository mt : materialTypeIdForIn + ) { + // 获取管理员数据 + UserByPort userByPort = LinkInterfaceUtil.FindUserById(mt.getUserId(), userToken); + String workwechat = userByPort.getWorkwechat(); + if (workwechat == null || "".equals(workwechat)) { + workwechat = userByPort.getWechat(); + } + sb.append(workwechat).append(","); } + JSONObject jsonObject = qyWxOperationService.sendApprovalTemplateIn(crypt, userToken, integerList, sb.toString()); + String sp_no = jsonObject.getString("sp_no"); + Map QyWxApprovalMap = new HashMap<>(); + QyWxApprovalMap.put("sp_no", sp_no); + QyWxApprovalMap.put("mainId", integerList.toString()); + redisPool.getRedisTemplateByDb(14).opsForHash().putAll("wms_QyWxMessage_"+sp_no, QyWxApprovalMap); + // 设置过期为7天 + redisPool.getRedisTemplateByDb(14).expire("wms_QyWxMessage_"+sp_no, 7, TimeUnit.DAYS); + } - }).start(); + }); } else if ("out".equals(type)) { Map mainRecord = new HashMap<>(); Integer sumQuantity = 0; @@ -1725,7 +1621,7 @@ public class DepositoryRecordController { sumQuantity += integer; } // 获取部门负责人 - List departmentHeadByUsers = PortConfig.findDepartmentHeadByUser(userToken.getMaindeparment(), userToken); + List 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 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 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() { - JSONObject jsonObject = qyWxOperationService.sendOutApprovalTemplate(crypt, userToken, ObjectFormatUtil.toInteger(finalId)); - String sp_no = jsonObject.getString("sp_no"); - Map 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); - // 设置过期为7天 - redisTemplateForHash.expire(sp_no, 7, TimeUnit.DAYS); - } - }).start(); + SendQyWxMessageThreadPool.execute(() -> { + JSONObject jsonObject = qyWxOperationService.sendOutApprovalTemplate(crypt, userToken, ObjectFormatUtil.toInteger(finalId)); + String sp_no = jsonObject.getString("sp_no"); + Map QyWxApprovalMap = new HashMap<>(); + QyWxApprovalMap.put("sp_no", sp_no); + QyWxApprovalMap.put("mainId", finalId.toString()); + QyWxApprovalMap.put("otherDepartmentIdList", jsonObject.getString("otherDepartmentIdList")); + redisPool.getRedisTemplateByDb(14).opsForHash().putAll("wms_QyWxMessage_"+sp_no, QyWxApprovalMap); + // 设置过期为7天 + redisPool.getRedisTemplateByDb(14).expire("wms_QyWxMessage_"+sp_no, 7, TimeUnit.DAYS); + }); } if (success == 0) { diff --git a/src/main/java/com/dreamchaser/depository_manage/controller/DownLoadFileController.java b/src/main/java/com/dreamchaser/depository_manage/controller/DownLoadFileController.java index 4bc2d256..bf136ce3 100644 --- a/src/main/java/com/dreamchaser/depository_manage/controller/DownLoadFileController.java +++ b/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"; diff --git a/src/main/java/com/dreamchaser/depository_manage/controller/GroupController.java b/src/main/java/com/dreamchaser/depository_manage/controller/GroupController.java index b07b6219..0d65bec5 100644 --- a/src/main/java/com/dreamchaser/depository_manage/controller/GroupController.java +++ b/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 redisTemplateForHash; + private RedisPool redisPool; @Autowired private RoleService roleService; @@ -458,16 +459,16 @@ public class GroupController { // 获取暂存的数据 List gids = (List) map.get("gids"); // 获取当前已经存在的数据 - List 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 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 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 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 gids = (List) 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 departmentHeadByUsers = PortConfig.findDepartmentHeadByUser(userToken.getMaindeparment(), userToken); + List 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() { - JSONObject jsonObject = qyWxOperationService.sendOutApprovalTemplate(crypt, userToken, ObjectFormatUtil.toInteger(id)); - String sp_no = jsonObject.getString("sp_no"); - Map 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); - // 设置过期为7天 - redisTemplateForHash.expire(sp_no, 7, TimeUnit.DAYS); - } - }).start(); + SendQyWxMessageThreadPool.execute(() -> { + JSONObject jsonObject = qyWxOperationService.sendOutApprovalTemplate(crypt, userToken, ObjectFormatUtil.toInteger(id)); + String sp_no = jsonObject.getString("sp_no"); + Map QyWxApprovalMap = new HashMap<>(); + QyWxApprovalMap.put("sp_no", sp_no); + QyWxApprovalMap.put("mainId", id.toString()); + QyWxApprovalMap.put("otherDepartmentIdList", jsonObject.getString("otherDepartmentIdList")); + redisPool.getRedisTemplateByDb(14).opsForHash().putAll("wms_QyWxMessage_"+sp_no, QyWxApprovalMap); + // 设置过期为7天 + 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 departmentHeadByUsers = PortConfig.findDepartmentHeadByUser(userToken.getMaindeparment(), userToken); + List 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() { - JSONObject jsonObject = qyWxOperationService.sendOutApprovalTemplate(crypt, userToken, ObjectFormatUtil.toInteger(id)); - String sp_no = jsonObject.getString("sp_no"); - Map 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); - // 设置过期为7天 - redisTemplateForHash.expire(sp_no, 7, TimeUnit.DAYS); - } - }).start(); + SendQyWxMessageThreadPool.execute(() -> { + JSONObject jsonObject = qyWxOperationService.sendOutApprovalTemplate(crypt, userToken, ObjectFormatUtil.toInteger(id)); + String sp_no = jsonObject.getString("sp_no"); + Map QyWxApprovalMap = new HashMap<>(); + QyWxApprovalMap.put("sp_no", sp_no); + QyWxApprovalMap.put("mainId", id.toString()); + QyWxApprovalMap.put("otherDepartmentIdList", jsonObject.getString("otherDepartmentIdList")); + redisPool.getRedisTemplateByDb(14).opsForHash().putAll("wms_QyWxMessage_"+sp_no, QyWxApprovalMap); + // 设置过期为7天 + redisPool.getRedisTemplateByDb(14).expire("wms_QyWxMessage_"+sp_no, 7, TimeUnit.DAYS); + }); return CrudUtil.insertHandle(integer, result); } diff --git a/src/main/java/com/dreamchaser/depository_manage/controller/MaterialController.java b/src/main/java/com/dreamchaser/depository_manage/controller/MaterialController.java index b6871f04..0b61b548 100644 --- a/src/main/java/com/dreamchaser/depository_manage/controller/MaterialController.java +++ b/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 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 inventory = materialService.findInventory(map); @@ -167,7 +164,7 @@ public class MaterialController { List list = new ArrayList<>(); Integer total = 0; Integer maindeparment = userToken.getMaindeparment(); - if (!PortConfig.roleAdminorgList.contains(maindeparment)) { + if (!PublicConfig.roleAdminorgList.contains(maindeparment)) { List 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 range = redisTemplate.opsForList().range(key, 0, -1); + List 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 range = redisTemplate.opsForList().range(key, 0, -1); + List range = redisPool.getRedisTemplateByDb(15).opsForList().range(key, 0, -1); List 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 range = redisTemplate.opsForList().range(key, 0, -1); + List range = redisPool.getRedisTemplateByDb(15).opsForList().range(key, 0, -1); List 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 range = redisTemplate.opsForList().range(key, 0, -1); + List 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); } diff --git a/src/main/java/com/dreamchaser/depository_manage/controller/PageController.java b/src/main/java/com/dreamchaser/depository_manage/controller/PageController.java index 981b9711..7fbfbb3e 100644 --- a/src/main/java/com/dreamchaser/depository_manage/controller/PageController.java +++ b/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 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 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 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 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 map = new HashMap<>(); @@ -3010,7 +3006,7 @@ public class PageController { } UserByPort userByPort = AuthenticationTokenPool.getUserToken(token); // 获取当前key值存储在redis中的值 - List range = redisTemplateForHash.opsForList().range("WMS_temporaryValue_In" + userByPort.getNumber(), 0, -1); + List 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 range = redisTemplateForHash.boundListOps("WMS_temporaryValue_Out" + userToken.getNumber()).range(0, -1); + List range = redisPool.getRedisTemplateByDb(15).boundListOps("WMS_temporaryValue_Out" + userToken.getNumber()).range(0, -1); // 获取当前用户是否存在可见仓库 List 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 departmentHeadByUser = PortConfig.findDepartmentHeadByUser(userToken.getMaindeparment(), userToken); + List 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(","); diff --git a/src/main/java/com/dreamchaser/depository_manage/controller/QyWxOperationController.java b/src/main/java/com/dreamchaser/depository_manage/controller/QyWxOperationController.java index ff099684..aeaca3f0 100644 --- a/src/main/java/com/dreamchaser/depository_manage/controller/QyWxOperationController.java +++ b/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 redisTemplate; + RedisPool redisPool; /** * 用于接收企业微信的回调,get方式 @@ -172,7 +173,7 @@ public class QyWxOperationController { return; } // 根据userId获取处理人 - Map portInfo = PortConfig.findUserByQyWxUserId(fromUserName); + Map 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 portInfo = PortConfig.findUserByQyWxUserId(userId); + Map 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 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; diff --git a/src/main/java/com/dreamchaser/depository_manage/controller/StockTakingController.java b/src/main/java/com/dreamchaser/depository_manage/controller/StockTakingController.java index 1d32f8c3..44f10c91 100644 --- a/src/main/java/com/dreamchaser/depository_manage/controller/StockTakingController.java +++ b/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 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 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() { - JSONObject jsonObject = qyWxOperationService.sendApprovalTemplateStockTaking(crypt, userToken, ObjectFormatUtil.toInteger(mainId), QyWxDepartmentManager.toString()); - String sp_no = jsonObject.getString("sp_no"); - Map QyWxApprovalMap = new HashMap<>(); - QyWxApprovalMap.put("sp_no", sp_no); - QyWxApprovalMap.put("mainId", mainId.toString()); - redisTemplateForHash.opsForHash().putAll(sp_no, QyWxApprovalMap); - // 设置过期时间为7天 - redisTemplateForHash.expire(sp_no, 7, TimeUnit.DAYS); - } - }).start(); + SendQyWxMessageThreadPool.execute(() -> { + JSONObject jsonObject = qyWxOperationService.sendApprovalTemplateStockTaking(crypt, userToken, ObjectFormatUtil.toInteger(mainId), QyWxDepartmentManager.toString()); + String sp_no = jsonObject.getString("sp_no"); + Map QyWxApprovalMap = new HashMap<>(); + QyWxApprovalMap.put("sp_no", sp_no); + QyWxApprovalMap.put("mainId", mainId.toString()); + redisPool.getRedisTemplateByDb(14).opsForHash().putAll("wms_QyWxMessage_"+sp_no, QyWxApprovalMap); + // 设置过期时间为7天 + 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 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() { - JSONObject jsonObject = qyWxOperationService.sendApprovalTemplateStockTaking(crypt, userToken, ObjectFormatUtil.toInteger(mainId), QyWxDepartmentManager.toString()); - String sp_no = jsonObject.getString("sp_no"); - Map QyWxApprovalMap = new HashMap<>(); - QyWxApprovalMap.put("sp_no", sp_no); - QyWxApprovalMap.put("mainId", mainId.toString()); - redisTemplateForHash.opsForHash().putAll(sp_no, QyWxApprovalMap); - // 设置过期时间为7天 - redisTemplateForHash.expire(sp_no, 7, TimeUnit.DAYS); - } - }).start(); + SendQyWxMessageThreadPool.execute(() -> { + JSONObject jsonObject = qyWxOperationService.sendApprovalTemplateStockTaking(crypt, userToken, ObjectFormatUtil.toInteger(mainId), QyWxDepartmentManager.toString()); + String sp_no = jsonObject.getString("sp_no"); + Map QyWxApprovalMap = new HashMap<>(); + QyWxApprovalMap.put("sp_no", sp_no); + QyWxApprovalMap.put("mainId", mainId.toString()); + redisPool.getRedisTemplateByDb(14).opsForHash().putAll("wms_QyWxMessage_"+sp_no, QyWxApprovalMap); + // 设置过期时间为7天 + 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 entries = redisTemplateForHash.opsForHash().entries(key); + Map 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 keys = redisTemplateForHash.keys(keyPatten); + Set 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 mainIdList = (List) map.get("mainIdList"); for (Object main : mainIdList ) { - new Thread(new Runnable() { - @Override - public void run() { - JSONObject jsonObject = qyWxOperationService.sendApprovalTemplateStockTaking(crypt, userToken, ObjectFormatUtil.toInteger(main), QyWxDepartmentManager.toString()); - String sp_no = jsonObject.getString("sp_no"); - Map QyWxApprovalMap = new HashMap<>(); - QyWxApprovalMap.put("sp_no", sp_no); - QyWxApprovalMap.put("mainId", main.toString()); - redisTemplateForHash.opsForHash().putAll(sp_no, QyWxApprovalMap); - // 设置过期时间为7天 - redisTemplateForHash.expire(sp_no, 7, TimeUnit.DAYS); - } - }).start(); - } - } else { - // 用于发送审批 - Object finalMainId = mainId; - new Thread(new Runnable() { - @Override - public void run() { - JSONObject jsonObject = qyWxOperationService.sendApprovalTemplateStockTaking(crypt, userToken, ObjectFormatUtil.toInteger(finalMainId), QyWxDepartmentManager.toString()); + SendQyWxMessageThreadPool.execute(() -> { + JSONObject jsonObject = qyWxOperationService.sendApprovalTemplateStockTaking(crypt, userToken, ObjectFormatUtil.toInteger(main), QyWxDepartmentManager.toString()); String sp_no = jsonObject.getString("sp_no"); Map QyWxApprovalMap = new HashMap<>(); QyWxApprovalMap.put("sp_no", sp_no); - QyWxApprovalMap.put("mainId", finalMainId.toString()); - redisTemplateForHash.opsForHash().putAll(sp_no, QyWxApprovalMap); + QyWxApprovalMap.put("mainId", main.toString()); + 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; + SendQyWxMessageThreadPool.execute(() -> { + JSONObject jsonObject = qyWxOperationService.sendApprovalTemplateStockTaking(crypt, userToken, ObjectFormatUtil.toInteger(finalMainId), QyWxDepartmentManager.toString()); + String sp_no = jsonObject.getString("sp_no"); + Map QyWxApprovalMap = new HashMap<>(); + QyWxApprovalMap.put("sp_no", sp_no); + QyWxApprovalMap.put("mainId", finalMainId.toString()); + redisPool.getRedisTemplateByDb(14).opsForHash().putAll("wms_QyWxMessage_"+sp_no, QyWxApprovalMap); + // 设置过期时间为7天 + redisPool.getRedisTemplateByDb(14).expire("wms_QyWxMessage_"+sp_no, 7, TimeUnit.DAYS); + }); } diff --git a/src/main/java/com/dreamchaser/depository_manage/controller/UserController.java b/src/main/java/com/dreamchaser/depository_manage/controller/UserController.java index b8fd7030..3b6955d0 100644 --- a/src/main/java/com/dreamchaser/depository_manage/controller/UserController.java +++ b/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 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 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 accessToAddressByList = accessAddressService.findAccessToAddressByList(stringList); List result = new ArrayList<>(); - for (AccesstoAddress ata:accessToAddressByList - ) { - if(ata.getIschild() == 2){ + for (AccesstoAddress ata : accessToAddressByList + ) { + if (ata.getIschild() == 2) { result.add(ata); } } diff --git a/src/main/java/com/dreamchaser/depository_manage/entity/UserByPort.java b/src/main/java/com/dreamchaser/depository_manage/entity/UserByPort.java index 93db1344..4d091903 100644 --- a/src/main/java/com/dreamchaser/depository_manage/entity/UserByPort.java +++ b/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:超级管 diff --git a/src/main/java/com/dreamchaser/depository_manage/intercepter/UserInterceptor.java b/src/main/java/com/dreamchaser/depository_manage/intercepter/UserInterceptor.java index 9cbaa983..908ba4ee 100644 --- a/src/main/java/com/dreamchaser/depository_manage/intercepter/UserInterceptor.java +++ b/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 pathList = new ArrayList() { - private static final long serialVersionUID = 4264670410720916937L; - { add("/getMaterialAll"); add("/getCaptchaid"); add("/loginOut"); } }; - private static RedisTemplate redisTemplate; + private static RedisPool redisPool; @Autowired - public void setRedisTemplate(RedisTemplate 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 { diff --git a/src/main/java/com/dreamchaser/depository_manage/security/pool/AuthenticationTokenPool.java b/src/main/java/com/dreamchaser/depository_manage/security/pool/AuthenticationTokenPool.java index ab2833ad..e43a2f53 100644 --- a/src/main/java/com/dreamchaser/depository_manage/security/pool/AuthenticationTokenPool.java +++ b/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 { //清除过期令牌 diff --git a/src/main/java/com/dreamchaser/depository_manage/security/pool/SendQyWxMessageThreadPool.java b/src/main/java/com/dreamchaser/depository_manage/security/pool/SendQyWxMessageThreadPool.java new file mode 100644 index 00000000..f8318eac --- /dev/null +++ b/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); + } + +} diff --git a/src/main/java/com/dreamchaser/depository_manage/service/RedisService.java b/src/main/java/com/dreamchaser/depository_manage/service/RedisService.java deleted file mode 100644 index 659e313a..00000000 --- a/src/main/java/com/dreamchaser/depository_manage/service/RedisService.java +++ /dev/null @@ -1,5 +0,0 @@ -package com.dreamchaser.depository_manage.service; - -public interface RedisService { - -} diff --git a/src/main/java/com/dreamchaser/depository_manage/service/impl/CompanyServiceImpl.java b/src/main/java/com/dreamchaser/depository_manage/service/impl/CompanyServiceImpl.java index 68e481bd..b2f83bbe 100644 --- a/src/main/java/com/dreamchaser/depository_manage/service/impl/CompanyServiceImpl.java +++ b/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 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 list = new ArrayList<>(); List> futureList = new ArrayList>(); @@ -167,8 +164,7 @@ public class CompanyServiceImpl implements CompanyService { CompletionService completionService = new ExecutorCompletionService(exs); // 开启对应数目的线程 - for (int i = 0; i < allUserByAdministration.size(); i++) { - ThreeAboutMan threeAboutMan = allUserByAdministration.get(i); + for (ThreeAboutMan threeAboutMan : allUserByAdministration) { // 开启线程 Future 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 completionService = new ExecutorCompletionService(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 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 list = new ArrayList<>(); List> futureList = new ArrayList>(); @@ -539,7 +538,7 @@ public class CompanyServiceImpl implements CompanyService { * @return */ public List findAllUserByAdministration(String id,UserByPort userToken){ - String url = PortConfig.external_url +"/org/govthreeaboutman"; + String url = PublicConfig.external_url +"/org/govthreeaboutman"; Map map = new HashMap<>(); map.put("id",id); map.put("level",0); diff --git a/src/main/java/com/dreamchaser/depository_manage/service/impl/DepositoryRecordServiceImpl.java b/src/main/java/com/dreamchaser/depository_manage/service/impl/DepositoryRecordServiceImpl.java index c05d66bc..e51ade7c 100644 --- a/src/main/java/com/dreamchaser/depository_manage/service/impl/DepositoryRecordServiceImpl.java +++ b/src/main/java/com/dreamchaser/depository_manage/service/impl/DepositoryRecordServiceImpl.java @@ -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 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 param = new HashMap<>(); param.put("mname", mname); List list = materialMapper.findMaterialByCondition(param); @@ -290,43 +289,35 @@ public class DepositoryRecordServiceImpl implements DepositoryRecordService { List applicationOutRecordMinByParent = depositoryRecordMapper.findApplicationOutRecordMinByParent(id); // 开启一个线程去删除redis中的数据 - new Thread(new Runnable() { - @Override - public void run() { - // 获取该用户在redis中的订单记录 - String key = "user:" + recordP.getApplicantId(); - // 获取当前用户所有处理单 - String minRecord = (String) redisTemplate.opsForHash().get(key, "minRecord"); - for (ApplicationOutRecordMin recordMin : - applicationOutRecordMinByParent) { - Inventory inventoryById = materialMapper.findInventoryById(recordMin.getMid()); - inventoryById.setNumberOfTemporary(inventoryById.getNumberOfTemporary() - recordMin.getQuantity()); - materialMapper.updateInventory(inventoryById); - String redisMinRecordKey = "minRecord:" + recordMin.getId(); - minRecord = minRecord.replace(redisMinRecordKey + ",", ""); - if (minRecord.length() == 2) { - // [] - // 如果当前用户已经没有剩余订单,则删除 - redisTemplate.delete(key); - } else { - redisTemplate.opsForHash().put(key, "minRecord", minRecord); - } - redisTemplate.delete(redisMinRecordKey); - + SendQyWxMessageThreadPool.execute(() -> { + // 获取该用户在redis中的订单记录 + String key = "user:" + recordP.getApplicantId(); + // 获取当前用户所有处理单 + String minRecord = (String) redisPool.getRedisTemplateByDb(15).opsForHash().get(key, "minRecord"); + for (ApplicationOutRecordMin recordMin : + applicationOutRecordMinByParent) { + Inventory inventoryById = materialMapper.findInventoryById(recordMin.getMid()); + inventoryById.setNumberOfTemporary(inventoryById.getNumberOfTemporary() - recordMin.getQuantity()); + materialMapper.updateInventory(inventoryById); + String redisMinRecordKey = "minRecord:" + recordMin.getId(); + minRecord = minRecord.replace(redisMinRecordKey + ",", ""); + if (minRecord.length() == 2) { + // [] + // 如果当前用户已经没有剩余订单,则删除 + redisPool.getRedisTemplateByDb(15).delete(key); + } else { + redisPool.getRedisTemplateByDb(15).opsForHash().put(key, "minRecord", minRecord); } - String redisMainRecordKey = "record:" + id; // 设置redis中主订单键值 - redisTemplate.delete(redisMainRecordKey); + redisPool.getRedisTemplateByDb(15).delete(redisMinRecordKey); } - }).start(); + String redisMainRecordKey = "record:" + id; // 设置redis中主订单键值 + redisPool.getRedisTemplateByDb(15).delete(redisMainRecordKey); + + }); // 开启一个线程去删除子订单 - new Thread(new Runnable() { - @Override - public void run() { - depositoryRecordMapper.deleteApplicationOutRecordMinById(id); - } - }).start(); + SendQyWxMessageThreadPool.execute(() -> depositoryRecordMapper.deleteApplicationOutRecordMinById(id)); return integer; } @@ -340,46 +331,36 @@ public class DepositoryRecordServiceImpl implements DepositoryRecordService { Integer integer = depositoryRecordMapper.deleteApplicationOutRecordByIds(list); // 开启一个线程去删除redis中的数据 - new Thread(new Runnable() { - @Override - public void run() { - - - for (ApplicationOutRecord recordP : recordPList - ) { - // 获取该用户在redis中的订单记录 - String key = "user:" + recordP.getApplicantId(); - - List recordMinList = depositoryRecordMapper.findApplicationOutRecordMinByParent(recordP.getId()); - for (ApplicationOutRecordMin recordMin : recordMinList - ) { - // 获取当前用户所有订单 - String minRecord = (String) redisTemplate.opsForHash().get(key, "minRecord"); - - String redisMinRecordKey = "minRecord:" + recordMin.getId(); - minRecord = minRecord.replace(redisMinRecordKey + ",", ""); - if (minRecord.length() == 2) { - // [] - // 如果当前用户已经没有剩余订单,则删除 - redisTemplate.delete(key); - } else { - redisTemplate.opsForHash().put(key, "minRecord", minRecord); - } - redisTemplate.delete(redisMinRecordKey); - } - String redisMainRecordKey = "record:" + recordP.getId(); // 设置redis中主订单键值 - redisTemplate.delete(redisMainRecordKey); - } - - } - }).start(); + SendQyWxMessageThreadPool.execute(() -> { + for (ApplicationOutRecord recordP : recordPList + ) { + // 获取该用户在redis中的订单记录 + String key = "user:" + recordP.getApplicantId(); + + List recordMinList = depositoryRecordMapper.findApplicationOutRecordMinByParent(recordP.getId()); + for (ApplicationOutRecordMin recordMin : recordMinList + ) { + // 获取当前用户所有订单 + String minRecord = (String) redisPool.getRedisTemplateByDb(15).opsForHash().get(key, "minRecord"); + + String redisMinRecordKey = "minRecord:" + recordMin.getId(); + minRecord = minRecord.replace(redisMinRecordKey + ",", ""); + if (minRecord.length() == 2) { + // [] + // 如果当前用户已经没有剩余订单,则删除 + redisPool.getRedisTemplateByDb(15).delete(key); + } else { + redisPool.getRedisTemplateByDb(15).opsForHash().put(key, "minRecord", minRecord); + } + redisPool.getRedisTemplateByDb(15).delete(redisMinRecordKey); + } + String redisMainRecordKey = "record:" + recordP.getId(); // 设置redis中主订单键值 + redisPool.getRedisTemplateByDb(15).delete(redisMainRecordKey); + } + + }); // 开启一个线程用于删除 - 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> futureListForToday = new ArrayList>(); // 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> futureListForYesterday = new ArrayList>(); // 1.定义CompletionService @@ -1115,30 +1098,27 @@ public class DepositoryRecordServiceImpl implements DepositoryRecordService { updateApplicationMinOutInfo(id, applicationOutMinById, record, trueOut, userByPort, placeId, userAgent); // 更新入库批次中的物料数量 - new Thread(new Runnable() { - @Override - public void run() { - // 获取出库物料id - Integer mid = inventory.getId(); - // 获取当前物料对应的生产日期 - List materialAndProducedDateByMid = materialMapper.findMaterialAndProducedDateByMid(mid); - if (materialAndProducedDateByMid.size() > 0) { - // 获取距今生产日期远的(即生产日期最早的) - for (MaterialAndProducedDate materialAndProducedDate : - materialAndProducedDateByMid) { - if (materialAndProducedDate.getInventory() > quantity) { - // 设置使用的数量 - materialAndProducedDate.setExpendnum(materialAndProducedDate.getExpendnum() + (int) quantity); - // 设置剩余的数量 - materialAndProducedDate.setInventory(materialAndProducedDate.getInventory() - (int) quantity); - materialMapper.updateMaterialAndProducedDate(materialAndProducedDate); - // 跳出循环 - break; - } - } - } - } - }).start(); + SendQyWxMessageThreadPool.execute(() -> { + // 获取出库物料id + Integer mid1 = inventory.getId(); + // 获取当前物料对应的生产日期 + List materialAndProducedDateByMid = materialMapper.findMaterialAndProducedDateByMid(mid1); + if (materialAndProducedDateByMid.size() > 0) { + // 获取距今生产日期远的(即生产日期最早的) + for (MaterialAndProducedDate materialAndProducedDate : + materialAndProducedDateByMid) { + if (materialAndProducedDate.getInventory() > quantity) { + // 设置使用的数量 + materialAndProducedDate.setExpendnum(materialAndProducedDate.getExpendnum() + (int) quantity); + // 设置剩余的数量 + materialAndProducedDate.setInventory(materialAndProducedDate.getInventory() - (int) quantity); + materialMapper.updateMaterialAndProducedDate(materialAndProducedDate); + // 跳出循环 + break; + } + } + } + }); } else { restResponse.setStatus(508); restResponse.setData(""); @@ -1970,9 +1950,9 @@ public class DepositoryRecordServiceImpl implements DepositoryRecordService { Map 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 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 portInfo = PortConfig.findUserByQyWxUserId(userId); + Map portInfo = PublicConfig.findUserByQyWxUserId(userId); UserByPort userByPort = (UserByPort) portInfo.get("user"); // 用于标志是否更新当前申请明细 @@ -2350,7 +2325,7 @@ public class DepositoryRecordServiceImpl implements DepositoryRecordService { // 仓库管理员订单信息 Map 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() { - JSONObject jsonObject = qyWxOperationService.sendNotificationToDepositoryManager(QyWxUid.toString(), applicationOutRecordMin.getId(), userAgent); - } - }).start(); + SendQyWxMessageThreadPool.execute(() -> { + JSONObject jsonObject = qyWxOperationService.sendNotificationToDepositoryManager(QyWxUid.toString(), applicationOutRecordMin.getId(), userAgent); + }); } else { // 如果是通过仓库 @@ -2405,7 +2377,7 @@ public class DepositoryRecordServiceImpl implements DepositoryRecordService { // 仓库管理员订单信息 Map 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() { - JSONObject jsonObject = qyWxOperationService.sendNotificationToDepositoryManager(QyWxUid.toString(), applicationOutRecordMin.getId(), userAgent); - } - }).start(); + + SendQyWxMessageThreadPool.execute(() -> { + JSONObject jsonObject = qyWxOperationService.sendNotificationToDepositoryManager(QyWxUid.toString(), applicationOutRecordMin.getId(), userAgent); + }); } } // 将主订单插入到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 departmentHeadByUser = PortConfig.findDepartmentHeadByUser(ObjectFormatUtil.toInteger(adminorg),null); + List 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 qyWxLabelUserList = QyWxConfig.getQyWxLabelUserList(userAgent); for (String s : qyWxLabelUserList) { - Map userByQyWxUserId = PortConfig.findUserByQyWxUserId(s); + Map 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 portInfo = PortConfig.findUserByQyWxUserId(userId); + Map portInfo = PublicConfig.findUserByQyWxUserId(userId); UserByPort userByPort = (UserByPort) portInfo.get("user"); Map 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 departmentHeadByUser = PortConfig.findDepartmentHeadByUser(ObjectFormatUtil.toInteger(adminorg),null); + List 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 departmentHeadByUser = PortConfig.findDepartmentHeadByUser(361,userToken); + List departmentHeadByUser = PublicConfig.findDepartmentHeadByUser(361,userToken); for (UserByPort userByPort : departmentHeadByUser) { depositoryManager.append(userByPort.getId()).append(","); @@ -2924,21 +2894,18 @@ public class DepositoryRecordServiceImpl implements DepositoryRecordService { // 向仓储中心负责人发送新的消息 - new Thread(new Runnable() { - @Override - public void run() { - JSONObject jsonObject = qyWxOperationService.sendQyWxToApplicationOutMessage(QyWxUid.toString(), ObjectFormatUtil.toInteger(id), false, userAgent); - // 将当前返回结果保存到redis中 - Map QyWxMessageMap = new HashMap<>(); - QyWxMessageMap.put("MsgId", jsonObject.getString("msgid")); - QyWxMessageMap.put("responseCode", jsonObject.getString("response_code")); - // key user:300450:QyWxOut:1 - // 部门负责人number - redisTemplate.opsForHash().putAll("user:" + userToken.getNumber() + ":QyWxOutId:" + id, QyWxMessageMap); - // 设置过期时间为三天 - redisTemplate.expire("user:" + userToken.getNumber() + ":QyWxOutId:" + id, 72, TimeUnit.HOURS); - } - }).start(); + SendQyWxMessageThreadPool.execute(() -> { + JSONObject jsonObject = qyWxOperationService.sendQyWxToApplicationOutMessage(QyWxUid.toString(), ObjectFormatUtil.toInteger(id), false, userAgent); + // 将当前返回结果保存到redis中 + Map QyWxMessageMap = new HashMap<>(); + QyWxMessageMap.put("MsgId", jsonObject.getString("msgid")); + QyWxMessageMap.put("responseCode", jsonObject.getString("response_code")); + // key user:300450:QyWxOut:1 + // 部门负责人number + redisPool.getRedisTemplateByDb(15).opsForHash().putAll("user:" + userToken.getNumber() + ":QyWxOutId:" + id, QyWxMessageMap); + // 设置过期时间为三天 + redisPool.getRedisTemplateByDb(15).expire("user:" + userToken.getNumber() + ":QyWxOutId:" + id, 72, TimeUnit.HOURS); + }); } else { @@ -2951,41 +2918,35 @@ public class DepositoryRecordServiceImpl implements DepositoryRecordService { // 开启线程更改其他用户卡片模板样式 String finalResult = result; - new Thread(new Runnable() { - @Override - public void run() { - // 获取responseCode(key为申请人number) - //获取申请人信息 - String key = "user:" + applicantUser.getNumber() + ":QyWxOutId:" + id; - String responseCode = (String) redisTemplate.opsForHash().get(key, "responseCode"); - qyWxOperationService.updateButtonTemplateCardToUnEnable(responseCode, userToken.getName(), finalResult, userAgent); - } - }).start(); + SendQyWxMessageThreadPool.execute(() -> { + // 获取responseCode(key为申请人number) + //获取申请人信息 + String key = "user:" + applicantUser.getNumber() + ":QyWxOutId:" + id; + String responseCode = (String) redisPool.getRedisTemplateByDb(15).opsForHash().get(key, "responseCode"); + qyWxOperationService.updateButtonTemplateCardToUnEnable(responseCode, userToken.getName(), finalResult, userAgent); + }); // 开启流程通知其他人忽略审批流程 - new Thread(new Runnable() { - @Override - public void run() { - String departmenthead = record.getDepartmenthead(); - String[] split = departmenthead.split(","); - StringBuilder QyWxUid = new StringBuilder(); - for (int i = 0; i < split.length; i++) { - String s = split[i]; - if ("".equals(s)) { - continue; - } - UserByPort userByPort = LinkInterfaceUtil.FindUserById(ObjectFormatUtil.toInteger(s), null); - String workwechat = userByPort.getWorkwechat(); - if (workwechat == null || "".equals(workwechat)) { - workwechat = userByPort.getWechat(); - } -// QyWxUid.append(workwechat).append(","); + SendQyWxMessageThreadPool.execute(() -> { + String departmenthead = record.getDepartmenthead(); + String[] split = departmenthead.split(","); + StringBuilder QyWxUid = new StringBuilder(); + for (int i = 0; i < split.length; i++) { + String s = split[i]; + if ("".equals(s)) { + continue; } - String s = QyWxUid.toString(); - s = "PangFuZhen,"; - qyWxOperationService.sendMessageForOtherUserByCard(ObjectFormatUtil.toInteger(id), s, userAgent, 1); + UserByPort userByPort = LinkInterfaceUtil.FindUserById(ObjectFormatUtil.toInteger(s), null); + String workwechat = userByPort.getWorkwechat(); + if (workwechat == null || "".equals(workwechat)) { + workwechat = userByPort.getWechat(); + } +// QyWxUid.append(workwechat).append(","); } - }).start(); + String s = QyWxUid.toString(); + s = "PangFuZhen,"; + qyWxOperationService.sendMessageForOtherUserByCard(ObjectFormatUtil.toInteger(id), s, userAgent, 1); + }); } else { String result = ""; @@ -3078,7 +3039,7 @@ public class DepositoryRecordServiceImpl implements DepositoryRecordService { // 仓库管理员订单信息 Map 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() { - JSONObject jsonObject = qyWxOperationService.sendNotificationToDepositoryManager(QyWxUid.toString(), applicationOutRecordMin.getId(), userAgent); - } - }).start(); + SendQyWxMessageThreadPool.execute(() -> { + JSONObject jsonObject = qyWxOperationService.sendNotificationToDepositoryManager(QyWxUid.toString(), applicationOutRecordMin.getId(), userAgent); + }); } else { // 如果是通过仓库 @@ -3134,7 +3092,7 @@ public class DepositoryRecordServiceImpl implements DepositoryRecordService { // 仓库管理员订单信息 Map 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,44 +3112,38 @@ 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() { - JSONObject jsonObject = qyWxOperationService.sendNotificationToDepositoryManager(QyWxUid.toString(), applicationOutRecordMin.getId(), userAgent); - } - }).start(); + SendQyWxMessageThreadPool.execute(() -> { + JSONObject jsonObject = qyWxOperationService.sendNotificationToDepositoryManager(QyWxUid.toString(), applicationOutRecordMin.getId(), userAgent); + }); } } // 开启流程通知其他人忽略审批流程 - new Thread(new Runnable() { - @Override - public void run() { - String depositoryManager = record.getDepositoryManager(); - String[] split = depositoryManager.split(","); - StringBuilder QyWxUid = new StringBuilder(); - for (String s : split) { - if ("".equals(s)) { - continue; - } - UserByPort userByPort = LinkInterfaceUtil.FindUserById(ObjectFormatUtil.toInteger(s), null); - String workwechat = userByPort.getWorkwechat(); - if (workwechat == null || "".equals(workwechat)) { - workwechat = userByPort.getWechat(); - } -// QyWxUid.append(workwechat).append(","); + SendQyWxMessageThreadPool.execute(() -> { + String depositoryManager = record.getDepositoryManager(); + String[] split = depositoryManager.split(","); + StringBuilder QyWxUid = new StringBuilder(); + for (String s : split) { + if ("".equals(s)) { + continue; + } + UserByPort userByPort = LinkInterfaceUtil.FindUserById(ObjectFormatUtil.toInteger(s), null); + String workwechat = userByPort.getWorkwechat(); + if (workwechat == null || "".equals(workwechat)) { + workwechat = userByPort.getWechat(); } - String s = QyWxUid.toString(); - s = "PangFuZhen,"; - qyWxOperationService.sendMessageForOtherUserByCard(ObjectFormatUtil.toInteger(id), s, userAgent, 1); +// QyWxUid.append(workwechat).append(","); } - }).start(); + String s = QyWxUid.toString(); + s = "PangFuZhen,"; + qyWxOperationService.sendMessageForOtherUserByCard(ObjectFormatUtil.toInteger(id), s, userAgent, 1); + }); // 将主订单插入到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() { - // 获取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"); - qyWxOperationService.updateButtonTemplateCardToUnEnable(responseCode, userToken.getName(), finalResult, userAgent); - } - }).start(); + SendQyWxMessageThreadPool.execute(() -> { + // 获取responseCode(key为申请人number) + //获取部门负责人信息 + UserByPort departHead = LinkInterfaceUtil.FindUserById(ObjectFormatUtil.toInteger(record.getDepartmenthead()), userToken); + String key = "user:" + departHead.getNumber() + ":QyWxOutId:" + id; + String responseCode = (String) redisPool.getRedisTemplateByDb(15).opsForHash().get(key, "responseCode"); + qyWxOperationService.updateButtonTemplateCardToUnEnable(responseCode, userToken.getName(), finalResult, userAgent); + }); } map.put("id", id); return depositoryRecordMapper.updateApplicationOutRecord(map); @@ -3357,7 +3306,7 @@ public class DepositoryRecordServiceImpl implements DepositoryRecordService { // 点击用户 String fromUserName = templateCard.getFromUserName(); // 根据userId获取处理人 - Map portInfo = PortConfig.findUserByQyWxUserId(fromUserName); + Map 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 departmentHeadByUser = PortConfig.findDepartmentHeadByUser(361,null); + List 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 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() { - JSONObject jsonObject = qyWxOperationService.sendNotificationToDepositoryManager(QyWxUid.toString(), applicationOutRecordMin.getId(), userAgent); - } - }).start(); + SendQyWxMessageThreadPool.execute(() -> { + JSONObject jsonObject = qyWxOperationService.sendNotificationToDepositoryManager(QyWxUid.toString(), applicationOutRecordMin.getId(), userAgent); + }); } // 将主订单插入到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() { - if (Integer.compare(record.getAirapproverPass(), 4) == 0 || Integer.compare(record.getAirapproverPass(), 1) == 0) { - // 如果已经入库 - updateInventoryForErrorInRecord(record.getMid(), record.getQuantity(), record.getAirUnit(), record.getPlaceId(), record.getDepositoryId()); - } + 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 list, UserByPort userToken, String userAgent) { List applicationInRecordsByIds = depositoryRecordMapper.findApplicationInRecordsByIds(list); - new Thread(new Runnable() { - @Override - public void run() { - 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()); - } + 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)) { diff --git a/src/main/java/com/dreamchaser/depository_manage/service/impl/DepositoryServiceImpl.java b/src/main/java/com/dreamchaser/depository_manage/service/impl/DepositoryServiceImpl.java index ce32a8ab..effbcd56 100644 --- a/src/main/java/com/dreamchaser/depository_manage/service/impl/DepositoryServiceImpl.java +++ b/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> futureList = new ArrayList>(); @@ -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> futureList = new ArrayList>(); @@ -966,7 +965,9 @@ public class DepositoryServiceImpl implements DepositoryService { // 定义树结构结果集 List 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> futureList = new ArrayList>(); diff --git a/src/main/java/com/dreamchaser/depository_manage/service/impl/ExcelServiceImpl.java b/src/main/java/com/dreamchaser/depository_manage/service/impl/ExcelServiceImpl.java index 0e68eb88..47d205c4 100644 --- a/src/main/java/com/dreamchaser/depository_manage/service/impl/ExcelServiceImpl.java +++ b/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>> futureList = new ArrayList>>(); @@ -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>> futureList = new ArrayList>>(); @@ -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>> futureList = new ArrayList>>(); @@ -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()); } diff --git a/src/main/java/com/dreamchaser/depository_manage/service/impl/GroupServiceImpl.java b/src/main/java/com/dreamchaser/depository_manage/service/impl/GroupServiceImpl.java index 9cd7142c..38d804ef 100644 --- a/src/main/java/com/dreamchaser/depository_manage/service/impl/GroupServiceImpl.java +++ b/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 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> futureList = new ArrayList>(); @@ -781,67 +784,64 @@ public class GroupServiceImpl implements GroupService { // 开启一个线程用于发送审批 - new Thread(new Runnable() { - @Override - public void run() { - Map> mtIdToRecordId = new HashMap<>(); - for (int i = 0; i < recordIds.size(); i++) { - Integer recordId = recordIds.get(i); - if (recordId != null) { - // 如果当前id不是空 获取对应的入库仓库id - Long mtId = mtIdList.get(i); - // 将对应仓库与订单id添加映射关系 - List integers = mtIdToRecordId.get(mtId); - if (integers != null) { - // 如果有对应关系 - integers.add(recordId); - } else { - // 如果没有 - integers = new ArrayList<>(); - integers.add(recordId); - mtIdToRecordId.put(mtId, integers); - } + SendQyWxMessageThreadPool.execute(() -> { + Map> mtIdToRecordId = new HashMap<>(); + for (int i = 0; i < recordIds.size(); i++) { + Integer recordId = recordIds.get(i); + if (recordId != null) { + // 如果当前id不是空 获取对应的入库仓库id + Long mtId = mtIdList.get(i); + // 将对应仓库与订单id添加映射关系 + List integers = mtIdToRecordId.get(mtId); + if (integers != null) { + // 如果有对应关系 + integers.add(recordId); + } else { + // 如果没有 + integers = new ArrayList<>(); + integers.add(recordId); + mtIdToRecordId.put(mtId, integers); } } - // 获取遍历器 - Iterator iterator = mtIdToRecordId.keySet().iterator(); - if (iterator.hasNext()) { - // 获取当前仓库 - Long next = iterator.next(); - // 获取入库到当前仓库的订单id - List integerList = mtIdToRecordId.get(next); - - - // 获取当前类型的管理员 - Map paramForMtManagers = new HashMap<>(); - paramForMtManagers.put("mtid",next); - List materialTypeIdForIn = roleMapper.findRoleAndMaterialTypeByCondition(paramForMtManagers); - // 用于存储当前仓库的管理员企业微信userId - StringBuilder sb = new StringBuilder(); - for (RoleAndMaterialType mt : materialTypeIdForIn - ) { - // 获取管理员数据 - UserByPort userByPort = LinkInterfaceUtil.FindUserById(mt.getUid(), userToken); - String workwechat = userByPort.getWorkwechat(); - if (workwechat == null || "".equals(workwechat)) { - workwechat = userByPort.getWechat(); - } - sb.append(workwechat).append(","); + } + // 获取遍历器 + Iterator iterator = mtIdToRecordId.keySet().iterator(); + if (iterator.hasNext()) { + // 获取当前仓库 + Long next = iterator.next(); + // 获取入库到当前仓库的订单id + List integerList = mtIdToRecordId.get(next); + + + // 获取当前类型的管理员 + Map paramForMtManagers = new HashMap<>(); + paramForMtManagers.put("mtid",next); + List materialTypeIdForIn = roleMapper.findRoleAndMaterialTypeByCondition(paramForMtManagers); + // 用于存储当前仓库的管理员企业微信userId + StringBuilder sb = new StringBuilder(); + for (RoleAndMaterialType mt : materialTypeIdForIn + ) { + // 获取管理员数据 + UserByPort userByPort = LinkInterfaceUtil.FindUserById(mt.getUid(), userToken); + String workwechat = userByPort.getWorkwechat(); + if (workwechat == null || "".equals(workwechat)) { + workwechat = userByPort.getWechat(); } - JSONObject jsonObject = qyWxOperationService.sendApprovalTemplateIn(userAgent, userToken, integerList, sb.toString()); - String sp_no = jsonObject.getString("sp_no"); - Map QyWxApprovalMap = new HashMap<>(); - QyWxApprovalMap.put("sp_no", sp_no); - QyWxApprovalMap.put("mainId", integerList.toString()); - QyWxApprovalMap.put("mainGidId", showRecordIds.toString()); - redisTemplate.opsForHash().putAll(sp_no, QyWxApprovalMap); - // 设置过期为7天 - redisTemplate.expire(sp_no, 7, TimeUnit.DAYS); - + sb.append(workwechat).append(","); } + JSONObject jsonObject = qyWxOperationService.sendApprovalTemplateIn(userAgent, userToken, integerList, sb.toString()); + String sp_no = jsonObject.getString("sp_no"); + Map QyWxApprovalMap = new HashMap<>(); + QyWxApprovalMap.put("sp_no", sp_no); + QyWxApprovalMap.put("mainId", integerList.toString()); + QyWxApprovalMap.put("mainGidId", showRecordIds.toString()); + redisPool.getRedisTemplateByDb(14).opsForHash().putAll("wms_QyWxMessage_"+sp_no, QyWxApprovalMap); + // 设置过期为7天 + 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 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> futureList = new ArrayList>(); diff --git a/src/main/java/com/dreamchaser/depository_manage/service/impl/MaterialServiceImpl.java b/src/main/java/com/dreamchaser/depository_manage/service/impl/MaterialServiceImpl.java index 4596c86d..5a95843b 100644 --- a/src/main/java/com/dreamchaser/depository_manage/service/impl/MaterialServiceImpl.java +++ b/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 redisTemplate; + RedisPool redisPool; @Autowired SplitUnitMapper splitUnitMapper; @@ -1312,7 +1313,7 @@ public class MaterialServiceImpl implements MaterialService { parentMt = materialTypeMapper.findMaterialTypeByOldId(parentMt.getParentId()); } - List objectList = redisTemplate.opsForList().range("wms_materialTree_result", 0, -1); + List 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 objectList = redisTemplate.opsForList().range("wms_materialTree_result", 0, -1); + List 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 objectList = redisTemplate.opsForList().range("wms_materialTree_result", 0, -1); + List 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 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 list = new ArrayList<>(); List> futureList = new ArrayList>(); @@ -1999,7 +2002,9 @@ public class MaterialServiceImpl implements MaterialService { List 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 list = new ArrayList<>(); List> futureList = new ArrayList>(); @@ -2036,7 +2041,9 @@ public class MaterialServiceImpl implements MaterialService { public List InitTreeMenus(String mname) { List 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 list = new ArrayList<>(); List> futureList = new ArrayList>(); @@ -2377,7 +2384,7 @@ public class MaterialServiceImpl implements MaterialService { public List InitTreeMenus_Test() { List list = new ArrayList<>(); - List wms_materialTree_result = redisTemplate.opsForList().range("wms_materialTree_result", 0, -1); + List 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 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> futureList = new ArrayList>(); @@ -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 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> futureList = new ArrayList>(); @@ -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 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 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> futureList = new ArrayList>(); @@ -3099,7 +3114,9 @@ public class MaterialServiceImpl implements MaterialService { List 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> futureList = new ArrayList>(); diff --git a/src/main/java/com/dreamchaser/depository_manage/service/impl/MaterialTypeServiceImpl.java b/src/main/java/com/dreamchaser/depository_manage/service/impl/MaterialTypeServiceImpl.java index f5905aa7..6adbfb40 100644 --- a/src/main/java/com/dreamchaser/depository_manage/service/impl/MaterialTypeServiceImpl.java +++ b/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 list = new ArrayList<>(); // 线程结果集 diff --git a/src/main/java/com/dreamchaser/depository_manage/service/impl/NoticeServiceImpl.java b/src/main/java/com/dreamchaser/depository_manage/service/impl/NoticeServiceImpl.java index b0e71d24..afe95129 100644 --- a/src/main/java/com/dreamchaser/depository_manage/service/impl/NoticeServiceImpl.java +++ b/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); diff --git a/src/main/java/com/dreamchaser/depository_manage/service/impl/QyWxOperationService.java b/src/main/java/com/dreamchaser/depository_manage/service/impl/QyWxOperationService.java index e0f4cf77..923c8cf0 100644 --- a/src/main/java/com/dreamchaser/depository_manage/service/impl/QyWxOperationService.java +++ b/src/main/java/com/dreamchaser/depository_manage/service/impl/QyWxOperationService.java @@ -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 redisTemplate; - @Autowired StockTakingMapper stockTakingMapper; @@ -1437,7 +1428,7 @@ public class QyWxOperationService { List userIdList = new ArrayList<>(); - List departmentHeadForUserToken = PortConfig.findDepartmentHeadByUser(userToken.getMaindeparment(), userToken); + List 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 departmentHeadByUser = PortConfig.findDepartmentHeadByUser(ObjectFormatUtil.toInteger(adminorg), userToken); + List 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 contact_principal = new HashMap<>(); String workwechat1 = userByPort.getWorkwechat(); if (workwechat1 == null || "".equals(workwechat1)) { diff --git a/src/main/java/com/dreamchaser/depository_manage/service/impl/RedisServiceImpl.java b/src/main/java/com/dreamchaser/depository_manage/service/impl/RedisServiceImpl.java deleted file mode 100644 index 46c0db4d..00000000 --- a/src/main/java/com/dreamchaser/depository_manage/service/impl/RedisServiceImpl.java +++ /dev/null @@ -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 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类型key,String类型value,过期时间timeout,TimeUnit - * - * @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类型key,Object类型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 getObjectValue(String key, Class 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类型keys - * - * @param keys - * @author shy - * @date 2018年11月13日 下午3:15:16 - */ - public void removeMultiStringKey(Collection 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 queryStringKeys(String key) { - return redisTemplate.keys(key + "*"); - } - -} - diff --git a/src/main/java/com/dreamchaser/depository_manage/service/impl/StockTakingServiceImpl.java b/src/main/java/com/dreamchaser/depository_manage/service/impl/StockTakingServiceImpl.java index 36ebc167..70feb33b 100644 --- a/src/main/java/com/dreamchaser/depository_manage/service/impl/StockTakingServiceImpl.java +++ b/src/main/java/com/dreamchaser/depository_manage/service/impl/StockTakingServiceImpl.java @@ -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 redisTemplate; + private RedisPool redisPool; @Autowired MaterialMapper materialMapper; @@ -151,11 +151,11 @@ public class StockTakingServiceImpl implements StockTakingService { // 定义用于存储仓库与当前对应关系的map Map> 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,29 +568,26 @@ 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(); // if(workwechat == null || "".equals(workwechat)){ // workwechat = originator.getWechat(); // } - JSONObject jsonObject = qyWxOperationService.sendQyWxToStockTakingMessage("PangFuZhen,", mainId, normalMinId, userAgent); + JSONObject jsonObject = qyWxOperationService.sendQyWxToStockTakingMessage("PangFuZhen,", mainId, normalMinId, userAgent); // JSONObject jsonObject = qyWxOperationService.sendQyWxToStockTakingMessage(workwechat, mainId, normalMinId, userAgent); - // 将当前返回结果保存到redis中 - if (jsonObject != null) { - Map QyWxMessageMap = new HashMap<>(); - QyWxMessageMap.put("MsgId", jsonObject.getString("msgid")); - QyWxMessageMap.put("responseCode", jsonObject.getString("response_code")); - // key user:300450:QyWxOut:1 - redisTemplate.opsForHash().putAll("user:" + userToken.getNumber() + ":QyWxStockTakingCompleteId:" + mainId, QyWxMessageMap); - // 设置过期时间为三天 - redisTemplate.expire("user:" + userToken.getNumber() + ":QyWxStockTakingCompleteId:" + mainId, 72, TimeUnit.HOURS); - } + // 将当前返回结果保存到redis中 + if (jsonObject != null) { + Map QyWxMessageMap = new HashMap<>(); + QyWxMessageMap.put("MsgId", jsonObject.getString("msgid")); + QyWxMessageMap.put("responseCode", jsonObject.getString("response_code")); + // key user:300450:QyWxOut:1 + redisPool.getRedisTemplateByDb(14).opsForHash().putAll("user:" + userToken.getNumber() + ":QyWxStockTakingCompleteId:" + mainId, QyWxMessageMap); + // 设置过期时间为三天 + 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() { - String departmentManager1 = mainRecord.getDepartmentManager(); - String[] split = departmentManager1.split(","); - StringBuilder QyWxUid = new StringBuilder(); - for (String s : split) { - if ("".equals(s.trim())) { - continue; - } - UserByPort userByPort = PortConfig.findUserByPortByNumber(s); - String workwechat = userByPort.getWorkwechat(); - if (workwechat == null || "".equals(workwechat)) { - workwechat = userByPort.getWechat(); - } - QyWxUid.append(workwechat).append(","); + SendQyWxMessageThreadPool.execute(() -> { + String departmentManager1 = mainRecord.getDepartmentManager(); + String[] split1 = departmentManager1.split(","); + StringBuilder QyWxUid1 = new StringBuilder(); + for (String s : split1) { + if ("".equals(s.trim())) { + continue; } - String s = QyWxUid.toString(); - s = "PangFuZhen,"; - qyWxOperationService.sendMessageForOtherUserByCard(ObjectFormatUtil.toInteger(mainId), s, userAgent, 2); + UserByPort userByPort = PublicConfig.findUserByPortByNumber(s); + String workwechat = userByPort.getWorkwechat(); + if (workwechat == null || "".equals(workwechat)) { + workwechat = userByPort.getWechat(); + } + QyWxUid1.append(workwechat).append(","); } - }).start(); + String s = QyWxUid1.toString(); + s = "PangFuZhen,"; + qyWxOperationService.sendMessageForOtherUserByCard(ObjectFormatUtil.toInteger(mainId), s, userAgent, 2); + }); 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() { - String s = QyWxUid.toString(); - s = "PangFuZhen,"; - JSONObject jsonObject = qyWxOperationService.sendCcStockTakingMessageToHead(s, map, userToken, mainRecord, userAgent); - } - }).start(); + SendQyWxMessageThreadPool.execute(() -> { + String s = QyWxUid.toString(); + s = "PangFuZhen,"; + JSONObject jsonObject = qyWxOperationService.sendCcStockTakingMessageToHead(s, map, userToken, mainRecord, userAgent); + }); // 更新其他卡片 - 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() + ":QyWxStockTakingCompleteId:" + mainId; - String responseCode = (String) redisTemplate.opsForHash().get(key, "responseCode"); - qyWxOperationService.updateButtonTemplateCardToUnEnable(responseCode, userToken.getName(), "处理", userAgent); - } - }).start(); + 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) redisPool.getRedisTemplateByDb(14).opsForHash().get(key, "responseCode"); + qyWxOperationService.updateButtonTemplateCardToUnEnable(responseCode, userToken.getName(), "处理", userAgent); + }); return result; } @@ -1187,7 +1161,7 @@ public class StockTakingServiceImpl implements StockTakingService { // 点击用户 String fromUserName = templateCard.getFromUserName(); // 根据userId获取处理人 - Map portInfo = PortConfig.findUserByQyWxUserId(fromUserName); + Map 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,30 +1644,27 @@ public class StockTakingServiceImpl implements StockTakingService { // 开启一个线程用于发送抄送信息给负责人 StockTaking finalMainRecord = mainRecord; - new Thread(new Runnable() { - @Override - public void run() { - map.put("minIds", minIds); - String departmentManager = mainRecord.getDepartmentManager(); - StringBuilder QyWxUid = new StringBuilder(); - String[] split = departmentManager.split(","); - for (int i = 0; i < split.length; i++) { - String s = split[i]; - if ("".equals(s.trim())) { - continue; - } - UserByPort userByPort1 = PortConfig.findUserByPortByNumber(s); - String workwechat = userByPort1.getWorkwechat(); - if (workwechat == null || "".equals(workwechat)) { - workwechat = userByPort1.getWechat(); - } - QyWxUid.append(workwechat).append(","); + SendQyWxMessageThreadPool.execute(() -> { + map.put("minIds", minIds); + String departmentManager = mainRecord.getDepartmentManager(); + StringBuilder QyWxUid = new StringBuilder(); + String[] split = departmentManager.split(","); + for (int i = 0; i < split.length; i++) { + String s = split[i]; + if ("".equals(s.trim())) { + continue; + } + UserByPort userByPort1 = PublicConfig.findUserByPortByNumber(s); + String workwechat = userByPort1.getWorkwechat(); + if (workwechat == null || "".equals(workwechat)) { + workwechat = userByPort1.getWechat(); } - String s = QyWxUid.toString(); - s = "PangFuZhen,"; - JSONObject jsonObject = qyWxOperationService.sendCcStockTakingMessageToHead(s, map, null, finalMainRecord, userAgent); + QyWxUid.append(workwechat).append(","); } - }).start(); + String s = QyWxUid.toString(); + s = "PangFuZhen,"; + JSONObject jsonObject = qyWxOperationService.sendCcStockTakingMessageToHead(s, map, null, finalMainRecord, userAgent); + }); return 1; } @@ -1722,7 +1693,7 @@ public class StockTakingServiceImpl implements StockTakingService { // 获取审批人userId String userId = approver.getUserId(); // 获取审批人 - Map portInfo = PortConfig.findUserByQyWxUserId(userId); + Map 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,29 +1854,26 @@ 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(); // if(workwechat == null || "".equals(workwechat)){ // workwechat = originator.getWechat(); // } - JSONObject jsonObject = qyWxOperationService.sendQyWxToStockTakingMessage("PangFuZhen,", ObjectFormatUtil.toInteger(mainId), normalMinId, userAgent); + JSONObject jsonObject = qyWxOperationService.sendQyWxToStockTakingMessage("PangFuZhen,", ObjectFormatUtil.toInteger(mainId), normalMinId, userAgent); // JSONObject jsonObject = qyWxOperationService.sendQyWxToStockTakingMessage(workwechat, ObjectFormatUtil.toInteger(mainId), normalMinId, userAgent); - // 将当前返回结果保存到redis中 - if (jsonObject != null) { - Map QyWxMessageMap = new HashMap<>(); - QyWxMessageMap.put("MsgId", jsonObject.getString("msgid")); - QyWxMessageMap.put("responseCode", jsonObject.getString("response_code")); - // key user:300450:QyWxOut:1 - redisTemplate.opsForHash().putAll("user:" + approver_user.getNumber() + ":QyWxStockTakingCompleteId:" + mainId, QyWxMessageMap); - // 设置过期时间为三天 - redisTemplate.expire("user:" + approver_user.getNumber() + ":QyWxStockTakingCompleteId:" + mainId, 72, TimeUnit.HOURS); - } + // 将当前返回结果保存到redis中 + if (jsonObject != null) { + Map QyWxMessageMap = new HashMap<>(); + QyWxMessageMap.put("MsgId", jsonObject.getString("msgid")); + QyWxMessageMap.put("responseCode", jsonObject.getString("response_code")); + // key user:300450:QyWxOut:1 + redisPool.getRedisTemplateByDb(14).opsForHash().putAll("user:" + approver_user.getNumber() + ":QyWxStockTakingCompleteId:" + mainId, QyWxMessageMap); + // 设置过期时间为三天 + redisPool.getRedisTemplateByDb(14).expire("user:" + approver_user.getNumber() + ":QyWxStockTakingCompleteId:" + mainId, 72, TimeUnit.HOURS); } - }).start(); + }); } else { map.put("state", 1); @@ -2755,22 +2723,19 @@ public class StockTakingServiceImpl implements StockTakingService { // 开启一个线程用于发送转移信息给盘点人员 StockTaking finalMainRecord = mainRecord; - new Thread(new Runnable() { - @Override - public void run() { - Integer originator = finalMainRecord.getOriginator(); - map.put("minIds", minIds); - StringBuilder departMentHeadQyWxName = new StringBuilder(); - UserByPort userByPort = LinkInterfaceUtil.FindUserById(ObjectFormatUtil.toInteger(originator), userToken); - String workwechat = userByPort.getWorkwechat(); - if (workwechat == null || "".equals(workwechat)) { - workwechat = userByPort.getWechat(); - } -// departMentHeadQyWxName.append(workwechat+","); - departMentHeadQyWxName.append("PangFuZhen,"); - JSONObject jsonObject = qyWxOperationService.sendCcStockTakingTransferMessageToHead(departMentHeadQyWxName.toString(), map, userToken, finalMainRecord, userAgent); + SendQyWxMessageThreadPool.execute(() -> { + Integer originator = finalMainRecord.getOriginator(); + map.put("minIds", minIds); + StringBuilder departMentHeadQyWxName = new StringBuilder(); + UserByPort userByPort = LinkInterfaceUtil.FindUserById(ObjectFormatUtil.toInteger(originator), userToken); + String workwechat = userByPort.getWorkwechat(); + if (workwechat == null || "".equals(workwechat)) { + workwechat = userByPort.getWechat(); } - }).start(); +// departMentHeadQyWxName.append(workwechat+","); + departMentHeadQyWxName.append("PangFuZhen,"); + JSONObject jsonObject = qyWxOperationService.sendCcStockTakingTransferMessageToHead(departMentHeadQyWxName.toString(), map, userToken, finalMainRecord, userAgent); + }); // 更新盘点记录 @@ -2808,7 +2773,7 @@ public class StockTakingServiceImpl implements StockTakingService { // 点击用户 String fromUserName = templateCard.getFromUserName(); // 根据userId获取处理人 - Map portInfo = PortConfig.findUserByQyWxUserId(fromUserName); + Map portInfo = PublicConfig.findUserByQyWxUserId(fromUserName); UserByPort userByPort = (UserByPort) portInfo.get("user"); // 用于最终更新 @@ -2946,46 +2911,40 @@ public class StockTakingServiceImpl implements StockTakingService { if (flag) { // 抄送盘点调账记录给盘点人员 - new Thread(new Runnable() { - @Override - public void run() { - // 获取盘点人员 - UserByPort originator = LinkInterfaceUtil.FindUserById(mainRecord.getOriginator(), null); + SendQyWxMessageThreadPool.execute((Runnable) () -> { + // 获取盘点人员 + UserByPort originator = LinkInterfaceUtil.FindUserById(mainRecord.getOriginator(), null); // String workwechat = originator.getWorkwechat(); // if(workwechat == null || "".equals(workwechat)){ // workwechat = originator.getWechat(); // } - JSONObject jsonObject = qyWxOperationService.sendQyWxToStockTakingMessage("PangFuZhen,", mainId, normalMinIds, userAgent); + JSONObject jsonObject = qyWxOperationService.sendQyWxToStockTakingMessage("PangFuZhen,", mainId, normalMinIds, userAgent); // JSONObject jsonObject = qyWxOperationService.sendQyWxToStockTakingMessage(workwechat, mainId, normalMinIds, userAgent); - if (jsonObject != null) { - // 将当前返回结果保存到redis中 - Map QyWxMessageMap = new HashMap<>(); - QyWxMessageMap.put("MsgId", jsonObject.getString("msgid")); - QyWxMessageMap.put("responseCode", jsonObject.getString("response_code")); - // key user:300450:QyWxOut:1 - // 申请人number - redisTemplate.opsForHash().putAll("user:" + originator.getNumber() + ":QyWxStockTakingCompleteId:" + mainId, QyWxMessageMap); - // 设置过期时间为三天 - redisTemplate.expire("user:" + originator.getNumber() + ":QyWxStockTakingCompleteId:" + mainId, 72, TimeUnit.HOURS); - } + if (jsonObject != null) { + // 将当前返回结果保存到redis中 + Map QyWxMessageMap = new HashMap<>(); + QyWxMessageMap.put("MsgId", jsonObject.getString("msgid")); + QyWxMessageMap.put("responseCode", jsonObject.getString("response_code")); + // key user:300450:QyWxOut:1 + // 申请人number + redisPool.getRedisTemplateByDb(14).opsForHash().putAll("user:" + originator.getNumber() + ":QyWxStockTakingCompleteId:" + mainId, QyWxMessageMap); + // 设置过期时间为三天 + redisPool.getRedisTemplateByDb(14).expire("user:" + originator.getNumber() + ":QyWxStockTakingCompleteId:" + mainId, 72, TimeUnit.HOURS); } - }).start(); + }); } else { // 发送错误消息提醒负责人 - new Thread(new Runnable() { - @Override - public void run() { - // 获取盘点人员 - UserByPort originator = LinkInterfaceUtil.FindUserById(mainRecord.getOriginator(), null); + SendQyWxMessageThreadPool.execute(() -> { + // 获取盘点人员 + UserByPort originator = LinkInterfaceUtil.FindUserById(mainRecord.getOriginator(), null); // String workwechat = originator.getWorkwechat(); // if(workwechat == null || "".equals(workwechat)){ // workwechat = originator.getWechat(); // } - qyWxOperationService.sendStockTakingErrMessageToHead("PangFuZhen,", errIds, mainRecord, null, userAgent); + 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; } diff --git a/src/main/java/com/dreamchaser/depository_manage/service/impl/UserServiceImpl.java b/src/main/java/com/dreamchaser/depository_manage/service/impl/UserServiceImpl.java index 063e36b9..3af0a3a0 100644 --- a/src/main/java/com/dreamchaser/depository_manage/service/impl/UserServiceImpl.java +++ b/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 redisTemplate; - @Override public Integer findCount() { return userMapper.findCount(); diff --git a/src/main/java/com/dreamchaser/depository_manage/utils/LinkInterfaceUtil.java b/src/main/java/com/dreamchaser/depository_manage/utils/LinkInterfaceUtil.java index ff658c95..60e6a71f 100644 --- a/src/main/java/com/dreamchaser/depository_manage/utils/LinkInterfaceUtil.java +++ b/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 FindUserByMap(Map 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 findAllCompany(UserByPort userByPort) { - String url = PortConfig.external_url + "/org/govlist"; + String url = PublicConfig.external_url + "/org/govlist"; Map 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 map = new HashMap<>(); map.put("id", id); String jsonString = JSONObject.toJSONString(map); @@ -119,7 +118,7 @@ public class LinkInterfaceUtil { * @return 查询结果 */ public static List FindUserByAdminorg(Integer id, UserByPort userToken) { - String url = PortConfig.external_url + "/staff/archivescont"; + String url = PublicConfig.external_url + "/staff/archivescont"; Map 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 map = new HashMap<>(); map.put("id", id); map.put("idstr", id.toString()); @@ -177,7 +176,7 @@ public class LinkInterfaceUtil { * @return 查询结果 */ public static List findCompanyBySuperior(String superior, UserByPort userByPort) { - String url = PortConfig.external_url + "/org/govthree"; + String url = PublicConfig.external_url + "/org/govthree"; Map 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 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 findAdministration(UserByPort userByPort) { Map 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 param = new HashMap<>(); param.put("id", userByPort.getCompany()); param.put("idstr", ""); @@ -328,7 +327,7 @@ public class LinkInterfaceUtil { */ public static List 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 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 param = new HashMap<>(); param.put("id", "309"); param.put("level", 0); diff --git a/src/main/java/com/dreamchaser/depository_manage/utils/Md5Util.java b/src/main/java/com/dreamchaser/depository_manage/utils/Md5Util.java deleted file mode 100644 index b6141e19..00000000 --- a/src/main/java/com/dreamchaser/depository_manage/utils/Md5Util.java +++ /dev/null @@ -1,5 +0,0 @@ -package com.dreamchaser.depository_manage.utils; - -public class Md5Util { -} - diff --git a/src/main/resources/application-test.yml b/src/main/resources/application-test.yml index 2b02ef35..0e237658 100644 --- a/src/main/resources/application-test.yml +++ b/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: diff --git a/src/main/resources/logback-spring.xml b/src/main/resources/logback-spring.xml index db7f2eae..bb1d17e9 100644 --- a/src/main/resources/logback-spring.xml +++ b/src/main/resources/logback-spring.xml @@ -29,7 +29,7 @@ 30 - 2GB + 1GB @@ -148,7 +148,6 @@ - diff --git a/src/main/resources/redisson-config.yml b/src/main/resources/redisson-config.yml index dfa4f09e..298c8e0a 100644 --- a/src/main/resources/redisson-config.yml +++ b/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" diff --git a/src/test/java/com/dreamchaser/depository_manage/BarChartTest.java b/src/test/java/com/dreamchaser/depository_manage/BarChartTest.java index a47e58e0..c9db5223 100644 --- a/src/test/java/com/dreamchaser/depository_manage/BarChartTest.java +++ b/src/test/java/com/dreamchaser/depository_manage/BarChartTest.java @@ -84,7 +84,9 @@ public class BarChartTest { */ List getBarChartData( UserByPort userByPort){ Map 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> futureList = new ArrayList>(); // 定义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> futureList = new ArrayList>(); // 1.定义CompletionService diff --git a/src/test/java/com/dreamchaser/depository_manage/InventoryLineChartTest.java b/src/test/java/com/dreamchaser/depository_manage/InventoryLineChartTest.java index 3ce8408d..9b0ac09b 100644 --- a/src/test/java/com/dreamchaser/depository_manage/InventoryLineChartTest.java +++ b/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> futureList = new ArrayList>(); // 1.定义CompletionService diff --git a/src/test/java/com/dreamchaser/depository_manage/InventorySunburstDataTest.java b/src/test/java/com/dreamchaser/depository_manage/InventorySunburstDataTest.java index 87922151..a6d1c058 100644 --- a/src/test/java/com/dreamchaser/depository_manage/InventorySunburstDataTest.java +++ b/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> futureList = new ArrayList>(); // 定义CompletionService diff --git a/src/test/java/com/dreamchaser/depository_manage/LineChartTest.java b/src/test/java/com/dreamchaser/depository_manage/LineChartTest.java index 41f1418a..34eadafc 100644 --- a/src/test/java/com/dreamchaser/depository_manage/LineChartTest.java +++ b/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> futureList = new ArrayList>(); // 1.定义CompletionService diff --git a/src/test/java/com/dreamchaser/depository_manage/OtherTest.java b/src/test/java/com/dreamchaser/depository_manage/OtherTest.java index 94d07bdc..edd46712 100644 --- a/src/test/java/com/dreamchaser/depository_manage/OtherTest.java +++ b/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,20 +42,53 @@ 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 stringObjectMap = objectToMap(userByPort); +// redisPool.getRedisTemplateByDb(5).opsForHash().putAll(PublicConfig.userInfoRedisPrefix+"300450",stringObjectMap); +// System.out.println(stringObjectMap); +// Set keys = redisPool.getRedisTemplateByDb(5).opsForHash().keys(PublicConfig.userInfoRedisPrefix + "300450"); + + } + public static Map objectToMap(Object object){ + Map 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 mapToBean(Map map, Class clazz) + throws IllegalAccessException, InstantiationException { + T bean = clazz.newInstance(); + BeanMap beanMap = BeanMap.create(bean); + beanMap.putAll(map); + return bean; + } + diff --git a/src/test/java/com/dreamchaser/depository_manage/SunburstChartTest.java b/src/test/java/com/dreamchaser/depository_manage/SunburstChartTest.java index ca2765c3..d5a68db9 100644 --- a/src/test/java/com/dreamchaser/depository_manage/SunburstChartTest.java +++ b/src/test/java/com/dreamchaser/depository_manage/SunburstChartTest.java @@ -45,6 +45,8 @@ public class SunburstChartTest { List sourceList = (List) previousMonth.get("sourceList"); // 结果集 List> futureList = new ArrayList>(); + int threadSize = months.size(); + ExecutorService exs = Executors.newFixedThreadPool(months.size()); // 1.定义CompletionService CompletionService completionService = new ExecutorCompletionService(exs); @@ -86,7 +88,9 @@ public class SunburstChartTest { @Override public Object call() throws Exception { List 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> futureList = new ArrayList>(); // 1.定义CompletionService