package com.ruoyi.web.controller.task; import com.alibaba.fastjson2.JSONObject; import com.baomidou.mybatisplus.core.toolkit.Wrappers; import com.ruoyi.common.constant.Constants; import com.ruoyi.common.core.domain.R; import com.ruoyi.common.core.redis.RedisCache; import com.ruoyi.common.utils.http.HttpUtils; import com.ruoyi.system.model.*; import com.ruoyi.system.service.*; import com.ruoyi.system.utils.util.AIUtil; import com.ruoyi.system.vo.TCrmClinicVO; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.scheduling.annotation.Scheduled; import org.springframework.stereotype.Component; import org.springframework.util.CollectionUtils; import java.math.BigDecimal; import java.text.SimpleDateFormat; import java.time.LocalDate; import java.util.*; import java.util.stream.Collectors; /** * @author xiaochen * @date 2023/7/11 8:39 */ @Component public class TaskUtil { @Autowired private RedisCache redisCache; @Autowired private AIUtil aiUtil; @Autowired private TCrmClinicService crmClinicService; @Autowired private TErpProcurementService erpProcurementService; @Autowired private TCrmSupplierService crmSupplierService; @Autowired private TCrmSupplierVerifyService crmSupplierVerifyService; @Autowired private TSysOtherConfigService sysOtherConfigService; @Scheduled(fixedRate = 86460000) // @Scheduled(cron = "10 0 0 * * ?") public void dayOfProportionBill() { try { // 查询跳转检测的用户 Set cacheSet = redisCache.getCacheSet(Constants.AI_USER_INSPECTION); // 获取前一天时间 LocalDate lastDay = LocalDate.now().minusDays(1); for (String phone : cacheSet) { R result = aiUtil.reportQuery(phone, lastDay.toString(), lastDay.toString()); JSONObject data = result.getData(); System.err.println(data); } } catch (Exception e) { e.printStackTrace(); } } @Scheduled(cron = "0 0 0 L * ?") public void monthUpdateClinicPerformance() { try { // 判断哪些诊所本月没有业绩达标 List clinics = crmClinicService.list(); String monthDate = new SimpleDateFormat("yyyy-MM").format(new Date()); List procurements = erpProcurementService.list(Wrappers.lambdaQuery(TErpProcurement.class) .in(TErpProcurement::getStatus, Arrays.asList(3,4,5)) .likeRight(TErpProcurement::getCreateTime, monthDate)); for (TCrmClinic clinic : clinics) { List procurementList = procurements.stream().filter(procurement -> procurement.getClinicId().equals(clinic.getId())).collect(Collectors.toList()); if(!CollectionUtils.isEmpty(procurementList)){ BigDecimal monthPurchaseAmount = procurementList.stream().map(TErpProcurement::getPayMoney).reduce(BigDecimal.ZERO, BigDecimal::add); // 未达标 if(monthPurchaseAmount.compareTo(clinic.getLowProcurementMoney())<0){ clinic.setPerformanceCount(clinic.getPerformanceCount()+1); } } } crmClinicService.updateBatchById(clinics); } catch (Exception e) { e.printStackTrace(); } } @Scheduled(cron = "0 0 0 * * ?") public void dayUpdateClinicMessageCount() { try { // 判断哪些诊所本月没有业绩达标 List clinics = crmClinicService.list(); for (TCrmClinic clinic : clinics) { clinic.setSendMessageCount(0); } crmClinicService.updateBatchById(clinics); } catch (Exception e) { e.printStackTrace(); } } @Scheduled(cron = "0 0 1 * * ?") public void dayUpdateSupplierVerify() { try { // 每天1点生成供应商周期性的核查 List crmSuppliers = crmSupplierService.list(); if(!CollectionUtils.isEmpty(crmSuppliers)){ // 查询核查周期配置 TSysOtherConfig sysOtherConfig = sysOtherConfigService.getById(1); List supplierIds = crmSuppliers.stream().map(TCrmSupplier::getId).collect(Collectors.toList()); // 查询审核列表 List crmSupplierVerifies = crmSupplierVerifyService.list(Wrappers.lambdaQuery(TCrmSupplierVerify.class) .in(TCrmSupplierVerify::getSupplierId, supplierIds) .orderByDesc(TCrmSupplierVerify::getGenerateTime)); for (TCrmSupplier crmSupplier : crmSuppliers) { List supplierVerifies = crmSupplierVerifies.stream().filter(crmSupplierVerify -> crmSupplier.getId().equals(crmSupplierVerify.getSupplierId())).collect(Collectors.toList()); Integer verifyUnit = sysOtherConfig.getVerifyUnit(); Integer verifyValue = sysOtherConfig.getVerifyValue(); if (!CollectionUtils.isEmpty(supplierVerifies)) { // 根据最新的核查进行比较核查周期 TCrmSupplierVerify tCrmSupplierVerify = supplierVerifies.get(0); LocalDate generateTime = tCrmSupplierVerify.getGenerateTime(); LocalDate nextVerifyDate = calculateNextVerifyDate(generateTime, verifyUnit, verifyValue); if (nextVerifyDate != null && nextVerifyDate.isEqual(LocalDate.now())) { createSupplierVerify(crmSupplier); } } else { // 根据供应商添加时间进行比较核查周期 LocalDate createTime = crmSupplier.getCreateTime().toLocalDate(); LocalDate nextVerifyDate = calculateNextVerifyDate(createTime, verifyUnit, verifyValue); if (nextVerifyDate != null && nextVerifyDate.isEqual(LocalDate.now())) { createSupplierVerify(crmSupplier); } } } } } catch (Exception e) { e.printStackTrace(); } } /** * 计算下一次供应商核查时间 * @param baseDate * @param verifyUnit * @param verifyValue * @return */ private LocalDate calculateNextVerifyDate(LocalDate baseDate, Integer verifyUnit, Integer verifyValue) { switch (verifyUnit) { case 1: return baseDate.plusDays(verifyValue); case 2: return baseDate.plusMonths(verifyValue); case 3: return baseDate.plusYears(verifyValue); default: return null; } } /** * 供应商周期核查 * @param crmSupplier */ private void createSupplierVerify(TCrmSupplier crmSupplier) { TCrmSupplierVerify crmSupplierVerify = new TCrmSupplierVerify(); crmSupplierVerify.setSupplierId(crmSupplier.getId()); crmSupplierVerify.setGenerateTime(LocalDate.now()); crmSupplierVerify.setStatus(1); crmSupplierVerifyService.save(crmSupplierVerify); } }