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 @@ + + + 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