1.完善库存预警消息提醒,添加测试环境配置文件

master
x_z 2 years ago
parent deefec3fa6
commit f0f4b215c0

@ -40,6 +40,7 @@ public class InvRemindMsgController {
* *
* *
* @param id * @param id
* @param handleMsg
* @return * @return
*/ */
@GetMapping("/udiwms/inv/remind/msg/confirmMsg") @GetMapping("/udiwms/inv/remind/msg/confirmMsg")
@ -47,4 +48,17 @@ public class InvRemindMsgController {
return invRemindMsgService.confirmMsg(id, handleMsg); return invRemindMsgService.confirmMsg(id, handleMsg);
} }
/**
*
*
* @param id ID
* @param ignoreStatus
* @return
*/
@GetMapping("/udiwms/inv/remind/msg/ignoreMsg")
public BaseResponse ignoreMsg(Integer id, Integer ignoreStatus) {
return invRemindMsgService.ignoreMsg(id, ignoreStatus);
}
} }

@ -34,4 +34,13 @@ public interface InvRemindMsgService {
* @param invRemindSetEntity * @param invRemindSetEntity
*/ */
void createRemindMsg(InvRemindSetEntity invRemindSetEntity); void createRemindMsg(InvRemindSetEntity invRemindSetEntity);
/**
*
*
* @param id ID
* @param ignoreStatus 017215330
* @return
*/
BaseResponse ignoreMsg(Integer id, Integer ignoreStatus);
} }

@ -3,7 +3,6 @@ package com.glxp.api.service.inv.impl;
import cn.hutool.core.collection.CollUtil; import cn.hutool.core.collection.CollUtil;
import cn.hutool.core.util.StrUtil; import cn.hutool.core.util.StrUtil;
import cn.hutool.json.JSONUtil; import cn.hutool.json.JSONUtil;
import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
import com.github.pagehelper.PageHelper; import com.github.pagehelper.PageHelper;
import com.glxp.api.common.enums.ResultEnum; import com.glxp.api.common.enums.ResultEnum;
import com.glxp.api.common.res.BaseResponse; import com.glxp.api.common.res.BaseResponse;
@ -16,6 +15,7 @@ import com.glxp.api.entity.inv.InvRemindSetEntity;
import com.glxp.api.req.inv.FilterInvRemindMsgRequest; import com.glxp.api.req.inv.FilterInvRemindMsgRequest;
import com.glxp.api.res.inv.InvRemindMsgResponse; import com.glxp.api.res.inv.InvRemindMsgResponse;
import com.glxp.api.service.inv.InvRemindMsgService; import com.glxp.api.service.inv.InvRemindMsgService;
import com.glxp.api.util.DateUtil;
import lombok.extern.slf4j.Slf4j; import lombok.extern.slf4j.Slf4j;
import org.springframework.stereotype.Service; import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional; import org.springframework.transaction.annotation.Transactional;
@ -70,13 +70,6 @@ public class InvRemindMsgServiceImpl implements InvRemindMsgService {
List<InvProductEntity> invDataList = new CopyOnWriteArrayList<>(invProductList); List<InvProductEntity> invDataList = new CopyOnWriteArrayList<>(invProductList);
invDataList.parallelStream().forEach(invProductEntity -> { invDataList.parallelStream().forEach(invProductEntity -> {
//根据预警设置,查询对应的预警消息
QueryWrapper<InvRemindMsgEntity> wrapper = new QueryWrapper<>();
wrapper.eq(StrUtil.isNotBlank(invRemindSetEntity.getRelId()), "relId", invRemindSetEntity.getRelId())
.eq("invCode", invRemindSetEntity.getInvCode())
.eq(StrUtil.isNotBlank(invRemindSetEntity.getInvSpaceCode()), "invSpaceCode", invRemindSetEntity.getInvSpaceCode());
//初始化查询预警消息参数 //初始化查询预警消息参数
FilterInvRemindMsgRequest invRemindMsgRequest = new FilterInvRemindMsgRequest(); FilterInvRemindMsgRequest invRemindMsgRequest = new FilterInvRemindMsgRequest();
invRemindMsgRequest.setRelId(invProductEntity.getRelIdFk().toString()); invRemindMsgRequest.setRelId(invProductEntity.getRelIdFk().toString());
@ -88,7 +81,7 @@ public class InvRemindMsgServiceImpl implements InvRemindMsgService {
//根据预警设置,添加类型参数 //根据预警设置,添加类型参数
if (invRemindSetEntity.getLowStock()) { if (invRemindSetEntity.getLowStock()) {
//开启低库存预警 //开启低库存预警
invRemindMsgRequest.setType("1"); //库存不足类型 invRemindMsgRequest.setType("1"); //库存不足预警
InvRemindMsgEntity msgEntity = getInvRemindMsgEntity(invRemindMsgRequest, invProductEntity); InvRemindMsgEntity msgEntity = getInvRemindMsgEntity(invRemindMsgRequest, invProductEntity);
//判断是否需要生成/刷新库存预警 //判断是否需要生成/刷新库存预警
if (msgEntity.getNextRemindTime().getTime() >= new Date().getTime() && invProductEntity.getReCount() < invRemindSetEntity.getLowStockNum()) { if (msgEntity.getNextRemindTime().getTime() >= new Date().getTime() && invProductEntity.getReCount() < invRemindSetEntity.getLowStockNum()) {
@ -100,7 +93,7 @@ public class InvRemindMsgServiceImpl implements InvRemindMsgService {
if (invRemindSetEntity.getLackStock()) { if (invRemindSetEntity.getLackStock()) {
//开启负库存预警 //开启负库存预警
invRemindMsgRequest.setType("2");//负库存类型 invRemindMsgRequest.setType("2");//库存负数预警
InvRemindMsgEntity msgEntity = getInvRemindMsgEntity(invRemindMsgRequest, invProductEntity); InvRemindMsgEntity msgEntity = getInvRemindMsgEntity(invRemindMsgRequest, invProductEntity);
//判断是否需要生成/刷新库存预警 //判断是否需要生成/刷新库存预警
if (msgEntity.getNextRemindTime().getTime() >= new Date().getTime() && invProductEntity.getReCount() < 0) { if (msgEntity.getNextRemindTime().getTime() >= new Date().getTime() && invProductEntity.getReCount() < 0) {
@ -112,20 +105,72 @@ public class InvRemindMsgServiceImpl implements InvRemindMsgService {
if (invRemindSetEntity.getOverStock()) { if (invRemindSetEntity.getOverStock()) {
//开启库存积压预警 //开启库存积压预警
invRemindMsgRequest.setType("3"); //库存积压类型 invRemindMsgRequest.setType("3"); //库存积压预警
InvRemindMsgEntity msgEntity = getInvRemindMsgEntity(invRemindMsgRequest, invProductEntity); InvRemindMsgEntity msgEntity = getInvRemindMsgEntity(invRemindMsgRequest, invProductEntity);
//判断是否需要生成/刷新库存预警 //判断是否需要生成/刷新库存预警
if (msgEntity.getNextRemindTime().getTime() > new Date().getTime() && invProductEntity.getReCount() > invRemindSetEntity.getOverStockNum()) { if (msgEntity.getNextRemindTime().getTime() > new Date().getTime() && invProductEntity.getReCount() > invRemindSetEntity.getOverStockNum()) {
//设置预警消息
msgEntity.setMsg(StrUtil.format("库存积压,当前库存数量:{}", invProductEntity.getReCount()));
saveMsg(msgEntity);
}
}
if (invRemindSetEntity.getExpireDate()) {
//开启产品过期预警
invRemindMsgRequest.setType("4"); //库存过期预警
InvRemindMsgEntity msgEntity = getInvRemindMsgEntity(invRemindMsgRequest, invProductEntity);
//判断是否需要生成/刷新库存预警
if (msgEntity.getNextRemindTime().getTime() > new Date().getTime() && StrUtil.isNotBlank(invProductEntity.getExpireDate()) && DateUtil.compareExpire(invProductEntity.getExpireDate(), null)) {
//设置预警消息
msgEntity.setMsg(StrUtil.format("产品已过期,产品失效日期:{}", invProductEntity.getExpireDate()));
saveMsg(msgEntity);
} }
} }
if (invRemindSetEntity.getRecentDate()) {
//开启库存近效期预警
invRemindMsgRequest.setType("5"); //库存近效期预警
InvRemindMsgEntity msgEntity = getInvRemindMsgEntity(invRemindMsgRequest, invProductEntity);
//判断是否需要生成/刷新库存预警
if (msgEntity.getNextRemindTime().getTime() > new Date().getTime() && StrUtil.isNotBlank(invProductEntity.getExpireDate())) {
//计算产品记录失效的天数
long recentDay = Long.parseLong(DateUtil.getDate("yyMMdd")) - Long.parseLong(invProductEntity.getExpireDate());
if (invRemindSetEntity.getRecentDateDay() > recentDay) {
//设置预警消息
msgEntity.setMsg(StrUtil.format("库存即将过期,产品失效日期:{}", invProductEntity.getExpireDate()));
saveMsg(msgEntity);
}
}
}
}); });
} else { } else {
log.info("此仓库或产品库存信息不存在"); log.info("此仓库或产品库存信息不存在");
} }
} }
@Override
public BaseResponse ignoreMsg(Integer id, Integer ignoreStatus) {
InvRemindMsgEntity msgEntity = invRemindMsgDao.selectById(id);
//根据忽略状态,更新忽略时间
Date updateTime = msgEntity.getUpdateTime();
switch (ignoreStatus) {
case 1: //忽略7天
msgEntity.setNextRemindTime(DateUtil.getBeforeDay(updateTime, 7 * 24));
break;
case 2: //忽略15天
msgEntity.setNextRemindTime(DateUtil.getBeforeDay(updateTime, 15 * 24));
break;
case 3: //忽略30天
msgEntity.setNextRemindTime(DateUtil.getBeforeDay(updateTime, 30 * 24));
break;
default:
break;
}
msgEntity.setIgnoreStatus(ignoreStatus);
invRemindMsgDao.updateById(msgEntity);
return ResultVOUtils.success("已忽略提醒");
}
/** /**
* *
* *

@ -1,7 +1,10 @@
package com.glxp.api.task; package com.glxp.api.task;
import cn.hutool.core.collection.CollUtil;
import cn.hutool.core.thread.ThreadUtil;
import com.glxp.api.dao.inv.InvRemindSetDao; import com.glxp.api.dao.inv.InvRemindSetDao;
import com.glxp.api.dao.schedule.ScheduledDao; import com.glxp.api.dao.schedule.ScheduledDao;
import com.glxp.api.entity.inv.InvRemindSetEntity;
import com.glxp.api.entity.system.ScheduledEntity; import com.glxp.api.entity.system.ScheduledEntity;
import com.glxp.api.req.system.ScheduledRequest; import com.glxp.api.req.system.ScheduledRequest;
import com.glxp.api.service.inv.InvRemindMsgService; import com.glxp.api.service.inv.InvRemindMsgService;
@ -12,6 +15,7 @@ import org.springframework.scheduling.support.CronTrigger;
import org.springframework.stereotype.Component; import org.springframework.stereotype.Component;
import javax.annotation.Resource; import javax.annotation.Resource;
import java.util.List;
@Slf4j @Slf4j
@Component @Component
@ -40,7 +44,7 @@ public class InvRemindMsgTask implements SchedulingConfigurer {
} }
private void process() { private void process() {
/*log.info("开始扫描库存信息,生成库存预警消息"); log.info("开始扫描库存信息,生成库存预警消息");
List<InvRemindSetEntity> invRemindSetEntities = invRemindSetDao.selectList(null); List<InvRemindSetEntity> invRemindSetEntities = invRemindSetDao.selectList(null);
if (CollUtil.isNotEmpty(invRemindSetEntities)) { if (CollUtil.isNotEmpty(invRemindSetEntities)) {
log.info("库存预警设置条数:{}", invRemindSetEntities.size()); log.info("库存预警设置条数:{}", invRemindSetEntities.size());
@ -50,6 +54,6 @@ public class InvRemindMsgTask implements SchedulingConfigurer {
} }
} else { } else {
log.info("无库存预警设置,结束库存扫描"); log.info("无库存预警设置,结束库存扫描");
}*/ }
} }
} }

@ -604,4 +604,21 @@ public class DateUtil extends DateUtils {
log.error("日期类型转字符串异常,日期数据为空"); log.error("日期类型转字符串异常,日期数据为空");
return null; return null;
} }
/**
*
*
* @param expireDate yyMMdd
* @param time , yyMMdd
* @return
*/
public static boolean compareExpire(String expireDate, String time) {
if (StrUtil.isBlank(time)) {
time = DateUtil.getDate("yyMMdd");
}
long t1 = Long.parseLong(expireDate);
long t2 = Long.parseLong(time);
return t2 > t1;
}
} }

@ -0,0 +1,50 @@
server:
port: 9991
spring:
datasource:
driver-class-name: com.mysql.cj.jdbc.Driver
jdbc-url: jdbc:mysql://192.168.0.66:3364/udi_wms_wmd?allowMultiQueries=true&serverTimezone=Asia/Shanghai&useUnicode=true&characterEncoding=utf8&zeroDateTimeBehavior=convertToNull&useSSL=false&allowPublicKeyRetrieval=true
username: root
password: Glxp@6066
hikari:
connection-timeout: 60000
maximum-pool-size: 60
minimum-idle: 10
redis:
database: 8
host: 192.168.0.66
port: 6400
# password: 123456
timeout: 300
jedis:
pool:
max-active: 8
max-wait: -1
max-idle: 8
min-idle: 0
jackson:
date-format: yyyy-MM-dd HH:mm:ss
time-zone: GMT+8
servlet:
multipart:
max-file-size: 500MB
max-request-size: 500MB
ok:
http:
connect-timeout: 3000
read-timeout: 3000
write-timeout: 3000
max-idle-connections: 200
keep-alive-duration: 300
logging:
level:
com.glxp.api.dao: debug
file_path: /usr/local/develop/udi/udiwms/udiwmsfile/
UDI_KEY: 6b137c66-6286-46c6-8efa-c2f5dd9237df
UDI_SERVER_URL: https://www.udims.com/UDI_DL_Server_test
SPMS_KEY: lCOdWCBKS6Kw45wdnnqUTELXyuSKnXEs
Loading…
Cancel
Save