jiaosong
2023-10-11 826a321e7122c4669b41f6a2add90c09749ec672
#pgsql 运营监控
已添加2个文件
已修改8个文件
231 ■■■■ 文件已修改
server/platform/src/main/java/com/doumee/api/business/MemberController.java 2 ●●● 补丁 | 查看 | 原始文档 | blame | 历史
server/platform/src/main/java/com/doumee/api/business/RefundController.java 2 ●●● 补丁 | 查看 | 原始文档 | blame | 历史
server/platform/src/main/java/com/doumee/api/business/SitesController.java 17 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
server/services/src/main/java/com/doumee/dao/business/SitesMapper.java 23 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
server/services/src/main/java/com/doumee/dao/business/web/request/SitesMonitorBikeDTO.java 31 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
server/services/src/main/java/com/doumee/dao/business/web/request/SitesMonitorDTO.java 7 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
server/services/src/main/java/com/doumee/dao/business/web/response/MemberRidesDTO.java 2 ●●● 补丁 | 查看 | 原始文档 | blame | 历史
server/services/src/main/java/com/doumee/service/business/SitesService.java 19 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
server/services/src/main/java/com/doumee/service/business/impl/SitesServiceImpl.java 66 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
server/services/src/main/resources/mappers/SitesMapper.xml 62 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
server/platform/src/main/java/com/doumee/api/business/MemberController.java
@@ -76,7 +76,7 @@
    }
    @ApiOperation("根据ID修改卡信息")
    @PostMapping("/updateById")
    @PostMapping("/update")
    @RequiresPermissions("business:member:update")
    public ApiResponse update(@RequestBody Member member){
        memberService.update(member);
server/platform/src/main/java/com/doumee/api/business/RefundController.java
@@ -77,7 +77,7 @@
        return ApiResponse.success(refundService.findPage(pageWrap));
    }
    @ApiOperation("后台结算记录")
    @PostMapping("/page")
    @PostMapping("/findPlatPage")
    @RequiresPermissions("business:refund:query")
    public ApiResponse<PageData<Refund>> findPlatPage (@RequestBody PageWrap<Refund> pageWrap) {
        return ApiResponse.success(refundService.findPlatPage(pageWrap));
server/platform/src/main/java/com/doumee/api/business/SitesController.java
@@ -7,6 +7,8 @@
import com.doumee.core.model.PageData;
import com.doumee.core.model.PageWrap;
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 io.swagger.annotations.Api;
import io.swagger.annotations.ApiOperation;
@@ -87,4 +89,19 @@
    public ApiResponse findById(@PathVariable String id) {
        return ApiResponse.success(sitesService.findById(id));
    }
    @ApiOperation("站点储车监控")
    @PostMapping("/findSitesMonitorDTOPage")
    @RequiresPermissions("business:sites:query")
    public ApiResponse<PageData<SitesMonitorDTO>> findSitesMonitorDTOPage(@RequestBody PageWrap<SitesMonitorDTO> pageWrap){
        return ApiResponse.success(sitesService.findSitesMonitorDTOPage(pageWrap));
    }
    @ApiOperation("实时车位信息")
    @PostMapping("/findSitesMonitorDTOPage")
    @RequiresPermissions("business:sites:query")
    public ApiResponse<PageData<SitesMonitorBikeDTO>> getSitesMonitorBikeDTO(@RequestBody PageWrap<SitesMonitorDTO> pageWrap){
        return ApiResponse.success(sitesService.getSitesMonitorBikeDTO(pageWrap));
    }
}
server/services/src/main/java/com/doumee/dao/business/SitesMapper.java
@@ -1,8 +1,13 @@
package com.doumee.dao.business;
import com.baomidou.mybatisplus.core.mapper.BaseMapper;
import com.baomidou.mybatisplus.core.metadata.IPage;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
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.dao.system.dto.QuerySystemUserDTO;
import org.apache.ibatis.annotations.Param;
import org.apache.ibatis.annotations.Select;
/**
@@ -15,16 +20,12 @@
    /**
     * @return
     */
    @Select("SELECT \n" +
            "sites.id,\n" +
            "sites.name as name,\n" +
            "sites.code as code,\n" +
            "count(l.id) as lid,\n" +
            "count(l.bike_code ) as lbikeCount\n" +
            "from \n" +
            "sites sites\n" +
            "LEFT JOIN locks l on sites.id = l.site_id\n" +
            "GROUP BY sites.id ")
    SitesMonitorDTO getSitesMonitorDTO();
    Page<SitesMonitorDTO> getSitesMonitorDTO(IPage page, @Param("code") String code, @Param("name") String name);
    Page<SitesMonitorBikeDTO> getSitesMonitorBikeDTO(IPage page,
                                                     @Param("code") String code,
                                                     @Param("name") String name,
                                                     @Param("lockCode") String lockCode,
                                                     @Param("hasBike") Boolean hasBike   );
}
server/services/src/main/java/com/doumee/dao/business/web/request/SitesMonitorBikeDTO.java
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,31 @@
package com.doumee.dao.business.web.request;
import io.swagger.annotations.ApiModel;
import io.swagger.annotations.ApiModelProperty;
import lombok.Data;
import java.math.BigDecimal;
/**
 * @author T14
 */
@Data
@ApiModel("站点车辆监控")
public class SitesMonitorBikeDTO {
    @ApiModelProperty(value = "名称")
    private String name;
    @ApiModelProperty(value = "编号")
    private String code;
    @ApiModelProperty(value = "锁止器数")
    private Integer localCode;
    @ApiModelProperty(value = "在架车辆数")
    private Integer bikeCode;
    @ApiModelProperty(value = "车辆类型")
    private String bikeType;
}
server/services/src/main/java/com/doumee/dao/business/web/request/SitesMonitorDTO.java
@@ -32,6 +32,13 @@
    private BigDecimal rate;
    @ApiModelProperty(value = "锁头是否有车")
    private Boolean hasBike ;
    @ApiModelProperty(value = "满架率")
    private String lockCode;
}
server/services/src/main/java/com/doumee/dao/business/web/response/MemberRidesDTO.java
@@ -42,7 +42,7 @@
    @ExcelColumn(name="计费时长(分)",index = 7,width = 10,align = HorizontalAlignment.CENTER)
    private Integer duration;
    @ApiModelProperty(value = "租车时间"))
    @ApiModelProperty(value = "租车时间")
    @ExcelColumn(name="租车时间",index = 8,width = 10,align = HorizontalAlignment.CENTER)
    private Date rentDate;
server/services/src/main/java/com/doumee/service/business/SitesService.java
@@ -1,8 +1,14 @@
package com.doumee.service.business;
import com.baomidou.mybatisplus.core.metadata.IPage;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.doumee.core.model.PageData;
import com.doumee.core.model.PageWrap;
import com.doumee.dao.business.model.Sites;
import com.doumee.dao.business.web.request.SitesMonitorBikeDTO;
import com.doumee.dao.business.web.request.SitesMonitorDTO;
import org.apache.ibatis.annotations.Param;
import java.util.List;
/**
@@ -101,4 +107,17 @@
     * @throws Exception
     */
    void siteReservesNotice(String siteId) throws Exception;
    /**
     * åˆ†é¡µæŸ¥è¯¢ç«™ç‚¹å‚¨è½¦ç›‘控
     *
     * @param pageWrap åˆ†é¡µå¯¹è±¡
     * @return PageData<Sites>
     */
    PageData<SitesMonitorDTO> findSitesMonitorDTOPage(PageWrap<SitesMonitorDTO> pageWrap);
    PageData<SitesMonitorBikeDTO> getSitesMonitorBikeDTO(PageWrap<SitesMonitorDTO> pageWrap);
}
server/services/src/main/java/com/doumee/service/business/impl/SitesServiceImpl.java
@@ -14,6 +14,8 @@
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;
@@ -197,46 +199,36 @@
        return sitesMapper.selectCount(wrapper);
    }
    @Async
    @Override
    public PageData<SitesMonitorDTO> findSitesMonitorDTOPage(PageWrap<SitesMonitorDTO> pageWrap) {
        IPage page = new Page<>(pageWrap.getPage(), pageWrap.getCapacity());
        Page<SitesMonitorDTO> sitesMonitorDTO = sitesMapper.getSitesMonitorDTO(page, pageWrap.getModel().getCode(), pageWrap.getModel().getName());
        if (!CollectionUtils.isEmpty(sitesMonitorDTO.getRecords())){
            sitesMonitorDTO.getRecords().forEach(s->{
                s.setRate(new BigDecimal(s.getBikeCount()).divide(new BigDecimal(s.getLocalCount()).setScale(2)));
            });
        }
        return PageData.from(sitesMonitorDTO);
    }
    @Override
    public void siteReservesNotice(String siteId) throws Exception{
        //站点信息查询
        Sites sites = sitesMapper.selectById(siteId);
        if(Objects.isNull(sites)){
            return;
        }
        //查询站点下锁头数量
        List<Locks> locksList = locksMapper.selectList(new QueryWrapper<Locks>().eq("status", Constants.ZERO).eq("site_id",siteId));
        if(Objects.isNull(locksList)||locksList.size()==Constants.ZERO){
            return;
        }
        //获取空锁头数量
        Integer empLocks =  locksList.stream().filter(l -> StringUtils.isEmpty(l.getBikeCode())).collect(Collectors.toList()).size();
        //锁头正常存车数量
        Integer unEmpLocks = locksList.size() - empLocks;
        BigDecimal warnMax = new BigDecimal(String.valueOf(systemDictDataBiz.queryByCode(Constants.MINI_PROGRAMME,Constants.WARN_MAX)));
        BigDecimal warnMin = new BigDecimal(String.valueOf(systemDictDataBiz.queryByCode(Constants.MINI_PROGRAMME,Constants.WARN_MIN)));
        //超出预警最大值
        if(empLocks>Constants.ZERO){
            if(BigDecimal.valueOf(empLocks).divide(BigDecimal.valueOf(locksList.size())).multiply(BigDecimal.valueOf(100)).compareTo(warnMax)>Constants.ZERO){
                DingDingNotice.reservesNotice(sites.getName(),
                        systemDictDataBiz.queryByCode(Constants.DINGDING,Constants.DINGDING_URL).getCode(),
                        systemDictDataBiz.queryByCode(Constants.DINGDING,Constants.DINGDING_SECRET).getCode(),
                        Constants.ZERO,warnMax);
                return;
            };
        }
        //低于预警最小值
        if(unEmpLocks>Constants.ZERO){
            if(BigDecimal.valueOf(unEmpLocks).divide(BigDecimal.valueOf(locksList.size())).multiply(BigDecimal.valueOf(100)).compareTo(warnMin)<Constants.ZERO){
                DingDingNotice.reservesNotice(sites.getName(),
                        systemDictDataBiz.queryByCode(Constants.DINGDING,Constants.DINGDING_URL).getCode(),
                        systemDictDataBiz.queryByCode(Constants.DINGDING,Constants.DINGDING_SECRET).getCode(),
                        Constants.ONE,warnMin);
                return;
            }
        }
    }
    @Override
    public PageData<SitesMonitorBikeDTO> getSitesMonitorBikeDTO(PageWrap<SitesMonitorDTO> pageWrap) {
        IPage page = new Page<>(pageWrap.getPage(), pageWrap.getCapacity());
        Page<SitesMonitorBikeDTO> sitesMonitorDTO = sitesMapper.getSitesMonitorBikeDTO(page,
                                                                        pageWrap.getModel().getCode(),
                                                                        pageWrap.getModel().getName(),
                                                                        pageWrap.getModel().getLockCode(),
                                                                        pageWrap.getModel().getHasBike());
        return PageData.from(sitesMonitorDTO);
    }
}
server/services/src/main/resources/mappers/SitesMapper.xml
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,62 @@
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
<mapper namespace="com.doumee.dao.business.SitesMapper">
    <select id="getSitesMonitorDTO" resultType="com.doumee.dao.business.web.request.SitesMonitorDTO">
        SELECT
            sites.id,
            sites.name as name,
            sites.code as code,
            count(l.id) as lid,
            count(l.bike_code ) as lbikeCount
        from
            sites sites
            LEFT JOIN locks l on sites.id = l.site_id
        <where>
            sites.isdeleted = 0
            <if test="code != null and code != ''">
                and sites.code like LIKE '%'||#{code}||'%'
            </if>
            <if test="name != null and name != ''">
                and sites.name like LIKE '%'||#{name}||'%'
            </if>
        </where>
        GROUP BY sites.id
    </select>
    <select id="getSitesMonitorBikeDTO" resultType="com.doumee.dao.business.web.request.SitesMonitorBikeDTO">
        SELECT
            sites.id,
            sites.name as name,
            sites.code as code,
            l.name as locksName,
            l.bike_code as bike_code,
            bp.name as bikeType
        from
            sites sites
        LEFT JOIN locks l on sites.id = l.site_id
        LEFT JOIN base_param bp on bp.id = l.param_id
        <where>
            sites.isdeleted = 0
            <if test="code != null and code != ''">
                and sites.code like LIKE '%'||#{code}||'%'
            </if>
            <if test="name != null and name != ''">
                and sites.name like LIKE '%'||#{name}||'%'
            </if>
            <if test="lockCode != null and lockCode != ''">
                and l.code like LIKE '%'||#{lockCode}||'%'
            </if>
            <if test="hasBike != null and hasBike != false">
                l.bike_code isnull
            </if>
            <if test="hasBike != null and hasBike != true">
                l.bike_code notnull
            </if>
        </where>
    </select>
</mapper>