提交 4839d4c7 authored 作者: aiqingguo's avatar aiqingguo

司机积分排名、统计

上级 8dbbaad5
package com.clx.performance.feign;
import com.clx.performance.param.pc.IntegralTruckAddParam;
import com.msl.common.result.Result;
import io.swagger.annotations.ApiOperation;
import org.springframework.cloud.openfeign.FeignClient;
import org.springframework.validation.annotation.Validated;
import org.springframework.web.bind.annotation.PostMapping;
import org.springframework.web.bind.annotation.RequestBody;
@FeignClient(name = "clx-performance")
public interface IntegralTruckFeign {
@ApiOperation(value = "新增车辆")
@PostMapping("clx-performance/feign/integral/saveTruck")
Result<Void> saveTruck(@RequestBody @Validated IntegralTruckAddParam param);
}
package com.clx.performance.param.mq;
import lombok.Getter;
import lombok.NoArgsConstructor;
import lombok.Setter;
import lombok.ToString;
/**
* @Author: aiqingguo
* @Description: 下周车辆初始化
* @Date: 2023-7-26 14:39:49
* @Version: 1.0
*/
@Setter
@Getter
@ToString
@NoArgsConstructor
public class IntegralNextWeekTruckInitMqParam {
private String statisticsDate; //统计时间
}
package com.clx.performance.param.mq;
import lombok.Getter;
import lombok.NoArgsConstructor;
import lombok.Setter;
import lombok.ToString;
/**
* @Author: aiqingguo
* @Description: 运单结束
* @Date: 2023-10-11 17:30:05
* @Version: 1.0
*/
@Setter
@Getter
@ToString
@NoArgsConstructor
public class IntegralOrderChildFinishMqParam {
private String childNo; //运单编号
}
package com.clx.performance.param.mq;
import lombok.Getter;
import lombok.NoArgsConstructor;
import lombok.Setter;
import lombok.ToString;
/**
* @Author: aiqingguo
* @Description: 积分实时统计
* @Date: 2023-10-11 17:30:45
* @Version: 1.0
*/
@Setter
@Getter
@ToString
@NoArgsConstructor
public class IntegralRealTimeStatisticsMqParam {
private String truckNo; //车辆
}
package com.clx.performance.param.mq;
import lombok.Getter;
import lombok.NoArgsConstructor;
import lombok.Setter;
import lombok.ToString;
/**
* @Author: aiqingguo
* @Description: 积分车辆新增
* @Date: 2023-10-11 17:30:57
* @Version: 1.0
*/
@Setter
@Getter
@ToString
@NoArgsConstructor
public class IntegralRecordAddMqParam {
private Integer statisticsId; //统计id
private Integer type; //积分类型
private String truckNo; //车辆
private Integer integral; //积分
private String remark; //备注
}
package com.clx.performance.param.mq;
import lombok.Getter;
import lombok.NoArgsConstructor;
import lombok.Setter;
import lombok.ToString;
/**
* @Author: aiqingguo
* @Description: 车辆保护取消
* @Date: 2023-10-11 17:27:45
* @Version: 1.0
*/
@Setter
@Getter
@ToString
@NoArgsConstructor
public class IntegralTruckProtectionCancelMqParam {
private String statisticsDate; //统计时间
private String truckNo; //车辆
}
package com.clx.performance.param.mq;
import lombok.Getter;
import lombok.NoArgsConstructor;
import lombok.Setter;
import lombok.ToString;
/**
* @Author: aiqingguo
* @Description: 积分车辆新增
* @Date: 2023-10-11 17:27:32
* @Version: 1.0
*/
@Setter
@Getter
@ToString
@NoArgsConstructor
public class IntegralTuckAddMqParam {
private Integer statisticsId; //统计id
private String truckNo; //车牌号
}
package com.clx.performance.param.mq;
import lombok.Getter;
import lombok.NoArgsConstructor;
import lombok.Setter;
import lombok.ToString;
/**
* @Author: aiqingguo
* @Description: 积分周统计
* @Date: 2023-10-11 17:32:41
* @Version: 1.0
*/
@Setter
@Getter
@ToString
@NoArgsConstructor
public class IntegralWeekStatisticsMqParam {
private String statisticsDate; //统计时间
}
package com.clx.performance.param.mq;
import lombok.Getter;
import lombok.NoArgsConstructor;
import lombok.Setter;
import lombok.ToString;
/**
* @Author: aiqingguo
* @Description: 车辆周统计
* @Date: 2023-10-11 17:27:20
* @Version: 1.0
*/
@Setter
@Getter
@ToString
@NoArgsConstructor
public class IntegralWeekTruckStatisticsMqParam {
private String statisticsDate; //统计时间
private String truckNo; //车辆
}
package com.clx.performance.param.pc;
import io.swagger.annotations.ApiModelProperty;
import lombok.*;
import javax.validation.constraints.NotBlank;
import javax.validation.constraints.NotNull;
/**
* @Author: aiqingguo
* @Description: 新增积分
* @Date: 2023-10-11 17:30:57
* @Version: 1.0
*/
@Setter
@Getter
@ToString
@NoArgsConstructor
public class IntegralRecordAddParam {
@ApiModelProperty(value = "车牌", example = "京A12345")
@NotBlank(message = "车牌号不能为空")
private String truckNo;
@ApiModelProperty(value = "积分", example = "1")
@NotNull(message = "积分不能为空")
private Integer integral;
@ApiModelProperty(value = "原因", example = "平台补偿")
@NotBlank(message = "原因不能为空")
private String remark;
}
package com.clx.performance.vo.pc;
import io.swagger.annotations.ApiModel;
import io.swagger.annotations.ApiModelProperty;
import lombok.Getter;
import lombok.NoArgsConstructor;
import lombok.Setter;
import lombok.ToString;
/**
* @Author: aiqinguo
* @Description: 积分记录
* @Date: 2023-10-10 10:50:10
* @Version: 1.0
*/
@ApiModel(description = "积分记录")
@Getter
@Setter
@ToString
@NoArgsConstructor
public class IntegralRecordVO {
@ApiModelProperty(value = "id", example = "")
private Integer id;
@ApiModelProperty(value = "车牌号", example = "")
private String truckNo;
@ApiModelProperty(value = "获得积分", example = "")
private Integer integral;
@ApiModelProperty(value = "类型", example = "")
private Integer type;
@ApiModelProperty(value = "原因", example = "")
private String remark;
@ApiModelProperty(value = "创建时间", example = "")
private String createTime;
}
\ No newline at end of file
package com.clx.performance.controller.feign;
import com.clx.performance.param.pc.IntegralTruckAddParam;
import com.clx.performance.service.IntegralTruckService;
import com.msl.common.result.Result;
import io.swagger.annotations.Api;
import io.swagger.annotations.ApiOperation;
import lombok.AllArgsConstructor;
import org.springframework.validation.annotation.Validated;
import org.springframework.web.bind.annotation.PostMapping;
import org.springframework.web.bind.annotation.RequestBody;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;
@RestController
@RequestMapping("/feign/integral")
@Validated
@Api(tags = "积分车辆")
@AllArgsConstructor
public class IntegralTruckFeignController {
private final IntegralTruckService integralTruckService;
@ApiOperation(value = "新增车辆")
@PostMapping("/saveTruck")
Result<Void> saveTruck(@RequestBody @Validated IntegralTruckAddParam param){
integralTruckService.saveTruck(param);
return Result.ok();
}
}
......@@ -12,6 +12,7 @@ import io.swagger.annotations.ApiOperation;
import lombok.AllArgsConstructor;
import lombok.extern.slf4j.Slf4j;
import org.springframework.validation.annotation.Validated;
import org.springframework.web.bind.annotation.PostMapping;
import org.springframework.web.bind.annotation.RequestBody;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;
......
package com.clx.performance.controller.pc;
import com.clx.performance.param.pc.IntegralRecordAddParam;
import com.clx.performance.service.IntegralRecordService;
import com.msl.common.result.Result;
import io.swagger.annotations.Api;
import io.swagger.annotations.ApiOperation;
import lombok.AllArgsConstructor;
import lombok.extern.slf4j.Slf4j;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.validation.annotation.Validated;
import org.springframework.web.bind.annotation.PostMapping;
import org.springframework.web.bind.annotation.RequestBody;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;
@Slf4j
@RestController
@RequestMapping(value="/pc/carrier/integral")
@Validated
@Api(tags = "承运端-积分记录")
@AllArgsConstructor
public class IntegralRecordController {
@Autowired
private IntegralRecordService integralRecordService;
@ApiOperation(value = "新增积分记录", notes = "<br>By:艾庆国")
@PostMapping(value = "addIntegral")
public Result<Void> addRecord(@RequestBody @Validated IntegralRecordAddParam param) {
integralRecordService.addRecord(param);
return Result.ok();
}
}
......@@ -2,8 +2,10 @@ package com.clx.performance.controller.pc;
import com.baomidou.mybatisplus.core.metadata.IPage;
import com.clx.performance.param.pc.PageIntegralStatisticsParam;
import com.clx.performance.param.pc.pageIntegralStatisticsDetailParam;
import com.clx.performance.service.IntegralStatisticsService;
import com.clx.performance.utils.LocalDateTimeUtils;
import com.clx.performance.vo.pc.IntegralRecordVO;
import com.clx.performance.vo.pc.IntegralStatisticsVO;
import com.msl.common.base.PageData;
import com.msl.common.result.Result;
......@@ -46,5 +48,13 @@ public class IntegralStatisticsController {
}
@ApiOperation(value = "获取积分统计明细列表", notes = "<br>By:艾庆国")
@PostMapping(value = "pageStatisticsDetailList")
public Result<PageData<IntegralRecordVO>> pageStatisticsDetailList(@RequestBody @Validated pageIntegralStatisticsDetailParam param) {
IPage<IntegralRecordVO> page = integralStatisticsService.pageStatisticsDetailList(param);
return Result.page(page.getRecords(), page.getTotal(), page.getPages());
}
}
package com.clx.performance.dao;
import com.baomidou.mybatisplus.core.metadata.IPage;
import com.clx.performance.mapper.IntegraRecordMapper;
import com.clx.performance.model.IntegralRecord;
import com.clx.performance.param.pc.pageIntegralStatisticsDetailParam;
import com.clx.performance.vo.pc.IntegralRecordVO;
import com.msl.common.dao.BaseDao;
import org.apache.ibatis.annotations.Param;
/**
* @Author: aiqinguo
* @Description: 积分记录
* @Date: 2023-10-9 11:55:36
* @Version: 1.0
*/
public interface IntegralRecordDao extends BaseDao<IntegraRecordMapper, IntegralRecord, Integer> {
IPage<IntegralRecordVO> pageByParam(pageIntegralStatisticsDetailParam param);
Integer sumIntegral(@Param("statisticsId") Integer statisticsId);
}
package com.clx.performance.dao.impl;
import com.baomidou.mybatisplus.core.metadata.IPage;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.clx.performance.dao.IntegralRecordDao;
import com.clx.performance.mapper.IntegraRecordMapper;
import com.clx.performance.model.IntegralRecord;
import com.clx.performance.param.pc.pageIntegralStatisticsDetailParam;
import com.clx.performance.vo.pc.IntegralRecordVO;
import com.msl.common.base.Optional;
import com.msl.common.dao.impl.BaseDaoImpl;
import org.springframework.stereotype.Repository;
/**
* @Author: aiqinguo
* @Description: 积分记录
* @Date: 2023-10-9 12:00:54
* @Version: 1.0
*/
@Repository
public class IntegralRecordDaoImpl extends BaseDaoImpl<IntegraRecordMapper, IntegralRecord, Integer> implements IntegralRecordDao {
@Override
public IPage<IntegralRecordVO> pageByParam(pageIntegralStatisticsDetailParam param) {
return baseMapper.pageByParam(Page.of(param.getPage(), param.getPageSize()), param);
}
@Override
public Integer sumIntegral(Integer statisticsId) {
return Optional.ofNullable(getOne(qrWrapper()
.select("sum(integral) as integral")
.eq("statistics_id", statisticsId))).map(item->item.getIntegral()).orNull();
}
}
package com.clx.performance.job;
import com.msl.common.job.JobLog;
import com.xxl.job.core.handler.annotation.XxlJob;
import lombok.extern.slf4j.Slf4j;
import org.springframework.stereotype.Component;
@Slf4j
@Component
public class IntegralJob {
/**
* 下周车辆初始化 (周三)
* @Scheduled(cron = "0 0 6 ? * 3")
*/
@XxlJob("favoriteStatusSyncTask")
public void favoriteStatusSyncTask() {
try {
} catch (Exception e) {
JobLog.error("下周车辆初始化定时任务处理失败", e);
}
}
/**
* 下周车辆初始化 (周日)
* @Scheduled(cron = "0 0 22 ? * 7")
*/
@XxlJob("favoriteStatusSyncTask1")
public void favoriteStatusSyncTask1() {
try {
} catch (Exception e) {
JobLog.error("下周车辆初始化定时任务处理失败", e);
}
}
/**
* 车辆周统计(结算上周积分) (周1)
* @Scheduled(cron = "0 0 1 ? * 1")
*/
@XxlJob("weekTruckStatistics")
public void weekTruckStatistics() {
try {
} catch (Exception e) {
JobLog.error("车辆周统计(结算上周积分)定时任务处理失败", e);
}
}
/**
* 车辆保护期取消 (周一不处理)
* @Scheduled(cron = "0 0 6,18 ? * 2,3,4,5,6,7")
*/
@XxlJob("truckProtectionCancel")
public void truckProtectionCancel() {
try {
} catch (Exception e) {
JobLog.error("车辆保护期取消定时任务处理失败", e);
}
}
}
package com.clx.performance.mapper;
import com.baomidou.mybatisplus.core.mapper.BaseMapper;
import com.baomidou.mybatisplus.core.metadata.IPage;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.clx.performance.model.IntegralRecord;
import com.clx.performance.param.pc.pageIntegralStatisticsDetailParam;
import com.clx.performance.sqlProvider.IntegralRecordSqlProvider;
import com.clx.performance.sqlProvider.IntegralTruckSqlProvider;
import com.clx.performance.vo.pc.IntegralRecordVO;
import org.apache.ibatis.annotations.Mapper;
import org.apache.ibatis.annotations.Param;
import org.apache.ibatis.annotations.SelectProvider;
/**
* @Author: aiqinguo
* @Description: 积分记录
* @Date: 2023-10-9 11:52:22
* @Version: 1.0
*/
@Mapper
public interface IntegraRecordMapper extends BaseMapper<IntegralRecord> {
/**
* @see IntegralRecordSqlProvider#pageByParam(com.baomidou.mybatisplus.extension.plugins.pagination.Page, com.clx.performance.param.pc.pageIntegralStatisticsDetailParam)
*/
@SelectProvider(type = IntegralTruckSqlProvider.class, method = "pageByParam")
IPage<IntegralRecordVO> pageByParam(@Param("page") Page<IntegralRecordVO> page, @Param("param") pageIntegralStatisticsDetailParam param);
}
\ No newline at end of file
package com.clx.performance.model;
import com.baomidou.mybatisplus.annotation.IdType;
import com.baomidou.mybatisplus.annotation.TableId;
import com.baomidou.mybatisplus.annotation.TableName;
import com.msl.common.config.KeyColumn;
import com.msl.common.model.HasKey;
import lombok.*;
/**
* @Author: aiqinguo
* @Description: 积分记录
* @Date: 2023-10-11 17:30:51
* @Version: 1.0
*/
@Getter
@Setter
@NoArgsConstructor
@TableName(autoResultMap = true)
public class IntegralRecord implements HasKey<Integer> {
@TableId(value = "id", type = IdType.AUTO)
private Integer id; //id
private Integer statisticsId; //统计id
private String statisticsDate; //统计时间
private String truckNo; //车牌号
private Integer integral; //获得积分
private Integer type; //类型
private String remark; //原因
private String createTime; //创建时间
private String modifiedTime; //修改时间
@Getter
@AllArgsConstructor
public enum type{
SYSTEM(1, "系统"),
PROTECTION(2, "保护分"),
PROTECTION_CANCEL(3, "保护分取消"),
SETTLEMENT(4, "结算分"),
BASE(5, "基础分"),
ORDER_CHILD_COMPLETE(11, "运单完成"),
ORDER_CHILD_COMPLETE_NUM(12, "运单完成数量"),
ORDER_CHILD_COMPLETE_WATER(13, "流水单"),
ORDER_CHILD_COMPLETE_SUPPORT(14, "支援单"),
ORDER_CHILD_COMPLETE_TIMEOUT(15, "运单完成超时"),
ORDER_CHILD_CANCEL(21, "运单取消"),
ORDER_CHILD_CANCEL_TIMEOUT(22, "运单取消超时"),
;
private Integer value;
private String msg;
}
@KeyColumn("id")
@Override
public Integer gainKey() {
return id;
}
}
\ No newline at end of file
package com.clx.performance.service;
public interface IntegralMqService {
void truckAdd(Integer statisticsId, String truckNo);
void integralRecordAdd(Integer statisticsId, String truckNo, Integer type, Integer integral, String remark);
}
package com.clx.performance.service;
import com.clx.performance.model.IntegralRecord;
import com.clx.performance.param.pc.IntegralRecordAddParam;
public interface IntegralRecordService {
void addRecord(IntegralRecordAddParam param);
IntegralRecord save(Integer statisticsId, String statisticsDate, String truckNo, Integer type, Integer integral, String remark);
}
......@@ -2,12 +2,14 @@ package com.clx.performance.service;
import com.baomidou.mybatisplus.core.metadata.IPage;
import com.clx.performance.param.pc.PageIntegralStatisticsParam;
import com.clx.performance.param.pc.pageIntegralStatisticsDetailParam;
import com.clx.performance.vo.pc.IntegralRecordVO;
import com.clx.performance.vo.pc.IntegralStatisticsVO;
public interface IntegralStatisticsService {
IPage<IntegralStatisticsVO> pageStatisticsList(PageIntegralStatisticsParam param);
IPage<IntegralRecordVO> pageStatisticsDetailList(pageIntegralStatisticsDetailParam param);
int protectionIntegralCalc(String statisticsDate);
int protectionIntegralCalc(String createTime, String statisticsDate);
......
package com.clx.performance.service.impl;
import com.clx.performance.service.IntegralMqService;
import lombok.AllArgsConstructor;
import lombok.extern.slf4j.Slf4j;
import org.springframework.stereotype.Service;
/**
* @Author: aiqingguo
* @Description: 司机积分 mq
* @Date: 2023-10-10 13:21:07
* @Version: 1.0
*/
@Slf4j
@Service
@AllArgsConstructor
public class IntegralMqServiceImpl implements IntegralMqService {
/**
* 新增车辆 (manage)
*/
@Override
public void truckAdd(Integer statisticsId, String truckNo){
}
/**
* 新增积分记录 (manage)
*/
@Override
public void integralRecordAdd(Integer statisticsId, String truckNo, Integer type, Integer integral, String remark){
}
}
package com.clx.performance.service.impl;
import com.baomidou.mybatisplus.core.metadata.IPage;
import com.clx.performance.dao.IntegralOrderDao;
import com.clx.performance.dao.OrderGoodsDao;
import com.clx.performance.enums.PerformanceResultEnum;
import com.clx.performance.model.IntegralOrder;
import com.clx.performance.model.OrderGoods;
import com.clx.performance.param.pc.IntegralOrderAddParam;
import com.clx.performance.param.pc.pageIntegralOrderParam;
import com.clx.performance.service.IntegralOrderService;
import com.clx.performance.vo.pc.IntegralOrderVO;
import com.msl.common.exception.ServiceSystemException;
import lombok.AllArgsConstructor;
import lombok.extern.slf4j.Slf4j;
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;
@Slf4j
@Service
@AllArgsConstructor
public class IntegralOrderServiceImpl implements IntegralOrderService {
private final IntegralOrderDao integralOrderDao;
private final OrderGoodsDao orderGoodsDao;
@Transactional(rollbackFor = Exception.class)
@Override
public void addOrder(IntegralOrderAddParam param) {
String orderGoodsNo = param.getOrderGoodsNo();
boolean existFlag = integralOrderDao.existByOrderGoodsNo(orderGoodsNo);
if (existFlag) {throw new ServiceSystemException(PerformanceResultEnum.INTEGRAL_ORDER_EXIST);}
OrderGoods orderGoods = orderGoodsDao.getByOrderGoodsNo(orderGoodsNo).orElseThrow(PerformanceResultEnum.ORDER_INVALID);
IntegralOrder order = new IntegralOrder();
order.setOrderGoodsNo(orderGoodsNo);
order.setSendAddressId(orderGoods.getSendAddressId());
order.setSendAddress(orderGoods.getSendAddressShorter());
order.setReceiveAddressId(orderGoods.getReceiveAddressId());
order.setReceiveAddress(orderGoods.getReceiveAddressShorter());
order.setOrderType(param.getOrderType());
order.setTruckEchelon(param.getTruckEchelon());
integralOrderDao.saveEntity(order);
}
@Override
public IPage<IntegralOrderVO> pageOrderList(pageIntegralOrderParam param) {
return integralOrderDao.pageByParam(param);
}
}
package com.clx.performance.service.impl;
import com.clx.performance.dao.IntegralRecordDao;
import com.clx.performance.dao.IntegralStatisticsDao;
import com.clx.performance.dao.IntegralTruckDao;
import com.clx.performance.enums.PerformanceResultEnum;
import com.clx.performance.model.IntegralRecord;
import com.clx.performance.model.IntegralStatistics;
import com.clx.performance.model.IntegralTruck;
import com.clx.performance.param.pc.IntegralRecordAddParam;
import com.clx.performance.service.IntegralMqService;
import com.clx.performance.service.IntegralRecordService;
import com.clx.performance.utils.LocalDateTimeUtils;
import lombok.AllArgsConstructor;
import lombok.extern.slf4j.Slf4j;
import org.springframework.stereotype.Service;
@Slf4j
@Service
@AllArgsConstructor
public class IntegralRecordServiceImpl implements IntegralRecordService {
private final IntegralRecordDao integralRecordDao;
private final IntegralTruckDao integralTruckDao;
private final IntegralStatisticsDao integralStatisticsDao;
private final IntegralMqService integralMqService;
@Override
public void addRecord(IntegralRecordAddParam param) {
String statisticsDate = LocalDateTimeUtils.getWeekStart();
IntegralTruck truck = integralTruckDao.getByTruckNo(param.getTruckNo()).orElseThrow(PerformanceResultEnum.INTEGRAL_TRUCK_NO_EXIST);
// 查找最新统计
IntegralStatistics statistics = integralStatisticsDao.selectByTruckNoAndStatisticsDate(param.getTruckNo(), statisticsDate).orElseThrow(PerformanceResultEnum.INTEGRAL_TRUCK_NO_EXIST);
// 更新积分
statistics.setIntegral(statistics.getIntegral()+param.getIntegral());
integralStatisticsDao.updateIntegral(statistics);
truck.setIntegral(statistics.getIntegral());
integralTruckDao.updateIntegral(truck);
// 新增积分记录
IntegralRecord record = save(statistics.getId(), statistics.getStatisticsDate(), statistics.getTruckNo(), IntegralRecord.type.SYSTEM.getValue(), param.getIntegral(), param.getRemark());
// 发送mq (新增积分记录)
integralMqService.integralRecordAdd(record.getStatisticsId(), record.getTruckNo(), record.getType(), record.getIntegral(), record.getRemark());
}
@Override
public IntegralRecord save(Integer statisticsId, String statisticsDate, String truckNo, Integer type, Integer integral, String remark){
IntegralRecord record = new IntegralRecord();
record.setStatisticsId(statisticsId);
record.setStatisticsDate(statisticsDate);
record.setTruckNo(truckNo);
record.setType(type);
record.setIntegral(integral);
record.setRemark(remark);
// 新增记录
integralRecordDao.saveEntity(record);
return record;
}
}
package com.clx.performance.service.impl;
import com.baomidou.mybatisplus.core.metadata.IPage;
import com.clx.performance.dao.IntegralRecordDao;
import com.clx.performance.dao.IntegralStatisticsDao;
import com.clx.performance.dao.IntegralTruckDao;
import com.clx.performance.model.IntegralTruck;
import com.clx.performance.param.pc.PageIntegralStatisticsParam;
import com.clx.performance.param.pc.pageIntegralStatisticsDetailParam;
import com.clx.performance.service.IntegralStatisticsService;
import com.clx.performance.utils.LocalDateTimeUtils;
import com.clx.performance.vo.pc.IntegralRecordVO;
import com.clx.performance.vo.pc.IntegralStatisticsVO;
import lombok.AllArgsConstructor;
import lombok.extern.slf4j.Slf4j;
import org.springframework.stereotype.Service;
import java.time.Duration;
import java.util.List;
import java.util.Map;
import java.util.stream.Collectors;
@Slf4j
@Service
@AllArgsConstructor
public class IntegralStatisticsServiceImpl implements IntegralStatisticsService {
private final IntegralStatisticsDao integralStatisticsDao;
private final IntegralRecordDao integralRecordDao;
private IntegralTruckDao integralTruckDao;
/**
* 新手积分计算
*/
@Override
public int protectionIntegralCalc(String statisticsDate){
int day = diffDay(statisticsDate, LocalDateTimeUtils.getStringDayStart());
if (day >= 7) {return 0;}
return (7-day)*30;
}
@Override
public IPage<IntegralStatisticsVO> pageStatisticsList(PageIntegralStatisticsParam param) {
IPage<IntegralStatisticsVO> page = integralStatisticsDao.pageByParam(param);
List<String> truckNoList = page.getRecords().stream().map(item -> item.getTruckNo()).collect(Collectors.toList());
if (!truckNoList.isEmpty()) {
List<IntegralTruck> integralTruckList = integralTruckDao.listByTruckNoList(truckNoList);
Map<String, Integer> echelonMap = integralTruckList.stream().collect(Collectors.toMap(item -> item.getTruckNo(), item -> item.getEchelon()));
for (IntegralStatisticsVO item : page.getRecords()) {
item.setEchelon(echelonMap.get(item.getTruckNo()));
}
}
return page;
}
@Override
public IPage<IntegralRecordVO> pageStatisticsDetailList(pageIntegralStatisticsDetailParam param) {
return integralRecordDao.pageByParam(param);
}
@Override
public int protectionIntegralCalc(String createTime, String statisticsDate){
int day = diffDay(LocalDateTimeUtils.getStringDayStart(createTime), statisticsDate);
if (day >= 7) {return 0;}
return (7-day)*30;
}
private int diffDay(String beginDate, String endDate){
long day = Duration.between(LocalDateTimeUtils.parseTime(beginDate), LocalDateTimeUtils.parseTime(endDate)).toDays();
return Long.valueOf(day).intValue();
}
}
......@@ -5,10 +5,13 @@ import com.clx.performance.dao.IntegralStatisticsDao;
import com.clx.performance.dao.IntegralTruckDao;
import com.clx.performance.enums.PerformanceResultEnum;
import com.clx.performance.extranal.user.DriverService;
import com.clx.performance.model.IntegralRecord;
import com.clx.performance.model.IntegralStatistics;
import com.clx.performance.model.IntegralTruck;
import com.clx.performance.param.pc.IntegralTruckAddParam;
import com.clx.performance.param.pc.PageIntegralTruckParam;
import com.clx.performance.service.IntegralMqService;
import com.clx.performance.service.IntegralRecordService;
import com.clx.performance.service.IntegralStatisticsService;
import com.clx.performance.service.IntegralTruckService;
import com.clx.performance.utils.LocalDateTimeUtils;
......@@ -28,9 +31,11 @@ public class IntegralTruckServiceImpl implements IntegralTruckService {
private final IntegralTruckDao integralTruckDao;
private final IntegralStatisticsDao integralStatisticsDao;
private final IntegralRecordService integralRecordService;
private final IntegralStatisticsService integralStatisticsService;
private final DriverService driverService;
private final IntegralMqService integralMqService;
@Transactional(rollbackFor = Exception.class)
@Override
......@@ -71,6 +76,13 @@ public class IntegralTruckServiceImpl implements IntegralTruckService {
truck.setIntegral(statistics.getIntegral());
integralTruckDao.saveEntity(truck);
// 新增积分记录
integralRecordService.save(statistics.getId(), statistics.getStatisticsDate(), statistics.getTruckNo(), IntegralRecord.type.PROTECTION.getValue(), protectionIntegral, "新用户");
integralRecordService.save(statistics.getId(), statistics.getStatisticsDate(), statistics.getTruckNo(), IntegralRecord.type.BASE.getValue(), baseIntegral, "基础分");
// 发送mq (车辆新增)
integralMqService.truckAdd(statistics.getId(), param.getTruckNo());
}
@Override
......
package com.clx.performance.sqlProvider;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.clx.performance.param.pc.pageIntegralStatisticsDetailParam;
import com.clx.performance.vo.pc.IntegralRecordVO;
import org.apache.ibatis.annotations.Param;
import org.apache.ibatis.jdbc.SQL;
public class IntegralRecordSqlProvider {
public String pageByParam(@Param("page") Page<IntegralRecordVO> page, @Param("param") pageIntegralStatisticsDetailParam param) {
return new SQL(){{
SELECT( " id, truck_no as truckNo, " +
" statistics_id as statisticsId, statistics_date as statisticsDate, " +
" integral, type, remark, " +
" date_format(create_time, '%Y-%m-%d %H:%i:%s') as createTime, " +
" date_format(modified_time, '%Y-%m-%d %H:%i:%s') as modifiedTime ");
FROM("integral_record");
WHERE("statistics_id = #{param.statisticsId}");
ORDER_BY("create_time desc");
}}.toString();
}
}
Markdown 格式
0%
您添加了 0 到此讨论。请谨慎行事。
请先完成此评论的编辑!
注册 或者 后发表评论