jinshihui пре 5 дана
родитељ
комит
5bd81d371a

+ 3 - 2
nightFragrance-admin/src/main/java/com/ylx/web/controller/massage/AreaController.java

@@ -6,6 +6,7 @@ import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
 import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
 import com.baomidou.mybatisplus.core.toolkit.StringUtils;
 import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
+import com.ylx.common.core.domain.R;
 import com.ylx.massage.domain.Area;
 import com.ylx.massage.domain.dto.CoordinateDTO;
 import com.ylx.massage.domain.vo.AreaTreeNode;
@@ -14,11 +15,10 @@ import com.ylx.massage.service.AreaService;
 import io.swagger.annotations.Api;
 import io.swagger.annotations.ApiOperation;
 import org.springframework.web.bind.annotation.*;
-import com.ylx.common.core.domain.R;
+
 import javax.annotation.Resource;
 import java.io.Serializable;
 import java.util.List;
-import java.util.Map;
 
 /**
  * 区域数据(Area)表控制层
@@ -131,5 +131,6 @@ public class AreaController {
         CityInfoVo cityInfoVo = this.areaService.getCityInfoByCoordinates(dto);
         return R.ok(cityInfoVo);
     }
+
 }
 

+ 23 - 0
nightFragrance-admin/src/main/java/com/ylx/web/controller/massage/MaTechnicianController.java

@@ -28,6 +28,7 @@ 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.MaTechnicianPendingAuditSubmitDTO;
 import com.ylx.massage.domain.vo.*;
 import com.ylx.massage.service.IMaProjectService;
 import com.ylx.project.domain.Project;
@@ -400,6 +401,28 @@ 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}/approve")
+    public AjaxResult approvePendingMerchantAudit(@PathVariable("id") Integer id,
+                                                  @RequestBody MaTechnicianPendingAuditSubmitDTO dto) {
+        try {
+            LoginUser loginUser = getLoginUser();
+            return toAjax(maTechnicianService.approvePendingMerchantAudit(id, dto, loginUser));
+        } catch (Exception e) {
+            e.printStackTrace();
+            throw new RuntimeException(e);
+        }
+    }
+
     /**
      * 查询商户列表
      *

+ 4 - 4
nightFragrance-admin/src/main/java/com/ylx/web/controller/massage/TLbtController.java

@@ -44,7 +44,7 @@ public class TLbtController {
     public R<List<TLbt>> getAll() {
         try {
             QueryWrapper<TLbt> wrapper = new QueryWrapper<>();
-            wrapper.lambda().orderByAsc(TLbt::getCSort);
+            wrapper.lambda().orderByAsc(TLbt::getSort);
             List<TLbt> list = lbtService.list(wrapper);
             return R.ok(list);
         } catch (Exception e) {
@@ -87,8 +87,8 @@ public class TLbtController {
     public R<Page<TLbt>> selectSpfl(Page<TLbt> page, TLbt lbt) {
         try {
             LambdaQueryWrapper<TLbt> tLbtLambdaQueryWrapper = new LambdaQueryWrapper<>();
-            tLbtLambdaQueryWrapper.like(StringUtils.isNotBlank(lbt.getCDescribe()), TLbt::getCDescribe, lbt.getCDescribe())
-                    .orderByAsc(TLbt::getCSort);
+            tLbtLambdaQueryWrapper.like(StringUtils.isNotBlank(lbt.getTitle()), TLbt::getTitle, lbt.getTitle())
+                    .orderByAsc(TLbt::getSort);
             // 获取查询返回结果
             Page<TLbt> pageSelect = lbtService.page(page, tLbtLambdaQueryWrapper);
             return R.ok(pageSelect);
@@ -128,6 +128,6 @@ public class TLbtController {
     @ApiOperation("根据id查询轮播图")
     @RequestMapping(value = "/wx/getByid", method = RequestMethod.POST)
     public R getById(@RequestBody TLbt tLbt) {
-        return R.ok(lbtService.getById(tLbt.getCId()));
+        return R.ok(lbtService.getById(tLbt.getId()));
     }
 }

+ 22 - 0
nightFragrance-massage/src/main/java/com/ylx/massage/domain/MaTechnician.java

@@ -10,6 +10,7 @@ import lombok.experimental.Accessors;
 import com.ylx.common.annotation.Excel;
 import com.ylx.common.core.domain.BaseEntity;
 
+import java.time.LocalDate;
 import java.util.Date;
 
 
@@ -190,6 +191,13 @@ public class MaTechnician extends BaseEntity {
 //    @TableField("commitment_video")
 //    private String commitmentVideo;
 
+    /**
+     * 身份证过期日期
+     */
+    @Excel(name = "身份证过期日期")
+    @TableField("id_card_expiration_date")
+    private LocalDate idCardExpirationDate;
+
     /**
      * 简介
      */
@@ -197,12 +205,26 @@ public class MaTechnician extends BaseEntity {
     @TableField("te_brief")
     private String teBrief;
 
+    /**
+     * 健康证过期日期
+     */
+    @Excel(name = "健康证过期日期")
+    @TableField("health_certificate_expiration_date")
+    private LocalDate healthCertificateExpirationDate;
+
     /**
      * 服务状态(0服务中,1可服务)
      */
     @Excel(name = "服务状态(0服务中,1可服务)")
     private Integer serviceState;
 
+    /**
+     * 从业资格证过期日期
+     */
+    @Excel(name = "从业资格证过期日期")
+    @TableField("qualification_certificate_expiration_date")
+    private LocalDate qualificationCertificateExpirationDate;
+
     /**
      * 上岗状态 (-1:未上岗 0:已上岗 1:已申请)
      */

+ 42 - 47
nightFragrance-massage/src/main/java/com/ylx/massage/domain/TLbt.java

@@ -5,7 +5,6 @@ import com.baomidou.mybatisplus.annotation.TableId;
 import com.baomidou.mybatisplus.annotation.TableLogic;
 import com.baomidou.mybatisplus.annotation.TableName;
 import com.fasterxml.jackson.annotation.JsonFormat;
-import com.fasterxml.jackson.annotation.JsonProperty;
 import io.swagger.annotations.ApiModel;
 import io.swagger.annotations.ApiModelProperty;
 import lombok.Getter;
@@ -16,9 +15,7 @@ import java.io.Serializable;
 import java.util.Date;
 
 /**
- * <p>
  * 轮播图
- * </p>
  *
  * @author YJR
  * @since 2023-11-24
@@ -33,70 +30,68 @@ public class TLbt implements Serializable {
     private static final long serialVersionUID = 1L;
 
     /**
-     * 主键
+     * 主键
      */
-    @TableId("c_id")
-    @ApiModelProperty("cId")
-    @JsonProperty("cId")
-    private String cId;
+    @TableId("id")
+    @ApiModelProperty("主键")
+    private String id;
 
     /**
-     * 图片地址
+     * 标题。
      */
-    @TableField("c_img_url")
-    @ApiModelProperty("图片地址")
-    @JsonProperty("cImgUrl")
-    private String cImgUrl;
+    @TableField("title")
+    @ApiModelProperty("标题")
+    private String title;
 
-    @TableField("c_jump_url")
-    @ApiModelProperty("跳转地址")
-    @JsonProperty("cJumpUrl")
-    private String cJumpUrl;
+    /**
+     * 图片地址。
+     */
+    @TableField("img_url")
+    @ApiModelProperty("图片地址")
+    private String imgUrl;
 
-    @TableField("c_jump_type")
-    @ApiModelProperty("跳转类型")
-    @JsonProperty("cJumpType")
-    private Integer cJumpType;
+    /**
+     * 跳转地址,支持 HTTP 链接或内部路由。
+     */
+    @TableField("jump_url")
+    @ApiModelProperty("跳转地址,支持HTTP链接或内部路由")
+    private String jumpUrl;
 
     /**
-     * 描述
+     * 序号。
      */
-    @TableField("c_describe")
-    @ApiModelProperty("描述")
-    @JsonProperty("cDescribe")
-    private String cDescribe;
+    @TableField("sort")
+    @ApiModelProperty("序号")
+    private Integer sort;
 
     /**
-     * 文本内容
+     * 显示状态:0-隐藏,1-显示。
      */
-    @TableField("c_content")
-    @ApiModelProperty("文本内容")
-    @JsonProperty("cContent")
-    private String cContent;
+    @TableField("status")
+    @ApiModelProperty("显示状态:0-隐藏,1-显示")
+    private Integer status;
 
     /**
-     * 序号
+     * 创建时间。
      */
-    @TableField("c_sort")
-    @ApiModelProperty("序号")
-    @JsonProperty("cSort")
-    private Integer cSort;
+    @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss")
+    @TableField("create_time")
+    @ApiModelProperty("创建时间")
+    private Date createTime;
 
-    @TableField("c_status")
-    @ApiModelProperty("显示状态: 0-隐藏, 1-显示")
-    @JsonProperty("cStatus")
-    private String cStatus;
+    /**
+     * 修改时间。
+     */
+    @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss")
+    @TableField("update_time")
+    @ApiModelProperty("修改时间")
+    private Date updateTime;
 
     /**
-     * 是否删除 0否1是
+     * 是否删除:0-否,1-是。
      */
-    @ApiModelProperty("是否删除0否1是")
     @TableLogic
     @TableField("is_delete")
-    @JsonProperty("isDelete")
+    @ApiModelProperty("是否删除:0-否,1-是")
     private Integer isDelete;
-
-    @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss")
-    private Date createTime;
-
 }

+ 63 - 0
nightFragrance-massage/src/main/java/com/ylx/massage/domain/dto/MaTechnicianPendingAuditSubmitDTO.java

@@ -0,0 +1,63 @@
+package com.ylx.massage.domain.dto;
+
+import io.swagger.annotations.ApiModel;
+import io.swagger.annotations.ApiModelProperty;
+import lombok.Data;
+
+import java.time.LocalDate;
+
+/**
+ * 后台商户待审核通过参数。
+ */
+@Data
+@ApiModel(value = "MaTechnicianPendingAuditSubmitDTO", description = "后台商户待审核通过参数")
+public class MaTechnicianPendingAuditSubmitDTO {
+
+    /**
+     * 加密后的身份证正面图片文件地址。
+     */
+    @ApiModelProperty("加密后的身份证正面图片文件地址")
+    private String idCardFront;
+
+    /**
+     * 加密后的身份证反面图片文件地址。
+     */
+    @ApiModelProperty("加密后的身份证反面图片文件地址")
+    private String idCardBack;
+
+    /**
+     * 加密后的健康证图片文件地址。
+     */
+    @ApiModelProperty("加密后的健康证图片文件地址")
+    private String healthCertificate;
+
+    /**
+     * 加密后的资格证图片文件地址。
+     */
+    @ApiModelProperty("加密后的资格证图片文件地址")
+    private String qualificationCertificate;
+
+    /**
+     * 身份证到期日期。
+     */
+    @ApiModelProperty("身份证到期日期,格式:yyyy-MM-dd")
+    private LocalDate idCardExpirationDate;
+
+    /**
+     * 健康证到期日期。
+     */
+    @ApiModelProperty("健康证到期日期,格式:yyyy-MM-dd")
+    private LocalDate healthCertificateExpirationDate;
+
+    /**
+     * 资格证到期日期。
+     */
+    @ApiModelProperty("资格证到期日期,格式:yyyy-MM-dd")
+    private LocalDate qualificationCertificateExpirationDate;
+
+    /**
+     * 审核备注。
+     */
+    @ApiModelProperty("审核备注")
+    private String auditRemark;
+}

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

@@ -161,6 +161,16 @@ public interface MaTechnicianMapper extends BaseMapper<MaTechnician>
         return updateById(maTechnician);
     }
 
+    /**
+     * 根据商户ID审核通过待审核商户。
+     *
+     * @param maTechnician 商户审核信息
+     * @return 影响行数
+     */
+    default int approvePendingMerchantAuditById(MaTechnician maTechnician) {
+        return updateById(maTechnician);
+    }
+
     List<MerchantVo> getMerchantRecommend(@Param("dto") MassageMerchantRecommendDto dto);
 
     /**

+ 11 - 0
nightFragrance-massage/src/main/java/com/ylx/massage/service/IMaTechnicianService.java

@@ -16,6 +16,7 @@ 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.dto.MaTechnicianPendingAuditSubmitDTO;
 import com.ylx.massage.domain.vo.MaTechnicianAppAddVo;
 import com.ylx.massage.domain.vo.MaTechnicianAuditListVO;
 import com.ylx.massage.domain.vo.MaTechnicianCertificateVO;
@@ -105,6 +106,16 @@ public interface IMaTechnicianService extends IService<MaTechnician> {
      */
     int submitMerchantAudit(Integer id, MaTechnicianAuditSubmitDTO dto, LoginUser loginUser);
 
+    /**
+     * 后台待审核页面审核通过商户。
+     *
+     * @param id        商户ID
+     * @param dto       待审核通过参数
+     * @param loginUser 当前登录用户
+     * @return 结果
+     */
+    int approvePendingMerchantAudit(Integer id, MaTechnicianPendingAuditSubmitDTO dto, LoginUser loginUser);
+
     /**
      * 后台查询商户列表
      *

+ 79 - 0
nightFragrance-massage/src/main/java/com/ylx/massage/service/impl/MaTechnicianServiceImpl.java

@@ -2,6 +2,7 @@ package com.ylx.massage.service.impl;
 
 import java.math.BigDecimal;
 import java.time.Duration;
+import java.time.LocalDate;
 import java.time.LocalDateTime;
 import java.time.ZoneId;
 import java.util.*;
@@ -1059,4 +1060,82 @@ public class MaTechnicianServiceImpl extends ServiceImpl<MaTechnicianMapper, MaT
         maTechnicianMapper.update(null, update);
 
     }
+
+    /**
+     * 后台待审核页面审核通过商户。
+     *
+     * @param id        商户ID
+     * @param dto       待审核通过参数
+     * @param loginUser 当前登录用户
+     * @return 结果
+     */
+    @Override
+    @Transactional(rollbackFor = Exception.class)
+    public int approvePendingMerchantAudit(Integer id, MaTechnicianPendingAuditSubmitDTO dto, LoginUser loginUser) {
+        if (id == null) {
+            throw new ServiceException("商户ID不能为空");
+        }
+        if (dto == null) {
+            throw new ServiceException("审核参数不能为空");
+        }
+
+        String idCardFront = checkRequiredFileUrl(dto.getIdCardFront(), "身份证正面加密图片");
+        String idCardBack = checkRequiredFileUrl(dto.getIdCardBack(), "身份证反面加密图片");
+        String healthCertificate = checkRequiredFileUrl(dto.getHealthCertificate(), "健康证加密图片");
+        String qualificationCertificate = checkRequiredFileUrl(dto.getQualificationCertificate(), "资格证加密图片");
+        checkRequiredExpirationDate(dto.getIdCardExpirationDate(), "身份证到期时间");
+        checkRequiredExpirationDate(dto.getHealthCertificateExpirationDate(), "健康证到期时间");
+        checkRequiredExpirationDate(dto.getQualificationCertificateExpirationDate(), "资格证到期时间");
+
+        String auditRemark = dto.getAuditRemark() == null ? "" : dto.getAuditRemark().trim();
+        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("商户不存在或已删除");
+        }
+        if (!Integer.valueOf(AUDIT_WAIT_REVIEW).equals(existsMerchant.getAuditStatus())) {
+            throw new ServiceException("当前商户不是待审核状态,不能审核通过");
+        }
+
+        MaTechnician maTechnician = new MaTechnician();
+        maTechnician.setId(id);
+        /*maTechnician.setIdCard(String.join(",", idCardFront, idCardBack));
+        maTechnician.setHealthCertificate(healthCertificate);
+        maTechnician.setQualificationCertificate(qualificationCertificate);*/
+        maTechnician.setIdCardExpirationDate(dto.getIdCardExpirationDate());
+        maTechnician.setHealthCertificateExpirationDate(dto.getHealthCertificateExpirationDate());
+        maTechnician.setQualificationCertificateExpirationDate(dto.getQualificationCertificateExpirationDate());
+        maTechnician.setAuditStatus(AUDIT_APPROVED);
+        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.approvePendingMerchantAuditById(maTechnician);
+        if (rows <= 0) {
+            throw new ServiceException("待审核商户审核通过失败");
+        }
+        return rows;
+    }
+
+    private String checkRequiredFileUrl(String value, String fieldName) {
+        if (StringUtils.isBlank(value)) {
+            throw new ServiceException(fieldName + "不能为空");
+        }
+        return value.trim();
+    }
+
+    private void checkRequiredExpirationDate(LocalDate value, String fieldName) {
+        if (value == null) {
+            throw new ServiceException(fieldName + "不能为空");
+        }
+        if (value.isBefore(LocalDate.now())) {
+            throw new ServiceException(fieldName + "不能早于当前日期");
+        }
+    }
 }

+ 11 - 11
nightFragrance-massage/src/main/java/com/ylx/massage/service/impl/TLbtServiceImpl.java

@@ -2,7 +2,6 @@ package com.ylx.massage.service.impl;
 
 import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
 import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
-import com.ylx.common.constant.MassageConstants;
 import com.ylx.common.exception.ServiceException;
 import com.ylx.common.utils.uuid.IdUtils;
 import com.ylx.massage.domain.TLbt;
@@ -21,23 +20,24 @@ public class TLbtServiceImpl extends ServiceImpl<TLbtMapper, TLbt> implements TL
 
     @Override
     public Boolean addOrUpdate(TLbt lbt) {
-        if (StringUtils.isBlank(lbt.getCImgUrl())) {
+        if (StringUtils.isBlank(lbt.getImgUrl())) {
             throw new ServiceException("图片不能为空");
         }
-        if (lbt.getCSort() == null) {
+        if (lbt.getSort() == null) {
             throw new ServiceException("序号不能为空");
         }
-        Integer i = lbt.getCSort();
-        LambdaQueryWrapper<TLbt> query = new LambdaQueryWrapper<TLbt>().eq(TLbt::getCSort, i);
+        Integer i = lbt.getSort();
+        LambdaQueryWrapper<TLbt> query = new LambdaQueryWrapper<TLbt>().eq(TLbt::getSort, i);
         TLbt one = getOne(query);
-        if (StringUtils.isBlank(lbt.getCId())) {
+        if (StringUtils.isBlank(lbt.getId())) {
             //新增
+            lbt.setId(IdUtils.simpleUUID());
             if (one != null) {
                 batchLbt(i);
             }
         } else {
             //修改
-            query.ne(TLbt::getCId, lbt.getCId());
+            query.ne(TLbt::getId, lbt.getId());
             if (getOne(query) != null) {
                 batchLbt(i);
             }
@@ -50,17 +50,17 @@ public class TLbtServiceImpl extends ServiceImpl<TLbtMapper, TLbt> implements TL
      * @param i
      */
     private void batchLbt(Integer i) {
-        LambdaQueryWrapper<TLbt> query1 = new LambdaQueryWrapper<TLbt>().ge(TLbt::getCSort, i);
+        LambdaQueryWrapper<TLbt> query1 = new LambdaQueryWrapper<TLbt>().ge(TLbt::getSort, i);
         List<TLbt> lbts = list(query1);
-        lbts.forEach(tLbt1 -> tLbt1.setCSort(tLbt1.getCSort() + 1));
+        lbts.forEach(tLbt1 -> tLbt1.setSort(tLbt1.getSort() + 1));
         updateBatchById(lbts);
     }
 
     @Override
     public Boolean del(TLbt tLbt) {
-        if (StringUtils.isBlank(tLbt.getCId())) {
+        if (StringUtils.isBlank(tLbt.getId())) {
             throw new ServiceException("ID不能为空");
         }
-        return this.removeById(tLbt.getCId());
+        return this.removeById(tLbt.getId());
     }
 }

+ 10 - 7
nightFragrance-massage/src/main/resources/mapper/massage/TLbtMapper.xml

@@ -4,17 +4,20 @@
 
     <!-- 通用查询映射结果 -->
     <resultMap id="BaseResultMap" type="com.ylx.massage.domain.TLbt">
-        <id column="c_id" property="cId" />
-        <result column="c_img_url" property="cImgUrl" />
-        <result column="n_del" property="nDel" />
-        <result column="c_describe" property="cDescribe" />
-        <result column="c_content" property="cContent" />
-        <result column="c_sort" property="cSort" />
+        <id column="id" property="id" />
+        <result column="title" property="title" />
+        <result column="img_url" property="imgUrl" />
+        <result column="jump_url" property="jumpUrl" />
+        <result column="sort" property="sort" />
+        <result column="status" property="status" />
+        <result column="create_time" property="createTime" />
+        <result column="update_time" property="updateTime" />
+        <result column="is_delete" property="isDelete" />
     </resultMap>
 
     <!-- 通用查询结果列 -->
     <sql id="Base_Column_List">
-        c_id, c_img_url, n_del, c_describe, c_content, c_sort
+        id, title, img_url, jump_url, sort, status, create_time, update_time, is_delete
     </sql>
 
 </mapper>