郑永安
2023-06-19 2fcd97552d16718cc7997629fd637a73a5a4483f
src/main/java/com/gk/firework/Scheduls/Task/CheckEnterpriseTask.java
对比新文件
@@ -0,0 +1,145 @@
package com.gk.firework.Scheduls.Task;
import com.alibaba.fastjson.JSONObject;
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
import com.gk.firework.Config.WebSocket.WebSocketServer;
import com.gk.firework.Domain.Enterprise;
import com.gk.firework.Domain.EnterpriseLicense;
import com.gk.firework.Domain.EnterprisePerson;
import com.gk.firework.Domain.Enum.EnterpriseSafetySupervision;
import com.gk.firework.Domain.Enum.MsgContentType;
import com.gk.firework.Domain.Enum.MsgType;
import com.gk.firework.Domain.Enum.PersonnelCategory;
import com.gk.firework.Domain.UserInfo;
import com.gk.firework.Domain.Utils.Message;
import com.gk.firework.Domain.Utils.SpringBeanUtil;
import com.gk.firework.Domain.Utils.StringUtils;
import com.gk.firework.Service.EnterpriseLicenseService;
import com.gk.firework.Service.EnterprisePersonService;
import com.gk.firework.Service.EnterpriseService;
import lombok.SneakyThrows;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.context.annotation.Scope;
import org.springframework.stereotype.Component;
import org.springframework.stereotype.Service;
import javax.websocket.Session;
import java.util.ArrayList;
import java.util.Date;
@Component("task")
@Scope("prototype")
public class CheckEnterpriseTask implements Runnable{
    final static Logger logger= LoggerFactory.getLogger(CheckEnterpriseTask.class);
    private UserInfo userInfo;
    public CheckEnterpriseTask(UserInfo userInfo) {
        this.userInfo = userInfo;
    }
    @SneakyThrows
    @Override
    public void run() {
        String companynumber = userInfo.getCompanynumber();
        Long companyid = userInfo.getCompanyid();
        //普通企业
        if (StringUtils.isNotBlank(companynumber)) {
            logger.info("正在执行:检查企业信息是否完善");
            Enterprise enterprise = SpringBeanUtil.getBean(EnterpriseService.class).selectEnterpriseByNumber(companynumber);
            Message message = new Message(MsgType.NOTIFICATION,MsgContentType.INFO_UNDONE,Boolean.FALSE);
            ArrayList<String> msgs = new ArrayList<>();
            if (!checkEnterprise(enterprise)) msgs.add("企业相关信息还未完善");
            if (!checkEnterpriseLicense(companyid)) msgs.add("许可证信息还未完善");
            if (!checkSafetyPerson(companyid)) msgs.add("安全人员信息还未完善");
            //长期店、短期店不用特种人员
            if (!checkSpecialPerson(companyid)
                    && (enterprise.getSafetysupervision().equals(EnterpriseSafetySupervision.PRODUCE)
                    || enterprise.getSafetysupervision().equals(EnterpriseSafetySupervision.WHOLESALER))
            ) msgs.add("特种人员信息还未完善");
            if (msgs.size() > 0){
                message.setMessage(msgs.toString());
                WebSocketServer.sendMessage(userInfo.getId(), JSONObject.toJSONString(message));
            }
            //检查许可证过期
            logger.info("正在执行:检查企业许可证是否过期");
            if (enterprise.getValidendtime().before(new Date())) {
                Message message2 = new Message(MsgType.NOTIFICATION,MsgContentType.LICENSE_EXPIRED,Boolean.FALSE);
                message2.setMessage("您的许可证已到期,请重新录入许可证期限并上传许可证");
                WebSocketServer.sendMessage(userInfo.getId(), JSONObject.toJSONString(message2));
            }
        }
        //监管部门
        if (StringUtils.isBlank(companynumber)) {
            //查找管辖的所有企业的信息未完善的
            logger.info("正在执行:检查企业信息未完善个数");
            int undoneEnterprise = SpringBeanUtil.getBean(EnterpriseService.class).countAllUndoneEnterprise(userInfo);
            if (undoneEnterprise > 0) {
                Message message = new Message(MsgType.NOTIFICATION, MsgContentType.INFO_UNDONE, Boolean.TRUE);
                message.setMessage(String.format("共有%d个企业未完善企业相关信息",undoneEnterprise));
                WebSocketServer.sendMessage(userInfo.getId(), JSONObject.toJSONString(message));
            }
            logger.info("正在执行:检查所有许可证过期企业");
            int expiredEnterprise = SpringBeanUtil.getBean(EnterpriseService.class).countAllEnterpriseExpired(userInfo);
            if (expiredEnterprise > 0) {
                Message message = new Message(MsgType.NOTIFICATION, MsgContentType.LICENSE_EXPIRED, Boolean.TRUE);
                message.setMessage(String.format("共有%d个企业许可证已过期",expiredEnterprise));
                WebSocketServer.sendMessage(userInfo.getId(), JSONObject.toJSONString(message));
            }
        }
        logger.info("结束执行");
    }
    //检查企业信息完整
    private boolean checkEnterprise(Enterprise enterprise) {
        boolean flag = true;
        //小提示
        if (StringUtils.isBlank(enterprise.getOfficeaddress())) {
            flag = false;
        }
        return flag;
    }
    //检查许可证 有无
    private boolean checkEnterpriseLicense(Long enterpriseid) {
        LambdaQueryWrapper<EnterpriseLicense> queryWrapper = new LambdaQueryWrapper<>();
        queryWrapper.eq(EnterpriseLicense::getEnterpriseid, enterpriseid)
                .eq(EnterpriseLicense::getValidflag, true);
        int count = SpringBeanUtil.getBean(EnterpriseLicenseService.class).count(queryWrapper);
        return count != 0;
    }
    //检查安全人员
    private boolean checkSafetyPerson(Long enterpriseid) {
        LambdaQueryWrapper<EnterprisePerson> queryWrapper = new LambdaQueryWrapper<>();
        queryWrapper.eq(EnterprisePerson::getEnterpriseid, enterpriseid)
                .eq(EnterprisePerson::getValidflag, true)
                .eq(EnterprisePerson::getType, PersonnelCategory.SECURITY);
        int count = SpringBeanUtil.getBean(EnterprisePersonService.class).count(queryWrapper);
        return count != 0;
    }
    //检查特种人员
    private boolean checkSpecialPerson(Long enterpriseid) {
        LambdaQueryWrapper<EnterprisePerson> queryWrapper = new LambdaQueryWrapper<>();
        queryWrapper.eq(EnterprisePerson::getEnterpriseid, enterpriseid)
                .eq(EnterprisePerson::getValidflag, true)
                .eq(EnterprisePerson::getType, PersonnelCategory.SPECIAL);
        int count = SpringBeanUtil.getBean(EnterprisePersonService.class).count(queryWrapper);
        return count != 0;
    }
}