总结--2021-12-13

自定义Operation接口

package com.spiov.cement.tanker.annotation;

import com.spiov.cement.tanker.system.vo.OperatorTypeEnum;

import java.lang.annotation.*;

import static java.lang.annotation.ElementType.*;

/**
 * 自定义注解类  定义controller方法的中文含义
 *
 * @author lvzy
 * @date 2021/8/11
 */
@Target({METHOD, TYPE})
@Retention(RetentionPolicy.RUNTIME)
@Inherited
@Documented
public @interface Operation {

    /** 功能名称 */
    String moduleName() default "";

    /** 操作内容 */
    String content() default "";

    /** 操作类型 0:登录,1:退出,2:新增,3:删除,4:修改,5:查询,6:导入,7:导出 */
    OperatorTypeEnum operateType();
}

在Controller使用

在这里插入图片描述

Enum类

package com.spiov.cement.tanker.system.vo;

/**
 * 操作类型
 *
 * @author lvzy
 * @date 2021/8/11
 */
public enum  OperatorTypeEnum {

    /** 登录 */
    LOGIN("0"),
    /** 退出 */
    LOGOUT("1"),
    /** 新增 */
    INSERT("2"),
    /** 删除 */
    DELETE("3"),
    /** 修改 */
    UPDATE("4"),
    /** 查询 */
    SELECT("5"),
    /** 导入 */
    IMPORT("6"),
    /** 导出 */
    EXPORT("7");

    private String operatorType;

    OperatorTypeEnum(String operatorType) {
        this.operatorType = operatorType;
    }

    public String getOperatorType() {
        return operatorType;
    }

    public void setOperatorType(String operatorType) {
        this.operatorType = operatorType;
    }
}

LocalDate.now() 获取当前时间 DateTimeFormatter 类 格式化时间

LocalDate、LocalTime 的api是有2个方法,分别是:parse()、format()方法,时间类型的转换可以调用这2个来进行日期时间类型的转换

LocalDate.parse()方法–从作为参数传递的字符串 (例如“ 2018-10-23T17:19:33”)中获取 LocalDate Time的实例

		LocalDate start = LocalDate.parse(startTime, DateTimeFormatter.ofPattern("yyyy-MM-dd"));
        LocalDate end = LocalDate.parse(endTime, DateTimeFormatter.ofPattern("yyyy-MM-dd"));

LocalDate.isAfter()方法用于检查作为参数传递的日期是否在此LocalDateTime实例之后

在这里插入图片描述

字符串转换成日期时间类型

在这里插入图片描述

日期转换为字符串

在这里插入图片描述

TemporalAdjusters类中预定义实现

TemporalAdjusters类有很多预定义的static方法返回TemporalAdjuster对象,使用不同方式调节Temporal对象而与Temporal实现无关。

下面列举部分方法及其定义描述:
在这里插入图片描述
这些方法的名称都是自解释的,更多TemporalAdjusters: 官方文档.

我们从简单实例开始————我们可以使用特定的日期,也可以使用LocalDate.now()获得当前日期。但对本例来说,我们使用固定日期,因为不希望后面期望结果变化造成测试不通过。下面看看如果通过TemporalAdjusters类获得2017-07-08之后的星期日:
在这里插入图片描述
再看如何获得当月的最后一天:
在这里插入图片描述

实现获取日期代码

根据统计图中的 x与y 轴 数据分别为 日期与在线数 做例子:

serviceImpl

 public Map<String, Object> getVehicleOnlineStatistics(Integer flag) {
        Map<String, Object> map = new HashMap<>();
        List<String> dateList = new ArrayList<>();
        List<Integer> onlineNumList = new ArrayList<>();
        List<Map<String, Object>> list = new ArrayList<>();
        String startTime;
        String endTime;
        int timeFlag = 0;
        switch (flag) {
            //本月
            case 0:
                startTime = LocalDate.now().with(TemporalAdjusters.firstDayOfMonth()).toString();
                endTime = LocalDate.now().toString();
                dateList = TimeUtils.getThisMonthDate();
                list = homePageMapper.getVehicleOnlineStatistics(timeFlag, startTime, endTime);
                break;
            //上月
            case 1:
                startTime = LocalDate.now().minusMonths(1).with(TemporalAdjusters.firstDayOfMonth()).toString();
                endTime = LocalDate.now().minusMonths(1).with(TemporalAdjusters.lastDayOfMonth()).toString();
                dateList = TimeUtils.getLastMonthDate();
                list = homePageMapper.getVehicleOnlineStatistics(timeFlag, startTime, endTime);
                break;
            //本年
            case 2:
                timeFlag = 1;
                startTime = LocalDate.now().with(TemporalAdjusters.firstDayOfYear()).format(DateTimeFormatter.ofPattern("yyyy-MM"));
                endTime = LocalDate.now().format(DateTimeFormatter.ofPattern("yyyy-MM"));
                dateList = TimeUtils.getThisYearMonth();
                list = homePageMapper.getVehicleOnlineStatistics(timeFlag, startTime, endTime);
                break;
            default:
                break;
        }
        for (String date : dateList) {
            Long onlineNum = 0L;
            for (Map<String, Object> statistics : list) {
                if (date.equals(statistics.get("recordDate"))) {
                    onlineNum = (Long) statistics.get("onlineNum");
                }
            }
            onlineNumList.add((int) (onlineNum != 0 ? onlineNum : 0));
            System.out.println(onlineNum);
        }
        map.put("dateList", dateList);
        map.put("onlineNumList",onlineNumList);
        return map;
    }

修改impl 考虑扩展性

public Map<String, Object> getVehicleOnlineStatistics(Integer flag,String startTime,String endTime) {
        Map<String, Object> map = new HashMap<>(2);
        List<Integer> onlineNumList = new ArrayList<>();
        List<String> dateList = TimeUtils.getTimeList(startTime, endTime, flag);
        List<Map<String, Object>> list = homePageMapper.getVehicleOnlineStatistics(flag, startTime, endTime);
        for (String date : dateList) {
            Long onlineNum = 0L;
            for (Map<String, Object> statistics : list) {
                if (date.equals(statistics.get("recordDate"))) {
                    onlineNum = (Long) statistics.get("onlineNum");
                }
            }
            onlineNumList.add((int) (onlineNum != 0 ? onlineNum : 0));
            System.out.println(onlineNum);
        }
        map.put("dateList", dateList);
        map.put("onlineNumList",onlineNumList);
        return map;
    }

sql语句

<select id="getVehicleOnlineStatistics" resultType="java.util.Map">
        SELECT DISTINCT
            <if test="flag == 0">
                DATE_FORMAT(ces.record_date,'%Y-%m-%d') recordDate,
            </if>
            <if test="flag == 1">
                DATE_FORMAT(ces.record_date,'%Y-%m') recordDate,
            </if>
            COUNT(ces.is_online) onlineNum
        FROM
            ct_energy_statics ces
        <where>
            ces.is_online = 1
            <if test="flag == 0">
                and DATE_FORMAT(ces.record_date,'%Y-%m-%d') &gt;= #{startTime} AND DATE_FORMAT(record_date,'%Y-%m-%d')  &lt;= #{endTime}
            </if>
            <if test="flag == 1">
                and DATE_FORMAT(ces.record_date,'%Y-%m') &gt;= #{startTime} AND DATE_FORMAT(record_date,'%Y-%m')  &lt;= #{endTime}
            </if>
        </where>
        <if test="flag == 0">
            GROUP BY DATE_FORMAT(ces.record_date,'%Y-%m-%d')
        </if>
        <if test="flag == 1">
            GROUP BY DATE_FORMAT(ces.record_date,'%Y-%m')
        </if>
        ORDER BY ces.record_date
    </select>

Controller

/**
     * 首页-运营指标趋势
     * @param flag 时间标志 (0本月 1上月 2本年)
     * @return cn.iovnet.commons.utils.util.CommonResponse
     * @author guozh
     * @date 2021/12/13
     */
    @PostMapping("/v1/getVehicleOnlineStatistics")
    public CommonResponse getVehicleOnlineStatistics(Integer flag){
        CommonResponse instance = CommonResponse.getInstance();
        Map<String,Object> onlineStatistics = homePageService.getVehicleOnlineStatistics(flag);
        instance.setResultData(onlineStatistics);
        return instance;
    }

MP和SpringBoot 做编辑信息时,先查后改

调用updateAllColumnById()方法更合适

serviceImpl 类

 public void updateAddOilRecord(CtRealAddOilRecord vo) {
        CtRealAddOilRecord oilRecord = ctRealAddOilRecordMapper.selectById(vo.getId());
        CtVehicleInfo vehicleInfo = ctVehicleInfoMapper.selectById(vo.getVehicleId());
        if (vehicleInfo != null) {
            oilRecord.setVehicleId(vo.getVehicleId());
            oilRecord.setAddOilNum(vo.getAddOilNum());
            oilRecord.setAddOilPrice(vo.getAddOilPrice());
            oilRecord.setOilPrice(vo.getOilPrice());
            oilRecord.setOilCardBalance(vo.getOilCardBalance());
            oilRecord.setMeterMileage(vo.getMeterMileage());
            oilRecord.setTransactionTime(vo.getTransactionTime());
            oilRecord.setOilCardCode(vo.getOilCardCode());
            oilRecord.setStartTime(vo.getStartTime());
            oilRecord.setEndTime(vo.getEndTime());
            oilRecord.setTransactionSerialNumber(vo.getTransactionSerialNumber());
            oilRecord.setAddOilBillUrl(vo.getAddOilBillUrl());
            oilRecord.setCompanyId(vehicleInfo.getCompanyId());
            oilRecord.setDeptId(vehicleInfo.getDeptId());
            oilRecord.setBrandId(vehicleInfo.getBrandId());
            oilRecord.setPlateNo(vehicleInfo.getPlateNo());
            oilRecord.setModel(vehicleInfo.getModel());
            oilRecord.setTankType(vehicleInfo.getTankType());
            oilRecord.setTankLength(vehicleInfo.getTankLength());
            oilRecord.setTankWidth(vehicleInfo.getTankWidth());
            oilRecord.setTankHeight(vehicleInfo.getTankHeight());
            oilRecord.setUpdateDate(new Date());
            BusinessSqlParamVo paramVo = new BusinessSqlParamVo();
            paramVo.setTableName(TableNameEnum.CT_OIL_BUSINESS_DATA);
            paramVo.setDate(new SimpleDateFormat(DateUtil.YYYYMMDD).format(vo.getStartTime()));
            paramVo.setWhereSql("vehicle_id = " + vo.getVehicleId() + " and send_time >= '" + new SimpleDateFormat(DateUtil.YYYYMMDDHHMMSS).format(vo.getStartTime())
                    + "' and send_time <= '" + new SimpleDateFormat(DateUtil.YYYYMMDDHHMMSS).format(vo.getEndTime()) + "' and protocol_id = '18DF2717'");
            List<CtOilBusinessData> list = businessSqlUtil.queryCtBusinessData(paramVo, CtOilBusinessData.class);
            Double maxLiquidHigh = null;
            Double minLiquidHigh = null;
            if (CollectionUtils.isNotEmpty(list)) {
                List<Double> liquidHighList = list.parallelStream().map(e -> ct18DF2717ParserService.parse(e.getProtocolValue()).getLiquidHigh()).distinct().sorted(Double::compareTo).collect(Collectors.toList());
                if (CollectionUtils.isNotEmpty(liquidHighList)) {
                    minLiquidHigh = liquidHighList.get(0);
                    maxLiquidHigh = liquidHighList.get(liquidHighList.size() - 1);
                }
            }
            if (maxLiquidHigh != null && minLiquidHigh != null && !maxLiquidHigh.equals(minLiquidHigh)) {
                double tankArea = DataUtils.getDoubleNum(vo.getAddOilNum() / (maxLiquidHigh - minLiquidHigh), "0.00");
                oilRecord.setTankArea(tankArea);
            }
            ctRealAddOilRecordMapper.updateAllColumnById(oilRecord);
        }
    }
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 3
    评论
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

单眼皮女孩i

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值