Переглянути джерело

开发动态相关的接口

jinshihui 1 тиждень тому
батько
коміт
0cd5d59809
18 змінених файлів з 304 додано та 200 видалено
  1. 15 7
      nightFragrance-admin/src/main/java/com/ylx/web/controller/massage/MaTechnicianController.java
  2. 2 2
      nightFragrance-admin/src/main/java/com/ylx/web/controller/massage/TechnicianMomentController.java
  3. 16 17
      nightFragrance-admin/src/main/java/com/ylx/web/controller/massage/WeSqController.java
  4. 5 8
      nightFragrance-common/src/main/java/com/ylx/common/utils/file/FileUploadUtils.java
  5. 8 12
      nightFragrance-common/src/main/java/com/ylx/common/utils/file/MimeTypeUtils.java
  6. 2 2
      nightFragrance-massage/src/main/java/com/ylx/massage/domain/MaTechnician.java
  7. 47 13
      nightFragrance-massage/src/main/java/com/ylx/massage/domain/MerchantApplyFile.java
  8. 5 0
      nightFragrance-massage/src/main/java/com/ylx/massage/domain/TWxUser.java
  9. 2 2
      nightFragrance-massage/src/main/java/com/ylx/massage/domain/TechnicianMoment.java
  10. 2 1
      nightFragrance-massage/src/main/java/com/ylx/massage/domain/dto/MerchantApplyFileDto.java
  11. 2 2
      nightFragrance-massage/src/main/java/com/ylx/massage/domain/dto/PublishMomentDTO.java
  12. 42 8
      nightFragrance-massage/src/main/java/com/ylx/massage/domain/vo/MomentDetailVO.java
  13. 0 1
      nightFragrance-massage/src/main/java/com/ylx/massage/domain/vo/MomentListVO.java
  14. 6 0
      nightFragrance-massage/src/main/java/com/ylx/massage/domain/vo/MyMomentVO.java
  15. 21 8
      nightFragrance-massage/src/main/java/com/ylx/massage/service/impl/MaTechnicianServiceImpl.java
  16. 57 60
      nightFragrance-massage/src/main/java/com/ylx/massage/service/impl/TechnicianMomentServiceImpl.java
  17. 15 0
      nightFragrance-massage/src/main/java/com/ylx/massage/utils/VirtualTechnicianNicknameGenerator.java
  18. 57 57
      nightFragrance-quartz/src/main/java/com/ylx/quartz/domain/SysJobLog.java

+ 15 - 7
nightFragrance-admin/src/main/java/com/ylx/web/controller/massage/MaTechnicianController.java

@@ -3,6 +3,7 @@ package com.ylx.web.controller.massage;
 import java.util.*;
 import java.util.concurrent.TimeUnit;
 import java.util.regex.Pattern;
+import javax.annotation.Resource;
 import javax.servlet.http.HttpServletRequest;
 import javax.servlet.http.HttpServletResponse;
 
@@ -36,10 +37,12 @@ import com.ylx.framework.manager.factory.AsyncFactory;
 import com.ylx.framework.web.service.WxTokenService;
 import com.ylx.massage.domain.MaProject;
 import com.ylx.massage.domain.MaTechnician;
+import com.ylx.massage.domain.TWxUser;
 import com.ylx.massage.domain.dto.*;
 import com.ylx.massage.domain.vo.*;
 import com.ylx.massage.service.IMaProjectService;
 import com.ylx.massage.service.IMaTechnicianService;
+import com.ylx.massage.service.TWxUserService;
 import com.ylx.project.domain.Project;
 import com.ylx.servicecategory.domain.ServiceCategory;
 import com.ylx.servicecategory.service.ServiceCategoryService;
@@ -103,12 +106,16 @@ public class MaTechnicianController extends BaseController {
     private ISysConfigService configService;
     @Autowired
     private RedisCache redisCache;
+
     @Autowired
     private WxTokenService wxTokenService;
 
     @Autowired
     private PasswordEncoder passwordEncoder;
 
+    @Resource
+    private TWxUserService wxUserService;
+
 
     public static final String PHONE_THREEUSERPARTCLIENT_CODE_KEY = "sys:clientLogin:phone:";
 
@@ -127,16 +134,17 @@ public class MaTechnicianController extends BaseController {
         Result<WxLoginUser> result = new Result<>();
 
         // 校验手机号是否为空
-        if (StringUtils.isEmpty(thirdPartyLoginsVo.getPhone())) {
+        if (StringUtils.isBlank(thirdPartyLoginsVo.getPhone())) {
             return result.error500("请输入手机号");
         }
 
         // 校验用户是否存在且有效
-        LambdaQueryWrapper<MaTechnician> queryWrapper = new LambdaQueryWrapper<>();
-        queryWrapper.eq(MaTechnician::getTePhone, thirdPartyLoginsVo.getPhone());
-        MaTechnician maTechnician = maTechnicianService.getOne(queryWrapper);
+        LambdaQueryWrapper<TWxUser> queryWrapper = new LambdaQueryWrapper<>();
+        queryWrapper.eq(TWxUser::getcPhone, thirdPartyLoginsVo.getPhone()).eq(TWxUser::getRole, 1);
+
+        TWxUser tWxUser = wxUserService.getOne(queryWrapper);
         // 校验用户是否有效
-        if (ObjectUtils.isEmpty(maTechnician)) {
+        if (ObjectUtils.isEmpty(tWxUser)) {
             return result.error500("商户不存在,请先注册");
         }
 
@@ -153,13 +161,13 @@ public class MaTechnicianController extends BaseController {
         } else {
             // 初始化加密工具
             // 验证:比对是否匹配
-            boolean isOk = passwordEncoder.matches(thirdPartyLoginsVo.getPassWord(), maTechnician.getTePassword());
+            boolean isOk = passwordEncoder.matches(thirdPartyLoginsVo.getPassWord(), tWxUser.getCPassword());
             /*if (!isOk) {
                 return Result.error("密码错误");
             }*/
         }
         WxLoginUser wxUser = new WxLoginUser();
-        BeanUtils.copyProperties(maTechnician, wxUser);
+        BeanUtils.copyProperties(tWxUser, wxUser);
         // 生成并返回令牌
         String token = wxTokenService.createToken(wxUser);
         log.info("token的值:{}", token);

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

@@ -203,7 +203,7 @@ public class TechnicianMomentController extends BaseController {
      * 发布动态或保存草稿
      *
      * @param dto 发布动态请求对象
-     * @return R 动态ID
+     * @return R<Long> 动态ID
      */
     @PostMapping("/publish")
     @ApiOperation("发布动态或保存草稿")
@@ -295,7 +295,7 @@ public class TechnicianMomentController extends BaseController {
      *
      * @param pageNum  页码
      * @param pageSize 每页数量
-     * @return R
+     * @return R<Page<MomentListVO>>
      */
     @GetMapping("/drafts")
     @ApiOperation("查询草稿箱列表")

+ 16 - 17
nightFragrance-admin/src/main/java/com/ylx/web/controller/massage/WeSqController.java

@@ -23,6 +23,7 @@ import com.ylx.massage.domain.TWxUser;
 import com.ylx.massage.service.CouponReceiveService;
 import com.ylx.massage.service.IMaTechnicianService;
 import com.ylx.massage.service.TWxUserService;
+import com.ylx.massage.utils.VirtualTechnicianNicknameGenerator;
 import com.ylx.massage.utils.WeChatUtil;
 import io.swagger.annotations.Api;
 import lombok.extern.slf4j.Slf4j;
@@ -150,7 +151,7 @@ public class WeSqController extends BaseController {
     @GetMapping("/getTechnicianToken")
     @ResponseBody
     public R<WxLoginUser> getTechnicianToken(@RequestParam String code) {
-        // 发送get请求获取 AccessToken
+        // 发送get请求获取 AccessToken(前端是静默登录)
         try {
             Map<?, ?> result = weChatUtil.getAccessToken(code);
             log.info("result的值:{}", result);
@@ -158,30 +159,28 @@ public class WeSqController extends BaseController {
             log.info("accessToken的值:{}", accessToken);
             String refreshToken = result.get(REFRESH_TOKEN).toString();
             String openid = result.get(OPEN_ID).toString();
-//
-//            // 如果用户是第一次进行微信公众号授权
-//            // 进行这一步时用户应点击了同意授权按钮
-            String userInfoJsom = weChatUtil.getUserInfo(accessToken, openid);
+
+            //获取用户的信息
+            /*String userInfoJsom = weChatUtil.getUserInfo(accessToken, openid);
             log.info("用户信息的json字符串:{}", userInfoJsom);
-//            // 解析JSON数据
             JSONObject jsonObject = new JSONObject(userInfoJsom);
             //log.info("公众号网页登录:{}", jsonObject);
             String nickName = jsonObject.get("nickname").toString();
-            String avatarUrl = jsonObject.get("headimgurl").toString();
+            String avatarUrl = jsonObject.get("headimgurl").toString();*/
 
             // 将用户信息保存到数据库中
-            LambdaQueryWrapper<MaTechnician> objectLambdaQueryWrapper = new LambdaQueryWrapper<>();
-            objectLambdaQueryWrapper.eq(MaTechnician::getCOpenid, openid);
-            MaTechnician user = maTechnicianService.getOne(objectLambdaQueryWrapper);
-            if (user == null || StringUtils.isEmpty(user.getTeNickName())) {
+            LambdaQueryWrapper<TWxUser> queryWrapper = new LambdaQueryWrapper<>();
+            queryWrapper.eq(TWxUser::getcOpenid, openid).eq(TWxUser::getRole,1);
+            TWxUser user = wxUserService.getOne(queryWrapper);
+            if (user == null || StringUtils.isEmpty(user.getcNickName())) {
                 if (user == null) {
-                    user = new MaTechnician();
-                    user.setCOpenid(openid);
-                    user.setTeNickName(nickName);
+                    user = new TWxUser();
+                    user.setcOpenid(openid);
+                    //生成一个随机昵称
+                    user.setcNickName(VirtualTechnicianNicknameGenerator.generateNickname());
                     user.setAuditStatus(-1);
-                    user.setCreateBy(nickName);
-                    user.setUpdateBy(nickName);
-                    maTechnicianService.save(user);
+                    wxUserService.saveOrUpdate(user);
+                    user.setId(user.getId());
                 }
             }
             WxLoginUser wxUser = new WxLoginUser();

+ 5 - 8
nightFragrance-common/src/main/java/com/ylx/common/utils/file/FileUploadUtils.java

@@ -173,18 +173,15 @@ public class FileUploadUtils {
         String fileName = file.getOriginalFilename();
         String extension = getExtension(file);
         if (allowedExtension != null && !isAllowedExtension(extension, allowedExtension)) {
+            // 图片类型
             if (allowedExtension == MimeTypeUtils.IMAGE_EXTENSION) {
-                throw new InvalidExtensionException.InvalidImageExtensionException(allowedExtension, extension,
-                        fileName);
+                throw new InvalidExtensionException.InvalidImageExtensionException(allowedExtension, extension, fileName);
             } else if (allowedExtension == MimeTypeUtils.FLASH_EXTENSION) {
-                throw new InvalidExtensionException.InvalidFlashExtensionException(allowedExtension, extension,
-                        fileName);
+                throw new InvalidExtensionException.InvalidFlashExtensionException(allowedExtension, extension, fileName);
             } else if (allowedExtension == MimeTypeUtils.MEDIA_EXTENSION) {
-                throw new InvalidExtensionException.InvalidMediaExtensionException(allowedExtension, extension,
-                        fileName);
+                throw new InvalidExtensionException.InvalidMediaExtensionException(allowedExtension, extension, fileName);
             } else if (allowedExtension == MimeTypeUtils.VIDEO_EXTENSION) {
-                throw new InvalidExtensionException.InvalidVideoExtensionException(allowedExtension, extension,
-                        fileName);
+                throw new InvalidExtensionException.InvalidVideoExtensionException(allowedExtension, extension, fileName);
             } else {
                 throw new InvalidExtensionException(allowedExtension, extension, fileName);
             }

+ 8 - 12
nightFragrance-common/src/main/java/com/ylx/common/utils/file/MimeTypeUtils.java

@@ -5,8 +5,7 @@ package com.ylx.common.utils.file;
  *
  * @author ylx
  */
-public class MimeTypeUtils
-{
+public class MimeTypeUtils {
     public static final String IMAGE_PNG = "image/png";
 
     public static final String IMAGE_JPG = "image/jpg";
@@ -17,14 +16,13 @@ public class MimeTypeUtils
 
     public static final String IMAGE_GIF = "image/gif";
 
-    public static final String[] IMAGE_EXTENSION = { "bmp", "gif", "jpg", "jpeg", "png" };
+    public static final String[] IMAGE_EXTENSION = {"bmp", "gif", "jpg", "jpeg", "png"};
 
-    public static final String[] FLASH_EXTENSION = { "swf", "flv" };
+    public static final String[] FLASH_EXTENSION = {"swf", "flv"};
 
-    public static final String[] MEDIA_EXTENSION = { "swf", "flv", "mp3", "wav", "wma", "wmv", "mid", "avi", "mpg",
-            "asf", "rm", "rmvb" };
+    public static final String[] MEDIA_EXTENSION = {"swf", "flv", "mp3", "m4a", "wav", "wma", "wmv", "mid", "avi", "mpg", "asf", "rm", "rmvb"};
 
-    public static final String[] VIDEO_EXTENSION = { "mp4", "avi", "rmvb" };
+    public static final String[] VIDEO_EXTENSION = {"mp4", "avi", "rmvb"};
 
     public static final String[] DEFAULT_ALLOWED_EXTENSION = {
             // 图片
@@ -36,12 +34,10 @@ public class MimeTypeUtils
             // 视频格式
             "mp4", "avi", "rmvb", "mp3",
             // pdf
-            "pdf" };
+            "pdf"};
 
-    public static String getExtension(String prefix)
-    {
-        switch (prefix)
-        {
+    public static String getExtension(String prefix) {
+        switch (prefix) {
             case IMAGE_PNG:
                 return "png";
             case IMAGE_JPG:

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

@@ -207,9 +207,9 @@ public class MaTechnician extends BaseEntity {
     private LocalDate healthCertificateExpirationDate;
 
     /**
-     * 服务状态(0服务中,1可服务)
+     * 服务状态(0服务中,1可服务 2已休息)
      */
-    @Excel(name = "服务状态(0服务中,1可服务)")
+    @Excel(name = "服务状态(0服务中,1可服务 2已休息)")
     private Integer serviceState;
 
     /**

+ 47 - 13
nightFragrance-massage/src/main/java/com/ylx/massage/domain/MerchantApplyFile.java

@@ -1,5 +1,6 @@
 package com.ylx.massage.domain;
 
+import java.math.BigDecimal;
 import java.time.LocalDateTime;
 import java.util.Date;
 
@@ -18,16 +19,23 @@ import java.io.Serializable;
  * @author makejava
  * @since 2026-06-05 16:12:22
  */
-@SuppressWarnings("serial")
 @Data
 @EqualsAndHashCode(callSuper = false)
 @Accessors(chain = true)
 @TableName(value = "merchant_apply_file", autoResultMap = true)
 public class MerchantApplyFile implements Serializable {
-    //主键ID
+
+    private static final long serialVersionUID = 1L;
+
+    /**
+     * 主键ID
+     */
     @TableId(value = "id", type = IdType.AUTO)
     private Long id;
-    //商户ID
+
+    /**
+     * 商户ID
+     */
     @TableField("merchant_id")
     private Integer merchantId;
 
@@ -37,26 +45,47 @@ public class MerchantApplyFile implements Serializable {
     @TableField("file_type")
     private String fileType;
 
-    //原始文件名
+    /**
+     * 原始文件名
+     */
     @TableField("file_name")
     private String fileName;
-    //文件访问地址
+
+    /**
+     * 文件访问地址
+     */
     @TableField("file_url")
     private String fileUrl;
-    //文件大小,单位字节
+
+    /**
+     * 文件大小,单位字节
+     */
     @TableField("file_size")
-    private Long fileSize;
-    //文件MIME类型,如 image/jpeg
+    private BigDecimal fileSize;
+
+    /**
+     * 文件MIME类型,如 image/jpeg
+     */
     @TableField("content_type")
     private String contentType;
-    //审核状态//1-审核通过,2-审核未通过
+
+    /**
+     * 审核状态:1-审核通过,2-审核未通过
+     */
     private Integer auditStatus;
-    //审核备注
+
+    /**
+     * 审核备注
+     */
     @TableField("audit_remark")
     private String  auditRemark;
-    //创建人
+
+    /**
+     * 创建人
+     */
     @TableField("create_by")
     private String createBy;
+
     /**
      * 创建时间
      */
@@ -70,11 +99,16 @@ public class MerchantApplyFile implements Serializable {
     @TableField(value = "update_time", fill = FieldFill.INSERT_UPDATE)
     @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss", timezone = "Asia/Shanghai")
     private LocalDateTime updateTime;
-    //修改人
+
+    /**
+     * 修改人
+     */
     @TableField("update_by")
     private String updateBy;
 
-    //是否删除(0否1是)
+    /**
+     * 是否删除(0否1是)
+     */
     @TableField("is_delete")
     @TableLogic
     private Integer isDelete;

+ 5 - 0
nightFragrance-massage/src/main/java/com/ylx/massage/domain/TWxUser.java

@@ -173,6 +173,11 @@ public class TWxUser implements Serializable {
     @ApiModelProperty("本地生活用户id")
     private String localLiveUserId;
 
+    /**
+     * 审核状态:-1-申请入驻 0-待入驻 1-待审核,2-审核通过,3-审核驳回
+     */
+    private Integer auditStatus;
+
     public String getcOpenid() {
         return cOpenid;
     }

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

@@ -20,9 +20,9 @@ public class TechnicianMoment {
     private Long id;
 
     /**
-     * 技师ID
+     * 商户ID
      */
-    private String technicianId;
+    private Integer technicianId;
 
     /**
      * 动态标题

+ 2 - 1
nightFragrance-massage/src/main/java/com/ylx/massage/domain/dto/MerchantApplyFileDto.java

@@ -2,6 +2,7 @@ package com.ylx.massage.domain.dto;
 
 import lombok.Data;
 
+import java.math.BigDecimal;
 import java.util.List;
 
 @Data
@@ -26,7 +27,7 @@ public class MerchantApplyFileDto {
     /**
      * 文件大小,单位字节。
      */
-    private Long fileSize;
+    private BigDecimal fileSize;
 
     /**
      * 文件 MIME 类型,如 image/jpeg。

+ 2 - 2
nightFragrance-massage/src/main/java/com/ylx/massage/domain/dto/PublishMomentDTO.java

@@ -59,9 +59,9 @@ public class PublishMomentDTO {
     /**
      * 可见范围:1-公开
      */
-    @ApiModelProperty(value = "可见范围:1-公开", required = true)
+    /*@ApiModelProperty(value = "可见范围:1-公开", required = true)
     @NotNull(message = "可见范围不能为空")
-    private Integer visibleRange;
+    private Integer visibleRange;*/
 
     /**
      * 纬度

+ 42 - 8
nightFragrance-massage/src/main/java/com/ylx/massage/domain/vo/MomentDetailVO.java

@@ -15,24 +15,45 @@ import java.util.List;
 @ApiModel("动态详情")
 public class MomentDetailVO {
 
+    /**
+     * 动态ID
+     */
     @ApiModelProperty("动态ID")
     private Long id;
 
+    /**
+     * 动态标题
+     */
     @ApiModelProperty("动态标题")
     private String title;
 
+    /**
+     * 动态内容
+     */
     @ApiModelProperty("动态内容")
     private String content;
 
+    /**
+     * 媒体类型:1-图片,2-视频
+     */
     @ApiModelProperty("媒体类型:1-图片,2-视频")
     private Integer mediaType;
 
+    /**
+     * 封面图URL
+     */
     @ApiModelProperty("封面图URL")
     private String coverUrl;
 
+    /**
+     * 浏览量
+     */
     @ApiModelProperty("浏览量")
     private Integer viewCount;
 
+    /**
+     * 发布时间
+     */
     @ApiModelProperty("发布时间")
     private LocalDateTime publishTime;
 
@@ -46,19 +67,34 @@ public class MomentDetailVO {
      */
     private BigDecimal latitude;
 
+    /**
+     * 发布地址
+     */
     @ApiModelProperty("发布地址")
     private String address;
 
 
-    @ApiModelProperty("技师ID")
-    private String technicianId;
+    /**
+     * 商户ID
+     */
+    @ApiModelProperty("商户ID")
+    private Integer technicianId;
 
-    @ApiModelProperty("技师昵称")
+    /**
+     * 商户昵称
+     */
+    @ApiModelProperty("商户昵称")
     private String technicianNickName;
 
+    /**
+     * 技师头像
+     */
     @ApiModelProperty("技师头像")
     private String technicianAvatar;
 
+    /**
+     * 技师状态:1-可服务,2-可预约
+     */
     @ApiModelProperty("技师状态:1-可服务,2-可预约")
     private Integer technicianStatus;
 
@@ -68,11 +104,9 @@ public class MomentDetailVO {
     @ApiModelProperty("媒体列表")
     private List<MomentMediaVO> mediaList;
 
-    @ApiModelProperty("距离(km)")
-    private Double distance;
-
     /**
-     * 可见范围:1-公开
+     * 距离(km)
      */
-    private Integer visibleRange;
+    @ApiModelProperty("距离(km)")
+    private Double distance;
 }

+ 0 - 1
nightFragrance-massage/src/main/java/com/ylx/massage/domain/vo/MomentListVO.java

@@ -76,7 +76,6 @@ public class MomentListVO {
     private String technicianNickName;
 
     /**
-     * 技师头像
      * 技师头像图片的访问地址
      */
     @ApiModelProperty("技师头像")

+ 6 - 0
nightFragrance-massage/src/main/java/com/ylx/massage/domain/vo/MyMomentVO.java

@@ -25,6 +25,12 @@ public class MyMomentVO {
     @ApiModelProperty("动态标题")
     private String title;
 
+    /**
+     * 动态内容
+     */
+    @ApiModelProperty("动态内容")
+    private String content;
+
     /**
      * 审核状态:1-待审核,2-审核通过,3-审核拒绝
      */

+ 21 - 8
nightFragrance-massage/src/main/java/com/ylx/massage/service/impl/MaTechnicianServiceImpl.java

@@ -102,8 +102,12 @@ public class MaTechnicianServiceImpl extends ServiceImpl<MaTechnicianMapper, MaT
     @Resource
     private MaTechnicianMapper maTechnicianMapper;
 
+    @Resource
+    private TWxUserMapper tWxUserMapper;
+
     @Resource
     private MaTeProjectMapper maTeProjectMapper;
+
     @Resource
     private MaProjectMapper maProjectMapper;
 
@@ -169,19 +173,26 @@ public class MaTechnicianServiceImpl extends ServiceImpl<MaTechnicianMapper, MaT
      * @param maTechnician
      */
     private void insertCity(MaTechnicianAppAddVo req, MaTechnician maTechnician1, MaTechnician maTechnician) {
-        // 初始化加密工具
-        BCryptPasswordEncoder encoder = new BCryptPasswordEncoder();
-        //技师类型默认为真实商户
+        //商户类型默认为真实商户
         maTechnician.setTechType(0);
         maTechnician.setCreateBy("admin");
+        // 审核状态:待入驻
         maTechnician.setAuditStatus(AUDIT_WAIT_ENTER);
+        maTechnicianMapper.insert(maTechnician);
+
+        TWxUser wxUser = new TWxUser();
+        // 初始化加密工具
+        BCryptPasswordEncoder encoder = new BCryptPasswordEncoder();
         //密码默认123456
-        maTechnician.setTePassword(encoder.encode(PASSWORD));
+        wxUser.setCPassword(encoder.encode(PASSWORD));
+        wxUser.setRole(1);
+        LambdaUpdateWrapper<TWxUser> updateWrapper = new LambdaUpdateWrapper<>();
+        updateWrapper.eq(TWxUser::getcOpenid, req.getCOpenid());
+        tWxUserMapper.update(wxUser, updateWrapper);
 
-        LambdaUpdateWrapper<MaTechnician> updateWrapper = new LambdaUpdateWrapper<>();
+        /*LambdaUpdateWrapper<MaTechnician> updateWrapper = new LambdaUpdateWrapper<>();
         updateWrapper.eq(MaTechnician::getId, maTechnician1.getId());
-        maTechnicianMapper.update(maTechnician, updateWrapper);
-
+        maTechnicianMapper.update(maTechnician, updateWrapper);*/
         CityOperationApplication cityOperationApplication = new CityOperationApplication();
         cityOperationApplication.setMerchantId(maTechnician1.getId());
         cityOperationApplication.setProvinceCode(req.getProvinceCode());
@@ -330,7 +341,7 @@ public class MaTechnicianServiceImpl extends ServiceImpl<MaTechnicianMapper, MaT
             throw new ServiceException("商户ID不能为空");
         }
         if (technician.getTeNickName() == null && technician.getTeBrief() == null) {
-            return;
+            throw new ServiceException("昵称和简介不能为空");
         }
         LambdaUpdateWrapper<MaTechnician> updateWrapper = new LambdaUpdateWrapper<>();
         updateWrapper.eq(MaTechnician::getId, merchantId);
@@ -340,6 +351,8 @@ public class MaTechnicianServiceImpl extends ServiceImpl<MaTechnicianMapper, MaT
         if (technician.getTeBrief() != null) {
             updateWrapper.set(MaTechnician::getTeBrief, technician.getTeBrief());
         }
+        // 审核状态默认设为1 待审核
+        updateWrapper.set(MaTechnician::getAuditStatus, 1);
         int rows = maTechnicianMapper.update(null, updateWrapper);
         if (rows <= 0) {
             throw new ServiceException("修改商户基础信息失败");

+ 57 - 60
nightFragrance-massage/src/main/java/com/ylx/massage/service/impl/TechnicianMomentServiceImpl.java

@@ -5,6 +5,7 @@ import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
 import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
 import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
 import com.ylx.common.exception.ServiceException;
+import com.ylx.massage.domain.MaTechnician;
 import com.ylx.massage.domain.MomentMedia;
 import com.ylx.massage.domain.TJs;
 import com.ylx.massage.domain.TechnicianMoment;
@@ -13,6 +14,7 @@ import com.ylx.massage.domain.dto.MomentAuditDTO;
 import com.ylx.massage.domain.dto.MomentManageQueryDTO;
 import com.ylx.massage.domain.dto.PublishMomentDTO;
 import com.ylx.massage.domain.vo.*;
+import com.ylx.massage.mapper.MaTechnicianMapper;
 import com.ylx.massage.mapper.MomentMediaMapper;
 import com.ylx.massage.mapper.TJsMapper;
 import com.ylx.massage.mapper.TechnicianMomentMapper;
@@ -47,6 +49,9 @@ public class TechnicianMomentServiceImpl extends ServiceImpl<TechnicianMomentMap
     @Autowired
     private TJsMapper tJsMapper;
 
+    @Autowired
+    private MaTechnicianMapper maTechnicianMapper;
+
     /**
      * 查询推荐动态列表(不分地区,按日期倒序,同一天按浏览量倒序)
      *
@@ -63,18 +68,18 @@ public class TechnicianMomentServiceImpl extends ServiceImpl<TechnicianMomentMap
         }
 
         // 查询技师信息
-        List<String> technicianIds = moments.stream().map(TechnicianMoment::getTechnicianId).collect(Collectors.toList());
-        Map<String, TJs> technicianMap = getTechnicianMap(technicianIds);
+        List<Integer> technicianIds = moments.stream().map(TechnicianMoment::getTechnicianId).collect(Collectors.toList());
+        Map<Integer, MaTechnician> technicianMap = getTechnicianMap(technicianIds);
 
         // 组装VO
         return moments.stream().map(moment -> {
             MomentListVO vo = new MomentListVO();
             BeanUtils.copyProperties(moment, vo);
 
-            TJs technician = technicianMap.get(moment.getTechnicianId());
+            MaTechnician technician = technicianMap.get(moment.getTechnicianId());
             if (technician != null) {
-                vo.setTechnicianNickName(technician.getcNickName());
-                vo.setTechnicianAvatar(technician.getcPortrait());
+                vo.setTechnicianNickName(technician.getTeNickName());
+                vo.setTechnicianAvatar(technician.getTeAvatar());
                 vo.setTechnicianStatus(getTechnicianStatus(technician));
             }
             return vo;
@@ -93,18 +98,18 @@ public class TechnicianMomentServiceImpl extends ServiceImpl<TechnicianMomentMap
         }
 
         // 查询技师信息
-        List<String> technicianIds = moments.stream().map(TechnicianMoment::getTechnicianId).collect(Collectors.toList());
-        Map<String, TJs> technicianMap = getTechnicianMap(technicianIds);
+        List<Integer> technicianIds = moments.stream().map(TechnicianMoment::getTechnicianId).collect(Collectors.toList());
+        Map<Integer, MaTechnician> technicianMap = getTechnicianMap(technicianIds);
 
         // 组装VO
         return moments.stream().map(moment -> {
             MomentListVO vo = new MomentListVO();
             BeanUtils.copyProperties(moment, vo);
 
-            TJs technician = technicianMap.get(moment.getTechnicianId());
+            MaTechnician technician = technicianMap.get(moment.getTechnicianId());
             if (technician != null) {
-                vo.setTechnicianNickName(technician.getcNickName());
-                vo.setTechnicianAvatar(technician.getcPortrait());
+                vo.setTechnicianNickName(technician.getTeNickName());
+                vo.setTechnicianAvatar(technician.getTeAvatar());
                 vo.setTechnicianStatus(getTechnicianStatus(technician));
             }
             return vo;
@@ -132,21 +137,19 @@ public class TechnicianMomentServiceImpl extends ServiceImpl<TechnicianMomentMap
         }
 
         // 查询技师信息
-        List<String> technicianIds = moments.stream()
-                .map(TechnicianMoment::getTechnicianId)
-                .collect(Collectors.toList());
+        List<Integer> technicianIds = moments.stream().map(TechnicianMoment::getTechnicianId).collect(Collectors.toList());
 
-        Map<String, TJs> technicianMap = getTechnicianMap(technicianIds);
+        Map<Integer, MaTechnician> technicianMap = getTechnicianMap(technicianIds);
 
         // 组装VO(需要计算距离)
         return moments.stream().map(moment -> {
             MomentListVO vo = new MomentListVO();
             BeanUtils.copyProperties(moment, vo);
 
-            TJs technician = technicianMap.get(String.valueOf(moment.getTechnicianId()));
+            MaTechnician technician = technicianMap.get(moment.getTechnicianId());
             if (technician != null) {
-                vo.setTechnicianNickName(technician.getcNickName());
-                vo.setTechnicianAvatar(technician.getcPortrait());
+                vo.setTechnicianNickName(technician.getTeNickName());
+                vo.setTechnicianAvatar(technician.getTeAvatar());
                 vo.setTechnicianStatus(getTechnicianStatus(technician));
 
                 // 计算距离
@@ -183,8 +186,8 @@ public class TechnicianMomentServiceImpl extends ServiceImpl<TechnicianMomentMap
         momentMapper.incrementViewCount(momentId);
         moment.setViewCount(moment.getViewCount() + 1);
 
-        // 查询技师信息
-        TJs technician = tJsMapper.selectById(moment.getTechnicianId());
+        // 查询商户信息
+        MaTechnician technician = maTechnicianMapper.selectById(moment.getTechnicianId());
 
         // 查询媒体列表
         List<MomentMedia> mediaList = mediaMapper.selectMediaListByMomentId(momentId);
@@ -199,19 +202,21 @@ public class TechnicianMomentServiceImpl extends ServiceImpl<TechnicianMomentMap
         BeanUtils.copyProperties(moment, vo);
 
         if (technician != null) {
-            vo.setTechnicianNickName(technician.getcNickName());
-            vo.setTechnicianAvatar(technician.getcPortrait());
+            vo.setTechnicianNickName(technician.getTeNickName());
+            vo.setTechnicianAvatar(technician.getTeAvatar());
             vo.setTechnicianStatus(getTechnicianStatus(technician));
         }
         vo.setMediaList(mediaVOList);
         // 计算距离(如果有位置信息)
         if (moment.getLatitude() != null && moment.getLongitude() != null) {
-            // 传入用户位置,计算用户与技师之间的距离
-            double distance = calculateDistance(
-                    latitude.doubleValue(), longitude.doubleValue(),
-                    moment.getLatitude().doubleValue(), moment.getLongitude().doubleValue()
-            );
-            vo.setDistance(Math.round(distance * 100.0) / 100.0); // 保留两位小数
+            if(latitude != null && longitude != null){
+                // 传入用户位置,计算用户与技师之间的距离
+                double distance = calculateDistance(
+                        latitude.doubleValue(), longitude.doubleValue(),
+                        moment.getLatitude().doubleValue(), moment.getLongitude().doubleValue()
+                );
+                vo.setDistance(Math.round(distance * 100.0) / 100.0); // 保留两位小数
+            }
         }
         return vo;
     }
@@ -222,11 +227,10 @@ public class TechnicianMomentServiceImpl extends ServiceImpl<TechnicianMomentMap
      * @param technicianIds 技师ID列表
      * @return Map<String, TJs> 技师ID-技师实体映射
      */
-    private Map<String, TJs> getTechnicianMap(List<String> technicianIds) {
-        List<String> ids = technicianIds.stream()
-                .map(String::valueOf)
+    private Map<Integer, MaTechnician> getTechnicianMap(List<Integer> technicianIds) {
+        List<Integer> ids = technicianIds.stream()
                 .collect(Collectors.toList());
-        return tJsMapper.selectBatchIds(ids).stream().collect(Collectors.toMap(TJs::getId, t -> t));
+        return maTechnicianMapper.selectBatchIds(ids).stream().collect(Collectors.toMap(MaTechnician::getId, t -> t));
     }
 
     /**
@@ -234,10 +238,10 @@ public class TechnicianMomentServiceImpl extends ServiceImpl<TechnicianMomentMap
      * 1-可服务(当前时间技师空闲)
      * 2-可预约(当前时间技师"已接单-服务中")
      */
-    private Integer getTechnicianStatus(TJs technician) {
-        if (technician.getnStatus() != null && technician.getnStatus() == 0) {
+    private Integer getTechnicianStatus(MaTechnician technician) {
+        if (technician.getServiceState() != null && technician.getServiceState() == 1) {
             return 1; // 可服务
-        } else if (technician.getnStatus() != null && technician.getnStatus() == 1) {
+        } else if (technician.getServiceState() != null && technician.getServiceState() == 0) {
             return 2; // 可预约(服务中)
         }
         return null;
@@ -279,11 +283,11 @@ public class TechnicianMomentServiceImpl extends ServiceImpl<TechnicianMomentMap
     @Transactional(rollbackFor = Exception.class)
     public Long publishMoment(PublishMomentDTO dto, String openId) {
         // 根据openId查询技师信息
-        LambdaQueryWrapper<TJs> queryWrapper = new LambdaQueryWrapper<>();
-        queryWrapper.eq(TJs::getcOpenId, openId);
-        TJs technician = tJsMapper.selectOne(queryWrapper);
+        LambdaQueryWrapper<MaTechnician> queryWrapper = new LambdaQueryWrapper<>();
+        queryWrapper.eq(MaTechnician::getCOpenid, openId);
+        MaTechnician technician = maTechnicianMapper.selectOne(queryWrapper);
         if (technician == null) {
-            throw new ServiceException("技师信息不存在");
+            throw new ServiceException("商户信息不存在");
         }
 
         //查询是否保存为草稿
@@ -299,7 +303,7 @@ public class TechnicianMomentServiceImpl extends ServiceImpl<TechnicianMomentMap
                 throw new ServiceException("动态标题不能为空");
             }
             // 校验动态内容
-            if (dto.getContent() == null || dto.getContent().trim().isEmpty()) {
+            if (StringUtils.isBlank(dto.getContent())) {
                 throw new ServiceException("动态内容不能为空");
             }
             // 校验媒体类型和媒体文件
@@ -316,16 +320,12 @@ public class TechnicianMomentServiceImpl extends ServiceImpl<TechnicianMomentMap
                 }
             } else if (dto.getMediaType() == 2) {
                 // 视频类型
-                if (dto.getVideoUrl() == null || dto.getVideoUrl().trim().isEmpty()) {
+                if (StringUtils.isBlank(dto.getVideoUrl())) {
                     throw new ServiceException("视频不能为空");
                 }
             } else {
                 throw new ServiceException("媒体类型不正确");
             }
-            // 校验可见范围
-            if (dto.getVisibleRange() == null || dto.getVisibleRange() != 1) {
-                throw new ServiceException("可见范围只能选择公开");
-            }
         }
 
         // 创建动态对象
@@ -334,7 +334,6 @@ public class TechnicianMomentServiceImpl extends ServiceImpl<TechnicianMomentMap
         moment.setTitle(dto.getTitle());
         moment.setContent(dto.getContent());
         moment.setMediaType(dto.getMediaType());
-        moment.setVisibleRange(dto.getVisibleRange());
         moment.setLatitude(dto.getLatitude());
         moment.setLongitude(dto.getLongitude());
         moment.setLocation(dto.getLocation());
@@ -583,14 +582,14 @@ public class TechnicianMomentServiceImpl extends ServiceImpl<TechnicianMomentMap
         }
 
         // 1. 根据openId查询技师信息
-        LambdaQueryWrapper<TJs> queryWrapper = new LambdaQueryWrapper<>();
-        queryWrapper.eq(TJs::getcOpenId, openId);
-        TJs technician = tJsMapper.selectOne(queryWrapper);
+        LambdaQueryWrapper<MaTechnician> queryWrapper = new LambdaQueryWrapper<>();
+        queryWrapper.eq(MaTechnician::getCOpenid, openId);
+        MaTechnician technician = maTechnicianMapper.selectOne(queryWrapper);
         if (technician == null) {
-            throw new ServiceException("技师信息不存在");
+            throw new ServiceException("商户信息不存在");
         }
 
-        // 2. 查询该技师的草稿列表
+        // 2. 查询该商户的草稿列表
         Page<TechnicianMoment> page = new Page<>(pageNum, pageSize);
         LambdaQueryWrapper<TechnicianMoment> momentWrapper = new LambdaQueryWrapper<>();
         momentWrapper.eq(TechnicianMoment::getTechnicianId, technician.getId())
@@ -610,15 +609,14 @@ public class TechnicianMomentServiceImpl extends ServiceImpl<TechnicianMomentMap
         List<MomentListVO> collect = moments.stream().map(moment -> {
             MomentListVO vo = new MomentListVO();
             BeanUtils.copyProperties(moment, vo);
-            vo.setTechnicianNickName(technician.getcNickName());
-            vo.setTechnicianAvatar(technician.getcPortrait());
+            vo.setTechnicianNickName(technician.getTeNickName());
+            vo.setTechnicianAvatar(technician.getTeAvatar());
             vo.setTechnicianStatus(getTechnicianStatus(technician));
             // 草稿的发布时间使用创建时间
             vo.setPublishTime(moment.getCreateTime());
             return vo;
         }).collect(Collectors.toList());
         //返回Page对象
-
         voPage.setTotal(momentPage.getTotal());
         voPage.setRecords(collect);
         return voPage;
@@ -674,6 +672,7 @@ public class TechnicianMomentServiceImpl extends ServiceImpl<TechnicianMomentMap
             MyMomentVO vo = new MyMomentVO();
             vo.setId(moment.getId());
             vo.setTitle(moment.getTitle());
+            vo.setContent(moment.getContent());
             vo.setAuditStatus(moment.getAuditStatus());
             vo.setCoverUrl(moment.getCoverUrl());
             vo.setPublishTime(moment.getPublishTime());
@@ -804,10 +803,8 @@ public class TechnicianMomentServiceImpl extends ServiceImpl<TechnicianMomentMap
         }
 
         // 5. 批量查询技师信息
-        List<String> technicianIds = moments.stream()
-                .map(TechnicianMoment::getTechnicianId)
-                .collect(Collectors.toList());
-        Map<String, TJs> technicianMap = getTechnicianMap(technicianIds);
+        List<Integer> technicianIds = moments.stream().map(TechnicianMoment::getTechnicianId).collect(Collectors.toList());
+        Map<Integer, MaTechnician> technicianMap = getTechnicianMap(technicianIds);
 
         // 6. 组装VO列表
         List<MomentManageVO> voList = moments.stream().map(moment -> {
@@ -815,12 +812,12 @@ public class TechnicianMomentServiceImpl extends ServiceImpl<TechnicianMomentMap
             BeanUtils.copyProperties(moment, vo);
 
             // 设置技师信息
-            TJs technician = technicianMap.get(moment.getTechnicianId());
+            MaTechnician technician = technicianMap.get(moment.getTechnicianId());
             if (technician != null) {
                 // 设置技师姓名
-                vo.setTechnicianName(technician.getcName());
+                vo.setTechnicianName(technician.getTeName());
                 // 设置技师昵称
-                vo.setTechnicianNickname(technician.getcNickName());
+                vo.setTechnicianNickname(technician.getTeNickName());
             }
             return vo;
         }).collect(Collectors.toList());

+ 15 - 0
nightFragrance-massage/src/main/java/com/ylx/massage/utils/VirtualTechnicianNicknameGenerator.java

@@ -71,6 +71,21 @@ public class VirtualTechnicianNicknameGenerator {
             "竹", "月", "雪", "云", "霞", "露", "霜", "冰", "清", "洁"
     };
 
+
+    private static final String[] PREFIX = {
+            "Cool", "Lucky", "Fast", "Dark", "Sky", "Neo", "Star", "Zero"
+    };
+
+    private static final String[] SUFFIX = {
+            "Tiger", "Wolf", "Fox", "Dragon", "Cat", "Eagle", "Bear", "Shark"
+    };
+
+    public static String generateNickname() {
+        Random random = new Random();
+        String name = PREFIX[random.nextInt(PREFIX.length)] + SUFFIX[random.nextInt(SUFFIX.length)] + random.nextInt(1000);
+        return name;
+    }
+
     /**
      * 缓存已存在的昵称集合,避免频繁查询数据库
      */

+ 57 - 57
nightFragrance-quartz/src/main/java/com/ylx/quartz/domain/SysJobLog.java

@@ -1,6 +1,7 @@
 package com.ylx.quartz.domain;
 
 import java.util.Date;
+
 import org.apache.commons.lang3.builder.ToStringBuilder;
 import org.apache.commons.lang3.builder.ToStringStyle;
 import com.ylx.common.annotation.Excel;
@@ -11,145 +12,144 @@ import com.ylx.common.core.domain.BaseEntity;
  *
  * @author ylx
  */
-public class SysJobLog extends BaseEntity
-{
+public class SysJobLog extends BaseEntity {
     private static final long serialVersionUID = 1L;
 
-    /** ID */
+    /**
+     * ID
+     */
     @Excel(name = "日志序号")
     private Long jobLogId;
 
-    /** 任务名称 */
+    /**
+     * 任务名称
+     */
     @Excel(name = "任务名称")
     private String jobName;
 
-    /** 任务组名 */
+    /**
+     * 任务组名
+     */
     @Excel(name = "任务组名")
     private String jobGroup;
 
-    /** 调用目标字符串 */
+    /**
+     * 调用目标字符串
+     */
     @Excel(name = "调用目标字符串")
     private String invokeTarget;
 
-    /** 日志信息 */
+    /**
+     * 日志信息
+     */
     @Excel(name = "日志信息")
     private String jobMessage;
 
-    /** 执行状态(0正常 1失败) */
+    /**
+     * 执行状态(0正常 1失败)
+     */
     @Excel(name = "执行状态", readConverterExp = "0=正常,1=失败")
     private String status;
 
-    /** 异常信息 */
+    /**
+     * 异常信息
+     */
     @Excel(name = "异常信息")
     private String exceptionInfo;
 
-    /** 开始时间 */
+    /**
+     * 开始时间
+     */
     private Date startTime;
 
-    /** 停止时间 */
+    /**
+     * 停止时间
+     */
     private Date stopTime;
 
-    public Long getJobLogId()
-    {
+    public Long getJobLogId() {
         return jobLogId;
     }
 
-    public void setJobLogId(Long jobLogId)
-    {
+    public void setJobLogId(Long jobLogId) {
         this.jobLogId = jobLogId;
     }
 
-    public String getJobName()
-    {
+    public String getJobName() {
         return jobName;
     }
 
-    public void setJobName(String jobName)
-    {
+    public void setJobName(String jobName) {
         this.jobName = jobName;
     }
 
-    public String getJobGroup()
-    {
+    public String getJobGroup() {
         return jobGroup;
     }
 
-    public void setJobGroup(String jobGroup)
-    {
+    public void setJobGroup(String jobGroup) {
         this.jobGroup = jobGroup;
     }
 
-    public String getInvokeTarget()
-    {
+    public String getInvokeTarget() {
         return invokeTarget;
     }
 
-    public void setInvokeTarget(String invokeTarget)
-    {
+    public void setInvokeTarget(String invokeTarget) {
         this.invokeTarget = invokeTarget;
     }
 
-    public String getJobMessage()
-    {
+    public String getJobMessage() {
         return jobMessage;
     }
 
-    public void setJobMessage(String jobMessage)
-    {
+    public void setJobMessage(String jobMessage) {
         this.jobMessage = jobMessage;
     }
 
-    public String getStatus()
-    {
+    public String getStatus() {
         return status;
     }
 
-    public void setStatus(String status)
-    {
+    public void setStatus(String status) {
         this.status = status;
     }
 
-    public String getExceptionInfo()
-    {
+    public String getExceptionInfo() {
         return exceptionInfo;
     }
 
-    public void setExceptionInfo(String exceptionInfo)
-    {
+    public void setExceptionInfo(String exceptionInfo) {
         this.exceptionInfo = exceptionInfo;
     }
 
-    public Date getStartTime()
-    {
+    public Date getStartTime() {
         return startTime;
     }
 
-    public void setStartTime(Date startTime)
-    {
+    public void setStartTime(Date startTime) {
         this.startTime = startTime;
     }
 
-    public Date getStopTime()
-    {
+    public Date getStopTime() {
         return stopTime;
     }
 
-    public void setStopTime(Date stopTime)
-    {
+    public void setStopTime(Date stopTime) {
         this.stopTime = stopTime;
     }
 
     @Override
     public String toString() {
-        return new ToStringBuilder(this,ToStringStyle.MULTI_LINE_STYLE)
-            .append("jobLogId", getJobLogId())
-            .append("jobName", getJobName())
-            .append("jobGroup", getJobGroup())
-            .append("jobMessage", getJobMessage())
-            .append("status", getStatus())
-            .append("exceptionInfo", getExceptionInfo())
-            .append("startTime", getStartTime())
-            .append("stopTime", getStopTime())
-            .toString();
+        return new ToStringBuilder(this, ToStringStyle.MULTI_LINE_STYLE)
+                .append("jobLogId", getJobLogId())
+                .append("jobName", getJobName())
+                .append("jobGroup", getJobGroup())
+                .append("jobMessage", getJobMessage())
+                .append("status", getStatus())
+                .append("exceptionInfo", getExceptionInfo())
+                .append("startTime", getStartTime())
+                .append("stopTime", getStopTime())
+                .toString();
     }
 }