diff --git a/src/main/java/com/glxp/api/controller/inv/InvRemindMsgController.java b/src/main/java/com/glxp/api/controller/inv/InvRemindMsgController.java index a17928b26..95509b007 100644 --- a/src/main/java/com/glxp/api/controller/inv/InvRemindMsgController.java +++ b/src/main/java/com/glxp/api/controller/inv/InvRemindMsgController.java @@ -40,6 +40,7 @@ public class InvRemindMsgController { * 确认预警消息 * * @param id + * @param handleMsg 处理方式 * @return */ @GetMapping("/udiwms/inv/remind/msg/confirmMsg") @@ -47,4 +48,17 @@ public class InvRemindMsgController { 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); + } + + } diff --git a/src/main/java/com/glxp/api/service/inv/InvRemindMsgService.java b/src/main/java/com/glxp/api/service/inv/InvRemindMsgService.java index 9d277a5e8..508dd4ae2 100644 --- a/src/main/java/com/glxp/api/service/inv/InvRemindMsgService.java +++ b/src/main/java/com/glxp/api/service/inv/InvRemindMsgService.java @@ -34,4 +34,13 @@ public interface InvRemindMsgService { * @param invRemindSetEntity */ void createRemindMsg(InvRemindSetEntity invRemindSetEntity); + + /** + * 忽略提醒 + * + * @param id 消息ID + * @param ignoreStatus 忽略状态: 0:不忽略;1:忽略7天;2:忽略15天;3:忽略30天 + * @return + */ + BaseResponse ignoreMsg(Integer id, Integer ignoreStatus); } diff --git a/src/main/java/com/glxp/api/service/inv/impl/InvRemindMsgServiceImpl.java b/src/main/java/com/glxp/api/service/inv/impl/InvRemindMsgServiceImpl.java index c490b341e..16d64b281 100644 --- a/src/main/java/com/glxp/api/service/inv/impl/InvRemindMsgServiceImpl.java +++ b/src/main/java/com/glxp/api/service/inv/impl/InvRemindMsgServiceImpl.java @@ -3,7 +3,6 @@ package com.glxp.api.service.inv.impl; import cn.hutool.core.collection.CollUtil; import cn.hutool.core.util.StrUtil; import cn.hutool.json.JSONUtil; -import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; import com.github.pagehelper.PageHelper; import com.glxp.api.common.enums.ResultEnum; 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.res.inv.InvRemindMsgResponse; import com.glxp.api.service.inv.InvRemindMsgService; +import com.glxp.api.util.DateUtil; import lombok.extern.slf4j.Slf4j; import org.springframework.stereotype.Service; import org.springframework.transaction.annotation.Transactional; @@ -70,13 +70,6 @@ public class InvRemindMsgServiceImpl implements InvRemindMsgService { List invDataList = new CopyOnWriteArrayList<>(invProductList); invDataList.parallelStream().forEach(invProductEntity -> { - //根据预警设置,查询对应的预警消息 - - QueryWrapper 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(); invRemindMsgRequest.setRelId(invProductEntity.getRelIdFk().toString()); @@ -88,7 +81,7 @@ public class InvRemindMsgServiceImpl implements InvRemindMsgService { //根据预警设置,添加类型参数 if (invRemindSetEntity.getLowStock()) { //开启低库存预警 - invRemindMsgRequest.setType("1"); //库存不足类型 + invRemindMsgRequest.setType("1"); //库存不足预警 InvRemindMsgEntity msgEntity = getInvRemindMsgEntity(invRemindMsgRequest, invProductEntity); //判断是否需要生成/刷新库存预警 if (msgEntity.getNextRemindTime().getTime() >= new Date().getTime() && invProductEntity.getReCount() < invRemindSetEntity.getLowStockNum()) { @@ -100,7 +93,7 @@ public class InvRemindMsgServiceImpl implements InvRemindMsgService { if (invRemindSetEntity.getLackStock()) { //开启负库存预警 - invRemindMsgRequest.setType("2");//负库存类型 + invRemindMsgRequest.setType("2");//库存负数预警 InvRemindMsgEntity msgEntity = getInvRemindMsgEntity(invRemindMsgRequest, invProductEntity); //判断是否需要生成/刷新库存预警 if (msgEntity.getNextRemindTime().getTime() >= new Date().getTime() && invProductEntity.getReCount() < 0) { @@ -112,20 +105,72 @@ public class InvRemindMsgServiceImpl implements InvRemindMsgService { if (invRemindSetEntity.getOverStock()) { //开启库存积压预警 - invRemindMsgRequest.setType("3"); //库存积压类型 + invRemindMsgRequest.setType("3"); //库存积压预警 InvRemindMsgEntity msgEntity = getInvRemindMsgEntity(invRemindMsgRequest, invProductEntity); //判断是否需要生成/刷新库存预警 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 { 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("已忽略提醒"); + } + /** * 新增或更新预警消息 * diff --git a/src/main/java/com/glxp/api/task/InvRemindMsgTask.java b/src/main/java/com/glxp/api/task/InvRemindMsgTask.java index 5965e32a2..dc90292f7 100644 --- a/src/main/java/com/glxp/api/task/InvRemindMsgTask.java +++ b/src/main/java/com/glxp/api/task/InvRemindMsgTask.java @@ -1,7 +1,10 @@ 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.schedule.ScheduledDao; +import com.glxp.api.entity.inv.InvRemindSetEntity; import com.glxp.api.entity.system.ScheduledEntity; import com.glxp.api.req.system.ScheduledRequest; import com.glxp.api.service.inv.InvRemindMsgService; @@ -12,6 +15,7 @@ import org.springframework.scheduling.support.CronTrigger; import org.springframework.stereotype.Component; import javax.annotation.Resource; +import java.util.List; @Slf4j @Component @@ -40,7 +44,7 @@ public class InvRemindMsgTask implements SchedulingConfigurer { } private void process() { - /*log.info("开始扫描库存信息,生成库存预警消息"); + log.info("开始扫描库存信息,生成库存预警消息"); List invRemindSetEntities = invRemindSetDao.selectList(null); if (CollUtil.isNotEmpty(invRemindSetEntities)) { log.info("库存预警设置条数:{}", invRemindSetEntities.size()); @@ -50,6 +54,6 @@ public class InvRemindMsgTask implements SchedulingConfigurer { } } else { log.info("无库存预警设置,结束库存扫描"); - }*/ + } } } diff --git a/src/main/java/com/glxp/api/util/DateUtil.java b/src/main/java/com/glxp/api/util/DateUtil.java index a83dd1944..1de35f679 100644 --- a/src/main/java/com/glxp/api/util/DateUtil.java +++ b/src/main/java/com/glxp/api/util/DateUtil.java @@ -604,4 +604,21 @@ public class DateUtil extends DateUtils { log.error("日期类型转字符串异常,日期数据为空"); 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; + } } \ No newline at end of file diff --git a/src/main/resources/application-test.yml b/src/main/resources/application-test.yml new file mode 100644 index 000000000..ea3230aef --- /dev/null +++ b/src/main/resources/application-test.yml @@ -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 +