TOrderController.java 25 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644
  1. package com.ylx.web.controller.massage;
  2. import com.alibaba.fastjson.JSON;
  3. import com.alibaba.fastjson.JSONObject;
  4. import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
  5. import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
  6. import com.ylx.common.annotation.Log;
  7. import com.ylx.common.core.controller.BaseController;
  8. import com.ylx.common.core.domain.R;
  9. import com.ylx.common.core.domain.model.LoginUser;
  10. import com.ylx.common.enums.BusinessType;
  11. import com.ylx.common.exception.ServiceException;
  12. import com.ylx.common.utils.StringUtils;
  13. import com.ylx.common.utils.poi.ExcelUtil;
  14. import com.ylx.massage.domain.TJs;
  15. import com.ylx.massage.domain.TOrder;
  16. import com.ylx.massage.domain.TWxUser;
  17. import com.ylx.massage.domain.vo.OrderAllocationResultVo;
  18. import com.ylx.massage.domain.vo.OrderVerificationVo;
  19. import com.ylx.massage.domain.vo.TechnicianAvailabilityVo;
  20. import com.ylx.massage.enums.Enumproject;
  21. import com.ylx.massage.enums.OrderStatusEnum;
  22. import com.ylx.massage.enums.OrderStatusEnumVo;
  23. import com.ylx.massage.domain.OrderAllocationLog;
  24. import com.ylx.massage.service.TJsService;
  25. import com.ylx.massage.service.TOrderService;
  26. import com.ylx.massage.service.OrderAllocationLogService;
  27. import io.swagger.annotations.Api;
  28. import io.swagger.annotations.ApiOperation;
  29. import io.swagger.annotations.ApiParam;
  30. import lombok.extern.slf4j.Slf4j;
  31. import org.springframework.beans.BeanUtils;
  32. import org.springframework.web.bind.annotation.*;
  33. import javax.annotation.Resource;
  34. import javax.servlet.http.HttpServletResponse;
  35. import java.math.BigDecimal;
  36. import java.time.LocalDateTime;
  37. import java.time.YearMonth;
  38. import java.util.List;
  39. import java.util.Map;
  40. import java.util.Optional;
  41. import java.util.stream.Collectors;
  42. /**
  43. * 订单表 前端控制器
  44. */
  45. @RestController
  46. @Slf4j
  47. @Api(tags = {"订单管理"})
  48. @RequestMapping("api/order/v1")
  49. public class TOrderController extends BaseController {
  50. @Resource
  51. private TOrderService orderService;
  52. @Resource
  53. private OrderAllocationLogService allocationLogService;
  54. @Resource
  55. private TJsService jsService;
  56. /**
  57. * 下单
  58. *
  59. * @param order
  60. * @return R<TOrder>
  61. */
  62. //@Log(title = "新增订单", businessType = BusinessType.INSERT)
  63. @ApiOperation("下单")
  64. @RequestMapping(value = "wx/add", method = RequestMethod.POST)
  65. public R<TOrder> add(@RequestBody TOrder order) {
  66. try {
  67. return R.ok(orderService.addOrder(order));
  68. } catch (ServiceException s) {
  69. log.error(s.toString());
  70. return R.fail(s.getMessage());
  71. } catch (Exception e) {
  72. e.printStackTrace();
  73. return R.fail("系统异常");
  74. }
  75. }
  76. /**
  77. * 优惠卷核销
  78. *
  79. * @param order
  80. * @return
  81. */
  82. @Log(title = "优惠卷核销", businessType = BusinessType.UPDATE)
  83. @ApiOperation("优惠卷核销")
  84. @RequestMapping(value = "wx/verification", method = RequestMethod.POST)
  85. public R<OrderVerificationVo> verification(@RequestBody TOrder order) {
  86. try {
  87. return R.ok(orderService.verification(order));
  88. } catch (ServiceException s) {
  89. log.error(s.toString());
  90. return R.fail(s.getMessage());
  91. } catch (Exception e) {
  92. StackTraceElement stackTraceElement = e.getStackTrace()[0];
  93. log.error("系统出错,错误信息:" + e + " at " + stackTraceElement.getClassName() + "." + stackTraceElement.getMethodName() + ":" + stackTraceElement.getLineNumber());
  94. return R.fail("系统异常");
  95. }
  96. }
  97. /**
  98. * 转单
  99. *
  100. * @param order
  101. * @return R<TOrder>
  102. */
  103. @Log(title = "转单", businessType = BusinessType.INSERT)
  104. @ApiOperation("转单")
  105. @RequestMapping(value = "wx/transferOrder", method = RequestMethod.POST)
  106. public R<TOrder> transferOrder(@RequestBody TOrder order) {
  107. try {
  108. return R.ok(orderService.transferOrder(order));
  109. } catch (ServiceException s) {
  110. log.error(s.toString());
  111. return R.fail(s.getMessage());
  112. } catch (Exception e) {
  113. StackTraceElement stackTraceElement = e.getStackTrace()[0];
  114. log.error("系统出错,错误信息:" + e + " at " + stackTraceElement.getClassName() + "." + stackTraceElement.getMethodName() + ":" + stackTraceElement.getLineNumber());
  115. return R.fail("系统异常");
  116. }
  117. }
  118. /**
  119. * 支付订单
  120. *
  121. * @param order
  122. * @return R
  123. */
  124. @ApiOperation("支付订单")
  125. @Log(title = "支付订单", businessType = BusinessType.UPDATE)
  126. @RequestMapping(value = "wx/pay", method = RequestMethod.POST)
  127. public R pay(@RequestBody TOrder order) {
  128. try {
  129. log.info("支付订单接口前端传递的参数:{}", JSON.toJSONString(order));
  130. return orderService.payOrder(order);
  131. } catch (ServiceException s) {
  132. log.error(s.toString());
  133. return R.fail(s.getMessage());
  134. } catch (Exception e) {
  135. StackTraceElement stackTraceElement = e.getStackTrace()[0];
  136. log.error("系统出错,错误信息:" + e + " at " + stackTraceElement.getClassName() + "." + stackTraceElement.getMethodName() + ":" + stackTraceElement.getLineNumber());
  137. return R.fail("系统异常");
  138. }
  139. }
  140. /**
  141. * 退单申请
  142. *
  143. * 业务流程:
  144. * 1. 用户在订单详情页点击"取消订单"按钮
  145. * 2. 填写退单原因
  146. * 3. 提交申请
  147. * 4. 系统创建退单申请记录,状态为待审核
  148. * 5. 等待客服审核
  149. *
  150. *
  151. * @param order 订单对象
  152. * @return R
  153. */
  154. //@Log(title = "取消订单申请", businessType = BusinessType.UPDATE)
  155. @ApiOperation("退单申请")
  156. @RequestMapping(value = "wx/applyCancle", method = RequestMethod.POST)
  157. public R applyCancle(@RequestBody JSONObject jsonObject) {
  158. try {
  159. log.info("收到退单申请请求,订单ID:{},退单原因:{}", jsonObject.getString("cId"), jsonObject.getString("cancelReason"));
  160. // 调用服务层处理退单申请
  161. orderService.applyCancle(jsonObject.getString("cId"), jsonObject.getString("cancelReason"));
  162. // 返回成功提示
  163. return R.ok("您的申请已提交,客服审核中,请注意接听客服电话:19936963696");
  164. } catch (ServiceException s) {
  165. log.error("退单申请失败:{}", s.getMessage());
  166. return R.fail(s.getMessage());
  167. } catch (Exception e) {
  168. log.error("退单申请系统异常", e);
  169. return R.fail("系统异常,请稍后重试");
  170. }
  171. }
  172. /**
  173. * 取消退单申请(用户操作的接口)
  174. *
  175. * 业务流程:
  176. * 1. 用户在订单详情页点击"取消退单申请"按钮
  177. * 2. 系统校验订单状态和退单申请状态
  178. * 3. 取消退单申请,将申请状态标记为已取消
  179. * 4. 恢复订单到申请前的原始状态
  180. * 5. 返回成功提示
  181. *
  182. * @param order 订单对象,需要包含cId(订单ID)
  183. * @return R 操作结果
  184. */
  185. @ApiOperation("取消退单申请")
  186. @RequestMapping(value = "wx/cancelApplyCancle", method = RequestMethod.POST)
  187. public R cancelApplyCancle(@RequestBody TOrder order) {
  188. try {
  189. log.info("收到取消退单申请请求,订单ID:{}", order.getcId());
  190. // 调用服务层处理取消退单申请
  191. orderService.cancelApplyCancle(order);
  192. // 返回成功提示
  193. return R.ok("已成功取消退单申请,订单已恢复到原状态");
  194. } catch (ServiceException s) {
  195. log.error("取消退单申请失败:{}", s.getMessage());
  196. return R.fail(s.getMessage());
  197. } catch (Exception e) {
  198. log.error("取消退单申请系统异常", e);
  199. return R.fail("系统异常,请稍后重试");
  200. }
  201. }
  202. /**
  203. * 取消订单(用户操作的接口)
  204. *
  205. * @param order
  206. * @return R
  207. */
  208. @Log(title = "取消订单", businessType = BusinessType.UPDATE)
  209. @ApiOperation("取消订单")
  210. @RequestMapping(value = "wx/cancle", method = RequestMethod.POST)
  211. public R cancle(@RequestBody TOrder order) {
  212. try {
  213. return R.ok(orderService.cancle(order));
  214. } catch (ServiceException s) {
  215. log.error(s.toString());
  216. return R.fail(s.getMessage());
  217. } catch (Exception e) {
  218. StackTraceElement stackTraceElement = e.getStackTrace()[0];
  219. log.error("系统出错,错误信息:" + e + " at " + stackTraceElement.getClassName() + "." + stackTraceElement.getMethodName() + ":" + stackTraceElement.getLineNumber());
  220. return R.fail("系统异常");
  221. }
  222. }
  223. /**
  224. * 拒绝订单
  225. *
  226. * @param order
  227. * @return
  228. */
  229. @Log(title = "拒绝订单", businessType = BusinessType.UPDATE)
  230. @ApiOperation("拒绝订单")
  231. @RequestMapping(value = "wx/jujue", method = RequestMethod.POST)
  232. public R jujue(@RequestBody TOrder order) {
  233. try {
  234. return R.ok(orderService.jujue(order));
  235. } catch (ServiceException s) {
  236. log.error(s.toString());
  237. return R.fail(s.getMessage());
  238. } catch (Exception e) {
  239. StackTraceElement stackTraceElement = e.getStackTrace()[0];
  240. log.error("系统出错,错误信息:" + e + " at " + stackTraceElement.getClassName() + "." + stackTraceElement.getMethodName() + ":" + stackTraceElement.getLineNumber());
  241. return R.fail("系统异常");
  242. }
  243. }
  244. /**
  245. * 接受订单(技师端操作的接口)
  246. *
  247. * @param order
  248. * @return R
  249. */
  250. @Log(title = "接受订单", businessType = BusinessType.UPDATE)
  251. @ApiOperation("接受订单")
  252. @RequestMapping(value = "wx/takingOrders", method = RequestMethod.POST)
  253. public R takingOrders(@RequestBody TOrder order) {
  254. try {
  255. orderService.takingOrders(order);
  256. return R.ok();
  257. } catch (ServiceException s) {
  258. log.error(s.toString());
  259. return R.fail(s.getMessage());
  260. } catch (Exception e) {
  261. StackTraceElement stackTraceElement = e.getStackTrace()[0];
  262. log.error("系统出错,错误信息:" + e + " at " + stackTraceElement.getClassName() + "." + stackTraceElement.getMethodName() + ":" + stackTraceElement.getLineNumber());
  263. return R.fail("系统异常");
  264. }
  265. }
  266. /**
  267. * 出发(技师端操作的接口)
  268. *
  269. * @param order
  270. * @return R
  271. */
  272. @Log(title = "出发", businessType = BusinessType.UPDATE)
  273. @ApiOperation("出发")
  274. @RequestMapping(value = "wx/depart", method = RequestMethod.POST)
  275. public R depart(@RequestBody TOrder order) {
  276. try {
  277. orderService.depart(order);
  278. return R.ok();
  279. } catch (ServiceException s) {
  280. log.error(s.toString());
  281. return R.fail(s.getMessage());
  282. } catch (Exception e) {
  283. StackTraceElement stackTraceElement = e.getStackTrace()[0];
  284. log.error("系统出错,错误信息:" + e + " at " + stackTraceElement.getClassName() + "." + stackTraceElement.getMethodName() + ":" + stackTraceElement.getLineNumber());
  285. return R.fail("系统异常");
  286. }
  287. }
  288. /**
  289. * 到达订单位置(技师端操作的接口)
  290. *
  291. * @param order
  292. * @return R
  293. */
  294. @Log(title = "到达订单位置", businessType = BusinessType.UPDATE)
  295. @ApiOperation("到达订单位置")
  296. @RequestMapping(value = "wx/reach", method = RequestMethod.POST)
  297. public R reach(@RequestBody TOrder order) {
  298. try {
  299. log.info("到达订单位置,order对象的值:{}", JSON.toJSONString(order));
  300. LambdaQueryWrapper<TOrder> wrapper = new LambdaQueryWrapper<>();
  301. wrapper.eq(TOrder::getcId, order.getcId()).eq(TOrder::getnStatus, OrderStatusEnum.DEPART.getCode());
  302. order.setnStatus(OrderStatusEnum.ARRIVED.getCode());
  303. order.setReachTime(LocalDateTime.now());
  304. order.setArrivalLatitude(Optional.ofNullable(order.getArrivalLatitude()).orElse(BigDecimal.ZERO));
  305. order.setArrivalLongitude(Optional.ofNullable(order.getArrivalLongitude()).orElse(BigDecimal.ZERO));
  306. order.setArrivalPhoto(Optional.ofNullable(order.getArrivalPhoto()).orElse(StringUtils.EMPTY));
  307. return R.ok(orderService.update(order, wrapper));
  308. } catch (ServiceException s) {
  309. log.error(s.toString());
  310. return R.fail(s.getMessage());
  311. } catch (Exception e) {
  312. StackTraceElement stackTraceElement = e.getStackTrace()[0];
  313. log.error("系统出错,错误信息:" + e + " at " + stackTraceElement.getClassName() + "." + stackTraceElement.getMethodName() + ":" + stackTraceElement.getLineNumber());
  314. return R.fail("系统异常");
  315. }
  316. }
  317. /**
  318. * 开始服务(技师端操作的接口)
  319. *
  320. * @param order
  321. * @return R
  322. */
  323. @Log(title = "开始服务", businessType = BusinessType.UPDATE)
  324. @ApiOperation("开始服务")
  325. @RequestMapping(value = "wx/service", method = RequestMethod.POST)
  326. public R service(@RequestBody TOrder order) {
  327. try {
  328. LambdaQueryWrapper<TOrder> wrapper = new LambdaQueryWrapper<>();
  329. wrapper.eq(TOrder::getcId, order.getcId()).eq(TOrder::getnStatus, OrderStatusEnum.ARRIVED.getCode());
  330. // 设置订单状态:服务中
  331. order.setnStatus(OrderStatusEnum.SERVICE.getCode());
  332. order.setStartTime(LocalDateTime.now());
  333. return R.ok(orderService.update(order, wrapper));
  334. } catch (ServiceException s) {
  335. log.error(s.toString());
  336. return R.fail(s.getMessage());
  337. } catch (Exception e) {
  338. StackTraceElement stackTraceElement = e.getStackTrace()[0];
  339. log.error("系统出错,错误信息:" + e + " at " + stackTraceElement.getClassName() + "." + stackTraceElement.getMethodName() + ":" + stackTraceElement.getLineNumber());
  340. return R.fail("系统异常");
  341. }
  342. }
  343. /**
  344. * 确认订单(技师端的操作接口)
  345. *
  346. * @param order
  347. * @return R
  348. */
  349. //@Log(title = "确认服务完成", businessType = BusinessType.UPDATE)
  350. @ApiOperation("确认服务完成")
  351. @RequestMapping(value = "wx/confirm", method = RequestMethod.POST)
  352. public R confirm(@RequestBody TOrder order) {
  353. try {
  354. return R.ok(orderService.confirm(order));
  355. } catch (ServiceException s) {
  356. log.error(s.toString());
  357. return R.fail(s.getMessage());
  358. } catch (Exception e) {
  359. StackTraceElement stackTraceElement = e.getStackTrace()[0];
  360. log.error("系统出错,错误信息:" + e + " at " + stackTraceElement.getClassName() + "."
  361. + stackTraceElement.getMethodName() + ":" + stackTraceElement.getLineNumber());
  362. return R.fail("系统异常");
  363. }
  364. }
  365. /**
  366. * 获取订单信息(H5端 用户端)
  367. *
  368. * @param page
  369. * @param param
  370. * @return R
  371. */
  372. @Log(title = "微信获取订单信息", businessType = BusinessType.OTHER)
  373. @ApiOperation("获取订单信息")
  374. @RequestMapping(value = "wx/getOrder", method = RequestMethod.GET)
  375. public R getOrder(Page<TOrder> page, TOrder param) {
  376. try {
  377. Page<TOrder> all = orderService.getAll(page, param);
  378. return R.ok(all);
  379. } catch (Exception e) {
  380. e.printStackTrace();
  381. throw new RuntimeException(e);
  382. }
  383. }
  384. @Log(title = "技师端-获取待接单数量", businessType = BusinessType.OTHER)
  385. @ApiOperation("技师端-获取待接单数量")
  386. @RequestMapping(value = "wx/waitOrder", method = RequestMethod.GET)
  387. public R waitOrder(@RequestParam String cJsId) {
  388. List<TOrder> list = orderService.list(new LambdaQueryWrapper<TOrder>().
  389. eq(TOrder::getnStatus, OrderStatusEnum.WAIT_JD.getCode()).
  390. eq(TOrder::getcJsId, cJsId));
  391. return R.ok(list.size());
  392. }
  393. /**
  394. * PC获取订单信息(PC端)
  395. *
  396. * @param page
  397. * @param order
  398. * @return R
  399. */
  400. @Log(title = "PC获取订单信息", businessType = BusinessType.OTHER)
  401. @ApiOperation("PC获取订单信息")
  402. @RequestMapping(value = "pc/getOrder", method = RequestMethod.GET)
  403. public R getPcOrder(Page<TOrder> page, TOrder order) {
  404. try {
  405. LoginUser loginUser = this.getLoginUser();
  406. log.info("登录用户信息:{}", JSON.toJSONString(loginUser));
  407. order.setDeptId(loginUser.getDeptId().toString());
  408. Page<TOrder> all = orderService.getAll(page, order);
  409. return R.ok(all);
  410. } catch (Exception e) {
  411. e.printStackTrace();
  412. throw new RuntimeException(e);
  413. }
  414. }
  415. @Log(title = "微信获取订单信息", businessType = BusinessType.EXPORT)
  416. @ApiOperation("导出")
  417. @PostMapping(value = "wx/export")
  418. public void export(HttpServletResponse response, Page<TOrder> page, TOrder param) {
  419. Page<TOrder> all = orderService.getAll(page, param);
  420. ExcelUtil<TOrder> util = new ExcelUtil<>(TOrder.class);
  421. util.exportExcel(response, all.getRecords(), "订单");
  422. }
  423. /**
  424. * 分页查询订单数据
  425. *
  426. * @param page
  427. * @param order
  428. * @return R
  429. */
  430. @ApiOperation("分页查询订单数据")
  431. @RequestMapping(value = "/select", method = RequestMethod.GET)
  432. public R selectSp(Page<TOrder> page, TOrder order) {
  433. LambdaQueryWrapper<TOrder> tOrderLambdaQueryWrapper = new LambdaQueryWrapper<>();
  434. tOrderLambdaQueryWrapper.eq(StringUtils.isNotBlank(order.getcJsId()), TOrder::getcJsId, order.getcJsId()).
  435. eq(StringUtils.isNotBlank(order.getcOpenId()), TOrder::getcOpenId, order.getcOpenId()).
  436. eq(null != order.getnStatus(), TOrder::getnStatus, order.getnStatus());
  437. // 获取查询返回结果
  438. Page<TOrder> pageSelect = orderService.page(page, tOrderLambdaQueryWrapper);
  439. return R.ok(pageSelect);
  440. }
  441. /**
  442. * 更新订单数据
  443. *
  444. * @param borrow
  445. * @return R 操作结果
  446. */
  447. @ApiOperation("更新订单数据")
  448. @Log(title = "更新订单数据", businessType = BusinessType.OTHER)
  449. @RequestMapping(value = "/update", method = RequestMethod.POST)
  450. public R update(@RequestBody TOrder borrow) {
  451. try {
  452. return R.ok(orderService.updateAddressById(borrow));
  453. } catch (ServiceException s) {
  454. log.error(s.toString());
  455. return R.fail(s.getMessage());
  456. } catch (Exception e) {
  457. StackTraceElement stackTraceElement = e.getStackTrace()[0];
  458. log.error("系统出错,错误信息:" + e + " at " + stackTraceElement.getClassName() + "."
  459. + stackTraceElement.getMethodName() + ":" + stackTraceElement.getLineNumber());
  460. return R.fail("系统异常");
  461. }
  462. }
  463. /**
  464. * 根据订单ID删除订单数据
  465. *
  466. * @param borrow
  467. * @return R 操作结果
  468. */
  469. @ApiOperation("删除数据")
  470. @RequestMapping(value = "/del", method = RequestMethod.POST)
  471. public R del(@RequestBody TOrder borrow) {
  472. try {
  473. log.info("删除订单ID:{}", borrow.getcId());
  474. return R.ok(orderService.removeById(borrow));
  475. } catch (Exception e) {
  476. e.printStackTrace();
  477. throw new RuntimeException(e);
  478. }
  479. }
  480. /**
  481. * 根据订单ID查询订单详情
  482. *
  483. * @param borrow
  484. * @return R<TOrder> 订单详情
  485. */
  486. @ApiOperation("根据订单ID查询订单详情")
  487. @RequestMapping(value = "/getByid", method = RequestMethod.POST)
  488. public R<TOrder> getByid(@RequestBody TOrder borrow) {
  489. try {
  490. return R.ok(orderService.getById(borrow.getcId()));
  491. } catch (Exception e) {
  492. e.printStackTrace();
  493. throw new RuntimeException(e);
  494. }
  495. }
  496. /**
  497. * 获取订单状态
  498. *
  499. * @return R
  500. */
  501. @ApiOperation("订单状态")
  502. @RequestMapping(value = "/getStatus", method = RequestMethod.GET)
  503. public R getStatus() {
  504. List<Enumproject> statusEnum = OrderStatusEnumVo.getStatusEnum();
  505. return R.ok(statusEnum);
  506. }
  507. /**
  508. * 分页查询订单分配操作记录
  509. *
  510. * @param page 分页参数
  511. * @param orderNo 订单号
  512. * @return R 分页结果
  513. */
  514. @Log(title = "分页查询订单分配操作记录", businessType = BusinessType.OTHER)
  515. @ApiOperation("分页查询订单分配操作记录")
  516. @RequestMapping(value = "/allocationLogs/page", method = RequestMethod.GET)
  517. public R getAllocationLogsPage(Page<OrderAllocationLog> page, @RequestParam String orderNo) {
  518. try {
  519. // 构建查询条件
  520. LambdaQueryWrapper<OrderAllocationLog> wrapper = new LambdaQueryWrapper<>();
  521. // 订单号条件
  522. wrapper.eq(StringUtils.isNotBlank(orderNo), OrderAllocationLog::getOrderNo, orderNo);
  523. // 按创建时间倒序排列
  524. wrapper.orderByDesc(OrderAllocationLog::getCreateTime);
  525. // 分页查询
  526. Page<OrderAllocationLog> resultPage = allocationLogService.page(page, wrapper);
  527. // 转换为VO列表
  528. List<OrderAllocationResultVo> voList = resultPage.getRecords().stream()
  529. .map(log -> {
  530. // 转换为VO
  531. OrderAllocationResultVo vo = new OrderAllocationResultVo();
  532. BeanUtils.copyProperties(log, vo);
  533. //根据newTechnicianId查询新技师电话
  534. if (StringUtils.isNotBlank(vo.getNewTechnicianId())) {
  535. TJs technician = jsService.getById(log.getNewTechnicianId());
  536. if (technician != null) {
  537. vo.setNewTechnicianPhone(technician.getcPhone());
  538. }
  539. }
  540. return vo;
  541. }).collect(Collectors.toList());
  542. // 创建新的分页对象,包装转换后的VO列表
  543. Page<OrderAllocationResultVo> voPage = new Page<>(page.getCurrent(), page.getSize(), resultPage.getTotal());
  544. voPage.setRecords(voList);
  545. voPage.setPages(resultPage.getPages());
  546. return R.ok(voPage);
  547. } catch (Exception e) {
  548. log.error("分页查询订单分配记录失败 - 错误信息:{}", e.getMessage(), e);
  549. return R.fail("分页查询分配记录失败:" + e.getMessage());
  550. }
  551. }
  552. /**
  553. * 获取技师当天可预约时间
  554. *
  555. * @param technicianId 技师ID
  556. * @param date 查询日期(格式:yyyy-MM-dd),可选,不传则查询当天
  557. * @return R
  558. */
  559. //@Log(title = "获取技师当天可预约时间", businessType = BusinessType.OTHER)
  560. @ApiOperation("获取技师当天可预约时间")
  561. @RequestMapping(value = "wx/getTechnicianAvailability", method = RequestMethod.GET)
  562. public R<TechnicianAvailabilityVo> getTechnicianAvailability(@RequestParam String technicianId, @RequestParam(required = false) String date) {
  563. try {
  564. log.info("获取技师当天可预约时间,技师ID:{},查询日期:{}", technicianId, date);
  565. TechnicianAvailabilityVo availability = orderService.getTechnicianAvailability(technicianId, date);
  566. return R.ok(availability);
  567. } catch (ServiceException s) {
  568. log.error(s.toString());
  569. return R.fail(s.getMessage());
  570. } catch (Exception e) {
  571. e.printStackTrace();
  572. return R.fail("系统异常");
  573. }
  574. }
  575. @Log(title = "累计营业收入,平台佣金收入,累计商家收入", businessType = BusinessType.OTHER)
  576. @ApiOperation("累计营业收入,平台佣金收入,累计商家收入")
  577. @RequestMapping(value = "pc/totalData", method = RequestMethod.GET)
  578. public R totalData() {
  579. log.info("累计营业收入,平台佣金收入,累计商家收入,查询开始:{}", LocalDateTime.now());
  580. LoginUser loginUser = this.getLoginUser();
  581. log.info("登录用户信息:{}", JSON.toJSONString(loginUser));
  582. TOrder order = new TOrder();
  583. order.setDeptId(loginUser.getDeptId().toString());
  584. return R.ok(orderService.totalData(order));
  585. }
  586. @ApiOperation("商户收益,总额,待结算,已结算")
  587. @RequestMapping(value = "wx/myIncome", method = RequestMethod.GET)
  588. public R<Map<String, String>> myIncome(TWxUser user){
  589. log.info("商户收益,总额,待结算,已结算,查询开始:{}", LocalDateTime.now());
  590. return R.ok(orderService.myIncome(user));
  591. }
  592. @ApiOperation("商户收入明细")
  593. @RequestMapping(value = "wx/myIncomeDetail", method = RequestMethod.GET)
  594. public R<List<Map<String, Object>>>
  595. myIncomeDetail(TWxUser user, Integer wStatus){
  596. log.info("商户收入明细,查询开始:{}", LocalDateTime.now());
  597. return R.ok(orderService.myIncomeDetail(user, wStatus));
  598. }
  599. }