FengChaoYu 4 mesi fa
parent
commit
29e7ad5452

+ 166 - 5
mall-server-api/src/main/java/com/gree/mall/manager/logic/workorder/AppraiseRelaLogic.java

@@ -11,8 +11,11 @@ import com.gree.mall.manager.bean.workorder.PgAppraiseApplyBean;
 import com.gree.mall.manager.bean.workorder.PgAppraiseApplyVO;
 import com.gree.mall.manager.bean.workorder.PgAppraiseCategoryVO;
 import com.gree.mall.manager.commonmapper.CommonMapper;
+import com.gree.mall.manager.enums.ExamineStatusEnum;
 import com.gree.mall.manager.enums.workorder.AppraiseApplyStatusEnum;
 import com.gree.mall.manager.enums.workorder.AppraiseConfigTypeEnum;
+import com.gree.mall.manager.enums.workorder.AppraiseOnusEnum;
+import com.gree.mall.manager.enums.workorder.AppraiseStatusEnum;
 import com.gree.mall.manager.exception.RemoteServiceException;
 import com.gree.mall.manager.logic.common.CommonLogic;
 import com.gree.mall.manager.plus.entity.*;
@@ -43,6 +46,7 @@ public class AppraiseRelaLogic {
     private final PgAppraiseApplyService pgAppraiseApplyService;
     private final PgAppraiseApplyItemService pgAppraiseApplyItemService;
     private final PgOrderBaseService pgOrderBaseService;
+    private final OrderBaseLogic orderBaseLogic;
 
     public List<PgAppraiseConfig> configList() {
         AdminUserCom adminUser = commonLogic.getAdminUser();
@@ -204,15 +208,18 @@ public class AppraiseRelaLogic {
         }
         final PgOrderBase orderBase = pgOrderBaseService.getById(bean.getOrderBaseId());
 
-        final Integer applyCount = pgAppraiseApplyService.lambdaQuery()
-                .eq(PgAppraiseApply::getIsSecond, true)
+        final PgAppraiseApply beforeApply = pgAppraiseApplyService.lambdaQuery()
+                .eq(PgAppraiseApply::getIsSecond, false)
                 .eq(PgAppraiseApply::getOrderBaseId, bean.getOrderBaseId())
-                .count();
+                .orderByDesc(PgAppraiseApply::getApplyTime)
+                .one();
+
+        final int applyCount = Objects.isNull(beforeApply) ? 0 : 1;
 
         // 查询有没有驳回不可申诉人
         final Integer superEndCount = pgAppraiseApplyService.lambdaQuery()
                 .eq(PgAppraiseApply::getOrderBaseId, bean.getOrderBaseId())
-                .isNotNull(PgAppraiseApply::getRejectTime)
+                .isNotNull(PgAppraiseApply::getCloseTime)
                 .count();
 
         if (superEndCount > 0) {
@@ -236,6 +243,11 @@ public class AppraiseRelaLogic {
                     .eq(PgAppraiseConfig::getType, applyCount == 0 ? AppraiseConfigTypeEnum.FIRST_A.getKey() : AppraiseConfigTypeEnum.SECOND_A.getKey())
                     .one();
 
+            if (config.getType().equals(AppraiseConfigTypeEnum.SECOND_A.getKey())) {
+                // 获取首次申诉审核时间
+                overTime = beforeApply.getInfoConfirmTime();
+            }
+
             final int val = Integer.parseInt(config.getVal());
             endTime = DateUtil.offsetHour(overTime, val);
 
@@ -265,8 +277,15 @@ public class AppraiseRelaLogic {
             throw new RemoteServiceException("已有中差评申诉“审核通过”记录, 提交失败");
         }
 
+        bean.setStatus(AppraiseApplyStatusEnum.WAIT_CENTER.getKey());
+        bean.setApplyTime(DateUtil.date());
+        bean.setApplyBy(adminUser.getNickName());
+        bean.setCompanyWechatId(orderBase.getCompanyWechatId());
+        bean.setCompanyWechatName(orderBase.getCompanyWechatName());
         if (isAdd) {
+            bean.setOverTime(Objects.isNull(orderBase.getOverTime()) ? orderBase.getOverTime() : orderBase.getWebsitOverTime());
             bean.insert();
+            orderBaseLogic.dow(orderBase.getId());
         } else {
             bean.updateById();
         }
@@ -284,9 +303,37 @@ public class AppraiseRelaLogic {
         }
     }
 
+    @Transactional
     public void applyConfirm(PgAppraiseApplyBean bean) {
         AdminUserCom adminUser = commonLogic.getAdminUser();
-        final PgAppraiseApply apply = pgAppraiseApplyService.getById(bean.getId());
+        PgAppraiseApply apply = pgAppraiseApplyService.getById(bean.getId());
+        PgOrderBase orderBase = pgOrderBaseService.getById(apply.getOrderBaseId());
+
+        if (!apply.getStatus().equals(AppraiseApplyStatusEnum.WAIT_CENTER.getKey())) {
+            throw new RemoteServiceException("申诉状态已发生改变");
+        }
+
+        // 查询有没有驳回可重诉人
+        final Integer superCount = pgAppraiseApplyService.lambdaQuery()
+                .eq(PgAppraiseApply::getOrderBaseId, bean.getOrderBaseId())
+                .isNotNull(PgAppraiseApply::getRejectTime)
+                .count();
+
+        if (superCount == 0) {
+            // 首次审核时间不能超时, 二次审核时间不能超时,从网点提交首次申诉时间开始计算
+            Date applyTime = apply.getApplyTime();
+            final PgAppraiseConfig config = pgAppraiseConfigService.lambdaQuery()
+                    .eq(PgAppraiseConfig::getCompanyWechatId, apply.getCompanyWechatId())
+                    .eq(PgAppraiseConfig::getType, !apply.getIsSecond() ? AppraiseConfigTypeEnum.FIRST_A.getKey() : AppraiseConfigTypeEnum.SECOND_A.getKey())
+                    .one();
+            final int val = Integer.parseInt(config.getVal());
+            Date endTime = DateUtil.offsetHour(applyTime, val);
+
+            String str = !apply.getIsSecond() ? "首次" : "二次";
+            if (DateUtil.date().after(endTime)) {
+                throw new RemoteServiceException("已超" + str + "审核时间, 审核失败");
+            }
+        }
 
         if (StringUtils.isBlank(bean.getParentCategoryId())) {
             throw new RemoteServiceException("请选择问题大类");
@@ -294,19 +341,133 @@ public class AppraiseRelaLogic {
         if (StringUtils.isBlank(bean.getCategoryId())) {
             throw new RemoteServiceException("请选择问题小类");
         }
+        if (StringUtils.isBlank(bean.getExamineResult())) {
+            throw new RemoteServiceException("审核备注");
+        }
+        if (Objects.isNull(bean.getIsWebsitCall())) {
+            throw new RemoteServiceException("请选择网点是否指引用户接听400回访电话");
+        }
+        if (Objects.isNull(bean.getWebsitResult())) {
+            throw new RemoteServiceException("请选择判定网点");
+        }
+        if (Objects.isNull(bean.getWorkerResult())) {
+            throw new RemoteServiceException("请选择判定服务人员");
+        }
+
+        apply.setInfoConfirmTime(apply.getIsSecond() ? null : DateUtil.date())
+                .setSettleConfirmTime(apply.getIsSecond() ? DateUtil.date() : null)
+                .setConfirmBy(adminUser.getNickName())
+                .setStatus(ExamineStatusEnum.OK.getKey());
+
+
+        if (apply.getWebsitResult().equals(AppraiseOnusEnum.NOT.getKey())) {
+            // 首次申诉:判定网点【无责】的,则申诉成功,审核结果为【好评】,不触发二次可申诉
+            // 二次申诉:判定网点【无责】的,则申诉成功,审核结果为【好评】
+            apply.setExamineResult(AppraiseStatusEnum.A.getKey());
+
+        } else if (apply.getWebsitResult().equals(AppraiseOnusEnum.HALF.getKey())) {
+            // 首次申诉:判定网点为【半责】的,审核结果为【剔除】,不触发起二次可申诉
+            // 二次申诉:判定网点【半责】的,审核结果为【剔除】
+            apply.setExamineResult(AppraiseStatusEnum.T.getKey());
+        } else if (apply.getWebsitResult().equals(AppraiseOnusEnum.ALL.getKey())) {
+            // 首次申诉:判定网点【全责】的,审核结果为【驳回】,触发二次可申诉
+            // 二次申诉:判定网点【全责】的,审核结果为【驳回】,维护原评价
+            apply.setExamineResult(orderBase.getAppraiseStatus());
+        }
+
+        pgOrderBaseService.lambdaUpdate()
+                .set(PgOrderBase::getAppraiseApplyResult, apply.getExamineResult())
+                .eq(PgOrderBase::getId, orderBase.getId())
+                .update();
     }
 
     public void applyReject(String id) {
         pgAppraiseApplyService.lambdaUpdate()
+                .set(PgAppraiseApply::getApplyBy, null)
+                .set(PgAppraiseApply::getApplyTime, null)
                 .set(PgAppraiseApply::getStatus, AppraiseApplyStatusEnum.WAIT.getKey())
                 .eq(PgAppraiseApply::getId, id)
+                .eq(PgAppraiseApply::getStatus, AppraiseApplyStatusEnum.WAIT_CENTER.getKey())
                 .update();
     }
 
+    @Transactional
     public void batchUpdateReset(List<String> ids) {
+        if (CollectionUtil.isEmpty(ids)) {
+            throw new RemoteServiceException("请选择记录");
+        }
+        AdminUserCom adminUser = commonLogic.getAdminUser();
+
+        List<PgAppraiseApply> applyList = pgAppraiseApplyService.lambdaQuery()
+                .in(PgAppraiseApply::getId, ids)
+                .in(PgAppraiseApply::getStatus, AppraiseApplyStatusEnum.OK.getKey(), AppraiseApplyStatusEnum.WAIT_CENTER.getKey())
+                .isNull(PgAppraiseApply::getRejectTime)
+                .isNull(PgAppraiseApply::getCloseBy)
+                .list();
+
+        final List<String> normIds = applyList.stream().map(PgAppraiseApply::getId).collect(Collectors.toList());
+
+        pgAppraiseApplyService.lambdaUpdate()
+                .set(PgAppraiseApply::getRejectBy, adminUser.getNickName())
+                .set(PgAppraiseApply::getRejectTime, DateUtil.date())
+                .in(PgAppraiseApply::getId, normIds)
+                .update();
+
+        List<PgAppraiseApply> copyList = pgAppraiseApplyService.lambdaQuery()
+                .in(PgAppraiseApply::getId, ids)
+                .list();
+        List<PgAppraiseApply> newList = new ArrayList<>();
+        for (PgAppraiseApply apply : copyList) {
+            PgAppraiseApply copy = new PgAppraiseApply();
+            copy.setOrderBaseId(apply.getOrderBaseId())
+                    .setOrderType(apply.getOrderType())
+                    .setOrderSmallType(apply.getOrderSmallType())
+                    .setOrderSmallTypeText(apply.getOrderSmallTypeText())
+                    .setCompanyWechatId(apply.getCompanyWechatId())
+                    .setCompanyWechatName(apply.getCompanyWechatName())
+                    .setStatus(AppraiseApplyStatusEnum.WAIT.getKey())
+                    .setWorkerId(apply.getWorkerId())
+                    .setWorkerNumber(apply.getWorkerNumber())
+                    .setWorkerName(apply.getWorkerName())
+                    .setWorkerMobile(apply.getWorkerMobile())
+                    .setWorkerIdcard(apply.getWorkerIdcard())
+                    .setWebsitId(apply.getWebsitId())
+                    .setWebsitName(apply.getWebsitName())
+                    .setOverTime(apply.getOverTime())
+                    .setAppraiseStatus(apply.getAppraiseStatus())
+                    .setAppraiseContent(apply.getAppraiseContent())
+                    .setAppraiseSource(apply.getAppraiseSource())
+                    .setReason(apply.getReason())
+                    .setUserName(apply.getUserName())
+                    .setUserMobile(apply.getUserMobile())
+                    .setAddress(apply.getAddress());
+
+
+            newList.add(copy);
+        }
+
+        pgAppraiseApplyService.saveBatch(newList);
+        pgOrderBaseService.lambdaUpdate()
+                .set(PgOrderBase::getAppraiseApplyResult, null)
+                .eq(PgOrderBase::getId, applyList.stream()
+                        .map(PgAppraiseApply::getOrderBaseId)
+                        .distinct()
+                        .collect(Collectors.toList()))
+                .update();
     }
 
     public void batchUpdateEnd(List<String> ids) {
+        if (CollectionUtil.isEmpty(ids)) {
+            throw new RemoteServiceException("请选择记录");
+        }
+        AdminUserCom adminUser = commonLogic.getAdminUser();
+        pgAppraiseApplyService.lambdaUpdate()
+                .set(PgAppraiseApply::getStatus, AppraiseApplyStatusEnum.OK.getKey())
+                .set(PgAppraiseApply::getCloseBy, adminUser.getNickName())
+                .set(PgAppraiseApply::getCloseTime, DateUtil.date())
+                .in(PgAppraiseApply::getId, ids)
+                .in(PgAppraiseApply::getStatus, AppraiseApplyStatusEnum.WAIT.getKey(), AppraiseApplyStatusEnum.WAIT_CENTER.getKey())
+                .update();
     }