Ver Fonte

初始化、修改、重置司机评分

tangyishan há 1 mês atrás
pai
commit
fdc0737c6d

+ 3 - 3
sckw-modules-api/sckw-fleet-api/src/main/java/com/sckw/fleet/api/model/dto/UpdateDriverScoreDto.java

@@ -29,9 +29,9 @@ public class UpdateDriverScoreDto {
     /** 变动评分 */
     private BigDecimal scoreChange;
 
-    /** 物流企业评分 */
-    @NotNull(message = "物流企业评分不能为空")
-    private BigDecimal logisticsEntScore;
+    /** 物流企业更新后评分 */
+    @NotNull(message = "物流企业更新后评分不能为空")
+    private BigDecimal afterUpdateLogisticsEntScore;
 
     /** 变动原因 */
     @NotBlank(message = "变动原因不能为空")

+ 18 - 6
sckw-modules/sckw-contract/src/main/java/com/sckw/contract/service/impl/KwcContractLogisticsScoreServiceImpl.java

@@ -38,8 +38,8 @@ import com.sckw.redis.constant.RedisConstant;
 import com.sckw.redis.utils.RedissonUtils;
 import com.sckw.system.api.RemoteSystemService;
 import com.sckw.system.api.model.dto.res.EntCacheResDto;
+import com.sckw.system.api.model.dto.res.UserCacheResDto;
 import lombok.extern.slf4j.Slf4j;
-import org.apache.commons.collections4.MapUtils;
 import org.apache.dubbo.config.annotation.DubboReference;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.stereotype.Service;
@@ -136,6 +136,9 @@ public class KwcContractLogisticsScoreServiceImpl implements IKwcContractLogisti
         PageUtils.startPage();
         detailReqDto.setScoreIds(Collections.singletonList(detailReqDto.getScoreId()));
         List<KwcContractLogisticsScoreDetail> logisticsScoreDetails = kwcContractLogisticsScoreDetailMapper.selectKwcContractLogisticsScoreDetailList(detailReqDto);
+        //根据影响人id列表查询影响人
+        List<Long> influenceByIds = logisticsScoreDetails.stream().map(KwcContractLogisticsScoreDetail::getInfluenceBy).toList();
+        Map<Long, UserCacheResDto> userCacheResDtoMap = remoteSystemService.queryUserCacheMapByIds(influenceByIds);
         if(CollectionUtils.isNotEmpty(logisticsScoreDetails)){
             pageInfo = ((Page<KwcContractLogisticsScoreDetail>) logisticsScoreDetails).toPageInfo(e -> {
                 LogisticsScoreDetailResVo logisticsScoreDetailResVo = new LogisticsScoreDetailResVo();
@@ -149,6 +152,10 @@ public class KwcContractLogisticsScoreServiceImpl implements IKwcContractLogisti
                     logisticsScoreDetailResVo.setScore("");
                 }
                 logisticsScoreDetailResVo.setLogisticsEntName(entCacheResDto.getFirmName());
+                UserCacheResDto userCacheResDto = userCacheResDtoMap.get(e.getInfluenceBy());
+                if(userCacheResDto != null){
+                    logisticsScoreDetailResVo.setInfluenceByName(userCacheResDto.getName());
+                }
                 return logisticsScoreDetailResVo;
             });
         }
@@ -172,10 +179,12 @@ public class KwcContractLogisticsScoreServiceImpl implements IKwcContractLogisti
             return null;
         }
         EntCacheResDto entCacheResDto = remoteSystemService.queryEntCacheById(logisticsScore.getLogisticsEntId());
+        UserCacheResDto userCacheResDto = remoteSystemService.queryUserCacheById(logisticsScoreDetail.getInfluenceBy());
         logisticsScoreDetail.setLogisticsEntName(entCacheResDto.getFirmName());
         LogisticsScoreDetailResVo logisticsScoreDetailResVo = new LogisticsScoreDetailResVo();
         BeanUtils.copyProperties(logisticsScoreDetail,logisticsScoreDetailResVo);
         logisticsScoreDetailResVo.setScore(logisticsScore.getScore().toString());
+        logisticsScoreDetailResVo.setInfluenceByName(userCacheResDto.getName());
         return logisticsScoreDetailResVo;
     }
 
@@ -415,6 +424,7 @@ public class KwcContractLogisticsScoreServiceImpl implements IKwcContractLogisti
     {
         //1.校验供应商企业评分权限
         KwcContractLogisticsScore logisticsScore = checkLogisticsScoreAuth(providerEntId, scoreId);
+        BigDecimal originScore = logisticsScore.getScore();
         String lockKey = String.format(RedisConstant.LOGISTICS_SCORE_RECORD_RESET_KEY,scoreId);
         if (Boolean.FALSE.equals(RedissonUtils.tryLock(lockKey, 5L, 10L))) {
             throw new BusinessException("业务繁忙,请稍后再试!");
@@ -426,7 +436,7 @@ public class KwcContractLogisticsScoreServiceImpl implements IKwcContractLogisti
             logisticsScore.setUpdateTime(new Date());
             kwcContractLogisticsScoreMapper.updateKwcContractLogisticsScore(logisticsScore);
             //3.评分明细中插入重置记录
-            KwcContractLogisticsScoreDetail resetLogisticsScoreDetail = buildResetLogisticsScoreDetail(scoreId);
+            KwcContractLogisticsScoreDetail resetLogisticsScoreDetail = buildResetLogisticsScoreDetail(scoreId,originScore);
             kwcContractLogisticsScoreDetailMapper.insertKwcContractLogisticsScoreDetail(resetLogisticsScoreDetail);
             //4.清除待审核评分
             kwcContractLogisticsScoreDetailMapper.deleteKwcContractLogisticsScoreDetailByScoreId(logisticsScore.getId(),NumberConstant.ZERO);
@@ -444,7 +454,7 @@ public class KwcContractLogisticsScoreServiceImpl implements IKwcContractLogisti
         updateDriverScoreDto.setProviderEntId(logisticsScore.getProviderEntId());
         updateDriverScoreDto.setLogisticsEntId(logisticsScore.getLogisticsEntId());
         updateDriverScoreDto.setScoreChange(logisticsScoreDetail.getScoreChange());
-        updateDriverScoreDto.setLogisticsEntScore(logisticsScore.getScore());
+        updateDriverScoreDto.setAfterUpdateLogisticsEntScore(logisticsScore.getScore());
         updateDriverScoreDto.setAction(logisticsScoreDetail.getAction());
         updateDriverScoreDto.setOperatorType(operatorType);
         HttpResult result = driverScoreFeignService.update(updateDriverScoreDto);
@@ -460,15 +470,17 @@ public class KwcContractLogisticsScoreServiceImpl implements IKwcContractLogisti
      * @param scoreId 评分id
      * @return 评分记录
      */
-    private KwcContractLogisticsScoreDetail buildResetLogisticsScoreDetail(Long scoreId) {
+    private KwcContractLogisticsScoreDetail buildResetLogisticsScoreDetail(Long scoreId,BigDecimal originScore) {
         KwcContractLogisticsScoreDetail logisticsScoreDetail = new KwcContractLogisticsScoreDetail();
         long scoreDetailId = new IdWorker(1L).nextId();
         logisticsScoreDetail.setId(scoreDetailId);
         logisticsScoreDetail.setScoreId(scoreId);
         logisticsScoreDetail.setInfluenceBy(LoginUserHolder.getUserId());
         logisticsScoreDetail.setAction("重置企业评分");
-        logisticsScoreDetail.setScore(new BigDecimal(customConfig.getLogisticsInitScore()));
-        logisticsScoreDetail.setScoreChange(null);
+        BigDecimal score = new BigDecimal(customConfig.getLogisticsInitScore());
+        BigDecimal scoreChange = score.subtract(originScore);
+        logisticsScoreDetail.setScore(score);
+        logisticsScoreDetail.setScoreChange(scoreChange);
         logisticsScoreDetail.setStatus(NumberConstant.ONE);
         logisticsScoreDetail.setCreateBy(LoginUserHolder.getUserId());
         logisticsScoreDetail.setCreateTime(new Date());

+ 2 - 1
sckw-modules/sckw-fleet/src/main/java/com/sckw/fleet/dao/KwfDriverScoreDetailMapper.java

@@ -3,6 +3,7 @@ package com.sckw.fleet.dao;
 import com.baomidou.mybatisplus.core.mapper.BaseMapper;
 import com.sckw.fleet.model.KwfDriverScoreDetail;
 import org.apache.ibatis.annotations.Mapper;
+import org.apache.ibatis.annotations.Param;
 
 import java.util.List;
 
@@ -45,7 +46,7 @@ public interface KwfDriverScoreDetailMapper extends BaseMapper<KwfDriverScoreDet
      * @param driverScoreDetails 司机评分明细
      * @return 结果
      */
-    public int insertBatch(List<KwfDriverScoreDetail> driverScoreDetails);
+    public int insertBatch(@Param("driverScoreDetails") List<KwfDriverScoreDetail> driverScoreDetails);
 
     /**
      * 修改司机评分明细

+ 3 - 2
sckw-modules/sckw-fleet/src/main/java/com/sckw/fleet/dao/KwfDriverScoreMapper.java

@@ -3,6 +3,7 @@ package com.sckw.fleet.dao;
 import com.baomidou.mybatisplus.core.mapper.BaseMapper;
 import com.sckw.fleet.model.KwfDriverScore;
 import org.apache.ibatis.annotations.Mapper;
+import org.apache.ibatis.annotations.Param;
 
 import java.util.List;
 
@@ -45,7 +46,7 @@ public interface KwfDriverScoreMapper extends BaseMapper<KwfDriverScore>
      * @param driverScores 司机评分
      * @return 结果
      */
-    public int insertBatch(List<KwfDriverScore> driverScores);
+    public int insertBatch(@Param("driverScores") List<KwfDriverScore> driverScores);
 
     /**
      * 批量修改司机评分
@@ -53,7 +54,7 @@ public interface KwfDriverScoreMapper extends BaseMapper<KwfDriverScore>
      * @param driverScores 司机评分
      * @return 结果
      */
-    public int updateScoreBatch(List<KwfDriverScore> driverScores);
+    public int updateScoreBatch(@Param("driverScores") List<KwfDriverScore> driverScores);
 
     /**
      * 删除司机评分

+ 19 - 14
sckw-modules/sckw-fleet/src/main/java/com/sckw/fleet/service/KwfDriverScoreService.java

@@ -56,12 +56,12 @@ public class KwfDriverScoreService {
         KwfDriverScore driverScoreDto = new KwfDriverScore();
         driverScoreDto.setProviderEntId(updateDriverScoreDto.getProviderEntId());
         driverScoreDto.setLogisticsEntId(updateDriverScoreDto.getLogisticsEntId());
-        List<KwfDriverScore> kwfDriverScores = kwfDriverScoreMapper.selectKwfDriverScoreList(driverScoreDto).stream().filter(v-> driversMap.containsKey(v.getDriverId())).toList();
+        List<KwfDriverScore> kwfDriverScores = new ArrayList<>(kwfDriverScoreMapper.selectKwfDriverScoreList(driverScoreDto).stream().filter(v -> driversMap.containsKey(v.getDriverId())).toList());
         //对未进行评分初始化的司机进行初始化
-        KwfDriverScoreAndDetail kwfDriverScoreAndDetail = initDriverScore(updateDriverScoreDto, driversMap, kwfDriverScores);
-        //将刚初始化的评分记录放入司机评分集合中
-        if(kwfDriverScoreAndDetail != null){
-            kwfDriverScores.addAll(kwfDriverScoreAndDetail.getDriverScores());
+        initDriverScore(updateDriverScoreDto, driversMap, kwfDriverScores);
+        if(CollectionUtils.isEmpty(kwfDriverScores)){
+            //无已存在的司机评分,直接返回
+            return;
         }
         //
         //根据不同的操作类型调用不同的更新方法
@@ -94,6 +94,10 @@ public class KwfDriverScoreService {
         kwfDriverScoreMapper.insertBatch(kwfDriverScoreAndDetail.getDriverScores());
         //批量插入评分明细
         kwfDriverScoreDetailMapper.insertBatch(kwfDriverScoreAndDetail.getDriverScoreDetails());
+        try {
+            Thread.sleep(1000);
+        } catch (InterruptedException ignored) {
+        }
         return kwfDriverScoreAndDetail;
     }
 
@@ -136,7 +140,7 @@ public class KwfDriverScoreService {
                     break;
                 }
                 //计算当前司机最大可改的分
-                BigDecimal changeMaxScore = updateDriverScoreDto.getLogisticsEntScore().subtract(kwfDriverScore.getScore());
+                BigDecimal changeMaxScore = updateDriverScoreDto.getAfterUpdateLogisticsEntScore().subtract(kwfDriverScore.getScore());
                 //计算司机实际可改的分
                 BigDecimal changeScore = exceedScore.abs().compareTo(changeMaxScore.abs()) < 0 ? exceedScore : changeMaxScore;
                 kwfDriverScore.setScore(kwfDriverScore.getScore().add(changeScore));
@@ -170,6 +174,7 @@ public class KwfDriverScoreService {
         //构建司机评分记录集合
         List<KwfDriverScore> driverScores = new ArrayList<>();
         List<KwfDriverScoreDetail> driverScoreDetails = new ArrayList<>();
+        BigDecimal initScore = new BigDecimal("0.00");
         IdWorker idWorker = new IdWorker(1L);
         for (KwfDriver driver : drivers) {
             long scoreId = idWorker.nextId();
@@ -179,14 +184,14 @@ public class KwfDriverScoreService {
             driverScore.setProviderEntId(updateDriverScoreDto.getProviderEntId());
             driverScore.setLogisticsEntId(updateDriverScoreDto.getLogisticsEntId());
             driverScore.setDriverId(driver.getId());
-            driverScore.setScore(updateDriverScoreDto.getLogisticsEntScore());
+            driverScore.setScore(updateDriverScoreDto.getAfterUpdateLogisticsEntScore());
             driverScore.setCreateBy(LoginUserHolder.getUserId());
             driverScore.setCreateTime(now);
             driverScore.setUpdateBy(LoginUserHolder.getUserId());
             driverScore.setUpdateTime(now);
             driverScores.add(driverScore);
             //构建司机评分明细
-            KwfDriverScoreDetail scoreDetail = buildDriverScoreDetail(updateDriverScoreDto, driverScore, driver, new BigDecimal("0.00"));
+            KwfDriverScoreDetail scoreDetail = buildDriverScoreDetail("司机评分初始化", driverScore, driver, initScore);
             driverScoreDetails.add(scoreDetail);
         }
 
@@ -195,7 +200,7 @@ public class KwfDriverScoreService {
 
     private KwfDriverScoreAndDetail buildDriverScoreUpdateRecord(UpdateDriverScoreDto updateDriverScoreDto,Map<Long, KwfDriver> driversMap,List<KwfDriverScore> kwfDriverScores,List<KwfDriverScore> kwfDriverScoresNew){
         //原评分记录集合
-        Map<Long, KwfDriverScore> originDriverScoreMap = kwfDriverScores.stream().collect(Collectors.toMap(KwfDriverScore::getId, v -> v));
+        Map<Long, KwfDriverScore> originDriverScoreMap = kwfDriverScores.stream().collect(Collectors.toMap(KwfDriverScore::getDriverId, v -> v));
         //构建司机评分记录集合
         List<KwfDriverScoreDetail> driverScoreDetails = new ArrayList<>();
         Date now = new Date();
@@ -205,7 +210,7 @@ public class KwfDriverScoreService {
             driverScore.setUpdateTime(now);
             //构建司机评分明细信息
             KwfDriverScore originDriverScore = originDriverScoreMap.get(driverScore.getDriverId());
-            KwfDriverScoreDetail scoreDetail = buildDriverScoreDetail(updateDriverScoreDto, driverScore, driversMap.get(driverScore.getDriverId()), originDriverScore.getScore());
+            KwfDriverScoreDetail scoreDetail = buildDriverScoreDetail(updateDriverScoreDto.getAction(), driverScore, driversMap.get(driverScore.getDriverId()), originDriverScore.getScore());
             driverScoreDetails.add(scoreDetail);
         }
 
@@ -218,11 +223,11 @@ public class KwfDriverScoreService {
         for (KwfDriverScore driverScore : kwfDriverScores) {
             BigDecimal originDriverScore = driverScore.getScore();
             //更新评分记录更新信息
-            driverScore.setScore(updateDriverScoreDto.getLogisticsEntScore());
+            driverScore.setScore(updateDriverScoreDto.getAfterUpdateLogisticsEntScore());
             driverScore.setUpdateBy(LoginUserHolder.getUserId());
             driverScore.setUpdateTime(new Date());
             //构建司机评分明细信息
-            KwfDriverScoreDetail scoreDetail = buildDriverScoreDetail(updateDriverScoreDto, driverScore, driversMap.get(driverScore.getDriverId()), originDriverScore);
+            KwfDriverScoreDetail scoreDetail = buildDriverScoreDetail(updateDriverScoreDto.getAction(), driverScore, driversMap.get(driverScore.getDriverId()), originDriverScore);
             driverScoreDetails.add(scoreDetail);
         }
 
@@ -230,7 +235,7 @@ public class KwfDriverScoreService {
     }
 
 
-    private KwfDriverScoreDetail buildDriverScoreDetail(UpdateDriverScoreDto updateDriverScoreDto,KwfDriverScore driverScore,KwfDriver driver,BigDecimal originDriverScore){
+    private KwfDriverScoreDetail buildDriverScoreDetail(String action,KwfDriverScore driverScore,KwfDriver driver,BigDecimal originDriverScore){
         IdWorker idWorker = new IdWorker(1L);
         Date now = new Date();
         //构建司机评分明细信息
@@ -240,7 +245,7 @@ public class KwfDriverScoreService {
         if(driver != null){
             scoreDetail.setDriverId(driver.getId());
         }
-        scoreDetail.setAction(updateDriverScoreDto.getAction());
+        scoreDetail.setAction(action);
         BigDecimal scoreChange = driverScore.getScore().subtract(originDriverScore);
         scoreDetail.setScoreChange(scoreChange);
         scoreDetail.setScore(driverScore.getScore());

+ 13 - 25
sckw-modules/sckw-fleet/src/main/resources/mapper/KwfDriverScoreDetailMapper.xml

@@ -64,33 +64,21 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
     </insert>
 
     <insert id="insertBatch">
-        insert into kwf_driver_score_detail
-        <trim prefix="(" suffix=")" suffixOverrides=",">
-            <if test="id != null">id,</if>
-            <if test="scoreId != null">score_id,</if>
-            <if test="driverId != null">driver_id,</if>
-            <if test="action != null and action != ''">action,</if>
-            <if test="scoreChange != null">score_change,</if>
-            <if test="score != null">score,</if>
-            <if test="createBy != null">create_by,</if>
-            <if test="createTime != null">create_time,</if>
-            <if test="updateBy != null">update_by,</if>
-            <if test="updateTime != null">update_time,</if>
-        </trim>
+        insert into kwf_driver_score_detail  (id,score_id,driver_id,action,score_change,score,create_by,create_time,update_by,update_time)
         values
         <foreach collection="driverScoreDetails" item="scoreDetail" separator=",">
-            <trim prefix="(" suffix=")" suffixOverrides=",">
-                <if test="id != null">#{scoreDetail.id},</if>
-                <if test="scoreId != null">#{scoreDetail.scoreId},</if>
-                <if test="driverId != null">#{scoreDetail.driverId},</if>
-                <if test="action != null and action != ''">#{scoreDetail.action},</if>
-                <if test="scoreChange != null">#{scoreDetail.scoreChange},</if>
-                <if test="score != null">#{scoreDetail.score},</if>
-                <if test="createBy != null">#{scoreDetail.createBy},</if>
-                <if test="createTime != null">#{scoreDetail.createTime},</if>
-                <if test="updateBy != null">#{scoreDetail.updateBy},</if>
-                <if test="updateTime != null">#{scoreDetail.updateTime},</if>
-            </trim>
+            (
+             #{scoreDetail.id},
+             #{scoreDetail.scoreId},
+             #{scoreDetail.driverId},
+             #{scoreDetail.action},
+             #{scoreDetail.scoreChange},
+             #{scoreDetail.score},
+             #{scoreDetail.createBy},
+             #{scoreDetail.createTime},
+             #{scoreDetail.updateBy},
+             #{scoreDetail.updateTime}
+            )
         </foreach>
     </insert>
 

+ 7 - 26
sckw-modules/sckw-fleet/src/main/resources/mapper/KwfDriverScoreMapper.xml

@@ -61,31 +61,12 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
     </insert>
 
     <insert id="insertBatch">
-        insert into kwf_driver_score
-        <trim prefix="(" suffix=")" suffixOverrides=",">
-            <if test="id != null">id,</if>
-            <if test="providerEntId != null">provider_ent_id,</if>
-            <if test="logisticsEntId != null">logistics_ent_id,</if>
-            <if test="driverId != null">driver_id,</if>
-            <if test="score != null">score,</if>
-            <if test="createBy != null">create_by,</if>
-            <if test="createTime != null">create_time,</if>
-            <if test="updateBy != null">update_by,</if>
-            <if test="updateTime != null">update_time,</if>
-        </trim>
+        insert into kwf_driver_score (id,provider_ent_id,logistics_ent_id,driver_id,score,create_by,create_time,update_by,update_time)
         values
         <foreach collection="driverScores" item="driverScore" separator=",">
-            <trim prefix="(" suffix=")" suffixOverrides=",">
-                <if test="id != null">#{driverScore.id},</if>
-                <if test="providerEntId != null">#{driverScore.providerEntId},</if>
-                <if test="logisticsEntId != null">#{driverScore.logisticsEntId},</if>
-                <if test="driverId != null">#{driverScore.driverId},</if>
-                <if test="score != null">#{driverScore.score},</if>
-                <if test="createBy != null">#{driverScore.createBy},</if>
-                <if test="createTime != null">#{driverScore.createTime},</if>
-                <if test="updateBy != null">#{driverScore.updateBy},</if>
-                <if test="updateTime != null">#{driverScore.updateTime},</if>
-            </trim>
+            (
+             #{driverScore.id},#{driverScore.providerEntId},#{driverScore.logisticsEntId},#{driverScore.driverId},#{driverScore.score},#{driverScore.createBy},#{driverScore.createTime},#{driverScore.updateBy},#{driverScore.updateTime}
+            )
         </foreach>
     </insert>
 
@@ -109,9 +90,9 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
         <foreach collection="driverScores" item="driverScore" separator=";">
             update kwf_driver_score
             <set>
-                <if test="score != null">score = #{driverScore.score},</if>
-                <if test="updateBy != null">update_by = #{driverScore.updateBy},</if>
-                <if test="updateTime != null">update_time = #{driverScore.updateTime},</if>
+                <if test="driverScore.score != null">score = #{driverScore.score},</if>
+                <if test="driverScore.updateBy != null">update_by = #{driverScore.updateBy},</if>
+                <if test="driverScore.updateTime != null">update_time = #{driverScore.updateTime},</if>
             </set>
             WHERE id = #{driverScore.id}
         </foreach>