123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109 |
- package com.fdkankan.manage.service.impl;
- import com.alibaba.fastjson.JSONObject;
- import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
- import com.baomidou.mybatisplus.core.conditions.update.LambdaUpdateWrapper;
- import com.fdkankan.dingtalk.DingTalkSendUtils;
- import com.fdkankan.manage.common.ResultCode;
- import com.fdkankan.manage.entity.RtkAccount;
- import com.fdkankan.manage.entity.RtkInfo;
- import com.fdkankan.manage.exception.BusinessException;
- import com.fdkankan.manage.mapper.IRtkAccountMapper;
- import com.fdkankan.manage.service.IRtkAccountService;
- import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
- import com.fdkankan.manage.util.SendMailUtils;
- import com.fdkankan.redis.util.RedisUtil;
- import lombok.extern.slf4j.Slf4j;
- import org.springframework.beans.factory.annotation.Autowired;
- import org.springframework.beans.factory.annotation.Value;
- import org.springframework.stereotype.Service;
- import java.math.BigDecimal;
- import java.math.RoundingMode;
- import java.util.List;
- /**
- * <p>
- * 服务实现类
- * </p>
- *
- * @author
- * @since 2024-07-22
- */
- @Service
- @Slf4j
- public class RtkAccountServiceImpl extends ServiceImpl<IRtkAccountMapper, RtkAccount> implements IRtkAccountService {
- @Autowired
- RedisUtil redisUtil;
- @Override
- public RtkAccount getOneNotUseAccount(String rtkSnCode) {
- String redisKey = "4dkankan:rtk:snCode:"+rtkSnCode;
- if(redisUtil.hasKey(redisKey)){
- String jsonStr = redisUtil.get(redisKey);
- redisUtil.expire(redisKey,60);
- return JSONObject.parseObject(jsonStr, RtkAccount.class);
- }
- LambdaQueryWrapper<RtkAccount> wrapper = new LambdaQueryWrapper<>();
- wrapper.in(RtkAccount::getStatus,0,1);
- wrapper.orderByAsc(RtkAccount::getId);
- List<RtkAccount> list = this.list(wrapper);
- if(list == null || list.isEmpty()){
- //账号库存不足,钉钉通知
- sendDingDingMsg(0);
- throw new BusinessException(ResultCode.RTK_SN_CODE_NOT_EXIT);
- }
- long count = this.count();
- modelThreshold(count,list.size() -1);
- RtkAccount rtkAccount = list.get(0);
- updateAccountStatus(rtkAccount.getId(),2);
- redisUtil.set(redisKey,JSONObject.toJSONString(rtkAccount));
- return rtkAccount;
- }
- @Override
- public void updateAccountStatus(Integer id, int status) {
- LambdaUpdateWrapper<RtkAccount> wrapper1 = new LambdaUpdateWrapper<>();
- wrapper1.eq(RtkAccount::getId,id);
- wrapper1.set(RtkAccount::getStatus,status);
- this.update(wrapper1);
- }
- private void modelThreshold(long count, int size) {
- BigDecimal totalCount = new BigDecimal(count);
- BigDecimal dbCount = new BigDecimal(size);
- BigDecimal divideCount = totalCount.divide(dbCount).setScale(2, RoundingMode.HALF_DOWN);
- BigDecimal thresholdCount = new BigDecimal(this.threshold);
- if(divideCount.compareTo(thresholdCount) >= 0 ){
- sendDingDingMsg(size);
- }
- }
- @Autowired
- DingTalkSendUtils dingTalkSendUtils;
- private static String msgPattern =
- "**域名**: %s\n\n" +
- "**库存数量**: %s\n\n" ;
- @Value("${main.url}")
- String mainUrl;
- @Value("${dingtalk.threshold:80}")
- String threshold;
- private void sendDingDingMsg(Integer count){
- try {
- String format = String.format(msgPattern, mainUrl, count);
- dingTalkSendUtils.sendActioncardMsgToDingRobot(format,"RTK账号库存预警");
- }catch (Exception e){
- log.info("发送钉钉消息失败:{}",e);
- }
- }
- }
|