package com.cyksj.web.controller.manage; import com.alibaba.excel.support.ExcelTypeEnum; import com.baomidou.mybatisplus.core.toolkit.Wrappers; import com.cyksj.common.annotation.NoSubmit; import com.cyksj.common.exception.BusinessRuntimeException; import com.cyksj.dto.Result; import com.cyksj.enums.GatewayResponse; import com.cyksj.mapper.manage.coupon.CouponMapper; import com.cyksj.mapper.RealGoodsInterestUserMapper; import com.cyksj.mapper.manage.RealGoodsOrderHandleMapper; import com.cyksj.model.entity.OrderDon; import com.cyksj.model.entity.OrderDonWaybill; import com.cyksj.model.entity.RealGoodsInterestUser; import com.cyksj.model.entity.RealGoodsOrderHandle; import com.cyksj.model.excel.ExcelRealGoodsUserInterestData; import com.cyksj.model.manage.request.ReqSetLogisticsPost; import com.cyksj.model.manage.views.OrderDonView; import com.cyksj.model.request.RealGoodsServiceReq; import com.cyksj.model.request.UserRealGoodsInterestReq; import com.cyksj.model.views.OrderDonTransportView; import com.cyksj.model.views.RealGoodsInterestUserView; import com.cyksj.service.mange.CmsOrderDonService; import com.cyksj.service.user.UserService; import com.ejlchina.searcher.BeanSearcher; import com.ejlchina.searcher.SearchResult; import com.ejlchina.searcher.param.Operator; import com.ejlchina.searcher.util.MapBuilder; import com.ejlchina.searcher.util.MapUtils; import lombok.RequiredArgsConstructor; import org.apache.commons.lang3.StringUtils; import org.springframework.validation.annotation.Validated; import org.springframework.web.bind.annotation.*; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; import java.math.BigDecimal; import java.util.List; import java.util.Optional; /** * @author chan * @date 2021/10/12 下午11:05 */ @RequestMapping("/manage/order") @RestController @RequiredArgsConstructor public class CmsOrderController { private final HttpServletResponse response; private final HttpServletRequest request; private final CmsOrderDonService cmsOrderDonService; private final UserService userService; private final BeanSearcher beanSearcher; private final RealGoodsInterestUserMapper realGoodsInterestUserMapper; private final RealGoodsOrderHandleMapper realGoodsOrderHandleMapper; private final CouponMapper couponMapper; @GetMapping("/get") public Result> get() { SearchResult search = beanSearcher.search(OrderDonView.class, MapUtils.flatBuilder(request.getParameterMap()).build()); search.getDataList().forEach(data -> { if (data.getGoodsDonType() == 2) { RealGoodsOrderHandle realGoodsOrderHandle = realGoodsOrderHandleMapper.selectOne(Wrappers.lambdaQuery(RealGoodsOrderHandle.class).eq(RealGoodsOrderHandle::getOrderId, data.getId()).last("limit 1")); if (realGoodsOrderHandle != null) { data.setBeforeServiceName(realGoodsOrderHandle.getBeforeServiceName()); data.setAfterServiceName(realGoodsOrderHandle.getAfterServiceName()); } } if (data.getCouponUserId() != 0) { data.setCouponName(couponMapper.getCouponNameByCouponUserId(data.getCouponUserId())); data.setCouponMoney(data.getCouponMoney() == null ? BigDecimal.ZERO : data.getCouponMoney()); } }); return GatewayResponse.SUCCESS.newBuilder().toResult(search); } @PutMapping("/update/status") public Result upStatus(@RequestBody OrderDon orderDon){ cmsOrderDonService.update(Wrappers.lambdaUpdate(OrderDon.class).eq(OrderDon::getId,orderDon.getId()).set(OrderDon::getStatus,orderDon.getStatus())); return GatewayResponse.SUCCESS.newBuilder().toResult(); } @GetMapping("/get/transport/{orderId}") public Result getTransport(@PathVariable Long orderId){ // OrderDonTransport transport = cmsOrderDonService.getTransport(orderId); OrderDonTransportView transportView = beanSearcher.searchFirst(OrderDonTransportView.class, MapUtils.builder().field(OrderDonTransportView::getOrderId, orderId).build()); return GatewayResponse.SUCCESS.newBuilder().toResult(transportView); } @PostMapping("/post/setWaybill") public Result setWaybill(@RequestBody ReqSetLogisticsPost reqSetLogisticsPost){ OrderDonWaybill orderDonWaybill = cmsOrderDonService.setWaybill(reqSetLogisticsPost); return GatewayResponse.SUCCESS.newBuilder().toResult(orderDonWaybill); } /** * 用户购买实物商品意愿列表 */ @GetMapping("/get/realGooods/interest/users") public Result> getInterestUserList(RealGoodsInterestUser.Status interestStatus,HttpServletRequest request) { MapBuilder builder = MapUtils.flatBuilder(request.getParameterMap()); if (interestStatus == null) { builder.field(RealGoodsInterestUserView::getInterestStatus, "hasPayment").op(Operator.NotEqual); } SearchResult search = beanSearcher.search(RealGoodsInterestUserView.class, builder.build()); search.getDataList().forEach(data->{ Long goodsId = data.getGoodsId(); OrderDon order = cmsOrderDonService.getOne(Wrappers.lambdaQuery(OrderDon.class).eq(OrderDon::getUserId, data.getUserId()).eq(OrderDon::getGoodsId, goodsId).ne(OrderDon::getId, data.getId()).gt(OrderDon::getMoney, data.getMoney()).eq(OrderDon::getStatus, "close").last("limit 1")); if (order != null) { data.setOrderId(order.getId()); data.setSkuId(order.getSkuId()); data.setMoney(order.getMoney()); data.setOrderCreatedTime(order.getCreatedTime()); realGoodsInterestUserMapper.updateData(data.getId(), data.getSkuId(), data.getOrderCreatedTime(), data.getOrderId()); } }); return GatewayResponse.SUCCESS.newBuilder().toResult(search); } /** * 修改购买意愿记录 */ @PutMapping("/put/interest") public Result updateInterest(@RequestBody @Validated UserRealGoodsInterestReq req) { RealGoodsInterestUser realGoodsInterestUser = realGoodsInterestUserMapper.selectById(req.getId()); if (realGoodsInterestUser != null) { if (req.getStatus() != null) { realGoodsInterestUser.setInterestStatus(req.getStatus()); } if (req.getRemark() != null) { realGoodsInterestUser.setRemark(req.getRemark()); } realGoodsInterestUserMapper.updateById(realGoodsInterestUser); } return GatewayResponse.SUCCESS.newBuilder().toResult("修改成功"); } /** * 导出用户意愿列表 */ @GetMapping("/export/interest") public void exportInterest(RealGoodsInterestUser.Status interestStatus, HttpServletRequest request, HttpServletResponse response) { MapBuilder builder = MapUtils.flatBuilder(request.getParameterMap()); if (interestStatus == null) { builder.field(RealGoodsInterestUserView::getInterestStatus, "hasPayment").op(Operator.NotEqual); } List excelRealGoodsUserInterestData = beanSearcher.searchAll(ExcelRealGoodsUserInterestData.class, builder.build()); excelRealGoodsUserInterestData.forEach(data -> { Long goodsId = data.getGoodsId(); OrderDon order = cmsOrderDonService.getOne(Wrappers.lambdaQuery(OrderDon.class).eq(OrderDon::getUserId, data.getUserId()).eq(OrderDon::getGoodsId, goodsId).ne(OrderDon::getId, data.getId()).gt(OrderDon::getMoney, data.getMoney()).eq(OrderDon::getStatus, "close").last("limit 1")); if (order != null) { data.setOrderId(order.getId()); data.setSkuId(order.getSkuId()); data.setMoney(order.getMoney()); data.setOrderCreatedTime(order.getCreatedTime()); realGoodsInterestUserMapper.updateData(data.getId(), data.getSkuId(), data.getOrderCreatedTime(), data.getOrderId()); } }); EasyExcelUtils.createExcelStreamMutilByEasyExcel(response, ExcelRealGoodsUserInterestData.class, excelRealGoodsUserInterestData, "用户意愿列表", "用户意愿列表", ExcelTypeEnum.XLSX, null); } /** * 实物订单配置售前售后客户 */ @PostMapping("/put/realGoods/service") @NoSubmit public Result putRealGoodsService(@RequestBody @Validated RealGoodsServiceReq request) { OrderDon orderDon = cmsOrderDonService.getById(request.getOrderId()); if (orderDon == null || orderDon.getRelationId() != 0) { throw BusinessRuntimeException.getInstance("该订单不是实物订单"); } RealGoodsOrderHandle realGoodsOrderHandle = Optional.ofNullable(realGoodsOrderHandleMapper.selectOne(Wrappers.lambdaQuery(RealGoodsOrderHandle.class).eq(RealGoodsOrderHandle::getOrderId, request.getOrderId()).last("limit 1"))).orElse(new RealGoodsOrderHandle()); if (StringUtils.isNotBlank(request.getBeforeServiceName())) { realGoodsOrderHandle.setBeforeServiceName(request.getBeforeServiceName()); } if (StringUtils.isNotBlank(request.getAfterServiceName())) { realGoodsOrderHandle.setAfterServiceName(request.getAfterServiceName()); } if (realGoodsOrderHandle.getId() == null) { realGoodsOrderHandle.setOrderId(request.getOrderId()); realGoodsOrderHandleMapper.insert(realGoodsOrderHandle); }else { if (realGoodsOrderHandle.getBeforeOpNum() > 2) { throw BusinessRuntimeException.getInstance("售前客服已两次修改"); } if (realGoodsOrderHandle.getAfterOpNum() > 2) { throw BusinessRuntimeException.getInstance("售后客服已两次修改"); } realGoodsOrderHandle.setBeforeOpNum(realGoodsOrderHandle.getBeforeOpNum() + 1); realGoodsOrderHandle.setAfterOpNum(realGoodsOrderHandle.getAfterOpNum() + 1); realGoodsOrderHandleMapper.updateById(realGoodsOrderHandle); } return GatewayResponse.SUCCESS.newBuilder().toResult("操作成功"); } }