package com.peanut.modules.book.controller; import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; import com.baomidou.mybatisplus.core.toolkit.IdWorker; import com.baomidou.mybatisplus.extension.plugins.pagination.Page; import com.peanut.common.utils.PageUtils; import com.peanut.common.utils.R; import com.peanut.config.Constants; import com.peanut.config.DelayQueueConfig; import com.peanut.modules.book.service.*; import com.peanut.modules.book.to.UserOrderDto; import com.peanut.modules.book.vo.UserAddressVo; import com.peanut.modules.book.vo.request.BuyOrderListRequestVo; import com.peanut.modules.book.vo.request.ModifyOrderAddressRequestVo; import com.peanut.modules.book.vo.request.ProductRequestVo; import com.peanut.modules.book.vo.request.ProductTransportVo; import com.peanut.modules.book.vo.response.BuyOrderResponseVo; import com.peanut.modules.book.vo.response.OrderAddressResponseVo; import com.peanut.modules.common.dao.JfTransactionDetailsDao; import com.peanut.modules.common.dao.UserCourseBuyDao; import com.peanut.modules.common.entity.*; import com.peanut.modules.pay.weChatPay.dto.WechatPaymentInfo; import com.peanut.modules.pay.weChatPay.service.WxpayService; import com.peanut.modules.sys.entity.SysConfigEntity; import com.peanut.modules.sys.service.SysConfigService; import lombok.extern.slf4j.Slf4j; import org.springframework.amqp.core.MessagePostProcessor; import org.springframework.amqp.rabbit.core.RabbitTemplate; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.transaction.annotation.Transactional; import org.springframework.web.bind.annotation.*; import java.io.IOException; import java.math.BigDecimal; import java.math.RoundingMode; import java.util.*; import java.util.stream.Collectors; /** * 订单表 * * @author yl * @email yl328572838@163.com * @date 2022-08-29 15:27:44 */ @Slf4j @RestController @RequestMapping("book/buyOrder") public class BuyOrderController { @Autowired private BuyOrderService buyOrderService; @Autowired private ShopProductService shopProductService; @Autowired private BuyOrderDetailService buyOrderDetailService; @Autowired private CouponService couponService; @Autowired private CouponHistoryService couponHistoryService; @Autowired private OrderCartService orderCartService; @Autowired private MyUserService myUserService; @Autowired private TransactionDetailsService transactionDetailsService; @Autowired private UserEbookBuyService userEbookBuyService; @Autowired private WxpayService wxpayService; @Autowired private RabbitTemplate rabbitTemplate; @Autowired private ShopProductBookService shopProductBookService; @Autowired private ExpressOrderService expressOrderService; @Autowired private UserAddressService userAddressService; @Autowired private ExpressFeeService expressFeeService; @Autowired private SysConfigService sysConfigService; @Autowired private BuyOrderProductService buyOrderProductService; @Autowired private ProvinceService provinceService; @Autowired private CityService cityService; @Autowired private CountyService countyService; @Autowired private UserCourseBuyDao userCourseBuyDao; @Autowired private JfTransactionDetailsDao jfTransactionDetailsDao; @RequestMapping(value = "/decomposeShipment", method = RequestMethod.POST) public R decomposeShipment(@RequestBody BuyOrderListRequestVo requestVo) { Map result = buyOrderService.decomposeShipment(requestVo); return R.ok().put("result", result); } // TODO 新版本上线后废弃 @RequestMapping("/list") public R list(@RequestParam Map params) throws Exception { PageUtils page = buyOrderService.list(params); return R.ok().put("page", page); } /** * 订单列表 * * @param requestVo request value object * @return R */ @RequestMapping(path = "/orderList", method = RequestMethod.POST) public R orderList(@RequestBody BuyOrderListRequestVo requestVo) { Page buyOrderPage = buyOrderService.orderList(requestVo); return R.ok().put("result", buyOrderPage); } /** * 获取用户订单列表 * @param userOrderDto * @return */ @RequestMapping("/getUserOrderList") public R getUserOrderList(@RequestBody UserOrderDto userOrderDto){ Page userOrderList = buyOrderService.getUserOrderList(userOrderDto); return R.ok().put("page",userOrderList); } /** * 获取用户订单各个状态的数量 * @param map * @return */ @RequestMapping("/getUserOrderStatusNum") public R getUserOrderStatusNum(@RequestBody Map map){ Integer userId = Integer.valueOf(map.get("userId").toString()); List userOrderStatusNum = buyOrderService.getUserOrderStatusNum(userId); Map m = new HashMap<>(); for (BuyOrder b : userOrderStatusNum){ m.put(b.getOrderStatus().toString(),b.getStatusNum()); } return R.ok().put("map",m); } /** * 订单详情 * * @param orderSn 订单号 * @return R */ @RequestMapping(path = "/orderDetail", method = RequestMethod.GET) public R orderDetail(@RequestParam("orderSn") String orderSn) { BuyOrderResponseVo buyOrderResponseVo = buyOrderService.orderDetail(orderSn); return R.ok().put("result", buyOrderResponseVo); } /** * 删除订单 * * @param orderSn 订单号 * @return R */ @RequestMapping(path = "/orderDel") public R orderDel(@RequestParam("orderSn") String orderSn) { LambdaQueryWrapper w = new LambdaQueryWrapper(); w.eq(BuyOrder::getOrderSn,orderSn); BuyOrder order = buyOrderService.getOne(w); order.setOrderStatus("4"); buyOrderService.saveOrUpdate(order); buyOrderService.removeById(order.getOrderId()); return R.ok(); } /** * 下单 * TODO 原下单接口,新版本上线后废弃 * * @param buyOrder 订单 * @return R */ @RequestMapping("/buySave") @Transactional public R buySave(@RequestBody BuyOrder buyOrder) throws IOException { return R.error("app版本太低请升级后再购买!!"); } /** * 下单 * * @param buyOrder * @return * @throws IOException */ @RequestMapping(value = "/placeOrder", method = RequestMethod.POST) @Transactional public R placeOrder(@RequestBody BuyOrder buyOrder) throws IOException { List buyOrderProductList = buyOrder.getProductList(); // 订单实收金额 BigDecimal totalPrice = new BigDecimal(0); //是否存在手摸或脚模,修改用户的脉穴权限 List sjc =Arrays.asList(128,129,130,131,136,137); boolean sj_check = false; //是否存在时辰取穴的权限触发商品 List scqq = Arrays.asList(133,134,135); boolean scqq_check = false; //五运六气权限 List wylq = Arrays.asList(39,62,123,127); boolean wylq_check = false; List prescript_b = Arrays.asList(43,62,124); boolean prescriot_b_check = false; // 遍历商品总价计算 for (BuyOrderProduct buyOrderProduct : buyOrderProductList) { if(sjc.contains(buyOrderProduct.getProductId())){ sj_check = true; } if(scqq.contains(buyOrderProduct.getProductId())){ scqq_check = true; } if(wylq.contains(buyOrderProduct.getProductId())){ wylq_check = true; } if(prescript_b.contains(buyOrderProduct.getProductId())){ prescriot_b_check = true; } Integer productId = buyOrderProduct.getProductId(); int quantity = buyOrderProduct.getQuantity(); ShopProduct product = shopProductService.getById(productId); BigDecimal price = getRealPrice(product); if (!handleStock(buyOrderProduct, product)) { return R.error(500, "库存不足"); } totalPrice = totalPrice.add(price.multiply(BigDecimal.valueOf(quantity))); } //商品价格减去优惠券的优惠金额 totalPrice = totalPrice.subtract(useCouponAmount(buyOrder)); //加上运费金额 totalPrice = totalPrice.add(getShoppingAmount(buyOrder)); //减去积分抵扣 totalPrice = totalPrice.subtract(buyOrder.getJfDeduction()==null?BigDecimal.ZERO:buyOrder.getJfDeduction()); if(buyOrder.getRealMoney().compareTo(totalPrice)!=0){ return R.error("系统错误订单金额异常!"); } String orderSn = IdWorker.getTimeId().substring(0, 32); buyOrder.setOrderSn(orderSn); if(buyOrder.getAddressId()!=0){ QueryWrapper queryWrapper = new QueryWrapper<>(); queryWrapper.eq("id", buyOrder.getAddressId()); UserAddress userAddress = userAddressService.getOne(queryWrapper); UserAddressVo vo = new UserAddressVo(); vo = userAddressService.getAddressName(vo, userAddress.getRegionCode()); buyOrder.setProvince(vo.getProvince()); buyOrder.setCity(vo.getCity()); buyOrder.setDistrict(vo.getCounty()); buyOrder.setAddress(userAddress.getDetailAddress()); String str = buyOrder.getShippingUser()+buyOrder.getAddress()+buyOrder.getRemark(); if (str.contains("+")||str.contains("&")) { return R.error(500, "信息中不能含有“+”、“&”符号!"); } } buyOrder.setOrderStatus("0"); buyOrderService.save(buyOrder); //解决购物车相关问题 for (BuyOrderProduct buyOrderProduct : buyOrderProductList) { buyOrderProduct.setOrderId(buyOrder.getOrderId()); if (Constants.BUY_TYPE_CART.equals(buyOrder.getBuyType())) { handleBuyCart(buyOrder, buyOrderProduct); } } buyOrderProductService.saveBatch(buyOrderProductList); // 1. 虚拟币支付 if (Constants.PAYMENT_METHOD_VIRTUAL.equals(buyOrder.getPaymentMethod())) { buyOrder.setOrderStatus(Constants.ORDER_STATUS_TO_BE_SHIPPED); MyUserEntity user = this.myUserService.getById(buyOrder.getUserId()); if (usePeanutCoin(user, totalPrice,sj_check,scqq_check,wylq_check,prescriot_b_check)&&useJfCoin(user,buyOrder.getJfDeduction())) { // 更新订单状态 if(buyOrderService.checkWlOrder(buyOrder.getOrderSn())){ buyOrderService.updateOrderStatus(user.getId(), buyOrder.getOrderSn(), "0"); }else{ buyOrderService.updateOrderStatus(user.getId(), buyOrder.getOrderSn(), "2"); } //记录用户虚拟币消费 if(totalPrice.compareTo(BigDecimal.ZERO)>0){ recordTransaction(buyOrder, user, totalPrice); } //记录用户积分消费情况 if(buyOrder.getJfDeduction()!=null&&buyOrder.getJfDeduction().compareTo(BigDecimal.ZERO) > 0){ recordJfTransaction(buyOrder, user, buyOrder.getJfDeduction()); } //消费用户积分并记录用户积分消费记录 addEbookToUser(buyOrderProductList, buyOrder, 0); addCourseToUser(buyOrder); } else { return R.error(500, "天医币余额不足!"); } } // 2. 微信支付,需要预支付 if (Constants.PAYMENT_METHOD_WECHAT_PAY.equals(buyOrder.getPaymentMethod())) { WechatPaymentInfo paymentInfo = new WechatPaymentInfo(); paymentInfo.setOrderSn(orderSn); paymentInfo.setBuyOrderId(buyOrder.getOrderId()); paymentInfo.setTotalAmount(totalPrice); if(buyOrder.getCome()==null||buyOrder.getCome()==0){ paymentInfo.setAppName(buyOrder.getAppName()); } else if (buyOrder.getCome()==2){ paymentInfo.setAppName("wumen"); } else if (buyOrder.getCome()==1) { paymentInfo.setAppName("zmzm"); } wxpayService.prepay(paymentInfo); } rabbitTemplate.convertAndSend( DelayQueueConfig.ORDER_TO_BE_PAY_EXCHANGE, DelayQueueConfig.ORDER_TO_BE_PAY_ROUTING_KEY, buyOrder.getOrderId(), messagePostProcessor() ); Map result = new HashMap<>(); result.put("orderSn", buyOrder.getOrderSn()); result.put("money", totalPrice); return R.ok(result); } @RequestMapping("/llll") public R ls(){ LambdaQueryWrapper wrapper = new LambdaQueryWrapper<>(); ArrayList integers = new ArrayList<>(); integers.add(1); integers.add(2); integers.add(3); wrapper.gt(BuyOrder::getOrderId,4522); wrapper.in(BuyOrder::getOrderStatus,integers); wrapper.eq(BuyOrder::getOrderType,"order"); List list = buyOrderService.list(wrapper); for (BuyOrder b : list){ List orderBookId = shopProductBookService.getOrderBookId(b.getOrderSn()); System.out.println(orderBookId); userEbookBuyService.addBookForUser(b.getUserId(),orderBookId); } return R.ok(); } @RequestMapping("/llll1") public R ls1(){ Integer[] is = {39,62,123,127}; List collect = buyOrderProductService.getBaseMapper().selectList(new LambdaQueryWrapper().in(BuyOrderProduct::getProductId, is)).stream().map(BuyOrderProduct::getOrderId).collect(Collectors.toList()); LambdaQueryWrapper wrapper = new LambdaQueryWrapper<>(); List integers = Arrays.asList(1,2,3); wrapper.in(BuyOrder::getOrderStatus,integers); wrapper.in(BuyOrder::getOrderId,collect); wrapper.eq(BuyOrder::getOrderType,"order"); List list = buyOrderService.list(wrapper); for (BuyOrder b : list){ MyUserEntity byId = myUserService.getById(b.getUserId()); byId.setWylqPower(1); myUserService.updateById(byId); } return R.ok(); } /** * 计算运费 * * @param vo * @return */ @RequestMapping(path = "/calculateTransportPrice", method = RequestMethod.POST) public R getTransportPrice(@RequestBody ProductTransportVo vo) { //商品列表和收货区域编码 String regionCode = vo.getRegionCode(); List products = vo.getProducts(); //查询默认快递公司代码 defaultExpress.getParamValue() QueryWrapper configQueryWrapper = new QueryWrapper<>(); configQueryWrapper.eq("param_key", "DEFAULT_EXPRESS"); SysConfigEntity defaultExpress = sysConfigService.getOne(configQueryWrapper); if (defaultExpress == null) { return R.error("未设置默认快递"); } //总运费 BigDecimal totalExpressFee = new BigDecimal(0); BigDecimal totalWeight01 = new BigDecimal(0); BigDecimal totalWeight02 = new BigDecimal(0); BigDecimal totalWeight04 = new BigDecimal(0); for (ProductRequestVo product : products) { ShopProduct p = shopProductService.getById(product.getProductId()); if (p != null) { //包邮 if(p.getIsFreeMail()==0){ continue; }else { BigDecimal weight = BigDecimal.valueOf(Double.valueOf(p.getWeight()) / 1000.0); BigDecimal totalWeight = weight.multiply(new BigDecimal(product.getQuantity())); if ("01".equals(p.getGoodsType())){ totalWeight01 = totalWeight01.add(totalWeight); } if ("02".equals(p.getGoodsType())){ totalWeight02 = totalWeight02.add(totalWeight); } //预售书单独计算 if ("03".equals(p.getGoodsType())){ totalExpressFee = totalExpressFee.add( expressFeeService.calculateExpressFee(defaultExpress.getParamValue(), totalWeight.setScale(0, RoundingMode.UP), regionCode)); } if ("04".equals(p.getGoodsType())){ totalWeight04 = totalWeight04.add(totalWeight); } } }else { return R.error("未查询到商品"); } } if(totalWeight01.compareTo(BigDecimal.ZERO)!=0){ totalExpressFee = totalExpressFee.add( expressFeeService.calculateExpressFee(defaultExpress.getParamValue(), totalWeight01.setScale(0, RoundingMode.UP), regionCode)); } if(totalWeight02.compareTo(BigDecimal.ZERO)!=0){ totalExpressFee = totalExpressFee.add( expressFeeService.calculateExpressFee(defaultExpress.getParamValue(), totalWeight02.setScale(0, RoundingMode.UP), regionCode)); } if(totalWeight04.compareTo(BigDecimal.ZERO)!=0){ totalExpressFee = totalExpressFee.add( expressFeeService.calculateExpressFee(defaultExpress.getParamValue(), totalWeight04.setScale(0, RoundingMode.UP), regionCode)); } return R.ok().put("result", totalExpressFee); } /** * 列表 */ @RequestMapping("/getMyOrderList") public R getMyOrderList(@RequestParam Map params) { PageUtils page = buyOrderService.getMyOrderList(params); return R.ok().put("page", page); } /** * @param orderSn 订单号 * @return R */ @RequestMapping(value = "/cancelOrder", method = RequestMethod.GET) @Transactional public R appDelete(@RequestParam("orderSn") String orderSn) { QueryWrapper queryWrapper = new QueryWrapper<>(); queryWrapper.eq("order_sn", orderSn); BuyOrder buyOrder = buyOrderService.getOne(queryWrapper); if (buyOrder == null) { return R.error("订单不存在"); } if (buyOrder.getCouponId() != null) { Integer couponId = buyOrder.getCouponId(); CouponHistoryEntity couponHistory = couponHistoryService.getById(couponId); couponHistory.setUseStatus(0); couponHistoryService.updateById(couponHistory); } // 库存回滚 QueryWrapper buyOrderProductQueryWrapper = new QueryWrapper<>(); buyOrderProductQueryWrapper.eq("order_id", buyOrder.getOrderId()); List buyOrderProductList = buyOrderProductService.list(buyOrderProductQueryWrapper); for (BuyOrderProduct buyOrderProduct : buyOrderProductList) { Integer productId = buyOrderProduct.getProductId(); ShopProduct product = shopProductService.getById(productId); product.setProductStock(product.getProductStock() + buyOrderProduct.getQuantity()); shopProductService.updateById(product); } buyOrderService.removeById(buyOrder.getOrderId()); return R.ok(); } /** * 修改 */ @RequestMapping("/update") public R update(@RequestBody BuyOrder buyOrder) { buyOrderService.updateById(buyOrder); return R.ok(); } /** * 删除 */ @RequestMapping("/delete") public R delete(@RequestBody List orderSnList) { QueryWrapper queryWrapper = new QueryWrapper<>(); queryWrapper.in("order_sn", orderSnList); buyOrderService.remove(queryWrapper); return R.ok(); } /** * app 端 取消订单 * TODO 新版本上线后此方法删除 */ @RequestMapping("/appDelete") @Transactional public R appDelete(@RequestParam("orderId") Integer orderId) { //1. 判断订单状态 BuyOrder byId = buyOrderService.getById(orderId); if (byId != null) { //2. 判断当前订单是否存在优惠券 进行 回显 Integer couponId = byId.getCouponId(); if (couponId != null) { CouponHistoryEntity byId1 = couponHistoryService.getById(couponId); byId1.setUseStatus(0); couponHistoryService.updateById(byId1); } // 库存回滚 List buyOrderDetailEntities = buyOrderDetailService.getBaseMapper().selectList(new QueryWrapper() .eq("order_id", byId.getOrderId())); for (BuyOrderDetail buyOrderDetailEntity : buyOrderDetailEntities) { Integer productId = buyOrderDetailEntity.getProductId(); ShopProduct product = shopProductService.getById(productId); product.setProductStock(product.getProductStock() + buyOrderDetailEntity.getQuantity()); shopProductService.updateById(product); } buyOrderService.removeById(orderId); } return R.ok(); } /** * 充值专用订单生成接口 */ @RequestMapping("/rechargeSave") @Transactional public R rechargeSave(@RequestBody BuyOrder buyOrder) throws IOException { buyOrder.setOrderStatus("0"); buyOrder.setOrderType("point"); String timeId = IdWorker.getTimeId().substring(0, 32); buyOrder.setOrderSn(timeId); buyOrderService.save(buyOrder); //下单微信支付预付款订单 if(Constants.PAYMENT_METHOD_WECHAT_PAY.equals(buyOrder.getPaymentMethod())){ BuyOrder buyOrderEntity = buyOrderService.getBaseMapper().selectOne(new LambdaQueryWrapper().eq(BuyOrder::getOrderSn, timeId)); WechatPaymentInfo paymentInfo = new WechatPaymentInfo(); paymentInfo.setOrderSn(buyOrderEntity.getOrderSn()); paymentInfo.setBuyOrderId(Integer.valueOf(buyOrderEntity.getProductId())); paymentInfo.setTotalAmount(buyOrderEntity.getRealMoney()); // paymentInfo.setAppName(buyOrder.getAppName()); if (buyOrder.getCome()==2){ paymentInfo.setAppName("wumen"); } else if (buyOrder.getCome()==1) { paymentInfo.setAppName("zmzm"); }else { paymentInfo.setAppName(buyOrder.getAppName()); } wxpayService.prepay(paymentInfo); } rabbitTemplate.convertAndSend( DelayQueueConfig.ORDER_TO_BE_PAY_EXCHANGE, DelayQueueConfig.ORDER_TO_BE_PAY_ROUTING_KEY, buyOrder.getOrderId(), messagePostProcessor() ); return R.ok().put("orderSn", timeId); } /** * 获取订单详情 * TODO 新版本上线后删除 * * @param orderId * @return */ @RequestMapping("/getOrderDetail") public R getOrderDetail(@RequestParam Integer orderId) { LambdaQueryWrapper wrapper = new LambdaQueryWrapper<>(); wrapper.eq(BuyOrder::getOrderId, orderId); BuyOrder one = buyOrderService.getOne(wrapper); if (one.equals(null)) { return R.error("order error:order is null"); } //添加用户信息 one.setUser(myUserService.getById(one.getUserId())); //添加商品信息 LambdaQueryWrapper wrapper1 = new LambdaQueryWrapper<>(); wrapper1.eq(BuyOrderDetail::getOrderId, orderId); List buyOrderDetailEntities = buyOrderDetailService.getBaseMapper().selectList(wrapper1); one.setProducts(buyOrderDetailEntities); return R.ok().put("detail", one); } /** * 获取订单详情 * * @param orderId 订单 ID * @return R * TODO 新版本上线后 该方法删除 */ @RequestMapping(value = "/getOrderInfo", method = RequestMethod.GET) public R appGetOrderInfo(@RequestParam("orderId") Integer orderId) { BuyOrder buyOrder = buyOrderService.getById(orderId); QueryWrapper queryWrapper = new QueryWrapper<>(); queryWrapper.eq("order_id", orderId); List buyOrderDetailList = buyOrderDetailService.list(queryWrapper); for (BuyOrderDetail buyOrderDetail : buyOrderDetailList) { ShopProduct prod = shopProductService.getById(buyOrderDetail.getProductId()); if (prod != null) { buyOrderDetail.setImage(prod.getProductImages()); } } return R.ok().put("result", buyOrder); } /** * 修改订单地址 * * @param addressRequestVo 地址请求 value object * @return R */ @RequestMapping(value = "/modifyConsigneeAddress", method = RequestMethod.POST) public R modifyOrderAddress(@RequestBody ModifyOrderAddressRequestVo addressRequestVo) { QueryWrapper buyOrderQueryWrapper = new QueryWrapper<>(); buyOrderQueryWrapper.eq("order_sn", addressRequestVo.getOrderSn()); BuyOrder buyOrder = buyOrderService.getOne(buyOrderQueryWrapper); String provinceCode = addressRequestVo.getProvinceCode(); QueryWrapper provinceQueryWrapper = new QueryWrapper<>(); provinceQueryWrapper.eq("region_code", provinceCode); Province province = provinceService.getOne(provinceQueryWrapper); buyOrder.setProvince(province.getProvName()); String cityCode = addressRequestVo.getCityCode(); QueryWrapper cityQueryWrapper = new QueryWrapper<>(); cityQueryWrapper.eq("region_code", cityCode); City city = cityService.getOne(cityQueryWrapper); buyOrder.setCity(city.getCityName()); String countyCode = addressRequestVo.getCountyCode(); QueryWrapper countyQueryWrapper = new QueryWrapper<>(); countyQueryWrapper.eq("region_code", countyCode); County county = countyService.getOne(countyQueryWrapper); buyOrder.setDistrict(county.getCountyName()); buyOrder.setShippingUser(addressRequestVo.getConsigneeName()); buyOrder.setUserPhone(addressRequestVo.getConsigneeMobile()); buyOrder.setAddress(addressRequestVo.getAddress()); String str = buyOrder.getShippingUser()+buyOrder.getAddress()+buyOrder.getRemark(); if (str.contains("+")||str.contains("&")) { return R.error(500, "信息中不能含有“+”、“&”符号!"); } buyOrderService.updateById(buyOrder); return R.ok(); } /** * 获取订单地址 * * @param orderSn 订单号 * @return R */ @RequestMapping(value = "/getConsigneeAddress", method = RequestMethod.GET) public R getOrderAddress(@RequestParam("orderSn") String orderSn) { QueryWrapper queryWrapper = new QueryWrapper<>(); queryWrapper.eq("order_sn", orderSn); BuyOrder buyOrder = buyOrderService.getOne(queryWrapper); OrderAddressResponseVo responseVo = new OrderAddressResponseVo(); responseVo.setConsigneeMobile(buyOrder.getUserPhone()); responseVo.setConsigneeName(buyOrder.getShippingUser()); responseVo.setDetailAddress(buyOrder.getAddress()); String provinceName = buyOrder.getProvince(); String cityName = buyOrder.getCity(); String countyName = buyOrder.getDistrict(); QueryWrapper provinceQueryWrapper = new QueryWrapper<>(); provinceQueryWrapper.eq("prov_name", provinceName); Province province = provinceService.getOne(provinceQueryWrapper); responseVo.setProvinceCode(province.getRegionCode()); QueryWrapper cityQueryWrapper = new QueryWrapper<>(); cityQueryWrapper.eq("city_name", cityName); City city = cityService.getOne(cityQueryWrapper); responseVo.setCityCode(city.getRegionCode()); QueryWrapper countyQueryWrapper = new QueryWrapper<>(); countyQueryWrapper.eq("county_name", countyName); County county = countyService.getOne(countyQueryWrapper); responseVo.setCountyCode(county.getRegionCode()); return R.ok().put("result", responseVo); } /** * 查询订单快递 * * @param expressOrderSn 运单号 * @return R */ // @RequestMapping(value = "/queryExpress", method = RequestMethod.GET) // public R queryExpress(@RequestParam("expressOrderSn") String expressOrderSn, // @RequestParam("expressCompanyCode") String expressCompanyCode, // @RequestParam("customerName") String customerName) { // // ExpressQueryResponseVo vo = new ExpressQueryResponseVo(); // ExpressQueryResponse expressQueryResponse = expressOrderService.queryExpressOrder(expressCompanyCode, expressOrderSn, customerName); // vo.setLogisticCode(expressQueryResponse.getLogisticCode()); // vo.setTraces(expressQueryResponse.getTraces()); // return R.ok().put("result", vo); // } /** * 查询快递订单轨迹 * @param expressOrderSn * @return */ @RequestMapping("/searchExpress") public R searchExpress(@RequestParam String expressOrderSn){ LambdaQueryWrapper wrapper = new LambdaQueryWrapper<>(); wrapper.eq(ExpressOrder::getExpressOrderSn,expressOrderSn); ExpressOrder expressOrder = expressOrderService.getBaseMapper().selectOne(wrapper); if(expressOrder==null){ return R.error("查询失败"); } String tel = expressOrder.getConsigneeMobile().substring(expressOrder.getConsigneeMobile().length()-4); ExpressQueryResponse expressQueryResponse = expressOrderService.queryExpressOrder(expressOrder.getExpressCompanyCode(), expressOrderSn, tel); return R.ok().put("express",expressQueryResponse); } /** * 检查可合并的订单信息 * * @return */ @RequestMapping("/checkOrder") public R checkOrder(@RequestParam Map params) { Page page = buyOrderService.checkOrder(params); return R.ok().put("page", page); } /** * 检查传来的orderId 是否有可合并的其他订单信息 * * @param orderIds * @return */ @RequestMapping("/checkMerge") public R checkMerge(@RequestBody Integer[] orderIds) { List list = buyOrderService.checkOrder(orderIds); return R.ok().put("list", list); } /** * 分包发货 * * @param expressCompanyCode 快递公司编码 * @param buyOrderProductId 订单商品 * @return R */ @RequestMapping(value = "/delivery", method = RequestMethod.POST) public R delivery(@RequestParam("expressCompanyCode") String expressCompanyCode, @RequestBody List buyOrderProductId) throws Exception { return buyOrderService.delivery(expressCompanyCode, buyOrderProductId); } @RequestMapping("/mytest") public R mytest() throws IOException { String mytest = buyOrderService.mytest(); return R.ok().put("url",mytest); } /** * 获取商品实际价格 * * @param product 商品信息 * @return 商品实际价格 */ private BigDecimal getRealPrice(ShopProduct product) { BigDecimal activityPrice = product.getActivityPrice(); return (activityPrice == null || activityPrice.equals(BigDecimal.ZERO)) ? product.getPrice() : activityPrice; } /** * 处理商品库存 * TODO 新版本上线后删除此方法 * * @param buyOrderDetail * @param product * @return */ private boolean handleStock(BuyOrderDetail buyOrderDetail, ShopProduct product) { int quantity = buyOrderDetail.getQuantity(); if (product.getProductStock() - quantity < 0) { return false; } product.setProductStock(product.getProductStock() - quantity); product.setSumSales(product.getSumSales() + quantity); shopProductService.updateById(product); return true; } /** * 处理商品库存 * * @param buyOrderProduct 订单商品信息 * @param product 商品 * @return boolean */ private boolean handleStock(BuyOrderProduct buyOrderProduct, ShopProduct product) { int quantity = buyOrderProduct.getQuantity(); if (product.getProductStock() - quantity < 0) { return false; } product.setProductStock(product.getProductStock() - quantity); product.setSumSales(product.getSumSales() + quantity); shopProductService.updateById(product); return true; } /** * 使用优惠券 * * @param buyOrder * @return */ private BigDecimal useCouponAmount(BuyOrder buyOrder) { Integer couponId = buyOrder.getCouponId(); if (couponId != null&&couponId!=0) { CouponHistoryEntity couponHistory = couponHistoryService.getById(couponId); couponHistory.setUseStatus(1); couponHistory.setUseTime(new Date()); couponHistory.setOrderId(Long.valueOf(buyOrder.getOrderId())); couponHistory.setOrderSn(buyOrder.getOrderSn()); CouponEntity coupon = couponService.getById(couponHistory.getCouponId()); return coupon.getCouponAmount(); } return BigDecimal.ZERO; } /** * 计算运费 * * @param buyOrder * @return */ private BigDecimal getShoppingAmount(BuyOrder buyOrder) { return buyOrder.getOrderMoney() == null ? BigDecimal.ZERO : buyOrder.getShippingMoney(); } /** * 使用虚拟币支付 * * @param user * @param totalPrice * @return */ private boolean usePeanutCoin(MyUserEntity user, BigDecimal totalPrice, boolean sj_check, boolean scqq_check, boolean wylq_check, boolean prescript_b_check) { if (user.getPeanutCoin().compareTo(totalPrice) >= 0) { if(totalPrice.compareTo(BigDecimal.ZERO)==0){//纯积分支付,虚拟币不用支付 return true; } user.setPeanutCoin(user.getPeanutCoin().subtract(totalPrice)); if (sj_check){ user.setPointPower(1); } if(scqq_check){ user.setTgdzPower(1); } if(wylq_check){ user.setWylqPower(1); } if(prescript_b_check){ user.setPrescriptBPower(1); } this.myUserService.updateById(user); return true; } return false; } private boolean useJfCoin(MyUserEntity user,BigDecimal jf){ if(jf==null){ return true; } if(user.getJf().compareTo(jf)>=0){ user.setJf(user.getJf().subtract(jf)); this.myUserService.updateById(user); return true; }else{ return false; } } /** * 交易记录 * * @param buyOrder * @param user * @param totalPrice */ private void recordTransaction(BuyOrder buyOrder, MyUserEntity user, BigDecimal totalPrice) { TransactionDetailsEntity transactionDetailsEntity = new TransactionDetailsEntity(); transactionDetailsEntity.setRemark("订单编号为 - " + buyOrder.getOrderSn()); transactionDetailsEntity.setUserId(user.getId()); transactionDetailsEntity.setUserName(user.getNickname()); transactionDetailsEntity.setChangeAmount(totalPrice.negate()); transactionDetailsEntity.setUserBalance(user.getPeanutCoin()); transactionDetailsEntity.setTel(user.getTel()); transactionDetailsEntity.setOrderType("购买商品"); transactionDetailsService.save(transactionDetailsEntity); } private void recordJfTransaction(BuyOrder buyOrder, MyUserEntity user, BigDecimal jf){ JfTransactionDetails jfTransactionDetails = new JfTransactionDetails(); jfTransactionDetails.setUserId(user.getId()); jfTransactionDetails.setChangeAmount(jf); jfTransactionDetails.setActType(0); jfTransactionDetails.setUserBalance(user.getJf()); jfTransactionDetails.setRelationId(buyOrder.getOrderId()); jfTransactionDetails.setRemark("消费积分抵扣:"+jf.toString()+",订单号:"+buyOrder.getOrderSn()); jfTransactionDetailsDao.insert(jfTransactionDetails); } /** * 给用户添加电子书 * TODO 新版本上线删除此接口 * @param products * * @param buyOrder */ private void addEbookToUser(List products, BuyOrder buyOrder) { List productIds = products.stream().map(BuyOrderDetail::getProductId).collect(Collectors.toList()); for (Integer productId : productIds) { List collect = shopProductBookService.getBaseMapper().selectList(new LambdaQueryWrapper() .eq(ShopProductBookEntity::getProductId, productId) .eq(ShopProductBookEntity::getDelFlag, 0)).stream().map(ShopProductBookEntity::getBookId).collect(Collectors.toList()); userEbookBuyService.addBookForUser(buyOrder.getUserId(), collect); } } /** * 给用户添加电子书 * TODO 这里的参数 0 没用 新版本上线后删除 * * @param products * @param buyOrder */ private void addEbookToUser(List products, BuyOrder buyOrder, Integer x) { List productIds = products.stream().map(BuyOrderProduct::getProductId).collect(Collectors.toList()); for (Integer productId : productIds) { List collect = shopProductBookService.getBaseMapper().selectList(new LambdaQueryWrapper() .eq(ShopProductBookEntity::getProductId, productId) .eq(ShopProductBookEntity::getDelFlag, 0)).stream().map(ShopProductBookEntity::getBookId).collect(Collectors.toList()); userEbookBuyService.addBookForUser(buyOrder.getUserId(), collect); } } private void addCourseToUser(BuyOrder orderEntity){ List orderCourse = buyOrderService.getOrderCourse(orderEntity.getOrderSn()); for ( ShopProductCourseEntity s : orderCourse){ LambdaQueryWrapper wrapper2 = new LambdaQueryWrapper<>(); wrapper2.eq(UserCourseBuyEntity::getUserId,orderEntity.getUserId()); wrapper2.eq(UserCourseBuyEntity::getCatalogueId,s.getCatalogueId()); wrapper2.and(r->r.isNull(UserCourseBuyEntity::getEndTime).or().gt(UserCourseBuyEntity::getEndTime,new Date())); List userCourseBuyEntities = userCourseBuyDao.selectList(wrapper2); if(userCourseBuyEntities.size()>0){//延长有效期 UserCourseBuyEntity userCourseBuyEntity = userCourseBuyEntities.get(0); userCourseBuyEntity.setDays(userCourseBuyEntity.getDays()+s.getDays()); if(userCourseBuyEntity.getEndTime()!=null){ Calendar calendar = Calendar.getInstance(); calendar.setTime(userCourseBuyEntity.getEndTime()); calendar.add(Calendar.DAY_OF_MONTH,s.getDays()); userCourseBuyEntity.setEndTime(calendar.getTime()); } userCourseBuyDao.updateById(userCourseBuyEntity); }else{ UserCourseBuyEntity userCourseBuyEntity = new UserCourseBuyEntity(); userCourseBuyEntity.setUserId(orderEntity.getUserId()); userCourseBuyEntity.setCourseId(s.getCourseId()); userCourseBuyEntity.setCatalogueId(s.getCatalogueId()); userCourseBuyEntity.setDays(s.getDays()); userCourseBuyEntity.setCreateTime(new Date()); // userCourseBuyEntity.setStartTime(new Date()); // Calendar cal = Calendar.getInstance(); // cal.setTime(new Date()); // cal.add(Calendar.DAY_OF_MONTH,s.getDays()); // userCourseBuyEntity.setEndTime(cal.getTime()); userCourseBuyDao.insert(userCourseBuyEntity); } } } /** * 购物车 * TODO 新版本上线后删除此方法 * * @param buyOrder * @param buyOrderDetail */ private void handleBuyCart(BuyOrder buyOrder, BuyOrderDetail buyOrderDetail) { List orderCartList = orderCartService.getBaseMapper().selectList(new QueryWrapper() .eq("user_id", buyOrder.getUserId()).eq("product_id", buyOrderDetail.getProductId())); if (orderCartList.size() > 0) { List collect = orderCartList.stream().map(OrderCartEntity::getCartId).collect(Collectors.toList()); orderCartService.removeByIds(collect); } } /** * 购物车 * * @param buyOrder 订单 * @param buyOrderProduct */ private void handleBuyCart(BuyOrder buyOrder, BuyOrderProduct buyOrderProduct) { List orderCartList = orderCartService.getBaseMapper().selectList(new QueryWrapper() .eq("user_id", buyOrder.getUserId()).eq("product_id", buyOrderProduct.getProductId())); if (orderCartList.size() > 0) { List collect = orderCartList.stream().map(OrderCartEntity::getCartId).collect(Collectors.toList()); orderCartService.removeByIds(collect); } } private MessagePostProcessor messagePostProcessor() { return message -> { //设置有效期30分钟 message.getMessageProperties().setExpiration(String.valueOf(30 * 60 * 1000)); return message; }; } }