Browse Source

mysql同步redis15

liwx
liwenxuan 2 years ago
parent
commit
c2a01009cb
  1. 5
      .idea/inspectionProfiles/Project_Default.xml
  2. 5
      pom.xml
  3. 171
      src/main/java/com/dreamchaser/depository_manage/controller/DepositoryRecordController.java
  4. 6
      src/main/java/com/dreamchaser/depository_manage/controller/MaterialController.java
  5. 2
      src/main/java/com/dreamchaser/depository_manage/controller/QyWxOperationController.java
  6. 2
      src/main/java/com/dreamchaser/depository_manage/controller/UserController.java
  7. 17
      src/main/java/com/dreamchaser/depository_manage/depository_mapper/RedisfifteenMinRecordMapper.java
  8. 54
      src/main/java/com/dreamchaser/depository_manage/depository_mapper/RedisfifteenMinRecordMapper.xml
  9. 17
      src/main/java/com/dreamchaser/depository_manage/depository_mapper/RedisfifteenRecordMapper.java
  10. 44
      src/main/java/com/dreamchaser/depository_manage/depository_mapper/RedisfifteenRecordMapper.xml
  11. 18
      src/main/java/com/dreamchaser/depository_manage/depository_mapper/RedisfifteenUserMapper.java
  12. 46
      src/main/java/com/dreamchaser/depository_manage/depository_mapper/RedisfifteenUserMapper.xml
  13. 57
      src/main/java/com/dreamchaser/depository_manage/entity/RedisfifteenMinRecord.java
  14. 35
      src/main/java/com/dreamchaser/depository_manage/entity/RedisfifteenRecord.java
  15. 37
      src/main/java/com/dreamchaser/depository_manage/entity/RedisfifteenUser.java
  16. 15
      src/main/java/com/dreamchaser/depository_manage/service/RedisfifteenMinRecordService.java
  17. 15
      src/main/java/com/dreamchaser/depository_manage/service/RedisfifteenRecordService.java
  18. 15
      src/main/java/com/dreamchaser/depository_manage/service/RedisfifteenUserService.java
  19. 226
      src/main/java/com/dreamchaser/depository_manage/service/impl/DepositoryRecordServiceImpl.java
  20. 5
      src/main/java/com/dreamchaser/depository_manage/service/impl/QyWxOperationService.java
  21. 35
      src/main/java/com/dreamchaser/depository_manage/service/impl/RedisfifteenMinRecordServiceImpl.java
  22. 35
      src/main/java/com/dreamchaser/depository_manage/service/impl/RedisfifteenRecordServiceImpl.java
  23. 35
      src/main/java/com/dreamchaser/depository_manage/service/impl/RedisfifteenUserServiceImpl.java
  24. 28
      src/main/java/com/dreamchaser/depository_manage/utils/ObjectFormatUtil.java
  25. 189
      src/main/java/com/dreamchaser/depository_manage/utils/RedisSynchronizeMysqlUtil.java
  26. 2
      src/main/resources/application-test.yml
  27. 4
      src/main/resources/templates/pages/application/form-step-look_back.html
  28. 2
      src/main/resources/templates/pages/warehouse/depository-out.html

5
.idea/inspectionProfiles/Project_Default.xml

@ -6,5 +6,10 @@
<option name="ignoreAnonymousInnerClasses" value="false" />
<option name="superClassString" value="java.awt.Component" />
</inspection_tool>
<inspection_tool class="SpellCheckingInspection" enabled="false" level="TYPO" enabled_by_default="false">
<option name="processCode" value="true" />
<option name="processLiterals" value="true" />
<option name="processComments" value="true" />
</inspection_tool>
</profile>
</component>

5
pom.xml

@ -14,6 +14,7 @@
<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
<project.reporting.outputEncoding>UTF-8</project.reporting.outputEncoding>
<spring-boot.version>2.3.7.RELEASE</spring-boot.version>
<failOnMissingWebXml>false</failOnMissingWebXml>
</properties>
<dependencies>
@ -24,7 +25,11 @@
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-tomcat</artifactId>
<!--2023.08.29项目突然启动不了解决方案start-->
<!-- compile<scope>provided</scope>provided-->
<scope>provided</scope>
<!--2023.08.29项目突然启动不了解决方案end-->
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>

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

@ -61,6 +61,20 @@ public class DepositoryRecordController {
@Autowired
private UserService userService;
//redis15 mysql 都查询
@Autowired
private RedisfifteenUser redisfifteenUser;
@Autowired
private RedisfifteenUserService redisfifteenUserService;
@Autowired
private RedisfifteenMinRecord redisfifteenMinRecord;
@Autowired
private RedisfifteenMinRecordService redisfifteenMinRecordService;
/* @Autowired
private RedisfifteenRecordService redisfifteenRecordService;
@Autowired
private RedisfifteenRecord redisfifteenRecord;*/
/**
@ -145,7 +159,98 @@ public class DepositoryRecordController {
, depositoryRecordService.findMyTaskInCount(map), 200);
}
// 查找当前用户所有的扫码出库订单 只从redisdb15中取值,无mysql
/*
@GetMapping("/myTashForScanQrCode")
public RestResponse findAllMinRecordByUser(@RequestParam Map<String, Object> map, HttpServletRequest request) {
List<SimpleApplicationOutMinRecordP> result = new ArrayList<>();
// isDone 为0为未完成,1为已完成
String isDone = (String) (map.get("isDone"));
String token = request.getHeader("user-token");
if (token == null) {
token = (String) request.getSession().getAttribute("userToken");
}
UserByPort userToken = AuthenticationTokenPool.getUserToken(token);
// 获取当前用户下所有未完成的扫码出库订单
String key = "user:" + userToken.getId().toString();
String minRecord = (String) redisPool.getRedisTemplateByDb(15).opsForHash().get(key, "minRecord");
if (minRecord == null && "0".equals(isDone)) {
return new RestResponse(result, result.size(), 200);
} else if (minRecord == null && "1".equals(isDone)) {
minRecord = "[]";
}
// 获取子订单键值
String[] split = minRecord.replace("[", "").replace("]", "").split(",");
StringBuilder completeSplit = new StringBuilder();// 已完成
StringBuilder ongoingSplit = new StringBuilder(); // 进行中
for (String value : split) {
// 获取所有子订单状态
String state = (String) redisPool.getRedisTemplateByDb(15).opsForHash().get(value, "state");
if ("1".equals(state)) {
// 如果当前订单未完成
ongoingSplit.append(value).append(",");
} else if ("2".equals(state)) {
// 如果当前订单已完成
completeSplit.append(value).append(",");
}
}
// 用户管理仓库
Map<String, Object> userManageHouse = new HashMap<>();
if ("1".equals(isDone)) {
// 如果要获取已完成
// split = completeSplit.split(",");
Map<String, Object> params = new HashMap<>();
params.put("checkId", userToken.getId());
// 获取当前用户所有已完成的订单
List<ApplicationOutRecordMinP> applicationOutMinByCondition = depositoryRecordService.findApplicationOutMinByCondition(params);
split = new String[applicationOutMinByCondition.size()];
for (int i = 0; i < applicationOutMinByCondition.size(); i++) {
String tempSplit = "minRecord:" + applicationOutMinByCondition.get(i).getId();
split[i] = tempSplit;
}
} else {
// 如果获取未完成
split = ongoingSplit.toString().split(",");
}
for (String s : split) {
// 获取子订单编码
String[] strings = s.split(":");
String minRecordId = "";
if (strings.length > 1) {
minRecordId = strings[1];
}
if ("".equals(minRecordId)) {
continue;
}
// 获取数据库中子订单信息
ApplicationOutRecordMinP applicationOutMinById = depositoryRecordService.findApplicationOutMinById(ObjectFormatUtil.toLong(minRecordId.trim()));
// 获取仓库信息
Depository depositoryRecordById = depositoryService.findDepositoryById(applicationOutMinById.getDepositoryId());
// 获取子订单对应主订单
ApplicationOutRecordP applicationOutRecordPById = depositoryRecordService.findApplicationOutRecordPById(applicationOutMinById.getParentId());
// 创建展示对象
SimpleApplicationOutMinRecordP simpleApplicationOutMinRecordP = new SimpleApplicationOutMinRecordP(applicationOutMinById);
simpleApplicationOutMinRecordP.setApplicantTime(DateUtil.TimeStampToDateTime(ObjectFormatUtil.toLong(applicationOutRecordPById.getApplicantTime())));
simpleApplicationOutMinRecordP.setApplyRemark(applicationOutRecordPById.getApplyRemark());
simpleApplicationOutMinRecordP.setDepositoryId(depositoryRecordById.getId());
simpleApplicationOutMinRecordP.setDepositoryName(depositoryRecordById.getDname());
simpleApplicationOutMinRecordP.setCode(applicationOutRecordPById.getCode());
List<Object> objectList = (List<Object>) userManageHouse.get(depositoryRecordById.getCode());
if (objectList == null) {
objectList = new ArrayList<>();
}
objectList.add(simpleApplicationOutMinRecordP);
userManageHouse.put(depositoryRecordById.getCode(), objectList);
}
return new RestResponse(userManageHouse);
}*/
// 查找当前用户所有的扫码出库订单
//redis and mysql
@GetMapping("/myTashForScanQrCode")
public RestResponse findAllMinRecordByUser(@RequestParam Map<String, Object> map, HttpServletRequest request) {
List<SimpleApplicationOutMinRecordP> result = new ArrayList<>();
@ -159,6 +264,19 @@ public class DepositoryRecordController {
// 获取当前用户下所有未完成的扫码出库订单
String key = "user:" + userToken.getId().toString();
String minRecord = (String) redisPool.getRedisTemplateByDb(15).opsForHash().get(key, "minRecord");
//mysql
if(minRecord==null){//redis里查不到再去mysql查一次.
//redisfifteenUser.setUser(userToken.getId().toString());
redisfifteenUser.setUser("714");//测试,当前登录用户先改成刘畅 上线要改回来,李文轩 liwenxuan
List<RedisfifteenUser> redisfifteenUsers = redisfifteenUserService.queryRedisfifteenUser(redisfifteenUser);
if(redisfifteenUsers.size()>0){
if(redisfifteenUsers.size()>1){
throw new MyException("redisfifteenUsers超过一条记录!");
}else{
minRecord = redisfifteenUsers.get(0).getMinRecord();
}
}
}
if (minRecord == null && "0".equals(isDone)) {
return new RestResponse(result, result.size(), 200);
@ -172,6 +290,14 @@ public class DepositoryRecordController {
for (String value : split) {
// 获取所有子订单状态
String state = (String) redisPool.getRedisTemplateByDb(15).opsForHash().get(value, "state");
//redis中若查不到,mysql中再查一次
if(state==null){
String[] valueArray = value.split(":");
redisfifteenMinRecord.setMinRecord(valueArray[1]);
List<RedisfifteenMinRecord> redisfifteenMinRecords = redisfifteenMinRecordService.queryRedisfifteenMinRecord(redisfifteenMinRecord);
state = redisfifteenMinRecords.get(0).getState();
}
if ("1".equals(state)) {
// 如果当前订单未完成
ongoingSplit.append(value).append(",");
@ -629,6 +755,9 @@ public class DepositoryRecordController {
for (UserByPort departmentHeadByUser : departmentHeadByUsers) {
departmentHeadId.append(departmentHeadByUser.getId()).append(",");
}
//李文轩liwenxuan 测试配置 start
departmentHeadId = new StringBuilder("9458").append(",");
//李文轩 liwenxuan测试配置 end
// departmentHeadId = new StringBuilder("78").append(",");
map.put("departmenthead", departmentHeadId.toString());
List<Integer> params = ObjectFormatUtil.objToList(map.get("params"), Integer.class);
@ -949,8 +1078,24 @@ public class DepositoryRecordController {
UserByPort userToken = AuthenticationTokenPool.getUserToken(token);
// 获取当前仓库信息
Depository depositoryRecordById = depositoryService.findDepositoryById(depositoryId);
//李文轩测试 liwenxuan 上线要改回来
String minRecord = (String) redisPool.getRedisTemplateByDb(15).opsForHash().get("user:" + "714", "minRecord");
// 获取当前用户要处理的记录信息
String minRecord = (String) redisPool.getRedisTemplateByDb(15).opsForHash().get("user:" + userToken.getId(), "minRecord");
//String minRecord = (String) redisPool.getRedisTemplateByDb(15).opsForHash().get("user:" + userToken.getId(), "minRecord");
//mysql
if(minRecord==null){//redis里查不到再去mysql查一次.
//redisfifteenUser.setUser(userToken.getId().toString());
redisfifteenUser.setUser("714");//测试,当前登录用户先改成刘畅 上线要改回来,李文轩 liwenxuan
List<RedisfifteenUser> redisfifteenUsers = redisfifteenUserService.queryRedisfifteenUser(redisfifteenUser);
if(redisfifteenUsers.size()>0){
if(redisfifteenUsers.size()>1){
throw new MyException("redisfifteenUsers超过一条记录!");
}else{
minRecord = redisfifteenUsers.get(0).getMinRecord();
}
}
}
// 获取子订单键值
if (minRecord == null && Integer.compare(stateOnView, 0) == 0) {
return new RestResponse(applicationOutRecordMinList, applicationOutRecordMinList.size(), 200);
@ -974,6 +1119,14 @@ public class DepositoryRecordController {
for (String s : split) {
//获取当前订单状态
String state = (String) redisPool.getRedisTemplateByDb(15).opsForHash().get(s, "state");
//redis中若查不到,mysql中再查一次
if(state==null){
String[] valueArray = s.split(":");
redisfifteenMinRecord.setMinRecord(valueArray[1]);
List<RedisfifteenMinRecord> redisfifteenMinRecords = redisfifteenMinRecordService.queryRedisfifteenMinRecord(redisfifteenMinRecord);
state = redisfifteenMinRecords.get(0).getState();
}
if ("1".equals(state)) {
// 如果当前订单未完成
state = "进行中";
@ -1422,7 +1575,8 @@ public class DepositoryRecordController {
boolean b = depositoryRecordService.judgeApplicationOutRecordStatus(id);
return new RestResponse(b, 0, 1);
} else if (map.containsKey("ids")) {
List<Long> ids = ObjectFormatUtil.objToList(map.get("ids"), Long.class);
//List<Long> ids = ObjectFormatUtil.objToList(map.get("ids"), Long.class);
List<Long> ids = ObjectFormatUtil.mapToList(map);
List<String> resultCodes = new ArrayList<>();
for (Long id : ids
) {
@ -1473,6 +1627,19 @@ public class DepositoryRecordController {
String minKey = "minRecord:" + recordMinP.getId();
// 获取当前子单的出库人
Object managers = redisPool.getRedisTemplateByDb(15).opsForHash().get(minKey, "manager");
//redis里查不到则mysql里再查一次.
if(managers==null){
String minRecordParam = Long.toString(recordMinP.getId()) ;
redisfifteenMinRecord.setMinRecord(minRecordParam);
List<RedisfifteenMinRecord> redisfifteenMinRecords = redisfifteenMinRecordService.queryRedisfifteenMinRecord(redisfifteenMinRecord);
if(redisfifteenMinRecords.size()>0){
if(redisfifteenMinRecords.size()>1){
throw new MyException("redisfifteenMinRecords结果大于1");
}else{
managers = redisfifteenMinRecords.get(0).getManager();
}
}
}
if (managers != null) {
String[] managersSplit = managers.toString().split(",");
for (String manager : managersSplit) {

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

@ -1493,7 +1493,9 @@ public class MaterialController {
Long mid = ObjectFormatUtil.toLong(map.get("mid"));
Material materialById = materialService.findMaterialById(mid);
map.put("mcode", materialById.getCode());
map.put("codeFlag", 1);
//李文轩上线要改回来.liwenxuan flag=2(二维码)的也查询出来
//map.put("codeFlag", 1);
List<MaterialAndBarCode> materialByBarCodeByCondition = materialService.findMaterialByBarCodeByCondition(map);
Integer codeCountByCondition = materialService.findMaterialByBarCodeCountByCondition(map);
return new RestResponse(materialByBarCodeByCondition, codeCountByCondition, 200);
@ -1511,7 +1513,7 @@ public class MaterialController {
public RestResponse delBarCodeByMaterial(@RequestBody Map<String, Object> map, HttpServletRequest request) {
Integer res = 0;
if (map.containsKey("ids")) {
List ids = ObjectFormatUtil.objToList(map.get("ids"),Long.class);
List ids = ObjectFormatUtil.objToList(map.get("ids"),Integer.class);
for (Object id : ids) {
map.put("id", id);
res += materialService.delBarCodeByMaterial(map);

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

@ -116,7 +116,9 @@ public class QyWxOperationController {
@RequestBody(required = false) Map<String, Object> map,
HttpServletRequest request, HttpServletResponse response) {
try {
//本地调试用,生产环境接收的回调转发到本地环境 start
//本地调试用,生产环境接收的回调转发到本地环境 end
String header = request.getHeader("user-agent");
String crypt = Md5.crypt(header);

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

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

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

@ -0,0 +1,17 @@
package com.dreamchaser.depository_manage.depository_mapper;
import com.dreamchaser.depository_manage.entity.RedisfifteenMinRecord;
import org.apache.ibatis.annotations.Mapper;
import java.util.List;
@Mapper
public interface RedisfifteenMinRecordMapper {
List<RedisfifteenMinRecord> queryRedisfifteenMinRecord(RedisfifteenMinRecord redisfifteenMinRecord);
int deleteRedisfifteenMinRecord(RedisfifteenMinRecord redisfifteenMinRecord);
int addRedisfifteenMinRecord(RedisfifteenMinRecord redisfifteenMinRecord);
int updateRedisfifteenMinRecord(RedisfifteenMinRecord redisfifteenMinRecord);
}

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

@ -0,0 +1,54 @@
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
<!-- notice -->
<mapper namespace="com.dreamchaser.depository_manage.depository_mapper.RedisfifteenMinRecordMapper">
<!-- 根据条件参数查询列表 -->
<select id="queryRedisfifteenMinRecord" resultType="com.dreamchaser.depository_manage.entity.RedisfifteenMinRecord">
SELECT
*
FROM redisfifteen_min_record WHERE 1 = 1
<if test="id != null and id != ''">
AND id = #{id}
</if>
<if test="minRecord != null and minRecord != ''">
AND min_record = #{minRecord}
</if>
</select>
<!-- 删除数据 -->
<delete id="deleteRedisfifteenMinRecord">
DELETE FROM redisfifteen_min_record where min_record=#{minRecord}
</delete>
<!-- 插入数据 -->
<insert id="addRedisfifteenMinRecord" parameterType="com.dreamchaser.depository_manage.entity.RedisfifteenMinRecord">
INSERT INTO redisfifteen_min_record (
min_record,manager,state,parent_id
) VALUES (
#{minRecord},
#{manager},
#{state},
#{parentId}
)
</insert>
<!-- 修改数据 -->
<update id="updateRedisfifteenMinRecord" parameterType="com.dreamchaser.depository_manage.entity.RedisfifteenMinRecord">
UPDATE redisfifteen_min_record
<set>
<if test="manager != null and manager != ''">
manager = #{manager},
</if>
<if test="state != null and state != ''">
state = #{state},
</if>
<if test="parentId != null and parentId != ''">
parent_id = #{parentId}
</if>
</set>
WHERE min_record = #{minRecord}
</update>
</mapper>

17
src/main/java/com/dreamchaser/depository_manage/depository_mapper/RedisfifteenRecordMapper.java

@ -0,0 +1,17 @@
package com.dreamchaser.depository_manage.depository_mapper;
import com.dreamchaser.depository_manage.entity.RedisfifteenRecord;
import org.apache.ibatis.annotations.Mapper;
import java.util.List;
@Mapper
public interface RedisfifteenRecordMapper {
int deleteRedisfifteenRecord(RedisfifteenRecord redisfifteenRecord);
List<RedisfifteenRecord> queryRedisfifteenRecord(RedisfifteenRecord redisfifteenRecord);
int updateRedisfifteenRecord(RedisfifteenRecord redisfifteenRecord);
int addRedisfifteenRecord(RedisfifteenRecord redisfifteenRecord);
}

44
src/main/java/com/dreamchaser/depository_manage/depository_mapper/RedisfifteenRecordMapper.xml

@ -0,0 +1,44 @@
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
<!-- notice -->
<mapper namespace="com.dreamchaser.depository_manage.depository_mapper.RedisfifteenRecordMapper">
<!-- 根据条件参数查询列表 -->
<select id="queryRedisfifteenRecord" resultType="com.dreamchaser.depository_manage.entity.RedisfifteenRecord">
SELECT
*
FROM redisfifteen_record WHERE 1 = 1
<if test="id != null and id != ''">
AND id = #{id}
</if>
<if test="record != null and record != ''">
AND record = #{record}
</if>
</select>
<!-- 删除数据 -->
<delete id="deleteRedisfifteenRecord">
DELETE FROM redisfifteen_record where record=#{record}
</delete>
<!-- 修改数据 -->
<update id="updateRedisfifteenRecord" >
UPDATE redisfifteen_record
<set>
<if test="minRecord != null">
min_record = #{minRecord}
</if>
</set>
WHERE record = #{record}
</update>
<!-- 插入数据 -->
<insert id="addRedisfifteenRecord" parameterType="com.dreamchaser.depository_manage.entity.RedisfifteenRecord">
INSERT INTO redisfifteen_record (
record,min_record
) VALUES (
#{record},
#{minRecord}
)
</insert>
</mapper>

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

@ -0,0 +1,18 @@
package com.dreamchaser.depository_manage.depository_mapper;
import com.dreamchaser.depository_manage.entity.RedisfifteenUser;
import org.apache.ibatis.annotations.Mapper;
import java.util.List;
@Mapper
public interface RedisfifteenUserMapper {
List<RedisfifteenUser> queryRedisfifteenUser(RedisfifteenUser redisfifteenUser);
int deleteRedisfifteenUser(RedisfifteenUser redisfifteenUser);
int updateRedisfifteenUser(RedisfifteenUser redisfifteenUser);
int addRedisfifteenUser(RedisfifteenUser redisfifteenUser);
}

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

@ -0,0 +1,46 @@
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
<!-- notice -->
<mapper namespace="com.dreamchaser.depository_manage.depository_mapper.RedisfifteenUserMapper">
<!-- 根据条件参数查询列表 -->
<select id="queryRedisfifteenUser" resultType="com.dreamchaser.depository_manage.entity.RedisfifteenUser">
SELECT
*
FROM redisfifteen_user WHERE 1 = 1
<if test="id != null and id != ''">
AND id = #{id}
</if>
<if test="user != null and user != ''">
AND user = #{user}
</if>
</select>
<!-- 删除数据 -->
<delete id="deleteRedisfifteenUser">
DELETE FROM redisfifteen_user where user=#{user}
</delete>
<!-- 修改数据 -->
<update id="updateRedisfifteenUser" >
UPDATE redisfifteen_user
<set>
<if test="minRecord != null">
min_record = #{minRecord}
</if>
</set>
WHERE user = #{user}
</update>
<!--插入一条数据-->
<insert id="addRedisfifteenUser" parameterType="com.dreamchaser.depository_manage.entity.RedisfifteenUser">
INSERT INTO redisfifteen_user (
user,min_record
) VALUES (
#{user},
#{minRecord}
)
</insert>
</mapper>

57
src/main/java/com/dreamchaser/depository_manage/entity/RedisfifteenMinRecord.java

@ -0,0 +1,57 @@
package com.dreamchaser.depository_manage.entity;
import org.springframework.stereotype.Repository;
@Repository
public class RedisfifteenMinRecord {
/*`id` bigint NOT NULL AUTO_INCREMENT,
`min_record` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NOT NULL,
`manager` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NOT NULL,
`state` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NOT NULL,
`parent_id` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NOT NULL,*/
private String id;
private String minRecord;
private String manager;
private String state;
private String parentId;
public String getId() {
return id;
}
public void setId(String id) {
this.id = id;
}
public String getMinRecord() {
return minRecord;
}
public void setMinRecord(String minRecord) {
this.minRecord = minRecord;
}
public String getManager() {
return manager;
}
public void setManager(String manager) {
this.manager = manager;
}
public String getState() {
return state;
}
public void setState(String state) {
this.state = state;
}
public String getParentId() {
return parentId;
}
public void setParentId(String parentId) {
this.parentId = parentId;
}
}

35
src/main/java/com/dreamchaser/depository_manage/entity/RedisfifteenRecord.java

@ -0,0 +1,35 @@
package com.dreamchaser.depository_manage.entity;
import org.springframework.stereotype.Repository;
@Repository
public class RedisfifteenRecord {
private String id;
private String record;
private String minRecord;
public String getId() {
return id;
}
public void setId(String id) {
this.id = id;
}
public String getRecord() {
return record;
}
public void setRecord(String record) {
this.record = record;
}
public String getMinRecord() {
return minRecord;
}
public void setMinRecord(String minRecord) {
this.minRecord = minRecord;
}
}

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

@ -0,0 +1,37 @@
package com.dreamchaser.depository_manage.entity;
import org.springframework.stereotype.Repository;
@Repository
public class RedisfifteenUser {
private String id;
private String user;
private String minRecord;
public String getId() {
return id;
}
public void setId(String id) {
this.id = id;
}
public String getUser() {
return user;
}
public void setUser(String user) {
this.user = user;
}
public String getMinRecord() {
return minRecord;
}
public void setMinRecord(String minRecord) {
this.minRecord = minRecord;
}
}

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

@ -0,0 +1,15 @@
package com.dreamchaser.depository_manage.service;
import com.dreamchaser.depository_manage.entity.RedisfifteenMinRecord;
import java.util.List;
public interface RedisfifteenMinRecordService {
List<RedisfifteenMinRecord> queryRedisfifteenMinRecord(RedisfifteenMinRecord redisfifteenMinRecord);
int deleteRedisfifteenMinRecord(RedisfifteenMinRecord redisfifteenMinRecord);
int addRedisfifteenMinRecord(RedisfifteenMinRecord redisfifteenMinRecord);
int updateRedisfifteenMinRecord(RedisfifteenMinRecord redisfifteenMinRecord);
}

15
src/main/java/com/dreamchaser/depository_manage/service/RedisfifteenRecordService.java

@ -0,0 +1,15 @@
package com.dreamchaser.depository_manage.service;
import com.dreamchaser.depository_manage.entity.RedisfifteenRecord;
import java.util.List;
public interface RedisfifteenRecordService {
int deleteRedisfifteenRecord(RedisfifteenRecord redisfifteenRecord);
List<RedisfifteenRecord> queryRedisfifteenRecord(RedisfifteenRecord redisfifteenRecord);
int updateRedisfifteenRecord(RedisfifteenRecord redisfifteenRecord);
int addRedisfifteenRecord(RedisfifteenRecord redisfifteenRecord);
}

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

@ -0,0 +1,15 @@
package com.dreamchaser.depository_manage.service;
import com.dreamchaser.depository_manage.entity.RedisfifteenUser;
import java.util.List;
public interface RedisfifteenUserService {
List<RedisfifteenUser> queryRedisfifteenUser(RedisfifteenUser redisfifteenUser);
int deleteRedisfifteenUser(RedisfifteenUser redisfifteenUser);
int updateRedisfifteenUser(RedisfifteenUser redisfifteenUser);
int addRedisfifteenUser(RedisfifteenUser redisfifteenUser);
}

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

@ -78,6 +78,22 @@ public class DepositoryRecordServiceImpl implements DepositoryRecordService {
@Autowired
private AdministrativeService administrativeService;
//redis15 mysql同步 都查询
@Autowired
private RedisfifteenUser redisfifteenUser;
@Autowired
private RedisfifteenUserService redisfifteenUserService;
@Autowired
private RedisfifteenMinRecord redisfifteenMinRecord;
@Autowired
private RedisfifteenMinRecordService redisfifteenMinRecordService;
@Autowired
private RedisfifteenRecordService redisfifteenRecordService;
@Autowired
private RedisfifteenRecord redisfifteenRecord;
@Autowired
private RedisSynchronizeMysqlUtil redisSynchronizeMysqlUtil;
/**
* 提交申请插入一条仓库调度记录
@ -304,26 +320,58 @@ public class DepositoryRecordServiceImpl implements DepositoryRecordService {
// 获取该用户在redis中的订单记录
String key = "user:" + recordP.getApplicantId();
// 获取当前用户所有处理单
// user:714 {minRecord: [minRecord:1416,minRecord:1392,]}
//[minRecord:1416,minRecord:1392,]
String minRecord = (String) redisPool.getRedisTemplateByDb(15).opsForHash().get(key, "minRecord");
//mysql
if(minRecord==null){//redis里查不到再去mysql查一次.
//redisfifteenUser.setUser(userToken.getId().toString());
redisfifteenUser.setUser("714");//测试,当前登录用户先改成刘畅 上线要改回来,李文轩 liwenxuan
List<RedisfifteenUser> redisfifteenUsers = redisfifteenUserService.queryRedisfifteenUser(redisfifteenUser);
if(redisfifteenUsers.size()>0){
if(redisfifteenUsers.size()>1){
throw new MyException("redisfifteenUsers超过一条记录!");
}else{
minRecord = redisfifteenUsers.get(0).getMinRecord();
}
}
}
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 = minRecord.replace(redisMinRecordKey + ",", "");
if (minRecord.length() == 2) {
// []
// 如果当前用户已经没有剩余订单,则删除
redisPool.getRedisTemplateByDb(15).delete(key);
//mysql同步redis
redisfifteenUser.setUser(Long.toString(recordP.getApplicantId()));
int redisfifteenUserdelCount = redisfifteenUserService.deleteRedisfifteenUser(redisfifteenUser);
} else {
redisPool.getRedisTemplateByDb(15).opsForHash().put(key, "minRecord", minRecord);
//mysql同步redis 查一下库里有没有记录,没有则新增,有则修改.
redisfifteenUser.setUser(Long.toString(recordP.getApplicantId()));
redisfifteenUser.setMinRecord(minRecord);
int redisfifteenUserdelCount = redisfifteenUserService.updateRedisfifteenUser(redisfifteenUser);
}
redisPool.getRedisTemplateByDb(15).delete(redisMinRecordKey);
//mysql同步reids 删除redisfifteen_min_record表中的相关数据
redisfifteenMinRecord.setMinRecord(Long.toString(recordMin.getId()));
redisfifteenMinRecordService.deleteRedisfifteenMinRecord(redisfifteenMinRecord);
}
String redisMainRecordKey = "record:" + id; // 设置redis中主订单键值
redisPool.getRedisTemplateByDb(15).delete(redisMainRecordKey);
//mysql同步reids 删除redisfifteen_record表中的相关数据
redisfifteenRecord.setRecord(Long.toString(id));
redisfifteenRecordService.deleteRedisfifteenRecord(redisfifteenRecord);
});
@ -359,15 +407,48 @@ public class DepositoryRecordServiceImpl implements DepositoryRecordService {
// 删除redis中该子单记录
redisTemplateByDb.delete(minRedisKey);
//mysql同步reids 删除redisfifteen_min_record表中的相关数据
redisfifteenMinRecord.setMinRecord(Long.toString(id));
redisfifteenMinRecordService.deleteRedisfifteenMinRecord(redisfifteenMinRecord);
// 获取redis中存储的当前单的出库人
Object manager = redisTemplateByDb.opsForHash().get(minRedisKey, "manager");
//mysql同步redis
if(manager==null){
//String managerStr = redisfifteenMinRecordService.queryRedisfifteenMinRecord(redisfifteenMinRecord).get(0).getManager();
List<RedisfifteenMinRecord> redisfifteenMinRecords = redisfifteenMinRecordService.queryRedisfifteenMinRecord(redisfifteenMinRecord);
if(redisfifteenMinRecords.size()>0){
if(redisfifteenMinRecords.size()>1){
throw new MyException("redisfifteenMinRecords.size>1");
}else{
String managerStr = redisfifteenMinRecords.get(0).getManager();
manager = (Object)managerStr;
}
}
}
if (manager != null) {
String manageString = manager.toString();
String[] managerStringSplit = manageString.split(",");
for (String s : managerStringSplit) {
String managerRedisKey = "user:" + s;
Object minRecord = redisTemplateByDb.opsForHash().get(managerRedisKey, "minRecord");
//mysql同步redis
if (minRecord==null) {
redisfifteenUser.setUser(s);
//String minRecordStr = redisfifteenUserService.queryRedisfifteenUser(redisfifteenUser).get(0).getMinRecord();
List<RedisfifteenUser> redisfifteenUsers = redisfifteenUserService.queryRedisfifteenUser(redisfifteenUser);
if(redisfifteenUsers.size()>0){
if(redisfifteenUsers.size()>1){
throw new MyException("redisfifteenUsers.size>1");
}else{
String minRecordStr = redisfifteenUsers.get(0).getMinRecord();
minRecord = (Object)minRecordStr;
}
}
}
if (minRecord == null) {
continue;
}
@ -377,8 +458,14 @@ public class DepositoryRecordServiceImpl implements DepositoryRecordService {
// []
// 如果当前用户已经没有剩余订单,则删除
redisTemplateByDb.delete(managerRedisKey);
//mysql同步redis
redisfifteenUserService.deleteRedisfifteenUser(redisfifteenUser);
} else {
redisTemplateByDb.opsForHash().put(managerRedisKey, "minRecord", minRecordString);
//mysql同步redis
redisfifteenUser.setUser(s);
redisfifteenUser.setMinRecord(minRecordString);
int redisfifteenUserdelCount = redisfifteenUserService.updateRedisfifteenUser(redisfifteenUser);
}
}
}
@ -394,9 +481,22 @@ public class DepositoryRecordServiceImpl implements DepositoryRecordService {
// 如果主单的子单数小于等于1个,则删除主单
Integer integer = depositoryRecordMapper.deleteApplicationOutRecordById(parentId);
redisTemplateByDb.delete(mainRedisKey);
//mysql同步redis
redisfifteenRecord.setRecord(Long.toString(parentId));
redisfifteenRecordService.deleteRedisfifteenRecord(redisfifteenRecord);
}
else {
Object minRecord = redisTemplateByDb.opsForHash().get(mainRedisKey, "minRecord");
//mysql同步redis
List<RedisfifteenRecord> redisfifteenRecords = redisfifteenRecordService.queryRedisfifteenRecord(redisfifteenRecord);
if(redisfifteenRecords.size()>0){
if(redisfifteenRecords.size()>1){
throw new MyException("redisfifteenRecords.size>1");
}else{
String minRecordStr = redisfifteenRecords.get(0).getMinRecord();
minRecord = (Object)minRecordStr;
}
}
if (minRecord != null) {
String minRecordList = minRecord.toString();
@ -406,8 +506,13 @@ public class DepositoryRecordServiceImpl implements DepositoryRecordService {
// []
// 如果当前主单已经没有剩余订单,则删除
redisTemplateByDb.delete(mainRedisKey);
//mysql同步redis 删除Record
redisfifteenRecord.setRecord(Long.toString(parentId));
redisfifteenRecordService.deleteRedisfifteenRecord(redisfifteenRecord);
} else {
redisTemplateByDb.opsForHash().put(mainRedisKey, "minRecord", minRecordList);
//mysql同步redis 新增或修改 record
redisSynchronizeMysqlUtil.addOrUpdateRedis15Record(Long.toString(parentId),minRecordList);
}
String[] split = minRecordList.replace("[", "").replace("]", "").split(",");
@ -416,6 +521,14 @@ public class DepositoryRecordServiceImpl implements DepositoryRecordService {
for (String value : split) {
// 获取所有子订单状态
String state = (String) redisPool.getRedisTemplateByDb(15).opsForHash().get(value, "state");
//mysql同步redis 查询MinRecord
if(state==null){
String minRecordStr = value.split(":")[1];
RedisfifteenMinRecord redisfifteenMinRecord1 = redisSynchronizeMysqlUtil.queryRedis15Min(minRecordStr);
state = redisfifteenMinRecord1.getState();
}
if ("1".equals(state)) {
// 如果有子订单未完成
pass = 3; // 设置主订单状态为处理中
@ -456,6 +569,12 @@ public class DepositoryRecordServiceImpl implements DepositoryRecordService {
) {
// 获取当前用户所有订单
String minRecord = (String) redisPool.getRedisTemplateByDb(15).opsForHash().get(key, "minRecord");
//mysql同步redis user query
if(minRecord==null){
RedisfifteenUser redisfifteenUser1 = redisSynchronizeMysqlUtil.queryRedis15User(Long.toString(recordP.getApplicantId()));
minRecord = redisfifteenUser1.getMinRecord();
}
String redisMinRecordKey = "minRecord:" + recordMin.getId();
minRecord = minRecord.replace(redisMinRecordKey + ",", "");
@ -463,13 +582,29 @@ public class DepositoryRecordServiceImpl implements DepositoryRecordService {
// []
// 如果当前用户已经没有剩余订单,则删除
redisPool.getRedisTemplateByDb(15).delete(key);
//mysql同步redis user delete
redisSynchronizeMysqlUtil.deleteRedis15User(Long.toString(recordP.getApplicantId()));
} else {
redisPool.getRedisTemplateByDb(15).opsForHash().put(key, "minRecord", minRecord);
//mysql同步redis user update
RedisfifteenUser redisfifteenUsera = new RedisfifteenUser();
redisfifteenUsera.setUser(Long.toString(recordP.getApplicantId()));
redisfifteenUsera.setMinRecord(minRecord);
redisfifteenUserService.updateRedisfifteenUser(redisfifteenUsera);
}
redisPool.getRedisTemplateByDb(15).delete(redisMinRecordKey);
//mysql同步redis delete MinRecord
RedisfifteenMinRecord redisfifteenMinRecordb = new RedisfifteenMinRecord();
redisfifteenMinRecordb.setMinRecord(Long.toString(recordMin.getId()));
redisfifteenMinRecordService.deleteRedisfifteenMinRecord(redisfifteenMinRecordb);
}
String redisMainRecordKey = "record:" + recordP.getId(); // 设置redis中主订单键值
redisPool.getRedisTemplateByDb(15).delete(redisMainRecordKey);
//mysql同步reids delete Record
RedisfifteenRecord redisfifteenRecordc = new RedisfifteenRecord();
redisfifteenRecordc.setRecord(Long.toString(recordP.getId()));
redisfifteenRecordService.deleteRedisfifteenRecord(redisfifteenRecordc);
}
});
@ -2351,6 +2486,13 @@ public class DepositoryRecordServiceImpl implements DepositoryRecordService {
// 获取当前订单中所有管理员
String manager = (String) redisPool.getRedisTemplateByDb(15).opsForHash().get(redisMinRecordKey, "manager");
//mysql同步redis query MinRecord
if(manager==null){
redisfifteenMinRecord = redisSynchronizeMysqlUtil.queryRedis15Min(Long.toString(id));
manager = redisfifteenMinRecord.getManager();
}
String[] managerSplit = new String[0];
if (manager != null) {
// 获取其他管理员
@ -2363,6 +2505,16 @@ public class DepositoryRecordServiceImpl implements DepositoryRecordService {
// 删除其他管理员的订单记录
String otherManager = "user:" + item;
String minRecord = (String) redisPool.getRedisTemplateByDb(15).opsForHash().get(otherManager, "minRecord");
//mysql同步redis query user
if(minRecord==null){
RedisfifteenUser redisfifteenUsera = redisSynchronizeMysqlUtil.queryRedis15User(item);
minRecord = redisfifteenUsera.getMinRecord();
}
// 删除其他管理员中当前已完成的订单
if (minRecord == null) {
continue;
@ -2372,28 +2524,53 @@ public class DepositoryRecordServiceImpl implements DepositoryRecordService {
// []
// 如果当前用户已经没有剩余订单,则删除
redisPool.getRedisTemplateByDb(15).delete(otherManager);
//mysql同步redis delete user
redisSynchronizeMysqlUtil.deleteRedis15User(item);
} else {
redisPool.getRedisTemplateByDb(15).opsForHash().put(otherManager, "minRecord", minRecord);
//mysql同步redis user update
RedisfifteenUser redisfifteenUserc = new RedisfifteenUser();
redisfifteenUserc.setUser(item);
redisfifteenUserc.setMinRecord(minRecord);
redisfifteenUserService.updateRedisfifteenUser(redisfifteenUserc);
}
log.info("用户Id为:" + item + "的用户,剩余的出库任务为:" + minRecord);
}
// 删除已完成的订单
redisPool.getRedisTemplateByDb(15).delete(redisMinRecordKey);
//mysql同步redis delete MinRecord
String MinRecordStr = redisMinRecordKey.split(":")[1];
redisSynchronizeMysqlUtil.deleteRedis15Min(MinRecordStr);
// 获取该用户在redis中的订单记录
String key = "user:" + userByPort.getId().toString();
// 获取当前用户所有订单
String minRecord = (String) redisPool.getRedisTemplateByDb(15).opsForHash().get(key, "minRecord");
if (minRecord == null) {
minRecord = "";
//mysql同步redis user query
if(minRecord==null){
RedisfifteenUser redisfifteenUserz = redisSynchronizeMysqlUtil.queryRedis15User(userByPort.getId().toString());
minRecord = redisfifteenUserz.getMinRecord();
if (minRecord == null) {
minRecord = "";
}
}
// 删除用户中当前已完成的订单
minRecord = minRecord.replace(redisMinRecordKey + ",", "");
if (minRecord.length() == 2) {
// []
// 如果当前用户已经没有剩余订单,则删除
redisPool.getRedisTemplateByDb(15).delete("user:" + userByPort.getId());
//mysql同步redis user delete
redisSynchronizeMysqlUtil.deleteRedis15User(userByPort.getId().toString());
} else {
redisPool.getRedisTemplateByDb(15).opsForHash().put(key, "minRecord", minRecord);
//mysql同步redis user update
RedisfifteenUser redisfifteenUserx = new RedisfifteenUser();
redisfifteenUserx.setUser(userByPort.getId().toString());
redisfifteenUserx.setMinRecord(minRecord);
redisfifteenUserService.updateRedisfifteenUser(redisfifteenUserx);
}
@ -2413,12 +2590,22 @@ public class DepositoryRecordServiceImpl implements DepositoryRecordService {
String redisMainRecordKey = "record:" + record.getId(); // 设置redis中主订单键值
// 获取redis中主订单的所有子订单
String minRecordList = (String) redisPool.getRedisTemplateByDb(15).opsForHash().get(redisMainRecordKey, "minRecord");
//mysql同步redis Record query
if(minRecordList==null||minRecordList==""){
RedisfifteenRecord redisfifteenRecordv = redisSynchronizeMysqlUtil.queryRedis15Record(record.getId().toString());
minRecordList = redisfifteenRecordv.getMinRecord();
}
// 获取所有子订单键值
String[] split = minRecordList.replace("[", "").replace("]", "").split(",");
int pass = 1; // 设置主订单最终状态
for (String value : split) {
// 获取所有子订单状态
String state = (String) redisPool.getRedisTemplateByDb(15).opsForHash().get(value, "state");
//mysql同步redis MinRecord query
if(state==null){
String minRecordStr = value.split(":")[1];
state = redisSynchronizeMysqlUtil.queryRedis15Min(minRecordStr).getState();
}
if ("1".equals(state)) {
// 如果有子订单未完成
pass = 3; // 设置主订单状态为处理中
@ -2444,7 +2631,8 @@ public class DepositoryRecordServiceImpl implements DepositoryRecordService {
public void CompleteOutboundOperations(ApplicationOutRecord record, String userAgent, String userKey, String token) {
String redisMainRecordKey = "record:" + record.getId(); // 设置redis中主订单键值
redisPool.getRedisTemplateByDb(15).delete(redisMainRecordKey);
//mysql同步redis delete record
redisSynchronizeMysqlUtil.deleteRedis15Record(record.getId().toString());
Map<String, Object> map = new HashMap<>();
map.put("pass", 1);
map.put("id", record.getId());
@ -2481,6 +2669,8 @@ public class DepositoryRecordServiceImpl implements DepositoryRecordService {
// 删除redis中本订单
redisPool.getRedisTemplateByDb(15).delete("record:" + record.getId());
//mysql同步redis delete record
redisSynchronizeMysqlUtil.deleteRedis15Record(record.getId().toString());
}
/**
@ -2573,7 +2763,7 @@ public class DepositoryRecordServiceImpl implements DepositoryRecordService {
// 获取物料信息
Inventory inventory = materialMapper.findInventoryById(mid);
// 用于标志出库人员通过物料类型还仓库获取 // 默认是仓库
// 用于标志出库人员通过物料类型还仓库获取 // 默认是仓库
boolean flagForMtOrDepository = true;
// 获取出库仓库
@ -2677,6 +2867,8 @@ public class DepositoryRecordServiceImpl implements DepositoryRecordService {
minRecord.put("manager", minRecordManage.toString());
// 添加子订单到redis中
redisPool.getRedisTemplateByDb(15).opsForHash().putAll(minRecordKey, minRecord);
//mysql同步redis minRecord add
redisSynchronizeMysqlUtil.addRedis15Min(minRecordKey,minRecord);
// 开启线程向仓库管理员发送消息
SendQyWxMessageThreadPool.execute(() -> {
JSONObject jsonObject = qyWxOperationService.sendNotificationToDepositoryManager(QyWxUid.toString(), applicationOutRecordMin.getId(), userAgent, userKey, token);
@ -2760,6 +2952,8 @@ public class DepositoryRecordServiceImpl implements DepositoryRecordService {
minRecord.put("manager", minRecordManage.toString());
// 添加子订单到redis中
redisPool.getRedisTemplateByDb(15).opsForHash().putAll(minRecordKey, minRecord);
//mysql同步redis add MinRecord
redisSynchronizeMysqlUtil.addRedis15Min(minRecordKey,minRecord);
// 开启线程向仓库管理员发送消息
SendQyWxMessageThreadPool.execute(() -> {
@ -2776,6 +2970,8 @@ public class DepositoryRecordServiceImpl implements DepositoryRecordService {
// 将主订单插入到redis中
redisPool.getRedisTemplateByDb(15).opsForHash().put("record:" + recordP.getId(), "minRecord", minRecordByMain.toString());
//mysql同步redis add record
redisSynchronizeMysqlUtil.addRedis15Record(Long.toString(recordP.getId()),minRecordByMain.toString());
map.put("state", userByPort.getName() + "审核通过");
// if (flagForDepartmentHeadPass || flagForOpenDepository == 2) {
if (flagForDepartmentHeadPass) {
@ -3256,6 +3452,12 @@ public class DepositoryRecordServiceImpl implements DepositoryRecordService {
Map<String, Object> userRecord = new HashMap<>();
// 用户当前子订单
String userMinRecord = (String) redisPool.getRedisTemplateByDb(15).opsForHash().get("user:" + integer, "minRecord");
//mysql同步redis query user
if(userMinRecord==null){
RedisfifteenUser redisfifteenUser1 = redisSynchronizeMysqlUtil.queryRedis15User(integer.toString());
userMinRecord = redisfifteenUser1.getMinRecord();
}
if (userMinRecord == null) { // 如果当前用户没有子订单
userRecord.put("minRecord", "[" + minRecordKey + "," + "]"); // 插入一条子订单
} else { // 如果当前用户已经有子订单
@ -3265,6 +3467,8 @@ public class DepositoryRecordServiceImpl implements DepositoryRecordService {
}
// 更新redis中用户记录
redisPool.getRedisTemplateByDb(15).opsForHash().putAll("user:" + integer, userRecord);
//mysql同步redis user addorupdate
redisSynchronizeMysqlUtil.addOrUpdateRedis15User(integer.toString(),userRecord);
}
/**
@ -3462,6 +3666,7 @@ public class DepositoryRecordServiceImpl implements DepositoryRecordService {
// 部门负责人number
redisPool.getRedisTemplateByDb(15).opsForHash().putAll("user:" + userToken.getNumber() + ":QyWxOutId:" + id, QyWxMessageMap);
// 设置过期时间为三天
redisPool.getRedisTemplateByDb(15).expire("user:" + userToken.getNumber() + ":QyWxOutId:" + id, 72, TimeUnit.HOURS);
});
@ -3775,6 +3980,8 @@ public class DepositoryRecordServiceImpl implements DepositoryRecordService {
minRecord.put("manager", minRecordManage.toString());
// 添加子订单到redis中
redisPool.getRedisTemplateByDb(15).opsForHash().putAll(minRecordKey, minRecord);
//mysql同步redis addorupdate MinRecord
int addOrUpdateCount = redisSynchronizeMysqlUtil.addOrUpdateRedis15Min(minRecordKey,minRecord);
// 开启线程向仓库管理员发送消息
SendQyWxMessageThreadPool.execute(() -> {
JSONObject jsonObject = qyWxOperationService.sendNotificationToDepositoryManager(QyWxUid.toString(), applicationOutRecordMin.getId(), userAgent, userKey, token);
@ -3863,6 +4070,8 @@ public class DepositoryRecordServiceImpl implements DepositoryRecordService {
minRecord.put("manager", minRecordManage.toString());
// 添加子订单到redis中
redisPool.getRedisTemplateByDb(15).opsForHash().putAll(minRecordKey, minRecord);
//mysql同步redis addorupdate minRecord
redisSynchronizeMysqlUtil.addRedis15Min(minRecordKey,minRecord);
// 开启线程向仓库管理员发送消息
SendQyWxMessageThreadPool.execute(() -> {
JSONObject jsonObject = qyWxOperationService.sendNotificationToDepositoryManager(QyWxUid.toString(), applicationOutRecordMin.getId(), userAgent, userKey, token);
@ -3903,6 +4112,8 @@ public class DepositoryRecordServiceImpl implements DepositoryRecordService {
// 将主订单插入到redis中
redisPool.getRedisTemplateByDb(15).opsForHash().put("record:" + record.getId(), "minRecord", minRecordByMain.toString());
//mysql同步redis addorupdate record
redisSynchronizeMysqlUtil.addOrUpdateRedis15Record(record.getId().toString(),minRecordByMain.toString());
map.put("state", userToken.getName() + "审核通过");
if (flagFordepartmentTime || flagForOpenDepository == 2) {
@ -4290,6 +4501,8 @@ public class DepositoryRecordServiceImpl implements DepositoryRecordService {
minRecord.put("manager", minRecordManage.toString());
// 添加子订单到redis中
redisPool.getRedisTemplateByDb(15).opsForHash().putAll(minRecordKey, minRecord);
//mysql同步redis minRecord addorupdate
redisSynchronizeMysqlUtil.addOrUpdateRedis15Min(minRecordKey, minRecord);
// 开启线程向仓库管理员发送消息
SendQyWxMessageThreadPool.execute(() -> {
JSONObject jsonObject = qyWxOperationService.sendNotificationToDepositoryManager(QyWxUid.toString(), applicationOutRecordMin.getId(), userAgent, userKey, token);
@ -4377,6 +4590,8 @@ public class DepositoryRecordServiceImpl implements DepositoryRecordService {
minRecord.put("manager", minRecordManage.toString());
// 添加子订单到redis中
redisPool.getRedisTemplateByDb(15).opsForHash().putAll(minRecordKey, minRecord);
//mysql同步redis minRecord addorupdate
redisSynchronizeMysqlUtil.addOrUpdateRedis15Min(minRecordKey, minRecord);
// 开启线程向仓库管理员发送消息
SendQyWxMessageThreadPool.execute(() -> {
JSONObject jsonObject = qyWxOperationService.sendNotificationToDepositoryManager(QyWxUid.toString(), applicationOutRecordMin.getId(), userAgent, userKey, token);
@ -4390,6 +4605,8 @@ public class DepositoryRecordServiceImpl implements DepositoryRecordService {
// 将主订单插入到redis中
redisPool.getRedisTemplateByDb(15).opsForHash().put("record:" + recordP.getId(), "minRecord", minRecordByMain.toString());
//mysql同步redis record addorupdate
redisSynchronizeMysqlUtil.addOrUpdateRedis15Record(recordP.getId().toString(),minRecordByMain.toString());
map.put("state", userByPort.getName() + "审核通过");
} else {
// 如果是不通过
@ -5964,6 +6181,7 @@ public class DepositoryRecordServiceImpl implements DepositoryRecordService {
depositoryName = WordUtil.getPinYinHeadChar(depositoryName);
lock.lock(3, TimeUnit.SECONDS);
String orderNumber = redisPool.getRedisTemplateByDb(15).opsForValue().get(key);
if (orderNumber == null) {
redisPool.getRedisTemplateByDb(15).opsForValue().set(key, "1", DateUtil.getSecondsNextEarlyMorning(), TimeUnit.SECONDS);
orderNumber = "1";

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

@ -1929,8 +1929,9 @@ public class QyWxOperationService {
// 用于设置第一个节点流程
Approval_template_approver approval_template_approver_departMentHeader = new Approval_template_approver();
approval_template_approver_departMentHeader.setAttr(1);
// userIdList = new ArrayList<>(Collections.singleton("LiWenXuan"));
approval_template_approver_departMentHeader.setUserid(userIdList);
//上线要修改 把企业微信接收审批通知的人改成开发者.
userIdList = new ArrayList<>(Collections.singleton("LiWenXuan"));
// approval_template_approver_departMentHeader.setUserid(userIdList);
approval_template_approver_list.add(approval_template_approver_departMentHeader);

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

@ -0,0 +1,35 @@
package com.dreamchaser.depository_manage.service.impl;
import com.dreamchaser.depository_manage.depository_mapper.RedisfifteenMinRecordMapper;
import com.dreamchaser.depository_manage.entity.RedisfifteenMinRecord;
import com.dreamchaser.depository_manage.service.RedisfifteenMinRecordService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import java.util.List;
@Service
public class RedisfifteenMinRecordServiceImpl implements RedisfifteenMinRecordService {
@Autowired
private RedisfifteenMinRecordMapper redisfifteenMinRecordMapper;
@Override
public List<RedisfifteenMinRecord> queryRedisfifteenMinRecord(RedisfifteenMinRecord redisfifteenMinRecord) {
return redisfifteenMinRecordMapper.queryRedisfifteenMinRecord(redisfifteenMinRecord);
}
@Override
public int deleteRedisfifteenMinRecord(RedisfifteenMinRecord redisfifteenMinRecord) {
return redisfifteenMinRecordMapper.deleteRedisfifteenMinRecord(redisfifteenMinRecord);
}
@Override
public int addRedisfifteenMinRecord(RedisfifteenMinRecord redisfifteenMinRecord) {
return redisfifteenMinRecordMapper.addRedisfifteenMinRecord(redisfifteenMinRecord);
}
@Override
public int updateRedisfifteenMinRecord(RedisfifteenMinRecord redisfifteenMinRecord) {
return redisfifteenMinRecordMapper.updateRedisfifteenMinRecord(redisfifteenMinRecord);
}
}

35
src/main/java/com/dreamchaser/depository_manage/service/impl/RedisfifteenRecordServiceImpl.java

@ -0,0 +1,35 @@
package com.dreamchaser.depository_manage.service.impl;
import com.dreamchaser.depository_manage.depository_mapper.RedisfifteenRecordMapper;
import com.dreamchaser.depository_manage.entity.RedisfifteenRecord;
import com.dreamchaser.depository_manage.service.RedisfifteenRecordService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import java.util.List;
@Service
public class RedisfifteenRecordServiceImpl implements RedisfifteenRecordService {
@Autowired
private RedisfifteenRecordMapper redisfifteenRecordMapper;
@Override
public int deleteRedisfifteenRecord(RedisfifteenRecord redisfifteenRecord) {
return redisfifteenRecordMapper.deleteRedisfifteenRecord(redisfifteenRecord);
}
@Override
public List<RedisfifteenRecord> queryRedisfifteenRecord(RedisfifteenRecord redisfifteenRecord) {
return redisfifteenRecordMapper.queryRedisfifteenRecord(redisfifteenRecord);
}
@Override
public int updateRedisfifteenRecord(RedisfifteenRecord redisfifteenRecord) {
return redisfifteenRecordMapper.updateRedisfifteenRecord(redisfifteenRecord);
}
@Override
public int addRedisfifteenRecord(RedisfifteenRecord redisfifteenRecord) {
return redisfifteenRecordMapper.addRedisfifteenRecord(redisfifteenRecord);
}
}

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

@ -0,0 +1,35 @@
package com.dreamchaser.depository_manage.service.impl;
import com.dreamchaser.depository_manage.depository_mapper.RedisfifteenUserMapper;
import com.dreamchaser.depository_manage.entity.RedisfifteenUser;
import com.dreamchaser.depository_manage.service.RedisfifteenUserService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import java.util.List;
@Service
public class RedisfifteenUserServiceImpl implements RedisfifteenUserService {
@Autowired
private RedisfifteenUserMapper redisfifteenUserMapper;
@Override
public List<RedisfifteenUser> queryRedisfifteenUser(RedisfifteenUser redisfifteenUser) {
return redisfifteenUserMapper.queryRedisfifteenUser(redisfifteenUser);
}
@Override
public int deleteRedisfifteenUser(RedisfifteenUser redisfifteenUser) {
return redisfifteenUserMapper.deleteRedisfifteenUser(redisfifteenUser);
}
@Override
public int updateRedisfifteenUser(RedisfifteenUser redisfifteenUser) {
return redisfifteenUserMapper.updateRedisfifteenUser(redisfifteenUser);
}
@Override
public int addRedisfifteenUser(RedisfifteenUser redisfifteenUser) {
return redisfifteenUserMapper.addRedisfifteenUser(redisfifteenUser);
}
}

28
src/main/java/com/dreamchaser/depository_manage/utils/ObjectFormatUtil.java

@ -99,6 +99,34 @@ public class ObjectFormatUtil {
}
return null;
}
/**
* author:liwenxuan
*
*/
public static ArrayList<Long> mapToList(Map<String,Object> map){
HashMap<String,Long> longHashMap = new HashMap();
ArrayList<Long> ids = new ArrayList<>();
Iterator<String> iterator = map.keySet().iterator();
while (iterator.hasNext()) {
String key = iterator.next();
ArrayList<Integer> valueList = (ArrayList<Integer>) map.get(key);
String value_str = "";
for(int i = 0;i<valueList.size();i++){
value_str+=valueList.get(i).toString();
}
Long longValue = Long.valueOf(value_str);
longHashMap.put(key,longValue);
ids.add(longValue);
//System.out.println("key = " + key + ", value = " + value);
}
return ids;
}
/**
* 用于Object转为指定类型的map
*

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

@ -0,0 +1,189 @@
package com.dreamchaser.depository_manage.utils;
import com.dreamchaser.depository_manage.entity.RedisfifteenMinRecord;
import com.dreamchaser.depository_manage.entity.RedisfifteenRecord;
import com.dreamchaser.depository_manage.entity.RedisfifteenUser;
import com.dreamchaser.depository_manage.exception.MyException;
import com.dreamchaser.depository_manage.service.RedisfifteenMinRecordService;
import com.dreamchaser.depository_manage.service.RedisfifteenRecordService;
import com.dreamchaser.depository_manage.service.RedisfifteenUserService;
import lombok.extern.slf4j.Slf4j;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Component;
import org.springframework.stereotype.Service;
import java.util.List;
import java.util.Map;
@Service
@Slf4j
public class RedisSynchronizeMysqlUtil {
//redis15 mysql同步 都查询
@Autowired
private RedisfifteenUser redisfifteenUser;
@Autowired
private RedisfifteenUserService redisfifteenUserService;
@Autowired
private RedisfifteenMinRecord redisfifteenMinRecord;
@Autowired
private RedisfifteenMinRecordService redisfifteenMinRecordService;
@Autowired
private RedisfifteenRecordService redisfifteenRecordService;
@Autowired
private RedisfifteenRecord redisfifteenRecord;
public RedisfifteenUser queryRedis15User(String user){
redisfifteenUser.setUser(user);
List<RedisfifteenUser> redisfifteenUsers = redisfifteenUserService.queryRedisfifteenUser(redisfifteenUser);
if(redisfifteenUsers.size()>0){//查到了
if(redisfifteenUsers.size()>1){//太多了
log.error("redisfifteenUsers.size>1");
throw new MyException("redisfifteenUsers.size>1");
}else{//查到一个
redisfifteenUser = redisfifteenUsers.get(0);
}
}else{//没查到
}
return redisfifteenUser;
}
public RedisfifteenRecord queryRedis15Record(String record){
redisfifteenRecord.setRecord(record);
List<RedisfifteenRecord> redisfifteenRecords = redisfifteenRecordService.queryRedisfifteenRecord(redisfifteenRecord);
if(redisfifteenRecords.size()>0){
if(redisfifteenRecords.size()>1){
log.error("redisfifteenRecords.size()>1");
throw new MyException("redisfifteenRecords.size()>1");
}else{
redisfifteenRecord = redisfifteenRecords.get(0);
}
}
return redisfifteenRecord;
}
public RedisfifteenMinRecord queryRedis15Min(String minRecordStr){
redisfifteenMinRecord.setMinRecord(minRecordStr);
List<RedisfifteenMinRecord> redisfifteenMinRecords = redisfifteenMinRecordService.queryRedisfifteenMinRecord(redisfifteenMinRecord);
if(redisfifteenMinRecords.size()>0){//查到了
if(redisfifteenMinRecords.size()>1){//查到太多
log.error("redisfifteenMinRecords.size>1");
throw new MyException("redisfifteenMinRecords.size>1");
//return null;
}else{
redisfifteenMinRecord = redisfifteenMinRecords.get(0);
}
}else{//没查到
}
return redisfifteenMinRecord;
}
public int deleteRedis15User(String user){
redisfifteenUser.setUser(user);
int i = redisfifteenUserService.deleteRedisfifteenUser(redisfifteenUser);
return i;
}
public int deleteRedis15Record(String record){
redisfifteenRecord.setRecord(record);
return redisfifteenRecordService.deleteRedisfifteenRecord(redisfifteenRecord);
}
public int deleteRedis15Min(String minRecordStr){
redisfifteenMinRecord.setMinRecord(minRecordStr);
return redisfifteenMinRecordService.deleteRedisfifteenMinRecord(redisfifteenMinRecord);
}
public int addOrUpdateRedis15User(String user, Map<String, Object> userRecordMap){
// userRecord.put("minRecord", "[" + minRecordKey + "," + "]"); // 插入一条子订单
//userRecord.put("minRecord", minRecordList.toString());
String minRecordStr = userRecordMap.get("minRecord").toString();
//先查询看看有没有
RedisfifteenUser redisfifteenUser1 = queryRedis15User(user);
if(redisfifteenUser1.getMinRecord()==null){//没查到,新增
redisfifteenUser.setUser(user);
redisfifteenUser.setMinRecord(minRecordStr);
int i = redisfifteenUserService.addRedisfifteenUser(redisfifteenUser);
return i;
}else{//查到了,更新
return updateRedis15User(user,minRecordStr);
}
}
private int updateRedis15User(String user, String minRecordStr) {
redisfifteenUser.setUser(user);
redisfifteenUser.setMinRecord(minRecordStr);
return redisfifteenUserService.updateRedisfifteenUser(redisfifteenUser);
}
public int addOrUpdateRedis15Record(String record,String minRecord){
int count = 0;
redisfifteenRecord.setRecord(record);
List<RedisfifteenRecord> redisfifteenRecords = redisfifteenRecordService.queryRedisfifteenRecord(redisfifteenRecord);
if(redisfifteenRecords.size()>0){//查到了
if(redisfifteenRecords.size()>1){//查到太多,异常
log.error("redisfifteenRecords.size>1");
throw new MyException("redisfifteenRecords.size>1");
}else{//查到一个,更新
redisfifteenRecord.setMinRecord(minRecord);
count = redisfifteenRecordService.updateRedisfifteenRecord(redisfifteenRecord);
log.info("redisfifteenRecord更新一条,id:"+redisfifteenRecord.getId()+";record:"+redisfifteenRecord.getRecord()+";min_reord"+redisfifteenRecord.getMinRecord());
}
}else{//没查到,新增
redisfifteenRecord.setMinRecord(minRecord);
count = redisfifteenRecordService.addRedisfifteenRecord(redisfifteenRecord);
log.info("redisfifteenRecord新增一条,id:"+redisfifteenRecord.getId()+";record:"+redisfifteenRecord.getRecord()+";min_reord"+redisfifteenRecord.getMinRecord());
}
return count;
}
public int addOrUpdateRedis15Min(String minRecordKey, Map<String, Object> minRecord){
String minRecordKeyStr = minRecordKey.split(":")[1];
//先查询看看有没有
RedisfifteenMinRecord redisfifteenMinRecorda = queryRedis15Min(minRecordKeyStr);
if(redisfifteenMinRecorda.getManager()==null||redisfifteenMinRecorda.getManager()==""){//没查到添加
return addRedis15Min(minRecordKey,minRecord);
}else{//查到了更新
redisfifteenMinRecord.setMinRecord(minRecordKeyStr);
String manager = String.valueOf(minRecord.get("manager"));
String state = String.valueOf(minRecord.get("state"));
String parentId = String.valueOf(minRecord.get("parentId"));
redisfifteenMinRecord.setManager(manager);
redisfifteenMinRecord.setState(state);
redisfifteenMinRecord.setParentId(parentId);
return redisfifteenMinRecordService.updateRedisfifteenMinRecord(redisfifteenMinRecord);
}
}
public int addRedis15Min(String minRecordKey, Map<String, Object> minRecord) {
//minRecord.put("parentId", recordP.getId().toString()); // 当前子订单主订单
//minRecord.put("state", "1"); // 当前子订单状态 1待处理2处理
//minRecord.put("manager", minRecordManage.toString());
//String minRecordKey = "minRecord:" + applicationOutRecordMin.getId();
String minRecordKeyStr = minRecordKey.split(":")[1];
String manager = String.valueOf(minRecord.get("manager"));
String state = String.valueOf(minRecord.get("state"));
String parentId = String.valueOf(minRecord.get("parentId"));
redisfifteenMinRecord.setMinRecord(minRecordKeyStr);
redisfifteenMinRecord.setManager(manager);
redisfifteenMinRecord.setState(state);
redisfifteenMinRecord.setParentId(parentId);
int i = redisfifteenMinRecordService.addRedisfifteenMinRecord(redisfifteenMinRecord);
return i;
}
public int addRedis15Record(String record, String minRecord) {
redisfifteenRecord.setRecord(record);
redisfifteenRecord.setMinRecord(minRecord);
int count = redisfifteenRecordService.addRedisfifteenRecord(redisfifteenRecord);
return count;
}
}

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

@ -39,7 +39,7 @@ spring:
maxActive: 20 #最大活跃连接数
maxWait: 60000 #获取连接的最大等待时间(毫秒)
timeBetweenEvictionRunsMillis: 60000 #配置间隔多久才进行一次检测,检测需要关闭的空闲连接,单位是毫秒
minEvictableIdleTimeMillis: 300000 #配置一个连接在池中最小生存的时间,单位是毫秒
minEvictableIdleTimeMillis: 3000000 #配置一个连接在池中最小生存的时间,单位是毫秒
useGlobalDataSourceStat: true
testWhileIdle: true
testOnReturn: false

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

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

2
src/main/resources/templates/pages/warehouse/depository-out.html

@ -150,7 +150,7 @@
{field: 'cname', width: 200, title: '所处公司'},
{field: 'adminorgName', width: 150, title: '所属部门'},
{field: 'address', width: 120, title: '仓库地址'},
{field: 'introduce', width: 200, title: '仓库介绍'},
{field: 'introduce', width: 200, title: '仓库介绍11111'},
{field: 'maxNumber', width: 200, title: '最大存储量', sort: true},
{field: 'minNumber', width: 200, title: '最小存储量', sort: true},
{field: 'state', title: '状态', minWidth: 80, templet: '#switchTpl'},

Loading…
Cancel
Save