FengChaoYu il y a 3 mois
Parent
commit
87786acc0f

+ 19 - 0
mall-server-api/src/main/java/com/gree/mall/manager/bean/quality/QualityFeedbackBean.java

@@ -0,0 +1,19 @@
+package com.gree.mall.manager.bean.quality;
+
+import com.gree.mall.manager.plus.entity.QualityFeedback;
+import com.gree.mall.manager.plus.entity.QualityFeedbackItem;
+import io.swagger.annotations.ApiModel;
+import io.swagger.annotations.ApiModelProperty;
+import lombok.Data;
+import lombok.EqualsAndHashCode;
+
+import java.util.List;
+
+@EqualsAndHashCode(callSuper = true)
+@Data
+@ApiModel
+public class QualityFeedbackBean extends QualityFeedback {
+
+    @ApiModelProperty(value = "明细")
+    private List<QualityFeedbackItem> items;
+}

+ 19 - 0
mall-server-api/src/main/java/com/gree/mall/manager/bean/quality/QualityFeedbackCountBean.java

@@ -0,0 +1,19 @@
+package com.gree.mall.manager.bean.quality;
+
+import io.swagger.annotations.ApiModel;
+import io.swagger.annotations.ApiModelProperty;
+import lombok.Data;
+
+@Data
+@ApiModel
+public class QualityFeedbackCountBean {
+
+    @ApiModelProperty(value = "保存")
+    private Integer saveCount;
+
+    @ApiModelProperty(value = "待审核")
+    private Integer waitCount;
+
+    @ApiModelProperty(value = "驳回可修改")
+    private Integer rejectCount;
+}

+ 179 - 0
mall-server-api/src/main/java/com/gree/mall/manager/bean/quality/QualityFeedbackVO.java

@@ -0,0 +1,179 @@
+package com.gree.mall.manager.bean.quality;
+
+import com.gree.mall.manager.annotation.ZfireField;
+import com.gree.mall.manager.enums.IsEnum;
+import com.gree.mall.manager.enums.quality.ExamineQualityFeedbackStatusEnum;
+import com.gree.mall.manager.enums.quality.PartSendEnum;
+import io.swagger.annotations.ApiModel;
+import io.swagger.annotations.ApiModelProperty;
+import lombok.Data;
+
+import java.util.Date;
+
+@ApiModel
+@Data
+@ZfireField(tbName = "a")
+public class QualityFeedbackVO {
+
+    @ZfireField(hide = true)
+    private String id;
+
+    @ApiModelProperty(value = "状态")
+    private ExamineQualityFeedbackStatusEnum status;
+
+    @ZfireField(hide = true)
+    @ApiModelProperty(value = "商户编号")
+    private String companyWechatId;
+
+    @ZfireField(hide = true)
+    @ApiModelProperty(value = "商户名称")
+    private String companyWechatName;
+
+    @ApiModelProperty(value = "反馈主题")
+    private String title;
+
+    @ApiModelProperty(value = "是否售前机")
+    private IsEnum isSalesBefore;
+
+    @ApiModelProperty(value = "反馈网点编号")
+    private String websitId;
+
+    @ApiModelProperty(value = "反馈网点名称")
+    private String websitName;
+
+    @ZfireField(hide = true)
+    @ApiModelProperty(value = "反馈时间")
+    private Date createTime;
+
+    @ApiModelProperty(value = "云售后4.0工单号")
+    private String orderNo;
+
+    @ApiModelProperty(value = "工程师名称")
+    private String workerName;
+
+    @ApiModelProperty(value = "工程师电话")
+    private String workerMobie;
+
+    @ApiModelProperty(value = "客户名称")
+    private String customerName;
+
+    @ApiModelProperty(value = "客户电话")
+    private String customerMobile;
+
+    @ZfireField(hide = true)
+    @ApiModelProperty(value = "省")
+    private String province;
+
+    @ZfireField(hide = true)
+    @ApiModelProperty(value = "省id")
+    private String provinceId;
+
+    @ZfireField(hide = true)
+    @ApiModelProperty(value = "市")
+    private String city;
+
+    @ZfireField(hide = true)
+    @ApiModelProperty(value = "市id")
+    private String cityId;
+
+    @ZfireField(hide = true)
+    @ApiModelProperty(value = "区")
+    private String area;
+
+    @ZfireField(hide = true)
+    @ApiModelProperty(value = "区id")
+    private String areaId;
+
+    @ZfireField(hide = true)
+    @ApiModelProperty(value = "街道")
+    private String street;
+
+    @ZfireField(hide = true)
+    @ApiModelProperty(value = "街道id")
+    private String streetId;
+
+    @ApiModelProperty(value = "详细地址")
+    private String address;
+
+    @ApiModelProperty(value = "产品大类")
+    private String mainId;
+
+    @ApiModelProperty(value = "产品大类名称")
+    private String mainName;
+
+    @ApiModelProperty(value = "产品小类")
+    private String smallId;
+
+    @ApiModelProperty(value = "产品小类名称")
+    private String smallName;
+
+    @ApiModelProperty(value = "系列名称")
+    private String seriesName;
+
+    @ApiModelProperty(value = "机型名称")
+    private String productName;
+
+    @ApiModelProperty(value = "内机条码")
+    private String insideCode;
+
+    @ApiModelProperty(value = "外机条码")
+    private String outCode;
+
+    @ApiModelProperty(value = "数量")
+    private Integer num;
+
+    @ApiModelProperty(value = "出厂日期")
+    private Date outDate;
+
+    @ApiModelProperty(value = "安装或使用日期")
+    private Date useDate;
+
+    @ApiModelProperty(value = "报修或发生日期")
+    private Date repairDate;
+
+    @ApiModelProperty(value = "有无配件寄回")
+    private PartSendEnum isPartSend;
+
+    @ApiModelProperty(value = "故障配件名称及规格")
+    private String bugPartName;
+
+    @ApiModelProperty(value = "故障代码(包含检测器检测)")
+    private String bugPartCode;
+
+    @ApiModelProperty(value = "是否需要处理方案")
+    private IsEnum isNeedPlan;
+
+    @ApiModelProperty(value = "要求提供日期")
+    private Date supplyDate;
+
+    @ApiModelProperty(value = "故障描述")
+    private String bugRemark;
+
+    @ApiModelProperty(value = "网点分析")
+    private String websitAnalyse;
+
+    @ApiModelProperty(value = "网点处理方法")
+    private String websitHandleMethod;
+
+    @ZfireField(hide = true)
+    @ApiModelProperty(value = "创建人")
+    private String createBy;
+
+    @ApiModelProperty(value = "网点提交人")
+    private String submitBy;
+
+    @ApiModelProperty(value = "网点提交时间")
+    private Date submitTime;
+
+    @ApiModelProperty(value = "中心审核人")
+    private String confirmBy;
+
+    @ApiModelProperty(value = "中心审核时间")
+    private Date confirmTime;
+
+    @ApiModelProperty(value = "审核备注")
+    private String remark;
+
+    @ApiModelProperty(value = "是否上传总部")
+    private IsEnum isUpload;
+}

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

@@ -25,6 +25,7 @@ import com.gree.mall.manager.bean.listvo.param.WorkOrderZfireParam;
 import com.gree.mall.manager.bean.listvo.workorder.*;
 import com.gree.mall.manager.bean.order.LeaseOrderVO;
 import com.gree.mall.manager.bean.order.refund.OrderOfflineRefundVO;
+import com.gree.mall.manager.bean.quality.QualityFeedbackVO;
 import com.gree.mall.manager.bean.serivce.BuyServiceRecordVO;
 import com.gree.mall.manager.bean.settle.SettleExpenseItemVO;
 import com.gree.mall.manager.bean.settle.SettleExpenseVO;
@@ -758,4 +759,6 @@ public interface CommonMapper {
     Integer workerSignConfirmCount();
 
     IPage<WorkerElecConfirmManualVO> workerSignConfirmManualPage(Page page, @Param("ex") ZfireParamBean zfireParamBean);
+
+    IPage<QualityFeedbackVO> qualityFeedbackPage(Page page, @Param("ex") ZfireParamBean zfireParamBean);
 }

+ 108 - 0
mall-server-api/src/main/java/com/gree/mall/manager/controller/quality/QualityFeedbackController.java

@@ -0,0 +1,108 @@
+package com.gree.mall.manager.controller.quality;
+
+import cn.hutool.core.lang.TypeReference;
+import com.baomidou.mybatisplus.core.metadata.IPage;
+import com.gree.mall.manager.annotation.ZfireList;
+import com.gree.mall.manager.bean.quality.QualityFeedbackBean;
+import com.gree.mall.manager.bean.quality.QualityFeedbackCountBean;
+import com.gree.mall.manager.bean.quality.QualityFeedbackVO;
+import com.gree.mall.manager.constant.Constant;
+import com.gree.mall.manager.enums.quality.ExamineQualityFeedbackStatusEnum;
+import com.gree.mall.manager.exception.RemoteServiceException;
+import com.gree.mall.manager.helper.ResponseHelper;
+import com.gree.mall.manager.logic.quality.QualityFeedbackLogic;
+import com.gree.mall.manager.zfire.bean.ZfireParamBean;
+import com.gree.mall.manager.zfire.util.FieldUtils;
+import io.swagger.annotations.Api;
+import io.swagger.annotations.ApiOperation;
+import io.swagger.annotations.ApiParam;
+import lombok.extern.slf4j.Slf4j;
+import org.springframework.integration.redis.util.RedisLockRegistry;
+import org.springframework.web.bind.annotation.*;
+
+import javax.annotation.Resource;
+import javax.servlet.http.HttpServletRequest;
+import javax.servlet.http.HttpServletResponse;
+import java.util.concurrent.TimeUnit;
+import java.util.concurrent.locks.Lock;
+
+@Slf4j
+@RestController
+@Api(value = "质量反馈API", tags = {"质量反馈API"})
+@RequestMapping(value = "/quality/feedback", produces = "application/json; charset=utf-8")
+public class QualityFeedbackController {
+
+    @Resource
+    QualityFeedbackLogic qualityFeedbackLogic;
+    @Resource
+    RedisLockRegistry redisLockRegistry;
+
+    @ZfireList
+    @PostMapping("/list")
+    @ApiOperation(value = "列表")
+    public ResponseHelper<IPage<QualityFeedbackVO>> list(@RequestBody ZfireParamBean zfireParamBean) {
+        IPage<QualityFeedbackVO> list = qualityFeedbackLogic.list(zfireParamBean);
+        return ResponseHelper.success(list, new TypeReference<QualityFeedbackVO>() {
+        });
+    }
+
+    @PostMapping("/list/export")
+    @ApiOperation(value = "导出")
+    public void listExport(@RequestBody ZfireParamBean zfireParamBean, HttpServletRequest request, HttpServletResponse response) throws Exception {
+        //2.查询要导出的内容
+        IPage<QualityFeedbackVO> list = qualityFeedbackLogic.list(zfireParamBean);
+        //3.导出
+        FieldUtils.exportData(list.getRecords(), zfireParamBean.getExportFields(), request, response);
+    }
+
+    @PostMapping("/detail")
+    @ApiOperation("详情")
+    public ResponseHelper<QualityFeedbackBean> detail(
+            @ApiParam(value = "id", required = true) @RequestParam String id
+    ) throws RemoteServiceException {
+        QualityFeedbackBean detail = qualityFeedbackLogic.detail(id);
+        return ResponseHelper.success(detail);
+    }
+
+    @PostMapping("/count")
+    @ApiOperation("统计")
+    public ResponseHelper<QualityFeedbackCountBean> count() throws RemoteServiceException {
+        QualityFeedbackCountBean count = qualityFeedbackLogic.count();
+        return ResponseHelper.success(count);
+    }
+
+    @PostMapping("/add")
+    @ApiOperation("新增")
+    public ResponseHelper add(@RequestBody QualityFeedbackCountBean bean) throws RemoteServiceException {
+        qualityFeedbackLogic.add(bean);
+        return ResponseHelper.success();
+    }
+
+    @PostMapping("/update")
+    @ApiOperation("修改")
+    public ResponseHelper update(@RequestBody QualityFeedbackCountBean bean) throws RemoteServiceException {
+        qualityFeedbackLogic.update(bean);
+        return ResponseHelper.success();
+    }
+
+    @PostMapping("/confirm")
+    @ApiOperation("中心审核")
+    public ResponseHelper manualConfirm(
+            @ApiParam(value = "id", required = true) @RequestParam String id,
+            @ApiParam(value = "状态 OK=通过 FAIL=驳回", required = true) @RequestParam ExamineQualityFeedbackStatusEnum status
+    ) throws Exception {
+        Lock obtain = redisLockRegistry.obtain(Constant.RedisPrefix.LOCK_ORDER + id);
+        if (!obtain.tryLock(10, TimeUnit.SECONDS)) {
+            throw new RemoteServiceException("记录冻结中");
+        }
+        try {
+            qualityFeedbackLogic.confirm(id, status);
+            return ResponseHelper.success();
+        } catch (Exception e) {
+            log.error("【人工审核处理】失败", e);
+            throw e;
+        } finally {
+            obtain.unlock();
+        }
+    }
+}

+ 20 - 0
mall-server-api/src/main/java/com/gree/mall/manager/enums/quality/ExamineQualityFeedbackStatusEnum.java

@@ -0,0 +1,20 @@
+package com.gree.mall.manager.enums.quality;
+
+import com.gree.mall.manager.enums.base.BaseEnum;
+import lombok.Getter;
+
+@Getter
+public enum ExamineQualityFeedbackStatusEnum implements BaseEnum {
+    SAVE("SAVE","保存"),
+    WAIT("WAIT","待审核"),
+    OK("OK","通过"),
+    REJECT("REJECT","驳回可修改"),
+    FAIL("FAIL","驳回不可修改"),
+    ;
+
+    ExamineQualityFeedbackStatusEnum(String key, String remark) {
+        this.key=key;this.remark = remark;
+    }
+    private String key;
+    private String remark;
+}

+ 28 - 0
mall-server-api/src/main/java/com/gree/mall/manager/enums/quality/PartSendEnum.java

@@ -0,0 +1,28 @@
+package com.gree.mall.manager.enums.quality;
+
+import com.baomidou.mybatisplus.annotation.EnumValue;
+import com.baomidou.mybatisplus.annotation.IEnum;
+import com.fasterxml.jackson.annotation.JsonValue;
+import com.gree.mall.manager.enums.base.BaseEnum;
+import lombok.AccessLevel;
+import lombok.Getter;
+import lombok.RequiredArgsConstructor;
+
+@Getter
+@RequiredArgsConstructor(access = AccessLevel.PRIVATE)
+public enum PartSendEnum implements BaseEnum, IEnum<Boolean> {
+    Y("true","有"),
+    N("false","无"),
+    ;
+
+    @EnumValue
+    @JsonValue
+    private final String key;
+    private final String remark;
+
+
+    @Override
+    public Boolean getValue() {
+        return Boolean.parseBoolean(key);
+    }
+}

+ 85 - 0
mall-server-api/src/main/java/com/gree/mall/manager/logic/quality/QualityFeedbackLogic.java

@@ -0,0 +1,85 @@
+package com.gree.mall.manager.logic.quality;
+
+import cn.hutool.core.collection.CollectionUtil;
+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.quality.QualityFeedbackBean;
+import com.gree.mall.manager.bean.quality.QualityFeedbackCountBean;
+import com.gree.mall.manager.bean.quality.QualityFeedbackVO;
+import com.gree.mall.manager.commonmapper.CommonMapper;
+import com.gree.mall.manager.enums.quality.ExamineQualityFeedbackStatusEnum;
+import com.gree.mall.manager.logic.common.CommonLogic;
+import com.gree.mall.manager.plus.entity.QualityFeedback;
+import com.gree.mall.manager.plus.entity.QualityFeedbackItem;
+import com.gree.mall.manager.plus.service.QualityFeedbackItemService;
+import com.gree.mall.manager.plus.service.QualityFeedbackService;
+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.springframework.beans.BeanUtils;
+import org.springframework.stereotype.Service;
+
+import java.util.List;
+
+@Service
+@Slf4j
+@RequiredArgsConstructor
+public class QualityFeedbackLogic {
+
+    private final CommonLogic commonLogic;
+    private final CommonMapper commonMapper;
+    private final QualityFeedbackService qualityFeedbackService;
+    private final QualityFeedbackItemService qualityFeedbackItemService;
+
+    public IPage<QualityFeedbackVO> list(ZfireParamBean zfireParamBean) {
+        AdminUserCom adminUser = commonLogic.getAdminUser();
+        FieldUtils.supplyParam(zfireParamBean, QualityFeedbackVO.class, adminUser);
+
+        return commonMapper.qualityFeedbackPage(new Page(zfireParamBean.getPageNum(), zfireParamBean.getPageSize()), zfireParamBean);
+    }
+
+    public QualityFeedbackBean detail(String id) {
+        QualityFeedbackBean bean = new QualityFeedbackBean();
+        QualityFeedback qualityFeedback = qualityFeedbackService.getById(id);
+        BeanUtils.copyProperties(qualityFeedback, bean);
+
+        final List<QualityFeedbackItem> items = qualityFeedbackItemService.lambdaQuery()
+                .eq(QualityFeedbackItem::getQualityFeedbckId, id)
+                .list();
+        bean.setItems(items);
+
+        return bean;
+    }
+
+    public QualityFeedbackCountBean count() {
+        AdminUserCom adminUser = commonLogic.getAdminUser();
+        QualityFeedbackCountBean bean = new QualityFeedbackCountBean();
+        Integer saveCount = qualityFeedbackService.lambdaQuery()
+                .eq(QualityFeedback::getStatus, ExamineQualityFeedbackStatusEnum.SAVE.getKey())
+                .in(CollectionUtil.isNotEmpty(adminUser.getAdminWebsitIds()), QualityFeedback::getWebsitId, adminUser.getAdminWebsitIds())
+                .count();
+        Integer waitCount = qualityFeedbackService.lambdaQuery()
+                .eq(QualityFeedback::getStatus, ExamineQualityFeedbackStatusEnum.WAIT.getKey())
+                .in(CollectionUtil.isNotEmpty(adminUser.getAdminWebsitIds()), QualityFeedback::getWebsitId, adminUser.getAdminWebsitIds())
+                .count();
+        Integer rejectCount = qualityFeedbackService.lambdaQuery()
+                .eq(QualityFeedback::getStatus, ExamineQualityFeedbackStatusEnum.REJECT.getKey())
+                .in(CollectionUtil.isNotEmpty(adminUser.getAdminWebsitIds()), QualityFeedback::getWebsitId, adminUser.getAdminWebsitIds())
+                .count();
+        bean.setSaveCount(saveCount);
+        bean.setWaitCount(waitCount);
+        bean.setRejectCount(rejectCount);
+        return bean;
+    }
+
+    public void add(QualityFeedbackCountBean bean) {
+    }
+
+    public void update(QualityFeedbackCountBean bean) {
+    }
+
+    public void confirm(String id, ExamineQualityFeedbackStatusEnum status) {
+    }
+}

+ 1 - 1
mall-server-api/src/main/java/com/gree/mall/manager/logic/worker/WorkerElecConfirmLogic.java

@@ -53,7 +53,7 @@ public class WorkerElecConfirmLogic {
 //            }
 //        }
         adminUser.setAdminCompanyWechat(null);
-        FieldUtils.materialParam(zfireParamBean, WorkerElecConfirmVO.class, adminUser);
+        FieldUtils.supplyParam(zfireParamBean, WorkerElecConfirmVO.class, adminUser);
 
         return commonMapper.workerSignConfirmPage(new Page(zfireParamBean.getPageNum(), zfireParamBean.getPageSize()), zfireParamBean);
 

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

@@ -1715,5 +1715,23 @@
         ${ex.orderBy}
     </select>
 
+    <select id="qualityFeedbackPage" resultType="com.gree.mall.manager.bean.quality.QualityFeedbackVO">
+        SELECT
+        ${ex.selected}
+        FROM
+            quality_feedback a
+        ${ex.query}
+        <if test="ex.adminWebsitIds != null and ex.adminWebsitIds.size > 0">
+            AND a.websit_id IN
+            <foreach item="item" index="index" collection="ex.adminWebsitIds" open="(" separator="," close=")">
+                #{item}
+            </foreach>
+        </if>
+        <if test="ex.orderBy == null or ex.orderBy ==''">
+            ORDER BY a.create_time DESC
+        </if>
+        ${ex.orderBy}
+    </select>
+
 
 </mapper>