diff --git a/CatmDogd-Mall-Front-test/src/api/model/AppletTask.js b/CatmDogd-Mall-Front-test/src/api/model/AppletTask.js
new file mode 100644
index 0000000..29613f7
--- /dev/null
+++ b/CatmDogd-Mall-Front-test/src/api/model/AppletTask.js
@@ -0,0 +1,53 @@
+import request from '@/utils/request'
+
+// 查询任务中心列表
+export function listAppletTask(query) {
+ return request({
+ url: '/model/AppletTask/list',
+ method: 'get',
+ params: query
+ })
+}
+
+// 查询任务中心详细
+export function getAppletTask(id) {
+ return request({
+ url: '/model/AppletTask/' + id,
+ method: 'get'
+ })
+}
+
+// 新增任务中心
+export function addAppletTask(data) {
+ return request({
+ url: '/model/AppletTask',
+ method: 'post',
+ data: data
+ })
+}
+
+// 修改任务中心
+export function updateAppletTask(data) {
+ return request({
+ url: '/model/AppletTask',
+ method: 'put',
+ data: data
+ })
+}
+
+// 删除任务中心
+export function delAppletTask(id) {
+ return request({
+ url: '/model/AppletTask/' + id,
+ method: 'delete'
+ })
+}
+
+// 导出任务中心
+export function exportAppletTask(query) {
+ return request({
+ url: '/model/AppletTask/export',
+ method: 'get',
+ params: query
+ })
+}
diff --git a/CatmDogd-Mall-Front-test/src/views/model/AppletTask/index.vue b/CatmDogd-Mall-Front-test/src/views/model/AppletTask/index.vue
new file mode 100644
index 0000000..2dcfe98
--- /dev/null
+++ b/CatmDogd-Mall-Front-test/src/views/model/AppletTask/index.vue
@@ -0,0 +1,504 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ 搜索
+ 重置
+ {{showMoreCondition ? '收起条件' : '展开条件'}}
+
+
+
+
+
+ 新增
+
+
+ 修改
+
+
+ 删除
+
+
+ 导出
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ {{ parseTime(scope.row.taskEndTime, '')}}
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ 修改
+ 删除
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/ruoyi-admin/src/main/resources/application-druid.yml b/ruoyi-admin/src/main/resources/application-druid.yml
index 66b7553..4fe18f1 100644
--- a/ruoyi-admin/src/main/resources/application-druid.yml
+++ b/ruoyi-admin/src/main/resources/application-druid.yml
@@ -6,9 +6,9 @@ spring:
druid:
# 主库数据源 jdbc:mysql://localhost:3306/catmdogf?useUnicode=true&characterEncoding=utf8&zeroDateTimeBehavior=convertToNull&useSSL=true&serverTimezone=GMT%2B8&allowMultiQueries=true
master:
- url: jdbc:mysql://124.222.255.146:3306/catmdogf?useUnicode=true&useSSL=false&characterEncoding=UTF-8&serverTimezone=Asia/Shanghai&zeroDateTimeBehavior=convertToNull&allowMultiQueries=true
+ url: jdbc:mysql://47.97.158.59:3306/catmdogf_prod20225?useUnicode=true&useSSL=false&characterEncoding=UTF-8&serverTimezone=Asia/Shanghai&zeroDateTimeBehavior=convertToNull&allowMultiQueries=true
username: root
- password: Tc$GePcZ
+ password: Qweruiop@123
# 从库数据源
slave:
# 从数据源开关/默认关闭
@@ -23,16 +23,16 @@ spring:
# redis 配置
redis:
# 地址
- host: 124.222.255.146
+ host: 47.97.158.59
# 端口,默认为6379
port: 6379
# 数据库索引
database: 5
# 密码
- password: Abc.123456
+ password: Qweruiop@123
redisson:
- address: "redis://ip"
- password: "password" # 如果有密码的话
+ address: "redis://47.97.158.59"
+ password: "Qweruiop@123" # 如果有密码的话
connectionPoolSize: 10
idleConnectionTimeout: 10000
timeout: 3000
@@ -55,18 +55,19 @@ wechat:
appId: wxd1a6ba7b5e17a5b6
secret: 你的微信服务号密钥
merchantId: 1665639691
-# privateKeyPath: ruoyi-admin/src/main/resources/apiclient_cert.p12
- privateKeyPath: F:\\java_work\\team_work_java\\pet-admin-25-01-25\\pet-admin\\ruoyi-admin\\src\\main\\resources\\apiclient_key.pem
+ privateKeyPath: /data/software/app/key/apiclient_key.pem
+# privateKeyPath: /root/pem/apiclient_key.pem
+# privateKeyPath: F:\\java_work\\team_work_java\\pet-admin-25-01-25\\pet-admin\\ruoyi-admin\\src\\main\\resources\\apiclient_key.pem
#privateKeyPath: /Users/daixiande/Work/杂七杂八/1665639691_20240111_cert/apiclient_key.pem
merchantSerialNumber: 6050244FC18200362585F1F9FD6557A1B291E8C0
apiV3key: 19971022197001121966060120240731
apiV2key: 19961022196901121965060120230731
-# notifyUrl: https://api.catmdogd.com/prod-api/no-auth/wechat/notify
-# notifyUrlForBCHSH: https://api.catmdogd.com/prod-api/no-auth/wechat/notifyForBCHSH
+ notifyUrl: https://api.catmdogd.com/prod-api/no-auth/wechat/notify
+ notifyUrlForBCHSH: https://api.catmdogd.com/prod-api/no-auth/wechat/notifyForBCHSH
# notifyUrl: https://pet-admin.hhlm1688.com/api/no-auth/wechat/notify
# notifyUrlForBCHSH: https://pet-admin.hhlm1688.com/api/no-auth/wechat/notifyForBCHSH
- notifyUrl: http://h5.xzaiyp.top/no-auth/wechat/notify
- notifyUrlForBCHSH: http://h5.xzaiyp.top/no-auth/wechat/notifyForBCHSH
+# notifyUrl: http://h5.xzaiyp.top/no-auth/wechat/notify
+# notifyUrlForBCHSH: http://h5.xzaiyp.top/no-auth/wechat/notifyForBCHSH
miniProgramAppId: wxd1a6ba7b5e17a5b6
miniProgramSecret: 06e946a2c9010f8eb9e306018a779a7f
staffAppId: wx01f0f43759922fda
diff --git a/ruoyi-admin/src/main/resources/application-test.yml b/ruoyi-admin/src/main/resources/application-test.yml
new file mode 100644
index 0000000..2dbe7f5
--- /dev/null
+++ b/ruoyi-admin/src/main/resources/application-test.yml
@@ -0,0 +1,103 @@
+# 数据源配置
+spring:
+ datasource:
+ type: com.alibaba.druid.pool.DruidDataSource
+ driverClassName: com.mysql.cj.jdbc.Driver
+ druid:
+ # 主库数据源
+ master:
+ url: jdbc:mysql://106.15.49.231:3306/catmdogf_test?useUnicode=true&characterEncoding=utf8&zeroDateTimeBehavior=convertToNull&useSSL=true&serverTimezone=GMT%2B8&allowMultiQueries=true
+ username: root
+ password: Qweruiop@123
+ # 从库数据源
+ slave:
+ # 从数据源开关/默认关闭
+ enabled: false
+ url:
+ username:
+ password:
+ statViewServlet:
+ # 控制台管理用户名和密码
+ login-username: ruoyi
+ login-password: 123456
+ # redis 配置
+ redis:
+ # 地址
+ host: 47.97.158.59
+ # 端口,默认为6379
+ port: 6379
+ # 数据库索引
+ database: 5
+ # 密码
+ password: Qweruiop@123
+redisson:
+ address: "redis://47.97.158.59"
+ password: "Qweruiop@123" # 如果有密码的话
+ connectionPoolSize: 10
+ idleConnectionTimeout: 10000
+ timeout: 3000
+
+ruoyi:
+ # 文件路径 示例( Windows配置C:/ruoyi/uploadPath,Linux配置 /home/ruoyi/uploadPath)
+ profile: /Users/daixiande/Work/ruoyi/uploadPath
+scheduling:
+ enabled: false
+#操作oss需要的一些参数
+aliyun:
+ accessKeyId: LTAI5tD3bjTBDvgmgXLTKL5X # 阿里云的accessKeyId
+ secretAccessKey: wCPlCO5nnnqBekd3wxAPU6CSUto6fQ # accessKey 密码
+ oss:
+ endPoint: oss-cn-shanghai.aliyuncs.com # Endpoint:在阿里云oss控制台查看自己使用的endpoint
+ bucketName: catmdogf # bucket 名称
+ cdnName: cdn.catmdogd.com
+wechat:
+ enabled: true
+ appId: wxd1a6ba7b5e17a5b6
+ secret: 你的微信服务号密钥
+ merchantId: 1665639691
+ privateKeyPath: /data/software/app/key/apiclient_key.pem
+ #privateKeyPath: /Users/daixiande/Work/杂七杂八/1665639691_20240111_cert/apiclient_key.pem
+ merchantSerialNumber: 6050244FC18200362585F1F9FD6557A1B291E8C0
+ apiV3key: 19971022197001121966060120240731
+ apiV2key: 19961022196901121965060120230731
+ notifyUrl: https://api.catmdogd.com/prod-api/no-auth/wechat/notify
+ notifyUrlForBCHSH: https://api.catmdogd.com/prod-api/no-auth/wechat/notifyForBCHSH
+ miniProgramAppId: wxd1a6ba7b5e17a5b6
+ miniProgramSecret: 06e946a2c9010f8eb9e306018a779a7f
+ staffAppId: wx01f0f43759922fda
+ staffSecret: b0a5617e6e4c387262a32af2b355c8b6
+ pay:
+ v3:
+ # 租户id
+ miniapp:
+ # 应用appId 服务商模式下为服务商的appid 必填
+ app-id: wxd1a6ba7b5e17a5b6
+ # v2 api 密钥 1.0.5版本以后如果用到V2的接口时必填
+ app-secret: 06e946a2c9010f8eb9e306018a779a7f
+ # api v3 密钥 必填
+ app-v3-secret: 19971022197001121966060120240731
+ # 微信支付商户号 服务商模式下为服务商的mchid 必填
+ mch-id: 1665639691
+ # 商户服务器域名 用于回调 需要放开回调接口的安全策略 必填
+ domain: https://api-test.catmdogd.com
+ # 商户 api 证书路径 必填 填写classpath路径 位于 maven项目的resources文件下
+ cert-path: apiclient_cert.p12
+ #cert-path: /data/software/app/key/apiclient_cert.p12
+
+
+sms:
+ enabled: true
+ # 阿里云 dysmsapi.aliyuncs.com
+ endpoint: dysmsapi.aliyuncs.com
+ accessKeyId: LTAI5tKHcnnn2Ydue8ZSXwaN #阿里云短信服务控制台查看
+ accessKeySecret: 6qvhtCb9MkswKEGmRmlpOXwtKwKJFv #同上
+ signName: 猫妈狗爸
+ #猫妈狗爸
+ templateId: SMS_301225389
+ # 腾讯专用
+ sdkAppId:
+aes:
+ # aes的密钥
+ key: 1111111111123456
+
+
diff --git a/ruoyi-catdog/src/main/java/com/ruoyi/applet/contoller/ApiAppletOrderItemLogController.java b/ruoyi-catdog/src/main/java/com/ruoyi/applet/contoller/ApiAppletOrderItemLogController.java
index 503c353..7394cf7 100644
--- a/ruoyi-catdog/src/main/java/com/ruoyi/applet/contoller/ApiAppletOrderItemLogController.java
+++ b/ruoyi-catdog/src/main/java/com/ruoyi/applet/contoller/ApiAppletOrderItemLogController.java
@@ -43,6 +43,8 @@ public class ApiAppletOrderItemLogController {
public AjaxResult addOrUpdate(@RequestBody AppletOrderItemDateLog appletOrderItemDateLog)
{
+
+
if(appletOrderItemDateLog.getId()!=null){
int i = appletOrderItemDateLogService.updateAppletOrderItemDateLog(appletOrderItemDateLog);
@@ -156,4 +158,7 @@ public class ApiAppletOrderItemLogController {
+
+
+
}
diff --git a/ruoyi-catdog/src/main/java/com/ruoyi/applet/contoller/ApiMallOrderController.java b/ruoyi-catdog/src/main/java/com/ruoyi/applet/contoller/ApiMallOrderController.java
new file mode 100644
index 0000000..54153ae
--- /dev/null
+++ b/ruoyi-catdog/src/main/java/com/ruoyi/applet/contoller/ApiMallOrderController.java
@@ -0,0 +1,187 @@
+package com.ruoyi.applet.contoller;
+
+
+import com.alibaba.fastjson.JSONObject;
+import com.cyl.h5.pojo.request.CancelOrderRequest;
+import com.cyl.h5.pojo.request.OrderPayRequest;
+import com.cyl.h5.pojo.response.OrderPayResponse;
+import com.cyl.h5.pojo.vo.H5OrderVO;
+import com.cyl.manager.oms.service.OrderOperateHistoryService;
+import com.cyl.manager.ums.domain.Member;
+import com.ruoyi.applet.mallpojo.TeacherListRequest;
+import com.ruoyi.applet.service.IApiMallOrderService;
+import com.ruoyi.common.constant.Constants;
+import com.ruoyi.common.core.controller.BaseController;
+import com.ruoyi.common.core.domain.AjaxResult;
+import com.ruoyi.common.core.page.TableDataInfo;
+import com.ruoyi.common.core.redis.RedisService;
+import com.ruoyi.framework.config.LocalDataUtil;
+import com.ruoyi.model.domain.AppUsers;
+import com.ruoyi.model.domain.AppletAddress;
+import com.ruoyi.model.domain.AppletUsersTeacher;
+import com.ruoyi.model.service.IAppUsersService;
+import com.ruoyi.model.service.IAppletAddressService;
+import com.ruoyi.model.service.IAppletConfigService;
+import com.ruoyi.model.service.IAppletUsersTeacherService;
+import io.swagger.annotations.Api;
+import io.swagger.annotations.ApiOperation;
+import lombok.extern.slf4j.Slf4j;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.data.domain.PageImpl;
+import org.springframework.data.domain.Pageable;
+import org.springframework.http.ResponseEntity;
+import org.springframework.web.bind.annotation.*;
+
+import java.util.ArrayList;
+import java.util.List;
+
+@Slf4j
+@Api(description = "下单小程序端 - 订单信息列表")
+@RestController
+@RequestMapping("/applet/mall/order")
+public class ApiMallOrderController extends BaseController {
+
+ @Autowired
+ private IApiMallOrderService service;
+
+ @Autowired
+ private IAppUsersService appUsersService;
+ @Autowired
+ private IAppletUsersTeacherService appletUsersTeacherService;
+ @Autowired
+ private IAppletConfigService appletConfigService;
+ @Autowired
+ private IAppletAddressService appletAddressService;
+
+ @Autowired
+ private RedisService redisService;
+
+ @Autowired
+ private OrderOperateHistoryService orderOperateHistoryService;
+
+ @ApiOperation("mall-订单列表信息接口")
+ @GetMapping("/listByOpenid")
+ public ResponseEntity> orderPageByOpenid(Integer status, String openId, Pageable pageable){
+ List statusList = new ArrayList<>();
+ if (status == -1) {
+ statusList.add(0);
+ statusList.add(1);
+ statusList.add(2);
+ statusList.add(3);
+
+ } else {
+ statusList.add(status);
+ }
+ PageImpl h5OrderVOS = service.orderPageByOpenid(statusList, openId, pageable);
+
+ return ResponseEntity.ok(h5OrderVOS);
+ }
+
+
+
+ //根据订单标识查询订单详情
+ @ApiOperation("mall-根据订单标识查询订单详情接口")
+ @GetMapping("/orderDetail")
+ public ResponseEntity orderDetail(@RequestParam(required = false) Long orderId){
+ if (orderId == null){
+ throw new RuntimeException("系统繁忙");
+ }
+ return ResponseEntity.ok(service.orderDetail(orderId));
+ }
+
+
+ //根据订单标识取消订单
+ @ApiOperation("mall-根据订单标识取消订单接口")
+ @PostMapping("/orderCancel")
+ public AjaxResult orderCancel(@RequestBody CancelOrderRequest request){
+ //修改订单状态为已渠道
+ String s = service.orderBatchCancel(request, null);
+ return AjaxResult.success(s);
+
+
+
+
+// Member member = (Member) LocalDataUtil.getVar(Constants.MEMBER_INFO);
+// String redisKey = "h5_oms_order_cancel_"+ request.getIdList().get(0);
+// String redisValue = request.getIdList().get(0)+"_"+System.currentTimeMillis();
+// try{
+// redisService.lock(redisKey,redisValue,60);
+// return ResponseEntity.ok(service.orderBatchCancel(request, member.getId()));
+// }catch (Exception e){
+// log.error("订单取消方法异常",e);
+// throw new RuntimeException("订单取消失败");
+// }finally {
+// try {
+// redisService.unLock(redisKey,redisValue);
+// }catch (Exception e){
+// log.error("",e);
+// }
+// }
+ }
+
+
+ //根据订单标识去评价
+ @ApiOperation("mall-根据订单标识去评价接口")
+ @GetMapping("/orderEvaluate")
+ public AjaxResult orderEvaluate(@RequestParam Long orderId){
+ if (orderId == null){
+ throw new RuntimeException("系统繁忙");
+ }
+ return AjaxResult.successData(service.orderEvaluate(orderId));
+ }
+
+
+
+
+
+ //查询-再来一单的历史伴宠师
+ @ApiOperation("mall-查询-再来一单的历史伴宠师接口")
+ @GetMapping("/getTeacherList")
+ public TableDataInfo getTeacherList(TeacherListRequest request) {
+ startPage();
+ AppUsers appUsers = new AppUsers();
+ appUsers.setUserBcs(1);
+ //如果伴宠师等级传入
+ if (request.getTeacherLevels() != null) {
+ appUsers.setUserBcsRole(request.getTeacherLevels());
+ }
+ List appUsersList = appUsersService.selectAppUsersList(appUsers);
+ for (AppUsers appUsers1 : appUsersList){
+ AppletUsersTeacher appletUsersTeacher = appletUsersTeacherService.selectAppletUsersTeacherByUserId(appUsers1.getUserId());
+ appUsers1.setAppletUsersTeacher(appletUsersTeacher);
+
+ AppletAddress appletAddress = new AppletAddress();
+ appletAddress.setUserId(appUsers.getUserId());
+ List appletAddresses = appletAddressService.selectAppletAddressList(appletAddress);
+ appUsers.setAppletAddresseList(appletAddresses);
+ }
+ return getDataTable(appUsersList);
+ }
+
+
+ @ApiOperation("mall-查询-再次支付")
+ @PostMapping("/orderPay")
+ public ResponseEntity orderPay(@RequestBody OrderPayRequest req){
+ log.info("订单支付","提交的数据:"+ JSONObject.toJSONString(req));
+ String redisKey = "h5_oms_order_pay_"+req.getPayId();
+ String redisValue = req.getPayId()+"_"+System.currentTimeMillis();
+ try {
+ redisService.lock(redisKey, redisValue, 60);
+ Member member = (Member) LocalDataUtil.getVar(Constants.MEMBER_INFO);
+ Long memberId = member.getId();
+ req.setMemberId(memberId);
+ return ResponseEntity.ok(service.orderPay(req));
+ }catch (Exception e){
+ log.error("支付方法异常", e);
+ throw new RuntimeException(e.getMessage());
+ }finally {
+ try{
+ redisService.unLock(redisKey,redisValue);
+ }catch (Exception e){
+ log.error("",e);
+ }
+ }
+ }
+
+
+}
diff --git a/ruoyi-catdog/src/main/java/com/ruoyi/applet/contoller/ApiMallTaskController.java b/ruoyi-catdog/src/main/java/com/ruoyi/applet/contoller/ApiMallTaskController.java
new file mode 100644
index 0000000..fefc6fd
--- /dev/null
+++ b/ruoyi-catdog/src/main/java/com/ruoyi/applet/contoller/ApiMallTaskController.java
@@ -0,0 +1,77 @@
+package com.ruoyi.applet.contoller;
+
+import com.ruoyi.common.core.controller.BaseController;
+import com.ruoyi.common.core.domain.AjaxResult;
+import com.ruoyi.common.core.page.TableDataInfo;
+import com.ruoyi.model.domain.AppletTask;
+import com.ruoyi.model.service.IAppletTaskService;
+import io.swagger.annotations.Api;
+import io.swagger.annotations.ApiOperation;
+import lombok.extern.slf4j.Slf4j;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.web.bind.annotation.*;
+
+import java.util.List;
+
+
+@Slf4j
+@Api(description = "下单小程序端 - 任务中心相关接口")
+@RestController
+@RequestMapping("/applet/mall/task")
+public class ApiMallTaskController extends BaseController {
+
+ @Autowired
+ private IAppletTaskService appletTaskService;
+
+
+ // 任务中心列表
+ @ApiOperation("mall端-任务中心列表")
+ @GetMapping("/list")
+ public TableDataInfo list(AppletTask appletTask) {
+ startPage();
+ List list = appletTaskService.selectAppletTaskList(appletTask);
+ return getDataTable(list);
+ }
+
+
+ //根据标识查询任务详情
+ @ApiOperation("mall端-根据标识查询任务详情")
+ @GetMapping("/taskDetail/{id}")
+ public AjaxResult taskDetail(AppletTask appletTask){
+ AppletTask task = appletTaskService.selectAppletTaskById(appletTask.getId());
+ return AjaxResult.success("任务详情",task);
+ }
+
+
+
+ //接受任务
+ @ApiOperation("mall端-接受任务")
+ @GetMapping("/acceptTask")
+ public AjaxResult acceptTask(@RequestBody AppletTask appletTask){
+ appletTask.setStatus(1);
+ int i = appletTaskService.updateAppletTask(appletTask);
+ if (i>0){
+ return AjaxResult.success("接受成功");
+ }
+ return AjaxResult.error("接受失败");
+ }
+
+ //提交任务信息
+ @ApiOperation("mall端-提交任务信息")
+ @PostMapping("/submitTask")
+ public AjaxResult submitTask(@RequestBody AppletTask appletTask){
+ appletTask.setTaskState(1);
+ int i = appletTaskService.updateAppletTask(appletTask);
+ if (i>0){
+ return AjaxResult.success("提交成功");
+ }
+ return AjaxResult.error("提交失败");
+ }
+
+
+
+
+
+
+
+}
diff --git a/ruoyi-catdog/src/main/java/com/ruoyi/applet/contoller/ApiMallUserTeacherController.java b/ruoyi-catdog/src/main/java/com/ruoyi/applet/contoller/ApiMallUserTeacherController.java
index c71ead7..8993be8 100644
--- a/ruoyi-catdog/src/main/java/com/ruoyi/applet/contoller/ApiMallUserTeacherController.java
+++ b/ruoyi-catdog/src/main/java/com/ruoyi/applet/contoller/ApiMallUserTeacherController.java
@@ -15,6 +15,7 @@ import io.swagger.annotations.ApiOperation;
import lombok.extern.slf4j.Slf4j;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.GetMapping;
+import org.springframework.web.bind.annotation.PathVariable;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;
@@ -35,6 +36,30 @@ public class ApiMallUserTeacherController extends BaseController {
@Autowired
private IAppletAddressService appletAddressService;
+ //mall-首页周边伴宠师
+ @ApiOperation("mall-首页周边伴宠师接口")
+ @GetMapping("/getTeacherListIndex")
+ public TableDataInfo getTeacherListIndex() {
+ startPage();
+ AppUsers appUsers = new AppUsers();
+ appUsers.setUserBcs(1);
+ List appUsersList = appUsersService.selectAppUsersList(appUsers);
+ for (AppUsers appUsers1 : appUsersList){
+ AppletUsersTeacher appletUsersTeacher = appletUsersTeacherService.selectAppletUsersTeacherByUserId(appUsers1.getUserId());
+ appUsers1.setAppletUsersTeacher(appletUsersTeacher);
+
+ AppletAddress appletAddress = new AppletAddress();
+ appletAddress.setUserId(appUsers.getUserId());
+ List appletAddresses = appletAddressService.selectAppletAddressList(appletAddress);
+ appUsers.setAppletAddresseList(appletAddresses);
+ }
+ return getDataTable(appUsersList);
+ }
+
+
+
+
+
//mall端-查询周边伴宠师集合
@ApiOperation("mall端-查询周边伴宠师列表集合接口")
@GetMapping("/getTeacherList")
@@ -63,8 +88,10 @@ public class ApiMallUserTeacherController extends BaseController {
//mall端-查询指定伴宠师详情
@ApiOperation("mall端-查询指定伴宠师详情接口")
@GetMapping("/getTeacherDetail")
- public AppUsers getTeacherDetail(Long userId) {
- AppUsers appUsers = appUsersService.selectAppUsersByUserId(userId);
+ public AppUsers getTeacherDetail(AppUsers app) {
+ //用户标识不能为空
+
+ AppUsers appUsers = appUsersService.selectAppUsersByUserId(app.getUserId());
AppletUsersTeacher appletUsersTeacher = appletUsersTeacherService.selectAppletUsersTeacherByUserId(appUsers.getUserId());
appUsers.setAppletUsersTeacher(appletUsersTeacher);
@@ -72,15 +99,12 @@ public class ApiMallUserTeacherController extends BaseController {
appletAddress.setUserId(appUsers.getUserId());
List appletAddresses = appletAddressService.selectAppletAddressList(appletAddress);
appUsers.setAppletAddresseList(appletAddresses);
-
-
-
-
-
return appUsers;
}
+
+
//mall端-系统派单的时候需要选择的伴宠师等级说明
@ApiOperation("mall端-系统派单的时候需要选择的伴宠师等级说明接口")
@GetMapping("/getTeacherLevels")
diff --git a/ruoyi-catdog/src/main/java/com/ruoyi/applet/service/IApiMallOrderService.java b/ruoyi-catdog/src/main/java/com/ruoyi/applet/service/IApiMallOrderService.java
new file mode 100644
index 0000000..3944ba2
--- /dev/null
+++ b/ruoyi-catdog/src/main/java/com/ruoyi/applet/service/IApiMallOrderService.java
@@ -0,0 +1,35 @@
+package com.ruoyi.applet.service;
+
+import com.cyl.h5.pojo.request.CancelOrderRequest;
+import com.cyl.h5.pojo.request.OrderPayRequest;
+import com.cyl.h5.pojo.response.OrderPayResponse;
+import com.cyl.h5.pojo.vo.H5OrderVO;
+import com.ruoyi.common.core.domain.AjaxResult;
+import org.springframework.data.domain.PageImpl;
+import org.springframework.data.domain.Pageable;
+
+import java.util.List;
+
+public interface IApiMallOrderService {
+
+
+ //下单端小程序 - 查看订单列表信息
+ PageImpl orderPageByOpenid(List status, String openId, Pageable pageable);
+
+
+ //下单小程序端 - 根据订单标识查询订单详情
+ H5OrderVO orderDetail(Long orderId);
+
+
+ //下单小程序端 - 根据订单标识取消订单
+ String orderBatchCancel(CancelOrderRequest request, Long userId);
+
+
+ //下单小程序端 - 根据订单标识去评价
+ AjaxResult orderEvaluate(Long orderId);
+
+
+
+ //再次支付
+ OrderPayResponse orderPay(OrderPayRequest req);
+}
diff --git a/ruoyi-catdog/src/main/java/com/ruoyi/applet/service/impl/IApiMallOrderServiceImpl.java b/ruoyi-catdog/src/main/java/com/ruoyi/applet/service/impl/IApiMallOrderServiceImpl.java
new file mode 100644
index 0000000..43d7a46
--- /dev/null
+++ b/ruoyi-catdog/src/main/java/com/ruoyi/applet/service/impl/IApiMallOrderServiceImpl.java
@@ -0,0 +1,428 @@
+package com.ruoyi.applet.service.impl;
+
+import cn.hutool.core.collection.CollectionUtil;
+import cn.hutool.core.util.StrUtil;
+import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
+import com.cyl.h5.pojo.request.CancelOrderRequest;
+import com.cyl.h5.pojo.request.OrderPayRequest;
+import com.cyl.h5.pojo.response.OrderPayResponse;
+import com.cyl.h5.pojo.vo.H5OrderVO;
+import com.cyl.h5.service.H5CouponService;
+import com.cyl.h5.service.H5PetService;
+import com.cyl.manager.marketing.mapper.WechatMemberCouponMapper;
+import com.cyl.manager.marketing.service.IWechatMemberCouponService;
+import com.cyl.manager.oms.convert.AftersaleItemConvert;
+import com.cyl.manager.oms.convert.OrderItemConvert;
+import com.cyl.manager.oms.domain.*;
+import com.cyl.manager.oms.mapper.*;
+import com.cyl.manager.oms.service.OmsOrderServiceService;
+import com.cyl.manager.oms.service.OrderItemService;
+import com.cyl.manager.oms.service.OrderOperateHistoryService;
+import com.cyl.manager.pms.mapper.ProductMapper;
+import com.cyl.manager.pms.mapper.SkuMapper;
+import com.cyl.manager.staff.service.IBondTransactionService;
+import com.cyl.manager.staff.service.IStaffService;
+import com.cyl.manager.ums.domain.Member;
+import com.cyl.manager.ums.domain.MemberWechat;
+import com.cyl.manager.ums.mapper.MemberAddressMapper;
+import com.cyl.manager.ums.mapper.MemberCartMapper;
+import com.cyl.manager.ums.mapper.MemberWechatMapper;
+import com.cyl.manager.ums.pojo.vo.PetVO;
+import com.cyl.manager.ums.service.PetService;
+import com.cyl.tencent.OrderMessageModel;
+import com.cyl.wechat.WechatPayData;
+import com.cyl.wechat.WechatPayService;
+import com.cyl.wechat.WechatPayUtil;
+import com.github.pagehelper.PageHelper;
+import com.ruoyi.applet.service.IApiMallOrderService;
+import com.ruoyi.common.constant.Constants;
+import com.ruoyi.common.core.domain.AjaxResult;
+import com.ruoyi.common.core.redis.RedisService;
+import com.ruoyi.framework.config.LocalDataUtil;
+import lombok.extern.slf4j.Slf4j;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.beans.factory.annotation.Qualifier;
+import org.springframework.data.domain.PageImpl;
+import org.springframework.data.domain.Pageable;
+import org.springframework.http.ResponseEntity;
+import org.springframework.stereotype.Service;
+import org.springframework.transaction.annotation.Transactional;
+import org.springframework.web.bind.annotation.PostMapping;
+import org.springframework.web.bind.annotation.RequestBody;
+
+import java.math.BigDecimal;
+import java.time.LocalDateTime;
+import java.time.ZoneId;
+import java.util.*;
+import java.util.concurrent.BlockingQueue;
+import java.util.concurrent.atomic.AtomicReference;
+import java.util.stream.Collectors;
+import java.util.stream.Stream;
+
+@Slf4j
+@Service
+public class IApiMallOrderServiceImpl implements IApiMallOrderService {
+
+ @Autowired
+ private MemberAddressMapper memberAddressMapper;
+
+ @Autowired
+ private SkuMapper skuMapper;
+
+ @Autowired
+ private ProductMapper productMapper;
+
+ @Autowired
+ private MemberCartMapper memberCartMapper;
+
+ @Autowired
+ private OrderMapper orderMapper;
+
+ @Autowired
+ private OmsOrderServiceMapper omsOrderServiceMapper;
+
+ @Autowired
+ private OrderItemMapper orderItemMapper;
+
+ @Autowired
+ private OrderOperateHistoryMapper orderOperateHistoryMapper;
+ @Autowired
+// @Lazy
+ private WechatPayService wechatPayService;
+
+
+
+
+ @Autowired
+ private MemberWechatMapper memberWechatMapper;
+
+ @Autowired
+ private OrderOperateHistoryService orderOperateHistoryService;
+
+
+ @Autowired
+ private WechatPaymentHistoryMapper wechatPaymentHistoryMapper;
+
+ private AftersaleMapper aftersaleMapper;
+
+ @Autowired
+ private AftersaleItemMapper aftersaleItemMapper;
+
+
+ @Autowired
+ private OmsOrderServiceService omsOrderServiceService;
+
+
+
+ @Autowired
+ private WechatMemberCouponMapper wechatMemberCouponMapper;
+
+
+ @Autowired
+ private H5PetService h5PetService;
+
+ //下单端小程序 - 查看订单列表信息
+ @Override
+ public PageImpl orderPageByOpenid(List status, String openId, Pageable pageable){
+ QueryWrapper queryWrapper = new QueryWrapper<>();
+ queryWrapper.eq("routine_openid", openId);
+ MemberWechat memberWechat = memberWechatMapper.selectOne(queryWrapper);
+
+ if (memberWechat == null) {
+ return new PageImpl<>(Collections.EMPTY_LIST, pageable, 0);
+ }
+
+ if (pageable != null){
+ PageHelper.startPage(pageable.getPageNumber() + 1, pageable.getPageSize());
+ }
+
+ List orderList = orderMapper.orderPage3(status, memberWechat.getMemberId());
+
+
+
+
+
+
+
+ long total = ((com.github.pagehelper.Page) orderList).getTotal();
+ // 两个list都没数据那肯定返回空了
+ if (CollectionUtil.isEmpty(orderList)){
+ return new PageImpl<>(Collections.EMPTY_LIST, pageable, 0);
+ }
+ // 开始组装item了
+ // 拿出所有orderId,查item,然后分组 by orderId
+ List idList = new ArrayList<>();
+
+ if (CollectionUtil.isNotEmpty(orderList)){
+ idList.addAll(orderList.stream().map(H5OrderVO::getOrderId).collect(Collectors.toList()));
+ }
+
+ for (Long item : idList){
+ System.out.println("这个东西是什么:======:"+item);
+ }
+ QueryWrapper orderItemQw = new QueryWrapper<>();
+ orderItemQw.in("order_id", idList);
+ Map> orderItemMap =
+ orderItemMapper.selectList(orderItemQw).stream().collect(Collectors.groupingBy(OrderItem::getOrderId));
+
+
+ orderList.forEach(item -> {
+
+ item.setOrderItemList(orderItemMap.get(item.getOrderId()));
+
+ OmsOrderService orderServiceInfo = omsOrderServiceService.selectByOrderId(item.getOrderId());
+ PetVO petVO = h5PetService.selectPetById(orderServiceInfo.getPetId());
+ orderServiceInfo.setPetVo(petVO);
+ item.setService(orderServiceInfo);
+
+
+
+ OmsOrderService omsOrderService = new OmsOrderService();
+ omsOrderService.setOrderId(item.getOrderId());
+ List orderServiceList = omsOrderServiceMapper.selectList(omsOrderService);
+
+
+
+ // 使用一个 Set 来跟踪已经添加的 PetVO 的 id
+ Set addedPetIds = new HashSet<>();
+ List petVOList = new ArrayList<>();
+
+ for (OmsOrderService service1 : orderServiceList) {
+ // 宠物标识不为空的时候查询数据
+ if (service1.getPetId() != null) {
+ PetVO petVO1 = h5PetService.selectPetById(service1.getPetId());
+
+ // 检查 petVO 的 id 是否已经添加过
+ if (petVO1 != null && !addedPetIds.contains(petVO1.getId())) {
+ service1.setPetVo(petVO1);
+ petVOList.add(petVO1);
+ addedPetIds.add(petVO1.getId()); // 标记该 id 已添加
+ }
+ }
+ }
+ item.setOrderServiceList(orderServiceList);
+ item.setPetVOList(petVOList);
+
+// item.setUsersTeacher(appletUsersTeacherService.selectAppletUsersTeacherById(item.getTeacherId()));
+
+
+ });
+
+ return new PageImpl<>(orderList, pageable, total);
+ }
+
+
+
+ //下单小程序端 - 根据订单标识查询订单详情
+ @Override
+ public H5OrderVO orderDetail(Long orderId){
+ H5OrderVO order = orderMapper.selectOrderDetail(orderId);
+ if (order == null){
+ throw new RuntimeException("未查询到该订单");
+ }
+ // 组装item
+ QueryWrapper orderItemQw = new QueryWrapper<>();
+ orderItemQw.eq("order_id", orderId);
+ List orderItemList = orderItemMapper.selectList(orderItemQw);
+ order.setOrderItemList(orderItemList);
+
+ //组装order_service
+ OmsOrderService omsOrderService = new OmsOrderService();
+ omsOrderService.setOrderId(orderId);
+ List orderServiceList = omsOrderServiceMapper.selectList(omsOrderService);
+ order.setOrderServiceList(orderServiceList);
+
+
+ List service = orderServiceList;
+ // 使用一个 Set 来跟踪已经添加的 PetVO 的 id
+ Set addedPetIds = new HashSet<>();
+ List petVOList = new ArrayList<>();
+ for (OmsOrderService service1 : service) {
+ // 宠物标识不为空的时候查询数据
+ if (service1.getPetId() != null) {
+ PetVO petVO = h5PetService.selectPetById(service1.getPetId());
+ // 检查 petVO 的 id 是否已经添加过
+ if (petVO != null && !addedPetIds.contains(petVO.getId())) {
+ service1.setPetVo(petVO);
+ petVOList.add(petVO);
+ addedPetIds.add(petVO.getId()); // 标记该 id 已添加
+ }
+ }
+
+ }
+ order.setPetVOList(petVOList);
+
+ // 如果未付款,计算倒计时
+ if (Constants.OrderStatus.NOTPAID.equals(order.getStatus())){
+ // 订单超时时间900s,后面可以配置到字典等
+ Integer time = 900;
+ Date addDate = Date.from(order.getCreateTime().plusSeconds(time).atZone(ZoneId.systemDefault()).toInstant());
+ if (addDate.after(new Date())) {
+ order.setTimeToPay(addDate.getTime());
+ }
+ }
+ return order;
+ }
+
+
+ //下单小程序端 - 根据订单标识取消订单
+ @Transactional
+ @Override
+ public String orderBatchCancel(CancelOrderRequest request, Long userId) {
+// LocalDateTime optDate = LocalDateTime.now();
+// if (CollectionUtil.isEmpty(request.getIdList())){
+// throw new RuntimeException("未指定需要取消的订单号");
+// }
+// QueryWrapper orderQw = new QueryWrapper<>();
+// orderQw.in("id", request.getIdList());
+// List orderList = orderMapper.selectList(orderQw);
+// if (orderList.size() < request.getIdList().size()){
+// throw new RuntimeException("未查询到订单信息");
+// }
+// //查orderItem
+// QueryWrapper qw = new QueryWrapper<>();
+// qw.in("order_id", request.getIdList());
+// List orderItem = orderItemMapper.selectList(qw);
+// if (CollectionUtil.isEmpty(orderItem)) {
+// throw new RuntimeException("未查询到订单信息");
+// }
+// long count = orderList.stream().filter(it -> !Constants.H5OrderStatus.UN_PAY.equals(it.getStatus())).count();
+// if (count > 0){
+// throw new RuntimeException("订单状态已更新,请刷新页面");
+// }
+// List addHistoryList = new ArrayList<>();
+// orderList.forEach(item -> {
+// item.setStatus(Constants.H5OrderStatus.CLOSED);
+// item.setUpdateTime(optDate);
+// item.setUpdateBy(userId);
+// OrderOperateHistory history = new OrderOperateHistory();
+// history.setOrderId(item.getId());
+// history.setOrderSn(item.getOrderSn());
+// history.setOperateMan(userId == null ? "后台管理员" : "" + item.getMemberId());
+// history.setOrderStatus(Constants.H5OrderStatus.CLOSED);
+// history.setCreateTime(optDate);
+// history.setCreateBy(userId);
+// history.setUpdateBy(userId);
+// history.setUpdateTime(optDate);
+// addHistoryList.add(history);
+//
+// });
+// //取消订单
+// int rows = orderMapper.cancelBatch(orderList);
+// if (rows < 1){
+// throw new RuntimeException("更改订单状态失败");
+// }
+// orderItem.stream().collect(Collectors.groupingBy(it->it.getSkuId())).forEach((k,v)->{
+// AtomicReference totalCount = new AtomicReference<>(0);
+// v.forEach(it-> totalCount.updateAndGet(v1 -> v1 + it.getQuantity()));
+// skuMapper.updateStockById(k, optDate, -1 * totalCount.get());
+// });
+//
+// //创建订单操作记录
+// boolean flag = orderOperateHistoryService.saveBatch(addHistoryList);
+// if (!flag){
+// throw new RuntimeException("创建订单操作记录失败");
+// }
+
+ orderMapper.cancelBatchOne(request.getId());
+ return "取消订单成功";
+ }
+
+
+ //下单小程序端 - 根据订单标识去评价
+ @Override
+ public AjaxResult orderEvaluate(Long orderId){
+ if (orderId == null){
+ throw new RuntimeException("系统繁忙");
+ }
+ return AjaxResult.successData("");
+ }
+
+
+
+
+ @Override
+ public OrderPayResponse orderPay(OrderPayRequest req) {
+ QueryWrapper qw = new QueryWrapper<>();
+ qw.eq("pay_id", req.getPayId());
+ qw.eq("status", 0);
+ List orderList = orderMapper.selectList(qw);
+ if (CollectionUtil.isEmpty(orderList)){
+ throw new RuntimeException("没有待支付的订单");
+ }
+ QueryWrapper memberWechatQw = new QueryWrapper<>();
+ memberWechatQw.eq("member_id", req.getMemberId());
+ MemberWechat memberWechat = memberWechatMapper.selectOne(memberWechatQw);
+ if (memberWechat == null || StrUtil.isBlank(memberWechat.getOpenid())){
+ throw new RuntimeException("获取用户openId失败");
+ }
+ QueryWrapper orderItemQw = new QueryWrapper<>();
+ orderItemQw.eq("order_id", orderList.get(0).getId());
+ List orderItemList = orderItemMapper.selectList(orderItemQw);
+ String orderDesc = orderItemList.get(0).getProductName().substring(0, Math.min(40, orderItemList.get(0).getProductName().length()));
+ //保存微信支付历史
+ LocalDateTime optDate = LocalDateTime.now();
+ QueryWrapper wxPaymentQw = new QueryWrapper<>();
+ wxPaymentQw.eq("order_id", orderList.get(0).getPayId());
+ wxPaymentQw.eq("op_type", Constants.PaymentOpType.PAY);
+ WechatPaymentHistory wechatPaymentHistory = wechatPaymentHistoryMapper.selectOne(wxPaymentQw);
+ if (wechatPaymentHistory == null){
+ wechatPaymentHistory = new WechatPaymentHistory();
+ wechatPaymentHistory.setOrderId(orderList.get(0).getPayId());
+ wechatPaymentHistory.setMemberId(req.getMemberId());
+ wechatPaymentHistory.setOpenid(memberWechat.getOpenid());
+ wechatPaymentHistory.setTitle(orderItemList.get(0).getProductName());
+ wechatPaymentHistory.setMoney(orderList.get(0).getPayAmount());
+ wechatPaymentHistory.setOpType(Constants.PaymentOpType.PAY);
+ wechatPaymentHistory.setPaymentStatus(0);
+ wechatPaymentHistory.setCreateBy(req.getMemberId());
+ wechatPaymentHistory.setCreateTime(optDate);
+ wechatPaymentHistory.setUpdateBy(req.getMemberId());
+ wechatPaymentHistory.setUpdateTime(optDate);
+ wechatPaymentHistoryMapper.insert(wechatPaymentHistory);
+ }else {
+ wechatPaymentHistory.setMoney(orderList.get(0).getPayAmount());
+ wechatPaymentHistoryMapper.updateById(wechatPaymentHistory);
+ }
+ //请开启微信支付 wechat.enabled=true
+ //调用wx的jsapi拿prepayId,返回签名等信息
+ String openId = memberWechat.getOpenid();
+ String appId = WechatPayData.appId;
+ if (2 == req.getWechatType()) {
+ openId = memberWechat.getRoutineOpenid();
+ appId = WechatPayData.miniProgramAppId;
+ }
+ String prepayId = wechatPayService.jsapiPay(
+ String.valueOf(req.getPayId()),
+ orderDesc,
+ Integer.valueOf(orderList.stream().map(Order::getPayAmount).
+ reduce(BigDecimal.ZERO, BigDecimal::add).multiply(new BigDecimal(100)).stripTrailingZeros().toPlainString()),
+ openId,
+ req.getMemberId(),
+ appId
+ );
+ OrderPayResponse response = new OrderPayResponse();
+ response.setPayType(2);
+ String nonceStr = WechatPayUtil.generateNonceStr();
+ long timeStamp = WechatPayUtil.getCurrentTimestamp();
+ prepayId = "prepay_id=" + prepayId;
+ String signType = "RSA";
+ String paySign = null;
+ String signatureStr = Stream.of(appId, String.valueOf(timeStamp), nonceStr, prepayId)
+ .collect(Collectors.joining("\n", "", "\n"));
+ try {
+ paySign = WechatPayUtil.getSign(signatureStr, WechatPayData.privateKeyPath);
+ } catch (Exception e) {
+ throw new RuntimeException("支付失败");
+ }
+ response.setAppId(appId);
+ response.setTimeStamp(String.valueOf(timeStamp));
+ response.setNonceStr(nonceStr);
+ response.setSignType(signType);
+ response.setPackage_(prepayId);
+ response.setPaySign(paySign);
+ response.setOrderId(orderList.get(0).getId());
+ return response;
+ }
+
+}
diff --git a/ruoyi-catdog/src/main/java/com/ruoyi/applet/tencent/TaskConsumer.java b/ruoyi-catdog/src/main/java/com/ruoyi/applet/tencent/TaskConsumer.java
new file mode 100644
index 0000000..df6b71f
--- /dev/null
+++ b/ruoyi-catdog/src/main/java/com/ruoyi/applet/tencent/TaskConsumer.java
@@ -0,0 +1,288 @@
+package com.ruoyi.applet.tencent;
+
+import com.cyl.h5.pojo.vo.H5OrderVO;
+import com.cyl.h5.service.H5MemberService;
+import com.cyl.h5.service.H5OrderService;
+import com.cyl.manager.oms.domain.OmsOrderService;
+import com.cyl.manager.oms.domain.Order;
+import com.cyl.manager.oms.service.OmsOrderServiceService;
+import com.cyl.manager.oms.service.OrderService;
+import com.cyl.manager.staff.service.IDispatchOrderService;
+import com.cyl.manager.ums.domain.Member;
+import com.cyl.manager.ums.domain.MemberPointHistory;
+import com.cyl.manager.ums.mapper.MemberMapper;
+import com.cyl.manager.ums.service.MemberPointHistoryService;
+import com.cyl.manager.ums.service.MemberService;
+import com.cyl.tencent.OrderMessageModel;
+import com.cyl.tencent.QueueConsumer;
+import com.ruoyi.applet.service.IMallOrderService;
+import com.ruoyi.common.config.properties.SmsProperties;
+import com.ruoyi.common.core.domain.AjaxResult;
+import com.ruoyi.common.core.sms.AliyunSmsUtils;
+import com.ruoyi.common.utils.StringUtils;
+import com.wechat.pay.java.core.util.GsonUtil;
+import lombok.extern.slf4j.Slf4j;
+import lombok.val;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.beans.factory.annotation.Qualifier;
+import org.springframework.stereotype.Component;
+
+import java.math.BigDecimal;
+import java.text.ParseException;
+import java.text.SimpleDateFormat;
+import java.time.LocalDate;
+import java.time.LocalDateTime;
+import java.time.ZoneId;
+import java.util.Date;
+import java.util.List;
+import java.util.concurrent.BlockingQueue;
+import java.util.concurrent.atomic.AtomicReference;
+
+
+@Slf4j
+@Component
+public class TaskConsumer implements QueueConsumer {
+
+
+ @Autowired
+ @Qualifier("taskQueue")
+ private BlockingQueue taskQueue;
+
+ @Autowired
+ private MemberPointHistoryService memberPointHistoryService;
+
+ @Autowired
+ private H5MemberService h5MemberService;
+
+ @Autowired
+ private MemberService memberService;
+
+ @Autowired
+ private OrderService orderService;
+
+ @Autowired
+ private OmsOrderServiceService omsOrderServiceService;
+
+ @Autowired
+ private MemberMapper memberMapper;
+
+ @Autowired
+ private SmsProperties smsProperties;
+
+ @Autowired
+ private H5OrderService h5OrderService;
+
+ @Autowired
+ private IDispatchOrderService dispatchedOrdersService;
+
+ @Autowired
+ private IMallOrderService mallOrderService;
+
+ int threadSize = 2;
+ private boolean run;
+ private TaskThread[] taskThreads;
+
+
+
+ private class TaskThread extends Thread {
+
+ @Override
+ public void run() {
+ while (run) {
+ try {
+ OrderMessageModel model = taskQueue.take();
+ log.info("消费者消息:" + model);
+ //处理任务逻辑
+ log.info("推送订单信息:" + GsonUtil.toJson(model.getOrder()));
+ //处理积分,集点,等级
+ pointHandler(model.getOrder());
+
+ //派单订单逻辑处理方法--------lzx
+ log.info("派单订单逻辑处理方法--------lzx");
+ log.info("派单类型:"+model.getOrder().getTeacherId());
+ H5OrderVO h5OrderVO = h5OrderService.orderDetail(model.getOrder().getId());
+ //如果为空则为系统派单
+ if (model.getOrder().getTeacherId() == null) {
+ //系统派单
+ log.info("系统派单");
+
+ mallOrderService.acceptDispatchAll(h5OrderVO);
+
+ }else if (model.getOrder().getTeacherId() != null) {
+ //指定派单
+ log.info("指定派单");
+ mallOrderService.acceptDispatch(model.getOrder().getTeacherId(), h5OrderVO);
+ }
+
+
+
+
+
+
+ //进行派单操作
+ dispatchedOrdersService.dispatch(model.getOrder().getId());
+ //TODO 等待订单逻辑完成
+ smsHandler(model.getOrder());
+ } catch (Exception e) {
+ log.error("task消费异常:{}", e);
+ }
+ }
+ }
+ }
+
+ private void smsHandler(Order order) {
+ try {
+ Member member = memberService.selectById(order.getMemberId());
+ String phone = memberService.getPhoneDecrypted(member.getPhoneEncrypted());
+
+ //TODO 查询订单的开始日期和结束日期
+ List omsOrderServiceList = omsOrderServiceService.selectListByOrderId(order.getId());
+
+ AtomicReference startDate = new AtomicReference<>();
+ AtomicReference endDate = new AtomicReference<>();
+
+ SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd");
+
+ omsOrderServiceList.forEach(item -> {
+ String serviceDate = item.getServiceDate();
+ if (StringUtils.isNotEmpty(serviceDate)) {
+ try {
+ Date serviceDateDate = sdf.parse(serviceDate);
+
+ if (StringUtils.isEmpty(startDate.get())) {
+ startDate.set(serviceDate);
+ } else {
+ if (serviceDateDate.before(sdf.parse(startDate.get()))) {
+ startDate.set(serviceDate);
+ }
+ }
+
+ if (StringUtils.isEmpty(endDate.get())) {
+ endDate.set(serviceDate);
+ } else {
+ if (serviceDateDate.after(sdf.parse(endDate.get()))) {
+ endDate.set(serviceDate);
+ }
+ }
+ } catch (ParseException e) {
+ log.error("时间解析失败:" + serviceDate);
+ }
+ }
+ });
+
+ if (StringUtils.isEmpty(endDate.get()) || StringUtils.isEmpty(startDate.get())) {
+ return;
+ }
+
+ AliyunSmsUtils util = new AliyunSmsUtils(smsProperties);
+ AliyunSmsUtils.sendOrderSuccessSMS(phone, startDate.get(), endDate.get());
+ } catch (Exception e) {
+ e.printStackTrace();
+ log.error("【支付回调任务处理】发送短信失败:" + e.getMessage());
+ }
+ }
+
+ private void pointHandler(Order order) {
+ BigDecimal amount = order.getPayAmount();
+ Member member = memberService.selectById(order.getMemberId());
+ Integer level = member.getLevel();
+ BigDecimal coefficient = BigDecimal.ZERO;
+ if (level == 1) {
+ coefficient = BigDecimal.valueOf(1.1);
+ } else if ( level == 2) {
+ coefficient = BigDecimal.valueOf(1.1);
+ } else if ( level == 3) {
+ coefficient = BigDecimal.valueOf(1.3);
+ } else if ( level == 4) {
+ coefficient = BigDecimal.valueOf(1.5);
+ } else {
+ coefficient = BigDecimal.valueOf(1.1);
+ }
+ //处理积分
+ MemberPointHistory point = getPointEntity(member,order,coefficient);
+ memberPointHistoryService.insertMemberPointHistory(point);
+ log.info("新增积分明细:{}", point);
+
+ //处理集点
+ MemberPointHistory gather = getGatherEntity(order,member.getCentralPoint());
+ memberPointHistoryService.insertMemberPointHistory(gather);
+ log.info("新增集点明细:{}", gather);
+
+ //处理等级
+ //有效订单开始时间为当前时间往前推一年的第一天
+ // 获取当前日期
+ LocalDate currentDate = LocalDate.now();
+ // 获取往前推一年的日期
+ LocalDate oneYearAgo = currentDate.minusYears(1);
+ // 获取往前推一年后的第一天(1月1日)
+ LocalDate firstDayOfYear = oneYearAgo.withDayOfYear(1);
+ // 将LocalDate转换为LocalDateTime,设置时间为00:00:00
+ LocalDateTime startOfDay = firstDayOfYear.atStartOfDay();
+
+ // 如果需要转换为Date类型
+ Date startDate = Date.from(startOfDay.atZone(ZoneId.systemDefault()).toInstant());
+ List orders = orderService.getOrdersByMemberId(order.getMemberId(),startDate,new Date());
+ //订单总金额
+ BigDecimal totalAmount = orders.stream()
+ .map(Order::getPayAmount) // 获取每个订单的 amount
+ .reduce(BigDecimal.ZERO, BigDecimal::add); // 累加
+ int[] levels = h5MemberService.evaluateOrderAmount(totalAmount);
+ int memberLevel = levels[0];
+ member.setLevel(memberLevel);
+ member.setCentralPoint(BigDecimal.valueOf(orders.size()));
+ member.setIntegral(totalAmount.multiply(coefficient));
+ memberMapper.updateById(member);
+ log.info("更新member信息:{}", member);
+ }
+
+ private MemberPointHistory getGatherEntity(Order order, BigDecimal centralPoint) {
+ MemberPointHistory memberPointHistory = new MemberPointHistory();
+ memberPointHistory.setMemberId(order.getMemberId());
+ memberPointHistory.setPoint(BigDecimal.ONE);
+ memberPointHistory.setType("gather");
+ memberPointHistory.setTransactionId(order.getId());
+ memberPointHistory.setDescription("数据手工同步");
+ memberPointHistory.setAction("added");
+ memberPointHistory.setPointBefore(centralPoint);
+ centralPoint = centralPoint.add(BigDecimal.valueOf(1));
+ memberPointHistory.setPointAfter(centralPoint);
+ memberPointHistory.setCreateAt(order.getCreateTime());
+ return memberPointHistory;
+ }
+
+ private MemberPointHistory getPointEntity(Member member,Order order, BigDecimal coefficient) {
+ MemberPointHistory memberPointHistory = new MemberPointHistory();
+ memberPointHistory.setMemberId(order.getMemberId());
+ BigDecimal result = order.getPayAmount().multiply(coefficient);
+ memberPointHistory.setPoint(result);
+ memberPointHistory.setType("point");
+ memberPointHistory.setTransactionId(order.getId());
+ memberPointHistory.setDescription("订单生成");
+ memberPointHistory.setAction("added");
+ memberPointHistory.setPointBefore(member.getIntegral());
+ BigDecimal pointAfter = member.getIntegral().add(order.getPayAmount().multiply(coefficient));
+ memberPointHistory.setPointAfter(pointAfter);
+ memberPointHistory.setCreateAt(order.getCreateTime());
+ return memberPointHistory;
+ }
+
+ @Override
+ public void start() {
+ run = true;
+ taskThreads = new TaskThread[threadSize];
+ for (int i = 0; i < threadSize; i++) {
+ taskThreads [i] = new TaskThread();
+ taskThreads [i].start();
+ }
+ }
+
+ @Override
+ public void stop() {
+ run = false;
+ if (taskThreads != null) {
+ for (TaskThread thread : taskThreads ) {
+ thread.interrupt();
+ }
+ }
+ }
+}
\ No newline at end of file
diff --git a/ruoyi-catdog/src/main/java/com/ruoyi/model/controller/AppletTaskController.java b/ruoyi-catdog/src/main/java/com/ruoyi/model/controller/AppletTaskController.java
new file mode 100644
index 0000000..ea1ec53
--- /dev/null
+++ b/ruoyi-catdog/src/main/java/com/ruoyi/model/controller/AppletTaskController.java
@@ -0,0 +1,96 @@
+package com.ruoyi.model.controller;
+
+import java.util.List;
+import org.springframework.security.access.prepost.PreAuthorize;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.web.bind.annotation.GetMapping;
+import org.springframework.web.bind.annotation.PostMapping;
+import org.springframework.web.bind.annotation.PutMapping;
+import org.springframework.web.bind.annotation.DeleteMapping;
+import org.springframework.web.bind.annotation.PathVariable;
+import org.springframework.web.bind.annotation.RequestBody;
+import org.springframework.web.bind.annotation.RequestMapping;
+import org.springframework.web.bind.annotation.RestController;
+import com.ruoyi.common.annotation.Log;
+import com.ruoyi.common.core.controller.BaseController;
+import com.ruoyi.common.core.domain.AjaxResult;
+import com.ruoyi.common.enums.BusinessType;
+import com.ruoyi.model.domain.AppletTask;
+import com.ruoyi.model.service.IAppletTaskService;
+import com.ruoyi.common.utils.poi.ExcelUtil;
+import com.ruoyi.common.core.page.TableDataInfo;
+
+/**
+ * 任务中心Controller
+ *
+ * @author daixiande
+ * @date 2025-04-24
+ */
+@RestController
+@RequestMapping("/model/AppletTask")
+public class AppletTaskController extends BaseController {
+ @Autowired
+ private IAppletTaskService appletTaskService;
+
+ /**
+ * 查询任务中心列表
+ */
+ @PreAuthorize("@ss.hasPermi('model:AppletTask:list')")
+ @GetMapping("/list")
+ public TableDataInfo list(AppletTask appletTask) {
+ startPage();
+ List list = appletTaskService.selectAppletTaskList(appletTask);
+ return getDataTable(list);
+ }
+
+ /**
+ * 导出任务中心列表
+ */
+ @PreAuthorize("@ss.hasPermi('model:AppletTask:export')")
+ @Log(title = "任务中心", businessType = BusinessType.EXPORT)
+ @GetMapping("/export")
+ public AjaxResult export(AppletTask appletTask) {
+ List list = appletTaskService.selectAppletTaskList(appletTask);
+ ExcelUtil util = new ExcelUtil(AppletTask.class);
+ return util.exportExcel(list, "任务中心数据");
+ }
+
+ /**
+ * 获取任务中心详细信息
+ */
+ @PreAuthorize("@ss.hasPermi('model:AppletTask:query')")
+ @GetMapping(value = "/{id}")
+ public AjaxResult getInfo(@PathVariable("id") Long id) {
+ return AjaxResult.success(appletTaskService.selectAppletTaskById(id));
+ }
+
+ /**
+ * 新增任务中心
+ */
+ @PreAuthorize("@ss.hasPermi('model:AppletTask:add')")
+ @Log(title = "任务中心", businessType = BusinessType.INSERT)
+ @PostMapping
+ public AjaxResult add(@RequestBody AppletTask appletTask) {
+ return toAjax(appletTaskService.insertAppletTask(appletTask));
+ }
+
+ /**
+ * 修改任务中心
+ */
+ @PreAuthorize("@ss.hasPermi('model:AppletTask:edit')")
+ @Log(title = "任务中心", businessType = BusinessType.UPDATE)
+ @PutMapping
+ public AjaxResult edit(@RequestBody AppletTask appletTask) {
+ return toAjax(appletTaskService.updateAppletTask(appletTask));
+ }
+
+ /**
+ * 删除任务中心
+ */
+ @PreAuthorize("@ss.hasPermi('model:AppletTask:remove')")
+ @Log(title = "任务中心", businessType = BusinessType.DELETE)
+ @DeleteMapping("/{ids}")
+ public AjaxResult remove(@PathVariable Long[] ids) {
+ return toAjax(appletTaskService.deleteAppletTaskByIds(ids));
+ }
+}
\ No newline at end of file
diff --git a/ruoyi-catdog/src/main/java/com/ruoyi/model/domain/AppletTask.java b/ruoyi-catdog/src/main/java/com/ruoyi/model/domain/AppletTask.java
new file mode 100644
index 0000000..d320f4d
--- /dev/null
+++ b/ruoyi-catdog/src/main/java/com/ruoyi/model/domain/AppletTask.java
@@ -0,0 +1,77 @@
+package com.ruoyi.model.domain;
+
+import java.math.BigDecimal;
+import java.time.LocalDateTime;
+import com.fasterxml.jackson.annotation.JsonFormat;
+import com.ruoyi.common.annotation.Excel;
+import com.ruoyi.common.core.domain.BaseAudit;
+import lombok.Data;
+/**
+ * 任务中心对象 applet_task
+ *
+ * @author daixiande
+ */
+@Data
+public class AppletTask extends BaseAudit {
+ private static final long serialVersionUID = 1L;
+
+ /** 标识 */
+ private Long id;
+
+ /** 当前状态0待接受1以接受 */
+ @Excel(name = "当前状态0待接受1以接受")
+ private Integer status;
+
+ /** 下单用户标识 */
+ @Excel(name = "下单用户标识")
+ private Long memberId;
+
+ /** 任务类型名称 */
+ @Excel(name = "任务类型名称")
+ private String taskName;
+
+ /** 任务小图 */
+ @Excel(name = "任务小图")
+ private String taskIcon;
+
+ /** 任务报酬 */
+ @Excel(name = "任务报酬")
+ private BigDecimal taskMoney;
+
+ /** 图片 */
+ @Excel(name = "图片")
+ private String image;
+
+ /** 标题 */
+ @Excel(name = "标题")
+ private String title;
+
+ /** 主题 */
+ @Excel(name = "主题")
+ private String theme;
+
+ /** 任务截至时间 */
+ @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss")
+ @Excel(name = "任务截至时间", width = 30, dateFormat = "yyyy-MM-dd HH:mm:ss")
+ private LocalDateTime taskEndTime;
+
+ /** 任务进度 */
+ @Excel(name = "任务进度")
+ private Integer taskState;
+
+ /** 审核状态 */
+ @Excel(name = "审核状态")
+ private Integer examineState;
+
+ /** 审核说明 */
+ @Excel(name = "审核说明")
+ private String examineText;
+
+ /** 审核图片 */
+ @Excel(name = "审核图片")
+ private String examineImage;
+
+ /** DEL_FLAG */
+ private Long delFlag;
+
+}
diff --git a/ruoyi-catdog/src/main/java/com/ruoyi/model/mapper/AppletOrderItemDateLogMapper.java b/ruoyi-catdog/src/main/java/com/ruoyi/model/mapper/AppletOrderItemDateLogMapper.java
index 9893283..d1f718e 100644
--- a/ruoyi-catdog/src/main/java/com/ruoyi/model/mapper/AppletOrderItemDateLogMapper.java
+++ b/ruoyi-catdog/src/main/java/com/ruoyi/model/mapper/AppletOrderItemDateLogMapper.java
@@ -2,6 +2,8 @@ package com.ruoyi.model.mapper;
import java.util.List;
import com.ruoyi.model.domain.AppletOrderItemDateLog;
+import org.apache.ibatis.annotations.Param;
+import org.apache.ibatis.annotations.Select;
/**
* 订单信息表Mapper接口
@@ -16,7 +18,9 @@ public interface AppletOrderItemDateLogMapper {
* @return 订单信息表
*/
AppletOrderItemDateLog selectById(Long id);
- AppletOrderItemDateLog selectAppletOrderItemDateLogByItemDateId(Long itemDateId);
+
+ @Select("select * from applet_order_item_date_log where item_date_id = #{itemDateId}")
+ AppletOrderItemDateLog selectAppletOrderItemDateLogByItemDateId(@Param("itemDateId") Long itemDateId);
/**
* 查询订单信息表列表
diff --git a/ruoyi-catdog/src/main/java/com/ruoyi/model/mapper/AppletTaskMapper.java b/ruoyi-catdog/src/main/java/com/ruoyi/model/mapper/AppletTaskMapper.java
new file mode 100644
index 0000000..c2d3916
--- /dev/null
+++ b/ruoyi-catdog/src/main/java/com/ruoyi/model/mapper/AppletTaskMapper.java
@@ -0,0 +1,67 @@
+package com.ruoyi.model.mapper;
+
+import java.util.List;
+import com.ruoyi.model.domain.AppletTask;
+
+/**
+ * 任务中心Mapper接口
+ *
+ * @author daixiande
+ */
+public interface AppletTaskMapper {
+ /**
+ * 查询任务中心
+ *
+ * @param id 任务中心主键
+ * @return 任务中心
+ */
+ AppletTask selectById(Long id);
+
+ /**
+ * 查询任务中心列表
+ *
+ * @param appletTask 任务中心
+ * @return 任务中心集合
+ */
+ List selectList(AppletTask appletTask);
+
+ /**
+ * 新增任务中心
+ *
+ * @param appletTask 任务中心
+ * @return 结果
+ */
+ int insert(AppletTask appletTask);
+
+ /**
+ * 修改任务中心
+ *
+ * @param appletTask 任务中心
+ * @return 结果
+ */
+ int update(AppletTask appletTask);
+
+ /**
+ * 删除任务中心
+ *
+ * @param id 任务中心主键
+ * @return 结果
+ */
+ int deleteById(Long id);
+
+ /**
+ * 批量删除任务中心
+ *
+ * @param ids 需要删除的数据主键集合
+ * @return 结果
+ */
+ int deleteByIds(Long[] ids);
+
+ /**
+ * 更新或插入任务中心
+ *
+ * @param appletTask 任务中心
+ * @return 结果
+ */
+ int insertOrUpdate(AppletTask appletTask);
+}
diff --git a/ruoyi-catdog/src/main/java/com/ruoyi/model/service/IAppletTaskService.java b/ruoyi-catdog/src/main/java/com/ruoyi/model/service/IAppletTaskService.java
new file mode 100644
index 0000000..50f41ac
--- /dev/null
+++ b/ruoyi-catdog/src/main/java/com/ruoyi/model/service/IAppletTaskService.java
@@ -0,0 +1,58 @@
+package com.ruoyi.model.service;
+import java.util.List;
+import com.ruoyi.model.domain.AppletTask;
+
+/**
+ * 任务中心Service接口
+ *
+ * @author daixiande
+ */
+public interface IAppletTaskService {
+ /**
+ * 查询任务中心
+ *
+ * @param id 任务中心主键
+ * @return 任务中心
+ */
+ AppletTask selectAppletTaskById(Long id);
+
+ /**
+ * 查询任务中心列表
+ *
+ * @param appletTask 任务中心
+ * @return 任务中心集合
+ */
+ List selectAppletTaskList(AppletTask appletTask);
+
+ /**
+ * 新增任务中心
+ *
+ * @param appletTask 任务中心
+ * @return 结果
+ */
+ int insertAppletTask(AppletTask appletTask);
+
+ /**
+ * 修改任务中心
+ *
+ * @param appletTask 任务中心
+ * @return 结果
+ */
+ int updateAppletTask(AppletTask appletTask);
+
+ /**
+ * 批量删除任务中心
+ *
+ * @param ids 需要删除的任务中心主键集合
+ * @return 结果
+ */
+ int deleteAppletTaskByIds(Long[] ids);
+
+ /**
+ * 删除任务中心信息
+ *
+ * @param id 任务中心主键
+ * @return 结果
+ */
+ int deleteAppletTaskById(Long id);
+}
diff --git a/ruoyi-catdog/src/main/java/com/ruoyi/model/service/impl/AppletTaskServiceImpl.java b/ruoyi-catdog/src/main/java/com/ruoyi/model/service/impl/AppletTaskServiceImpl.java
new file mode 100644
index 0000000..a45dc7c
--- /dev/null
+++ b/ruoyi-catdog/src/main/java/com/ruoyi/model/service/impl/AppletTaskServiceImpl.java
@@ -0,0 +1,90 @@
+package com.ruoyi.model.service.impl;
+
+import java.util.List;
+import java.time.LocalDateTime;
+
+import com.ruoyi.common.utils.DateUtils;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.stereotype.Service;
+import com.ruoyi.model.mapper.AppletTaskMapper;
+import com.ruoyi.model.domain.AppletTask;
+import com.ruoyi.model.service.IAppletTaskService;
+
+/**
+ * 任务中心Service业务层处理
+ *
+ * @author daixiande
+ */
+@Service
+public class AppletTaskServiceImpl implements IAppletTaskService {
+ @Autowired
+ private AppletTaskMapper appletTaskMapper;
+
+ /**
+ * 查询任务中心
+ *
+ * @param id 任务中心主键
+ * @return 任务中心
+ */
+ @Override
+ public AppletTask selectAppletTaskById(Long id) {
+ return appletTaskMapper.selectById(id);
+ }
+
+ /**
+ * 查询任务中心列表
+ *
+ * @param appletTask 任务中心
+ * @return 任务中心
+ */
+ @Override
+ public List selectAppletTaskList(AppletTask appletTask) {
+ return appletTaskMapper.selectList(appletTask);
+ }
+
+ /**
+ * 新增任务中心
+ *
+ * @param appletTask 任务中心
+ * @return 结果
+ */
+ @Override
+ public int insertAppletTask(AppletTask appletTask) {
+ appletTask.setCreateTime(LocalDateTime.now());
+ return appletTaskMapper.insert(appletTask);
+ }
+
+ /**
+ * 修改任务中心
+ *
+ * @param appletTask 任务中心
+ * @return 结果
+ */
+ @Override
+ public int updateAppletTask(AppletTask appletTask) {
+ appletTask.setUpdateTime(DateUtils.getNowDate());
+ return appletTaskMapper.update(appletTask);
+ }
+
+ /**
+ * 批量删除任务中心
+ *
+ * @param ids 需要删除的任务中心主键
+ * @return 结果
+ */
+ @Override
+ public int deleteAppletTaskByIds(Long[] ids) {
+ return appletTaskMapper.deleteByIds(ids);
+ }
+
+ /**
+ * 删除任务中心信息
+ *
+ * @param id 任务中心主键
+ * @return 结果
+ */
+ @Override
+ public int deleteAppletTaskById(Long id) {
+ return appletTaskMapper.deleteById(id);
+ }
+}
diff --git a/ruoyi-catdog/src/main/resources/mapper/model/AppletTaskMapper.xml b/ruoyi-catdog/src/main/resources/mapper/model/AppletTaskMapper.xml
new file mode 100644
index 0000000..13626b7
--- /dev/null
+++ b/ruoyi-catdog/src/main/resources/mapper/model/AppletTaskMapper.xml
@@ -0,0 +1,185 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ select id, status, member_id, task_name, task_icon, task_money, image, title, theme, task_end_time, task_state, examine_state, examine_text, examine_image, create_time, create_by, update_time, update_by, del_flag from applet_task
+
+
+
+
+
+
+
+ insert into applet_task
+
+ id,
+ status,
+ member_id,
+ task_name,
+ task_icon,
+ task_money,
+ image,
+ title,
+ theme,
+ task_end_time,
+ task_state,
+ examine_state,
+ examine_text,
+ examine_image,
+ create_time,
+ create_by,
+ update_time,
+ update_by,
+ del_flag,
+
+
+
+ #{id},
+ #{status},
+ #{memberId},
+ #{taskName},
+ #{taskIcon},
+ #{taskMoney},
+ #{image},
+ #{title},
+ #{theme},
+ #{taskEndTime},
+ #{taskState},
+ #{examineState},
+ #{examineText},
+ #{examineImage},
+ #{createTime},
+ #{createBy},
+ #{updateTime},
+ #{updateBy},
+ #{delFlag},
+
+
+
+
+
+ update applet_task
+
+ status = #{status},
+ member_id = #{memberId},
+ task_name = #{taskName},
+ task_icon = #{taskIcon},
+ task_money = #{taskMoney},
+ image = #{image},
+ title = #{title},
+ theme = #{theme},
+ task_end_time = #{taskEndTime},
+ task_state = #{taskState},
+ examine_state = #{examineState},
+ examine_text = #{examineText},
+ examine_image = #{examineImage},
+ create_time = #{createTime},
+ create_by = #{createBy},
+ update_time = #{updateTime},
+ update_by = #{updateBy},
+ del_flag = #{delFlag},
+
+
+ where id = #{id}
+
+
+
+ delete from applet_task where id = #{id}
+
+
+
+ delete from applet_task where id in
+
+ #{id}
+
+
+
+ insert into applet_task
+
+
+ id,
+
+ status, member_id, task_name, task_icon, task_money, image, title, theme, task_end_time, task_state, examine_state, examine_text, examine_image, create_time, create_by, update_time, update_by, del_flag,
+
+
+ values
+
+
+ #{id, jdbcType=BIGINT},
+
+ #{status, jdbcType=INTEGER},#{memberId, jdbcType=BIGINT},#{taskName, jdbcType=VARCHAR},#{taskIcon, jdbcType=VARCHAR},#{taskMoney, jdbcType=DECIMAL},#{image, jdbcType=VARCHAR},#{title, jdbcType=VARCHAR},#{theme, jdbcType=VARCHAR},#{taskEndTime, jdbcType=DATE},#{taskState, jdbcType=INTEGER},#{examineState, jdbcType=INTEGER},#{examineText, jdbcType=VARCHAR},#{examineImage, jdbcType=VARCHAR},#{createTime, jdbcType=DATE},#{createBy, jdbcType=BIGINT},#{updateTime, jdbcType=DATE},#{updateBy, jdbcType=BIGINT},#{delFlag, jdbcType=BIGINT},
+
+
+ on duplicate key update
+
+
+ id = #{id,jdbcType=BIGINT},
+
+ status = #{status, jdbcType=INTEGER},
+ member_id = #{memberId, jdbcType=BIGINT},
+ task_name = #{taskName, jdbcType=VARCHAR},
+ task_icon = #{taskIcon, jdbcType=VARCHAR},
+ task_money = #{taskMoney, jdbcType=DECIMAL},
+ image = #{image, jdbcType=VARCHAR},
+ title = #{title, jdbcType=VARCHAR},
+ theme = #{theme, jdbcType=VARCHAR},
+ task_end_time = #{taskEndTime, jdbcType=DATE},
+ task_state = #{taskState, jdbcType=INTEGER},
+ examine_state = #{examineState, jdbcType=INTEGER},
+ examine_text = #{examineText, jdbcType=VARCHAR},
+ examine_image = #{examineImage, jdbcType=VARCHAR},
+ create_time = #{createTime, jdbcType=DATE},
+ create_by = #{createBy, jdbcType=BIGINT},
+ update_time = #{updateTime, jdbcType=DATE},
+ update_by = #{updateBy, jdbcType=BIGINT},
+ del_flag = #{delFlag, jdbcType=BIGINT},
+
+
+
+
diff --git a/ruoyi-mall/pom.xml b/ruoyi-mall/pom.xml
index d26fda8..2955b72 100644
--- a/ruoyi-mall/pom.xml
+++ b/ruoyi-mall/pom.xml
@@ -18,6 +18,11 @@
ruoyi-common
${ruoyi.version}
+
+
+
+
+
com.ruoyi
ruoyi-system
diff --git a/ruoyi-mall/src/main/java/com/cyl/h5/controller/H5AppointmentController.java b/ruoyi-mall/src/main/java/com/cyl/h5/controller/H5AppointmentController.java
index 4b093b0..a832940 100644
--- a/ruoyi-mall/src/main/java/com/cyl/h5/controller/H5AppointmentController.java
+++ b/ruoyi-mall/src/main/java/com/cyl/h5/controller/H5AppointmentController.java
@@ -67,6 +67,10 @@ public class H5AppointmentController {
beanCopier.copy(form, orderSubmitForm, null);
orderSubmitForm.setAddressId(memberAddressVO.getId());
+ //lzx增加的两个字段
+ orderSubmitForm.setTeacherId(form.getTeacherId());
+ orderSubmitForm.setCompanionLevel(form.getCompanionLevel());
+
redisService.lock(redisKey, redisValue, 60);
Order order = orderService.submit(orderSubmitForm);
diff --git a/ruoyi-mall/src/main/java/com/cyl/h5/controller/H5OrderController.java b/ruoyi-mall/src/main/java/com/cyl/h5/controller/H5OrderController.java
index e915ced..9256c22 100644
--- a/ruoyi-mall/src/main/java/com/cyl/h5/controller/H5OrderController.java
+++ b/ruoyi-mall/src/main/java/com/cyl/h5/controller/H5OrderController.java
@@ -79,11 +79,12 @@ public class H5OrderController {
return ResponseEntity.ok(service.orderPage(status, member.getId(), pageable));
}
- //@ApiOperation("订单列表")
+ //@ApiOperation("订单列表")这个改了一下
@GetMapping("/listByOpenid")
- public ResponseEntity> orderPageByOpenid(Integer status, String openid, Pageable pageable){
+ public ResponseEntity> orderPageByOpenid(Integer status, String openId, Pageable pageable){
List statusList = new ArrayList<>();
if (status == -1) {
+ statusList.add(0);
statusList.add(1);
statusList.add(2);
statusList.add(3);
@@ -91,7 +92,9 @@ public class H5OrderController {
} else {
statusList.add(status);
}
- return ResponseEntity.ok(service.orderPageByOpenid(statusList, openid, pageable));
+ PageImpl h5OrderVOS = service.orderPageByOpenid(statusList, openId, pageable);
+
+ return ResponseEntity.ok(h5OrderVOS);
}
//@ApiOperation("订单详情")
diff --git a/ruoyi-mall/src/main/java/com/cyl/h5/pojo/request/CancelOrderRequest.java b/ruoyi-mall/src/main/java/com/cyl/h5/pojo/request/CancelOrderRequest.java
index 5ac3b8f..9a8dfa7 100644
--- a/ruoyi-mall/src/main/java/com/cyl/h5/pojo/request/CancelOrderRequest.java
+++ b/ruoyi-mall/src/main/java/com/cyl/h5/pojo/request/CancelOrderRequest.java
@@ -11,4 +11,11 @@ import java.util.List;
public class CancelOrderRequest {
@ApiModelProperty("要取消的订单id集合")
private List idList;
+
+ @ApiModelProperty("取消订单说明")
+ private String remark;
+
+ @ApiModelProperty("取消订单标识")
+ private Long id;
+
}
diff --git a/ruoyi-mall/src/main/java/com/cyl/h5/pojo/vo/H5OrderVO.java b/ruoyi-mall/src/main/java/com/cyl/h5/pojo/vo/H5OrderVO.java
index 0063122..e13a055 100644
--- a/ruoyi-mall/src/main/java/com/cyl/h5/pojo/vo/H5OrderVO.java
+++ b/ruoyi-mall/src/main/java/com/cyl/h5/pojo/vo/H5OrderVO.java
@@ -89,4 +89,10 @@ public class H5OrderVO {
@TableField(exist = false)
private List petVOList;
+ private Long teacherId;
+
+ private Integer companionLevel;
+
+// @TableField(exist = false)
+// private AppletUsersTeacher usersTeacher;
}
diff --git a/ruoyi-mall/src/main/java/com/cyl/h5/pojo/vo/form/AppointmentSubmitForm.java b/ruoyi-mall/src/main/java/com/cyl/h5/pojo/vo/form/AppointmentSubmitForm.java
index 6a95d1c..156ea70 100644
--- a/ruoyi-mall/src/main/java/com/cyl/h5/pojo/vo/form/AppointmentSubmitForm.java
+++ b/ruoyi-mall/src/main/java/com/cyl/h5/pojo/vo/form/AppointmentSubmitForm.java
@@ -39,5 +39,13 @@ public class AppointmentSubmitForm {
/** 宠物服务列表 */
private List petOrderServices;
+
+
+ //指定伴宠师
+ private Long teacherId;
+
+ //伴宠师等级
+ private int companionLevel;
+
//todo 预留字段 1、订单派单方式 2、伴宠师名字(用于展示),3、伴宠师 ID
}
\ No newline at end of file
diff --git a/ruoyi-mall/src/main/java/com/cyl/h5/pojo/vo/form/OrderSubmitForm.java b/ruoyi-mall/src/main/java/com/cyl/h5/pojo/vo/form/OrderSubmitForm.java
index 11da729..6a82185 100644
--- a/ruoyi-mall/src/main/java/com/cyl/h5/pojo/vo/form/OrderSubmitForm.java
+++ b/ruoyi-mall/src/main/java/com/cyl/h5/pojo/vo/form/OrderSubmitForm.java
@@ -46,4 +46,13 @@ public class OrderSubmitForm {
/** 宠物服务列表 */
private List petOrderServices;
+
+
+
+ //指定伴宠师
+ private Long teacherId;
+
+ //伴宠师等级
+ private Integer companionLevel;
+
}
diff --git a/ruoyi-mall/src/main/java/com/cyl/h5/service/H5OrderService.java b/ruoyi-mall/src/main/java/com/cyl/h5/service/H5OrderService.java
index b94db27..4fbfdae 100644
--- a/ruoyi-mall/src/main/java/com/cyl/h5/service/H5OrderService.java
+++ b/ruoyi-mall/src/main/java/com/cyl/h5/service/H5OrderService.java
@@ -52,6 +52,8 @@ import com.ruoyi.common.utils.DateUtils;
import com.ruoyi.common.utils.IDGenerator;
import com.ruoyi.common.utils.StringUtils;
import com.ruoyi.framework.config.LocalDataUtil;
+//import com.ruoyi.model.domain.AppletUsersTeacher;
+//import com.ruoyi.model.service.IAppletUsersTeacherService;
import com.wechat.pay.java.service.partnerpayments.jsapi.model.Transaction;
import lombok.extern.slf4j.Slf4j;
import org.springframework.beans.BeanUtils;
@@ -161,6 +163,14 @@ public class H5OrderService {
@Autowired
private WechatMemberCouponMapper wechatMemberCouponMapper;
+
+ @Autowired
+ private H5PetService h5PetService;
+
+//
+// @Autowired
+// private IAppletUsersTeacherService appletUsersTeacherService;
+
@Transactional
public Order submit(OrderSubmitForm form) {
Member member = (Member) LocalDataUtil.getVar(Constants.MEMBER_INFO);
@@ -238,6 +248,17 @@ public class H5OrderService {
if(!StringUtils.isEmpty(form.getOrderMethod())){
order.setOrderMethod(form.getOrderMethod());
}
+
+
+
+
+ //设置伴宠师ID和下单方式
+ if(form.getTeacherId() != null){
+ order.setTeacherId(form.getTeacherId());
+ }
+ if(form.getCompanionLevel()!=null){
+ order.setCompanionLevel(form.getCompanionLevel());
+ }
order.setNote(form.getNote());
order.setConfirmStatus(0);
@@ -746,8 +767,48 @@ public class H5OrderService {
item.setOrderItemList(orderItemMap.get(item.getOrderId()));
OmsOrderService orderServiceInfo = omsOrderServiceService.selectByOrderId(item.getOrderId());
+ PetVO petVO = h5PetService.selectPetById(orderServiceInfo.getPetId());
+ orderServiceInfo.setPetVo(petVO);
item.setService(orderServiceInfo);
+
+
+
+ OmsOrderService omsOrderService = new OmsOrderService();
+ omsOrderService.setOrderId(item.getOrderId());
+ List orderServiceList = omsOrderServiceMapper.selectList(omsOrderService);
+
+
+
+ // 使用一个 Set 来跟踪已经添加的 PetVO 的 id
+ Set addedPetIds = new HashSet<>();
+ List petVOList = new ArrayList<>();
+
+ for (OmsOrderService service1 : orderServiceList) {
+ // 宠物标识不为空的时候查询数据
+ if (service1.getPetId() != null) {
+ PetVO petVO1 = h5PetService.selectPetById(service1.getPetId());
+
+ // 检查 petVO 的 id 是否已经添加过
+ if (petVO1 != null && !addedPetIds.contains(petVO1.getId())) {
+ service1.setPetVo(petVO1);
+ petVOList.add(petVO1);
+ addedPetIds.add(petVO1.getId()); // 标记该 id 已添加
+ }
+ }
+ }
+ item.setOrderServiceList(orderServiceList);
+ item.setPetVOList(petVOList);
+
+// item.setUsersTeacher(appletUsersTeacherService.selectAppletUsersTeacherById(item.getTeacherId()));
+
+
});
+
+
+
+
+
+
return new PageImpl<>(orderList, pageable, total);
}
@@ -1016,7 +1077,7 @@ public class H5OrderService {
//TODO
String payAmount = order.getPayAmount().multiply(new BigDecimal(100)).stripTrailingZeros().toPlainString();
- payAmount = "1";//支付一分钱
+// payAmount = "1";//支付一分钱
String prepayId = wechatPayService.jsapiPay(
String.valueOf(order.getPayId()),
orderDesc,
diff --git a/ruoyi-mall/src/main/java/com/cyl/manager/oms/domain/Order.java b/ruoyi-mall/src/main/java/com/cyl/manager/oms/domain/Order.java
index e9cabd8..e05bbc1 100644
--- a/ruoyi-mall/src/main/java/com/cyl/manager/oms/domain/Order.java
+++ b/ruoyi-mall/src/main/java/com/cyl/manager/oms/domain/Order.java
@@ -165,4 +165,14 @@ public class Order extends BaseAudit {
@Excel(name = "伴宠师ID")
private Long servicerId;
+
+
+
+
+ private Long teacherId;
+
+ private Integer companionLevel;
+
+
+
}
diff --git a/ruoyi-mall/src/main/java/com/cyl/manager/oms/mapper/OrderMapper.java b/ruoyi-mall/src/main/java/com/cyl/manager/oms/mapper/OrderMapper.java
index 1ec6bfd..f31b325 100644
--- a/ruoyi-mall/src/main/java/com/cyl/manager/oms/mapper/OrderMapper.java
+++ b/ruoyi-mall/src/main/java/com/cyl/manager/oms/mapper/OrderMapper.java
@@ -14,6 +14,8 @@ import com.cyl.manager.oms.pojo.vo.ManagerOrderVO;
import com.cyl.manager.statistics.pojo.vo.OrderAndAftersaleStatisticsVO;
import com.cyl.manager.ums.pojo.vo.MemberDataStatisticsVO;
import org.apache.ibatis.annotations.Param;
+import org.apache.ibatis.annotations.Select;
+import org.apache.ibatis.annotations.Update;
/**
* 订单表Mapper接口
@@ -33,6 +35,10 @@ public interface OrderMapper extends BaseMapper {
List orderPage(@Param("status") Integer status, @Param("memberId")Long memberId);
+
+
+ List orderPage3(@Param("status") List status, @Param("memberId") Long memberId);
+
List orderPage2(@Param("status") List status, @Param("memberId")Long memberId);
H5OrderVO selectOrderDetail(Long orderId);
@@ -41,6 +47,11 @@ public interface OrderMapper extends BaseMapper {
Integer cancelBatch(@Param("list") List orderList);
+
+ //修改订单状态为已取消
+ @Update("update oms_order set status = 4 where id = #{orderId}")
+ Integer cancelBatchOne(@Param("orderId") Long orderId);
+
MemberDataStatisticsVO statOrderCountAndAmount(Long memberId);
diff --git a/ruoyi-mall/src/main/java/com/cyl/manager/ums/domain/MemberAddress.java b/ruoyi-mall/src/main/java/com/cyl/manager/ums/domain/MemberAddress.java
index 61f3cd8..85dad4f 100644
--- a/ruoyi-mall/src/main/java/com/cyl/manager/ums/domain/MemberAddress.java
+++ b/ruoyi-mall/src/main/java/com/cyl/manager/ums/domain/MemberAddress.java
@@ -110,4 +110,11 @@ public class MemberAddress extends BaseAudit {
@Excel(name = "STAFF_ID")
private Long staffId;
+
+ /** 纬度 */
+ @Excel(name = "纬度")
+ private String latitude;
+ /** 删除标识 */
+ private Integer delFlag;
+
}
diff --git a/ruoyi-mall/src/main/java/com/cyl/tencent/TaskConsumer.java b/ruoyi-mall/src/main/java/com/cyl/tencent/TaskConsumer.java
index a1e8289..842b2e7 100644
--- a/ruoyi-mall/src/main/java/com/cyl/tencent/TaskConsumer.java
+++ b/ruoyi-mall/src/main/java/com/cyl/tencent/TaskConsumer.java
@@ -1,265 +1,285 @@
-package com.cyl.tencent;
-
-import com.cyl.h5.service.H5MemberService;
-import com.cyl.h5.service.H5OrderService;
-import com.cyl.manager.oms.domain.OmsOrderService;
-import com.cyl.manager.oms.domain.Order;
-import com.cyl.manager.oms.service.OmsOrderServiceService;
-import com.cyl.manager.oms.service.OrderService;
-import com.cyl.manager.staff.service.IDispatchOrderService;
-import com.cyl.manager.ums.domain.Member;
-import com.cyl.manager.ums.domain.MemberPointHistory;
-import com.cyl.manager.ums.mapper.MemberMapper;
-import com.cyl.manager.ums.service.MemberPointHistoryService;
-import com.cyl.manager.ums.service.MemberService;
-import com.ruoyi.common.config.properties.SmsProperties;
-import com.ruoyi.common.core.sms.AliyunSmsUtils;
-import com.ruoyi.common.utils.StringUtils;
-import com.wechat.pay.java.core.util.GsonUtil;
-import lombok.extern.slf4j.Slf4j;
-import org.springframework.beans.factory.annotation.Autowired;
-import org.springframework.beans.factory.annotation.Qualifier;
-import org.springframework.stereotype.Component;
-
-import java.math.BigDecimal;
-import java.text.ParseException;
-import java.text.SimpleDateFormat;
-import java.time.LocalDate;
-import java.time.LocalDateTime;
-import java.time.ZoneId;
-import java.util.Date;
-import java.util.List;
-import java.util.concurrent.BlockingQueue;
-import java.util.concurrent.atomic.AtomicReference;
-
-
-@Slf4j
-@Component
-public class TaskConsumer implements QueueConsumer {
-
-
- @Autowired
- @Qualifier("taskQueue")
- private BlockingQueue taskQueue;
-
- @Autowired
- private MemberPointHistoryService memberPointHistoryService;
-
- @Autowired
- private H5MemberService h5MemberService;
-
- @Autowired
- private MemberService memberService;
-
- @Autowired
- private OrderService orderService;
-
- @Autowired
- private OmsOrderServiceService omsOrderServiceService;
-
- @Autowired
- private MemberMapper memberMapper;
-
- @Autowired
- private SmsProperties smsProperties;
-
- @Autowired
- private H5OrderService h5OrderService;
-
- @Autowired
- private IDispatchOrderService dispatchedOrdersService;
-
- int threadSize = 2;
- private boolean run;
- private TaskThread[] taskThreads;
-
-
-
- private class TaskThread extends Thread {
-
- @Override
- public void run() {
- while (run) {
- try {
- OrderMessageModel model = taskQueue.take();
- log.info("消费者消息:" + model);
- //处理任务逻辑
- log.info("推送订单信息:" + GsonUtil.toJson(model.getOrder()));
- //处理积分,集点,等级
- pointHandler(model.getOrder());
-
- //派单订单逻辑处理方法--------lzx
-
-
-
-
-
-
-
- //进行派单操作
- dispatchedOrdersService.dispatch(model.getOrder().getId());
- //TODO 等待订单逻辑完成
- smsHandler(model.getOrder());
- } catch (Exception e) {
- log.error("task消费异常:{}", e);
- }
- }
- }
- }
-
- private void smsHandler(Order order) {
- try {
- Member member = memberService.selectById(order.getMemberId());
- String phone = memberService.getPhoneDecrypted(member.getPhoneEncrypted());
-
- //TODO 查询订单的开始日期和结束日期
- List omsOrderServiceList = omsOrderServiceService.selectListByOrderId(order.getId());
-
- AtomicReference startDate = new AtomicReference<>();
- AtomicReference endDate = new AtomicReference<>();
-
- SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd");
-
- omsOrderServiceList.forEach(item -> {
- String serviceDate = item.getServiceDate();
- if (StringUtils.isNotEmpty(serviceDate)) {
- try {
- Date serviceDateDate = sdf.parse(serviceDate);
-
- if (StringUtils.isEmpty(startDate.get())) {
- startDate.set(serviceDate);
- } else {
- if (serviceDateDate.before(sdf.parse(startDate.get()))) {
- startDate.set(serviceDate);
- }
- }
-
- if (StringUtils.isEmpty(endDate.get())) {
- endDate.set(serviceDate);
- } else {
- if (serviceDateDate.after(sdf.parse(endDate.get()))) {
- endDate.set(serviceDate);
- }
- }
- } catch (ParseException e) {
- log.error("时间解析失败:" + serviceDate);
- }
- }
- });
-
- if (StringUtils.isEmpty(endDate.get()) || StringUtils.isEmpty(startDate.get())) {
- return;
- }
-
- AliyunSmsUtils util = new AliyunSmsUtils(smsProperties);
- AliyunSmsUtils.sendOrderSuccessSMS(phone, startDate.get(), endDate.get());
- } catch (Exception e) {
- e.printStackTrace();
- log.error("【支付回调任务处理】发送短信失败:" + e.getMessage());
- }
- }
-
- private void pointHandler(Order order) {
- BigDecimal amount = order.getPayAmount();
- Member member = memberService.selectById(order.getMemberId());
- Integer level = member.getLevel();
- BigDecimal coefficient = BigDecimal.ZERO;
- if (level == 1) {
- coefficient = BigDecimal.valueOf(1.1);
- } else if ( level == 2) {
- coefficient = BigDecimal.valueOf(1.1);
- } else if ( level == 3) {
- coefficient = BigDecimal.valueOf(1.3);
- } else if ( level == 4) {
- coefficient = BigDecimal.valueOf(1.5);
- } else {
- coefficient = BigDecimal.valueOf(1.1);
- }
- //处理积分
- MemberPointHistory point = getPointEntity(member,order,coefficient);
- memberPointHistoryService.insertMemberPointHistory(point);
- log.info("新增积分明细:{}", point);
-
- //处理集点
- MemberPointHistory gather = getGatherEntity(order,member.getCentralPoint());
- memberPointHistoryService.insertMemberPointHistory(gather);
- log.info("新增集点明细:{}", gather);
-
- //处理等级
- //有效订单开始时间为当前时间往前推一年的第一天
- // 获取当前日期
- LocalDate currentDate = LocalDate.now();
- // 获取往前推一年的日期
- LocalDate oneYearAgo = currentDate.minusYears(1);
- // 获取往前推一年后的第一天(1月1日)
- LocalDate firstDayOfYear = oneYearAgo.withDayOfYear(1);
- // 将LocalDate转换为LocalDateTime,设置时间为00:00:00
- LocalDateTime startOfDay = firstDayOfYear.atStartOfDay();
-
- // 如果需要转换为Date类型
- Date startDate = Date.from(startOfDay.atZone(ZoneId.systemDefault()).toInstant());
- List orders = orderService.getOrdersByMemberId(order.getMemberId(),startDate,new Date());
- //订单总金额
- BigDecimal totalAmount = orders.stream()
- .map(Order::getPayAmount) // 获取每个订单的 amount
- .reduce(BigDecimal.ZERO, BigDecimal::add); // 累加
- int[] levels = h5MemberService.evaluateOrderAmount(totalAmount);
- int memberLevel = levels[0];
- member.setLevel(memberLevel);
- member.setCentralPoint(BigDecimal.valueOf(orders.size()));
- member.setIntegral(totalAmount.multiply(coefficient));
- memberMapper.updateById(member);
- log.info("更新member信息:{}", member);
- }
-
- private MemberPointHistory getGatherEntity(Order order, BigDecimal centralPoint) {
- MemberPointHistory memberPointHistory = new MemberPointHistory();
- memberPointHistory.setMemberId(order.getMemberId());
- memberPointHistory.setPoint(BigDecimal.ONE);
- memberPointHistory.setType("gather");
- memberPointHistory.setTransactionId(order.getId());
- memberPointHistory.setDescription("数据手工同步");
- memberPointHistory.setAction("added");
- memberPointHistory.setPointBefore(centralPoint);
- centralPoint = centralPoint.add(BigDecimal.valueOf(1));
- memberPointHistory.setPointAfter(centralPoint);
- memberPointHistory.setCreateAt(order.getCreateTime());
- return memberPointHistory;
- }
-
- private MemberPointHistory getPointEntity(Member member,Order order, BigDecimal coefficient) {
- MemberPointHistory memberPointHistory = new MemberPointHistory();
- memberPointHistory.setMemberId(order.getMemberId());
- BigDecimal result = order.getPayAmount().multiply(coefficient);
- memberPointHistory.setPoint(result);
- memberPointHistory.setType("point");
- memberPointHistory.setTransactionId(order.getId());
- memberPointHistory.setDescription("订单生成");
- memberPointHistory.setAction("added");
- memberPointHistory.setPointBefore(member.getIntegral());
- BigDecimal pointAfter = member.getIntegral().add(order.getPayAmount().multiply(coefficient));
- memberPointHistory.setPointAfter(pointAfter);
- memberPointHistory.setCreateAt(order.getCreateTime());
- return memberPointHistory;
- }
-
- @Override
- public void start() {
- run = true;
- taskThreads = new TaskThread[threadSize];
- for (int i = 0; i < threadSize; i++) {
- taskThreads [i] = new TaskThread();
- taskThreads [i].start();
- }
- }
-
- @Override
- public void stop() {
- run = false;
- if (taskThreads != null) {
- for (TaskThread thread : taskThreads ) {
- thread.interrupt();
- }
- }
- }
-}
\ No newline at end of file
+//package com.cyl.tencent;
+//
+//import com.cyl.h5.pojo.vo.H5OrderVO;
+//import com.cyl.h5.service.H5MemberService;
+//import com.cyl.h5.service.H5OrderService;
+//import com.cyl.manager.oms.domain.OmsOrderService;
+//import com.cyl.manager.oms.domain.Order;
+//import com.cyl.manager.oms.service.OmsOrderServiceService;
+//import com.cyl.manager.oms.service.OrderService;
+//import com.cyl.manager.staff.service.IDispatchOrderService;
+//import com.cyl.manager.ums.domain.Member;
+//import com.cyl.manager.ums.domain.MemberPointHistory;
+//import com.cyl.manager.ums.mapper.MemberMapper;
+//import com.cyl.manager.ums.service.MemberPointHistoryService;
+//import com.cyl.manager.ums.service.MemberService;
+//import com.ruoyi.common.config.properties.SmsProperties;
+//import com.ruoyi.common.core.sms.AliyunSmsUtils;
+//import com.ruoyi.common.utils.StringUtils;
+//import com.wechat.pay.java.core.util.GsonUtil;
+//import lombok.extern.slf4j.Slf4j;
+//import lombok.val;
+//import org.springframework.beans.factory.annotation.Autowired;
+//import org.springframework.beans.factory.annotation.Qualifier;
+//import org.springframework.stereotype.Component;
+//
+//import java.math.BigDecimal;
+//import java.text.ParseException;
+//import java.text.SimpleDateFormat;
+//import java.time.LocalDate;
+//import java.time.LocalDateTime;
+//import java.time.ZoneId;
+//import java.util.Date;
+//import java.util.List;
+//import java.util.concurrent.BlockingQueue;
+//import java.util.concurrent.atomic.AtomicReference;
+//
+//
+//@Slf4j
+//@Component
+//public class TaskConsumer implements QueueConsumer {
+//
+//
+// @Autowired
+// @Qualifier("taskQueue")
+// private BlockingQueue taskQueue;
+//
+// @Autowired
+// private MemberPointHistoryService memberPointHistoryService;
+//
+// @Autowired
+// private H5MemberService h5MemberService;
+//
+// @Autowired
+// private MemberService memberService;
+//
+// @Autowired
+// private OrderService orderService;
+//
+// @Autowired
+// private OmsOrderServiceService omsOrderServiceService;
+//
+// @Autowired
+// private MemberMapper memberMapper;
+//
+// @Autowired
+// private SmsProperties smsProperties;
+//
+// @Autowired
+// private H5OrderService h5OrderService;
+//
+// @Autowired
+// private IDispatchOrderService dispatchedOrdersService;
+//
+// @Autowired
+// private IMallOrderService mallOrderService;
+//
+// int threadSize = 2;
+// private boolean run;
+// private TaskThread[] taskThreads;
+//
+//
+//
+// private class TaskThread extends Thread {
+//
+// @Override
+// public void run() {
+// while (run) {
+// try {
+// OrderMessageModel model = taskQueue.take();
+// log.info("消费者消息:" + model);
+// //处理任务逻辑
+// log.info("推送订单信息:" + GsonUtil.toJson(model.getOrder()));
+// //处理积分,集点,等级
+// pointHandler(model.getOrder());
+//
+// //派单订单逻辑处理方法--------lzx
+// log.info("派单订单逻辑处理方法--------lzx");
+// log.info("派单类型:"+model.getOrder().getTeacherId());
+// H5OrderVO h5OrderVO = h5OrderService.orderDetail(model.getOrder().getId());
+// //如果为空则为系统派单
+// if (model.getOrder().getTeacherId() == null) {
+// //系统派单
+// log.info("系统派单");
+//
+// mallOrderService.acceptDispatchAll(h5OrderVO);
+//
+// }else if (model.getOrder().getTeacherId() != null) {
+// //指定派单
+// log.info("指定派单");
+// //获取当前时间
+// LocalDateTime now = LocalDateTime.now();
+// }
+//
+//
+//
+//
+//
+//
+// //进行派单操作
+// dispatchedOrdersService.dispatch(model.getOrder().getId());
+// //TODO 等待订单逻辑完成
+// smsHandler(model.getOrder());
+// } catch (Exception e) {
+// log.error("task消费异常:{}", e);
+// }
+// }
+// }
+// }
+//
+// private void smsHandler(Order order) {
+// try {
+// Member member = memberService.selectById(order.getMemberId());
+// String phone = memberService.getPhoneDecrypted(member.getPhoneEncrypted());
+//
+// //TODO 查询订单的开始日期和结束日期
+// List omsOrderServiceList = omsOrderServiceService.selectListByOrderId(order.getId());
+//
+// AtomicReference startDate = new AtomicReference<>();
+// AtomicReference endDate = new AtomicReference<>();
+//
+// SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd");
+//
+// omsOrderServiceList.forEach(item -> {
+// String serviceDate = item.getServiceDate();
+// if (StringUtils.isNotEmpty(serviceDate)) {
+// try {
+// Date serviceDateDate = sdf.parse(serviceDate);
+//
+// if (StringUtils.isEmpty(startDate.get())) {
+// startDate.set(serviceDate);
+// } else {
+// if (serviceDateDate.before(sdf.parse(startDate.get()))) {
+// startDate.set(serviceDate);
+// }
+// }
+//
+// if (StringUtils.isEmpty(endDate.get())) {
+// endDate.set(serviceDate);
+// } else {
+// if (serviceDateDate.after(sdf.parse(endDate.get()))) {
+// endDate.set(serviceDate);
+// }
+// }
+// } catch (ParseException e) {
+// log.error("时间解析失败:" + serviceDate);
+// }
+// }
+// });
+//
+// if (StringUtils.isEmpty(endDate.get()) || StringUtils.isEmpty(startDate.get())) {
+// return;
+// }
+//
+// AliyunSmsUtils util = new AliyunSmsUtils(smsProperties);
+// AliyunSmsUtils.sendOrderSuccessSMS(phone, startDate.get(), endDate.get());
+// } catch (Exception e) {
+// e.printStackTrace();
+// log.error("【支付回调任务处理】发送短信失败:" + e.getMessage());
+// }
+// }
+//
+// private void pointHandler(Order order) {
+// BigDecimal amount = order.getPayAmount();
+// Member member = memberService.selectById(order.getMemberId());
+// Integer level = member.getLevel();
+// BigDecimal coefficient = BigDecimal.ZERO;
+// if (level == 1) {
+// coefficient = BigDecimal.valueOf(1.1);
+// } else if ( level == 2) {
+// coefficient = BigDecimal.valueOf(1.1);
+// } else if ( level == 3) {
+// coefficient = BigDecimal.valueOf(1.3);
+// } else if ( level == 4) {
+// coefficient = BigDecimal.valueOf(1.5);
+// } else {
+// coefficient = BigDecimal.valueOf(1.1);
+// }
+// //处理积分
+// MemberPointHistory point = getPointEntity(member,order,coefficient);
+// memberPointHistoryService.insertMemberPointHistory(point);
+// log.info("新增积分明细:{}", point);
+//
+// //处理集点
+// MemberPointHistory gather = getGatherEntity(order,member.getCentralPoint());
+// memberPointHistoryService.insertMemberPointHistory(gather);
+// log.info("新增集点明细:{}", gather);
+//
+// //处理等级
+// //有效订单开始时间为当前时间往前推一年的第一天
+// // 获取当前日期
+// LocalDate currentDate = LocalDate.now();
+// // 获取往前推一年的日期
+// LocalDate oneYearAgo = currentDate.minusYears(1);
+// // 获取往前推一年后的第一天(1月1日)
+// LocalDate firstDayOfYear = oneYearAgo.withDayOfYear(1);
+// // 将LocalDate转换为LocalDateTime,设置时间为00:00:00
+// LocalDateTime startOfDay = firstDayOfYear.atStartOfDay();
+//
+// // 如果需要转换为Date类型
+// Date startDate = Date.from(startOfDay.atZone(ZoneId.systemDefault()).toInstant());
+// List orders = orderService.getOrdersByMemberId(order.getMemberId(),startDate,new Date());
+// //订单总金额
+// BigDecimal totalAmount = orders.stream()
+// .map(Order::getPayAmount) // 获取每个订单的 amount
+// .reduce(BigDecimal.ZERO, BigDecimal::add); // 累加
+// int[] levels = h5MemberService.evaluateOrderAmount(totalAmount);
+// int memberLevel = levels[0];
+// member.setLevel(memberLevel);
+// member.setCentralPoint(BigDecimal.valueOf(orders.size()));
+// member.setIntegral(totalAmount.multiply(coefficient));
+// memberMapper.updateById(member);
+// log.info("更新member信息:{}", member);
+// }
+//
+// private MemberPointHistory getGatherEntity(Order order, BigDecimal centralPoint) {
+// MemberPointHistory memberPointHistory = new MemberPointHistory();
+// memberPointHistory.setMemberId(order.getMemberId());
+// memberPointHistory.setPoint(BigDecimal.ONE);
+// memberPointHistory.setType("gather");
+// memberPointHistory.setTransactionId(order.getId());
+// memberPointHistory.setDescription("数据手工同步");
+// memberPointHistory.setAction("added");
+// memberPointHistory.setPointBefore(centralPoint);
+// centralPoint = centralPoint.add(BigDecimal.valueOf(1));
+// memberPointHistory.setPointAfter(centralPoint);
+// memberPointHistory.setCreateAt(order.getCreateTime());
+// return memberPointHistory;
+// }
+//
+// private MemberPointHistory getPointEntity(Member member,Order order, BigDecimal coefficient) {
+// MemberPointHistory memberPointHistory = new MemberPointHistory();
+// memberPointHistory.setMemberId(order.getMemberId());
+// BigDecimal result = order.getPayAmount().multiply(coefficient);
+// memberPointHistory.setPoint(result);
+// memberPointHistory.setType("point");
+// memberPointHistory.setTransactionId(order.getId());
+// memberPointHistory.setDescription("订单生成");
+// memberPointHistory.setAction("added");
+// memberPointHistory.setPointBefore(member.getIntegral());
+// BigDecimal pointAfter = member.getIntegral().add(order.getPayAmount().multiply(coefficient));
+// memberPointHistory.setPointAfter(pointAfter);
+// memberPointHistory.setCreateAt(order.getCreateTime());
+// return memberPointHistory;
+// }
+//
+// @Override
+// public void start() {
+// run = true;
+// taskThreads = new TaskThread[threadSize];
+// for (int i = 0; i < threadSize; i++) {
+// taskThreads [i] = new TaskThread();
+// taskThreads [i].start();
+// }
+// }
+//
+// @Override
+// public void stop() {
+// run = false;
+// if (taskThreads != null) {
+// for (TaskThread thread : taskThreads ) {
+// thread.interrupt();
+// }
+// }
+// }
+//}
\ No newline at end of file
diff --git a/ruoyi-mall/src/main/resources/mapper/oms/OrderMapper.xml b/ruoyi-mall/src/main/resources/mapper/oms/OrderMapper.xml
index 13c1470..482b00c 100644
--- a/ruoyi-mall/src/main/resources/mapper/oms/OrderMapper.xml
+++ b/ruoyi-mall/src/main/resources/mapper/oms/OrderMapper.xml
@@ -45,11 +45,12 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
-
+
+
- select id, member_id, member_username, total_amount, purchase_price, pay_amount, freight_amount, pay_type, status, aftersale_status, delivery_company, delivery_sn, auto_confirm_day, receiver_name, receiver_phone, receiver_post_code, receiver_province, receiver_city, receiver_district, receiver_province_id, receiver_city_id, receiver_district_id, receiver_detail_address, note, confirm_status, delete_status, payment_time, delivery_time, receive_time, create_by, create_time, update_by, update_time, need_pre_familiarize, wechat_member_coupon_id,servicer_id,order_method from oms_order
+ select id, member_id, member_username, total_amount, purchase_price, pay_amount, freight_amount, pay_type, status, aftersale_status, delivery_company, delivery_sn, auto_confirm_day, receiver_name, receiver_phone, receiver_post_code, receiver_province, receiver_city, receiver_district, receiver_province_id, receiver_city_id, receiver_district_id, receiver_detail_address, note, confirm_status, delete_status, payment_time, delivery_time, receive_time, create_by, create_time, update_by, update_time, need_pre_familiarize, wechat_member_coupon_id,servicer_id,order_method,teacher_id,companion_level from oms_order
@@ -92,7 +93,8 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
and wechat_member_coupon_id = #{wechatMemberCouponId}
and servicer_id = #{servicerId}
and order_method = #{orderMethod}
-
+ and teacher_id = #{teacherId}
+ and companion_level = #{companionLevel}
,
@@ -223,16 +225,55 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
receiver_province,
receiver_city,
receiver_district,
- receiver_detail_address
+ receiver_detail_address,
+ teacher_id,
+ companion_level
from oms_order
where
delete_status=0
and member_id=#{memberId}
- and status in
-
- #{item}
-
+ and status in (0,1,2,3,4)
+
+
+
+
+ order by create_time desc
+
+
+
+
+
@@ -256,7 +297,9 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
receiver_province,
receiver_city,
receiver_district,
- receiver_detail_address
+ receiver_detail_address,
+ teacher_id,
+ companion_level
from oms_order
where
delete_status=0
diff --git a/ruoyi-mall/src/main/resources/mapper/ums/AddressMapper.xml b/ruoyi-mall/src/main/resources/mapper/ums/AddressMapper.xml
index e19506e..068f19f 100644
--- a/ruoyi-mall/src/main/resources/mapper/ums/AddressMapper.xml
+++ b/ruoyi-mall/src/main/resources/mapper/ums/AddressMapper.xml
@@ -13,10 +13,12 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
+
+
- select id, code, parent_code, name, level, created_at, updated_at, deleted_at from address
+ select id, code, parent_code, name, level, created_at, updated_at, deleted_at, longitude, latitude from address