| | |
| | | package com.ruoyi.admin.controller; |
| | | |
| | | |
| | | import com.baomidou.mybatisplus.core.metadata.IPage; |
| | | import com.baomidou.mybatisplus.extension.conditions.query.LambdaQueryChainWrapper; |
| | | import com.baomidou.mybatisplus.extension.plugins.pagination.Page; |
| | | import com.ruoyi.admin.entity.ChangeDispatch; |
| | | import com.ruoyi.admin.entity.Franchisee; |
| | | import com.ruoyi.admin.entity.MasterWorker; |
| | | import com.ruoyi.admin.entity.Order; |
| | | import com.ruoyi.admin.service.ChangeDispatchService; |
| | | import com.ruoyi.admin.netty.NettyChannelMap; |
| | | import com.ruoyi.admin.netty.NettyWebSocketController; |
| | | import com.ruoyi.admin.service.FranchiseeService; |
| | | import com.ruoyi.admin.service.MasterWorkerService; |
| | | import com.ruoyi.admin.service.OrderService; |
| | | import com.ruoyi.common.core.constant.Constants; |
| | | import com.ruoyi.common.core.domain.R; |
| | | import com.ruoyi.common.core.exception.GlobalException; |
| | | import com.ruoyi.common.core.utils.StringUtils; |
| | | import com.ruoyi.common.core.utils.bean.BeanUtils; |
| | | import com.ruoyi.common.security.annotation.RequiresPermissions; |
| | | import com.ruoyi.common.security.service.TokenService; |
| | | import com.ruoyi.order.api.entity.ChangeDispatch; |
| | | import com.ruoyi.order.api.entity.Order; |
| | | import com.ruoyi.order.api.feignClient.ExchangeDispatchClient; |
| | | import com.ruoyi.order.api.feignClient.OrderClient; |
| | | import com.ruoyi.order.api.request.ChangeDispatchRequest; |
| | | import com.ruoyi.system.api.model.LoginUser; |
| | | import io.netty.channel.ChannelHandlerContext; |
| | | import io.swagger.annotations.Api; |
| | | import io.swagger.annotations.ApiImplicitParam; |
| | | import io.swagger.annotations.ApiImplicitParams; |
| | |
| | | import org.springframework.web.bind.annotation.*; |
| | | |
| | | import javax.annotation.Resource; |
| | | import java.util.Arrays; |
| | | import java.util.ArrayList; |
| | | import java.util.Date; |
| | | import java.util.List; |
| | | import java.util.stream.Collectors; |
| | | |
| | | /** |
| | | * <p> |
| | |
| | | public class ChangeDispatchController { |
| | | |
| | | @Resource |
| | | private ChangeDispatchService changeDispatchService; |
| | | @Resource |
| | | private OrderService orderService; |
| | | private ExchangeDispatchClient dispatchClient; |
| | | @Resource |
| | | private MasterWorkerService masterWorkerService; |
| | | |
| | | @Resource |
| | | private TokenService tokenService; |
| | | @Resource |
| | | private FranchiseeService franchiseeService; |
| | | /** |
| | | * 订单改派分页列表 |
| | | * |
| | |
| | | @GetMapping(value = "/page") |
| | | @ApiImplicitParams({ |
| | | @ApiImplicitParam(value = "师傅名称", name = "workerName", dataType = "String"), |
| | | @ApiImplicitParam(value = "预约人名称", name = "reservationName", dataType = "String"), |
| | | @ApiImplicitParam(value = "订单编号", name = "orderNumber", dataType = "String"), |
| | | @ApiImplicitParam(value = "下单用户名称", name = "userName", dataType = "String"), |
| | | @ApiImplicitParam(value = "下单用户手机号", name = "reservationPhone", dataType = "String"), |
| | | @ApiImplicitParam(value = "地址", name = "reservationAddress", dataType = "String"), |
| | | @ApiImplicitParam(value = "页码", name = "pageNum", dataType = "Integer", required = true), |
| | | @ApiImplicitParam(value = "每页条数", name = "pageSize", dataType = "Integer", required = true) |
| | | }) |
| | | public R<IPage<ChangeDispatch>> queryPageList(String workerName, String orderNumber, String userName, |
| | | @RequestParam(name = "pageNum", defaultValue = "1") Integer pageNum, |
| | | @RequestParam(name = "pageSize", defaultValue = "10") Integer pageSize) { |
| | | LambdaQueryChainWrapper<ChangeDispatch> wrapper = changeDispatchService.lambdaQuery(); |
| | | wrapper = StringUtils.isNotBlank(workerName) ? wrapper.like(ChangeDispatch::getWorkerName, workerName) : wrapper; |
| | | wrapper = StringUtils.isNotBlank(orderNumber) ? wrapper.like(ChangeDispatch::getOrderNumber, orderNumber) : wrapper; |
| | | wrapper = StringUtils.isNotBlank(userName) ? wrapper.like(ChangeDispatch::getUserName, userName) : wrapper; |
| | | return R.ok(wrapper.eq(ChangeDispatch::getIsDelete, 0) |
| | | .orderByDesc(ChangeDispatch::getCreateTime).page(Page.of(pageNum, pageSize))); |
| | | public R<Page<ChangeDispatch>> queryPageList(String workerName, String orderNumber, String userName,String reservationAddress, |
| | | String reservationName,String reservationPhone, |
| | | @RequestParam(name = "pageNum", defaultValue = "1") Integer pageNum, |
| | | @RequestParam(name = "pageSize", defaultValue = "10") Integer pageSize) { |
| | | LoginUser loginUser = tokenService.getLoginUser(); |
| | | List<String> cityList = new ArrayList<>(); |
| | | if (loginUser.getIsFranchisee()) { |
| | | cityList = loginUser.getCityList(); |
| | | } |
| | | ChangeDispatchRequest changeDispatchRequest = new ChangeDispatchRequest(); |
| | | changeDispatchRequest.setWorkerName(workerName); |
| | | changeDispatchRequest.setOrderNumber(orderNumber); |
| | | changeDispatchRequest.setUserName(userName); |
| | | changeDispatchRequest.setReservationAddress(reservationAddress); |
| | | changeDispatchRequest.setPageNum(pageNum); |
| | | changeDispatchRequest.setPageSize(pageSize); |
| | | changeDispatchRequest.setCityList(cityList); |
| | | changeDispatchRequest.setReservationName(reservationName); |
| | | changeDispatchRequest.setReservationPhone(reservationPhone); |
| | | Integer franchiseeId = loginUser.getSysUser().getFranchiseeId(); |
| | | if (franchiseeId!=null) { |
| | | Franchisee byId = franchiseeService.getById(franchiseeId); |
| | | String[] siteIds = byId.getSiteIds().split(","); |
| | | if (loginUser.getIsFranchisee() && siteIds.length == 0) { |
| | | return R.ok(new Page<ChangeDispatch>()); |
| | | } |
| | | changeDispatchRequest.setSiteIds(siteIds); |
| | | } |
| | | return dispatchClient.queryPageList(changeDispatchRequest); |
| | | } |
| | | |
| | | /** |
| | |
| | | @ApiOperation(value = "新增订单改派", tags = {"后台-系统设置-订单改派管理"}) |
| | | @PostMapping(value = "/save") |
| | | public R<Boolean> save(@RequestBody ChangeDispatch changeDispatch) { |
| | | return R.ok(changeDispatchService.save(changeDispatch)); |
| | | return R.ok(dispatchClient.save(changeDispatch).getData()); |
| | | } |
| | | |
| | | /** |
| | |
| | | * |
| | | * @param id 订单改派id |
| | | */ |
| | | @RequiresPermissions("reassignment_apply") |
| | | @RequiresPermissions("reassignment_detail") |
| | | @ApiOperation(value = "订单改派详情", tags = {"后台-系统设置-订单改派管理"}) |
| | | @GetMapping(value = "/detail") |
| | | @ApiImplicitParams({ |
| | | @ApiImplicitParam(value = "订单改派id", name = "id", dataType = "Integer", required = true) |
| | | }) |
| | | public R<ChangeDispatch> detail(@RequestParam Integer id) { |
| | | return R.ok(changeDispatchService.getById(id)); |
| | | } |
| | | |
| | | /** |
| | | * 订单改派详情 远程调用 |
| | | * |
| | | * @param id 订单id |
| | | */ |
| | | @GetMapping(value = "/one") |
| | | @ApiImplicitParams({ |
| | | @ApiImplicitParam(value = "订单改派id", name = "id", dataType = "Integer", required = true) |
| | | }) |
| | | public R<ChangeDispatch> one(@RequestParam("id") Integer id) { |
| | | ChangeDispatch changeDispatch = changeDispatchService.lambdaQuery() |
| | | .eq(ChangeDispatch::getOrderId, id) |
| | | .eq(ChangeDispatch::getState, Constants.ZERO) |
| | | .one(); |
| | | return R.ok(changeDispatch); |
| | | public R<ChangeDispatch> detail(@RequestParam String id) { |
| | | return dispatchClient.detail(id); |
| | | } |
| | | |
| | | /** |
| | |
| | | * |
| | | * @param ids 订单改派多条id拼接 |
| | | */ |
| | | @RequiresPermissions("reassignment_apply") |
| | | @RequiresPermissions("reassignment_delete") |
| | | @ApiOperation(value = "批量删除订单改派", tags = {"后台-系统设置-订单改派管理"}) |
| | | @GetMapping(value = "/batchDelete") |
| | | @ApiImplicitParams({ |
| | | @ApiImplicitParam(value = "多条订单改派id ',' 拼接", name = "ids", dataType = "String", required = true) |
| | | }) |
| | | public R<String> batchDelete(@RequestParam String ids) { |
| | | List<String> idList = Arrays.stream(ids.split(",")).collect(Collectors.toList()); |
| | | List<ChangeDispatch> list = changeDispatchService.lambdaQuery().in(ChangeDispatch::getId, idList).list(); |
| | | list.forEach(data -> data.setIsDelete(1)); |
| | | return changeDispatchService.updateBatchById(list) ? R.ok() : R.fail(); |
| | | return dispatchClient.batchDelete(ids); |
| | | } |
| | | |
| | | /** |
| | | * 拒绝订单改派申请 |
| | | * |
| | | * @param id 改派申请记录id |
| | | */ |
| | | @RequiresPermissions("reassignment_reject") |
| | | @ApiOperation(value = "拒绝订单改派申请", tags = {"后台-系统设置-订单改派管理"}) |
| | | @GetMapping(value = "/refuse") |
| | | @ApiImplicitParams({ |
| | | @ApiImplicitParam(value = "改派申请记录id", name = "id", dataType = "String", required = true) |
| | | }) |
| | | public R<Boolean> refuse(@RequestParam("id") String id) { |
| | | return dispatchClient.refuseChangeDispatch(id); |
| | | } |
| | | @Resource |
| | | private OrderClient orderClient; |
| | | /** |
| | | * 订单改派师傅 |
| | | * |
| | | * @param changeId 改派订单id |
| | | * @param workerId 师傅id |
| | | */ |
| | | @RequiresPermissions("reassignment_apply") |
| | | @RequiresPermissions("reassignment_reassignment") |
| | | @ApiOperation(value = "订单改派师傅", tags = {"后台-系统设置-订单改派管理"}) |
| | | @GetMapping(value = "/changeWorker") |
| | | @ApiImplicitParams({ |
| | | @ApiImplicitParam(value = "改派订单id", name = "changeId", dataType = "Integer", required = true), |
| | | @ApiImplicitParam(value = "师傅id", name = "workerId", dataType = "Integer", required = true) |
| | | @ApiImplicitParam(value = "改派订单id", name = "changeId", dataType = "String", required = true), |
| | | @ApiImplicitParam(value = "订单id", name = "orderId", dataType = "String", required = true), |
| | | @ApiImplicitParam(value = "师傅id", name = "workerId", dataType = "Integer", required = true), |
| | | @ApiImplicitParam(value = "时间", name = "arriveTime", dataType = "String", required = true), |
| | | }) |
| | | public R<String> changeWorker(@RequestParam Integer changeId, @RequestParam Integer workerId) { |
| | | ChangeDispatch changeDispatch = changeDispatchService.lambdaQuery().eq(ChangeDispatch::getId, changeId) |
| | | .eq(ChangeDispatch::getIsDelete, 0).one(); |
| | | if (null == changeDispatch || Constants.ONE.equals(changeDispatch.getState())) { |
| | | throw new GlobalException("改派申请不存在或已改派!"); |
| | | } |
| | | Order order = orderService.lambdaQuery().eq(Order::getId, changeDispatch.getOrderId()) |
| | | .eq(Order::getIsDelete, 0).one(); |
| | | if (null == order) { |
| | | throw new GlobalException("订单不存在!"); |
| | | } |
| | | // 判断订单状态 |
| | | if (!Constants.ZERO.equals(order.getState())) { |
| | | throw new GlobalException("订单已有师傅正在处理!"); |
| | | } |
| | | MasterWorker masterWorker = masterWorkerService.lambdaQuery().eq(MasterWorker::getId, workerId) |
| | | .eq(MasterWorker::getIsDelete, 0).one(); |
| | | // 师傅信息 |
| | | public R<String> changeWorker(@RequestParam String changeId, |
| | | @RequestParam String orderId, |
| | | @RequestParam Integer workerId, |
| | | @RequestParam String arriveTime) { |
| | | MasterWorker masterWorker = masterWorkerService.lambdaQuery() |
| | | .eq(MasterWorker::getId, workerId).eq(MasterWorker::getIsDelete, 0).one(); |
| | | if (null == masterWorker) { |
| | | throw new GlobalException("服务人员信息异常!"); |
| | | return R.fail("师傅信息异常!"); |
| | | } |
| | | // 原订单状态改为 5:已改派 |
| | | order.setState(Constants.FIVE); |
| | | boolean orderUpdate = orderService.updateById(order); |
| | | // 生成新订单信息 |
| | | Order newOrder = new Order(); |
| | | BeanUtils.copyProperties(order, newOrder); |
| | | newOrder.setId(null); |
| | | newOrder.setServerId(workerId); |
| | | newOrder.setServerName(masterWorker.getRealName()); |
| | | newOrder.setServerPhone(masterWorker.getPhone()); |
| | | newOrder.setState(Constants.ONE); |
| | | // 构建新订单 |
| | | boolean save = orderService.save(newOrder); |
| | | // 改派信息 |
| | | boolean update = changeDispatchService.lambdaUpdate().set(ChangeDispatch::getState, 1) |
| | | .eq(ChangeDispatch::getId, changeId).eq(ChangeDispatch::getIsDelete, 0).update(); |
| | | return orderUpdate && save && update ? R.ok() : R.fail(); |
| | | Boolean data = dispatchClient.changeWorker(changeId, workerId, masterWorker.getRealName(), |
| | | masterWorker.getPhone()).getData(); |
| | | |
| | | |
| | | |
| | | if (null != data && data) { |
| | | ChannelHandlerContext context = NettyChannelMap.getData(String.valueOf(workerId)); |
| | | if (null != context) { |
| | | NettyWebSocketController.sendMsgToClient(context, "您有一条新的订单,请注意查收!"); |
| | | } |
| | | |
| | | // dispatchClient.changeReason(orderId, reason); |
| | | orderClient.updateArrivalTime(orderId,arriveTime); |
| | | return R.ok(); |
| | | // try { |
| | | // WebSocketServer.sendInfo("您有一条新的订单,请注意查收!", String.valueOf(workerId)); |
| | | // } catch (IOException e) { |
| | | // return R.fail("师傅不在线!"); |
| | | // } |
| | | } |
| | | return R.fail("订单推送异常!"); |
| | | } |
| | | |
| | | } |