提交 098d2573 authored 作者: liuhaiquan's avatar liuhaiquan

Merge remote-tracking branch 'origin/v5.3_driver_integral_20231009' into…

Merge remote-tracking branch 'origin/v5.3_driver_integral_20231009' into v5.3_driver_integral_20231009
......@@ -68,6 +68,11 @@ public enum PerformanceResultEnum implements ResultEnum {
ORDER_GOODS_ID_GENERATE_LOCK(1384, "货单编号ID获取锁出问题"),
INTEGRAL_TRUCK_DRIVER_EXIST(1400, "车辆已添加"),
INTEGRAL_ORDER_EXIST(1401, "货单已添加"),
INTEGRAL_ORDER_NO_EXIST(1402, "货单不存在"),
INTEGRAL_TRUCK_NO_EXIST(1403, "车辆不存在"),
;
private final int code;
......
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.Getter;
import lombok.NoArgsConstructor;
import lombok.Setter;
import javax.validation.constraints.NotBlank;
import javax.validation.constraints.NotNull;
@Getter
@Setter
@NoArgsConstructor
public class IntegralOrderAddParam {
@ApiModelProperty(value = "货单编号", example = "100000000000")
@NotBlank(message = "车牌号不能为空")
private String orderGoodsNo;
@ApiModelProperty(value = "货单类型:1优质单 2普通单 3流水单 4支援单", example = "1")
@NotNull(message = "货单类型不能为空")
private Integer orderType;
@ApiModelProperty(value = "车辆梯队", example = "1")
@NotNull(message = "车辆梯队不能为空")
private Integer truckEchelon;
}
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.param.pc;
import io.swagger.annotations.ApiModelProperty;
import lombok.Getter;
import lombok.NoArgsConstructor;
import lombok.Setter;
import javax.validation.constraints.NotBlank;
@Getter
@Setter
@NoArgsConstructor
public class IntegralTruckAddParam {
@ApiModelProperty(value = "车牌号", example = "京A12345")
@NotBlank(message = "车牌号不能为空")
private String truckNo;
@ApiModelProperty(value = "司机姓名", example = "张三")
@NotBlank(message = "司机姓名不能为空")
private String driverName;
@ApiModelProperty(value = "司机手机号", example = "13000000000")
@NotBlank(message = "司机手机号不能为空")
private String driverMobile;
}
package com.clx.performance.param.pc;
import com.msl.common.base.PageParam;
import io.swagger.annotations.ApiModelProperty;
import lombok.Getter;
import lombok.NoArgsConstructor;
import lombok.Setter;
@Getter
@Setter
@NoArgsConstructor
public class PageIntegralStatisticsParam extends PageParam {
@ApiModelProperty(value = "开始时间")
private String beginTime;
@ApiModelProperty(value = "结束时间")
private String endTime;
}
package com.clx.performance.param.pc;
import com.msl.common.base.PageParam;
import io.swagger.annotations.ApiModelProperty;
import lombok.Getter;
import lombok.NoArgsConstructor;
import lombok.Setter;
@Getter
@Setter
@NoArgsConstructor
public class PageIntegralTruckParam extends PageParam {
@ApiModelProperty(value = "车牌号", example = "京A12345")
private String truckNo;
@ApiModelProperty(value = "司机手机号码", example = "13000000000")
private String driverMobile;
@ApiModelProperty(value = "梯队:1第一梯队,2第二梯队", example = "1")
private Integer echelon;
@ApiModelProperty(value = "开始时间")
private String beginTime;
@ApiModelProperty(value = "结束时间")
private String endTime;
}
package com.clx.performance.param.pc;
import com.msl.common.base.PageParam;
import io.swagger.annotations.ApiModelProperty;
import lombok.Getter;
import lombok.NoArgsConstructor;
import lombok.Setter;
@Getter
@Setter
@NoArgsConstructor
public class pageIntegralOrderParam extends PageParam {
@ApiModelProperty(value = "货单编号", example = "10000000000000")
private String orderGoodsNo;
@ApiModelProperty(value = "开始时间")
private String beginTime;
@ApiModelProperty(value = "结束时间")
private String endTime;
}
package com.clx.performance.param.pc;
import com.msl.common.base.PageParam;
import io.swagger.annotations.ApiModelProperty;
import lombok.Getter;
import lombok.NoArgsConstructor;
import lombok.Setter;
import javax.validation.constraints.NotNull;
@Getter
@Setter
@NoArgsConstructor
public class pageIntegralStatisticsDetailParam extends PageParam {
@ApiModelProperty(value = "统计id", example = "1")
@NotNull(message = "统计id不为空")
private Integer statisticsId;
}
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 09:47:04
* @Version: 1.0
*/
@ApiModel(description = "积分货单")
@Getter
@Setter
@ToString
@NoArgsConstructor
public class IntegralOrderVO {
@ApiModelProperty(value = "id", example = "1")
private Integer id;
@ApiModelProperty(value = "货单编号", example = "1000000000000")
private String orderNo;
@ApiModelProperty(value = "发货地址id", example = "1")
private Integer sendAddressId;
@ApiModelProperty(value = "发货地址", example = "北京")
private String sendAddress;
@ApiModelProperty(value = "收货地址id", example = "2")
private Integer receiveAddressId;
@ApiModelProperty(value = "收货地址", example = "上海")
private String receiveAddress;
@ApiModelProperty(value = "货单类型:1优质单 2普通单 3流水单 4支援单", example = "1")
private Integer orderType;
@ApiModelProperty(value = "车辆梯队", example = "1")
private Integer truckEchelon;
@ApiModelProperty(value = "创建时间", example = "")
private String createTime;
@ApiModelProperty(value = "修改时间", example = "")
private String modifiedTime;
}
\ No newline at end of file
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.vo.pc;
import com.fasterxml.jackson.annotation.JsonIgnore;
import com.msl.common.utils.LocalDateTimeUtils;
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 20:33:01
* @Version: 1.0
*/
@ApiModel(description = "积分排名统计")
@Getter
@Setter
@ToString
@NoArgsConstructor
public class IntegralStatisticsVO {
@ApiModelProperty(value = "统计id", example = "")
private Integer id;
@ApiModelProperty(value = "车牌号", example = "")
private String truckNo;
@ApiModelProperty(value = "统计时间(周一)", example = "")
private String statisticsDate;
@ApiModelProperty(value = "统计时间", example = "")
private String statisticsDateStr;
public String getStatisticsDateStr() {
return statisticsDate.substring(0,10)+"到"+ LocalDateTimeUtils.convertLocalDateTimeToDefaultString(LocalDateTimeUtils.covertStringToDefaultLocalDateTime(statisticsDate).plusDays(6)).substring(0, 10);
}
@ApiModelProperty(value = "积分", example = "")
private Integer integral;
public Integer getIntegral() {
return integral+integralBase;
}
@ApiModelProperty(value = "排名", example = "")
private Integer rank;
@ApiModelProperty(value = "梯队", example = "1")
private Integer echelon;
@ApiModelProperty(value = "创建时间", example = "")
private String createTime;
@JsonIgnore
@ApiModelProperty(value = "本周基础分", example = "", hidden = true)
private Integer integralBase;
}
\ No newline at end of file
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-9 13:36:29
* @Version: 1.0
*/
@ApiModel(description = "积分车辆")
@Getter
@Setter
@ToString
@NoArgsConstructor
public class IntegralTruckVO {
@ApiModelProperty(value = "id", example = "")
private Integer id;
@ApiModelProperty(value = "车牌号", example = "京A12345")
private String truckNo;
@ApiModelProperty(value = "司机姓名", example = "张三")
private String driverName;
@ApiModelProperty(value = "司机手机号", example = "13000000000")
private String driverMobile;
@ApiModelProperty(value = "梯队", example = "1")
private Integer echelon;
@ApiModelProperty(value = "积分", example = "1")
private Integer integral;
@ApiModelProperty(value = "排名", example = "1")
private Integer rank;
@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();
}
}
package com.clx.performance.controller.pc;
import com.baomidou.mybatisplus.core.metadata.IPage;
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.base.PageData;
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.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 IntegralOrderController {
private final IntegralOrderService integralOrderService;
@Deprecated
@ApiOperation(value = "新增货单", notes = "<br>By:艾庆国")
// @PostMapping(value = "addOrder")
public Result<?> addOrder(@RequestBody @Validated IntegralOrderAddParam param) {
integralOrderService.addOrder(param);
return Result.ok();
}
@Deprecated
@ApiOperation(value = "获取货单列表", notes = "<br>By:艾庆国")
// @PostMapping(value = "pageOrderList")
public Result<PageData<IntegralOrderVO>> pageOrderList(@RequestBody @Validated pageIntegralOrderParam param) {
IPage<IntegralOrderVO> page = integralOrderService.pageOrderList(param);
return Result.page(page.getRecords(), page.getTotal(), page.getPages());
}
}
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();
}
}
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;
import io.swagger.annotations.Api;
import io.swagger.annotations.ApiOperation;
import lombok.AllArgsConstructor;
import lombok.extern.slf4j.Slf4j;
import org.apache.commons.lang3.StringUtils;
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;
import java.time.LocalDateTime;
@Slf4j
@RestController
@RequestMapping(value="/pc/carrier/integral")
@Validated
@Api(tags = "承运端-积分统计")
@AllArgsConstructor
public class IntegralStatisticsController {
private final IntegralStatisticsService integralStatisticsService;
@ApiOperation(value = "获取积分统计列表", notes = "<br>By:艾庆国")
@PostMapping(value = "pageStatisticsList")
public Result<PageData<IntegralStatisticsVO>> pageStatisticsList(@RequestBody @Validated PageIntegralStatisticsParam param) {
if (StringUtils.isNotBlank(param.getBeginTime())){param.setBeginTime(LocalDateTimeUtils.getWeekStart(param.getBeginTime()));}
if (StringUtils.isNotBlank(param.getEndTime())){
if (LocalDateTimeUtils.parseTime(param.getEndTime()).isAfter(LocalDateTime.now())){param.setEndTime(LocalDateTimeUtils.getWeekStart());}
else {param.setEndTime(LocalDateTimeUtils.getWeekStart(param.getEndTime()));}
}
else {param.setEndTime(LocalDateTimeUtils.getWeekStart());}
IPage<IntegralStatisticsVO> page = integralStatisticsService.pageStatisticsList(param);
return Result.page(page.getRecords(), page.getTotal(), page.getPages());
}
@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.controller.pc;
import com.baomidou.mybatisplus.core.metadata.IPage;
import com.clx.performance.param.pc.IntegralTruckAddParam;
import com.clx.performance.param.pc.PageIntegralTruckParam;
import com.clx.performance.service.IntegralTruckService;
import com.clx.performance.vo.pc.IntegralTruckVO;
import com.msl.common.base.PageData;
import com.msl.common.result.Result;
import io.swagger.annotations.Api;
import io.swagger.annotations.ApiImplicitParam;
import io.swagger.annotations.ApiImplicitParams;
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.*;
import javax.validation.constraints.NotBlank;
import javax.validation.constraints.NotNull;
@Slf4j
@RestController
@RequestMapping(value="/pc/carrier/integral")
@Validated
@Api(tags = "承运端-积分车辆")
@AllArgsConstructor
public class IntegralTruckController {
private final IntegralTruckService integralTruckService;
@Deprecated
@ApiOperation(value = "新增车辆", notes = "<br>By:艾庆国")
// @PostMapping("/saveTruck")
public Result<Void> saveTruck(@RequestBody @Validated IntegralTruckAddParam param) {
integralTruckService.saveTruck(param);
return Result.ok();
}
@Deprecated
@ApiOperation(value = "获取车辆列表", notes = "<br>By:艾庆国")
// @PostMapping(value = "pageTruckList")
public Result<PageData<IntegralTruckVO>> pageTruckList(@RequestBody @Validated PageIntegralTruckParam param) {
IPage<IntegralTruckVO> page = integralTruckService.pageTruckList(param);
return Result.page(page.getRecords(), page.getTotal(), page.getPages());
}
@ApiOperation(value = "查询车辆所属司机信息", notes = "<br>By:艾庆国")
@ApiImplicitParams({
@ApiImplicitParam(name = "truckNo", value = "车牌号", paramType = "query", example = "京A123456")
})
@GetMapping(value = "getTruckDriverInfo")
public Result<IntegralTruckVO> getTruckDriverInfo(@Validated @NotBlank(message = "车牌不能为空") String truckNo) {
return Result.ok(integralTruckService.getTruckDriverInfo(truckNo));
}
@ApiOperation(value = "获取车辆数量", notes = "<br>By:艾庆国")
@ApiImplicitParams({
@ApiImplicitParam(name = "truckEchelon", value = "车辆梯队", paramType = "query", example = "1")
})
@GetMapping(value = "getTruckCount")
public Result<Integer> getTruckCount(@Validated @NotNull(message = "车辆梯队不能为空") Integer truckEchelon) {
return Result.ok(integralTruckService.getTruckCount(truckEchelon));
}
}
package com.clx.performance.dao;
import com.baomidou.mybatisplus.core.metadata.IPage;
import com.clx.performance.mapper.IntegralOrderMapper;
import com.clx.performance.model.IntegralOrder;
import com.clx.performance.param.pc.pageIntegralOrderParam;
import com.clx.performance.vo.pc.IntegralOrderVO;
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 IntegralOrderDao extends BaseDao<IntegralOrderMapper, IntegralOrder, Integer> {
boolean existByOrderGoodsNo(@Param("orderGoodsNo")String orderGoodsNo);
IPage<IntegralOrderVO> pageByParam(pageIntegralOrderParam param);
}
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;
import com.baomidou.mybatisplus.core.metadata.IPage;
import com.clx.performance.mapper.IntegralStatisticsMapper;
import com.clx.performance.model.IntegralStatistics;
import com.clx.performance.param.pc.PageIntegralStatisticsParam;
import com.clx.performance.vo.pc.IntegralStatisticsVO;
import com.msl.common.base.Optional;
import com.msl.common.dao.BaseDao;
import org.apache.ibatis.annotations.Param;
import java.util.List;
/**
* @Author: aiqinguo
* @Description: 积分排名统计
* @Date: 2023-10-9 11:55:36
* @Version: 1.0
*/
public interface IntegralStatisticsDao extends BaseDao<IntegralStatisticsMapper, IntegralStatistics, Integer> {
boolean updateIntegral(IntegralStatistics item);
boolean batchUpdateRank(List<IntegralStatistics> list);
Optional<IntegralStatistics> selectByTruckNoAndStatisticsDate(@Param("truckNo")String truckNo, @Param("statisticsDate")String statisticsDate);
IPage<IntegralStatisticsVO> pageByParam(PageIntegralStatisticsParam param);
Optional<IntegralStatistics> selectById(Integer id);
List<IntegralStatistics> selectByStatisticsDate(@Param("statisticsDate")String statisticsDate);
}
package com.clx.performance.dao;
import com.baomidou.mybatisplus.core.metadata.IPage;
import com.clx.performance.mapper.IntegralTruckMapper;
import com.clx.performance.model.IntegralTruck;
import com.clx.performance.param.pc.PageIntegralTruckParam;
import com.clx.performance.vo.pc.IntegralTruckVO;
import com.msl.common.base.Optional;
import com.msl.common.dao.BaseDao;
import org.apache.ibatis.annotations.Param;
import java.util.List;
/**
* @Author: aiqinguo
* @Description: 积分车辆
* @Date: 2023-10-9 11:55:36
* @Version: 1.0
*/
public interface IntegralTruckDao extends BaseDao<IntegralTruckMapper, IntegralTruck, Integer> {
boolean updateIntegral(IntegralTruck item);
boolean updateIntegralByTruckNo(String truckNo, Integer integral);
boolean existByTruckNo(@Param("truckNo")String truckNo);
IPage<IntegralTruckVO> pageByParam(PageIntegralTruckParam param);
long countByTruckEchelon(@Param("truckEchelon")Integer truckEchelon);
Optional<IntegralTruck> getByTruckNo(@Param("truckNo")String truckNo);
List<IntegralTruck> listByTruckNoList(@Param("truckNoList") List<String> truckNoList);
}
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.IntegralOrderDao;
import com.clx.performance.mapper.IntegralOrderMapper;
import com.clx.performance.model.IntegralOrder;
import com.clx.performance.param.pc.pageIntegralOrderParam;
import com.clx.performance.vo.pc.IntegralOrderVO;
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 IntegralOrderDaoImpl extends BaseDaoImpl<IntegralOrderMapper, IntegralOrder, Integer> implements IntegralOrderDao {
@Override
public boolean existByOrderGoodsNo(String orderGoodsNo) {
return baseMapper.existByOrderGoodsNo(orderGoodsNo)>0;
}
@Override
public IPage<IntegralOrderVO> pageByParam(pageIntegralOrderParam param) {
return baseMapper.pageByParam(Page.of(param.getPage(), param.getPageSize()), param);
}
}
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.dao.impl;
import com.baomidou.mybatisplus.core.metadata.IPage;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.clx.performance.dao.IntegralStatisticsDao;
import com.clx.performance.mapper.IntegralStatisticsMapper;
import com.clx.performance.model.IntegralStatistics;
import com.clx.performance.param.pc.PageIntegralStatisticsParam;
import com.clx.performance.vo.pc.IntegralStatisticsVO;
import com.msl.common.base.Optional;
import com.msl.common.dao.impl.BaseDaoImpl;
import org.springframework.stereotype.Repository;
import java.util.List;
/**
* @Author: aiqinguo
* @Description: 积分排名统计
* @Date: 2023-10-9 12:00:54
* @Version: 1.0
*/
@Repository
public class IntegralStatisticsDaoImpl extends BaseDaoImpl<IntegralStatisticsMapper, IntegralStatistics, Integer> implements IntegralStatisticsDao {
@Override
public boolean updateIntegral(IntegralStatistics item) {
return update(lUdWrapper()
.eq(IntegralStatistics::getId, item.getId())
.set(IntegralStatistics::getIntegral, item.getIntegral())
);
}
@Override
public boolean batchUpdateRank(List<IntegralStatistics> list) {
return baseMapper.batchUpdateRank(list)>0;
}
@Override
public Optional<IntegralStatistics> selectByTruckNoAndStatisticsDate(String truckNo, String statisticsDate) {
return Optional.of(truckNo)
.map(item -> lQrWrapper()
.eq(IntegralStatistics::getTruckNo, item)
.eq(IntegralStatistics::getStatisticsDate, statisticsDate)
)
.map(super::getOne);
}
@Override
public IPage<IntegralStatisticsVO> pageByParam(PageIntegralStatisticsParam param) {
return baseMapper.pageByParam(Page.of(param.getPage(), param.getPageSize()), param);
}
@Override
public Optional<IntegralStatistics> selectById(Integer id) {
return Optional.of(id)
.map(item -> lQrWrapper()
.eq(IntegralStatistics::getId, item)
)
.map(super::getOne);
}
@Override
public List<IntegralStatistics> selectByStatisticsDate(String statisticsDate) {
return list(lQrWrapper()
.eq(IntegralStatistics::getStatisticsDate, statisticsDate)
.orderByDesc(IntegralStatistics::getIntegral));
}
}
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.IntegralTruckDao;
import com.clx.performance.mapper.IntegralTruckMapper;
import com.clx.performance.model.IntegralTruck;
import com.clx.performance.param.pc.PageIntegralTruckParam;
import com.clx.performance.vo.pc.IntegralTruckVO;
import com.msl.common.base.Optional;
import com.msl.common.dao.impl.BaseDaoImpl;
import org.springframework.stereotype.Repository;
import java.util.List;
/**
* @Author: aiqinguo
* @Description: 积分车辆
* @Date: 2023-10-9 12:00:54
* @Version: 1.0
*/
@Repository
public class IntegralTruckDaoImpl extends BaseDaoImpl<IntegralTruckMapper, IntegralTruck, Integer> implements IntegralTruckDao {
@Override
public boolean updateIntegral(IntegralTruck item) {
return update(lUdWrapper()
.eq(IntegralTruck::getId, item.getId())
.set(IntegralTruck::getIntegral, item.getIntegral())
);
}
@Override
public boolean updateIntegralByTruckNo(String truckNo, Integer integral) {
return update(lUdWrapper()
.eq(IntegralTruck::getTruckNo, truckNo)
.set(IntegralTruck::getIntegral, integral)
);
}
@Override
public boolean existByTruckNo(String truckNo) {
return baseMapper.existByTruckNo(truckNo)>0;
}
@Override
public IPage<IntegralTruckVO> pageByParam(PageIntegralTruckParam param) {
return baseMapper.pageByParam(Page.of(param.getPage(), param.getPageSize()), param);
}
@Override
public long countByTruckEchelon(Integer truckEchelon) {
return count(lQrWrapper()
.eq(IntegralTruck::getEchelon, truckEchelon)
);
}
@Override
public Optional<IntegralTruck> getByTruckNo(String truckNo) {
return Optional.of(truckNo)
.map(item -> lQrWrapper()
.eq(IntegralTruck::getTruckNo, item)
)
.map(super::getOne);
}
@Override
public List<IntegralTruck> listByTruckNoList(List<String> truckNoList) {
return list(lQrWrapper().in(IntegralTruck::getTruckNo, truckNoList));
}
}
package com.clx.performance.extranal.user;
import com.clx.user.vo.feign.DriverInfoFeignVo;
import com.clx.user.vo.feign.DriverTruckInfoFeignVo;
import com.msl.common.base.Optional;
......@@ -10,4 +11,6 @@ public interface DriverService {
void updateOrderStatus(Long driverUserNo, Integer driverOrderStatus, Integer truckId, Integer truckOrderStatus);
Optional<DriverInfoFeignVo> getTruckOwnInfo(String truckNo);
}
......@@ -2,6 +2,7 @@ package com.clx.performance.extranal.user.impl;
import com.clx.performance.extranal.user.DriverService;
import com.clx.user.feign.DriverFeign;
import com.clx.user.vo.feign.DriverInfoFeignVo;
import com.clx.user.vo.feign.DriverTruckInfoFeignVo;
import com.msl.common.base.Optional;
import com.msl.common.enums.ResultCodeEnum;
......@@ -37,4 +38,10 @@ public class DriverServiceImpl implements DriverService {
.filter(Result::succeed).orElseThrow(ResultCodeEnum.FAIL);
}
@Override
public Optional<DriverInfoFeignVo> getTruckOwnInfo(String truckNo) {
return null;
}
}
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.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.IntegralOrder;
import com.clx.performance.param.pc.pageIntegralOrderParam;
import com.clx.performance.sqlProvider.IntegralOrderSqlProvider;
import com.clx.performance.sqlProvider.IntegralTruckSqlProvider;
import com.clx.performance.vo.pc.IntegralOrderVO;
import org.apache.ibatis.annotations.Mapper;
import org.apache.ibatis.annotations.Param;
import org.apache.ibatis.annotations.Select;
import org.apache.ibatis.annotations.SelectProvider;
/**
* @Author: aiqinguo
* @Description: 积分货单
* @Date: 2023-10-9 11:52:22
* @Version: 1.0
*/
@Mapper
public interface IntegralOrderMapper extends BaseMapper<IntegralOrder> {
/**
* 查询是否存在(按货单编号)
*/
@Select("SELECT IFNULL((SELECT 1 FROM integral_order WHERE order_goods_no=#{orderGoodsNo} LIMIT 1),0)")
int existByOrderGoodsNo(@Param("orderGoodsNo")String orderGoodsNo);
/**
* @see IntegralOrderSqlProvider#pageByParam(com.baomidou.mybatisplus.extension.plugins.pagination.Page, com.clx.performance.param.pc.pageIntegralOrderParam)
*/
@SelectProvider(type = IntegralTruckSqlProvider.class, method = "pageByParam")
IPage<IntegralOrderVO> pageByParam(@Param("page") Page<IntegralOrderVO> page, @Param("param") pageIntegralOrderParam param);
}
\ No newline at end of file
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.IntegralStatistics;
import com.clx.performance.param.pc.PageIntegralStatisticsParam;
import com.clx.performance.sqlProvider.IntegralStatisticsSqlProvider;
import com.clx.performance.sqlProvider.IntegralTruckSqlProvider;
import com.clx.performance.vo.pc.IntegralStatisticsVO;
import org.apache.ibatis.annotations.Mapper;
import org.apache.ibatis.annotations.Param;
import org.apache.ibatis.annotations.SelectProvider;
import org.apache.ibatis.annotations.Update;
import java.util.List;
/**
* @Author: aiqinguo
* @Description: 积分排名统计
* @Date: 2023-10-9 11:52:22
* @Version: 1.0
*/
@Mapper
public interface IntegralStatisticsMapper extends BaseMapper<IntegralStatistics> {
/**
* @see IntegralStatisticsSqlProvider#pageByParam(com.baomidou.mybatisplus.extension.plugins.pagination.Page, com.clx.performance.param.pc.PageIntegralStatisticsParam)
*/
@SelectProvider(type = IntegralTruckSqlProvider.class, method = "pageByParam")
IPage<IntegralStatisticsVO> pageByParam(@Param("page") Page<IntegralStatisticsVO> page, @Param("param") PageIntegralStatisticsParam param);
/**
* 修改 (更新排名)
*/
@Update("<script>" +
"update integral_statistics " +
" <trim prefix='set' suffixOverrides=','>" +
" <trim prefix='rank = case' suffix='end,'>" +
" <foreach collection='list' item='item' index='index'>when id = #{item.id} then #{item.rank} </foreach>" +
" </trim>" +
" </trim>" +
"where id in <foreach collection='list' item='item' index='index' separator =',' open='(' close=')'>#{item.id} </foreach>" +
"</script>")
int batchUpdateRank(List<IntegralStatistics> list);
}
\ No newline at end of file
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.IntegralTruck;
import com.clx.performance.param.pc.PageIntegralTruckParam;
import com.clx.performance.sqlProvider.IntegralTruckSqlProvider;
import com.clx.performance.vo.pc.IntegralTruckVO;
import org.apache.ibatis.annotations.Mapper;
import org.apache.ibatis.annotations.Param;
import org.apache.ibatis.annotations.Select;
import org.apache.ibatis.annotations.SelectProvider;
/**
* @Author: aiqinguo
* @Description: 积分车辆
* @Date: 2023-10-9 11:52:22
* @Version: 1.0
*/
@Mapper
public interface IntegralTruckMapper extends BaseMapper<IntegralTruck> {
/**
* 查询是否存在(按车牌号)
*/
@Select("SELECT IFNULL((SELECT 1 FROM integral_truck WHERE truck_no=#{truckNo} LIMIT 1),0)")
int existByTruckNo(@Param("truckNo")String truckNo);
/**
* @see IntegralTruckSqlProvider#pageByParam(com.baomidou.mybatisplus.extension.plugins.pagination.Page, com.clx.performance.param.pc.PageIntegralTruckParam)
*/
@SelectProvider(type = IntegralTruckSqlProvider.class, method = "pageByParam")
IPage<IntegralTruckVO> pageByParam(@Param("page") Page<IntegralTruckVO> page, @Param("param") PageIntegralTruckParam 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-10 20:31:14
* @Version: 1.0
*/
@Getter
@Setter
@NoArgsConstructor
@TableName(autoResultMap = true)
public class IntegralOrder implements HasKey<Integer> {
@TableId(value = "id", type = IdType.AUTO)
private Integer id; //id
private String orderGoodsNo; //货单编号
private Integer sendAddressId; //发货地址id
private String sendAddress; //发货地址
private Integer receiveAddressId; //收货地址id
private String receiveAddress; //收货地址
private Integer orderType; //货单类型:1优质单 2普通单 3流水单 4支援单
private Integer truckEchelon; //车辆梯队
private String createTime; //创建时间
private String modifiedTime; //修改时间
@Getter
@AllArgsConstructor
public enum OrderType{
HIGH_QUALITY(1, "优质单"),
NORMAL(2, "普通单"),
WATER(3, "流水单"),
SUPPORT(4, "支援单"),
;
private Integer value;
private String msg;
}
@KeyColumn("id")
@Override
public Integer gainKey() {
return id;
}
}
\ 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.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.Getter;
import lombok.NoArgsConstructor;
import lombok.Setter;
/**
* @Author: aiqinguo
* @Description: 积分排名统计
* @Date: 2023-10-9 14:47:54
* @Version: 1.0
*/
@Getter
@Setter
@NoArgsConstructor
@TableName(autoResultMap = true)
public class IntegralStatistics implements HasKey<Integer> {
@TableId(value = "id", type = IdType.AUTO)
private Integer id; //id
private String truckNo; //车牌号
private String statisticsDate; //统计时间(周一)
private Integer integralBase; //基础积分
private Integer integral; //积分
private Integer rank; //排名
private String createTime; //创建时间
private String modifiedTime; //修改时间
@KeyColumn("id")
@Override
public Integer gainKey() {
return id;
}
}
\ 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.Getter;
import lombok.NoArgsConstructor;
import lombok.Setter;
/**
* @Author: aiqinguo
* @Description: 积分车辆
* @Date: 2023-10-10 20:33:10
* @Version: 1.0
*/
@Getter
@Setter
@NoArgsConstructor
@TableName(autoResultMap = true)
public class IntegralTruck implements HasKey<Integer> {
@TableId(value = "id", type = IdType.AUTO)
private Integer id; //id
private String truckNo; //车牌号
private String driverName; //司机姓名
private String driverMobile; //司机手机号
private Integer echelon; //梯队
private Integer integral; //积分
private Integer rank; //排名
private String createTime; //创建时间
private String modifiedTime; //修改时间
@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.baomidou.mybatisplus.core.metadata.IPage;
import com.clx.performance.param.pc.IntegralOrderAddParam;
import com.clx.performance.param.pc.pageIntegralOrderParam;
import com.clx.performance.vo.pc.IntegralOrderVO;
public interface IntegralOrderService {
void addOrder(IntegralOrderAddParam param);
IPage<IntegralOrderVO> pageOrderList(pageIntegralOrderParam param);
}
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);
}
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;
import com.baomidou.mybatisplus.core.metadata.IPage;
import com.clx.performance.param.pc.IntegralTruckAddParam;
import com.clx.performance.param.pc.PageIntegralTruckParam;
import com.clx.performance.vo.pc.IntegralTruckVO;
public interface IntegralTruckService {
void saveTruck(IntegralTruckAddParam param);
IPage<IntegralTruckVO> pageTruckList(PageIntegralTruckParam param);
IntegralTruckVO getTruckDriverInfo(String truckNo);
Integer getTruckCount(Integer truckEchelon);
}
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();
}
}
package com.clx.performance.service.impl;
import com.baomidou.mybatisplus.core.metadata.IPage;
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;
import com.clx.performance.vo.pc.IntegralTruckVO;
import com.clx.user.vo.feign.DriverInfoFeignVo;
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 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
public void saveTruck(IntegralTruckAddParam param) {
String truckNo = param.getTruckNo();
boolean existFlag = integralTruckDao.existByTruckNo(truckNo);
if (existFlag) {throw new ServiceSystemException(PerformanceResultEnum.INTEGRAL_TRUCK_DRIVER_EXIST);}
IntegralTruck truck = new IntegralTruck();
truck.setTruckNo(truckNo);
truck.setDriverName(param.getDriverName());
truck.setDriverMobile(param.getDriverMobile());
truck.setEchelon(1);
String statisticsDate = LocalDateTimeUtils.getWeekStart();
int protectionIntegral = integralStatisticsService.protectionIntegralCalc(statisticsDate);
int baseIntegral = 100;
// 初始化统计
IntegralStatistics statistics = new IntegralStatistics();
statistics.setTruckNo(truckNo);
statistics.setStatisticsDate(statisticsDate);
statistics.setIntegralBase(0);
statistics.setIntegral(protectionIntegral+baseIntegral); //保护分+基础分
statistics.setRank(1);
integralStatisticsDao.saveEntity(statistics);
IntegralStatistics statisticsNext = new IntegralStatistics();
statisticsNext.setTruckNo(truckNo);
statisticsNext.setStatisticsDate(LocalDateTimeUtils.formatTime(LocalDateTimeUtils.parseTime(statistics.getStatisticsDate()).plusDays(7)));
statisticsNext.setIntegralBase(0);
statisticsNext.setIntegral(0);
statisticsNext.setRank(1);
integralStatisticsDao.saveEntity(statisticsNext);
// 新增车辆
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
public IPage<IntegralTruckVO> pageTruckList(PageIntegralTruckParam param) {
return integralTruckDao.pageByParam(param);
}
@Override
public IntegralTruckVO getTruckDriverInfo(String truckNo) {
IntegralTruckVO truck = null;
// 查询车辆信息
DriverInfoFeignVo driverTruckInfoFeignVo = driverService.getTruckOwnInfo(truckNo).get();
if (null != driverTruckInfoFeignVo) {
truck = new IntegralTruckVO();
truck.setTruckNo(truckNo);
truck.setDriverName(driverTruckInfoFeignVo.getName());
truck.setDriverMobile(driverTruckInfoFeignVo.getMobile());
}
return truck;
}
@Override
public Integer getTruckCount(Integer truckEchelon) {
int count = (int)integralTruckDao.countByTruckEchelon(truckEchelon);
return count;
}
}
package com.clx.performance.sqlProvider;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.clx.performance.param.pc.pageIntegralOrderParam;
import com.clx.performance.vo.pc.IntegralOrderVO;
import org.apache.commons.lang3.StringUtils;
import org.apache.ibatis.annotations.Param;
import org.apache.ibatis.jdbc.SQL;
public class IntegralOrderSqlProvider {
public String pageByParam(@Param("page") Page<IntegralOrderVO> page, @Param("param") pageIntegralOrderParam param) {
return new SQL(){{
SELECT(" id, order_goods_no, " +
" send_address_id, send_address, " +
" receive_address_id, receive_address, " +
" order_type, truck_echelon, " +
" 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_order");
if (StringUtils.isNotBlank(param.getOrderGoodsNo())) {WHERE("order_goods_no = #{param.orderGoodsNo}");}
if (StringUtils.isNotBlank(param.getBeginTime())) {WHERE("create_time >= #{param.beginTime}");}
if (StringUtils.isNotBlank(param.getEndTime())) {WHERE("create_time <= #{param.endTime}");}
ORDER_BY("create_time desc");
}}.toString();
}
}
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();
}
}
package com.clx.performance.sqlProvider;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.clx.performance.param.pc.PageIntegralStatisticsParam;
import com.clx.performance.vo.pc.IntegralStatisticsVO;
import org.apache.commons.lang3.StringUtils;
import org.apache.ibatis.annotations.Param;
import org.apache.ibatis.jdbc.SQL;
public class IntegralStatisticsSqlProvider {
public String pageByParam(@Param("page") Page<IntegralStatisticsVO> page, @Param("param") PageIntegralStatisticsParam param) {
return new SQL(){{
SELECT(" id, truck_no as truckNo, date_format(statistics_date, '%Y-%m-%d %H:%i:%s') as statisticsDate, " +
" integral_base as integralBase, integral, rank, " +
" 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_statistics");
if (StringUtils.isNotBlank(param.getBeginTime())) {WHERE("create_time >= #{param.beginTime}");}
if (StringUtils.isNotBlank(param.getEndTime())) {WHERE("create_time <= #{param.endTime}");}
ORDER_BY("truck_no asc, statistics_date desc, integral desc ");
}}.toString();
}
}
package com.clx.performance.sqlProvider;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.clx.performance.param.pc.PageIntegralTruckParam;
import com.clx.performance.vo.pc.IntegralTruckVO;
import org.apache.commons.lang3.StringUtils;
import org.apache.ibatis.annotations.Param;
import org.apache.ibatis.jdbc.SQL;
import java.util.Objects;
public class IntegralTruckSqlProvider {
public String pageByParam(@Param("page") Page<IntegralTruckVO> page, @Param("param") PageIntegralTruckParam param) {
return new SQL(){{
SELECT(" id, truck_no, " +
" driver_name, driver_mobile, " +
" echelon, integral, rank, " +
" 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_truck");
if (StringUtils.isNotBlank(param.getTruckNo())) {WHERE("truck_no = #{param.truckNo}");}
if (StringUtils.isNotBlank(param.getDriverMobile())) {WHERE("driver_mobile = #{param.driverMobile}");}
if (!Objects.isNull(param.getEchelon())) {WHERE("echelon = #{param.echelon}");}
if (StringUtils.isNotBlank(param.getBeginTime())) {WHERE("create_time >= #{param.beginTime}");}
if (StringUtils.isNotBlank(param.getEndTime())) {WHERE("create_time <= #{param.endTime}");}
ORDER_BY("create_time desc");
}}.toString();
}
}
......@@ -382,4 +382,10 @@ public class LocalDateTimeUtils {
return localDateTime;
}
public static String getWeekStart() {
return DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss").format(LocalDateTime.of(LocalDate.now(), LocalTime.MIN).with(TemporalAdjusters.previousOrSame(DayOfWeek.MONDAY)));
}
public static String getWeekStart(String dateTime) {
return DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss").format(LocalDateTime.of(parseLocalDate(dateTime), LocalTime.MIN).with(TemporalAdjusters.previousOrSame(DayOfWeek.MONDAY)));
}
}
Markdown 格式
0%
您添加了 0 到此讨论。请谨慎行事。
请先完成此评论的编辑!
注册 或者 后发表评论