TOrderController.java 25 KB

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