hjp 2 hete
szülő
commit
8f272bf6cd

+ 3 - 3
src/main/java/com/sqx/modules/app/controller/UserController.java

@@ -274,7 +274,7 @@ public class UserController {
      */
     @ApiOperation("修改用户信用分")
     @PostMapping("updateUserCredit")
-    public Result updateUserCredit(Long userId, Integer type, Integer score, String remark) {
+    public Result updateUserCredit(Long userId, Integer type, Integer score, String remark,Integer isDriver) {
         int maxScore = Integer.parseInt(commonInfoService.findOne(363).getValue());
         if (score <= 0) {
             return Result.error("请填入大于0的数");
@@ -286,13 +286,13 @@ public class UserController {
             if (userEntity.getCreditScore() + score > maxScore) {
                 return Result.error("最多增加" + (maxScore - userEntity.getCreditScore()) + "分");
             }
-            recordService.updateUserCreditRecord(userEntity, 1, score, remark);
+            recordService.updateUserCreditRecord(userEntity, 1, score, remark,isDriver);
         } else {
             text = "扣除";
             if (userEntity.getCreditScore() < score) {
                 return Result.error("当前用户最多扣除" + userEntity.getCreditScore() + "分");
             }
-            recordService.updateUserCreditRecord(userEntity, 2, score, remark);
+            recordService.updateUserCreditRecord(userEntity, 2, score, remark,isDriver);
         }
         MessageInfo riderMessageInfo = new MessageInfo();
         riderMessageInfo.setContent("管理员" + text + "您" + score + "信用分,当前信用分" + userEntity.getCreditScore());

+ 7 - 0
src/main/java/com/sqx/modules/app/entity/UserEntity.java

@@ -44,6 +44,13 @@ public class UserEntity implements Serializable {
      * 信用分
      */
     private Integer creditScore;
+
+    /**
+     * 信用分-司机
+     */
+    @ApiModelProperty("信用分-司机")
+    @TableField("credit_score_sf")
+    private Integer creditScoreSf;
     /**
      * 手机号
      */

+ 2 - 0
src/main/java/com/sqx/modules/app/service/impl/UserServiceImpl.java

@@ -340,6 +340,7 @@ public class UserServiceImpl extends ServiceImpl<UserDao, UserEntity> implements
                 }
                 int initScore = Integer.parseInt(commonInfoService.findOne(363).getValue());
                 userInfo1.setCreditScore(initScore);
+                userInfo1.setCreditScoreSf(initScore);
                 //没有则生成新账号
                 userInfo1.setCreateTime(date);
                 userInfo1.setPlatform("小程序");
@@ -648,6 +649,7 @@ public class UserServiceImpl extends ServiceImpl<UserDao, UserEntity> implements
             }
             int initScore = Integer.parseInt(commonInfoService.findOne(363).getValue());
             userInfo.setCreditScore(initScore);
+            userInfo.setCreditScoreSf(initScore);
             //新用户注册,加新用户标识
             userInfo.setNewUserFlag(1);
             //新注册用户钱包余额和保证金为0

+ 1 - 1
src/main/java/com/sqx/modules/chat/controller/app/AppChatSocket.java

@@ -177,7 +177,7 @@ public class AppChatSocket {//用户聊天
                 MessageInfo messageInfo = new MessageInfo();
                 messageInfo.setContent("内容:"+textMessage);
                 messageInfo.setTitle("消息未读通知");
-                messageInfo.setState(String.valueOf(5));
+                messageInfo.setState(String.valueOf(19));
                 messageInfo.setUserName(userEntity.getNickName());
                 messageInfo.setUserId(String.valueOf(userEntity.getUserId()));
                 messageInfo.setCreateAt(sdf.format(new Date()));

+ 22 - 1
src/main/java/com/sqx/modules/creditRecord/controller/AppCreditRecordController.java

@@ -38,9 +38,30 @@ public class AppCreditRecordController {
     @Login
     @GetMapping("getCreditRecordList")
     @ApiOperation("获取信用分记录")
-    public Result getCreditRecordList(@RequestAttribute("userId")Long userId, Integer page, Integer limit, CreditRecord creditRecord) {
+    public Result getCreditRecordList(@RequestAttribute("userId")Long userId, Integer page, Integer limit, CreditRecord creditRecord,Integer isDriver) {
         creditRecord.setRiderUserId(userId);
+        creditRecord.setIsDriver(isDriver);
         return Result.success().put("data", recordService.getCreditRecordList(page, limit, creditRecord));
     }
+
+    /**
+     * 获取信用分与上月对比数据
+     * @param userId
+     * @param isDriver
+     * @return
+     */
+    @Login
+    @GetMapping("getScore")
+    @ApiOperation("获取信用分")
+    public Result getScore(@RequestAttribute("userId") Long userId, Integer isDriver){
+        return Result.success().put("data",recordService.getScore(userId,isDriver));
+    }
+
+    @Login
+    @GetMapping("getFilledScore")
+    @ApiOperation("获取信用分趋势")
+    public Result getFilledScore(@RequestAttribute("userId") Long userId, Integer isDriver,Integer several){
+        return Result.success().put("data",recordService.getFilledScore(userId,isDriver,several));
+    }
 }
 

+ 10 - 0
src/main/java/com/sqx/modules/creditRecord/dao/CreditRecordDao.java

@@ -2,7 +2,12 @@ package com.sqx.modules.creditRecord.dao;
 
 import com.baomidou.mybatisplus.core.mapper.BaseMapper;
 import com.sqx.modules.creditRecord.entity.CreditRecord;
+import com.sqx.modules.creditRecord.entity.CreditRecordEntity;
+import org.apache.ibatis.annotations.MapKey;
 import org.apache.ibatis.annotations.Mapper;
+import org.apache.ibatis.annotations.Param;
+
+import java.util.Map;
 
 /**
  * <p>
@@ -15,4 +20,9 @@ import org.apache.ibatis.annotations.Mapper;
 @Mapper
 public interface CreditRecordDao extends BaseMapper<CreditRecord> {
 
+    CreditRecordEntity getScore(@Param("userId") Long userId, @Param("isDriver")Integer isDriver);
+
+    @MapKey("month")
+    Map<String,Object> getFilledScore(@Param("userId") Long userId, @Param("isDriver")Integer isDriver,@Param("several")Integer several);
+
 }

+ 2 - 1
src/main/java/com/sqx/modules/creditRecord/entity/CreditRecord.java

@@ -95,5 +95,6 @@ public class CreditRecord implements Serializable {
     @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss")
     private LocalDateTime createTime;
 
-
+    @ApiModelProperty("0-用户,1-司机")
+    private Integer isDriver;
 }

+ 24 - 0
src/main/java/com/sqx/modules/creditRecord/entity/CreditRecordEntity.java

@@ -0,0 +1,24 @@
+package com.sqx.modules.creditRecord.entity;
+
+import lombok.Data;
+
+@Data
+public class CreditRecordEntity {
+
+    public String time;
+
+    /**
+     * 当前分数
+     */
+    public Integer score;
+
+    /**
+     * 上月分数
+     */
+    public Integer lscore;
+
+    /**
+     * 分数差
+     */
+    public Integer diff;
+}

+ 8 - 1
src/main/java/com/sqx/modules/creditRecord/service/CreditRecordService.java

@@ -4,6 +4,9 @@ import com.baomidou.mybatisplus.core.metadata.IPage;
 import com.baomidou.mybatisplus.extension.service.IService;
 import com.sqx.modules.app.entity.UserEntity;
 import com.sqx.modules.creditRecord.entity.CreditRecord;
+import com.sqx.modules.creditRecord.entity.CreditRecordEntity;
+
+import java.util.Map;
 
 /**
  * <p>
@@ -17,5 +20,9 @@ public interface CreditRecordService extends IService<CreditRecord> {
 
     IPage<CreditRecord> getCreditRecordList(Integer page, Integer limit, CreditRecord creditRecord);
 
-    void updateUserCreditRecord(UserEntity userEntity, Integer type, Integer score, String remark);
+    void updateUserCreditRecord(UserEntity userEntity, Integer type, Integer score, String remark,Integer isDriver);
+
+    CreditRecordEntity getScore(Long userId, Integer isDriver);
+
+    Map<String,Object> getFilledScore(Long userId, Integer isDriver,Integer several);
 }

+ 28 - 2
src/main/java/com/sqx/modules/creditRecord/service/impl/CreditRecordServiceImpl.java

@@ -9,12 +9,16 @@ import com.sqx.modules.app.entity.UserEntity;
 import com.sqx.modules.app.service.UserService;
 import com.sqx.modules.creditRecord.dao.CreditRecordDao;
 import com.sqx.modules.creditRecord.entity.CreditRecord;
+import com.sqx.modules.creditRecord.entity.CreditRecordEntity;
 import com.sqx.modules.creditRecord.service.CreditRecordService;
 import com.sqx.modules.sys.entity.SysUserEntity;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.stereotype.Service;
 
+import javax.annotation.Resource;
 import java.time.LocalDateTime;
+import java.util.LinkedHashMap;
+import java.util.Map;
 
 /**
  * <p>
@@ -29,6 +33,8 @@ public class CreditRecordServiceImpl extends ServiceImpl<CreditRecordDao, Credit
 
     @Autowired
     private UserService userService;
+    @Resource
+    private CreditRecordDao creditRecordDao;
 
     @Override
     public IPage<CreditRecord> getCreditRecordList(Integer page, Integer limit, CreditRecord creditRecord) {
@@ -43,7 +49,7 @@ public class CreditRecordServiceImpl extends ServiceImpl<CreditRecordDao, Credit
     }
 
     @Override
-    public void updateUserCreditRecord(UserEntity userEntity, Integer type, Integer score, String remark) {
+    public void updateUserCreditRecord(UserEntity userEntity, Integer type, Integer score, String remark,Integer isDriver) {
         CreditRecord creditRecord = new CreditRecord();
         creditRecord.setCreateTime(LocalDateTime.now());
         creditRecord.setLastCreditScore(userEntity.getCreditScore());
@@ -68,9 +74,29 @@ public class CreditRecordServiceImpl extends ServiceImpl<CreditRecordDao, Credit
             creditRecord.setSysUserName(userEntity.getUserName());
         }
         creditRecord.setReason(remark);
+        creditRecord.setIsDriver(isDriver);
         baseMapper.insert(creditRecord);
 
-        userEntity.setCreditScore(nowScore);
+        if (isDriver == 0){
+            userEntity.setCreditScore(nowScore);
+        }else {
+            userEntity.setCreditScoreSf(nowScore);
+        }
         userService.updateById(userEntity);
     }
+
+    @Override
+    public CreditRecordEntity getScore(Long userId, Integer isDriver){
+        return creditRecordDao.getScore(userId,isDriver);
+    }
+
+    public Map<String,Object> getFilledScore(Long userId, Integer isDriver,Integer several){
+
+        Map<String, Object> orderedMap = new LinkedHashMap<>();
+        creditRecordDao.getFilledScore(userId,isDriver,several).entrySet().stream()
+                .sorted(Map.Entry.comparingByKey()) // 按月份排序;如不需要可删除
+                .forEachOrdered(e -> orderedMap.put(e.getKey(), e.getValue()));
+
+        return orderedMap;
+    }
 }

+ 9 - 2
src/main/java/com/sqx/modules/message/service/impl/MessageServiceImpl.java

@@ -26,6 +26,7 @@ import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.scheduling.annotation.Scheduled;
 import org.springframework.stereotype.Service;
 
+import javax.annotation.Resource;
 import java.text.SimpleDateFormat;
 import java.time.LocalDateTime;
 import java.time.format.DateTimeFormatter;
@@ -43,7 +44,7 @@ public class MessageServiceImpl extends ServiceImpl<MessageInfoDao, MessageInfo>
     @Autowired
     private AppLoginController loginController;
 
-    @Autowired
+    @Resource
     private MessageInfoDao messageInfoDao;
     @Autowired
     private UserService userService;
@@ -59,7 +60,13 @@ public class MessageServiceImpl extends ServiceImpl<MessageInfoDao, MessageInfo>
             pages = new Page<>();
             pages.setSize(-1);
         }
-        IPage<MessageInfo> selectPage = baseMapper.selectPage(pages, new QueryWrapper<>(messageInfo).orderByDesc("create_at"));
+        IPage<MessageInfo> selectPage ;
+        if(!messageInfo.getState().equals("0")){
+            selectPage = baseMapper.selectPage(pages, new QueryWrapper<>(messageInfo).orderByDesc("create_at"));
+        }else {
+            selectPage = baseMapper.selectPage(pages, new QueryWrapper<MessageInfo>().orderByDesc("create_at"));
+        }
+
         for(MessageInfo messageInfo1:selectPage.getRecords()){
             if(StringUtils.isNotEmpty(messageInfo1.getIsSee()) && "0".equals(messageInfo1.getIsSee())){
                 messageInfo1.setIsSee("2");

+ 2 - 2
src/main/java/com/sqx/modules/orders/controller/OrdersController.java

@@ -103,8 +103,8 @@ public class OrdersController {
 
     @PostMapping("/cancelOrders")
     @ApiOperation("取消订单")
-    public Result cancelOrders(Long ordersId){
-        return ordersService.cancelOrders(ordersId);
+    public Result cancelOrders(Long ordersId,Integer isDriver){
+        return ordersService.cancelOrders(ordersId,isDriver);
     }
 
 

+ 2 - 2
src/main/java/com/sqx/modules/orders/controller/app/AppOrdersController.java

@@ -125,8 +125,8 @@ public class AppOrdersController {
     @Login
     @PostMapping("/cancelOrders")
     @ApiOperation("取消订单")
-    public Result cancelOrders(Long ordersId){
-        return ordersService.cancelOrders(ordersId);
+    public Result cancelOrders(Long ordersId,Integer isDriver){
+        return ordersService.cancelOrders(ordersId,isDriver);
     }
 
     @Login

+ 1 - 1
src/main/java/com/sqx/modules/orders/service/OrdersService.java

@@ -34,7 +34,7 @@ public interface OrdersService extends IService<Orders> {
 
     Result completeOrders(Long ordersId);
 
-    Result cancelOrders(Long ordersId);
+    Result cancelOrders(Long ordersId,Integer isDriver);
 
     Result refundOrders(Long ordersId);
 

+ 8 - 4
src/main/java/com/sqx/modules/orders/service/impl/OrdersServiceImp.java

@@ -1116,7 +1116,7 @@ public class OrdersServiceImp extends ServiceImpl<OrdersDao, Orders> implements
     }
 
     @Override
-    public Result cancelOrders(Long ordersId){
+    public Result cancelOrders(Long ordersId,Integer isDriver){
         reentrantReadWriteLock.writeLock().lock();
         try {
             Orders orders = baseMapper.selectById(ordersId);
@@ -1140,7 +1140,11 @@ public class OrdersServiceImp extends ServiceImpl<OrdersDao, Orders> implements
                 Driver driver = driverService.getById(orders.getDriverId());
                 UserEntity userEntity = userService.selectUserById(driver.getUserId());
                 String score = commonInfoService.findOne(364).getValue();
-                creditRecordService.updateUserCreditRecord(userEntity, 2, Integer.parseInt(score), "取消订单扣除信用分,订单号:"+orders.getOrdersNo());
+                if (isDriver == 0){
+                    creditRecordService.updateUserCreditRecord(userEntity, 2, Integer.parseInt(score), "取消订单扣除信用分,订单号:"+orders.getOrdersNo(),isDriver);
+                } else if (isDriver == 1){
+                    creditRecordService.updateUserCreditRecord(userEntity, 2, Integer.parseInt(score), "取消订单扣除信用分,订单号:"+orders.getOrdersNo(),isDriver);
+                }
                 //清空师傅的信息和师傅的上级  订单改为待接单
                 baseMapper.update(null, Wrappers.<Orders>lambdaUpdate()
                         .set(Orders::getStatus,2)
@@ -1537,11 +1541,11 @@ public class OrdersServiceImp extends ServiceImpl<OrdersDao, Orders> implements
         return Result.success().put("data", result);
     }
 
-    @Scheduled(fixedRate  = 60* 1000, zone = "Asia/Shanghai")
+    @Scheduled(fixedRate  = 60 * 1000, zone = "Asia/Shanghai")
     public void cancelOrdersByTime(){
         List<Orders> ordersList = baseMapper.selectOrdersByStartTime();
         for (Orders orders:ordersList){
-            cancelOrders(orders.getOrdersId());
+            cancelOrders(orders.getOrdersId(),3);
         }
     }
 

+ 98 - 0
src/main/resources/mapper/creditRecord/CreditRecordDao.xml

@@ -0,0 +1,98 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
+
+<mapper namespace="com.sqx.modules.creditRecord.dao.CreditRecordDao">
+
+    <select id="getScore" resultType="com.sqx.modules.creditRecord.entity.CreditRecordEntity">
+        SELECT
+            this_month.create_time AS time,
+            this_month.next_credit_score AS score,
+            last_month.next_credit_score AS lscore,
+            this_month.next_credit_score - last_month.next_credit_score AS diff
+        FROM
+        (
+            (
+            SELECT
+                next_credit_score, create_time
+            FROM credit_record
+            WHERE rider_user_id = #{userId}
+            AND is_driver = #{isDriver}
+            ORDER BY create_time DESC
+            LIMIT 1
+            )
+            UNION ALL
+                ( SELECT 100 AS next_credit_score, NOW() AS create_time )
+            LIMIT 1
+        ) AS this_month,
+        (
+            SELECT IFNULL((
+                SELECT next_credit_score
+                FROM credit_record
+                WHERE create_time &lt; DATE_FORMAT(CURDATE(), '%Y-%m-01')
+                AND rider_user_id = #{userId}
+                AND is_driver = #{isDriver}
+                ORDER BY create_time DESC
+                LIMIT 1
+            ), 100) AS next_credit_score
+        ) AS last_month
+    </select>
+
+    <select id="getFilledScore" resultType="map">
+        <![CDATA[
+        WITH RECURSIVE months AS (
+          SELECT DATE_FORMAT(DATE_SUB(CURDATE(), INTERVAL #{several}-1 MONTH), '%Y-%m') AS month_val, 1 AS step
+          UNION ALL
+          SELECT DATE_FORMAT(DATE_ADD(DATE_SUB(CURDATE(), INTERVAL #{several}-1 MONTH), INTERVAL step MONTH), '%Y-%m'), step + 1
+          FROM months
+          WHERE step < #{several}
+        ),
+        latest_record_per_month AS (
+          SELECT
+            DATE_FORMAT(create_time, '%Y-%m') AS month,
+            next_credit_score,
+            create_time,
+            ROW_NUMBER() OVER (PARTITION BY DATE_FORMAT(create_time, '%Y-%m') ORDER BY create_time DESC) AS rn
+          FROM credit_record
+          WHERE rider_user_id = #{userId}
+            AND is_driver = #{isDriver}
+        ),
+        scores AS (
+          SELECT month, next_credit_score
+          FROM latest_record_per_month
+          WHERE rn = 1
+        ),
+        first_month AS (
+          SELECT MIN(month_val) AS month_val FROM months
+        ),
+        fallback_score AS (
+          SELECT next_credit_score
+          FROM credit_record
+          WHERE rider_user_id = #{userId}
+            AND is_driver = #{isDriver}
+            AND create_time < CONCAT((SELECT month_val FROM first_month), '-01 00:00:00')
+          ORDER BY create_time DESC
+          LIMIT 1
+        ),
+        merged_scores AS (
+          SELECT
+            m.month_val AS month,
+            CASE
+              WHEN s.next_credit_score IS NOT NULL THEN s.next_credit_score
+              WHEN m.month_val = (SELECT month_val FROM first_month) THEN (
+                SELECT COALESCE(next_credit_score, 100) FROM fallback_score
+                UNION ALL SELECT 100 LIMIT 1
+              )
+              ELSE NULL
+            END AS next_credit_score
+          FROM months m
+          LEFT JOIN scores s ON m.month_val = s.month
+        )
+        SELECT
+          month,
+          CAST(@score := IFNULL(next_credit_score, @score) AS SIGNED) AS filled_score
+        FROM merged_scores, (SELECT @score := NULL) vars
+        ORDER BY month
+      ]]>
+    </select>
+
+</mapper>