Commit f07ab58d by 李小惠

修改消息推送接口代码

parent 34a2ffa4
package com.junmp.jyzb.api.bean.req;
import lombok.Data;
/**
* 过质保期的数据汇总数据
*/
@Data
public class InvExpireReq {
private String typeId;
private String typeName;
private String sizeId;
private String sizeName;
private Long orgId;
private String locationId;
private String locationName;
private Integer sumExpireNumber;
private String userId;
}
......@@ -88,6 +88,12 @@ public class Inventory implements Serializable {
private Long orgId;
/**
* 组织机构名称
*/
@TableField(exist = false)
private String orgName;
/**
* 规格尺寸
*/
private String state;
......
......@@ -8,6 +8,7 @@ import com.junmp.jyzb.api.bean.dto.EqsSumDto;
import com.junmp.jyzb.api.bean.dto.InventoryDto;
import com.junmp.jyzb.api.bean.query.InventoryReq;
import com.junmp.jyzb.api.bean.req.BatchEditingInvsReq;
import com.junmp.jyzb.api.bean.req.InvExpireReq;
import com.junmp.jyzb.api.bean.vo.InventoryVo;
import com.junmp.jyzb.entity.Inventory;
import com.junmp.jyzb.entity.InventorySummary;
......@@ -67,4 +68,9 @@ public interface InventoryMapper extends BaseMapper<Inventory> {
//根据epc获取装备信息
List<InventoryDto> GetInvInfoByEpc(@Param("list") List<String> epcList);
//通过组织机构id获取组织机构下的userIdlist
List<InvExpireReq> selectUserListByOrgs(@Param("list") List<Long> uniqueOrgIDsList);
List<Inventory> searchExpireEqs(@Param("list") List<Object[]> searchItem);
}
\ No newline at end of file
......@@ -5,12 +5,14 @@ import cn.hutool.core.util.ObjectUtil;
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
import com.baomidou.mybatisplus.core.toolkit.Wrappers;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.junmp.jyzb.api.bean.req.InvExpireReq;
import com.junmp.jyzb.api.util.GenCodeUtil;
import com.junmp.jyzb.entity.Company;
import com.junmp.jyzb.entity.Inventory;
import com.junmp.jyzb.entity.InventorySummary;
import com.junmp.jyzb.entity.ProductSku;
import com.junmp.jyzb.mapper.ExpireMapper;
import com.junmp.jyzb.mapper.InventoryMapper;
import com.junmp.jyzb.mapper.MsgMapper;
import com.junmp.jyzb.service.InventoryService;
import com.junmp.v2.common.util.BeanPlusUtil;
......@@ -26,10 +28,7 @@ import org.springframework.stereotype.Component;
import javax.annotation.Resource;
import java.time.LocalDate;
import java.util.ArrayList;
import java.util.Date;
import java.util.List;
import java.util.Map;
import java.util.*;
/**
......@@ -48,6 +47,9 @@ public class InvExpireMsg implements JobAction {
private InventoryService inventoryService;
@Resource
private InventoryMapper inventoryMapper;
@Resource
private MessageApi messageApi;
@Resource
......@@ -60,65 +62,99 @@ public class InvExpireMsg implements JobAction {
int pageSize = 1000; // 每页记录数,可以根据需求调整
int currentPage = 1; // 当前页数
//所有待判断的物资
wrapper.eq( Inventory::getTermState, 0);
//所有待判断的物资(只获取仓库下的过质保期数量)
//除去销毁出库数
wrapper.eq(Inventory::getTermState, 0);
wrapper.ne(Inventory::getState,"destory");
//获取未超期的物资数量
long termCount= inventoryService.count(wrapper);
List<Inventory> list=new ArrayList<>();
if (termCount>0) {
// 分页查询
while ((currentPage - 1) * pageSize < termCount) {
List<Inventory> inventoryList = processPageData(currentPage, pageSize);
int startPageSize=(currentPage - 1) * pageSize ;
List<Inventory> inventoryList = processPageData(startPageSize, pageSize);
currentPage++;
list.addAll(inventoryList);
}
}
//超期物资查询出来之后,将超期物资进行消息推送提醒
//直接对list进行处理操作推送消息即可
for (Inventory inventory:list) {
MessageSendReq sendReq = new MessageSendReq();
sendReq.setSendUserId("1000");
sendReq.setReceiveUserIds("1000");
sendReq.setMsgTitle("物资过质保期");
//设置业务类型
SysDictItem one = sysDictItemService.getOne(new LambdaQueryWrapper<SysDictItem>()
.eq(SysDictItem::getDictItemId, "expire"));
sendReq.setBizType(one.getItemValue());
sendReq.setMsgContent("仓库下的装备的物资已经过质保期");
sendReq.setPriority("0");
sendReq.setSendTime(DateTime.now());
messageApi.sendMessage(sendReq);
//需要对该所有超期物资进行分组
List<InvExpireReq> invExpireReqList=new ArrayList<>();
List<Long> orgIdsList=new ArrayList<>();
for (Inventory inventory : list) {
if (invExpireReqList.size()==0){
InvExpireReq invExpireReq = new InvExpireReq();
BeanPlusUtil.copyProperties(inventory,invExpireReq);
invExpireReq.setSumExpireNumber(1);
invExpireReqList.add(invExpireReq);
orgIdsList.add(inventory.getOrgId());
continue;
}
boolean found = false;
for (InvExpireReq groupedSum : invExpireReqList) {
if (groupedSum.getOrgId().equals(inventory.getOrgId()) && groupedSum.getLocationId().equals(inventory.getLocationId())
&& groupedSum.getSizeId().equals(inventory.getSizeId()) && groupedSum.getTypeId().equals(inventory.getTypeId())) {
groupedSum.setSumExpireNumber(groupedSum.getSumExpireNumber()+1);
found = true;
break;
}
}
if (!found) {
InvExpireReq invExpireReq = new InvExpireReq();
BeanPlusUtil.copyProperties(inventory,invExpireReq);
invExpireReq.setSumExpireNumber(1);
invExpireReqList.add(invExpireReq);
orgIdsList.add(inventory.getOrgId());
}
}
messageApi.queryCount(new MessageReq());
//根据分好组的数据查询出所有的需要被提醒的组织机构id,并且查询出组织机构下的仓管员信息,并且将消息进行推送
//再将汇总list进行遍历获取不重复的组织机构
Set<Long> uniqueOrgIDs = new HashSet<>(orgIdsList);
List<Long> uniqueOrgIDsList = new ArrayList<>(uniqueOrgIDs);
//查询组织机构下面的所有仓管员的useId
List<InvExpireReq> userIdsList=inventoryMapper.selectUserListByOrgs(uniqueOrgIDsList);
//获取到之后,将该条信息进行消息推送
for (InvExpireReq invExpireReq:invExpireReqList ) {
for (InvExpireReq userIds:userIdsList) {
if (invExpireReq.getOrgId()==userIds.getOrgId()){
MessageSendReq sendReq = new MessageSendReq();
sendReq.setReceiveUserIds(userIds.getUserId());
sendReq.setMsgTitle("过质保期提醒");
sendReq.setBizType("过质保提醒");
sendReq.setMsgContent(invExpireReq.getLocationName()+"下的"+invExpireReq.getTypeName()+
invExpireReq.getSizeName()+"装备已经过质保期,数量为"+invExpireReq.getSumExpireNumber());
sendReq.setPriority("0");
sendReq.setSendTime(DateTime.now());
messageApi.sendMessage(sendReq);
}
}
}
/*推送发送未读数量*/
List<Long> userIdList=new ArrayList<>();
userIdList.add(1000L);
for(Long userId :userIdList){
for(InvExpireReq userIds:userIdsList){
MessageReq req1 = new MessageReq();
req1.setReadFlag(0);
req1.setReceiveUserId(userId);
req1.setReceiveUserId(Long.parseLong(userIds.getUserId()));
Integer count1 = messageApi.queryCount(req1);
messageApi.pushMsgToUser(String.valueOf(userId),count1);
messageApi.pushMsgToUser(userIds.getUserId(),count1);
}
}
// 处理每页数据
private List<Inventory> processPageData(long pageSize, long currentPage)
private List<Inventory> processPageData(long startPageSize, long currentPage)
{
LocalDate localdate =LocalDate.now();
// 使用LambdaQueryWrapper构建查询条件
LambdaQueryWrapper<Inventory> wrapper = Wrappers.lambdaQuery();
wrapper.eq( Inventory::getTermState, 0);
//如果 生产日期 < 当前日期减去质保数,表示该装备已经超过质保期
wrapper.apply("production_date <= DATE_SUB({0}, INTERVAL warranty_period DAY)", localdate);
//获取过质保期的物资信息
List<Inventory> page= inventoryService.page(PageFactory.getDefaultPage(pageSize,currentPage),wrapper).getRecords();
page.forEach(o->o.setTermState(1));
inventoryService.saveOrUpdateBatch(page);
return page;
// Page<Inventory> page = inventoryService.page(PageFactory.getDefaultPage(), wrapper)
List<Object[]> searchItem =new ArrayList<>();
Object[] criteria=new Object[]{0,"destory",startPageSize,currentPage};
searchItem.add(criteria);
List<Inventory> list = inventoryMapper.searchExpireEqs(searchItem);
list.forEach(o->o.setTermState(1));
inventoryService.saveOrUpdateBatch(list);
return list;
}
......
......@@ -2,7 +2,9 @@ package com.junmp.jyzb.task;
import cn.hutool.core.date.DateTime;
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
import com.junmp.jyzb.api.bean.req.InvExpireReq;
import com.junmp.jyzb.entity.OrderMain;
import com.junmp.jyzb.mapper.InventoryMapper;
import com.junmp.jyzb.service.OrderMainService;
import com.junmp.jyzb.utils.DateTimeUtil;
import com.junmp.v2.db.api.factory.PageFactory;
......@@ -16,9 +18,7 @@ import lombok.extern.slf4j.Slf4j;
import org.springframework.stereotype.Component;
import javax.annotation.Resource;
import java.util.ArrayList;
import java.util.Date;
import java.util.List;
import java.util.*;
/**
* @author lxh
......@@ -37,14 +37,17 @@ public class InvOverDueMsg implements JobAction {
private MessageApi messageApi;
@Resource
private InventoryMapper inventoryMapper;
@Resource
private SysDictItemService sysDictItemService;
@Override
public void action() {
//获取超期物资
//先查询出 出入库单据为用单的数据
//先查询出 出入库单据为用单的数据
LambdaQueryWrapper<OrderMain> wrapper = new LambdaQueryWrapper<OrderMain>()
.eq(OrderMain::getBussinessType, "borrow")
.eq(OrderMain::getBussinessType, "use")
.eq(OrderMain::getOrderType,"out");
int pageSize =1000;
int currentPage=1;
......@@ -59,32 +62,41 @@ public class InvOverDueMsg implements JobAction {
}
}
//将消息进行推送
//我需要将orgId进行查询并去重
Set<Long> uniqueOrgIDs = new HashSet<>();
for (OrderMain orderMain:list) {
MessageSendReq sendReq = new MessageSendReq();
sendReq.setSendUserId("1000");
//接收用户id先写死,后面再修改
sendReq.setReceiveUserIds("1000");
sendReq.setMsgTitle("物资超期");
//设置业务类型
SysDictItem one = sysDictItemService.getOne(new LambdaQueryWrapper<SysDictItem>()
.eq(SysDictItem::getDictItemId, "over_due"));
sendReq.setBizType(one.getItemValue());
sendReq.setMsgContent("单据id为:"+orderMain.getId()+"的物资超期,请及时查看提醒");
sendReq.setPriority("0");
sendReq.setSendTime(DateTime.now());
messageApi.sendMessage(sendReq);
uniqueOrgIDs.add(orderMain.getStartOrgId());
}
messageApi.queryCount(new MessageReq());
List<Long> uniqueOrgIDsList = new ArrayList<>(uniqueOrgIDs);
//查询组织机构下面的所有仓管员的useId
List<InvExpireReq> userIdsList=inventoryMapper.selectUserListByOrgs(uniqueOrgIDsList);
for (OrderMain orderMain:list) {
for (InvExpireReq userIds:userIdsList) {
if (orderMain.getStartOrgId()==userIds.getOrgId()){
MessageSendReq sendReq = new MessageSendReq();
sendReq.setReceiveUserIds(userIds.getUserId());
sendReq.setMsgTitle("物资超期提醒");
sendReq.setBizType("超期提醒");
//设置业务类型
// SysDictItem one = sysDictItemService.getOne(new LambdaQueryWrapper<SysDictItem>()
// .eq(SysDictItem::getDictItemId, "over_due"));
// sendReq.setBizType(one.getItemValue());
sendReq.setMsgContent("单据id为:"+orderMain.getId()+"的领用单已超期,请及时查看处理");
sendReq.setPriority("0");
sendReq.setSendTime(DateTime.now());
messageApi.sendMessage(sendReq);
}
}
}
/*推送发送未读数量*/
//添加需要将消息推送的userid,先写死,可以查询数据库表动态设置userid;
List<Long> userIdList=new ArrayList<>();
userIdList.add(1000L);
for(Long userId :userIdList){
for(InvExpireReq userIds:userIdsList){
MessageReq req1 = new MessageReq();
req1.setReadFlag(0);
req1.setReceiveUserId(userId);
req1.setReceiveUserId(Long.parseLong(userIds.getUserId()));
Integer count1 = messageApi.queryCount(req1);
messageApi.pushMsgToUser(String.valueOf(userId),count1);
messageApi.pushMsgToUser(userIds.getUserId(),count1);
}
}
......@@ -94,9 +106,10 @@ public class InvOverDueMsg implements JobAction {
//获取对应的借用单据数据
Date currentDateTime = DateTimeUtil.getCurrentDateTime();
LambdaQueryWrapper<OrderMain> wrapper = new LambdaQueryWrapper<OrderMain>()
.eq(OrderMain::getBussinessType, "borrow")
.eq(OrderMain::getBussinessType, "use")
.eq(OrderMain::getOrderType,"out")
.lt(OrderMain::getReturnDate,currentDateTime);
.lt(OrderMain::getReturnDate,currentDateTime)
.isNotNull(OrderMain::getReturnDate);
List<OrderMain> records = orderMainService.page(PageFactory.getDefaultPage(pageSize, currentPage),wrapper).getRecords();
return records;
}
......
......@@ -500,6 +500,50 @@
#{item}
</foreach>
</select>
<select id="selectUserListByOrgs" resultType="com.junmp.jyzb.api.bean.req.InvExpireReq">
select suo.user_id,suo.org_id FROM sys_user_org suo
JOIN sys_user_role sur ON suo.user_id=sur.user_id
JOIN sys_role sr ON sur.role_id=sr.role_id and sr.role_id="1528003832557232130"
where suo.org_id in
<foreach collection="list" item="item" open="(" separator="," close=")">
#{item}
</foreach>
</select>
<select id="searchExpireEqs" resultType="com.junmp.jyzb.entity.Inventory">
SELECT
bi.size_id AS size_id,
bes.name AS size_name,
bi.type_id,
bet.name AS type_name,
bi.org_id_int AS org_id,
COALESCE(bcb.cabinet_id, bw.id) AS location_id,
COALESCE(MAX(bc.name), MAX(bw.name)) AS location_name
FROM
base_inventory bi
JOIN base_equipment_size bes ON bi.size_id = bes.id
JOIN base_equipment_type bet ON bi.type_id = bet.id
LEFT JOIN base_cabinet_box bcb ON bi.location_id = bcb.id AND bi.location_type = 1
LEFT JOIN base_cabinet bc ON bcb.cabinet_id = bc.id
LEFT JOIN base_warehouse bw ON bi.location_id = bw.id AND bi.location_type = 0
WHERE
bi.warranty_period != 0
AND DATE_ADD(bi.production_date, INTERVAL bi.warranty_period MONTH) > NOW()
<foreach collection="list" item="item" open="(" separator="," close=")">
AND bi.term_state = ${item[0]}
AND bi.state != '${item[1]}'
</foreach>
GROUP BY
bi.size_id,
bes.name,
bi.type_id,
bet.name,
bi.org_id_int,
COALESCE(bcb.cabinet_id, bw.id)
<foreach collection="list" item="item" open="(" separator="," close=")">
limit ${item[2]},${item[3]}
</foreach>
</select>
</mapper>
\ No newline at end of file
Markdown 格式
0%
您添加了 0 到此讨论。请谨慎行事。
请先完成此评论的编辑!
注册 或者 后发表评论