缓存线pad接口更新

This commit is contained in:
2023-03-25 11:14:13 +08:00
parent ce138e4759
commit 851c3b492f
2 changed files with 292 additions and 286 deletions

View File

@@ -1,7 +1,5 @@
package org.nl.wms.basedata.master.service.impl; package org.nl.wms.basedata.master.service.impl;
import cn.hutool.core.date.DateUtil; import cn.hutool.core.date.DateUtil;
import cn.hutool.core.map.MapUtil; import cn.hutool.core.map.MapUtil;
import cn.hutool.core.util.IdUtil; import cn.hutool.core.util.IdUtil;
@@ -14,8 +12,10 @@ import lombok.RequiredArgsConstructor;
import org.json.XML; import org.json.XML;
import org.nl.common.anno.Log; import org.nl.common.anno.Log;
import lombok.extern.slf4j.Slf4j; import lombok.extern.slf4j.Slf4j;
import org.nl.config.thread.ThreadPoolExecutorUtil;
import org.nl.modules.common.exception.BadRequestException; import org.nl.modules.common.exception.BadRequestException;
import org.nl.common.utils.SecurityUtils; import org.nl.common.utils.SecurityUtils;
import org.nl.modules.common.utils.RedisUtils;
import org.nl.modules.wql.WQL; import org.nl.modules.wql.WQL;
import org.nl.modules.wql.core.bean.WQLObject; import org.nl.modules.wql.core.bean.WQLObject;
import org.nl.modules.wql.util.WqlUtil; import org.nl.modules.wql.util.WqlUtil;
@@ -24,12 +24,15 @@ import org.nl.wms.basedata.master.constant.MaterOptTypeEnum;
import org.nl.wms.basedata.master.service.ClassstandardService; import org.nl.wms.basedata.master.service.ClassstandardService;
import org.nl.wms.basedata.master.service.MaterialbaseService; import org.nl.wms.basedata.master.service.MaterialbaseService;
import org.nl.wms.basedata.master.service.dto.MaterialbaseDto; import org.nl.wms.basedata.master.service.dto.MaterialbaseDto;
import org.nl.wms.pda.dto.MaterialDto;
import org.springframework.data.domain.Pageable; import org.springframework.data.domain.Pageable;
import org.springframework.stereotype.Service; import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional; import org.springframework.transaction.annotation.Transactional;
import java.util.*; import java.util.*;
import java.util.concurrent.CompletableFuture;
import java.util.concurrent.ThreadPoolExecutor;
import java.util.concurrent.TimeUnit;
/** /**
* @author zhouz * @author zhouz
@@ -42,6 +45,7 @@ import java.util.*;
public class MaterialbaseServiceImpl implements MaterialbaseService{ public class MaterialbaseServiceImpl implements MaterialbaseService{
private final ClassstandardService classstandardService; private final ClassstandardService classstandardService;
//private final WmsToErpService wmsToErpService; //private final WmsToErpService wmsToErpService;
private final RedisUtils redisUtils;
@Override @Override
public Map<String,Object> queryAll(Map whereJson, Pageable page) { public Map<String,Object> queryAll(Map whereJson, Pageable page) {
@@ -51,11 +55,8 @@ public class MaterialbaseServiceImpl implements MaterialbaseService {
String material_type_id = MapUtil.getStr(whereJson, "material_type_id"); String material_type_id = MapUtil.getStr(whereJson, "material_type_id");
String class_code = MapUtil.getStr(whereJson, "class_code"); String class_code = MapUtil.getStr(whereJson, "class_code");
String ids = MapUtil.getStr(whereJson, "ids"); String ids = MapUtil.getStr(whereJson, "ids");
HashMap<String,String> map = new HashMap<>(); HashMap<String,String> map = new HashMap<>();
map.put("flag", "1"); map.put("flag", "1");
if(!StrUtil.isEmpty(search)) { if(!StrUtil.isEmpty(search)) {
//处理转义字符 //处理转义字符
if(search.contains("\\")) { if(search.contains("\\")) {
@@ -63,21 +64,19 @@ public class MaterialbaseServiceImpl implements MaterialbaseService {
} }
map.put("search", "%" + search + "%"); map.put("search", "%" + search + "%");
} }
//处理物料当前节点的所有子节点 //处理物料当前节点的所有子节点
if(!StrUtil.isEmpty(material_type_id)) { if(!StrUtil.isEmpty(material_type_id)) {
map.put("material_type_id", material_type_id); map.put("material_type_id", material_type_id);
String classIds = classstandardService.getChildIdStr(material_type_id); String classIds = classstandardService.getChildIdStr(material_type_id);
map.put("classIds", classIds); map.put("classIds", classIds);
} else if (ObjectUtil.isNotEmpty(class_idStr)) { }
else if(ObjectUtil.isNotEmpty(class_idStr)) {
String classIds = classstandardService.getAllChildIdStr(class_idStr); String classIds = classstandardService.getAllChildIdStr(class_idStr);
map.put("classIds", classIds); map.put("classIds", classIds);
} }
if(!StrUtil.isEmpty(class_code)) { if(!StrUtil.isEmpty(class_code)) {
map.put("class_code", class_code + "%"); map.put("class_code", class_code + "%");
} }
StringBuffer where = new StringBuffer(); StringBuffer where = new StringBuffer();
if(StrUtil.isNotEmpty(ids)) { if(StrUtil.isNotEmpty(ids)) {
ids = ids.replaceAll("\'", ""); ids = ids.replaceAll("\'", "");
@@ -92,10 +91,10 @@ public class MaterialbaseServiceImpl implements MaterialbaseService {
} }
where.append(")"); where.append(")");
map.put("idssql", where.toString()); map.put("idssql", where.toString());
} else { }
else{
map.put("idssql", "1=1"); map.put("idssql", "1=1");
} }
JSONObject jo = WQL.getWO("QMD_ME_MATERIAL").addParamMap(map).pageQuery(WqlUtil.getHttpContext(page), "material_id"); JSONObject jo = WQL.getWO("QMD_ME_MATERIAL").addParamMap(map).pageQuery(WqlUtil.getHttpContext(page), "material_id");
return jo; return jo;
} }
@@ -125,7 +124,9 @@ public class MaterialbaseServiceImpl implements MaterialbaseService {
code = code.replace("\\", "\\\\"); code = code.replace("\\", "\\\\");
} }
JSONObject json = wo.query("material_code ='" + code + "'").uniqueResult(0); JSONObject json = wo.query("material_code ='" + code + "'").uniqueResult(0);
if (ObjectUtil.isEmpty(json)) return null; if(ObjectUtil.isEmpty(json)) {
return null;
}
String unit_name = WQLObject.getWQLObject("md_pb_measureunit").query("measure_unit_id= '" + json.getString("base_unit_id") + "'").uniqueResult(0).getString("unit_name"); String unit_name = WQLObject.getWQLObject("md_pb_measureunit").query("measure_unit_id= '" + json.getString("base_unit_id") + "'").uniqueResult(0).getString("unit_name");
json.put("base_unit_name", unit_name); json.put("base_unit_name", unit_name);
final MaterialbaseDto obj = json.toJavaObject(MaterialbaseDto.class); final MaterialbaseDto obj = json.toJavaObject(MaterialbaseDto.class);
@@ -135,10 +136,9 @@ public class MaterialbaseServiceImpl implements MaterialbaseService {
@Override @Override
@Transactional(rollbackFor = Exception.class) @Transactional(rollbackFor = Exception.class)
public void create(MaterialbaseDto dto) { public void create(MaterialbaseDto dto) {
ThreadPoolExecutor pool = ThreadPoolExecutorUtil.getPoll();
String currentUserId = SecurityUtils.getCurrentUserId(); String currentUserId = SecurityUtils.getCurrentUserId();
String nickName = SecurityUtils.getCurrentNickName(); String nickName = SecurityUtils.getCurrentNickName();
dto.setMaterial_id(IdUtil.getSnowflake(1, 1).nextId()); dto.setMaterial_id(IdUtil.getSnowflake(1, 1).nextId());
dto.setCreate_id(currentUserId); dto.setCreate_id(currentUserId);
dto.setCreate_name(nickName); dto.setCreate_name(nickName);
@@ -149,35 +149,36 @@ public class MaterialbaseServiceImpl implements MaterialbaseService {
WQLObject wo = WQLObject.getWQLObject("md_me_materialbase"); WQLObject wo = WQLObject.getWQLObject("md_me_materialbase");
JSONObject json = JSONObject.parseObject(JSON.toJSONString(dto)); JSONObject json = JSONObject.parseObject(JSON.toJSONString(dto));
wo.insert(json); wo.insert(json);
//子线程异步更新redis数据
CompletableFuture<Void> updateMaterToRedis = CompletableFuture.runAsync(this::updateRedis, pool);
} }
@Override @Override
@Transactional(rollbackFor = Exception.class) @Transactional(rollbackFor = Exception.class)
public void update(MaterialbaseDto dto) { public void update(MaterialbaseDto dto) {
ThreadPoolExecutor pool = ThreadPoolExecutorUtil.getPoll();
MaterialbaseDto entity = this.findById(dto.getMaterial_id()); MaterialbaseDto entity = this.findById(dto.getMaterial_id());
if(entity == null) { if(entity == null) {
throw new BadRequestException("被删除或无权限,操作失败!"); throw new BadRequestException("被删除或无权限,操作失败!");
} }
String currentUserId = SecurityUtils.getCurrentUserId(); String currentUserId = SecurityUtils.getCurrentUserId();
String nickName = SecurityUtils.getCurrentNickName(); String nickName = SecurityUtils.getCurrentNickName();
dto.setUpdate_time(DateUtil.now()); dto.setUpdate_time(DateUtil.now());
dto.setUpdate_id(currentUserId); dto.setUpdate_id(currentUserId);
dto.setUpdate_name(nickName); dto.setUpdate_name(nickName);
WQLObject wo = WQLObject.getWQLObject("md_me_materialbase"); WQLObject wo = WQLObject.getWQLObject("md_me_materialbase");
JSONObject json = JSONObject.parseObject(JSON.toJSONString(dto)); JSONObject json = JSONObject.parseObject(JSON.toJSONString(dto));
wo.update(json); wo.update(json);
//子线程异步更新redis数据
CompletableFuture<Void> updateMaterToRedis = CompletableFuture.runAsync(this::updateRedis, pool);
} }
@Override @Override
@Transactional(rollbackFor = Exception.class) @Transactional(rollbackFor = Exception.class)
public void deleteAll(Long[] ids) { public void deleteAll(Long[] ids) {
ThreadPoolExecutor pool = ThreadPoolExecutorUtil.getPoll();
String currentUserId = SecurityUtils.getCurrentUserId(); String currentUserId = SecurityUtils.getCurrentUserId();
String nickName = SecurityUtils.getCurrentNickName(); String nickName = SecurityUtils.getCurrentNickName();
WQLObject wo = WQLObject.getWQLObject("md_me_materialbase"); WQLObject wo = WQLObject.getWQLObject("md_me_materialbase");
for(Long material_id : ids) { for(Long material_id : ids) {
JSONObject param = new JSONObject(); JSONObject param = new JSONObject();
@@ -188,6 +189,8 @@ public class MaterialbaseServiceImpl implements MaterialbaseService {
param.put("update_time", DateUtil.now()); param.put("update_time", DateUtil.now());
wo.update(param); wo.update(param);
} }
//子线程异步更新redis数据
CompletableFuture<Void> updateMaterToRedis = CompletableFuture.runAsync(this::updateRedis, pool);
} }
@Override @Override
@@ -200,12 +203,10 @@ public class MaterialbaseServiceImpl implements MaterialbaseService {
throw new BadRequestException("物料类型不能为空!"); throw new BadRequestException("物料类型不能为空!");
} }
String class_idStr = MaterOptTypeEnum.getObj(materOpt_code).getString("class_idStr"); String class_idStr = MaterOptTypeEnum.getObj(materOpt_code).getString("class_idStr");
Set<String> set = classstandardService.getAllChildIdSet(class_idStr); Set<String> set = classstandardService.getAllChildIdSet(class_idStr);
if(ObjectUtil.isNotEmpty(set)) { if(ObjectUtil.isNotEmpty(set)) {
return set.contains(material_type_id); return set.contains(material_type_id);
} }
return false; return false;
} }
@@ -217,9 +218,9 @@ public class MaterialbaseServiceImpl implements MaterialbaseService {
@Override @Override
@Transactional(rollbackFor = Exception.class) @Transactional(rollbackFor = Exception.class)
public JSONObject synchronize(JSONObject form) { public JSONObject synchronize(JSONObject form) {
ThreadPoolExecutor pool = ThreadPoolExecutorUtil.getPoll();
log.info("导入方法开始"); log.info("导入方法开始");
JSONObject result = new JSONObject(); JSONObject result = new JSONObject();
String url = "http://192.168.0.82:8000/sap/bc/srt/rfc/sap/z_sd0002_send_mat_md/800/z_sd0002_send_mat_md/binding"; String url = "http://192.168.0.82:8000/sap/bc/srt/rfc/sap/z_sd0002_send_mat_md/800/z_sd0002_send_mat_md/binding";
String method = "ZSd0002SendMatMd"; String method = "ZSd0002SendMatMd";
String bill_code1 = form.getString("bill_code1"); String bill_code1 = form.getString("bill_code1");
@@ -237,14 +238,13 @@ public class MaterialbaseServiceImpl implements MaterialbaseService {
JSONObject Envelope = ret.getJSONObject("soap-env:Envelope"); JSONObject Envelope = ret.getJSONObject("soap-env:Envelope");
JSONObject Body = Envelope.getJSONObject("soap-env:Body"); JSONObject Body = Envelope.getJSONObject("soap-env:Body");
ZfmGetSoResponse = Body.getJSONObject("n0:ZSd0002SendMatMdResponse"); ZfmGetSoResponse = Body.getJSONObject("n0:ZSd0002SendMatMdResponse");
} catch (Exception e) { }
catch(Exception e) {
e.printStackTrace(); e.printStackTrace();
} }
JSONObject TZtsalesorder = ZfmGetSoResponse.getJSONObject("Out"); JSONObject TZtsalesorder = ZfmGetSoResponse.getJSONObject("Out");
JSONObject TMara = TZtsalesorder.getJSONObject("TMara"); JSONObject TMara = TZtsalesorder.getJSONObject("TMara");
JSONArray rows = TMara.getJSONArray("item"); JSONArray rows = TMara.getJSONArray("item");
for(int i = 0; i < rows.size(); i++) { for(int i = 0; i < rows.size(); i++) {
JSONObject row = rows.getJSONObject(i); JSONObject row = rows.getJSONObject(i);
String Matnr = row.getString("Matnr").replaceAll("^(0+)", ""); String Matnr = row.getString("Matnr").replaceAll("^(0+)", "");
@@ -277,7 +277,8 @@ public class MaterialbaseServiceImpl implements MaterialbaseService {
mater_jo.put("is_used", "1"); mater_jo.put("is_used", "1");
mater_jo.put("is_delete", "0"); mater_jo.put("is_delete", "0");
WQLObject.getWQLObject("md_me_materialbase").insert(mater_jo); WQLObject.getWQLObject("md_me_materialbase").insert(mater_jo);
} else { }
else{
mater_jo.put("material_code", Matnr); mater_jo.put("material_code", Matnr);
mater_jo.put("material_name", row.getString("Maktx")); mater_jo.put("material_name", row.getString("Maktx"));
mater_jo.put("material_model", row.getString("Mtart")); mater_jo.put("material_model", row.getString("Mtart"));
@@ -304,6 +305,8 @@ public class MaterialbaseServiceImpl implements MaterialbaseService {
WQLObject.getWQLObject("md_me_materialbase").update(mater_jo); WQLObject.getWQLObject("md_me_materialbase").update(mater_jo);
} }
} }
//子线程异步更新redis数据
CompletableFuture<Void> updateMaterToRedis = CompletableFuture.runAsync(this::updateRedis, pool);
result.put("message", "导入成功!一共导入:" + rows.size() + "条数据!"); result.put("message", "导入成功!一共导入:" + rows.size() + "条数据!");
return new JSONObject(); return new JSONObject();
} }
@@ -325,4 +328,9 @@ public class MaterialbaseServiceImpl implements MaterialbaseService {
return newParentArray; return newParentArray;
} }
public void updateRedis() {
JSONArray materialJsonArray = WQL.getWO("PDA_QUERY").addParam("flag", "5").process().getResultJSONArray(0);
List<MaterialDto> finalMaterialList = materialJsonArray.toJavaList(MaterialDto.class);
redisUtils.set("materialList", finalMaterialList);
}
} }

View File

@@ -70,27 +70,25 @@ public class CacheLineHandServiceImpl implements CacheLineHandService{
return getMaterialDto(materialList, param); return getMaterialDto(materialList, param);
} }
//2.查reids //2.查reids
// materialList = redisUtils.get("materialList", MaterialDto.class); materialList = redisUtils.get("materialList", MaterialDto.class);
// if(null != materialList) { if(null != materialList) {
// //设置本地缓存 //设置本地缓存
// cache.setLocalCache("materialList", materialList); cache.setLocalCache("materialList", materialList);
// return getMaterialDto(materialList, param); return getMaterialDto(materialList, param);
// } }
//3.查db //3.查db
JSONArray materialJsonArray = WQL.getWO("PDA_QUERY").addParam("flag", "5").process().getResultJSONArray(0); JSONArray materialJsonArray = WQL.getWO("PDA_QUERY").addParam("flag", "5").process().getResultJSONArray(0);
materialList = materialJsonArray.toJavaList(MaterialDto.class); materialList = materialJsonArray.toJavaList(MaterialDto.class);
//缓存到redis //缓存到redis
List<MaterialDto> finalMaterialList1 = materialList; List<MaterialDto> finalMaterialList1 = materialList;
CompletableFuture<Void> f1 = CompletableFuture.runAsync(() -> redisUtils.set("materialList", finalMaterialList1, 3600, TimeUnit.SECONDS), pool); CompletableFuture<Void> f1 = CompletableFuture.runAsync(() -> redisUtils.set("materialList", finalMaterialList1), pool);
//缓存到本地 //缓存到本地
List<MaterialDto> finalMaterialList = materialList; List<MaterialDto> finalMaterialList = materialList;
CompletableFuture<Void> f2 = CompletableFuture.runAsync(() -> cache.setLocalCache("materialList", finalMaterialList), pool); CompletableFuture<Void> f2 = CompletableFuture.runAsync(() -> cache.setLocalCache("materialList", finalMaterialList), pool);
f1.exceptionally((e) -> { f1.exceptionally((e) -> {
log.error("物料信息缓存redis失败: {}", e.getMessage(), e);
throw new BadRequestException("物料信息缓存redis失败"); throw new BadRequestException("物料信息缓存redis失败");
}); });
f2.exceptionally((e) -> { f2.exceptionally((e) -> {
log.error("物料信息缓存本地失败: {}", e.getMessage(), e);
throw new BadRequestException("物料信息缓存本地失败"); throw new BadRequestException("物料信息缓存本地失败");
}); });
return materialList; return materialList;