猫妈狗爸伴宠师小程序后端代码
You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

324 lines
11 KiB

4 weeks ago
4 weeks ago
  1. package com.ruoyi.applet.contoller;
  2. import com.alibaba.fastjson.JSONObject;
  3. import com.baomidou.mybatisplus.core.toolkit.Wrappers;
  4. import com.cyl.h5.pojo.request.CancelOrderRequest;
  5. import com.cyl.h5.pojo.request.OrderPayRequest;
  6. import com.cyl.h5.pojo.response.OrderPayResponse;
  7. import com.cyl.h5.pojo.vo.H5OrderVO;
  8. import com.cyl.manager.oms.domain.Order;
  9. import com.cyl.manager.oms.mapper.OrderMapper;
  10. import com.cyl.manager.oms.service.OrderOperateHistoryService;
  11. import com.cyl.manager.ums.domain.Member;
  12. import com.cyl.manager.ums.mapper.MemberMapper;
  13. import com.cyl.manager.ums.service.MemberService;
  14. import com.cyl.manager.ums.service.MemberWechatService;
  15. import com.ruoyi.applet.mallpojo.TeacherListRequest;
  16. import com.ruoyi.applet.service.IApiMallOrderService;
  17. import com.ruoyi.applet.utils.WechatRefundUtil;
  18. import com.ruoyi.common.constant.Constants;
  19. import com.ruoyi.common.core.controller.BaseController;
  20. import com.ruoyi.common.core.domain.AjaxResult;
  21. import com.ruoyi.common.core.page.TableDataInfo;
  22. import com.ruoyi.common.core.redis.RedisService;
  23. import com.ruoyi.framework.config.LocalDataUtil;
  24. import com.ruoyi.model.domain.AppUsers;
  25. import com.ruoyi.model.domain.AppletAddress;
  26. import com.ruoyi.model.domain.AppletUsersTeacher;
  27. import com.ruoyi.model.domain.OmsOrderEvaluation;
  28. import com.ruoyi.model.service.*;
  29. import io.swagger.annotations.Api;
  30. import io.swagger.annotations.ApiOperation;
  31. import lombok.extern.slf4j.Slf4j;
  32. import org.apache.tomcat.websocket.WsSession;
  33. import org.springframework.beans.factory.annotation.Autowired;
  34. import org.springframework.data.domain.PageImpl;
  35. import org.springframework.data.domain.Pageable;
  36. import org.springframework.http.ResponseEntity;
  37. import org.springframework.web.bind.annotation.*;
  38. import java.time.LocalTime;
  39. import java.util.ArrayList;
  40. import java.util.List;
  41. import java.util.stream.Collectors;
  42. @Slf4j
  43. @Api(description = "下单小程序端 - 订单信息列表")
  44. @RestController
  45. @RequestMapping("/applet/mall/order")
  46. public class ApiMallOrderController extends BaseController {
  47. @Autowired
  48. private IApiMallOrderService service;
  49. @Autowired
  50. private IAppUsersService appUsersService;
  51. @Autowired
  52. private IAppletUsersTeacherService appletUsersTeacherService;
  53. @Autowired
  54. private IAppletConfigService appletConfigService;
  55. @Autowired
  56. private IAppletAddressService appletAddressService;
  57. @Autowired
  58. private RedisService redisService;
  59. @Autowired
  60. private OrderOperateHistoryService orderOperateHistoryService;
  61. @Autowired
  62. private OrderMapper orderMapper;
  63. @Autowired
  64. private WechatRefundUtil wechatRefundUtil;
  65. @Autowired
  66. private IOmsOrderEvaluationService orderEvaluationService;
  67. @Autowired
  68. private MemberMapper memberMapper;
  69. @Autowired
  70. private MemberWechatService memberWechatService;
  71. @ApiOperation("mall-订单列表信息接口")
  72. @GetMapping("/listByOpenid")
  73. public ResponseEntity<PageImpl<H5OrderVO>> orderPageByOpenid(Integer status, String openId, Pageable pageable){
  74. List<Integer> statusList = new ArrayList<>();
  75. if (status == -1) {
  76. statusList.add(0);
  77. statusList.add(1);
  78. statusList.add(2);
  79. statusList.add(3);
  80. statusList.add(11);
  81. } else {
  82. statusList.add(status);
  83. }
  84. PageImpl<H5OrderVO> h5OrderVOS = service.orderPageByOpenid(statusList, openId, pageable);
  85. Member member = memberWechatService.isRegister(openId);
  86. for (H5OrderVO h5OrderVO : h5OrderVOS) {
  87. List<OmsOrderEvaluation> list = orderEvaluationService.lambdaQuery()
  88. .eq(OmsOrderEvaluation::getOrderId, h5OrderVO.getOrderId())
  89. .eq(OmsOrderEvaluation::getMemberId, member.getId())
  90. .list();
  91. h5OrderVO.setEvaluation(list.size() > 0);
  92. }
  93. return ResponseEntity.ok(h5OrderVOS);
  94. }
  95. //根据订单标识查询订单详情
  96. @ApiOperation("mall-根据订单标识查询订单详情接口")
  97. @GetMapping("/orderDetail")
  98. public ResponseEntity<H5OrderVO> orderDetail(@RequestParam(required = false) Long orderId, String openId){
  99. if (orderId == null){
  100. throw new RuntimeException("系统繁忙");
  101. }
  102. // if (openId == null){
  103. // throw new RuntimeException("openId不能为空");
  104. // }
  105. H5OrderVO h5Order = service.orderDetail(orderId);
  106. if (h5Order == null){
  107. throw new RuntimeException("订单不存在");
  108. }
  109. Member member = memberWechatService.isRegister(openId);
  110. List<OmsOrderEvaluation> list = orderEvaluationService.lambdaQuery()
  111. .eq(OmsOrderEvaluation::getOrderId, h5Order.getOrderId())
  112. .eq(OmsOrderEvaluation::getMemberId, member.getId())
  113. .list();
  114. h5Order.setEvaluation(list.size() > 0);
  115. return ResponseEntity.ok(h5Order);
  116. }
  117. //修改基础订单数据
  118. @ApiOperation("mall-修改基础订单数据")
  119. @PostMapping("/updateBaseOrder")
  120. public AjaxResult updateBaseOrder(
  121. @RequestParam Long id,
  122. @RequestParam String contactName,
  123. @RequestParam String contactPhone,
  124. @RequestParam(required = false) String paymentMethod
  125. ){
  126. Order order = orderMapper.selectById(id);
  127. if (order == null){
  128. return AjaxResult.error("订单不存在");
  129. }
  130. order.setReceiverName(contactName);
  131. order.setReceiverPhone(contactPhone);
  132. orderMapper.updateById(order);
  133. return AjaxResult.success();
  134. }
  135. //根据订单标识取消订单
  136. @ApiOperation("mall-根据订单标识取消订单接口")
  137. @PostMapping("/orderCancel")
  138. public AjaxResult orderCancel(@RequestBody CancelOrderRequest request){
  139. Order order = orderMapper.selectById(request.getId());
  140. if (order == null){
  141. return AjaxResult.error("订单不存在");
  142. }
  143. Integer oldOrderStatus = order.getStatus();
  144. if (oldOrderStatus == 5){
  145. return AjaxResult.error("无效订单");
  146. }
  147. if (oldOrderStatus > 1){
  148. return AjaxResult.error("订单已被接单无法取消/修改");
  149. }
  150. try {
  151. // 先取消订单
  152. String cancelResult = service.orderBatchCancel(request, null);
  153. return AjaxResult.success(cancelResult);
  154. } catch (Exception e) {
  155. log.error("订单取消或退款申请失败", e);
  156. return AjaxResult.error("订单取消失败:" + e.getMessage());
  157. }
  158. }
  159. //根据订单标识去评价
  160. @ApiOperation("mall-根据订单标识去评价接口")
  161. @GetMapping("/orderEvaluate")
  162. public AjaxResult orderEvaluate(OmsOrderEvaluation evaluation, String openId){
  163. if (evaluation == null){
  164. throw new RuntimeException("系统繁忙");
  165. }
  166. Member member = memberWechatService.isRegister(openId);
  167. evaluation.setMemberId(member.getId());
  168. evaluation.setCreateTime(LocalTime.now());
  169. service.orderEvaluate(evaluation);
  170. return AjaxResult.success();
  171. }
  172. //查询服务过自己的伴宠师
  173. @ApiOperation("mall-查询服务过自己的伴宠师")
  174. @GetMapping("/getTecByUser")
  175. public AjaxResult getTecByUser(String openId){
  176. if (openId == null){
  177. AjaxResult.error("openId不能为空");
  178. }
  179. Member member = memberWechatService.isRegister(openId);
  180. List<Order> orders = orderMapper.selectList(Wrappers.<Order>lambdaQuery()
  181. .select(Order::getTeacherId)
  182. .eq(Order::getMemberId, member.getId()));
  183. ArrayList<Long> ids = new ArrayList<>();
  184. for (Order order : orders) {
  185. if (order != null){
  186. ids.add(order.getTeacherId());
  187. }
  188. }
  189. List<AppUsers> appUsersList = appUsersService
  190. .lambdaQuery()
  191. .in(ids.size() > 0, AppUsers::getUserId, ids)
  192. .list();
  193. for (AppUsers appUsers : appUsersList) {
  194. appUsers.setAppletAddresseList(appletAddressService
  195. .lambdaQuery()
  196. .eq(AppletAddress::getUserId, appUsers.getUserId())
  197. .list());
  198. AppletUsersTeacher appletUsersTeacher = appletUsersTeacherService.selectAppletUsersTeacherByUserId(appUsers.getUserId());
  199. appUsers.setAppletUsersTeacher(appletUsersTeacher);
  200. }
  201. return AjaxResult.success(appUsersList);
  202. }
  203. //查询-再来一单的历史伴宠师
  204. @ApiOperation("mall-查询-再来一单的历史伴宠师接口")
  205. @GetMapping("")
  206. public TableDataInfo getTeacherList(TeacherListRequest request) {
  207. startPage();
  208. AppUsers appUsers = new AppUsers();
  209. appUsers.setUserBcs(1);
  210. //如果伴宠师等级传入
  211. if (request.getTeacherLevels() != null) {
  212. appUsers.setUserBcsRole(request.getTeacherLevels());
  213. }
  214. List<AppUsers> appUsersList = appUsersService.selectAppUsersList(appUsers);
  215. for (AppUsers appUsers1 : appUsersList){
  216. AppletUsersTeacher appletUsersTeacher = appletUsersTeacherService.selectAppletUsersTeacherByUserId(appUsers1.getUserId());
  217. appUsers1.setAppletUsersTeacher(appletUsersTeacher);
  218. AppletAddress appletAddress = new AppletAddress();
  219. appletAddress.setUserId(appUsers.getUserId());
  220. List<AppletAddress> appletAddresses = appletAddressService.selectAppletAddressList(appletAddress);
  221. appUsers.setAppletAddresseList(appletAddresses);
  222. }
  223. return getDataTable(appUsersList);
  224. }
  225. @ApiOperation("mall-查询-再次支付")
  226. @PostMapping("/orderPay")
  227. public ResponseEntity<OrderPayResponse> orderPay(@RequestBody OrderPayRequest req){
  228. log.info("订单支付","提交的数据:"+ JSONObject.toJSONString(req));
  229. String redisKey = "h5_oms_order_pay_"+req.getPayId();
  230. String redisValue = req.getPayId()+"_"+System.currentTimeMillis();
  231. try {
  232. redisService.lock(redisKey, redisValue, 60);
  233. Member member = memberWechatService.isRegister(req.getOpenId());
  234. Long memberId = member.getId();
  235. req.setMemberId(memberId);
  236. req.setWechatType(2);
  237. return ResponseEntity.ok(service.orderPay(req));
  238. }catch (Exception e){
  239. log.error("支付方法异常", e);
  240. throw new RuntimeException(e.getMessage());
  241. }finally {
  242. try{
  243. redisService.unLock(redisKey,redisValue);
  244. }catch (Exception e){
  245. log.error("",e);
  246. }
  247. }
  248. }
  249. }