Browse Source

1.工单申诉
2.申诉类别配置

FengChaoYu 4 tháng trước cách đây
mục cha
commit
858c899cf6

+ 44 - 0
mall-server-api/src/main/java/com/gree/mall/manager/bean/workorder/PgAppraiseCategoryVO.java

@@ -0,0 +1,44 @@
+package com.gree.mall.manager.bean.workorder;
+
+import com.gree.mall.manager.annotation.ZfireField;
+import com.gree.mall.manager.enums.StatusEnum;
+import io.swagger.annotations.ApiModel;
+import io.swagger.annotations.ApiModelProperty;
+import lombok.Data;
+
+import java.util.Date;
+
+@Data
+@ApiModel
+@ZfireField(tbName = "a")
+public class PgAppraiseCategoryVO {
+    @ZfireField(hide = true)
+    @ApiModelProperty(value = "id")
+    private String id;
+
+    @ZfireField(tbName = "b", colName = "name", isQuery = false)
+    @ApiModelProperty(value = "问题大类")
+    private String parentName;
+
+    @ApiModelProperty(value = "问题小类")
+    private String name;
+
+    @ZfireField(hide = true)
+    @ApiModelProperty(value = "父id")
+    private String parentId;
+
+    @ApiModelProperty(value = "状态")
+    private StatusEnum status;
+
+    @ApiModelProperty(value = "创建时间")
+    private Date createTime;
+
+    @ApiModelProperty(value = "创建人")
+    private String createBy;
+
+    @ApiModelProperty(value = "修改时间")
+    private Date updateTime;
+
+    @ApiModelProperty(value = "修改人")
+    private String updateBy;
+}

+ 2 - 0
mall-server-api/src/main/java/com/gree/mall/manager/commonmapper/CommonMapper.java

@@ -735,4 +735,6 @@ public interface CommonMapper {
     List<String> selectMainContractIdByValidDate(@Param("companyId") String companyWechatId, @Param("onDate") Date validDate);
 
     IPage<WorkerTeamVO> workerTeamPage(Page page, @Param("ex") ZfireParamBean zfireParamBean, @Param("workerId") String workerId);
+
+    IPage<PgAppraiseCategoryVO> appraiseCategoryList(Page page, @Param("ex") ZfireParamBean zfireParamBean);
 }

+ 79 - 0
mall-server-api/src/main/java/com/gree/mall/manager/controller/workerorder/AppraiseApplyController.java

@@ -0,0 +1,79 @@
+package com.gree.mall.manager.controller.workerorder;
+
+import cn.hutool.core.lang.TypeReference;
+import com.baomidou.mybatisplus.core.metadata.IPage;
+import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
+import com.gree.mall.manager.annotation.ZfireList;
+import com.gree.mall.manager.bean.workorder.PgAppraiseCategoryVO;
+import com.gree.mall.manager.constant.Constant;
+import com.gree.mall.manager.exception.RemoteServiceException;
+import com.gree.mall.manager.helper.ResponseHelper;
+import com.gree.mall.manager.logic.workorder.AppraiseRelaLogic;
+import com.gree.mall.manager.plus.entity.PgAppraiseCategory;
+import com.gree.mall.manager.plus.entity.PgAppraiseConfig;
+import com.gree.mall.manager.zfire.bean.ZfireParamBean;
+import io.swagger.annotations.Api;
+import io.swagger.annotations.ApiOperation;
+import lombok.extern.slf4j.Slf4j;
+import org.springframework.integration.redis.util.RedisLockRegistry;
+import org.springframework.web.bind.annotation.*;
+import org.springframework.web.multipart.MultipartFile;
+
+import javax.annotation.Resource;
+import java.util.List;
+import java.util.concurrent.TimeUnit;
+import java.util.concurrent.locks.Lock;
+
+@Slf4j
+@RestController
+@Api(value = "评价申诉API", tags = {"评价申诉API"})
+@RequestMapping(value = "/appraise/apply", produces = "application/json; charset=utf-8")
+public class AppraiseApplyController {
+
+    @Resource
+    AppraiseRelaLogic appraiseRelaLogic;
+    @Resource
+    RedisLockRegistry redisLockRegistry;
+
+    @PostMapping("/config/list")
+    @ApiOperation(value = "评价配置-列表")
+    public ResponseHelper<List<PgAppraiseConfig>> configList() {
+        List<PgAppraiseConfig> config = appraiseRelaLogic.configList();
+        return ResponseHelper.success(config);
+    }
+
+    @ZfireList
+    @PostMapping("/category/list")
+    @ApiOperation(value = "评价问题类型-列表")
+    public ResponseHelper<Page<PgAppraiseCategoryVO>> categoryList(
+            @RequestBody ZfireParamBean zfireParamBean
+    ) {
+        IPage<PgAppraiseCategoryVO> vo = appraiseRelaLogic.categoryList(zfireParamBean);
+        return ResponseHelper.success(vo, new TypeReference<PgAppraiseCategoryVO>() {});
+    }
+
+    @PostMapping("/category/save")
+    @ApiOperation(value = "评价问题类型-保存")
+    public ResponseHelper categorySave(PgAppraiseCategory category) {
+        appraiseRelaLogic.categorySave(category);
+        return ResponseHelper.success();
+    }
+
+    @PostMapping("/category/import")
+    @ApiOperation(value = "评价问题类型-导入(下载模板:评价问题类别模板.xlsx)")
+    public ResponseHelper<String> categoryImportData(
+            @RequestPart("file") MultipartFile file
+    ) throws Exception {
+        Lock obtain = redisLockRegistry.obtain(Constant.RedisPrefix.LOCK_ORDER);
+        if (!obtain.tryLock(10, TimeUnit.SECONDS)) {
+            throw new RemoteServiceException("正在导入中,请稍后再试");
+        }
+        try {
+            appraiseRelaLogic.categoryImportData(file);
+        } finally {
+            obtain.unlock();
+        }
+
+        return ResponseHelper.success();
+    }
+}

+ 23 - 0
mall-server-api/src/main/java/com/gree/mall/manager/enums/workorder/AppraiseConfigTypeEnum.java

@@ -0,0 +1,23 @@
+package com.gree.mall.manager.enums.workorder;
+
+import com.baomidou.mybatisplus.annotation.EnumValue;
+import com.fasterxml.jackson.annotation.JsonValue;
+import com.gree.mall.manager.enums.base.BaseEnum;
+import lombok.AccessLevel;
+import lombok.AllArgsConstructor;
+import lombok.Getter;
+
+@Getter
+@AllArgsConstructor(access = AccessLevel.PRIVATE)
+public enum AppraiseConfigTypeEnum implements BaseEnum {
+    FIRST_A("FIRST_A","首次申诉"),
+    SECOND_A("SECOND_A","二次申诉"),
+    FIRST_C("FIRST_C","首次审核"),
+    SECOND_C("SECOND_C","二次审核"),;
+
+    @JsonValue
+    @EnumValue
+    private final String key;
+    private final String remark;
+
+}

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

@@ -0,0 +1,149 @@
+package com.gree.mall.manager.logic.workorder;
+
+import cn.hutool.core.util.StrUtil;
+import com.baomidou.mybatisplus.core.metadata.IPage;
+import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
+import com.gree.mall.manager.bean.admin.AdminUserCom;
+import com.gree.mall.manager.bean.workorder.PgAppraiseCategoryVO;
+import com.gree.mall.manager.commonmapper.CommonMapper;
+import com.gree.mall.manager.exception.RemoteServiceException;
+import com.gree.mall.manager.logic.common.CommonLogic;
+import com.gree.mall.manager.plus.entity.PgAppraiseCategory;
+import com.gree.mall.manager.plus.entity.PgAppraiseConfig;
+import com.gree.mall.manager.plus.service.PgAppraiseApplyService;
+import com.gree.mall.manager.plus.service.PgAppraiseCategoryService;
+import com.gree.mall.manager.plus.service.PgAppraiseConfigService;
+import com.gree.mall.manager.utils.CommonUtils;
+import com.gree.mall.manager.utils.excel.ExcelUtils;
+import com.gree.mall.manager.zfire.bean.ZfireParamBean;
+import com.gree.mall.manager.zfire.util.FieldUtils;
+import lombok.RequiredArgsConstructor;
+import lombok.extern.slf4j.Slf4j;
+import org.apache.commons.lang3.StringUtils;
+import org.springframework.stereotype.Service;
+import org.springframework.transaction.annotation.Transactional;
+import org.springframework.web.multipart.MultipartFile;
+
+import java.util.*;
+import java.util.stream.Collectors;
+
+@Slf4j
+@Service
+@RequiredArgsConstructor
+public class AppraiseRelaLogic {
+    private final CommonLogic commonLogic;
+    private final CommonMapper commonMapper;
+    private final PgAppraiseConfigService pgAppraiseConfigService;
+    private final PgAppraiseCategoryService pgAppraiseCategoryService;
+    private final PgAppraiseApplyService pgAppraiseApplyService;
+
+    public List<PgAppraiseConfig> configList() {
+        AdminUserCom adminUser = commonLogic.getAdminUser();
+        return pgAppraiseConfigService.lambdaQuery()
+                .eq(PgAppraiseConfig::getCompanyWechatId, adminUser.getCompanyWechatId())
+                .list();
+    }
+
+    public IPage<PgAppraiseCategoryVO> categoryList(ZfireParamBean zfireParamBean) {
+        AdminUserCom adminUser = commonLogic.getAdminUser();
+        FieldUtils.supplyParam(zfireParamBean, PgAppraiseCategoryVO.class, adminUser);
+        return commonMapper.appraiseCategoryList(new Page(zfireParamBean.getPageNum(), zfireParamBean.getPageSize()), zfireParamBean);
+    }
+
+    @Transactional
+    public void categorySave(PgAppraiseCategory category) {
+        AdminUserCom adminUser = commonLogic.getAdminUser();
+        boolean isAdd = StringUtils.isBlank(category.getId());
+
+        category.setCompanyWechatId(adminUser.getCompanyWechatId())
+                .setCompanyWechatName(adminUser.getCompanyName());
+
+        if (!isAdd) {
+            final PgAppraiseCategory old = pgAppraiseCategoryService.getById(category.getId());
+            category.setCompanyWechatId(old.getCompanyWechatId())
+                    .setCompanyWechatName(old.getCompanyWechatName());
+        }
+
+        String preStr = "大类";
+        if (StringUtils.isNotBlank(category.getParentId()) && !category.getParentId().equals("0")) {
+            preStr = "小类";
+        }
+
+        if (StringUtils.isBlank(category.getName())) {
+            throw new RemoteServiceException(preStr + "名称不能为空");
+        }
+
+        final Integer count = pgAppraiseCategoryService.lambdaQuery()
+                .eq(PgAppraiseCategory::getCompanyWechatId, category.getCompanyWechatId())
+                .eq(PgAppraiseCategory::getName, category.getName())
+                .ne(!isAdd, PgAppraiseCategory::getId, category.getId())
+                .count();
+        if (count > 0) {
+            throw new RemoteServiceException("名称重复存在");
+        }
+
+        if (isAdd) {
+            category.insert();
+        } else {
+            category.updateById();
+        }
+    }
+
+    @Transactional
+    public void categoryImportData(MultipartFile file) throws Exception {
+        AdminUserCom adminUser = commonLogic.getAdminUser();
+        if (adminUser.getType() == 2) {
+            throw new RemoteServiceException("平台账号禁止操作");
+        }
+
+        String companyWechatId = adminUser.getAdminCompanyWechat().getCompanyWechatId();
+        String companyName = adminUser.getAdminCompanyWechat().getCompanyName();
+
+        List<Object> objects = ExcelUtils.importExcel(file);
+        Map<String, Set<String>> importMap = new HashMap<>();
+
+        for (int i = 0; i < objects.size(); i++) {
+            List<Object> row = (List<Object>) objects.get(i);
+            row = CommonUtils.initList2(row, 2);
+
+            if (Objects.isNull(row.get(0))) {
+                throw new RemoteServiceException("第" + (i + 1) + "行, 大类名称不能为空");
+            }
+            if (Objects.isNull(row.get(1))) {
+                throw new RemoteServiceException("第" + (i + 1) + "行, 小类名称不能为空");
+            }
+
+            String parentName = (String) row.get(0);
+            String subName = (String) row.get(1);
+
+            if (importMap.containsKey(StrUtil.trim(parentName))) {
+                importMap.get(StrUtil.trim(parentName)).add(StrUtil.trim(subName));
+            } else {
+                importMap.put(StrUtil.trim(parentName), new HashSet<String>() {{ this.add(StrUtil.trim(subName)); }});
+            }
+        }
+
+        final List<PgAppraiseCategory> categoryList = pgAppraiseCategoryService.lambdaQuery()
+                .eq(PgAppraiseCategory::getCompanyWechatId, companyWechatId)
+                .eq(PgAppraiseCategory::getParentId, "0")
+                .list();
+
+        final Map<String, String> parentMap = categoryList.stream()
+                .collect(Collectors.toMap(PgAppraiseCategory::getName, PgAppraiseCategory::getId));
+
+        for (Map.Entry<String, Set<String>> entry : importMap.entrySet()) {
+            if (!parentMap.containsKey(entry.getKey())) {
+                continue;
+            }
+            final String parentId = parentMap.get(entry.getKey());
+            for (String name : entry.getValue()) {
+                PgAppraiseCategory category = new PgAppraiseCategory();
+                category.setCompanyWechatId(companyWechatId)
+                        .setCompanyWechatName(companyName)
+                        .setParentId(parentId)
+                        .setName(name);
+                this.categorySave(category);
+            }
+        }
+    }
+}

+ 13 - 0
mall-server-api/src/main/resources/mapper/CommonMapper.xml

@@ -1566,5 +1566,18 @@
         ${ex.orderBy}
     </select>
 
+    <select id="appraiseCategoryList" resultType="com.gree.mall.manager.bean.workorder.PgAppraiseCategoryVO">
+        SELECT
+            ${ex.selected}
+        FROM
+            pg_appraise_category a
+            LEFT JOIN pg_appraise_category b ON a.parent_id = b.id
+        ${ex.query}
+        <if test="ex.orderBy == null or ex.orderBy ==''">
+            ORDER BY a.create_time DESC
+        </if>
+        ${ex.orderBy}
+    </select>
+
 
 </mapper>

BIN
mall-server-api/src/main/resources/template/评价问题类别模板.xlsx