package com.doumee.service.business.impl; 
 | 
  
 | 
import com.doumee.biz.system.SystemDictDataBiz; 
 | 
import com.doumee.core.constants.Constants; 
 | 
import com.doumee.core.dingding.DingDingNotice; 
 | 
import com.doumee.core.constants.Constants; 
 | 
import com.doumee.core.constants.ResponseStatus; 
 | 
import com.doumee.core.exception.BusinessException; 
 | 
import com.doumee.core.model.LoginUserInfo; 
 | 
import com.doumee.core.model.PageData; 
 | 
import com.doumee.core.model.PageWrap; 
 | 
import com.doumee.core.utils.Utils; 
 | 
import com.doumee.core.wx.WxMiniUtilService; 
 | 
import com.doumee.dao.business.LocksMapper; 
 | 
import com.doumee.dao.business.SitesMapper; 
 | 
import com.doumee.dao.business.model.Locks; 
 | 
import com.doumee.dao.business.model.Sites; 
 | 
import com.doumee.dao.business.web.request.SitesMonitorBikeDTO; 
 | 
import com.doumee.dao.business.web.request.SitesMonitorDTO; 
 | 
import com.doumee.service.business.SitesService; 
 | 
import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; 
 | 
import com.baomidou.mybatisplus.core.conditions.update.UpdateWrapper; 
 | 
import com.baomidou.mybatisplus.core.metadata.IPage; 
 | 
import com.baomidou.mybatisplus.extension.plugins.pagination.Page; 
 | 
import org.apache.commons.lang3.StringUtils; 
 | 
import org.checkerframework.checker.units.qual.C; 
 | 
import org.apache.shiro.SecurityUtils; 
 | 
import org.springframework.beans.factory.annotation.Autowired; 
 | 
import org.springframework.scheduling.annotation.Async; 
 | 
import org.springframework.stereotype.Service; 
 | 
import org.springframework.util.CollectionUtils; 
 | 
  
 | 
import java.math.BigDecimal; 
 | 
import java.util.ArrayList; 
 | 
import java.util.Date; 
 | 
import java.util.List; 
 | 
import java.util.Objects; 
 | 
import java.util.stream.Collectors; 
 | 
  
 | 
/** 
 | 
 * 站点信息表Service实现 
 | 
 * @author 江蹄蹄 
 | 
 * @date 2023/09/27 18:06 
 | 
 */ 
 | 
@Service 
 | 
public class SitesServiceImpl implements SitesService { 
 | 
  
 | 
    @Autowired 
 | 
    private SitesMapper sitesMapper; 
 | 
  
 | 
    @Autowired 
 | 
    private LocksMapper locksMapper; 
 | 
  
 | 
    @Autowired 
 | 
    private SystemDictDataBiz systemDictDataBiz; 
 | 
  
 | 
  
 | 
    @Override 
 | 
    public String create(Sites sites) { 
 | 
        LoginUserInfo principal = (LoginUserInfo) SecurityUtils.getSubject().getPrincipal(); 
 | 
  
 | 
        QueryWrapper<Sites> wrapper = new QueryWrapper<>(); 
 | 
        wrapper.lambda() 
 | 
                .eq(Sites::getCode,sites.getCode()); 
 | 
        Integer count = sitesMapper.selectCount(wrapper); 
 | 
        if (count > 0){ 
 | 
            throw new BusinessException(ResponseStatus.BAD_REQUEST.getCode(),"站点编号已存在"); 
 | 
        } 
 | 
        Sites insert = new Sites(); 
 | 
        insert.setId(sites.getCode()); 
 | 
        insert.setCreateDate(new Date()); 
 | 
        insert.setCreator(principal.getId()); 
 | 
        insert.setEditDate(new Date()); 
 | 
        insert.setEditor(principal.getId()); 
 | 
        insert.setIsdeleted(Constants.ZERO); 
 | 
        insert.setInfo(sites.getInfo()); 
 | 
        insert.setName(sites.getName()); 
 | 
        insert.setCode(sites.getCode()); 
 | 
        insert.setStatus(Constants.ZERO); 
 | 
        insert.setLockNum(sites.getLockNum()); 
 | 
        insert.setIp(sites.getIp()); 
 | 
        sitesMapper.insert(insert); 
 | 
        return sites.getId(); 
 | 
    } 
 | 
  
 | 
    @Override 
 | 
    public void deleteById(String id) { 
 | 
        sitesMapper.deleteById(id); 
 | 
    } 
 | 
  
 | 
    @Override 
 | 
    public void delete(Sites sites) { 
 | 
        UpdateWrapper<Sites> deleteWrapper = new UpdateWrapper<>(sites); 
 | 
        sitesMapper.delete(deleteWrapper); 
 | 
    } 
 | 
  
 | 
    @Override 
 | 
    public void deleteByIdInBatch(List<String> ids) { 
 | 
        if (CollectionUtils.isEmpty(ids)) { 
 | 
            return; 
 | 
        } 
 | 
        sitesMapper.deleteBatchIds(ids); 
 | 
    } 
 | 
  
 | 
    @Override 
 | 
    public void updateById(Sites sites) { 
 | 
        LoginUserInfo principal = (LoginUserInfo) SecurityUtils.getSubject().getPrincipal(); 
 | 
        QueryWrapper<Sites> wrapper = new QueryWrapper<>(); 
 | 
        wrapper.lambda() 
 | 
                .eq(Sites::getCode,sites.getCode()); 
 | 
        Sites count = sitesMapper.selectOne(wrapper); 
 | 
        if (Objects.nonNull(count) && !count.getId().equals(sites.getId())){ 
 | 
            throw new BusinessException(ResponseStatus.BAD_REQUEST.getCode(),"站点编号已存在"); 
 | 
        } 
 | 
        Sites update = new Sites(); 
 | 
        update.setId(sites.getId()); 
 | 
        update.setCreateDate(new Date()); 
 | 
        update.setEditor(principal.getId()); 
 | 
        update.setName(sites.getName()); 
 | 
        update.setLockNum(sites.getLockNum()); 
 | 
        update.setIp(sites.getIp()); 
 | 
        update.setNeedNotice(sites.getNeedNotice()); 
 | 
        sitesMapper.updateById(update); 
 | 
    } 
 | 
  
 | 
    @Override 
 | 
    public void updateByIdInBatch(List<Sites> sitess) { 
 | 
        if (CollectionUtils.isEmpty(sitess)) { 
 | 
            return; 
 | 
        } 
 | 
        for (Sites sites: sitess) { 
 | 
            this.updateById(sites); 
 | 
        } 
 | 
    } 
 | 
  
 | 
    @Override 
 | 
    public Sites findById(String id) { 
 | 
        return sitesMapper.selectById(id); 
 | 
    } 
 | 
  
 | 
    @Override 
 | 
    public Sites findOne(Sites sites) { 
 | 
        QueryWrapper<Sites> wrapper = new QueryWrapper<>(sites); 
 | 
        return sitesMapper.selectOne(wrapper.last(" limit 1")); 
 | 
    } 
 | 
  
 | 
    @Override 
 | 
    public List<Sites> findList(Sites sites) { 
 | 
        QueryWrapper<Sites> wrapper = new QueryWrapper<>(sites); 
 | 
        return sitesMapper.selectList(wrapper); 
 | 
    } 
 | 
    @Override 
 | 
    public void  noticeNoLinkList(Sites sites) { 
 | 
        //发送钉钉通知 
 | 
        int second  =0; 
 | 
        try { 
 | 
            second = Integer.parseInt(systemDictDataBiz.queryByCode(Constants.SYSTEM, Constants.NOTICE_SITE_LINK_LIMIT).getCode()); 
 | 
        }catch (Exception e){ 
 | 
  
 | 
        } 
 | 
        if(second <=0){ 
 | 
            return ; 
 | 
        } 
 | 
        sites.setIsdeleted(Constants.ZERO); 
 | 
        sites.setStatus(Constants.ZERO); 
 | 
        QueryWrapper<Sites> wrapper = new QueryWrapper<>(sites); 
 | 
        wrapper.lambda().orderByDesc(Sites::getLastLinkDate); 
 | 
        List<Sites> siteList =sitesMapper.selectList(wrapper); 
 | 
        List<Sites> errorList = new ArrayList<>(); 
 | 
        for(Sites site : siteList){ 
 | 
            //时间查过通信异常阈值 
 | 
            if(Constants.formatIntegerNum(site.getNeedNotice()) == Constants.ZERO 
 | 
                    && System.currentTimeMillis()-site.getLastLinkDate().getTime() > second*1000){ 
 | 
                errorList.add(site); 
 | 
            } 
 | 
        } 
 | 
        if(errorList.size()>0){ 
 | 
            try { 
 | 
                DingDingNotice.siteNoLink(errorList, 
 | 
                        systemDictDataBiz.queryByCode(Constants.DINGDING,Constants.DINGDING_URL).getCode(), 
 | 
                        systemDictDataBiz.queryByCode(Constants.DINGDING,Constants.DINGDING_SECRET).getCode()); 
 | 
            } catch (Exception e) { 
 | 
                e.printStackTrace(); 
 | 
            } 
 | 
        } 
 | 
  
 | 
    } 
 | 
  
 | 
    @Override 
 | 
    public PageData<Sites> findPage(PageWrap<Sites> pageWrap) { 
 | 
        IPage<Sites> page = new Page<>(pageWrap.getPage(), pageWrap.getCapacity()); 
 | 
        QueryWrapper<Sites> queryWrapper = new QueryWrapper<>(); 
 | 
        Utils.MP.blankToNull(pageWrap.getModel()); 
 | 
        if (pageWrap.getModel().getId() != null) { 
 | 
            queryWrapper.lambda().eq(Sites::getId, pageWrap.getModel().getId()); 
 | 
        } 
 | 
        if (pageWrap.getModel().getCreateDate() != null) { 
 | 
            queryWrapper.lambda().ge(Sites::getCreateDate, Utils.Date.getStart(pageWrap.getModel().getCreateDate())); 
 | 
            queryWrapper.lambda().le(Sites::getCreateDate, Utils.Date.getEnd(pageWrap.getModel().getCreateDate())); 
 | 
        } 
 | 
        if (pageWrap.getModel().getCreator() != null) { 
 | 
            queryWrapper.lambda().eq(Sites::getCreator, pageWrap.getModel().getCreator()); 
 | 
        } 
 | 
        if (pageWrap.getModel().getEditDate() != null) { 
 | 
            queryWrapper.lambda().ge(Sites::getEditDate, Utils.Date.getStart(pageWrap.getModel().getEditDate())); 
 | 
            queryWrapper.lambda().le(Sites::getEditDate, Utils.Date.getEnd(pageWrap.getModel().getEditDate())); 
 | 
        } 
 | 
        if (pageWrap.getModel().getEditor() != null) { 
 | 
            queryWrapper.lambda().eq(Sites::getEditor, pageWrap.getModel().getEditor()); 
 | 
        } 
 | 
        if (pageWrap.getModel().getIsdeleted() != null) { 
 | 
            queryWrapper.lambda().eq(Sites::getIsdeleted, pageWrap.getModel().getIsdeleted()); 
 | 
        } 
 | 
        if (pageWrap.getModel().getInfo() != null) { 
 | 
            queryWrapper.lambda().eq(Sites::getInfo, pageWrap.getModel().getInfo()); 
 | 
        } 
 | 
        if (pageWrap.getModel().getName() != null) { 
 | 
            queryWrapper.lambda().like(Sites::getName, pageWrap.getModel().getName()); 
 | 
        } 
 | 
        if (pageWrap.getModel().getCode() != null) { 
 | 
            queryWrapper.lambda().like(Sites::getCode, pageWrap.getModel().getCode()); 
 | 
        } 
 | 
        if (pageWrap.getModel().getStatus() != null) { 
 | 
            queryWrapper.lambda().eq(Sites::getStatus, pageWrap.getModel().getStatus()); 
 | 
        } 
 | 
        if (pageWrap.getModel().getLockNum() != null) { 
 | 
            queryWrapper.lambda().eq(Sites::getLockNum, pageWrap.getModel().getLockNum()); 
 | 
        } 
 | 
        if (pageWrap.getModel().getIp() != null) { 
 | 
            queryWrapper.lambda().eq(Sites::getIp, pageWrap.getModel().getIp()); 
 | 
        } 
 | 
        if (pageWrap.getModel().getClientVersion() != null) { 
 | 
            queryWrapper.lambda().eq(Sites::getClientVersion, pageWrap.getModel().getClientVersion()); 
 | 
        } 
 | 
         /*for(PageWrap.SortData sortData: pageWrap.getSorts()) { 
 | 
            if (sortData.getDirection().equalsIgnoreCase(PageWrap.DESC)) { 
 | 
                queryWrapper.orderByDesc(sortData.getProperty()); 
 | 
            } else { 
 | 
                queryWrapper.orderByAsc(sortData.getProperty()); 
 | 
            } 
 | 
        }*/ 
 | 
        queryWrapper.lambda().orderByAsc(Sites::getCode); 
 | 
        return PageData.from(sitesMapper.selectPage(page, queryWrapper)); 
 | 
    } 
 | 
  
 | 
    @Override 
 | 
    public long count(Sites sites) { 
 | 
        QueryWrapper<Sites> wrapper = new QueryWrapper<>(sites); 
 | 
        return sitesMapper.selectCount(wrapper); 
 | 
    } 
 | 
  
 | 
    @Override 
 | 
    public PageData<Sites> findSitesMonitorDTOPage(PageWrap<SitesMonitorDTO> pageWrap) { 
 | 
//        IPage page = new Page<>(pageWrap.getPage(), pageWrap.getCapacity()); 
 | 
        IPage<Sites> page = new Page<>(pageWrap.getPage(), pageWrap.getCapacity()); 
 | 
        QueryWrapper<Sites> queryWrapper = new QueryWrapper<>(); 
 | 
        Utils.MP.blankToNull(pageWrap.getModel()); 
 | 
        queryWrapper.select("*,(select count(r.id) from locks r where r.site_id = sites.id) as all_lock_num" + 
 | 
         ",(select count(l.bike_code) from locks l where l.site_id = sites.id and l.bike_code IS NOT NULL and l.bike_code !='' ) as bikeCount"); 
 | 
//        Page<SitesMonitorDTO> sitesMonitorDTO = sitesMapper.getSitesMonitorDTO(page, pageWrap.getModel().getCode(), pageWrap.getModel().getName()); 
 | 
        queryWrapper.lambda().like(StringUtils.isNotBlank(pageWrap.getModel().getCode()),Sites::getCode,pageWrap.getModel().getCode()); 
 | 
        queryWrapper.lambda().like(StringUtils.isNotBlank(pageWrap.getModel().getName()),Sites::getName,pageWrap.getModel().getName()); 
 | 
        queryWrapper.lambda().orderByAsc(Sites::getCode); 
 | 
        IPage<Sites> sitesMonitorDTO = sitesMapper.selectPage(page, queryWrapper); 
 | 
        if (!CollectionUtils.isEmpty(sitesMonitorDTO.getRecords())){ 
 | 
            sitesMonitorDTO.getRecords().forEach(s->{ 
 | 
                if(Constants.formatIntegerNum(s.getAllLockNum()) >0){ 
 | 
                    s.setRate(new BigDecimal(s.getBikeCount()).divide(new BigDecimal(s.getAllLockNum()),2,BigDecimal.ROUND_HALF_UP)); 
 | 
                }else{ 
 | 
                    s.setRate(new BigDecimal(0.0)); 
 | 
                } 
 | 
            }); 
 | 
        } 
 | 
  
 | 
        return PageData.from(sitesMonitorDTO); 
 | 
    } 
 | 
  
 | 
    @Override 
 | 
    public void siteReservesNotice()  throws Exception{ 
 | 
        QueryWrapper<Sites> queryWrapper = new QueryWrapper<>(); 
 | 
        queryWrapper.select(" *, " + 
 | 
                " (select count(r.id) from locks r where r.site_id = sites.id) as all_lock_num ," + 
 | 
                "(select count(l.bike_code) from locks l where l.site_id = sites.id and l.bike_code IS NOT NULL and l.bike_code !='' ) as bikeCount"); 
 | 
        queryWrapper.lambda().eq(Sites::getStatus,Constants.ZERO); 
 | 
        queryWrapper.lambda().eq(Sites::getIsdeleted,Constants.ZERO); 
 | 
        queryWrapper.lambda().orderByAsc(Sites::getCode); 
 | 
        List<Sites> sitesList = sitesMapper.selectList(queryWrapper); 
 | 
        if (!CollectionUtils.isEmpty(sitesList)){ 
 | 
                for (Sites s:sitesList) { 
 | 
                    if(Constants.formatIntegerNum(s.getAllLockNum())<=Constants.ZERO){ 
 | 
                        continue; 
 | 
                    } 
 | 
                    BigDecimal warnMin = new BigDecimal(systemDictDataBiz.queryByCode(Constants.MINI_PROGRAMME,Constants.WARN_MIN).getCode()); 
 | 
                    BigDecimal warnMax = new BigDecimal(systemDictDataBiz.queryByCode(Constants.MINI_PROGRAMME,Constants.WARN_MAX).getCode()); 
 | 
                    BigDecimal rata = new BigDecimal(s.getBikeCount()).divide(new BigDecimal(s.getAllLockNum()),2,BigDecimal.ROUND_HALF_UP).multiply(new BigDecimal(100L)); 
 | 
                    if(rata.compareTo(warnMax)>Constants.ZERO){ 
 | 
                        //发送钉钉通知 
 | 
                        DingDingNotice.reservesNotice(StringUtils.isBlank(s.getName())?s.getId() + " - 未知" :s.getId() + " - " + s.getName(), 
 | 
                                systemDictDataBiz.queryByCode(Constants.DINGDING,Constants.DINGDING_URL).getCode(), 
 | 
                                systemDictDataBiz.queryByCode(Constants.DINGDING,Constants.DINGDING_SECRET).getCode(),Constants.ZERO,warnMax); 
 | 
                    }else if(rata.compareTo(warnMin)<Constants.ZERO){ 
 | 
                        //发送钉钉通知 
 | 
                        DingDingNotice.reservesNotice(StringUtils.isBlank(s.getName())?s.getId() + " - 未知" :s.getId() + " - " + s.getName(), 
 | 
                                systemDictDataBiz.queryByCode(Constants.DINGDING,Constants.DINGDING_URL).getCode(), 
 | 
                                systemDictDataBiz.queryByCode(Constants.DINGDING,Constants.DINGDING_SECRET).getCode(),Constants.ONE,warnMin); 
 | 
                    } 
 | 
                } 
 | 
        } 
 | 
  
 | 
  
 | 
    } 
 | 
} 
 |