|  |  |  | @ -1,6 +1,7 @@ | 
			
		
	
		
			
				
					|  |  |  |  | package com.glxp.api.service.purchase.impl; | 
			
		
	
		
			
				
					|  |  |  |  | 
 | 
			
		
	
		
			
				
					|  |  |  |  | import cn.hutool.json.JSONUtil; | 
			
		
	
		
			
				
					|  |  |  |  | import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; | 
			
		
	
		
			
				
					|  |  |  |  | import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; | 
			
		
	
		
			
				
					|  |  |  |  | import com.github.pagehelper.PageHelper; | 
			
		
	
		
			
				
					|  |  |  |  | import com.glxp.api.common.res.BaseResponse; | 
			
		
	
	
		
			
				
					|  |  |  | @ -16,12 +17,15 @@ import com.glxp.api.res.purchase.SupCertRemindMsgResponse; | 
			
		
	
		
			
				
					|  |  |  |  | import com.glxp.api.service.auth.CustomerService; | 
			
		
	
		
			
				
					|  |  |  |  | import com.glxp.api.service.purchase.SupCertRemindMsgService; | 
			
		
	
		
			
				
					|  |  |  |  | import com.glxp.api.service.purchase.SupCertService; | 
			
		
	
		
			
				
					|  |  |  |  | import com.glxp.api.service.system.SystemParamConfigService; | 
			
		
	
		
			
				
					|  |  |  |  | import com.glxp.api.util.DateUtil; | 
			
		
	
		
			
				
					|  |  |  |  | import com.glxp.api.util.IntUtil; | 
			
		
	
		
			
				
					|  |  |  |  | import lombok.extern.slf4j.Slf4j; | 
			
		
	
		
			
				
					|  |  |  |  | import org.springframework.stereotype.Service; | 
			
		
	
		
			
				
					|  |  |  |  | import org.springframework.transaction.annotation.Transactional; | 
			
		
	
		
			
				
					|  |  |  |  | 
 | 
			
		
	
		
			
				
					|  |  |  |  | import javax.annotation.Resource; | 
			
		
	
		
			
				
					|  |  |  |  | import java.time.LocalDate; | 
			
		
	
		
			
				
					|  |  |  |  | import java.util.Arrays; | 
			
		
	
		
			
				
					|  |  |  |  | import java.util.Collections; | 
			
		
	
		
			
				
					|  |  |  |  | import java.util.Date; | 
			
		
	
	
		
			
				
					|  |  |  | @ -122,10 +126,16 @@ public class SupCertRemindMsgImpl implements SupCertRemindMsgService { | 
			
		
	
		
			
				
					|  |  |  |  |         //资质预警类型集合
 | 
			
		
	
		
			
				
					|  |  |  |  |         List<Integer> types = Arrays.asList(1, 2, 3); | 
			
		
	
		
			
				
					|  |  |  |  |         for (Integer type : types) { | 
			
		
	
		
			
				
					|  |  |  |  |             buildNearRemindMsg(buildNearQueryWrapper(type), type); | 
			
		
	
		
			
				
					|  |  |  |  |             buildRemindMsg(buildQueryWrapper(type), type); | 
			
		
	
		
			
				
					|  |  |  |  |         } | 
			
		
	
		
			
				
					|  |  |  |  |     } | 
			
		
	
		
			
				
					|  |  |  |  | 
 | 
			
		
	
		
			
				
					|  |  |  |  |     @Override | 
			
		
	
		
			
				
					|  |  |  |  |     public boolean removeRemindMsg(String idFk) { | 
			
		
	
		
			
				
					|  |  |  |  |         return supCertRemindMsgDao.delete(new LambdaQueryWrapper<SupCertRemindMsgEntity>().eq(SupCertRemindMsgEntity::getIdFk, idFk)) > 0; | 
			
		
	
		
			
				
					|  |  |  |  |     } | 
			
		
	
		
			
				
					|  |  |  |  | 
 | 
			
		
	
		
			
				
					|  |  |  |  |     /** | 
			
		
	
		
			
				
					|  |  |  |  |      * 构造查询条件 | 
			
		
	
		
			
				
					|  |  |  |  |      * | 
			
		
	
	
		
			
				
					|  |  |  | @ -151,10 +161,73 @@ public class SupCertRemindMsgImpl implements SupCertRemindMsgService { | 
			
		
	
		
			
				
					|  |  |  |  |         return wrapper; | 
			
		
	
		
			
				
					|  |  |  |  |     } | 
			
		
	
		
			
				
					|  |  |  |  | 
 | 
			
		
	
		
			
				
					|  |  |  |  |     /** | 
			
		
	
		
			
				
					|  |  |  |  |      * 构造近效期预警查询条件 | 
			
		
	
		
			
				
					|  |  |  |  |      * | 
			
		
	
		
			
				
					|  |  |  |  |      * @param type | 
			
		
	
		
			
				
					|  |  |  |  |      * @return | 
			
		
	
		
			
				
					|  |  |  |  |      */ | 
			
		
	
		
			
				
					|  |  |  |  |     @Resource | 
			
		
	
		
			
				
					|  |  |  |  |     SystemParamConfigService systemParamConfigService; | 
			
		
	
		
			
				
					|  |  |  |  | 
 | 
			
		
	
		
			
				
					|  |  |  |  |     private QueryWrapper<SupCertEntity> buildNearQueryWrapper(Integer type) { | 
			
		
	
		
			
				
					|  |  |  |  | 
 | 
			
		
	
		
			
				
					|  |  |  |  |         String plusDay = systemParamConfigService.selectValueByParamKey("cert_near_warn"); | 
			
		
	
		
			
				
					|  |  |  |  | 
 | 
			
		
	
		
			
				
					|  |  |  |  |         if (IntUtil.value(plusDay) > 0) { | 
			
		
	
		
			
				
					|  |  |  |  |             QueryWrapper<SupCertEntity> wrapper = new QueryWrapper<>(); | 
			
		
	
		
			
				
					|  |  |  |  |             // 获取当前日期
 | 
			
		
	
		
			
				
					|  |  |  |  |             LocalDate currentDate = LocalDate.now(); | 
			
		
	
		
			
				
					|  |  |  |  |             // 获取N天后的日期
 | 
			
		
	
		
			
				
					|  |  |  |  |             LocalDate endDate = currentDate.plusDays(IntUtil.value(plusDay)); | 
			
		
	
		
			
				
					|  |  |  |  |             // 创建 QueryWrapper 并设置条件
 | 
			
		
	
		
			
				
					|  |  |  |  |             wrapper.lt("expireDate", endDate); | 
			
		
	
		
			
				
					|  |  |  |  |             wrapper.ge("expireDate", currentDate); | 
			
		
	
		
			
				
					|  |  |  |  | 
 | 
			
		
	
		
			
				
					|  |  |  |  | 
 | 
			
		
	
		
			
				
					|  |  |  |  |             wrapper.eq("status", 0).eq("auditStatus", ConstantStatus.AUDIT_PASS).eq("type", type); | 
			
		
	
		
			
				
					|  |  |  |  |             switch (type) { | 
			
		
	
		
			
				
					|  |  |  |  |                 case 1: //查询供应商ID
 | 
			
		
	
		
			
				
					|  |  |  |  |                     wrapper.select("CustomerId", "code", "vailDate", "expireDate", "type"); | 
			
		
	
		
			
				
					|  |  |  |  |                     break; | 
			
		
	
		
			
				
					|  |  |  |  |                 case 2: //查询生产企业ID
 | 
			
		
	
		
			
				
					|  |  |  |  |                     wrapper.select("manufacturerIdFk", "code", "vailDate", "expireDate", "type"); | 
			
		
	
		
			
				
					|  |  |  |  |                     break; | 
			
		
	
		
			
				
					|  |  |  |  |                 case 3: //查询产品ID
 | 
			
		
	
		
			
				
					|  |  |  |  |                     wrapper.select("productIdFk", "code", "vailDate", "expireDate", "type"); | 
			
		
	
		
			
				
					|  |  |  |  |                     break; | 
			
		
	
		
			
				
					|  |  |  |  |                 default: | 
			
		
	
		
			
				
					|  |  |  |  |                     break; | 
			
		
	
		
			
				
					|  |  |  |  |             } | 
			
		
	
		
			
				
					|  |  |  |  |             return wrapper; | 
			
		
	
		
			
				
					|  |  |  |  |         } | 
			
		
	
		
			
				
					|  |  |  |  | 
 | 
			
		
	
		
			
				
					|  |  |  |  |         return null; | 
			
		
	
		
			
				
					|  |  |  |  | 
 | 
			
		
	
		
			
				
					|  |  |  |  |     } | 
			
		
	
		
			
				
					|  |  |  |  | 
 | 
			
		
	
		
			
				
					|  |  |  |  | 
 | 
			
		
	
		
			
				
					|  |  |  |  |     @Resource | 
			
		
	
		
			
				
					|  |  |  |  |     SupCertService supCertService; | 
			
		
	
		
			
				
					|  |  |  |  | 
 | 
			
		
	
		
			
				
					|  |  |  |  |     /** | 
			
		
	
		
			
				
					|  |  |  |  |      * 构造,保存近效期预警信息 | 
			
		
	
		
			
				
					|  |  |  |  |      */ | 
			
		
	
		
			
				
					|  |  |  |  |     private void buildNearRemindMsg(QueryWrapper<SupCertEntity> supCertWrapper, Integer type) { | 
			
		
	
		
			
				
					|  |  |  |  |         List<SupCertEntity> supCertList = supCertDao.selectList(supCertWrapper); | 
			
		
	
		
			
				
					|  |  |  |  |         List<SupCertEntity> list = new CopyOnWriteArrayList<>(supCertList); | 
			
		
	
		
			
				
					|  |  |  |  |         list.parallelStream().forEach(supCertEntity -> { | 
			
		
	
		
			
				
					|  |  |  |  |             SupCertRemindMsgEntity msgEntity = getSupCertNearRemindMsg(supCertEntity, type); | 
			
		
	
		
			
				
					|  |  |  |  |             if (null == msgEntity.getNextRemindTime() || msgEntity.getNextRemindTime().getTime() > new Date().getTime()) { | 
			
		
	
		
			
				
					|  |  |  |  |                 try { | 
			
		
	
		
			
				
					|  |  |  |  |                     saveMsg(msgEntity); | 
			
		
	
		
			
				
					|  |  |  |  |                 } catch (Exception e) { | 
			
		
	
		
			
				
					|  |  |  |  |                     e.printStackTrace(); | 
			
		
	
		
			
				
					|  |  |  |  |                 } | 
			
		
	
		
			
				
					|  |  |  |  |             } | 
			
		
	
		
			
				
					|  |  |  |  |         }); | 
			
		
	
		
			
				
					|  |  |  |  |     } | 
			
		
	
		
			
				
					|  |  |  |  | 
 | 
			
		
	
		
			
				
					|  |  |  |  |     /** | 
			
		
	
		
			
				
					|  |  |  |  |      * 构造,保存预警信息 | 
			
		
	
		
			
				
					|  |  |  |  |      * | 
			
		
	
	
		
			
				
					|  |  |  | @ -233,6 +306,7 @@ public class SupCertRemindMsgImpl implements SupCertRemindMsgService { | 
			
		
	
		
			
				
					|  |  |  |  |             msgEntity = new SupCertRemindMsgEntity(); | 
			
		
	
		
			
				
					|  |  |  |  |             msgEntity.setIdFk(idFk); //设置关联主键
 | 
			
		
	
		
			
				
					|  |  |  |  |             msgEntity.setType(type); //类型
 | 
			
		
	
		
			
				
					|  |  |  |  |             msgEntity.setWarnType(1); | 
			
		
	
		
			
				
					|  |  |  |  |             msgEntity.setCode(supCertEntity.getCode()); //证书编码
 | 
			
		
	
		
			
				
					|  |  |  |  |             msgEntity.setCreateTime(new Date()); | 
			
		
	
		
			
				
					|  |  |  |  |         } | 
			
		
	
	
		
			
				
					|  |  |  | @ -243,4 +317,40 @@ public class SupCertRemindMsgImpl implements SupCertRemindMsgService { | 
			
		
	
		
			
				
					|  |  |  |  |         return msgEntity; | 
			
		
	
		
			
				
					|  |  |  |  |     } | 
			
		
	
		
			
				
					|  |  |  |  | 
 | 
			
		
	
		
			
				
					|  |  |  |  | 
 | 
			
		
	
		
			
				
					|  |  |  |  |     private SupCertRemindMsgEntity getSupCertNearRemindMsg(SupCertEntity supCertEntity, Integer type) { | 
			
		
	
		
			
				
					|  |  |  |  |         String idFk = null; //关联外键
 | 
			
		
	
		
			
				
					|  |  |  |  |         String msg = null; //预警信息
 | 
			
		
	
		
			
				
					|  |  |  |  |         switch (type) { | 
			
		
	
		
			
				
					|  |  |  |  |             case 1: //供应商
 | 
			
		
	
		
			
				
					|  |  |  |  |                 idFk = supCertEntity.getCustomerId(); | 
			
		
	
		
			
				
					|  |  |  |  |                 msg = "供应商资质即将过期,过期时间:" + DateUtil.formatDate(supCertEntity.getExpireDate(), "yyyy-MM-dd"); | 
			
		
	
		
			
				
					|  |  |  |  |                 break; | 
			
		
	
		
			
				
					|  |  |  |  |             case 2: //生产企业
 | 
			
		
	
		
			
				
					|  |  |  |  |                 idFk = supCertEntity.getManufacturerIdFk(); | 
			
		
	
		
			
				
					|  |  |  |  |                 msg = "生产企业资质即将过期,过期时间:" + DateUtil.formatDate(supCertEntity.getExpireDate(), "yyyy-MM-dd"); | 
			
		
	
		
			
				
					|  |  |  |  |                 break; | 
			
		
	
		
			
				
					|  |  |  |  |             case 3: //产品
 | 
			
		
	
		
			
				
					|  |  |  |  |                 idFk = supCertEntity.getProductIdFk(); | 
			
		
	
		
			
				
					|  |  |  |  |                 msg = "产品资质即将过期,过期时间:" + DateUtil.formatDate(supCertEntity.getExpireDate(), "yyyy-MM-dd"); | 
			
		
	
		
			
				
					|  |  |  |  |                 break; | 
			
		
	
		
			
				
					|  |  |  |  |             default: | 
			
		
	
		
			
				
					|  |  |  |  |                 break; | 
			
		
	
		
			
				
					|  |  |  |  |         } | 
			
		
	
		
			
				
					|  |  |  |  |         SupCertRemindMsgEntity msgEntity = supCertRemindMsgDao.selectOne(new QueryWrapper<SupCertRemindMsgEntity>().eq("idFk", idFk).eq("type", type).eq("code", supCertEntity.getCode()).last("limit 1")); | 
			
		
	
		
			
				
					|  |  |  |  |         if (null == msgEntity) { | 
			
		
	
		
			
				
					|  |  |  |  |             //构造新的资质预警信息
 | 
			
		
	
		
			
				
					|  |  |  |  |             msgEntity = new SupCertRemindMsgEntity(); | 
			
		
	
		
			
				
					|  |  |  |  |             msgEntity.setIdFk(idFk); //设置关联主键
 | 
			
		
	
		
			
				
					|  |  |  |  |             msgEntity.setType(type); //类型
 | 
			
		
	
		
			
				
					|  |  |  |  |             msgEntity.setWarnType(2); | 
			
		
	
		
			
				
					|  |  |  |  |             msgEntity.setCode(supCertEntity.getCode()); //证书编码
 | 
			
		
	
		
			
				
					|  |  |  |  |             msgEntity.setCreateTime(new Date()); | 
			
		
	
		
			
				
					|  |  |  |  |         } | 
			
		
	
		
			
				
					|  |  |  |  | 
 | 
			
		
	
		
			
				
					|  |  |  |  |         msgEntity.setVailDate(supCertEntity.getVailDate()); | 
			
		
	
		
			
				
					|  |  |  |  |         msgEntity.setExpireDate(supCertEntity.getExpireDate()); | 
			
		
	
		
			
				
					|  |  |  |  |         msgEntity.setMsg(msg); | 
			
		
	
		
			
				
					|  |  |  |  |         return msgEntity; | 
			
		
	
		
			
				
					|  |  |  |  |     } | 
			
		
	
		
			
				
					|  |  |  |  | } | 
			
		
	
	
		
			
				
					|  |  |  | 
 |