package com.nanometer.smartlab.email; import com.alibaba.fastjson.JSONArray; import com.alibaba.fastjson.JSONObject; import com.nanometer.smartlab.entity.EmailStatus; import com.nanometer.smartlab.entity.OpeWarehouseReserve; import com.nanometer.smartlab.entity.SysReagent; import com.nanometer.smartlab.entity.SysUser; import com.nanometer.smartlab.entity.enumtype.EmailSendStatus; import com.nanometer.smartlab.exception.BusinessException; import com.nanometer.smartlab.exception.ExceptionEnumCode; import com.nanometer.smartlab.service.*; import com.nanometer.smartlab.util.EmailSend; import com.nanometer.smartlab.util.HttpUtil; import net.sf.cglib.asm.$ByteVector; import org.apache.commons.lang.StringUtils; import org.apache.http.message.BasicNameValuePair; import org.apache.log4j.Logger; import org.omg.CORBA.NameValuePair; import org.springframework.beans.factory.annotation.Value; import org.springframework.context.annotation.Lazy; import org.springframework.scheduling.annotation.Scheduled; import org.springframework.stereotype.Component; import javax.annotation.Resource; import java.math.BigDecimal; import java.math.RoundingMode; import java.util.*; /** * Created by wjd on 18/6/18. */ @Component public class EmailSendSchedule { @Lazy @Resource private OpeOrderService opeOrderService; private static Logger logger = Logger.getLogger(EmailSendSchedule.class); @Resource private SysReagentService sysReagentService; @Resource private OpeWarehouseReserveService opeWarehouseReserveService; @Resource private SysUserService userService; @Resource private SysSupplierService sysSupplierService; @Scheduled(fixedDelayString = "${emailSend.schedule.delay}") public void EmailSendSchedule(){ List list = null; try { int count = this.opeOrderService.getUnsendEmailCount(); if (count > 0) { list = opeOrderService.getUnsendEmailList(); } } catch (Exception e) { logger.error(e); } if(list != null){ for (EmailStatus email: list) { try { EmailSend.send(email.getEmailAddress(), email.getApplyCode()); // 发送成功,更新邮件发送状态为:已发送 email.setStatus(EmailSendStatus.SEND_SUCCESS); this.opeOrderService.updateEmailStatus(email); } catch (BusinessException e) { // 发送失败,更新邮件发送状态为:发送失败 email.setStatus(EmailSendStatus.SEND_FAIL); this.opeOrderService.updateEmailStatus(email); logger.warn("操作失败。", e); } catch (Exception e) { logger.error(e); } } } } // @Scheduled(cron = "0/5 * * * * ?") //每隔5秒执行一次 @Scheduled(cron = "0 0 8 * * ?")//每天8点执行一次 public void EmailSendStock(){ //收件人为人员角色为库管员的邮箱 List revicerList = userService.getLibrarianEmail(); //先查试剂表 安全库存大于0,然后去查库存,实际库存小于安全库存的列表 List sysReagentList = new ArrayList<>(); //已经填写安全库存的试剂 List alreadyFillIn = sysReagentService.selectReagentSafetyNum(); if (alreadyFillIn.size() > 0) { for (SysReagent reagent : alreadyFillIn) { int actualNum = opeWarehouseReserveService.countByReagentId(reagent.getId()); if (reagent.getSafetynum() > actualNum) { reagent.setActualnum(actualNum); sysReagentList.add(reagent); } } } if(sysReagentList.size() > 0 && revicerList.size() > 0 ){ StringBuffer content = new StringBuffer(""); content.append("
"); content.append(""); content.append(""); content.append(""); content.append(""); content.append(""); content.append(""); content.append(""); content.append(""); content.append(""); content.append(""); content.append(""); content.append(""); content.append(""); content.append(""); for (SysReagent sysReagent : sysReagentList){ content.append(""); content.append(""); content.append(""); content.append(""); content.append("");// content.append(""); content.append(""); content.append("");// content.append("");// content.append(""); content.append(""); content.append(""); } content.append("
试剂名称产品编号CAS试剂类型供应商厂家规格包装安全库存实际库存
"+sysReagent.getName()+""+sysReagent.getProductSn()+""+sysReagent.getCas()+""+sysReagent.getReagentType()+""+sysReagent.getSupplierName()+""+sysReagent.getProductHomeName()+""+sysReagent.getReagentFormat()+""+sysReagent.getReagentUnit()+""+sysReagent.getSafetynum()+""+sysReagent.getActualnum()+"
"); content.append(""); try { EmailSend.sendArrivalEmail(revicerList,content.toString(),"-待补货试剂"); // 发送成功,更新邮件发送状态为:已发送 } catch (BusinessException e) { // 发送失败,更新邮件发送状态为:发送失败 logger.warn("操作失败。", e); } catch (Exception e) { logger.error(e); } } } @Value("${reagent.detail.price.api}") private String reagentApi; private final static String send_supplier_name = "国药集团化学试剂苏州有限公司"; private final static BigDecimal SALE_85 = BigDecimal.valueOf(0.85); private final static Map discountMap = new HashMap(){{ put(SALE_85, "85折价格"); }}; /** * @Description: 姑苏实验室 发给admin管理员邮箱 国药试剂(价格不同的)信息 执行时间 :每天早上2点 * @date 2021/8/19 9:06 */ @Scheduled(cron = "0 0 2 * * ?") // @Scheduled(cron = "0/5 * * * * ?") //每隔5秒执行一次 public void ReagentPriceSend(){ //0.限制在姑苏实验室 if (StringUtils.isBlank(reagentApi) || reagentApi.length() == 0) return; try { //1.获取管理员邮箱 SysUser admin = userService.getSysUserByAccount("admin"); if (admin == null ||StringUtils.isBlank(admin.getEmail())) throw new BusinessException(ExceptionEnumCode.PARAM_NULL,"找不到管理员或者管理员邮箱信息"); //2.获取国药试剂 Long supplierId = sysSupplierService.getSysSupplierIdByname(send_supplier_name); if (supplierId==null) throw new BusinessException(ExceptionEnumCode.PARAM_NO_EXIST, "没有找到与(" + send_supplier_name + ")相关供应商,请检查最近信息更新"); List guoyao_reagents = sysReagentService.getSysReagentListNew(null, null, supplierId, 1, null, null, null); if (guoyao_reagents.size() < 1) throw new BusinessException(ExceptionEnumCode.PARAM_NULL, "供应商:" + send_supplier_name + ",没有查询到相关试剂"); List sendDataList = new ArrayList<>(); for (SysReagent reagent : guoyao_reagents) { String productSn = reagent.getProductSn(); List params = new ArrayList() {{ add(new BasicNameValuePair("goodsErpCode", productSn)); }}; String res = HttpUtil.doGet(reagentApi, params); JSONObject resJson = JSONObject.parseObject(res); JSONArray data = resJson.getJSONArray("data"); JSONObject dataJson = data.getJSONObject(0); Integer totalRows = dataJson.getInteger("totalRows"); if (totalRows != 1) continue; JSONArray listApiGoods = dataJson.getJSONArray("listApiGoods"); if (listApiGoods.size() != 1) logger.info("产品编号:" + productSn + ",接口查询到多个数据,无法判断"); JSONObject goodJson = listApiGoods.getJSONObject(0); String goodsName = goodJson.getString("goodsName"); BigDecimal goodsCostPrice = goodJson.getBigDecimal("goodsCostPrice"); BigDecimal price = reagent.getPrice(); //保留两位 BigDecimal price_afterDiscount = SALE_85.multiply(goodsCostPrice).setScale(2, RoundingMode.HALF_UP); if (price_afterDiscount.compareTo(price) > 0) { sendDataList.add(new JSONObject() {{ put("goodsName", goodsName); put("goodsCostPrice", goodsCostPrice); put("priceAfterDiscount", price_afterDiscount); put("currentSystemPrice", price); put("goodsCode", productSn); }}); } } //制作表格 StringBuilder content = new StringBuilder(""); content.append("
"); content.append(""); content.append(""); content.append(""); content.append(""); content.append(""); content.append(""); content.append(""); content.append(""); content.append(""); for (JSONObject goodJson : sendDataList){ content.append("") .append("") .append("") .append("") .append("") .append("") .append(""); } content.append("
产品编号产品名称官网售价").append(discountMap.get(SALE_85)).append("当前系统价格
").append(goodJson.getString("goodsCode")).append("").append(goodJson.getString("goodsName")).append("").append(goodJson.getBigDecimal("goodsCostPrice")).append("").append(goodJson.getBigDecimal("priceAfterDiscount")).append("").append(goodJson.getBigDecimal("currentSystemPrice")).append("
"); content.append(""); //发送邮件 EmailSend.sendArrivalEmail(Collections.singletonList(admin.getEmail()),content.toString(),"-国药试剂价格变动"); // 发送成功,更新邮件发送状态为:已发送 } catch (BusinessException e) { e.printStackTrace(); logger.warn(e.getMessage()); } catch (Exception e) { e.printStackTrace(); logger.warn("系统内部错误,请检查代码"); } } }