Procházet zdrojové kódy

开发入驻审核相关的接口

jinshihui před 5 dny
rodič
revize
5eb82b5f83

+ 41 - 1
nightFragrance-admin/src/main/java/com/ylx/web/controller/massage/MaTechnicianController.java

@@ -24,6 +24,7 @@ import com.ylx.massage.domain.MaProject;
 import com.ylx.massage.domain.dto.MaProjectSaveDto;
 import com.ylx.massage.domain.dto.MaProjectUpdateDto;
 import com.ylx.massage.domain.dto.MaTechnicianAuditQueryDTO;
+import com.ylx.massage.domain.dto.MaTechnicianAuditSubmitDTO;
 import com.ylx.massage.domain.dto.MaTechnicianMerchantAddDTO;
 import com.ylx.massage.domain.dto.MaTechnicianMerchantQueryDTO;
 import com.ylx.massage.domain.vo.*;
@@ -329,7 +330,7 @@ public class MaTechnicianController extends BaseController {
     @PreAuthorize("@ss.hasPermi('technician:technician:edit')")
     @Log(title = "商户", businessType = BusinessType.UPDATE)
     @PutMapping("/merchant/{id}")
-    public AjaxResult editMerchant(@PathVariable("id") Long id, @RequestBody MaTechnicianMerchantAddDTO dto) {
+    public AjaxResult editMerchant(@PathVariable("id") Integer id, @RequestBody MaTechnicianMerchantAddDTO dto) {
         try {
             LoginUser loginUser = getLoginUser();
             return toAjax(maTechnicianService.updateMerchant(id, dto, loginUser));
@@ -379,6 +380,27 @@ public class MaTechnicianController extends BaseController {
         }
     }
 
+    /**
+     * 商户入驻审核
+     *
+     * @param id  商户ID
+     * @param dto 审核提交参数
+     * @return AjaxResult 结果
+     */
+    @ApiOperation("商户入驻审核")
+    @PreAuthorize("@ss.hasPermi('technician:technician:edit')")
+    @Log(title = "商户入驻审核", businessType = BusinessType.UPDATE)
+    @PutMapping("/merchant/audit/{id}/submit")
+    public AjaxResult submitMerchantAudit(@PathVariable("id") Integer id, @RequestBody MaTechnicianAuditSubmitDTO dto) {
+        try {
+            LoginUser loginUser = getLoginUser();
+            return toAjax(maTechnicianService.submitMerchantAudit(id, dto, loginUser));
+        } catch (Exception e) {
+            e.printStackTrace();
+            throw new RuntimeException(e);
+        }
+    }
+
     /**
      * 查询商户列表
      *
@@ -416,6 +438,24 @@ public class MaTechnicianController extends BaseController {
         }
     }
 
+    /**
+     * 查看商户证照
+     *
+     * @param id 商户ID
+     * @return R<MaTechnicianCertificateVO> 商户证照
+     */
+    @ApiOperation("后台查看商户证照")
+    @PreAuthorize("@ss.hasPermi('technician:technician:query')")
+    @GetMapping("/merchant/{id}/certificate")
+    public R<MaTechnicianCertificateVO> merchantCertificate(@PathVariable("id") Integer id) {
+        try {
+            return R.ok(maTechnicianService.selectMerchantCertificate(id));
+        } catch (Exception e) {
+            e.printStackTrace();
+            throw new RuntimeException(e);
+        }
+    }
+
     /**
      * 修改技师
      */

+ 2 - 2
nightFragrance-massage/src/main/java/com/ylx/attendanceconfig/domain/AttendanceRule.java

@@ -40,9 +40,9 @@ public class AttendanceRule implements Serializable {
     /**
      * 商户ID,为空表示平台默认规则
      */
-    @ApiModelProperty("商户ID,为空表示平台默认规则")
+    /*@ApiModelProperty("商户ID,为空表示平台默认规则")
     @TableField("merchant_id")
-    private String merchantId;
+    private String merchantId;*/
 
     /**
      * 基本工作时长,单位:小时

+ 9 - 2
nightFragrance-massage/src/main/java/com/ylx/massage/domain/MaTechnician.java

@@ -27,10 +27,10 @@ public class MaTechnician extends BaseEntity {
     private static final long serialVersionUID = 1L;
 
     /**
-     * id
+     * 主键ID(商户ID)
      */
     @TableId(type = IdType.AUTO)
-    private Long id;
+    private Integer id;
 
     /**
      * 姓名
@@ -238,6 +238,13 @@ public class MaTechnician extends BaseEntity {
     @Excel(name = "审核状态:-1-申请入住,0-待入驻,1-待审核,2-审核通过,3-审核驳回")
     private Integer auditStatus;
 
+    /**
+     * 审核备注
+     */
+    @Excel(name = "审核备注")
+    @TableField("audit_remark")
+    private String auditRemark;
+
     /**
      * 审批时间
      */

+ 25 - 0
nightFragrance-massage/src/main/java/com/ylx/massage/domain/dto/MaTechnicianAuditSubmitDTO.java

@@ -0,0 +1,25 @@
+package com.ylx.massage.domain.dto;
+
+import io.swagger.annotations.ApiModel;
+import io.swagger.annotations.ApiModelProperty;
+import lombok.Data;
+
+/**
+ * 后台商户入驻审核提交参数。
+ */
+@Data
+@ApiModel(value = "MaTechnicianAuditSubmitDTO", description = "后台商户入驻审核提交参数")
+public class MaTechnicianAuditSubmitDTO {
+
+    /**
+     * 审核状态:2-审核通过,3-审核驳回。
+     */
+    @ApiModelProperty("审核状态:2-审核通过 3-审核驳回")
+    private Integer auditStatus;
+
+    /**
+     * 审核备注。
+     */
+    @ApiModelProperty("审核备注")
+    private String auditRemark;
+}

+ 12 - 0
nightFragrance-massage/src/main/java/com/ylx/massage/domain/vo/MaTechnicianAuditListVO.java

@@ -44,6 +44,12 @@ public class MaTechnicianAuditListVO {
     @ApiModelProperty("电话")
     private String tePhone;
 
+    /**
+     * 昵称。
+     */
+    @ApiModelProperty("昵称")
+    private String teNickName;
+
     /**
      * 形象照。
      */
@@ -56,6 +62,12 @@ public class MaTechnicianAuditListVO {
     @ApiModelProperty("意向城市")
     private String teAddress;
 
+    /**
+     * 简介
+     */
+    @ApiModelProperty("简介")
+    private String teBrief;
+
     /**
      * 开通服务名称。
      */

+ 43 - 0
nightFragrance-massage/src/main/java/com/ylx/massage/domain/vo/MaTechnicianCertificateVO.java

@@ -0,0 +1,43 @@
+package com.ylx.massage.domain.vo;
+
+import io.swagger.annotations.ApiModel;
+import io.swagger.annotations.ApiModelProperty;
+import lombok.Data;
+
+/**
+ * 后台商户证照展示对象
+ */
+@Data
+@ApiModel(value = "MaTechnicianCertificateVO", description = "后台商户证照展示对象")
+public class MaTechnicianCertificateVO {
+
+    @ApiModelProperty("商户ID")
+    private Integer merchantId;
+
+    @ApiModelProperty("形象照")
+    private String avatar;
+
+    @ApiModelProperty("生活照")
+    private String lifePhotos;
+
+    @ApiModelProperty("身份证")
+    private String idCard;
+
+    @ApiModelProperty("健康证")
+    private String healthCertificate;
+
+    @ApiModelProperty("从业资格证")
+    private String qualificationCertificate;
+
+    @ApiModelProperty("无犯罪证明")
+    private String noCrimeRecord;
+
+    @ApiModelProperty("承诺书")
+    private String commitmentPdf;
+
+    @ApiModelProperty("承诺视频")
+    private String commitmentVideo;
+
+    @ApiModelProperty("承诺录音")
+    private String commitmentAudio;
+}

+ 30 - 0
nightFragrance-massage/src/main/java/com/ylx/massage/mapper/MaTechnicianMapper.java

@@ -111,6 +111,26 @@ public interface MaTechnicianMapper extends BaseMapper<MaTechnician>
         return selectById(id);
     }
 
+    /**
+     * 根据商户ID查询商户证照。
+     *
+     * @param id 商户ID
+     * @return 商户信息
+     */
+    default MaTechnician selectMerchantCertificateById(Integer id) {
+        return selectById(id);
+    }
+
+    /**
+     * 根据商户ID查询商户。
+     *
+     * @param id 商户ID
+     * @return 商户信息
+     */
+    default MaTechnician selectMerchantById(Long id) {
+        return selectById(id);
+    }
+
     /**
      * 根据商户ID更新商户。
      *
@@ -131,6 +151,16 @@ public interface MaTechnicianMapper extends BaseMapper<MaTechnician>
         return updateById(maTechnician);
     }
 
+    /**
+     * 根据商户ID提交待入驻审核。
+     *
+     * @param maTechnician 商户审核状态信息
+     * @return 影响行数
+     */
+    default int submitMerchantAuditById(MaTechnician maTechnician) {
+        return updateById(maTechnician);
+    }
+
     List<MerchantVo> getMerchantRecommend(@Param("dto") MassageMerchantRecommendDto dto);
 
     /**

+ 20 - 1
nightFragrance-massage/src/main/java/com/ylx/massage/service/IMaTechnicianService.java

@@ -10,11 +10,13 @@ import com.ylx.massage.domain.MaProject;
 import com.ylx.massage.domain.MaTechnician;
 import com.ylx.massage.domain.dto.MaProjectSaveDto;
 import com.ylx.massage.domain.dto.MaTechnicianAuditQueryDTO;
+import com.ylx.massage.domain.dto.MaTechnicianAuditSubmitDTO;
 import com.ylx.massage.domain.dto.MassageMerchantRecommendDto;
 import com.ylx.massage.domain.dto.MaTechnicianMerchantAddDTO;
 import com.ylx.massage.domain.dto.MaTechnicianMerchantQueryDTO;
 import com.ylx.massage.domain.vo.MaTechnicianAppAddVo;
 import com.ylx.massage.domain.vo.MaTechnicianAuditListVO;
+import com.ylx.massage.domain.vo.MaTechnicianCertificateVO;
 import com.ylx.massage.domain.vo.MaTechnicianMerchantDetailVO;
 import com.ylx.massage.domain.vo.MaTechnicianMerchantListVO;
 import com.ylx.massage.domain.vo.MerchantVo;
@@ -70,7 +72,7 @@ public interface IMaTechnicianService extends IService<MaTechnician> {
      * @param loginUser 当前登录用户
      * @return 结果
      */
-    public int updateMerchant(Long id, MaTechnicianMerchantAddDTO dto, LoginUser loginUser);
+    public int updateMerchant(Integer id, MaTechnicianMerchantAddDTO dto, LoginUser loginUser);
 
     /**
      * 后台上传商户合同文件
@@ -92,6 +94,15 @@ public interface IMaTechnicianService extends IService<MaTechnician> {
     Page<MaTechnicianAuditListVO> selectMerchantAuditList(Page<MaTechnicianAuditListVO> page,
                                                           MaTechnicianAuditQueryDTO dto);
 
+    /**
+     * 商户待入驻提交审核。
+     *
+     * @param id        商户ID
+     * @param loginUser 当前登录用户
+     * @return 结果
+     */
+    int submitMerchantAudit(Integer id, MaTechnicianAuditSubmitDTO dto, LoginUser loginUser);
+
     /**
      * 后台查询商户列表
      *
@@ -110,6 +121,14 @@ public interface IMaTechnicianService extends IService<MaTechnician> {
      */
     public MaTechnicianMerchantDetailVO selectMerchantDetail(Long id);
 
+    /**
+     * 后台查询商户证照
+     *
+     * @param id 商户ID
+     * @return 商户证照
+     */
+    MaTechnicianCertificateVO selectMerchantCertificate(Integer id);
+
     /**
      * 修改技师
      *

+ 96 - 7
nightFragrance-massage/src/main/java/com/ylx/massage/service/impl/MaTechnicianServiceImpl.java

@@ -17,11 +17,13 @@ import com.ylx.massage.domain.MaProject;
 import com.ylx.massage.domain.MaTeProject;
 import com.ylx.massage.domain.dto.MaProjectSaveDto;
 import com.ylx.massage.domain.dto.MaTechnicianAuditQueryDTO;
+import com.ylx.massage.domain.dto.MaTechnicianAuditSubmitDTO;
 import com.ylx.massage.domain.dto.MaTechnicianMerchantAddDTO;
 import com.ylx.massage.domain.dto.MaTechnicianMerchantQueryDTO;
 import com.ylx.massage.domain.dto.MassageMerchantRecommendDto;
 import com.ylx.massage.domain.vo.MaTechnicianAppAddVo;
 import com.ylx.massage.domain.vo.MaTechnicianAuditListVO;
+import com.ylx.massage.domain.vo.MaTechnicianCertificateVO;
 import com.ylx.massage.domain.vo.MaTechnicianMerchantDetailVO;
 import com.ylx.massage.domain.vo.MaTechnicianMerchantListVO;
 import com.ylx.massage.domain.vo.MerchantVo;
@@ -54,6 +56,10 @@ public class MaTechnicianServiceImpl extends ServiceImpl<MaTechnicianMapper, MaT
     private static final int ENABLED = 1;
     private static final int DEFAULT_AGE = 18;
     private static final int AUDIT_APPROVED = 2;
+    private static final int AUDIT_WAIT_ENTER = 0;
+    private static final int AUDIT_WAIT_REVIEW = 1;
+    private static final int AUDIT_REJECTED = 3;
+    private static final int AUDIT_REMARK_MAX_LENGTH = 500;
     private static final int NS_STATUS_NOT_ON_DUTY = -1;
     private static final int DEFAULT_STAT_VALUE = 0;
     private static final Integer NOT_DELETED = 0;
@@ -272,11 +278,11 @@ public class MaTechnicianServiceImpl extends ServiceImpl<MaTechnicianMapper, MaT
      */
     @Override
     @Transactional(rollbackFor = Exception.class)
-    public int updateMerchant(Long id, MaTechnicianMerchantAddDTO dto, LoginUser loginUser) {
+    public int updateMerchant(Integer id, MaTechnicianMerchantAddDTO dto, LoginUser loginUser) {
         if (id == null) {
             throw new ServiceException("商户ID不能为空");
         }
-        MaTechnician existsMerchant = maTechnicianMapper.selectMerchantById(id.intValue());
+        MaTechnician existsMerchant = maTechnicianMapper.selectMerchantById(id);
         if (existsMerchant == null || !NOT_DELETED.equals(existsMerchant.getIsDelete())) {
             throw new ServiceException("商户不存在或已删除");
         }
@@ -358,14 +364,14 @@ public class MaTechnicianServiceImpl extends ServiceImpl<MaTechnicianMapper, MaT
      * @param technicianId 商户ID
      * @param projectIds   服务项目ID集合
      */
-    private void replaceProjectRelations(Long technicianId, Set<Long> projectIds) {
+    private void replaceProjectRelations(Integer technicianId, Set<Long> projectIds) {
         if (technicianId == null) {
             throw new ServiceException("商户ID不能为空");
         }
-        maTeProjectMapper.deleteByTechnicianId(technicianId);
+        maTeProjectMapper.deleteByTechnicianId(technicianId.longValue());
         for (Long projectId : projectIds) {
             MaTeProject relation = new MaTeProject();
-            relation.setTeId(technicianId);
+            relation.setTeId(technicianId.longValue());
             relation.setProjectId(projectId);
             int rows = maTeProjectMapper.insert(relation);
             if (rows <= 0) {
@@ -390,6 +396,59 @@ public class MaTechnicianServiceImpl extends ServiceImpl<MaTechnicianMapper, MaT
         return maTechnicianMapper.selectMerchantAuditList(pageParam, dto);
     }
 
+    /**
+     * 商户入驻审核。
+     *
+     * @param id        商户ID
+     * @param dto       审核提交参数
+     * @param loginUser 当前登录用户
+     * @return 结果
+     */
+    @Override
+    @Transactional(rollbackFor = Exception.class)
+    public int submitMerchantAudit(Integer id, MaTechnicianAuditSubmitDTO dto, LoginUser loginUser) {
+        if (id == null) {
+            throw new ServiceException("商户ID不能为空");
+        }
+        if (dto == null) {
+            throw new ServiceException("审核参数不能为空");
+        }
+        checkEnumValue(dto.getAuditStatus(), "审核意见", AUDIT_APPROVED, AUDIT_REJECTED);
+        String auditRemark = dto.getAuditRemark() == null ? "" : dto.getAuditRemark().trim();
+        if (dto.getAuditStatus() == AUDIT_REJECTED && StringUtils.isBlank(auditRemark)) {
+            throw new ServiceException("审核驳回时审核备注不能为空");
+        }
+        if (auditRemark.length() > AUDIT_REMARK_MAX_LENGTH) {
+            throw new ServiceException("审核备注长度不能超过" + AUDIT_REMARK_MAX_LENGTH + "个字符");
+        }
+
+        MaTechnician existsMerchant = maTechnicianMapper.selectMerchantById(id);
+        if (existsMerchant == null || !NOT_DELETED.equals(existsMerchant.getIsDelete())) {
+            throw new ServiceException("商户不存在或已删除");
+        }
+        Integer currentAuditStatus = existsMerchant.getAuditStatus();
+        if (currentAuditStatus == null || (currentAuditStatus != AUDIT_WAIT_ENTER)) {
+            throw new ServiceException("当前商户状态不能审核");
+        }
+
+        MaTechnician maTechnician = new MaTechnician();
+        maTechnician.setId(id);
+        // 修改为1:待审核
+        maTechnician.setAuditStatus(1);
+        maTechnician.setAuditRemark(auditRemark);
+        maTechnician.setApproveTime(DateUtils.getNowDate());
+        if (loginUser != null && loginUser.getUser() != null) {
+            maTechnician.setUpdateBy(loginUser.getUser().getUserName());
+        }
+        maTechnician.setUpdateTime(DateUtils.getNowDate());
+
+        int rows = maTechnicianMapper.submitMerchantAuditById(maTechnician);
+        if (rows <= 0) {
+            throw new ServiceException("提交商户审核失败");
+        }
+        return rows;
+    }
+
     /**
      * 后台查询商户列表
      *
@@ -422,6 +481,36 @@ public class MaTechnicianServiceImpl extends ServiceImpl<MaTechnicianMapper, MaT
         return detail;
     }
 
+    /**
+     * 后台查询商户证照
+     *
+     * @param id 商户ID
+     * @return 商户证照
+     */
+    @Override
+    public MaTechnicianCertificateVO selectMerchantCertificate(Integer id) {
+        if (id == null) {
+            throw new ServiceException("商户ID不能为空");
+        }
+        MaTechnician merchant = maTechnicianMapper.selectMerchantCertificateById(id);
+        if (merchant == null || !NOT_DELETED.equals(merchant.getIsDelete())) {
+            throw new ServiceException("商户不存在或已删除");
+        }
+
+        MaTechnicianCertificateVO certificate = new MaTechnicianCertificateVO();
+        certificate.setMerchantId(merchant.getId());
+        certificate.setAvatar(merchant.getAvatar());
+        certificate.setLifePhotos(merchant.getLifePhotos());
+        certificate.setIdCard(merchant.getIdCard());
+        certificate.setHealthCertificate(merchant.getHealthCertificate());
+        certificate.setQualificationCertificate(merchant.getQualificationCertificate());
+        certificate.setNoCrimeRecord(merchant.getNoCrimeRecord());
+        certificate.setCommitmentPdf(merchant.getCommitmentPdf());
+        certificate.setCommitmentVideo(merchant.getCommitmentVideo());
+        certificate.setCommitmentAudio(merchant.getCommitmentAudio());
+        return certificate;
+    }
+
     /**
      * 修改技师
      *
@@ -612,7 +701,7 @@ public class MaTechnicianServiceImpl extends ServiceImpl<MaTechnicianMapper, MaT
      * @param technicianId
      * @param projectIds
      */
-    private void insertProjectRelations(Long technicianId, Set<Long> projectIds) {
+    private void insertProjectRelations(Integer technicianId, Set<Long> projectIds) {
         if (technicianId == null) {
             throw new ServiceException("商户ID不能为空");
         }
@@ -620,7 +709,7 @@ public class MaTechnicianServiceImpl extends ServiceImpl<MaTechnicianMapper, MaT
         List<MaTeProject> relations = new ArrayList<>();
         for (Long projectId : projectIds) {
             MaTeProject relation = new MaTeProject();
-            relation.setTeId(technicianId);
+            relation.setTeId(technicianId.longValue());
             relation.setProjectId(projectId);
             relations.add(relation);
         }

+ 4 - 0
nightFragrance-massage/src/main/resources/mapper/massage/MaTechnicianMapper.xml

@@ -238,8 +238,10 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
         <result property="teSex" column="te_sex"/>
         <result property="teSexName" column="te_sex_name"/>
         <result property="tePhone" column="te_phone"/>
+        <result property="teNickName" column="te_nick_name"/>
         <result property="avatar" column="avatar"/>
         <result property="teAddress" column="te_address"/>
+        <result property="teBrief" column="te_brief"/>
         <result property="openServiceName" column="open_service_name"/>
         <result property="applyTime" column="apply_time"/>
         <result property="auditStatus" column="audit_status"/>
@@ -258,8 +260,10 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
                 ELSE ''
             END AS te_sex_name,
             t.te_phone,
+            t.te_nick_name,
             t.avatar,
             t.te_address,
+            t.te_brief,
             COALESCE((
                 SELECT GROUP_CONCAT(DISTINCT sc.name ORDER BY sc.sort, sc.id SEPARATOR '/')
                 FROM service_category sc