package com.matrix.system.padApi.action; import cn.hutool.core.util.ObjectUtil; import cn.hutool.core.util.StrUtil; import com.matrix.component.asyncmessage.AsyncMessageManager; import com.matrix.core.constance.MatrixConstance; import com.matrix.core.exception.GlobleException; import com.matrix.core.pojo.AjaxResult; import com.matrix.core.pojo.PaginationVO; import com.matrix.core.tools.StringUtils; import com.matrix.core.tools.WebUtil; import com.matrix.system.app.vo.OrderDetailVo; import com.matrix.system.common.bean.BusParameterSettings; import com.matrix.system.common.bean.CustomerDataDictionary; import com.matrix.system.common.bean.SysUsers; import com.matrix.system.common.constance.AppConstance; import com.matrix.system.common.dao.BusParameterSettingsDao; import com.matrix.system.common.dao.CustomerDataDictionaryDao; import com.matrix.system.common.service.SysUsersService; import com.matrix.system.common.tools.DataAuthUtil; import com.matrix.system.constance.Dictionary; import com.matrix.system.enums.BooleanEnum; import com.matrix.system.hive.action.BaseController; import com.matrix.system.hive.action.util.QueryUtil; import com.matrix.system.hive.bean.*; import com.matrix.system.hive.dao.SysOrderItemDao; import com.matrix.system.hive.dao.SysShopInfoDao; import com.matrix.system.hive.service.MoneyCardUseService; import com.matrix.system.hive.service.ShoppingGoodsService; import com.matrix.system.hive.service.SysOrderService; import com.matrix.system.hive.service.SysShopInfoService; import com.matrix.system.padApi.dto.PadOrderListDto; import com.matrix.system.padApi.dto.PadShowListDto; import com.matrix.system.padApi.vo.PadOrderDetailVo; import com.matrix.system.shopXcx.mqTask.AsyncMessageRouting; import com.matrix.system.wechart.templateMsg.UniformMsgParam; import io.swagger.annotations.Api; import io.swagger.annotations.ApiOperation; import io.swagger.annotations.ApiResponse; import io.swagger.annotations.ApiResponses; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.transaction.annotation.Transactional; import org.springframework.validation.annotation.Validated; import org.springframework.web.bind.annotation.*; import javax.annotation.Resource; import java.math.BigDecimal; import java.util.List; @CrossOrigin(origins = "*") @Api(value = "PadOrderAction", tags = "pad端订单请求") @RestController @RequestMapping(value = "/api/pad/order") public class PadOrderAction extends BaseController { @Resource private SysOrderService sysOrderService; @Resource private SysOrderService orderService; @Autowired private BusParameterSettingsDao busParameterSettingsDao; @Autowired private SysOrderItemDao orderItemDao; @Autowired private SysUsersService sysUsersService; @Autowired private CustomerDataDictionaryDao dataDictionaryDao; @Resource private SysShopInfoService currentService; @Resource private MoneyCardUseService cardUseService; @Autowired private AsyncMessageManager asyncMessageManager; @Resource private SysShopInfoDao shopInfoDao; @Resource private ShoppingGoodsService shoppingGoodsService; @ApiOperation(value = "获取订单列表", notes = "获取订单列表") @ApiResponses({ @ApiResponse(code = 200, message = "ok", response = PadOrderDetailVo.class) }) @PostMapping(value = "/findOrderList") public AjaxResult findOrderList(@RequestBody @Validated PadOrderListDto orderListDto) { SysUsers user = WebUtil.getSessionAttribute(MatrixConstance.LOGIN_KEY); int offset = (orderListDto.getPageNum() - 1) * orderListDto.getPageSize(); int limit = orderListDto.getPageSize(); PaginationVO pageVo = new PaginationVO(); pageVo.setOffset(offset); pageVo.setLimit(limit); if (!DataAuthUtil.hasAllShopAuth()) { orderListDto.setShopId(user.getShopId()); } QueryUtil.setQueryLimitCom(orderListDto); return AjaxResult.buildSuccessInstance(sysOrderService.findPadApiOrderListInPage(orderListDto, pageVo), sysOrderService.findPadApiOrderListTotal(orderListDto)); } @ApiOperation(value = "获取订单详情", notes = "获取订单详情") @ApiResponses({ @ApiResponse(code = 200, message = "ok", response = OrderDetailVo.class) }) @GetMapping(value = "/findOrderDetail/{orderId}") public AjaxResult findOrderDetail(@PathVariable("orderId") Long orderId) { OrderDetailVo orderDetail = sysOrderService.findApiOrderDetailByOrderId(orderId); AjaxResult ajaxResult = AjaxResult.buildSuccessInstance("获取成功"); ajaxResult.putInMap("orderDetail", orderDetail); return ajaxResult; } @ApiOperation(value = "取消订单", notes = "取消订单") @GetMapping(value = "/cancelOrder/{id}") @Transactional(rollbackFor = Exception.class) public AjaxResult cancelOrder(@PathVariable Long id) { SysOrder order = orderService.findById(id); if (ObjectUtil.isEmpty(order)) { return new AjaxResult(AjaxResult.STATUS_FAIL, "订单不存在!"); } BusParameterSettings shopManageAbleCancelDfkOrder = busParameterSettingsDao.selectCompanyParamByCode(AppConstance.SHOP_MANAGE_ABLE_CANCEL_DFK_ORDER, order.getCompanyId()); if (StringUtils.isNotBlank(shopManageAbleCancelDfkOrder.getParamValue()) && BooleanEnum.TRUE.getValue() == shopManageAbleCancelDfkOrder.getIntParamValue()) { if (!Dictionary.ORDER_STATU_DFK.equals(order.getStatu())) { return new AjaxResult(AjaxResult.STATUS_FAIL, "您只能取消待付款订单"); } } orderService.cancelOrder(id); return AjaxResult.buildSuccessInstance("取消成功"); } @ApiOperation(value = "收款", notes = "收款") @PostMapping(value = "/sk") public AjaxResult sk(@RequestBody SysOrder order) throws GlobleException { orderService.payOrder(order); return AjaxResult.buildSuccessInstance("收款成功"); } @ApiOperation(value = "补交", notes = "补交") @PostMapping(value = "/bj") public AjaxResult bj(@RequestBody SysOrder order){ orderService.updateAfterMoney(order); return AjaxResult.buildSuccessInstance("补交成功"); } @ApiOperation(value = "查询当前登录人", notes = "查询当前登录人") @GetMapping(value = "/getLoginUser") public AjaxResult getLoginUser() { AjaxResult result = AjaxResult.buildSuccessInstance(""); SysUsers user = WebUtil.getSessionAttribute(MatrixConstance.LOGIN_KEY); result.putInMap("user", user); return result; } @ApiOperation(value = "根据ID查询用户", notes = "根据ID查询用户") @GetMapping(value = "/getUserById/{id}") public AjaxResult getUserById(@PathVariable Long id) { AjaxResult result = AjaxResult.buildSuccessInstance(""); SysUsers user = sysUsersService.findById(id); result.putInMap("user", user); return result; } @ApiOperation(value = "获取业绩用户列表", notes = "获取业绩用户列表") @GetMapping(value = "/shopAll") public AjaxResult shopAll() { return new AjaxResult(AjaxResult.STATUS_SUCCESS, sysUsersService.findByRoleName(true, null)); } @ApiOperation(value = "获取业绩类型", notes = "获取业绩类型") @GetMapping(value = "getListByParentCode/{parentCode}") public AjaxResult getListByParentCode(@PathVariable String parentCode) { SysUsers user = WebUtil.getSessionAttribute(MatrixConstance.LOGIN_KEY); List list = dataDictionaryDao.selectByParentCode(parentCode, user.getCompanyId()); return new AjaxResult(AjaxResult.STATUS_SUCCESS, list, list.size()); } @ApiOperation(value = "查询当前登录用户所在门店信息", notes = "查询当前登录用户所在门店信息") @GetMapping(value = "findUserShop") public AjaxResult findUserShop() { SysUsers user = (SysUsers) WebUtil.getSession().getAttribute(MatrixConstance.LOGIN_KEY); return new AjaxResult(AjaxResult.STATUS_SUCCESS, java.util.Arrays.asList(currentService.findById(user.getShopId())), null); } @ApiOperation(value = "获取用户的可用充值卡", notes = "获取用户的可用充值卡") @GetMapping(value = "getUseMoneyCard/{vipId}") public AjaxResult getUseMoneyCard(@PathVariable Long vipId) { MoneyCardUse moneyCardUse = new MoneyCardUse(); moneyCardUse.setVipId(vipId); moneyCardUse.setStatus(Dictionary.MONEYCARD_STATUS_YX); List cards = cardUseService.findByModel(moneyCardUse); return new AjaxResult(AjaxResult.STATUS_SUCCESS, cards); } @ApiOperation(value = "根据订单ID查询订单信息", notes = "根据订单ID查询订单信息") @GetMapping(value = "/findOrderById/{id}") public AjaxResult findOrderById(@PathVariable Long id) { SysUsers user = WebUtil.getSessionAttribute(MatrixConstance.LOGIN_KEY); SysOrder order = orderService.findById(id); order.setItems(orderItemDao.selectByOrderId(id)); return AjaxResult.buildSuccessInstance(order); } @ApiOperation(value = "列表显示搜索项目绑定的产品信息", notes = "列表显示搜索项目绑定的产品信息") @PostMapping(value = "/showList") public AjaxResult showList(@RequestBody PadShowListDto padShowListDto) { int offset = (padShowListDto.getPageNum() - 1) * padShowListDto.getPageSize(); int limit = padShowListDto.getPageSize(); PaginationVO pageVo = new PaginationVO(); pageVo.setOffset(offset); pageVo.setLimit(limit); ShoppingGoods shoppingGoods = new ShoppingGoods(); if(StrUtil.isNotEmpty(padShowListDto.getName())){ shoppingGoods.setName(padShowListDto.getName()); } if(StrUtil.isNotEmpty(padShowListDto.getGoodType())){ shoppingGoods.setGoodType(padShowListDto.getGoodType()); } // QueryUtil.setQueryLimit(shoppingGoods); if(StringUtils.isBlank(pageVo.getSort())){ pageVo.setOrder("desc"); pageVo.setSort("createTime"); } //2表示查询总部产品 if (shoppingGoods.getHeadquarters()!=null && 2==shoppingGoods.getHeadquarters()) { //仅查询本店产品 SysShopInfo zbShop = shopInfoDao.selectZbShop(getMe().getCompanyId()); //如果是总部自己查询自己的库存则不需加入这个调价 if (getMe().getShopId().equals(zbShop.getId())){ shoppingGoods.setHeadquarters(1); } } shoppingGoods.setIsDel(ShoppingGoods.NORMAL); List dataList = shoppingGoodsService.findInPage(shoppingGoods, pageVo); AjaxResult result = new AjaxResult(AjaxResult.STATUS_SUCCESS, dataList, shoppingGoodsService.findTotal(shoppingGoods)); return result; } @ApiOperation(value = "计算订单金额", notes = "计算订单金额") @PostMapping(value = "/calculationOrder") public AjaxResult calculationOrder(@RequestBody SysOrder sysOrder) { BigDecimal total = BigDecimal.ZERO; BigDecimal zkTotal = BigDecimal.ZERO; //默认排序 List items = sysOrder.getItems(); for (int i = 0; i < items.size(); i++) { SysOrderItem item = items.get(i); zkTotal = zkTotal.add(new BigDecimal(item.getZkPrice() * item.getCount())); total = total.add(new BigDecimal(item.getPrice() * item.getCount())); } SysOrder sysOrderResult = new SysOrder(); sysOrderResult.setZkTotal(zkTotal.setScale(2, BigDecimal.ROUND_DOWN).doubleValue()); sysOrderResult.setTotal(total.doubleValue()); return AjaxResult.buildSuccessInstance(sysOrderResult); } @ApiOperation(value = "订单支付", notes = "订单支付") @PostMapping(value = "/payOrder") @Transactional(rollbackFor = Exception.class) public AjaxResult payOrder(@RequestBody SysOrder sysOrder) { SysUsers user = getMe(); sysOrder.setShopId(user.getShopId()); sysOrder.setOrderType(SysOrder.ORDER_TYPE_SEAL); sysOrder.setIsHasRefund(SysOrder.IS_HAS_REFUND_N); //校验订单是否满足结算调价,新订单则保存订单,已有订单则删除后更新 sysOrder = orderService.checkAndSaveOrder(sysOrder); orderService.payOrder(sysOrder); //发送微信公众号提醒 UniformMsgParam uniformMsgParam = new UniformMsgParam(user.getCompanyId(), UniformMsgParam.GZH_GMCG); uniformMsgParam.put("orderId", sysOrder.getId()); asyncMessageManager.sendMsg(AsyncMessageRouting.SEND_UNIFORM_TEMPLATE_MSG ,uniformMsgParam); //处理用户购买的产品 return AjaxResult.buildSuccessInstance(sysOrder, "订单结算成功"); } @ApiOperation(value = "订单保存接口-挂单", notes = "订单保存接口-挂单") @PostMapping(value = "/saveOrder") @Transactional(rollbackFor = Exception.class) public AjaxResult saveOrder(@RequestBody SysOrder sysOrder) { SysUsers user = getMe(); sysOrder.setShopId(user.getShopId()); //校验保存订单 sysOrder = orderService.checkAndSaveOrder(sysOrder); //处理用户购买的产品 return AjaxResult.buildSuccessInstance(sysOrder, "订单保存成功"); } }