This commit is contained in:
admin
2024-05-08 21:21:29 +08:00
parent 2919029b81
commit 5838b2df35
138 changed files with 2861 additions and 1179 deletions

View File

@@ -10,15 +10,15 @@ import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.starry.admin.common.aspect.ClerkUserLogin;
import com.starry.admin.common.conf.ThreadLocalRequestDetail;
import com.starry.admin.common.exception.CustomException;
import com.starry.admin.modules.clear.module.entity.*;
import com.starry.admin.modules.clear.module.vo.PlayClerkCommodityEditVo;
import com.starry.admin.modules.clear.module.vo.PlayClerkCommodityQueryVo;
import com.starry.admin.modules.clear.service.IPlayClerkClassificationInfoService;
import com.starry.admin.modules.clear.service.IPlayClerkCommodityService;
import com.starry.admin.modules.clear.service.IPlayClerkLevelInfoService;
import com.starry.admin.modules.clear.service.IPlayClerkUserInfoService;
import com.starry.admin.modules.clear.service.impl.PlayClerkDataReviewInfoServiceImpl;
import com.starry.admin.modules.clear.service.impl.PlayClerkUserInfoServiceImpl;
import com.starry.admin.modules.clerk.module.entity.*;
import com.starry.admin.modules.clerk.module.vo.PlayClerkCommodityEditVo;
import com.starry.admin.modules.clerk.module.vo.PlayClerkCommodityQueryVo;
import com.starry.admin.modules.clerk.service.IPlayClerkClassificationInfoService;
import com.starry.admin.modules.clerk.service.IPlayClerkCommodityService;
import com.starry.admin.modules.clerk.service.IPlayClerkLevelInfoService;
import com.starry.admin.modules.clerk.service.IPlayClerkUserInfoService;
import com.starry.admin.modules.clerk.service.impl.PlayClerkDataReviewInfoServiceImpl;
import com.starry.admin.modules.clerk.service.impl.PlayClerkUserInfoServiceImpl;
import com.starry.admin.modules.weichat.entity.*;
import com.starry.admin.modules.weichat.service.WxCustomUserService;
import com.starry.admin.utils.SecurityUtils;
@@ -142,8 +142,8 @@ public class WxClerkController {
if (!dataReviewInfoService.queryList(dataReviewInfo).isEmpty()) {
throw new CustomException("已有申请未审核");
}
dataReviewInfo.setClarkAvatar(userInfo.getAvatar());
dataReviewInfo.setClarkNickname(userInfo.getNickname());
dataReviewInfo.setClerkAvatar(userInfo.getAvatar());
dataReviewInfo.setClerkNickname(userInfo.getNickname());
dataReviewInfo.setContent(JSONObject.toJSONString(vo));
dataReviewInfo.setAddTime(new Date());
dataReviewInfoService.create(dataReviewInfo);
@@ -164,8 +164,8 @@ public class WxClerkController {
if (!dataReviewInfoService.queryList(dataReviewInfo).isEmpty()) {
throw new CustomException("已有申请未审核");
}
dataReviewInfo.setClarkAvatar(userInfo.getAvatar());
dataReviewInfo.setClarkNickname(userInfo.getNickname());
dataReviewInfo.setClerkAvatar(userInfo.getAvatar());
dataReviewInfo.setClerkNickname(userInfo.getNickname());
dataReviewInfo.setContent(JSONObject.toJSONString(vo));
dataReviewInfo.setAddTime(new Date());
dataReviewInfoService.create(dataReviewInfo);
@@ -183,8 +183,8 @@ public class WxClerkController {
if (!dataReviewInfoService.queryList(dataReviewInfo).isEmpty()) {
throw new CustomException("已有申请未审核");
}
dataReviewInfo.setClarkAvatar(userInfo.getAvatar());
dataReviewInfo.setClarkNickname(userInfo.getNickname());
dataReviewInfo.setClerkAvatar(userInfo.getAvatar());
dataReviewInfo.setClerkNickname(userInfo.getNickname());
dataReviewInfo.setContent(JSONObject.toJSONString(vo));
dataReviewInfo.setAddTime(new Date());
dataReviewInfoService.create(dataReviewInfo);
@@ -203,8 +203,8 @@ public class WxClerkController {
throw new CustomException("已有申请未审核");
}
dataReviewInfo.setAddTime(new Date());
dataReviewInfo.setClarkAvatar(userInfo.getAvatar());
dataReviewInfo.setClarkNickname(userInfo.getNickname());
dataReviewInfo.setClerkAvatar(userInfo.getAvatar());
dataReviewInfo.setClerkNickname(userInfo.getNickname());
dataReviewInfo.setContent(JSONObject.toJSONString(vo));
dataReviewInfoService.create(dataReviewInfo);
return R.ok("申请成功");
@@ -241,7 +241,7 @@ public class WxClerkController {
/**
* 查询陪服务项目列表
* 查询陪服务项目列表
*/
@GetMapping("/user/listAllCommodity")
public R listAllCommodity() {
@@ -313,9 +313,6 @@ public class WxClerkController {
@GetMapping("/user/queryPriceById")
public R queryDetailById(@RequestParam("id") String id) {
PlayClerkUserInfoEntity entity = clerkUserInfoService.selectById(id);
if (entity == null) {
throw new CustomException("用户不存在");
}
return R.ok(playClerkCommodityService.selectByUser(entity.getId()));
}
@@ -332,17 +329,17 @@ public class WxClerkController {
if (entity == null) {
throw new CustomException("用户不存在");
}
List<PlayClarkUserTrendsInfoEntity> entities = new ArrayList<>();
entities.add(new PlayClarkUserTrendsInfoEntity(IdUtil.fastSimpleUUID(), "动态1", "https://live-cloud-cvoon.oss-cn-hangzhou.aliyuncs.com/d8e929c041e94075b93cfc6338a83d4c/2024/04/15/0596854e16ae4a268eab4c08e2a9f762.mp3", new Date()));
entities.add(new PlayClarkUserTrendsInfoEntity(IdUtil.fastSimpleUUID(), "动态2", "https://live-cloud-cvoon.oss-cn-hangzhou.aliyuncs.com/d8e929c041e94075b93cfc6338a83d4c/2024/04/15/0596854e16ae4a268eab4c08e2a9f762.mp3", new Date()));
entities.add(new PlayClarkUserTrendsInfoEntity(IdUtil.fastSimpleUUID(), "动态3", "https://live-cloud-cvoon.oss-cn-hangzhou.aliyuncs.com/d8e929c041e94075b93cfc6338a83d4c/2024/04/15/0596854e16ae4a268eab4c08e2a9f762.mp3", new Date()));
entities.add(new PlayClarkUserTrendsInfoEntity(IdUtil.fastSimpleUUID(), "动态4", "https://live-cloud-cvoon.oss-cn-hangzhou.aliyuncs.com/d8e929c041e94075b93cfc6338a83d4c/2024/04/15/0596854e16ae4a268eab4c08e2a9f762.mp3", new Date()));
entities.add(new PlayClarkUserTrendsInfoEntity(IdUtil.fastSimpleUUID(), "动态5", "https://live-cloud-cvoon.oss-cn-hangzhou.aliyuncs.com/d8e929c041e94075b93cfc6338a83d4c/2024/04/15/0596854e16ae4a268eab4c08e2a9f762.mp3", new Date()));
entities.add(new PlayClarkUserTrendsInfoEntity(IdUtil.fastSimpleUUID(), "动态6", "0", "https://live-cloud-cvoon.oss-cn-hangzhou.aliyuncs.com/d8e929c041e94075b93cfc6338a83d4c/2024/04/15/fc09da2f923d46e6951292ff8f34f6aa.png", new Date()));
entities.add(new PlayClarkUserTrendsInfoEntity(IdUtil.fastSimpleUUID(), "动态7", "0", "https://live-cloud-cvoon.oss-cn-hangzhou.aliyuncs.com/d8e929c041e94075b93cfc6338a83d4c/2024/04/15/fc09da2f923d46e6951292ff8f34f6aa.png", new Date()));
entities.add(new PlayClarkUserTrendsInfoEntity(IdUtil.fastSimpleUUID(), "动态8", "0", "https://live-cloud-cvoon.oss-cn-hangzhou.aliyuncs.com/d8e929c041e94075b93cfc6338a83d4c/2024/04/15/fc09da2f923d46e6951292ff8f34f6aa.png", new Date()));
List<PlayClerkUserTrendsInfoEntity> entities = new ArrayList<>();
entities.add(new PlayClerkUserTrendsInfoEntity(IdUtil.fastSimpleUUID(), "动态1", "https://live-cloud-cvoon.oss-cn-hangzhou.aliyuncs.com/d8e929c041e94075b93cfc6338a83d4c/2024/04/15/0596854e16ae4a268eab4c08e2a9f762.mp3", new Date()));
entities.add(new PlayClerkUserTrendsInfoEntity(IdUtil.fastSimpleUUID(), "动态2", "https://live-cloud-cvoon.oss-cn-hangzhou.aliyuncs.com/d8e929c041e94075b93cfc6338a83d4c/2024/04/15/0596854e16ae4a268eab4c08e2a9f762.mp3", new Date()));
entities.add(new PlayClerkUserTrendsInfoEntity(IdUtil.fastSimpleUUID(), "动态3", "https://live-cloud-cvoon.oss-cn-hangzhou.aliyuncs.com/d8e929c041e94075b93cfc6338a83d4c/2024/04/15/0596854e16ae4a268eab4c08e2a9f762.mp3", new Date()));
entities.add(new PlayClerkUserTrendsInfoEntity(IdUtil.fastSimpleUUID(), "动态4", "https://live-cloud-cvoon.oss-cn-hangzhou.aliyuncs.com/d8e929c041e94075b93cfc6338a83d4c/2024/04/15/0596854e16ae4a268eab4c08e2a9f762.mp3", new Date()));
entities.add(new PlayClerkUserTrendsInfoEntity(IdUtil.fastSimpleUUID(), "动态5", "https://live-cloud-cvoon.oss-cn-hangzhou.aliyuncs.com/d8e929c041e94075b93cfc6338a83d4c/2024/04/15/0596854e16ae4a268eab4c08e2a9f762.mp3", new Date()));
entities.add(new PlayClerkUserTrendsInfoEntity(IdUtil.fastSimpleUUID(), "动态6", "0", "https://live-cloud-cvoon.oss-cn-hangzhou.aliyuncs.com/d8e929c041e94075b93cfc6338a83d4c/2024/04/15/fc09da2f923d46e6951292ff8f34f6aa.png", new Date()));
entities.add(new PlayClerkUserTrendsInfoEntity(IdUtil.fastSimpleUUID(), "动态7", "0", "https://live-cloud-cvoon.oss-cn-hangzhou.aliyuncs.com/d8e929c041e94075b93cfc6338a83d4c/2024/04/15/fc09da2f923d46e6951292ff8f34f6aa.png", new Date()));
entities.add(new PlayClerkUserTrendsInfoEntity(IdUtil.fastSimpleUUID(), "动态8", "0", "https://live-cloud-cvoon.oss-cn-hangzhou.aliyuncs.com/d8e929c041e94075b93cfc6338a83d4c/2024/04/15/fc09da2f923d46e6951292ff8f34f6aa.png", new Date()));
IPage<PlayClarkUserTrendsInfoEntity> resultPage = new Page<>();
IPage<PlayClerkUserTrendsInfoEntity> resultPage = new Page<>();
resultPage.setRecords(entities);
// 设置分页参数
resultPage.setCurrent(1);
@@ -365,15 +362,15 @@ public class WxClerkController {
throw new CustomException("用户不存在");
}
List<PlayClarkUserEvaluateInfoEntity> entities = new ArrayList<>();
entities.add(new PlayClarkUserEvaluateInfoEntity(IdUtil.fastSimpleUUID(), IdUtil.fastSimpleUUID(), "评价人1昵称", "https://live-cloud-cvoon.oss-cn-hangzhou.aliyuncs.com/d8e929c041e94075b93cfc6338a83d4c/2024/04/15/fc09da2f923d46e6951292ff8f34f6aa.png", "评价内容", new Date(), IdUtil.fastSimpleUUID(), "店员昵称", IdUtil.fastSimpleUUID(), "文字语音条", "一小时"));
entities.add(new PlayClarkUserEvaluateInfoEntity(IdUtil.fastSimpleUUID(), IdUtil.fastSimpleUUID(), "评价人2昵称", "https://live-cloud-cvoon.oss-cn-hangzhou.aliyuncs.com/d8e929c041e94075b93cfc6338a83d4c/2024/04/15/fc09da2f923d46e6951292ff8f34f6aa.png", "评价内容", new Date(), IdUtil.fastSimpleUUID(), "店员昵称", IdUtil.fastSimpleUUID(), "文字语音条", "一小时"));
entities.add(new PlayClarkUserEvaluateInfoEntity(IdUtil.fastSimpleUUID(), IdUtil.fastSimpleUUID(), "评价人3昵称", "https://live-cloud-cvoon.oss-cn-hangzhou.aliyuncs.com/d8e929c041e94075b93cfc6338a83d4c/2024/04/15/fc09da2f923d46e6951292ff8f34f6aa.png", "评价内容", new Date(), IdUtil.fastSimpleUUID(), "店员昵称", IdUtil.fastSimpleUUID(), "文字语音条", "一小时"));
entities.add(new PlayClarkUserEvaluateInfoEntity(IdUtil.fastSimpleUUID(), IdUtil.fastSimpleUUID(), "评价人4昵称", "https://live-cloud-cvoon.oss-cn-hangzhou.aliyuncs.com/d8e929c041e94075b93cfc6338a83d4c/2024/04/15/fc09da2f923d46e6951292ff8f34f6aa.png", "评价内容", new Date(), IdUtil.fastSimpleUUID(), "店员昵称", IdUtil.fastSimpleUUID(), "文字语音条", "一小时"));
entities.add(new PlayClarkUserEvaluateInfoEntity(IdUtil.fastSimpleUUID(), IdUtil.fastSimpleUUID(), "评价人5昵称", "https://live-cloud-cvoon.oss-cn-hangzhou.aliyuncs.com/d8e929c041e94075b93cfc6338a83d4c/2024/04/15/fc09da2f923d46e6951292ff8f34f6aa.png", "评价内容", new Date(), IdUtil.fastSimpleUUID(), "店员昵称", IdUtil.fastSimpleUUID(), "文字语音条", "一小时"));
entities.add(new PlayClarkUserEvaluateInfoEntity(IdUtil.fastSimpleUUID(), IdUtil.fastSimpleUUID(), "评价人5昵称", "https://live-cloud-cvoon.oss-cn-hangzhou.aliyuncs.com/d8e929c041e94075b93cfc6338a83d4c/2024/04/15/fc09da2f923d46e6951292ff8f34f6aa.png", "评价内容", new Date(), IdUtil.fastSimpleUUID(), "店员昵称", IdUtil.fastSimpleUUID(), "文字语音条", "一小时", 5));
List<PlayClerkUserEvaluateInfoEntity> entities = new ArrayList<>();
entities.add(new PlayClerkUserEvaluateInfoEntity(IdUtil.fastSimpleUUID(), IdUtil.fastSimpleUUID(), "评价人1昵称", "https://live-cloud-cvoon.oss-cn-hangzhou.aliyuncs.com/d8e929c041e94075b93cfc6338a83d4c/2024/04/15/fc09da2f923d46e6951292ff8f34f6aa.png", "评价内容", new Date(), IdUtil.fastSimpleUUID(), "店员昵称", IdUtil.fastSimpleUUID(), "文字语音条", "一小时"));
entities.add(new PlayClerkUserEvaluateInfoEntity(IdUtil.fastSimpleUUID(), IdUtil.fastSimpleUUID(), "评价人2昵称", "https://live-cloud-cvoon.oss-cn-hangzhou.aliyuncs.com/d8e929c041e94075b93cfc6338a83d4c/2024/04/15/fc09da2f923d46e6951292ff8f34f6aa.png", "评价内容", new Date(), IdUtil.fastSimpleUUID(), "店员昵称", IdUtil.fastSimpleUUID(), "文字语音条", "一小时"));
entities.add(new PlayClerkUserEvaluateInfoEntity(IdUtil.fastSimpleUUID(), IdUtil.fastSimpleUUID(), "评价人3昵称", "https://live-cloud-cvoon.oss-cn-hangzhou.aliyuncs.com/d8e929c041e94075b93cfc6338a83d4c/2024/04/15/fc09da2f923d46e6951292ff8f34f6aa.png", "评价内容", new Date(), IdUtil.fastSimpleUUID(), "店员昵称", IdUtil.fastSimpleUUID(), "文字语音条", "一小时"));
entities.add(new PlayClerkUserEvaluateInfoEntity(IdUtil.fastSimpleUUID(), IdUtil.fastSimpleUUID(), "评价人4昵称", "https://live-cloud-cvoon.oss-cn-hangzhou.aliyuncs.com/d8e929c041e94075b93cfc6338a83d4c/2024/04/15/fc09da2f923d46e6951292ff8f34f6aa.png", "评价内容", new Date(), IdUtil.fastSimpleUUID(), "店员昵称", IdUtil.fastSimpleUUID(), "文字语音条", "一小时"));
entities.add(new PlayClerkUserEvaluateInfoEntity(IdUtil.fastSimpleUUID(), IdUtil.fastSimpleUUID(), "评价人5昵称", "https://live-cloud-cvoon.oss-cn-hangzhou.aliyuncs.com/d8e929c041e94075b93cfc6338a83d4c/2024/04/15/fc09da2f923d46e6951292ff8f34f6aa.png", "评价内容", new Date(), IdUtil.fastSimpleUUID(), "店员昵称", IdUtil.fastSimpleUUID(), "文字语音条", "一小时"));
entities.add(new PlayClerkUserEvaluateInfoEntity(IdUtil.fastSimpleUUID(), IdUtil.fastSimpleUUID(), "评价人5昵称", "https://live-cloud-cvoon.oss-cn-hangzhou.aliyuncs.com/d8e929c041e94075b93cfc6338a83d4c/2024/04/15/fc09da2f923d46e6951292ff8f34f6aa.png", "评价内容", new Date(), IdUtil.fastSimpleUUID(), "店员昵称", IdUtil.fastSimpleUUID(), "文字语音条", "一小时", 5));
IPage<PlayClarkUserEvaluateInfoEntity> resultPage = new Page<>();
IPage<PlayClerkUserEvaluateInfoEntity> resultPage = new Page<>();
resultPage.setRecords(entities);
// 设置分页参数
resultPage.setCurrent(1);

View File

@@ -1,9 +1,9 @@
package com.starry.admin.modules.weichat.controller;
import com.starry.admin.modules.clear.module.entity.PlayClerkCommodityEntity;
import com.starry.admin.modules.clear.service.IPlayClerkCommodityService;
import com.starry.admin.modules.weichat.entity.PlayClarkCommodityTreeData;
import com.starry.admin.modules.clerk.module.entity.PlayClerkCommodityEntity;
import com.starry.admin.modules.clerk.service.IPlayClerkCommodityService;
import com.starry.admin.modules.weichat.entity.PlayClerkCommodityTreeData;
import com.starry.common.result.R;
import lombok.extern.slf4j.Slf4j;
import org.springframework.web.bind.annotation.GetMapping;
@@ -31,9 +31,10 @@ public class WxCommodityController {
public R getTree(@RequestParam("userId") String userId) {
List<PlayClerkCommodityEntity> commodityEntities = clerkCommodityService.selectByUser(userId);
Map<String, List<PlayClerkCommodityEntity>> item = commodityEntities.stream().collect(Collectors.groupingBy(PlayClerkCommodityEntity::getCommodityName));
List<PlayClarkCommodityTreeData> result = new ArrayList<>();
List<PlayClerkCommodityTreeData> result = new ArrayList<>();
for (Map.Entry<String, List<PlayClerkCommodityEntity>> entry : item.entrySet()) {
PlayClarkCommodityTreeData treeData = new PlayClarkCommodityTreeData(entry.getKey(), entry.getValue());
PlayClerkCommodityTreeData treeData = new PlayClerkCommodityTreeData(entry.getKey(),entry.getValue());
result.add(treeData);
}
return R.ok(result);

View File

@@ -1,14 +1,10 @@
package com.starry.admin.modules.weichat.controller;
import cn.hutool.core.io.FastByteArrayOutputStream;
import cn.hutool.core.io.FileUtil;
import cn.hutool.core.io.IoUtil;
import cn.hutool.core.util.IdUtil;
import cn.hutool.core.util.StrUtil;
import com.alibaba.fastjson2.JSONObject;
import com.starry.admin.common.exception.CustomException;
import com.starry.admin.common.oss.service.IOssFileService;
import com.starry.admin.modules.system.entity.SysAdministrativeAreaDictInfoEntity;
import com.starry.admin.modules.system.service.ISysAdministrativeAreaDictInfoService;
import com.starry.admin.modules.weichat.service.WxAccessTokenService;
import com.starry.admin.modules.weichat.utils.WxFileUtils;
@@ -24,7 +20,6 @@ import java.io.File;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.InputStream;
import java.nio.charset.StandardCharsets;
import java.nio.file.Files;
/**
@@ -66,22 +61,9 @@ public class WxCommonController {
String accessToken = wxAccessTokenService.getAccessToken();
// 下载录音文件并转化为InputStream
InputStream inputStream = WxFileUtils.getTemporaryMaterial(accessToken, mediaId);
try {
FastByteArrayOutputStream read = IoUtil.read(inputStream, false);
String str = new String(read.toByteArray(), StandardCharsets.UTF_8);
JSONObject jsonObject = JSONObject.parseObject(str);
if (jsonObject.containsKey("errcode")) {
throw new CustomException("获取微信素材异常" + jsonObject.getString("errmsg"));
}
} catch (Exception e) {
log.error("获取微信素材异常,", e);
throw new CustomException("获取微信素材异常");
}
File tempFile = FileUtil.createTempFile("wx_" + SecurityUtils.getTenantId(), IdUtil.fastSimpleUUID() + ".tmp", null).toFile();
File tempFile = FileUtil.createTempFile("wx_" + SecurityUtils.getTenantId(), IdUtil.fastSimpleUUID() + ".amr", null).toFile();
// 可以在这里对临时文件进行操作
log.debug("tempFile = {}", tempFile.getPath());
log.error("tempFile = {}", tempFile.getPath());
try (FileOutputStream fileOutputStream = new FileOutputStream(tempFile)) {
byte[] buffer = new byte[1024];
int bytesRead;
@@ -95,7 +77,7 @@ public class WxCommonController {
}
//将下载的微信素材文件转化为MP3文件
File targetFile = FileUtil.createTempFile("wx_" + SecurityUtils.getTenantId(), IdUtil.fastSimpleUUID() + ".mp3", null).toFile();
log.debug("targetFile = {}", targetFile.getPath());
log.error("targetFile = {}", targetFile.getPath());
WxFileUtils.audioConvert2Mp3(tempFile, targetFile);
//将MP3文件上传到OSS
String fileAddress = ossFileService.upload(Files.newInputStream(targetFile.toPath()), SecurityUtils.getTenantId(), IdUtil.fastSimpleUUID() + ".mp3");

View File

@@ -1,25 +1,26 @@
package com.starry.admin.modules.weichat.controller;
import com.baomidou.mybatisplus.core.metadata.IPage;
import com.starry.admin.common.aspect.CustomUserLogin;
import com.starry.admin.common.conf.ThreadLocalRequestDetail;
import com.starry.admin.common.exception.CustomException;
import com.starry.admin.modules.balance.service.IPlayBalanceDetailsInfoService;
import com.starry.admin.modules.clear.module.entity.PlayClerkCommodityEntity;
import com.starry.admin.modules.clear.module.entity.PlayClerkUserInfoEntity;
import com.starry.admin.modules.clear.module.entity.PlayClerkUserListResultVo;
import com.starry.admin.modules.clear.service.IPlayClerkCommodityService;
import com.starry.admin.modules.clear.service.IPlayClerkUserInfoService;
import com.starry.admin.modules.clerk.module.entity.PlayClerkCommodityEntity;
import com.starry.admin.modules.clerk.module.entity.PlayClerkUserInfoEntity;
import com.starry.admin.modules.clerk.module.entity.PlayClerkUserListResultVo;
import com.starry.admin.modules.clerk.service.IPlayClerkCommodityService;
import com.starry.admin.modules.clerk.service.IPlayClerkUserInfoService;
import com.starry.admin.modules.custom.module.entity.PlayCustomUserInfoEntity;
import com.starry.admin.modules.custom.service.IPlayCustomUserInfoService;
import com.starry.admin.modules.follow.service.IPlayCustomFollowInfoService;
import com.starry.admin.modules.gift.module.entity.PlayGiftInfoEntity;
import com.starry.admin.modules.gift.service.IPlayGiftInfoService;
import com.starry.admin.modules.order.module.entity.PlayOrderInfoEntity;
import com.starry.admin.modules.order.module.vo.PlayOrderInfoQueryVo;
import com.starry.admin.modules.order.module.vo.PlayOrderInfoReturnVo;
import com.starry.admin.modules.order.service.IPlayOrderInfoService;
import com.starry.admin.modules.weichat.entity.PlayClerkFollowStateUpdate;
import com.starry.admin.modules.weichat.entity.PlayOrderInfoCommodityAdd;
import com.starry.admin.modules.weichat.entity.PlayOrderInfoGiftAdd;
import com.starry.admin.modules.weichat.entity.PlayOrderInfoRewardAdd;
import com.starry.admin.modules.weichat.entity.*;
import com.starry.admin.modules.weichat.service.WxCustomUserService;
import com.starry.admin.utils.MoneyUtils;
import com.starry.common.result.R;
@@ -40,14 +41,12 @@ import java.math.BigDecimal;
@RequestMapping("/wx/custom/")
public class WxCustomController {
@Resource
private IPlayCustomUserInfoService customUserInfoService;
@Resource
private IPlayBalanceDetailsInfoService playBalanceDetailsInfoService;
@Resource
private IPlayClerkUserInfoService clerkUserInfoService;
@@ -57,11 +56,9 @@ public class WxCustomController {
@Resource
private IPlayClerkCommodityService clerkCommodityService;
@Resource
private IPlayCustomFollowInfoService playCustomFollowInfoService;
@Resource
private IPlayClerkCommodityService playClerkCommodityService;
@@ -77,12 +74,9 @@ public class WxCustomController {
* @param id 店员ID
* @return 店员详细信息
*/
@GetMapping("/queryClarkDetailedById")
public R queryClarkDetailedById(@RequestParam("id") String id) {
@GetMapping("/queryClerkDetailedById")
public R queryClerkDetailedById(@RequestParam("id") String id) {
PlayClerkUserInfoEntity entity = clerkUserInfoService.selectById(id);
if (entity == null) {
throw new CustomException("用户不存在");
}
PlayClerkUserListResultVo vo = ConvertUtil.entityToVo(entity, PlayClerkUserListResultVo.class);
vo.setAddress(entity.getCity());
// 查询是否关注,未登录情况下,默认为未关注
@@ -90,13 +84,13 @@ public class WxCustomController {
if (StringUtils.isNotEmpty(loginUserId)) {
vo.setFollowState(playCustomFollowInfoService.queryFollowState(loginUserId, vo.getId()));
}
//服务项目
// 服务项目
vo.setCommodity(playClerkCommodityService.getClerkCommodityList(vo.getId()));
return R.ok(vo);
}
/**
* 查询店员详细信息
* 根据顾客ID查询当前顾客详细信息
*/
@CustomUserLogin
@GetMapping("/queryById")
@@ -116,130 +110,148 @@ public class WxCustomController {
MoneyUtils.verificationTypeIsNormal(vo.getMoney());
String userId = ThreadLocalRequestDetail.getCustomUserInfo().getId();
PlayCustomUserInfoEntity customUserInfo = customUserInfoService.selectById(userId);
if (customUserInfo == null) {
throw new CustomException("用户身份异常");
}
PlayClerkUserInfoEntity clerkUserInfo = clerkUserInfoService.selectById(vo.getClearId());
if (clerkUserInfo == null) {
throw new CustomException("打赏对象不存在");
}
PlayClerkUserInfoEntity clerkUserInfo = clerkUserInfoService.selectById(vo.getClerkId());
if (new BigDecimal(vo.getMoney()).compareTo(customUserInfo.getAccountBalance()) > 0) {
throw new CustomException("余额不足");
}
// 记录订单信息
orderInfoService.createRewardOrder(new BigDecimal(vo.getMoney()), new BigDecimal(vo.getMoney()), userId);
// 顾客减少余额
customUserInfoService.updateAccountBalanceById(customUserInfo.getId(), customUserInfo.getAccountBalance().subtract(new BigDecimal(vo.getMoney())));
playBalanceDetailsInfoService.create("0", customUserInfo.getId(), customUserInfo.getAccountBalance(), customUserInfo.getAccountBalance().subtract(new BigDecimal(vo.getMoney())), "打赏", new BigDecimal(vo.getMoney()).multiply(new BigDecimal("-1")));
// 陪玩增加余额
// 陪聊增加余额
clerkUserInfoService.updateAccountBalanceById(clerkUserInfo.getId(), clerkUserInfo.getAccountBalance().add(new BigDecimal(vo.getMoney())));
playBalanceDetailsInfoService.create("1", clerkUserInfo.getId(), clerkUserInfo.getAccountBalance(), clerkUserInfo.getAccountBalance().add(new BigDecimal(vo.getMoney())), "打赏", new BigDecimal(vo.getMoney()).multiply(new BigDecimal("1")));
return R.ok("成功");
}
/**
* 顾客下单-赠送礼物
**/
@CustomUserLogin
@PostMapping("/order/gift")
public R giftToOdder(@Validated @RequestBody PlayOrderInfoGiftAdd vo) {
int giftQuantity;
try {
giftQuantity = Integer.parseInt(vo.getGiftQuantity());
} catch (Exception e) {
throw new CustomException("礼物数量异常");
}
if (giftQuantity <= 0 || giftQuantity > 10000) {
throw new CustomException("礼物数量必须大于0并且小于1000");
}
String userId = ThreadLocalRequestDetail.getCustomUserInfo().getId();
PlayGiftInfoEntity giftInfo = giftInfoService.selectPlayGiftInfoById(vo.getGiftId());
if (giftInfo == null) {
throw new CustomException("礼物不存在");
}
PlayCustomUserInfoEntity customUserInfo = customUserInfoService.selectById(userId);
if (customUserInfo == null) {
throw new CustomException("用户身份异常");
}
PlayClerkUserInfoEntity clerkUserInfo = clerkUserInfoService.selectById(vo.getClearId());
if (clerkUserInfo == null) {
throw new CustomException("打赏对象不存在");
}
PlayClerkUserInfoEntity clerkUserInfo = clerkUserInfoService.selectById(vo.getClerkId());
BigDecimal money = giftInfo.getPrice().multiply(new BigDecimal(vo.getGiftQuantity()));
if (money.compareTo(customUserInfo.getAccountBalance()) > 0) {
throw new CustomException("账号余额不足");
}
// 记录订单信息
orderInfoService.createGiftOrder(vo.getGiftId(), giftInfo.getPrice(), vo.getGiftQuantity(), money, money, userId);
// 顾客减少余额
customUserInfoService.updateAccountBalanceById(customUserInfo.getId(), customUserInfo.getAccountBalance().subtract(money));
playBalanceDetailsInfoService.create("0", customUserInfo.getId(), customUserInfo.getAccountBalance(), customUserInfo.getAccountBalance().subtract(money), "赠送礼物", money.multiply(new BigDecimal("-1")));
// 陪玩增加余额
// 陪聊增加余额
clerkUserInfoService.updateAccountBalanceById(clerkUserInfo.getId(), clerkUserInfo.getAccountBalance().add(money));
playBalanceDetailsInfoService.create("1", clerkUserInfo.getId(), clerkUserInfo.getAccountBalance(), clerkUserInfo.getAccountBalance().add(money), "赠送礼物", money.multiply(new BigDecimal("1")));
return R.ok("成功");
}
/**
* 新增指定订单
*
* @param vo 指定订单查询对象
* @return com.starry.common.result.R
* @author 杭州世平信息科技有限公司-xuhq
* @since 2024/5/8 16:31
**/
@CustomUserLogin
@PostMapping("/order/commodity")
public R commodityToOdder(@Validated @RequestBody PlayOrderInfoCommodityAdd vo) {
int commodityId;
try {
commodityId = Integer.parseInt(vo.getCommodityQuantity());
} catch (Exception e) {
throw new CustomException("礼物数量异常");
}
if (commodityId <= 0 || commodityId > 10000) {
throw new CustomException("购买数量必须大于0并且小于1000");
}
String userId = ThreadLocalRequestDetail.getCustomUserInfo().getId();
public R commodityToOrdder(@Validated @RequestBody PlayOrderInfoCommodityAdd vo) {
String customId = ThreadLocalRequestDetail.getCustomUserInfo().getId();
PlayClerkCommodityEntity clerkCommodity = clerkCommodityService.selectPlayClerkCommodityById(vo.getCommodityId());
if (clerkCommodity == null) {
throw new CustomException("服务不存在");
}
PlayCustomUserInfoEntity customUserInfo = customUserInfoService.selectById(userId);
if (customUserInfo == null) {
throw new CustomException("用户身份异常");
}
PlayClerkUserInfoEntity clerkUserInfo = clerkUserInfoService.selectById(vo.getClearId());
if (clerkUserInfo == null) {
throw new CustomException("打赏对象不存在");
}
PlayCustomUserInfoEntity customUserInfo = customUserInfoService.selectById(customId);
PlayClerkUserInfoEntity clerkUserInfo = clerkUserInfoService.selectById(vo.getClerkId());
BigDecimal money = clerkCommodity.getCommodityPrice().multiply(new BigDecimal(vo.getCommodityQuantity()));
if (money.compareTo(customUserInfo.getAccountBalance()) > 0) {
throw new CustomException("余额不足");
}
// 记录订单信息
orderInfoService.createOrdinaryOrder("2", "0", clerkCommodity.getCommodityId(), clerkCommodity.getCommodityPrice(), vo.getCommodityQuantity(), money, money, userId);
orderInfoService.createOrdinaryOrder("2", "0", clerkCommodity.getCommodityId(), clerkCommodity.getCommodityPrice(), vo.getCommodityQuantity(), money, money, customId);
// 顾客减少余额
customUserInfoService.updateAccountBalanceById(customUserInfo.getId(), customUserInfo.getAccountBalance().subtract(money));
playBalanceDetailsInfoService.create("0", customUserInfo.getId(), customUserInfo.getAccountBalance(), customUserInfo.getAccountBalance().subtract(money), "打赏", money.multiply(new BigDecimal("-1")));
// 陪增加余额
// 陪增加余额
clerkUserInfoService.updateAccountBalanceById(clerkUserInfo.getId(), clerkUserInfo.getAccountBalance().add(money));
playBalanceDetailsInfoService.create("1", clerkUserInfo.getId(), clerkUserInfo.getAccountBalance(), clerkUserInfo.getAccountBalance().add(money), "下单", money.multiply(new BigDecimal("1")));
return R.ok("成功");
}
@CustomUserLogin
@PostMapping("/order/random")
public R randomToOrdder(@Validated @RequestBody PlayOrderInfoRandomAdd vo) {
// 下单成功后,先根据用户条件进行随机分配
return R.ok("下单成功");
}
/**
* 顾客分页查询本人订单列表
*
* @param vo 订单列表分页查询对象
* @return com.starry.common.result.R
* @author 杭州世平信息科技有限公司-xuhq
* @since 2024/5/8 15:57
**/
@CustomUserLogin
@PostMapping("/order/queryByPage")
public R queryOrderByPage(@Validated @RequestBody PlayOrderInfoQueryVo vo) {
vo.setPurchaserBy(ThreadLocalRequestDetail.getCustomUserInfo().getId());
vo.setOrderType("2");
IPage<PlayOrderInfoReturnVo> iPage = orderInfoService.selectOrderInfoPage(vo);
return R.ok(iPage);
}
/**
* 顾客分页查询本人订单详细信息
*
* @param id 订单ID
* @return com.starry.common.result.R
* @author 杭州世平信息科技有限公司-xuhq
* @since 2024/5/8 15:57
**/
@CustomUserLogin
@GetMapping("/order/queryById")
public R queryById(@RequestParam("id") String id) {
PlayOrderInfoEntity orderInfo = orderInfoService.selectOrderInfoById(id);
return R.ok(orderInfo);
}
/**
* 顾客分页查询本人订单列表
*
* @param id 订单ID
* @return com.starry.common.result.R
* @author 杭州世平信息科技有限公司-xuhq
* @since 2024/5/8 15:57
**/
@CustomUserLogin
@GetMapping("/order/cancellation")
public R cancellationOrder(@RequestParam("id") String id) {
orderInfoService.customCancellationOrder(id);
return R.ok("取消成功");
}
/**
* 顾客修改对陪玩的关注状态
*
* @param vo 陪玩的关注状态对象
* @return com.starry.common.result.R
* @author 杭州世平信息科技有限公司-xuhq
* @since 2024/5/8 15:57
**/
@CustomUserLogin
@PostMapping("/followState/update")
public R followStateUpdate(@Validated @RequestBody PlayClerkFollowStateUpdate vo) {
PlayClerkUserInfoEntity clerkUserInfo = clerkUserInfoService.selectById(vo.getClearId());
if (clerkUserInfo == null) {
throw new CustomException("关注对象不存在");
}
playCustomFollowInfoService.updateFollowState(ThreadLocalRequestDetail.getCustomUserInfo().getId(), vo.getClearId(), vo.getFollowState());
PlayClerkUserInfoEntity clerkUserInfo = clerkUserInfoService.selectById(vo.getClerkId());
playCustomFollowInfoService.updateFollowState(ThreadLocalRequestDetail.getCustomUserInfo().getId(), clerkUserInfo.getId(), vo.getFollowState());
return R.ok("修改成功");
}

View File

@@ -7,14 +7,13 @@ import com.starry.admin.common.aspect.ClerkUserLogin;
import com.starry.admin.common.aspect.CustomUserLogin;
import com.starry.admin.common.conf.ThreadLocalRequestDetail;
import com.starry.admin.common.exception.CustomException;
import com.starry.admin.modules.clear.module.entity.PlayClerkUserInfoEntity;
import com.starry.admin.modules.clear.service.IPlayClerkUserInfoService;
import com.starry.admin.modules.clerk.module.entity.PlayClerkUserInfoEntity;
import com.starry.admin.modules.clerk.service.IPlayClerkUserInfoService;
import com.starry.admin.modules.custom.module.entity.PlayCustomUserInfoEntity;
import com.starry.admin.modules.custom.service.IPlayCustomUserInfoService;
import com.starry.admin.modules.weichat.entity.WxUserLoginVo;
import com.starry.admin.modules.weichat.entity.WxUserQueryAddressVo;
import com.starry.admin.modules.weichat.service.WxCustomMpService;
import com.starry.admin.modules.weichat.service.WxCustomUserService;
import com.starry.admin.modules.weichat.service.WxOauthService;
import com.starry.admin.modules.weichat.service.WxTokenService;
import com.starry.common.redis.RedisCache;
@@ -89,26 +88,30 @@ public class WxOauthController {
}
@PostMapping("/clark/login")
@PostMapping("/clerk/login")
public R clerkLogin(@Validated @RequestBody WxUserLoginVo vo) {
String userId = wxOauthService.clarkUserLogin(vo.getCode());
PlayClerkUserInfoEntity entity = clerkUserInfoService.selectById(userId);
if (entity == null) {
throw new CustomException("用户不存在");
try {
String userId = wxOauthService.clerkUserLogin(vo.getCode());
PlayClerkUserInfoEntity entity = clerkUserInfoService.selectById(userId);
if (entity == null) {
throw new CustomException("用户不存在");
}
// 缓存租户信息
String redisKey = "TENANT_INFO:" + entity.getId();
redisCache.setCacheObject(redisKey, entity.getTenantId());
String tokenValue = tokenService.createWxUserToken(entity.getId());
JSONObject jsonObject = JSONObject.from(clerkUserInfoService.getVo(entity));
jsonObject.put("tokenValue", TOKEN_PREFIX + tokenValue);
jsonObject.put("tokenName", CLERK_USER_LOGIN_TOKEN);
jsonObject.put("loginDate", DateUtil.format(new Date(), "yyyy-MM-dd HH:mm:ss"));
clerkUserInfoService.updateTokenById(entity.getId(), tokenValue);
return R.ok(jsonObject);
} catch (Exception e) {
return R.unauthorized();
}
// 缓存租户信息
String redisKey = "TENANT_INFO:" + entity.getId();
redisCache.setCacheObject(redisKey, entity.getTenantId());
String tokenValue = tokenService.createWxUserToken(entity.getId());
JSONObject jsonObject = JSONObject.from(clerkUserInfoService.getVo(entity));
jsonObject.put("tokenValue", TOKEN_PREFIX + tokenValue);
jsonObject.put("tokenName", CLERK_USER_LOGIN_TOKEN);
jsonObject.put("loginDate", DateUtil.format(new Date(), "yyyy-MM-dd HH:mm:ss"));
clerkUserInfoService.updateTokenById(entity.getId(), tokenValue);
return R.ok(jsonObject);
}
@PostMapping("/clark/loginById")
@PostMapping("/clerk/loginById")
public R loginById(@Validated @RequestBody WxUserLoginVo vo) {
PlayClerkUserInfoEntity entity = clerkUserInfoService.selectById(vo.getCode());
if (entity == null) {
@@ -127,9 +130,9 @@ public class WxOauthController {
}
@ClerkUserLogin
@GetMapping("/clark/logout")
@GetMapping("/clerk/logout")
public R clerkLogout() {
wxOauthService.clarkUserLogout(ThreadLocalRequestDetail.getClerkUserInfo());
wxOauthService.clerkUserLogout(ThreadLocalRequestDetail.getClerkUserInfo());
return R.ok("登出成功");
}
@@ -152,22 +155,27 @@ public class WxOauthController {
@PostMapping("/custom/login")
public R customLogin(@Validated @RequestBody WxUserLoginVo vo) {
String userId = wxOauthService.customUserLogin(vo.getCode());
PlayCustomUserInfoEntity entity = customUserInfoService.selectById(userId);
if (entity == null) {
throw new CustomException("用户不存在");
try {
String userId = wxOauthService.customUserLogin(vo.getCode());
PlayCustomUserInfoEntity entity = customUserInfoService.selectById(userId);
if (entity == null) {
throw new CustomException("用户不存在");
}
// 缓存租户信息
String redisKey = "TENANT_INFO:" + entity.getId();
redisCache.setCacheObject(redisKey, entity.getTenantId());
JSONObject jsonObject = JSONObject.from(entity);
String tokenValue = tokenService.createWxUserToken(entity.getId());
jsonObject.put("tokenValue", TOKEN_PREFIX + tokenValue);
jsonObject.put("tokenName", CUSTOM_USER_LOGIN_TOKEN);
jsonObject.put("loginDate", DateUtil.format(new Date(), "yyyy-MM-dd HH:mm:ss"));
customUserInfoService.updateTokenById(entity.getId(), tokenValue);
return R.ok(jsonObject);
} catch (Exception e) {
return R.unauthorized();
}
// 缓存租户信息
String redisKey = "TENANT_INFO:" + entity.getId();
redisCache.setCacheObject(redisKey, entity.getTenantId());
JSONObject jsonObject = JSONObject.from(entity);
String tokenValue = tokenService.createWxUserToken(entity.getId());
jsonObject.put("tokenValue", TOKEN_PREFIX + tokenValue);
jsonObject.put("tokenName", CUSTOM_USER_LOGIN_TOKEN);
jsonObject.put("loginDate", DateUtil.format(new Date(), "yyyy-MM-dd HH:mm:ss"));
customUserInfoService.updateTokenById(entity.getId(), tokenValue);
return R.ok(jsonObject);
}
@PostMapping("/custom/loginById")

View File

@@ -1,16 +1,22 @@
package com.starry.admin.modules.weichat.controller;
import cn.hutool.core.util.IdUtil;
import cn.hutool.core.util.StrUtil;
import cn.hutool.core.util.XmlUtil;
import com.github.wxpay.sdk.WXPayUtil;
import com.starry.admin.common.aspect.CustomUserLogin;
import com.starry.admin.common.conf.ThreadLocalRequestDetail;
import com.starry.admin.common.exception.CustomException;
import com.starry.admin.common.play.wx.WeChatConstants;
import com.starry.admin.common.play.wx.WxCustomPayUtils;
import com.starry.admin.modules.balance.service.IPlayBalanceDetailsInfoService;
import com.starry.admin.modules.custom.module.entity.PlayCustomUserInfoEntity;
import com.starry.admin.modules.custom.service.IPlayCustomUserInfoService;
import com.starry.admin.modules.order.service.IPlayOrderInfoService;
import com.starry.admin.modules.platform.entity.SysTenantEntity;
import com.starry.admin.modules.platform.service.impl.SysTenantServiceImpl;
import com.starry.admin.modules.weichat.entity.WxPayReturnVo;
import com.starry.admin.utils.SecurityUtils;
import com.starry.common.result.R;
import com.starry.common.utils.StringUtils;
@@ -21,11 +27,25 @@ import org.springframework.web.bind.annotation.RequestParam;
import org.springframework.web.bind.annotation.RestController;
import javax.annotation.Resource;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.io.BufferedReader;
import java.io.InputStream;
import java.io.InputStreamReader;
import java.math.BigDecimal;
import java.nio.charset.StandardCharsets;
import java.time.LocalDateTime;
import java.time.ZoneOffset;
import java.util.Map;
import java.util.SortedMap;
import java.util.TreeMap;
/**
* @author admin
*/
@Slf4j
@RestController
@RequestMapping("/wx/play/")
@RequestMapping("/wx/pay/")
public class WxPlayController {
@@ -43,48 +63,75 @@ public class WxPlayController {
private IPlayOrderInfoService orderInfoService;
/**
* 微信支付-微信回调地址https://pay.weixin.qq.com/wiki/doc/api/wxa/wxa_api.php?chapter=9_7&index=8
*
* @author 杭州世平信息科技有限公司-xuhq
* @since 2024/5/8 11:25
**/
@GetMapping("/jsCallback")
public void jsCallback(HttpServletRequest request, HttpServletResponse response) throws Exception {
// 读取回调数据
InputStream inputStream = request.getInputStream();
StringBuilder sb = new StringBuilder();
String s;
BufferedReader in = new BufferedReader(new InputStreamReader(inputStream, StandardCharsets.UTF_8));
while ((s = in.readLine()) != null) {
sb.append(s);
}
in.close();
inputStream.close();
// 解析xml成map
Map<String, Object> m = XmlUtil.xmlToMap(sb.toString());
// 过滤空 设置 TreeMap
SortedMap<Object, Object> packageParams = new TreeMap<>();
for (String parameter : m.keySet()) {
Object parameterValue = m.get(parameter);
String v = "";
if (null != parameterValue) {
v = parameterValue.toString().trim();
}
packageParams.put(parameter, v);
}
log.info("packageParams=" + packageParams);
String resXml = "<xml><return_code><![CDATA[SUCCESS]]></return_code><return_msg><![CDATA[OK]]></return_msg></xml>";
response.getWriter().write(resXml);
}
@CustomUserLogin
@GetMapping("/custom/createOrder")
public R createOrder(@RequestParam("money") String money) {
if (StringUtils.isEmpty(money)) {
throw new CustomException("请求参数错误,money不能为空");
}
String tenantId = SecurityUtils.getTenantId();
if (StrUtil.isBlankIfStr(tenantId)) {
throw new CustomException("系统错误,租户ID不能为空");
throw new CustomException("系统错误,租户ID获取失败");
}
// 用户信息
PlayCustomUserInfoEntity customUserInfo = customUserInfoService.selectById(ThreadLocalRequestDetail.getCustomUserInfo().getId());
// 租户信息
SysTenantEntity entity = tenantService.selectSysTenantByTenantId(tenantId);
if (entity == null) {
throw new CustomException("系统错误,租户ID不能为空");
// 订单总金额单位为分开发阶段固定设置为支付1分钱
long totalFee = 1;
// 创建订单信息
String orderId = IdUtil.fastSimpleUUID();
orderInfoService.createRechargeOrder(orderId, new BigDecimal(totalFee * 1.0 / 100), new BigDecimal(totalFee * 1.0 / 100), customUserInfo.getId());
String body = "树洞充值";
try {
String nonceStr = WxCustomPayUtils.generateNonceStr();
Map<String, String> playRequestParameters = WxCustomPayUtils.getPayRequestParameters(customUserInfo.getOpenid(), entity.getAppId(), entity.getMchId(), orderId, nonceStr, "127.0.0.1", body, SecurityUtils.getTenantId(), totalFee);
log.info(WXPayUtil.mapToXml(playRequestParameters));
String sign = WxCustomPayUtils.generateSignature(playRequestParameters, entity.getMchKey());
String prepayId = WxCustomPayUtils.unifiedOrderJsApi(playRequestParameters, sign, entity.getMchKey());
WxPayReturnVo vo = new WxPayReturnVo(entity.getMchKey(), String.valueOf(LocalDateTime.now().toEpochSecond(ZoneOffset.of("+8"))), nonceStr, WeChatConstants.SignType.MD5.toString(), sign, prepayId, WeChatConstants.NOTIFY_URL);
return R.ok(vo);
} catch (Exception e) {
log.error("创建微信预支付订单失败error=", e);
throw new CustomException("创建支付订单失败," + e.getMessage());
}
String openId = ThreadLocalRequestDetail.getCustomUserInfo().getOpenid();
//订单总金额,单位为分
int totalFee = getTotalFee(money);
// String orderId = IdUtil.fastSimpleUUID();
// String body = "body";
//
// try {
// String id = WxPlayUtils.unifiedOrderJSAPI(openId, entity.getAppId(), entity.getMchId(), orderId, "127.0.0.1", body, SecurityUtils.getTenantId(), totalFee);
// return R.ok(id);
// } catch (Exception e) {
// log.error("创建支付订单失败error=", e);
// throw new CustomException("创建支付订单失败," + e.getMessage());
// }
String userId = ThreadLocalRequestDetail.getCustomUserInfo().getId();
PlayCustomUserInfoEntity customUserInfo = customUserInfoService.selectById(userId);
if (customUserInfo == null) {
throw new CustomException("用户身份异常");
}
orderInfoService.createRechargeOrder(new BigDecimal(totalFee / 100), new BigDecimal(totalFee / 100), userId);
customUserInfoService.updateAccountBalanceById(customUserInfo.getId(), customUserInfo.getAccountBalance().add(new BigDecimal(totalFee / 100)));
playBalanceDetailsInfoService.create("1", customUserInfo.getId(), customUserInfo.getAccountBalance(), customUserInfo.getAccountBalance().add(new BigDecimal(totalFee / 100)), "充值", new BigDecimal(totalFee / 100));
return R.ok("成功");
}
@@ -92,10 +139,10 @@ public class WxPlayController {
* @param money 金额,单位-元
* @return 金额, 单位-分
*/
public int getTotalFee(String money) {
int totalFee;
public long getTotalFee(String money) {
long totalFee;
try {
totalFee = (int) Float.parseFloat(money) * 100;
totalFee = (long) Float.parseFloat(money) * 100;
} catch (Exception e) {
throw new CustomException("请求参数错误,money类型异常");
}
@@ -104,4 +151,8 @@ public class WxPlayController {
}
return totalFee;
}
public static void main(String[] args) {
}
}

View File

@@ -1,6 +1,6 @@
package com.starry.admin.modules.weichat.entity;
import com.starry.admin.modules.clear.module.entity.PlayClerkCommodityEntity;
import com.starry.admin.modules.clerk.module.entity.PlayClerkCommodityEntity;
import com.starry.common.utils.ConvertUtil;
import lombok.Data;
@@ -9,23 +9,25 @@ import java.util.List;
/**
* 店员商品树状数据
*
* @author admin
*/
@Data
public class PlayClarkCommodityTreeData {
public class PlayClerkCommodityTreeData {
private String commodityType;
private List<ClarkCommodityInfo> value;
private List<ClerkCommodityInfo> value;
public PlayClarkCommodityTreeData(String commodityType, List<PlayClerkCommodityEntity> value) {
public PlayClerkCommodityTreeData(String commodityType, List<PlayClerkCommodityEntity> value) {
this.commodityType = commodityType;
this.value = ConvertUtil.entityToVoList(value, ClarkCommodityInfo.class);
this.value = ConvertUtil.entityToVoList(value, ClerkCommodityInfo.class);
}
@Data
public static class ClarkCommodityInfo {
public static class ClerkCommodityInfo {
private String id;

View File

@@ -7,7 +7,7 @@ import javax.validation.constraints.NotBlank;
import javax.validation.constraints.Pattern;
/**
* 店员和陪关注状态
* 店员和陪关注状态
*
* @author admin
*/
@@ -19,7 +19,7 @@ public class PlayClerkFollowStateUpdate {
* 店员用户ID
*/
@NotBlank(message = "打赏对象不能为空")
private String clearId;
private String clerkId;
@NotBlank(message = "关注状态不能为空")
@Pattern(regexp = "[01]", message = "关注状态必须为0或者1")

View File

@@ -1,6 +1,6 @@
package com.starry.admin.modules.weichat.entity;
import com.starry.admin.modules.clear.module.vo.PlayClerkCommodityQueryVo;
import com.starry.admin.modules.clerk.module.vo.PlayClerkCommodityQueryVo;
import lombok.Data;
import java.util.ArrayList;
@@ -116,12 +116,12 @@ public class PlayClerkUserLoginResponseVo {
private String onlineState;
/**
* 员工状态【1是陪0不是陪
* 员工状态【1是陪0不是陪
*/
private String clerkState;
/**
* 允许申请陪
* 允许申请陪
*/
private boolean clerkAllowEdit = true;

View File

@@ -1,9 +1,13 @@
package com.starry.admin.modules.weichat.entity;
import com.starry.admin.modules.gift.module.constant.GiftConstant;
import lombok.Data;
import javax.validation.constraints.Max;
import javax.validation.constraints.Min;
import javax.validation.constraints.NotBlank;
import javax.validation.constraints.NotNull;
import java.util.List;
/**
@@ -19,14 +23,18 @@ public class PlayOrderInfoCommodityAdd {
* 店员用户ID
*/
@NotBlank(message = "打赏对象不能为空")
private String clearId;
private String clerkId;
@NotBlank(message = "商品ID不能为空")
private String commodityId;
@NotBlank(message = "礼物数量不能为空")
private String commodityQuantity;
@NotNull(message = "数量不能为空")
@Min(value = GiftConstant.MINIMUM_SINGLE_GIFT_QUANTITY, message = "数量不能小于" + GiftConstant.MINIMUM_SINGLE_GIFT_QUANTITY)
@Max(value = GiftConstant.MAXIMUM_SINGLE_GIFT_QUANTITY, message = "数量不能大于" + GiftConstant.MAXIMUM_SINGLE_GIFT_QUANTITY)
private int commodityQuantity;
@NotBlank(message = "微信号不能为空")

View File

@@ -1,9 +1,13 @@
package com.starry.admin.modules.weichat.entity;
import com.starry.admin.modules.gift.module.constant.GiftConstant;
import lombok.Data;
import javax.validation.constraints.Max;
import javax.validation.constraints.Min;
import javax.validation.constraints.NotBlank;
import javax.validation.constraints.NotNull;
/**
* 新增赠礼订单实体
@@ -13,19 +17,20 @@ import javax.validation.constraints.NotBlank;
@Data
public class PlayOrderInfoGiftAdd {
/**
* 店员用户ID
*/
@NotBlank(message = "打赏对象不能为空")
private String clearId;
private String clerkId;
@NotBlank(message = "礼物ID不能为空")
private String giftId;
@NotBlank(message = "礼物数量不能为空")
private String giftQuantity;
@NotNull(message = "礼物数量不能为空")
@Min(value = GiftConstant.MINIMUM_SINGLE_GIFT_QUANTITY, message = "礼物数量不能小于" + GiftConstant.MINIMUM_SINGLE_GIFT_QUANTITY)
@Max(value = GiftConstant.MAXIMUM_SINGLE_GIFT_QUANTITY, message = "礼物数量不能大于" + GiftConstant.MAXIMUM_SINGLE_GIFT_QUANTITY)
private int giftQuantity;
@NotBlank(message = "微信号不能为空")

View File

@@ -0,0 +1,69 @@
package com.starry.admin.modules.weichat.entity;
import com.starry.admin.modules.gift.module.constant.GiftConstant;
import lombok.Data;
import javax.validation.constraints.Max;
import javax.validation.constraints.Min;
import javax.validation.constraints.NotBlank;
import javax.validation.constraints.NotNull;
import java.util.List;
/**
* 新增随机订单实体
*
* @author admin
*/
@Data
public class PlayOrderInfoRandomAdd {
/**
* 陪聊性别0:未知;1:男;2:女)
*
* @since 2024/5/8 15:31
**/
private String sex;
/**
* 陪聊等级
**/
@NotBlank(message = "商品ID不能为空")
private String levelId;
/**
* 标签列表
*
* @since 2024/5/8 15:26
**/
private List<String> labels;
@NotBlank(message = "商品ID不能为空")
private String commodityId;
@NotNull(message = "数量不能为空")
@Min(value = GiftConstant.MINIMUM_SINGLE_GIFT_QUANTITY, message = "数量不能小于" + GiftConstant.MINIMUM_SINGLE_GIFT_QUANTITY)
@Max(value = GiftConstant.MAXIMUM_SINGLE_GIFT_QUANTITY, message = "数量不能大于" + GiftConstant.MAXIMUM_SINGLE_GIFT_QUANTITY)
private int commodityQuantity;
@NotBlank(message = "微信号不能为空")
private String weiChatCode;
/**
* 是否排除下单过的成员0:不排除;1:排除)
*
* @since 2024/5/8 15:28
**/
private String excludeHistory;
/**
* 优惠券ID列表
*/
private List<String> couponIds;
/**
* 备注
*/
private String remark;
}

View File

@@ -7,6 +7,7 @@ import javax.validation.constraints.NotBlank;
/**
* 新增打赏订单实体
* @author admin
*/
@Data
public class PlayOrderInfoRewardAdd {
@@ -16,7 +17,7 @@ public class PlayOrderInfoRewardAdd {
* 店员用户ID
*/
@NotBlank(message = "打赏对象不能为空")
private String clearId;
private String clerkId;
/**
* 打赏金额
*/

View File

@@ -0,0 +1,31 @@
package com.starry.admin.modules.weichat.entity;
import lombok.Data;
/**
* 微信预支付接口返回信息
*
* @author 杭州世平信息科技有限公司-xuhq
* @since 2024/5/8 10:43
**/
@Data
public class WxPayReturnVo {
private String orderId;
private String timeStamp;
private String nonceStr;
private String signType;
private String paySign;
private String prepayId;
private String callback;
public WxPayReturnVo(String orderId, String timeStamp, String nonceStr, String signType, String paySign, String prepayId, String callback) {
this.orderId = orderId;
this.timeStamp = timeStamp;
this.nonceStr = nonceStr;
this.signType = signType;
this.paySign = paySign;
this.prepayId = prepayId;
this.callback = callback;
}
}

View File

@@ -4,9 +4,9 @@ package com.starry.admin.modules.weichat.service;
import cn.hutool.core.util.IdUtil;
import cn.hutool.core.util.StrUtil;
import com.starry.admin.common.exception.ServiceException;
import com.starry.admin.modules.clear.module.entity.PlayClerkUserInfoEntity;
import com.starry.admin.modules.clear.service.IPlayClerkLevelInfoService;
import com.starry.admin.modules.clear.service.IPlayClerkUserInfoService;
import com.starry.admin.modules.clerk.module.entity.PlayClerkUserInfoEntity;
import com.starry.admin.modules.clerk.service.IPlayClerkLevelInfoService;
import com.starry.admin.modules.clerk.service.IPlayClerkUserInfoService;
import com.starry.admin.modules.custom.module.entity.PlayCustomUserInfoEntity;
import com.starry.admin.modules.custom.service.IPlayCustomLevelInfoService;
import com.starry.admin.modules.custom.service.IPlayCustomUserInfoService;
@@ -20,6 +20,11 @@ import org.springframework.stereotype.Service;
import javax.annotation.Resource;
import java.util.Date;
/**
* 微信授权
*
* @author admin
*/
@Slf4j
@Service
public class WxOauthService {
@@ -51,7 +56,7 @@ public class WxOauthService {
* @author admin
* @since 2024/4/15 11:01
**/
public String clarkUserLogin(String code) {
public String clerkUserLogin(String code) {
WxOAuth2AccessToken token = getWxOAuth2AccessToken(code);
log.info("token = " + token);
String openId = getOpenId(token);
@@ -71,7 +76,7 @@ public class WxOauthService {
}
public void clarkUserLogout(PlayClerkUserInfoEntity entity) {
public void clerkUserLogout(PlayClerkUserInfoEntity entity) {
entity.setToken("empty");
clerkUserInfoService.update(entity);
}

View File

@@ -33,7 +33,7 @@ public class WxFileUtils {
* @throws IOException IOException
*/
public static InputStream getTemporaryMaterial(String access_token, String mediaId) throws IOException {
String url = "https://api.weixin.qq.com/cgi-bin/media/get?" + access_token + "=ACCESS_TOKEN&media_id=" + mediaId;
String url = "https://api.weixin.qq.com/cgi-bin/media/get?access_token=" + access_token + "&media_id=" + mediaId;
// 请求参数
HashMap<String, String> param = new HashMap<>();
param.put("media_id", mediaId);
@@ -52,22 +52,20 @@ public class WxFileUtils {
log.error("从微信下载的临时素材文件为空");
throw new CustomException("音频文件上传失败");
}
FileUtil.touch("/tmp/jave/ffmpeg-amd64-3.5.0/");
AudioAttributes audio = new AudioAttributes();
audio.setCodec("libmp3lame");
audio.setBitRate(128000);
audio.setChannels(2);
audio.setSamplingRate(44100);
EncodingAttributes attrs = new EncodingAttributes();
attrs.setOutputFormat("mp3");
attrs.setAudioAttributes(audio);
Encoder encoder = new Encoder();
MultimediaObject multimediaObject = new MultimediaObject(source);
try {
encoder.encode(multimediaObject, target, attrs);
AudioAttributes audio = new AudioAttributes();
audio.setCodec("libmp3lame");
audio.setBitRate(128000);
audio.setChannels(2);
audio.setSamplingRate(44100);
EncodingAttributes attrs = new EncodingAttributes();
attrs.setOutputFormat("mp3");
attrs.setAudioAttributes(audio);
Encoder encoder = new Encoder();
encoder.encode(new MultimediaObject(source), target, attrs);
} catch (Exception ex) {
log.error("音频文件格式转化失败", ex);
throw new CustomException("音频文件格式转化失败");
throw new CustomException("音频文件上传失败");
}
}