cuijian
2023-08-29 8e16903f4b9d8430852ebf58ed0d6b8dacf6ac75
备件库存消息预警
已修改10个文件
315 ■■■■■ 文件已修改
lxzn-module-eam/src/main/java/org/jeecg/modules/spare/service/impl/SparePartCancellingStocksDetailServiceImpl.java 77 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
lxzn-module-eam/src/main/java/org/jeecg/modules/spare/service/impl/SparePartOutboundDetailServiceImpl.java 68 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
lxzn-module-eam/src/main/java/org/jeecg/modules/spare/service/impl/SparePartPurchaseStorageDetailServiceImpl.java 80 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
lxzn-module-system/lxzn-system-api/lxzn-system-local-api/src/main/java/org/jeecg/common/system/api/ISysBaseAPI.java 9 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
lxzn-module-system/lxzn-system-biz/src/main/java/org/jeecg/modules/message/websocket/WebSocket.java 13 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
lxzn-module-system/lxzn-system-biz/src/main/java/org/jeecg/modules/system/mapper/SysUserMapper.java 9 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
lxzn-module-system/lxzn-system-biz/src/main/java/org/jeecg/modules/system/mapper/xml/SysUserMapper.xml 5 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
lxzn-module-system/lxzn-system-biz/src/main/java/org/jeecg/modules/system/service/ISysUserService.java 8 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
lxzn-module-system/lxzn-system-biz/src/main/java/org/jeecg/modules/system/service/impl/SysBaseApiImpl.java 40 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
lxzn-module-system/lxzn-system-biz/src/main/java/org/jeecg/modules/system/service/impl/SysUserServiceImpl.java 6 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
lxzn-module-eam/src/main/java/org/jeecg/modules/spare/service/impl/SparePartCancellingStocksDetailServiceImpl.java
@@ -1,20 +1,31 @@
package org.jeecg.modules.spare.service.impl;
import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
import com.baomidou.mybatisplus.core.metadata.IPage;
import com.baomidou.mybatisplus.core.toolkit.StringUtils;
import com.baomidou.mybatisplus.core.toolkit.Wrappers;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
import org.jeecg.common.constant.CommonConstant;
import org.jeecg.common.system.api.ISysBaseAPI;
import org.jeecg.common.system.vo.DictModel;
import org.jeecg.modules.spare.entity.*;
import org.jeecg.modules.spare.mapper.SparePartCancellingStocksDetailMapper;
import org.jeecg.modules.spare.service.ISparePartCancellingStocksDetailService;
import org.jeecg.modules.spare.service.ISparePartCancellingStocksService;
import org.jeecg.modules.spare.service.ISparePartService;
import org.jeecg.modules.spare.service.ISparesPartInventoryService;
import org.jeecg.modules.spare.service.*;
import org.jeecg.modules.system.entity.SysRole;
import org.jeecg.modules.system.entity.SysUser;
import org.jeecg.modules.system.service.ISysDictService;
import org.jeecg.modules.system.service.ISysRoleService;
import org.jeecg.modules.system.service.ISysUserService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.context.annotation.Lazy;
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;
import java.math.BigDecimal;
import java.time.LocalDateTime;
import java.time.format.DateTimeFormatter;
import java.util.ArrayList;
import java.util.List;
import java.util.Map;
@@ -39,6 +50,26 @@
    @Autowired
    private ISparePartService sparePartService;
    @Autowired
    @Lazy
    private ISparePartOutboundService sparePartOutboundService;
    @Autowired
    @Lazy
    private ISysDictService sysDictService;
    @Autowired
    @Lazy
    private ISysRoleService sysRoleService;
    @Autowired
    @Lazy
    private ISysUserService sysUserService;
    @Autowired
    @Lazy
    private ISysBaseAPI sysBaseAPI;
    @Override
@@ -115,6 +146,44 @@
            sparePartCancellingStocks.setStatus("4");
            sparePartCancellingStocksService.updateById(sparePartCancellingStocks);
        }
        //6.判断出库后库存是否低于安全库存或出现积压情况
        List roleList = new ArrayList<>();
        List<DictModel> dictModelList = sysDictService.getDictItems("warehouse_message");
        for(DictModel dictModel : dictModelList){
            roleList.add(dictModel.getText());
        }
        QueryWrapper<SysRole> queryWrapper = Wrappers.query();
        queryWrapper.in("role_code", roleList);
        List<SysRole> sysRoleList = sysRoleService.list(queryWrapper);
        List<SysUser> sysUsers = new ArrayList<>();
        for (SysRole sysRole : sysRoleList) {
            sysUsers.addAll(sysUserService.getAllUsersByRoleId(sysRole.getId()));
        }
        double quantity = 0.0;
        List<SparesPartInventory> sparesPartInventoryList = sparesPartInventoryService.lambdaQuery().eq(SparesPartInventory::getSparePartId,sparesPartInventory.getSparePartId()).eq(SparesPartInventory::getDelFlag, CommonConstant.DEL_FLAG_0).list();
        for(SparesPartInventory sparesPartInventory1 : sparesPartInventoryList){
            quantity = quantity + sparesPartInventory1.getMainQuantity();
        }
        if(quantity < sparePart.getInventoryLowerLimit()){
            String messageTitle;
            String messageContent;
            String sysTime = LocalDateTime.now().format(DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss"));
            messageTitle = "系统消息:备件编码为 " + sparePart.getNum() + " 的备件库存量不足,请及时处理!";
            messageContent = "系统消息:备件编码:" + sparePart.getNum()  + " 的备件库存量已低于安全库存!" + "\n" + "消息时间:" + sysTime + "\n";
            for (SysUser sysUser : sysUsers) {
                sysBaseAPI.sendAnnouncement("admin", sysUser.getUsername(), messageTitle, messageContent);
            }
        }else if(quantity > sparePart.getInventoryUpperLimit()){
            String messageTitle;
            String messageContent;
            String sysTime = LocalDateTime.now().format(DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss"));
            messageTitle = "系统消息:备件编码为 " + sparePart.getNum() + " 的备件出现积压情况,请及时处理!";
            messageContent = "系统消息:备件编码为 " + sparePart.getNum() + " 的备件库存量已高于库存上限值,出现积压情况!" + "\n" + "消息时间:" + sysTime + "\n";
            for (SysUser sysUser : sysUsers) {
                sysBaseAPI.sendAnnouncement("admin", sysUser.getUsername(), messageTitle, messageContent);
            }
        }
        return true;
    }
lxzn-module-eam/src/main/java/org/jeecg/modules/spare/service/impl/SparePartOutboundDetailServiceImpl.java
@@ -1,14 +1,24 @@
package org.jeecg.modules.spare.service.impl;
import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
import com.baomidou.mybatisplus.core.metadata.IPage;
import com.baomidou.mybatisplus.core.toolkit.StringUtils;
import com.baomidou.mybatisplus.core.toolkit.Wrappers;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import org.jeecg.common.constant.CommonConstant;
import org.jeecg.common.system.api.ISysBaseAPI;
import org.jeecg.common.system.vo.DictModel;
import org.jeecg.modules.spare.entity.*;
import org.jeecg.modules.spare.mapper.SparePartOutboundDetailMapper;
import org.jeecg.modules.spare.service.ISparePartOutboundDetailService;
import org.jeecg.modules.spare.service.ISparePartOutboundService;
import org.jeecg.modules.spare.service.ISparePartService;
import org.jeecg.modules.spare.service.ISparesPartInventoryService;
import org.jeecg.modules.system.entity.SysRole;
import org.jeecg.modules.system.entity.SysUser;
import org.jeecg.modules.system.service.ISysDictService;
import org.jeecg.modules.system.service.ISysRoleService;
import org.jeecg.modules.system.service.ISysUserService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.context.annotation.Lazy;
import org.springframework.stereotype.Service;
@@ -17,6 +27,9 @@
import org.springframework.transaction.annotation.Transactional;
import java.math.BigDecimal;
import java.time.LocalDateTime;
import java.time.format.DateTimeFormatter;
import java.util.ArrayList;
import java.util.List;
import java.util.Map;
@@ -40,6 +53,22 @@
    @Autowired
    @Lazy
    private ISparePartOutboundService sparePartOutboundService;
    @Autowired
    @Lazy
    private ISysDictService sysDictService;
    @Autowired
    @Lazy
    private ISysRoleService sysRoleService;
    @Autowired
    @Lazy
    private ISysUserService sysUserService;
    @Autowired
    @Lazy
    private ISysBaseAPI sysBaseAPI;
    @Override
    public List<Map<String, Object>> getSparePartOutboundDeatilList(String sparePartOutboundId) {
@@ -107,8 +136,45 @@
            sparePartOutbound.setStatus("4");
            sparePartOutboundService.updateById(sparePartOutbound);
        }
        //6.判断出库后库存是否低于安全库存或出现积压情况
        List roleList = new ArrayList<>();
        List<DictModel> dictModelList = sysDictService.getDictItems("warehouse_message");
        for(DictModel dictModel : dictModelList){
            roleList.add(dictModel.getText());
        }
        QueryWrapper<SysRole> queryWrapper = Wrappers.query();
        queryWrapper.in("role_code", roleList);
        List<SysRole> sysRoleList = sysRoleService.list(queryWrapper);
        List<SysUser> sysUsers = new ArrayList<>();
        for (SysRole sysRole : sysRoleList) {
            sysUsers.addAll(sysUserService.getAllUsersByRoleId(sysRole.getId()));
        }
        double quantity = 0.0;
        List<SparesPartInventory> sparesPartInventoryList = sparesPartInventoryService.lambdaQuery().eq(SparesPartInventory::getSparePartId,sparesPartInventory.getSparePartId()).eq(SparesPartInventory::getDelFlag, CommonConstant.DEL_FLAG_0).list();
        for(SparesPartInventory sparesPartInventory1 : sparesPartInventoryList){
            quantity = quantity + sparesPartInventory1.getMainQuantity();
        }
        if(quantity < sparePart.getInventoryLowerLimit()){
            String messageTitle;
            String messageContent;
            String sysTime = LocalDateTime.now().format(DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss"));
            messageTitle = "系统消息:备件编码为 " + sparePart.getNum() + " 的备件库存量不足,请及时处理!";
            messageContent = "系统消息:备件编码:" + sparePart.getNum()  + " 的备件库存量已低于安全库存!" + "\n" + "消息时间:" + sysTime + "\n";
            for (SysUser sysUser : sysUsers) {
                sysBaseAPI.sendAnnouncement("admin", sysUser.getUsername(), messageTitle, messageContent);
            }
        }else if(quantity > sparePart.getInventoryUpperLimit()){
            String messageTitle;
            String messageContent;
            String sysTime = LocalDateTime.now().format(DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss"));
            messageTitle = "系统消息:备件编码为 " + sparePart.getNum() + " 的备件出现积压情况,请及时处理!";
            messageContent = "系统消息:备件编码为 " + sparePart.getNum() + " 的备件库存量已高于库存上限值,出现积压情况!" + "\n" + "消息时间:" + sysTime + "\n";
            for (SysUser sysUser : sysUsers) {
                sysBaseAPI.sendAnnouncement("admin", sysUser.getUsername(), messageTitle, messageContent);
            }
        }
        return true;
    }
}
lxzn-module-eam/src/main/java/org/jeecg/modules/spare/service/impl/SparePartPurchaseStorageDetailServiceImpl.java
@@ -1,23 +1,40 @@
package org.jeecg.modules.spare.service.impl;
import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
import com.baomidou.mybatisplus.core.metadata.IPage;
import com.baomidou.mybatisplus.core.toolkit.Wrappers;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
import org.jeecg.common.constant.CommonConstant;
import org.jeecg.common.system.api.ISysBaseAPI;
import org.jeecg.common.system.vo.DictModel;
import org.jeecg.modules.spare.entity.SparePart;
import org.jeecg.modules.spare.entity.SparePartPurchaseStorage;
import org.jeecg.modules.spare.entity.SparePartPurchaseStorageDetail;
import org.jeecg.modules.spare.entity.SparesPartInventory;
import org.jeecg.modules.spare.mapper.SparePartPurchaseStorageDetailMapper;
import org.jeecg.modules.spare.service.ISparePartPurchaseStorageDetailService;
import org.jeecg.modules.spare.service.ISparePartPurchaseStorageService;
import org.jeecg.modules.spare.service.ISparePartService;
import org.jeecg.modules.spare.service.ISparesPartInventoryService;
import org.jeecg.modules.spare.vo.SupplierVo;
import org.jeecg.modules.spare.vo.WarehouseAreaVo;
import org.jeecg.modules.spare.vo.WarehouseLocationVo;
import org.jeecg.modules.system.entity.SysRole;
import org.jeecg.modules.system.entity.SysUser;
import org.jeecg.modules.system.service.ISysDictService;
import org.jeecg.modules.system.service.ISysRoleService;
import org.jeecg.modules.system.service.ISysUserService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.context.annotation.Lazy;
import org.springframework.stereotype.Service;
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
import org.springframework.transaction.annotation.Transactional;
import java.text.SimpleDateFormat;
import java.time.LocalDateTime;
import java.time.format.DateTimeFormatter;
import java.util.ArrayList;
import java.util.Calendar;
import java.util.List;
import java.util.Map;
@@ -36,6 +53,26 @@
    @Autowired
    private ISparesPartInventoryService sparesPartInventoryService;
    @Autowired
    @Lazy
    private ISparePartService sparePartService;
    @Autowired
    @Lazy
    private ISysDictService sysDictService;
    @Autowired
    @Lazy
    private ISysRoleService sysRoleService;
    @Autowired
    @Lazy
    private ISysUserService sysUserService;
    @Autowired
    @Lazy
    private ISysBaseAPI sysBaseAPI;
    @Override
    public List<Map<String, Object>> getSparePartPurchaseStorageDeatilList(String sparePartPurchaseStorageId) {
@@ -102,6 +139,45 @@
            sparePartPurchaseStorage.setStatus("4");
            sparePartPurchaseStorageService.updateById(sparePartPurchaseStorage);
        }
        //4.判断入库后库存是否低于安全库存或出现积压情况
        List roleList = new ArrayList<>();
        List<DictModel> dictModelList = sysDictService.getDictItems("warehouse_message");
        for(DictModel dictModel : dictModelList){
            roleList.add(dictModel.getText());
        }
        QueryWrapper<SysRole> queryWrapper = Wrappers.query();
        queryWrapper.in("role_code", roleList);
        List<SysRole> sysRoleList = sysRoleService.list(queryWrapper);
        List<SysUser> sysUsers = new ArrayList<>();
        for (SysRole sysRole : sysRoleList) {
            sysUsers.addAll(sysUserService.getAllUsersByRoleId(sysRole.getId()));
        }
        double quantity = 0.0;
        SparePart sparePart = sparePartService.getById(sparesPartInventory.getSparePartId());
        List<SparesPartInventory> sparesPartInventoryList = sparesPartInventoryService.lambdaQuery().eq(SparesPartInventory::getSparePartId,sparesPartInventory.getSparePartId()).eq(SparesPartInventory::getDelFlag, CommonConstant.DEL_FLAG_0).list();
        for(SparesPartInventory sparesPartInventory1 : sparesPartInventoryList){
            quantity = quantity + sparesPartInventory1.getMainQuantity();
        }
        if(quantity < sparePart.getInventoryLowerLimit()){
            String messageTitle;
            String messageContent;
            String sysTime = LocalDateTime.now().format(DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss"));
            messageTitle = "系统消息:备件编码为 " + sparePart.getNum() + " 的备件库存量不足,请及时处理!";
            messageContent = "系统消息:备件编码:" + sparePart.getNum()  + " 的备件库存量已低于安全库存!" + "\n" + "消息时间:" + sysTime + "\n";
            for (SysUser sysUser : sysUsers) {
                sysBaseAPI.sendAnnouncement("admin", sysUser.getUsername(), messageTitle, messageContent);
            }
        }else if(quantity > sparePart.getInventoryUpperLimit()){
            String messageTitle;
            String messageContent;
            String sysTime = LocalDateTime.now().format(DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss"));
            messageTitle = "系统消息:备件编码为 " + sparePart.getNum() + " 的备件出现积压情况,请及时处理!";
            messageContent = "系统消息:备件编码为 " + sparePart.getNum() + " 的备件库存量已高于库存上限值,出现积压情况!" + "\n" + "消息时间:" + sysTime + "\n";
            for (SysUser sysUser : sysUsers) {
                sysBaseAPI.sendAnnouncement("admin", sysUser.getUsername(), messageTitle, messageContent);
            }
        }
        return true;
    }
lxzn-module-system/lxzn-system-api/lxzn-system-local-api/src/main/java/org/jeecg/common/system/api/ISysBaseAPI.java
@@ -440,4 +440,13 @@
    void closeJobByClassName(String className);
    /**
     * 发送系统消息
     * @param fromUser 发送人(用户登录账户)
     * @param toUser  发送给(用户登录账户)
     * @param title  消息主题
     * @param msgContent  消息内容
     */
    public void sendAnnouncement(String fromUser, String toUser, String title, String msgContent);
}
lxzn-module-system/lxzn-system-biz/src/main/java/org/jeecg/modules/message/websocket/WebSocket.java
@@ -173,6 +173,19 @@
            sendMessage(userId, message);
        }
    }
    // 此为单点消息
    public void sendOneMessage(String userId, String message) {
        Session session = sessionPool.get(userId);
        if (session != null&&session.isOpen()) {
            try {
                log.info("【websocket消息】 单点消息:"+message);
                session.getAsyncRemote().sendText(message);
            } catch (Exception e) {
                e.printStackTrace();
            }
        }
    }
    //=======【采用redis发布订阅模式——推送消息】==========================================================================================
    
}
lxzn-module-system/lxzn-system-biz/src/main/java/org/jeecg/modules/system/mapper/SysUserMapper.java
@@ -163,4 +163,13 @@
     * 根据用户Ids,查询用户所属产线名称信息
     */
    List<MdcUserProVo> getProNamesByUserIds(@Param("userIds") List<String> userIds);
    /**
     * 根据角色Id查询该角色下的所有用户信息
     *
     * @param
     * @return
     */
    List<SysUser> getAllUsersByRoleId(@Param("roleId") String roleId);
}
lxzn-module-system/lxzn-system-biz/src/main/java/org/jeecg/modules/system/mapper/xml/SysUserMapper.xml
@@ -190,4 +190,9 @@
            #{id}
        </foreach>
    </select>
    <!-- 根据角色Id查询该角色下的所有用户信息 -->
    <select id="getAllUsersByRoleId" resultType="org.jeecg.modules.system.entity.SysUser">
        select * from sys_user where del_flag = '0' and id in (select user_id from sys_user_role where role_id=#{roleId})
    </select>
</mapper>
lxzn-module-system/lxzn-system-biz/src/main/java/org/jeecg/modules/system/service/ISysUserService.java
@@ -308,4 +308,12 @@
     * 根据 userIds查询,查询用户所属产线的名称(多个产线名逗号隔开)
     */
    Map<String, String> getProNamesByUserIds(List<String> userIds);
    /**
     * 根据角色Id查询该角色下的所有用户信息,不分页
     *
     * @param
     * @return
     */
    public List<SysUser> getAllUsersByRoleId(String roleId);
}
lxzn-module-system/lxzn-system-biz/src/main/java/org/jeecg/modules/system/service/impl/SysBaseApiImpl.java
@@ -1459,4 +1459,44 @@
            quartzJobService.deleteAndStopJob(quartzJob);
        }
    }
    @Override
    public void sendAnnouncement(String fromUser, String toUser, String title, String msgContent) {
        SysAnnouncement announcement = new SysAnnouncement();
        announcement.setTitile(title);
        announcement.setMsgContent(msgContent);
        announcement.setSender(fromUser);
        announcement.setPriority(CommonConstant.PRIORITY_M);
        announcement.setMsgType(CommonConstant.MSG_TYPE_UESR);
        announcement.setSendStatus(CommonConstant.HAS_SEND);
        announcement.setSendTime(new Date());
        announcement.setMsgCategory(CommonConstant.MSG_CATEGORY_2);
        announcement.setDelFlag(String.valueOf(CommonConstant.DEL_FLAG_0));
        sysAnnouncementMapper.insert(announcement);
        // 2.插入用户通告阅读标记表记录
        String userId = toUser;
        String[] userIds = userId.split(",");
        String anntId = announcement.getId();
        for (int i = 0; i < userIds.length; i++) {
            if (oConvertUtils.isNotEmpty(userIds[i])) {
                SysUser sysUser = userMapper.getUserByName(userIds[i]);
                if (sysUser == null) {
                    continue;
                }
                SysAnnouncementSend announcementSend = new SysAnnouncementSend();
                announcementSend.setAnntId(anntId);
                announcementSend.setUserId(sysUser.getId());
                announcementSend.setReadFlag(CommonConstant.NO_READ_FLAG);
                sysAnnouncementSendMapper.insert(announcementSend);
                JSONObject obj = new JSONObject();
                obj.put("cmd", "user");
                obj.put("userId", sysUser.getId());
                obj.put("msgId", announcement.getId());
                obj.put("msgTxt", announcement.getTitile());
                webSocket.sendOneMessage(sysUser.getId(), obj.toJSONString());
            }
        }
    }
}
lxzn-module-system/lxzn-system-biz/src/main/java/org/jeecg/modules/system/service/impl/SysUserServiceImpl.java
@@ -652,4 +652,10 @@
        });
        return res;
    }
    // 根据角色Id查询该角色下的所有用户信息
    @Override
    public List<SysUser> getAllUsersByRoleId(String roleId) {
        return userMapper.getAllUsersByRoleId(roleId);
    }
}