package com.sinata.rest.modular.member.shop;
|
|
import cn.hutool.core.util.StrUtil;
|
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
|
import com.baomidou.mybatisplus.core.conditions.update.UpdateWrapper;
|
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
|
import com.sinata.common.enums.EnumMemberGrade;
|
import com.sinata.common.enums.mall.EnumMallOrderState;
|
import com.sinata.rest.common.ApiUtils;
|
import com.sinata.rest.modular.auth.util.ThreadPoolUtil;
|
import com.sinata.rest.modular.mall.controller.vo.VoMallOrder;
|
import com.sinata.rest.modular.mall.controller.vo.VoMallOrderDetail;
|
import com.sinata.rest.modular.mall.dao.NoticeMapper;
|
import com.sinata.rest.modular.mall.model.MallOrder;
|
import com.sinata.rest.modular.mall.model.MallOrderDetail;
|
import com.sinata.rest.modular.mall.model.MallOrderDetailUse;
|
import com.sinata.rest.modular.mall.service.IMallCommissionSettlementService;
|
import com.sinata.rest.modular.mall.service.IMallOrderDetailService;
|
import com.sinata.rest.modular.mall.service.IMallOrderService;
|
import com.sinata.rest.modular.member.model.MemUser;
|
import com.sinata.rest.modular.member.model.MemUserRelation;
|
import com.sinata.rest.modular.member.service.IMallOrderDetailUseService;
|
import com.sinata.rest.modular.member.service.IMemMerchantService;
|
import com.sinata.rest.modular.member.service.IMemUserRelationService;
|
import com.sinata.rest.modular.member.service.IMemUserService;
|
import com.sinata.rest.modular.system.controller.AuthController;
|
import com.sinata.rest.modular.system.service.ISystemSetService;
|
import io.swagger.annotations.Api;
|
import io.swagger.annotations.ApiImplicitParam;
|
import io.swagger.annotations.ApiImplicitParams;
|
import io.swagger.annotations.ApiOperation;
|
import lombok.extern.slf4j.Slf4j;
|
import org.springframework.beans.BeanUtils;
|
import org.springframework.beans.factory.annotation.Autowired;
|
import org.springframework.web.bind.annotation.*;
|
|
import javax.annotation.Resource;
|
import java.util.*;
|
|
@Slf4j
|
@RestController
|
@RequestMapping("/shop")
|
@Api(tags = "核销小程序核销相关", description = "核销小程序核销相关")
|
public class ShopController extends AuthController {
|
|
@Autowired
|
ISystemSetService systemSetService;
|
|
@Autowired
|
IMallOrderService orderService;
|
|
@Autowired
|
IMallOrderDetailService orderDetailService;
|
|
@Autowired
|
IMallOrderDetailUseService mallOrderDetailUseService;
|
|
@Autowired
|
private IMemMerchantService merchantService;
|
|
@Autowired
|
private IMemUserService memUserService;
|
|
@Autowired
|
private IMemUserRelationService memUserRelationService;
|
|
@Autowired
|
private IMallCommissionSettlementService mallCommissionSettlementService;
|
|
@Resource
|
private NoticeMapper noticeMapper;
|
|
@GetMapping(value = "/list")
|
@ApiOperation(value = "获取订单列表", notes = "获取订单列表", response = VoMallOrder.class)
|
@ApiImplicitParams({
|
@ApiImplicitParam(name = "current", value = "当前页数", defaultValue = "1", dataType = "Int", paramType = "query"),
|
@ApiImplicitParam(name = "size", value = "每页条数", defaultValue = "10", dataType = "Int", paramType = "query"),
|
@ApiImplicitParam(name = "condition", value = "查询条件 ", defaultValue = "", dataType = "Integer", paramType = "query"),
|
})
|
public Object list(Integer current, Integer size, String condition) {
|
// 获取门店id
|
Integer merchantId = ThreadPoolUtil.getUserId();
|
// 分页
|
Page page = new Page<VoMallOrder>(current == null ? 1 : current, size == null ? 10 : size);
|
// 获取订单信息
|
List<VoMallOrder> list = merchantService.getMerchantOrderList(merchantId, condition, page,Boolean.FALSE);
|
return list;
|
}
|
|
@GetMapping(value = "/detail")
|
@ApiOperation(value = "获取订单详细", notes = "获取订单详细", response = VoMallOrder.class)
|
@ApiImplicitParams({
|
@ApiImplicitParam(name = "orderNo", value = "订单编号", defaultValue = "1", dataType = "String", paramType = "query", required = true),
|
})
|
public Object detail(String orderNo) {
|
VoMallOrder order = orderService.getOrderByOrderNo(orderNo);
|
if (order == null) {
|
return ApiUtils.returnNG(null, "订单信息不存在");
|
}
|
List<VoMallOrderDetail> detailList = orderService.getOrderDetailByOrderNoList(orderNo);
|
order.setDetailList(detailList);
|
return order;
|
}
|
|
// @PostMapping(value = "/userTest")
|
// @ApiOperation(value = "订单-核销分佣test")
|
// @ApiImplicitParams({
|
// @ApiImplicitParam(name = "orderNo", value = "订单编号", defaultValue = "1", dataType = "String", paramType = "query", required = true),
|
// })
|
// public Object userTest(String orderNo) {
|
// // 核销订单-分佣
|
// ApiUtils apiUtils = mallCommissionSettlementService.commissionSettlement(orderNo);
|
// return apiUtils;
|
// }
|
//
|
// @PostMapping(value = "/teamTest")
|
// @ApiOperation(value = "团队-核销分佣test")
|
// @ApiImplicitParams({
|
// @ApiImplicitParam(name = "userId", value = "用户ID", defaultValue = "1", dataType = "Integer", paramType = "query", required = true),
|
// })
|
// public Object teamTest(Integer userId) {
|
// // 核销订单-分佣
|
// MemUserRelation userRelation = memUserRelationService.getById(userId);
|
// String[] teamIds = userRelation.getRelationPath().split("/");
|
//
|
// System.out.println("团队关系:" + userRelation.getRelationPath());
|
// List list = new ArrayList();
|
// for (String id : teamIds) {
|
// if (StrUtil.isNotBlank(id)) {
|
// Map map = new HashMap();
|
// map.put("id", id);
|
//
|
// MemUser u = memUserService.getById(id);
|
// map.put("gid", u.getMemberGradeId());
|
// map.put("grade", EnumMemberGrade.getMarkByIndex(u.getMemberGradeId()));
|
// list.add(map);
|
//
|
// System.out.println(map);
|
// }
|
// }
|
// return null;
|
// }
|
|
@PostMapping(value = "/use")
|
@ApiOperation(value = "订单核销", notes = "获取订单详细", response = VoMallOrder.class)
|
public Object use(@RequestBody MallOrderDetailUse useDetail) {
|
VoMallOrder order = orderService.getOrderByOrderNo(useDetail.getOrderNo());
|
if (Objects.isNull(order)) {
|
throw new IllegalArgumentException("错误的订单信息");
|
}
|
if(!order.getMerchantId().equals(ThreadPoolUtil.getUserId())){
|
throw new IllegalArgumentException("该订单不是此门店的预约订单");
|
}
|
Long nowTime = System.currentTimeMillis();
|
if ((Objects.nonNull(order.getStartTime()) && Objects.nonNull(order.getEndTime())
|
&& (nowTime.compareTo(order.getEndTime().getTime()) > 0
|
|| nowTime.compareTo(order.getStartTime().getTime()) < 0))) {
|
throw new IllegalArgumentException("未到核销时间");
|
}
|
if (!order.getState().equals(EnumMallOrderState.WAIT_CHECK.index)
|
&& !order.getState().equals(EnumMallOrderState.USE.index)) {
|
throw new IllegalArgumentException("订单状态无法被核销");
|
}
|
LambdaQueryWrapper<MallOrderDetail> queryWrapper2 = new LambdaQueryWrapper<>();
|
queryWrapper2.eq(MallOrderDetail::getOrderDetailNo, useDetail.getOrderDetailNo());
|
MallOrderDetail orderDetail = orderDetailService.getOne(queryWrapper2);
|
Integer useNumber = orderDetail.getUseNum() + useDetail.getUseNum();
|
if (useNumber > orderDetail.getGoodsNum()) {
|
throw new IllegalArgumentException("核销信息错误请检查");
|
}
|
//添加核销记录
|
MallOrderDetailUse detailUse = new MallOrderDetailUse();
|
BeanUtils.copyProperties(orderDetail, detailUse);
|
detailUse.setId(null);
|
detailUse.setUseNum(useDetail.getUseNum());
|
detailUse.setUseTime(new Date());
|
mallOrderDetailUseService.save(detailUse);
|
//添加核销时间
|
MallOrderDetail updateOrder = new MallOrderDetail();
|
updateOrder.setUseNum(useNumber);
|
updateOrder.setUseTime(new Date());
|
UpdateWrapper<MallOrderDetail> updateWrapper = new UpdateWrapper<>();
|
updateWrapper.eq("order_detail_no", orderDetail.getOrderDetailNo());
|
orderDetailService.update(updateOrder, updateWrapper);
|
|
LambdaQueryWrapper<MallOrderDetail> orderWrapper = new LambdaQueryWrapper<>();
|
orderWrapper.eq(MallOrderDetail::getOrderNo, useDetail.getOrderNo());
|
orderWrapper.last("and use_num <> goods_num");
|
List<MallOrderDetail> detailList = orderDetailService.list(orderWrapper);
|
if (detailList.size() == 0) {
|
//修改订单状态
|
MallOrder mallOrder = new MallOrder();
|
mallOrder.setState(EnumMallOrderState.SUCCESS.index);
|
mallOrder.setOrderNo(orderDetail.getOrderNo());
|
orderService.updateById(mallOrder);
|
|
// 核销订单-分佣
|
mallCommissionSettlementService.commissionSettlement(mallOrder.getOrderNo());
|
} else {
|
//修改订单状态
|
MallOrder mallOrder = new MallOrder();
|
mallOrder.setState(EnumMallOrderState.USE.index);
|
mallOrder.setOrderNo(orderDetail.getOrderNo());
|
orderService.updateById(mallOrder);
|
}
|
|
//插入预约通知
|
if(Objects.nonNull(order.getMerchantId())){
|
noticeMapper.addMerchantNotice(order.getMerchantId(),2,"您有新的核销订单");
|
}
|
return Boolean.TRUE;
|
}
|
|
@PostMapping(value = "/useList")
|
@ApiOperation(value = "获取门店核销列表", notes = "获取订单列表", response = VoMallOrder.class)
|
@ApiImplicitParams({
|
@ApiImplicitParam(name = "current", value = "当前页数", defaultValue = "1", dataType = "Int", paramType = "query"),
|
@ApiImplicitParam(name = "size", value = "每页条数", defaultValue = "10", dataType = "Int", paramType = "query"),
|
@ApiImplicitParam(name = "condition", value = "查询条件 ", defaultValue = "", dataType = "Integer", paramType = "query"),
|
})
|
public Object useList(Integer current, Integer size, String condition) {
|
// 获取门店id
|
Integer merchantId = ThreadPoolUtil.getUserId();
|
// 分页
|
Page page = new Page<VoMallOrder>(current == null ? 1 : current, size == null ? 10 : size);
|
// 获取订单信息
|
List<VoMallOrder> list = merchantService.getMerchantOrderList(merchantId, condition, page,Boolean.TRUE);
|
return list;
|
}
|
|
}
|