diff --git a/jeecg-boot-base/jeecg-boot-base-core/src/main/java/org/jeecg/modules/hotelleaselog/entity/HotelLeaseLog.java b/jeecg-boot-base/jeecg-boot-base-core/src/main/java/org/jeecg/modules/hotelleaselog/entity/HotelLeaseLog.java index 84bafb1..a6189b4 100644 --- a/jeecg-boot-base/jeecg-boot-base-core/src/main/java/org/jeecg/modules/hotelleaselog/entity/HotelLeaseLog.java +++ b/jeecg-boot-base/jeecg-boot-base-core/src/main/java/org/jeecg/modules/hotelleaselog/entity/HotelLeaseLog.java @@ -106,4 +106,11 @@ public class HotelLeaseLog implements Serializable { @TableField(exist = false) private String isWash; private String orderDetailId; + /**水洗数量*/ + private Integer washNum; + /**水洗单价*/ + @TableField(exist = false) + private BigDecimal washUnitPrice; + private String pid; + } diff --git a/jeecg-boot-base/jeecg-boot-base-core/src/main/java/org/jeecg/modules/hotelleaselog/mapper/xml/HotelLeaseLogMapper.xml b/jeecg-boot-base/jeecg-boot-base-core/src/main/java/org/jeecg/modules/hotelleaselog/mapper/xml/HotelLeaseLogMapper.xml index 56052d5..84413a1 100644 --- a/jeecg-boot-base/jeecg-boot-base-core/src/main/java/org/jeecg/modules/hotelleaselog/mapper/xml/HotelLeaseLogMapper.xml +++ b/jeecg-boot-base/jeecg-boot-base-core/src/main/java/org/jeecg/modules/hotelleaselog/mapper/xml/HotelLeaseLogMapper.xml @@ -5,8 +5,9 @@ - \ No newline at end of file + diff --git a/jeecg-boot-module-system/src/main/java/org/jeecg/modules/xcx/order/controller/OrderController.java b/jeecg-boot-module-system/src/main/java/org/jeecg/modules/xcx/order/controller/OrderController.java index 09bb4cd..6bf11ba 100644 --- a/jeecg-boot-module-system/src/main/java/org/jeecg/modules/xcx/order/controller/OrderController.java +++ b/jeecg-boot-module-system/src/main/java/org/jeecg/modules/xcx/order/controller/OrderController.java @@ -50,7 +50,7 @@ public class OrderController { @ApiOperation(value = "下订单") @PostMapping("/create") public Result createOrder(HttpServletRequest request, @RequestParam String req){ - return orderService.createOrder2(req,TokenUtils.getTokenByRequest(request)); + return orderService.createOrder4(req,TokenUtils.getTokenByRequest(request)); } @ApiOperation(value = "订单支付") @@ -63,7 +63,7 @@ public class OrderController { @PostMapping("/notify") public Object orderNotify(@RequestBody String requestBody){ - return orderService.orderNotify2(requestBody); + return orderService.orderNotify4(requestBody); } @@ -71,7 +71,7 @@ public class OrderController { @PostMapping("/confirm") public Result confirmOrder(HttpServletRequest request,ConfirmOrderReq confirmOrderReq){ confirmOrderReq.setToken(TokenUtils.getTokenByRequest(request)); - return orderService.confirmOrder(confirmOrderReq); + return orderService.confirmOrder3(confirmOrderReq); } @ApiOperation(value = "上传自己的桌布") @@ -120,7 +120,7 @@ public class OrderController { @PostMapping("/cancel") public Result cancelOrder(HttpServletRequest request,CancelOrderReq cancelOrderReq){ cancelOrderReq.setToken(TokenUtils.getTokenByRequest(request)); - return orderService.cancelOrder(cancelOrderReq); + return orderService.cancelOrder2(cancelOrderReq); } } diff --git a/jeecg-boot-module-system/src/main/java/org/jeecg/modules/xcx/order/service/IOrderService.java b/jeecg-boot-module-system/src/main/java/org/jeecg/modules/xcx/order/service/IOrderService.java index 0290112..17660cf 100644 --- a/jeecg-boot-module-system/src/main/java/org/jeecg/modules/xcx/order/service/IOrderService.java +++ b/jeecg-boot-module-system/src/main/java/org/jeecg/modules/xcx/order/service/IOrderService.java @@ -42,6 +42,10 @@ public interface IOrderService { Result createOrder2(String req, String token); + Result createOrder3(String req, String token); + + Result createOrder4(String req, String token); + /** * 支付 * @param orderPayReq @@ -70,6 +74,20 @@ public interface IOrderService { */ Object orderNotify2(String requestBody); + /** + * 支付回调 + * @param requestBody + * @return + */ + Object orderNotify3(String requestBody); + + /** + * 支付回调 + * @param requestBody + * @return + */ + Object orderNotify4(String requestBody); + /** * 申请退货/换货 * @param applyRefundOrderReq @@ -87,6 +105,10 @@ public interface IOrderService { */ Result confirmOrder(ConfirmOrderReq confirmOrderReq); + Result confirmOrder2(ConfirmOrderReq confirmOrderReq); + + Result confirmOrder3(ConfirmOrderReq confirmOrderReq); + /** * 上传桌布 * @param uploadTableclothReq @@ -108,6 +130,8 @@ public interface IOrderService { */ Result cancelOrder(CancelOrderReq cancelOrderReq); + Result cancelOrder2(CancelOrderReq cancelOrderReq); + /** * 换货订单支付接口 diff --git a/jeecg-boot-module-system/src/main/java/org/jeecg/modules/xcx/order/service/impl/OrderServiceImpl.java b/jeecg-boot-module-system/src/main/java/org/jeecg/modules/xcx/order/service/impl/OrderServiceImpl.java index 22d4884..992fc40 100644 --- a/jeecg-boot-module-system/src/main/java/org/jeecg/modules/xcx/order/service/impl/OrderServiceImpl.java +++ b/jeecg-boot-module-system/src/main/java/org/jeecg/modules/xcx/order/service/impl/OrderServiceImpl.java @@ -52,6 +52,7 @@ import org.jeecg.modules.hotelshop.service.IHotelShopService; import org.jeecg.modules.pay.MpWxPayService; import org.jeecg.modules.xcx.order.req.*; import org.jeecg.modules.xcx.order.service.IOrderService; +import org.springframework.beans.BeanUtils; import org.springframework.beans.factory.annotation.Value; import org.springframework.stereotype.Service; import org.springframework.transaction.annotation.Transactional; @@ -749,6 +750,571 @@ public class OrderServiceImpl implements IOrderService { } + @Override + public Result createOrder3(String req, String token) { + + Integer n = (Integer) redisUtil.get("create:order:"+token); + if(n != null){ + throw new JeecgBootException("请勿重复点击"); + } + redisUtil.set("create:order:"+token,1,3); + HanHaiMember hanHaiMember = shiroRealm.checkUserTokenIsEffectHanHaiAccount(token); + if(StringUtils.isBlank(req)){ + throw new JeecgBootException("请求错误,请刷新重试"); + } + List createOrderReqs = JSON.parseArray(req, CreateOrderReq.class); + if(createOrderReqs == null || createOrderReqs.size() == 0){ + throw new JeecgBootException("请求错误,请刷新重试"); + } + HotelShop hotelShop = hotelShopService.lambdaQuery() + .eq(HotelShop::getDelFlag, 0) + .eq(HotelShop::getId, hanHaiMember.getShopId()) + .one(); + + Long count = hotelAddressService.lambdaQuery() + .eq(HotelAddress::getDelFlag, 0) + .eq(HotelAddress::getUserId, hanHaiMember.getId()) + .count(); + if (count == 0){ + throw new JeecgBootException("请先添加地址"); + } + HotelAddress hotelAddress = hotelAddressService.lambdaQuery() + .eq(HotelAddress::getDelFlag, 0) + .eq(HotelAddress::getUserId, hanHaiMember.getId()) + .eq(HotelAddress::getId, createOrderReqs.get(0).getAddressId()) + .one(); + if(hotelAddress == null){ + throw new JeecgBootException("请选择地址"); + } + + //押金 + String depositPrice1 = hotelConfService.getConf("depositPrice"); + BigDecimal depositPrice = new BigDecimal(depositPrice1); + + //押金优惠券开关 + Integer couponFlag = Integer.parseInt(hotelConfService.getConf("couponFlag")); + //押金券额 + BigDecimal couponPrice = new BigDecimal(hotelConfService.getConf("couponPrice")); + //押金优惠券条件 + BigDecimal couponCondition = new BigDecimal(hotelConfService.getConf("couponCondition")); + + //租金优惠券开关 + Integer leaseCouponFlag = Integer.parseInt(hotelConfService.getConf("leaseCouponFlag")); + //租金券额 + BigDecimal leaseCouponPrice = new BigDecimal(hotelConfService.getConf("leaseCouponPrice")); + //租金优惠券条件 + BigDecimal leaseCouponCondition = new BigDecimal(hotelConfService.getConf("leaseCouponCondition")); + + + List hotelOrderDetails = new ArrayList<>(); + //总支付金额 + BigDecimal totalPrice = BigDecimal.ZERO; + //总租金费用 + BigDecimal totalRentPrice = BigDecimal.ZERO; + //总水洗费用 + BigDecimal totalwashPrice = BigDecimal.ZERO; + HotelOrderLog hotelOrderLog = new HotelOrderLog(); + hotelOrderLog.setId(IdWorker.getIdStr()); + + HotelOrder hotelOrder = new HotelOrder(); + hotelOrder.setId(IdWorker.getIdStr()); + hotelOrder.setUserName(hotelAddress.getName()); + hotelOrder.setUserPhone(hotelAddress.getPhone()); + hotelOrder.setUserAddress(hotelAddress.getAddress()+hotelAddress.getAddressDetail()); + hotelOrder.setUserId(hanHaiMember.getId()); + hotelOrder.setType(0); + hotelOrder.setStatus(0); + hotelOrder.setWashShopFlag(0); + hotelOrder.setOrderLogId(hotelOrderLog.getId()); + for (CreateOrderReq createOrderReq:createOrderReqs){ + HotelOrderDetail hotelOrderDetail = new HotelOrderDetail(); + hotelOrderDetail.setOrderId(hotelOrder.getId()); + + //租赁逻辑 + if(createOrderReq.getType() == 0){ + hotelOrder.setTitle("押金租赁"); + hotelOrderLog.setType(0); + if(StringUtils.isBlank(createOrderReq.getId())){ + throw new JeecgBootException("商品信息错误"); + } + HotelGoods hotelGoods = hotelGoodsService.lambdaQuery() + .eq(HotelGoods::getDelFlag, 0) + .eq(HotelGoods::getId, createOrderReq.getId()) + .one(); + if(hotelGoods == null){ + throw new JeecgBootException("商品信息错误"); + } + + if(StringUtils.isBlank(createOrderReq.getSkuId())){ + throw new JeecgBootException("请选择规格"); + } + + HotelGoodsSku hotelGoodsSku = hotelGoodsSkuService.lambdaQuery() + .eq(HotelGoodsSku::getDelFlag, 0) + .eq(HotelGoodsSku::getId, createOrderReq.getSkuId()) + .one(); + if(hotelGoodsSku == null){ + throw new JeecgBootException("规格信息错误"); + } + + HotelCategory hotelCategory = hotelCategoryService.lambdaQuery() + .eq(HotelCategory::getDelFlag, 0) + .eq(HotelCategory::getId, hotelGoods.getCategoryId()) + .one(); + + BigDecimal price = depositPrice.multiply(new BigDecimal(createOrderReq.getNum())); + totalPrice = totalPrice.add(price); + hotelOrder.setDeposit(totalPrice); + + + hotelOrderDetail.setPic(hotelGoods.getPic()); + hotelOrderDetail.setDeposit(price); + hotelOrderDetail.setGoodsId(hotelGoods.getId()); + hotelOrderDetail.setGoodsName(hotelGoods.getName()); + hotelOrderDetail.setSkuId(hotelGoodsSku.getId()); + hotelOrderDetail.setSku(hotelGoodsSku.getTitle()); + hotelOrderDetail.setNum(createOrderReq.getNum()); + hotelOrderDetail.setOrderPay(price); + hotelOrderDetail.setCategoryId(hotelCategory.getId()); + hotelOrderDetail.setOriginalPrice(price); + hotelOrderDetail.setOrderId(hotelOrder.getId()); + hotelOrderDetails.add(hotelOrderDetail); + }else if(createOrderReq.getType() == 1){//水洗逻辑 + hotelOrderLog.setType(1); + hotelOrder.setType(1); + hotelOrder.setStatus(3); + + HotelLeaseLog hotelLeaseLog = hotelLeaseLogService.lambdaQuery() + .eq(HotelLeaseLog::getDelFlag, 0) + .eq(HotelLeaseLog::getId, createOrderReq.getLeaseId()) + .eq(HotelLeaseLog::getUserId, hanHaiMember.getId()) + .one(); + if(hotelLeaseLog == null){ + throw new JeecgBootException("数据错误,请刷新重试"); + } + if(hotelLeaseLog.getLeaseFlag() == 1 && hotelLeaseLog.getStartTime() == null){ + throw new JeecgBootException("还未确认收货,无法水洗"); + } + int num = hotelLeaseLog.getNum() - hotelLeaseLog.getWashNum(); + if(num <= 0 || num hotelOrderDetailList = hotelOrderDetailService.lambdaQuery() + .eq(HotelOrderDetail::getDelFlag, 0) + .eq(HotelOrderDetail::getLeaseId, hotelLeaseLog.getId()) + .list(); + + if(hotelOrderDetailList != null && hotelOrderDetailList.size() > 0){ + HotelOrder hotelOrder1 = hotelOrderService.lambdaQuery() + .eq(HotelOrder::getDelFlag, 0) + .eq(HotelOrder::getType, 1) + .in(HotelOrder::getStatus, 4, 5, 6, 16) + .eq(HotelOrder::getId, hotelOrderDetailList.stream().map(HotelOrderDetail::getOrderId).collect(Collectors.toList())) + .one(); + if(hotelOrder1 != null){ + throw new JeecgBootException("该租赁正在水洗中"); + } + } + + + + hotelOrder.setOrderLogId(hotelOrderLog.getId()); + + + HotelCategory hotelCategory = hotelCategoryService.lambdaQuery() + .eq(HotelCategory::getDelFlag, 0) + .eq(HotelCategory::getId, hotelLeaseLog.getCategoryId()) + .one(); + + /*相差天数*/ + Long untilDay = new Long(0); +// BigDecimal sumDepositPrice = BigDecimal.ZERO; + + List hotelLeaseLogList = hotelLeaseLogService.lambdaQuery() + .eq(HotelLeaseLog::getDelFlag, 0) + .eq(HotelLeaseLog::getLeaseFlag, 1) + .eq(HotelLeaseLog::getUserId, hanHaiMember.getId()) + .list(); + + for (HotelLeaseLog hotelLeaseLog2:hotelLeaseLogList){ +// if(hotelLeaseLog.getLeaseFlag() == 1){ + HotelGoodsSku hotelGoodsSku = hotelGoodsSkuService.lambdaQuery() + .eq(HotelGoodsSku::getDelFlag, 0) + .eq(HotelGoodsSku::getId, hotelLeaseLog2.getSkuId()) + .one(); + if(hotelGoodsSku == null){ + throw new JeecgBootException("规格信息错误"); + } + untilDay = DateUtils2.getUntilDay(hotelLeaseLog2.getStartTime(), DateUtils2.getDate(DateUtils2.getNowDate())); +// untilDay = untilDay == null + /*租金费用*/ + BigDecimal sumDepositPrice = hotelGoodsSku.getPrice().multiply(new BigDecimal(untilDay).multiply(new BigDecimal(hotelLeaseLog2.getNum()))); + totalRentPrice = totalRentPrice.add(sumDepositPrice); +// } + } + + + + + + /*水洗费用*/ + BigDecimal washPrice = hotelCategory.getPrice().multiply(new BigDecimal(createOrderReq.getNum())); + totalwashPrice = totalwashPrice.add(washPrice); + /*总费用*/ + BigDecimal countPrice = totalRentPrice.add(washPrice); + totalPrice = totalPrice.add(countPrice); + + hotelOrder.setTitle("水洗订单"); + hotelOrderDetail.setPic(hotelLeaseLog.getGoodsPic()); + hotelOrder.setShopId(hotelShop.getUserId()); + hotelOrderDetail.setRentPay(totalRentPrice); + hotelOrderDetail.setWashPay(washPrice); + hotelOrderDetail.setOrderPay(countPrice); + + hotelOrderDetail.setOriginalPrice(countPrice); + if(StringUtils.isNotBlank(hotelLeaseLog.getGoodsId())){ + hotelOrderDetail.setGoodsId(hotelLeaseLog.getGoodsId()); + } + + hotelOrderDetail.setGoodsName(hotelLeaseLog.getGoodsName()); + if(StringUtils.isNotBlank(hotelLeaseLog.getSkuId())){ + hotelOrderDetail.setSkuId(hotelLeaseLog.getSkuId()); + } + + hotelOrderDetail.setSku(hotelLeaseLog.getSku()); + hotelOrderDetail.setNum(createOrderReq.getNum()); + hotelOrderDetail.setLeaseId(hotelLeaseLog.getId()); + hotelOrderDetail.setOrderId(hotelOrder.getId()); + hotelOrderDetails.add(hotelOrderDetail); + + } + } + + BigDecimal originalPrice = totalPrice; + hotelOrder.setOriginalPrice(originalPrice); + hotelOrder.setDiscountPrice(couponPrice); + hotelOrder.setRentPay(totalRentPrice); + hotelOrder.setWashPay(totalwashPrice); + if(createOrderReqs.get(0).getType() == 0 && couponFlag == 1){ + + if(totalPrice.compareTo(couponCondition) >= 0){ + totalPrice = totalPrice.subtract(couponPrice); + } + }else if(createOrderReqs.get(0).getType() == 1 && leaseCouponFlag == 1){ + if(totalRentPrice.compareTo(leaseCouponCondition) >= 0){ + totalRentPrice = totalRentPrice.subtract(leaseCouponPrice); + totalPrice = totalRentPrice.add(totalwashPrice); + hotelOrder.setRentPay(totalRentPrice); + } + + } + hotelOrder.setOrderPay(totalPrice); + + hotelOrderLog.setOrderPay(totalPrice); + hotelOrderLog.setUserId(hanHaiMember.getId()); + hotelOrderLogService.save(hotelOrderLog); + hotelOrderDetailService.saveBatch(hotelOrderDetails); + hotelOrderService.save(hotelOrder); + + return Result.OK(hotelOrderLog); + } + + @Override + public Result createOrder4(String req, String token) { + + Integer n = (Integer) redisUtil.get("create:order:"+token); + if(n != null){ + throw new JeecgBootException("请勿重复点击"); + } + redisUtil.set("create:order:"+token,1,3); + HanHaiMember hanHaiMember = shiroRealm.checkUserTokenIsEffectHanHaiAccount(token); + if(StringUtils.isBlank(req)){ + throw new JeecgBootException("请求错误,请刷新重试"); + } + List createOrderReqs = JSON.parseArray(req, CreateOrderReq.class); + if(createOrderReqs == null || createOrderReqs.size() == 0){ + throw new JeecgBootException("请求错误,请刷新重试"); + } + HotelShop hotelShop = hotelShopService.lambdaQuery() + .eq(HotelShop::getDelFlag, 0) + .eq(HotelShop::getId, hanHaiMember.getShopId()) + .one(); + + Long count = hotelAddressService.lambdaQuery() + .eq(HotelAddress::getDelFlag, 0) + .eq(HotelAddress::getUserId, hanHaiMember.getId()) + .count(); + if (count == 0){ + throw new JeecgBootException("请先添加地址"); + } + HotelAddress hotelAddress = hotelAddressService.lambdaQuery() + .eq(HotelAddress::getDelFlag, 0) + .eq(HotelAddress::getUserId, hanHaiMember.getId()) + .eq(HotelAddress::getId, createOrderReqs.get(0).getAddressId()) + .one(); + if(hotelAddress == null){ + throw new JeecgBootException("请选择地址"); + } + + //押金 + String depositPrice1 = hotelConfService.getConf("depositPrice"); + BigDecimal depositPrice = new BigDecimal(depositPrice1); + + //押金优惠券开关 + Integer couponFlag = Integer.parseInt(hotelConfService.getConf("couponFlag")); + //押金券额 + BigDecimal couponPrice = new BigDecimal(hotelConfService.getConf("couponPrice")); + //押金优惠券条件 + BigDecimal couponCondition = new BigDecimal(hotelConfService.getConf("couponCondition")); + + //租金优惠券开关 + Integer leaseCouponFlag = Integer.parseInt(hotelConfService.getConf("leaseCouponFlag")); + //租金券额 + BigDecimal leaseCouponPrice = new BigDecimal(hotelConfService.getConf("leaseCouponPrice")); + //租金优惠券条件 + BigDecimal leaseCouponCondition = new BigDecimal(hotelConfService.getConf("leaseCouponCondition")); + + + List hotelOrderDetails = new ArrayList<>(); + //总支付金额 + BigDecimal totalPrice = BigDecimal.ZERO; + //总租金费用 + BigDecimal totalRentPrice = BigDecimal.ZERO; + //总水洗费用 + BigDecimal totalwashPrice = BigDecimal.ZERO; + HotelOrderLog hotelOrderLog = new HotelOrderLog(); + hotelOrderLog.setId(IdWorker.getIdStr()); + + HotelOrder hotelOrder = new HotelOrder(); + hotelOrder.setId(IdWorker.getIdStr()); + hotelOrder.setUserName(hotelAddress.getName()); + hotelOrder.setUserPhone(hotelAddress.getPhone()); + hotelOrder.setUserAddress(hotelAddress.getAddress()+hotelAddress.getAddressDetail()); + hotelOrder.setUserId(hanHaiMember.getId()); + hotelOrder.setType(0); + hotelOrder.setStatus(0); + hotelOrder.setWashShopFlag(0); + hotelOrder.setOrderLogId(hotelOrderLog.getId()); + for (CreateOrderReq createOrderReq:createOrderReqs){ + HotelOrderDetail hotelOrderDetail = new HotelOrderDetail(); + hotelOrderDetail.setOrderId(hotelOrder.getId()); + + //租赁逻辑 + if(createOrderReq.getType() == 0){ + hotelOrder.setTitle("押金租赁"); + hotelOrderLog.setType(0); + if(StringUtils.isBlank(createOrderReq.getId())){ + throw new JeecgBootException("商品信息错误"); + } + HotelGoods hotelGoods = hotelGoodsService.lambdaQuery() + .eq(HotelGoods::getDelFlag, 0) + .eq(HotelGoods::getId, createOrderReq.getId()) + .one(); + if(hotelGoods == null){ + throw new JeecgBootException("商品信息错误"); + } + + if(StringUtils.isBlank(createOrderReq.getSkuId())){ + throw new JeecgBootException("请选择规格"); + } + + HotelGoodsSku hotelGoodsSku = hotelGoodsSkuService.lambdaQuery() + .eq(HotelGoodsSku::getDelFlag, 0) + .eq(HotelGoodsSku::getId, createOrderReq.getSkuId()) + .one(); + if(hotelGoodsSku == null){ + throw new JeecgBootException("规格信息错误"); + } + + HotelCategory hotelCategory = hotelCategoryService.lambdaQuery() + .eq(HotelCategory::getDelFlag, 0) + .eq(HotelCategory::getId, hotelGoods.getCategoryId()) + .one(); + + BigDecimal price = depositPrice.multiply(new BigDecimal(createOrderReq.getNum())); + totalPrice = totalPrice.add(price); + hotelOrder.setDeposit(totalPrice); + + + hotelOrderDetail.setPic(hotelGoods.getPic()); + hotelOrderDetail.setDeposit(price); + hotelOrderDetail.setGoodsId(hotelGoods.getId()); + hotelOrderDetail.setGoodsName(hotelGoods.getName()); + hotelOrderDetail.setSkuId(hotelGoodsSku.getId()); + hotelOrderDetail.setSku(hotelGoodsSku.getTitle()); + hotelOrderDetail.setNum(createOrderReq.getNum()); + hotelOrderDetail.setOrderPay(price); + hotelOrderDetail.setCategoryId(hotelCategory.getId()); + hotelOrderDetail.setOriginalPrice(price); + hotelOrderDetail.setOrderId(hotelOrder.getId()); + hotelOrderDetails.add(hotelOrderDetail); + }else if(createOrderReq.getType() == 1){//水洗逻辑 + hotelOrderLog.setType(1); + hotelOrder.setType(1); + hotelOrder.setStatus(3); + + HotelLeaseLog hotelLeaseLog = hotelLeaseLogService.lambdaQuery() + .eq(HotelLeaseLog::getDelFlag, 0) + .eq(HotelLeaseLog::getId, createOrderReq.getLeaseId()) + .eq(HotelLeaseLog::getUserId, hanHaiMember.getId()) + .one(); + if(hotelLeaseLog == null){ + throw new JeecgBootException("数据错误,请刷新重试"); + } + if(hotelLeaseLog.getLeaseFlag() == 1 && hotelLeaseLog.getStartTime() == null){ + throw new JeecgBootException("还未确认收货,无法水洗"); + } + HotelCategory hotelCategory = hotelCategoryService.lambdaQuery() + .eq(HotelCategory::getDelFlag, 0) + .eq(HotelCategory::getId, hotelLeaseLog.getCategoryId()) + .one(); + int num = hotelLeaseLog.getNum() - createOrderReq.getNum(); + HotelLeaseLog newLeaseLog = null; + if(num > 0){ + //新物品 + newLeaseLog = new HotelLeaseLog(); + BeanUtils.copyProperties(hotelLeaseLog, newLeaseLog); + newLeaseLog.setId(IdWorker.getIdStr()); + newLeaseLog.setNum(createOrderReq.getNum()); + BigDecimal multiply1 = hotelCategory.getPrice().multiply(new BigDecimal(createOrderReq.getNum())); + newLeaseLog.setPrice(multiply1); + newLeaseLog.setPid(hotelLeaseLog.getId()); + newLeaseLog.setCreateTime(new Date()); + + //旧物品修改 + HotelLeaseLog hotelLeaseLog1 = new HotelLeaseLog(); + hotelLeaseLog1.setId(hotelLeaseLog.getId()); + hotelLeaseLog1.setNum(num); + BigDecimal multiply = hotelCategory.getPrice().multiply(new BigDecimal(num)); + hotelLeaseLog1.setPrice(multiply); + hotelLeaseLogService.updateById(hotelLeaseLog1); + } + + + List hotelOrderDetailList = hotelOrderDetailService.lambdaQuery() + .eq(HotelOrderDetail::getDelFlag, 0) + .eq(HotelOrderDetail::getLeaseId, hotelLeaseLog.getId()) + .list(); + + if(hotelOrderDetailList != null && hotelOrderDetailList.size() > 0){ + HotelOrder hotelOrder1 = hotelOrderService.lambdaQuery() + .eq(HotelOrder::getDelFlag, 0) + .eq(HotelOrder::getType, 1) + .in(HotelOrder::getStatus, 4, 5, 6, 16) + .eq(HotelOrder::getId, hotelOrderDetailList.stream().map(HotelOrderDetail::getOrderId).collect(Collectors.toList())) + .one(); + if(hotelOrder1 != null){ + throw new JeecgBootException("该租赁正在水洗中"); + } + } + + + + hotelOrder.setOrderLogId(hotelOrderLog.getId()); + + + + + /*相差天数*/ + Long untilDay = new Long(0); +// BigDecimal sumDepositPrice = BigDecimal.ZERO; + + List hotelLeaseLogList = hotelLeaseLogService.lambdaQuery() + .eq(HotelLeaseLog::getDelFlag, 0) + .eq(HotelLeaseLog::getLeaseFlag, 1) + .eq(HotelLeaseLog::getUserId, hanHaiMember.getId()) + .list(); + + for (HotelLeaseLog hotelLeaseLog2:hotelLeaseLogList){ +// if(hotelLeaseLog.getLeaseFlag() == 1){ + HotelGoodsSku hotelGoodsSku = hotelGoodsSkuService.lambdaQuery() + .eq(HotelGoodsSku::getDelFlag, 0) + .eq(HotelGoodsSku::getId, hotelLeaseLog2.getSkuId()) + .one(); + if(hotelGoodsSku == null){ + throw new JeecgBootException("规格信息错误"); + } + untilDay = DateUtils2.getUntilDay(hotelLeaseLog2.getStartTime(), DateUtils2.getDate(DateUtils2.getNowDate())); +// untilDay = untilDay == null + /*租金费用*/ + BigDecimal sumDepositPrice = hotelGoodsSku.getPrice().multiply(new BigDecimal(untilDay).multiply(new BigDecimal(hotelLeaseLog2.getNum()))); + totalRentPrice = totalRentPrice.add(sumDepositPrice); +// } + } + + + + + + /*水洗费用*/ + BigDecimal washPrice = hotelCategory.getPrice().multiply(new BigDecimal(createOrderReq.getNum())); + totalwashPrice = totalwashPrice.add(washPrice); + /*总费用*/ + BigDecimal countPrice = totalRentPrice.add(washPrice); + totalPrice = totalPrice.add(countPrice); + + hotelOrder.setTitle("水洗订单"); + hotelOrderDetail.setPic(hotelLeaseLog.getGoodsPic()); + hotelOrder.setShopId(hotelShop.getUserId()); + hotelOrderDetail.setRentPay(totalRentPrice); + hotelOrderDetail.setWashPay(washPrice); + hotelOrderDetail.setOrderPay(countPrice); + + hotelOrderDetail.setOriginalPrice(countPrice); + if(StringUtils.isNotBlank(hotelLeaseLog.getGoodsId())){ + hotelOrderDetail.setGoodsId(hotelLeaseLog.getGoodsId()); + } + + hotelOrderDetail.setGoodsName(hotelLeaseLog.getGoodsName()); + if(StringUtils.isNotBlank(hotelLeaseLog.getSkuId())){ + hotelOrderDetail.setSkuId(hotelLeaseLog.getSkuId()); + } + + hotelOrderDetail.setSku(hotelLeaseLog.getSku()); + hotelOrderDetail.setNum(createOrderReq.getNum()); + hotelOrderDetail.setLeaseId(newLeaseLog == null ?hotelLeaseLog.getId():newLeaseLog.getId()); + hotelOrderDetail.setOrderId(hotelOrder.getId()); + hotelOrderDetails.add(hotelOrderDetail); + + //新增新物品 + if(newLeaseLog != null){ + hotelLeaseLogService.save(newLeaseLog); + } + } + } + + BigDecimal originalPrice = totalPrice; + hotelOrder.setOriginalPrice(originalPrice); + hotelOrder.setDiscountPrice(couponPrice); + hotelOrder.setRentPay(totalRentPrice); + hotelOrder.setWashPay(totalwashPrice); + if(createOrderReqs.get(0).getType() == 0 && couponFlag == 1){ + + if(totalPrice.compareTo(couponCondition) >= 0){ + totalPrice = totalPrice.subtract(couponPrice); + } + }else if(createOrderReqs.get(0).getType() == 1 && leaseCouponFlag == 1){ + if(totalRentPrice.compareTo(leaseCouponCondition) >= 0){ + totalRentPrice = totalRentPrice.subtract(leaseCouponPrice); + totalPrice = totalRentPrice.add(totalwashPrice); + hotelOrder.setRentPay(totalRentPrice); + } + + } + hotelOrder.setOrderPay(totalPrice); + + hotelOrderLog.setOrderPay(totalPrice); + hotelOrderLog.setUserId(hanHaiMember.getId()); + hotelOrderLogService.save(hotelOrderLog); + hotelOrderDetailService.saveBatch(hotelOrderDetails); + hotelOrderService.save(hotelOrder); + + + return Result.OK(hotelOrderLog); + } + + @Transactional(rollbackFor = Exception.class) @Override public Result orderPay(OrderPayReq orderPayReq) { @@ -762,227 +1328,668 @@ public class OrderServiceImpl implements IOrderService { String orderNo = hotelOrderLog.getId(); HotelCouponLog hotelCouponLog = hotelCouponLogService.lambdaQuery() .eq(HotelCouponLog::getDelFlag, 0) - .eq(HotelCouponLog::getStatus,0) - .eq(HotelCouponLog::getUserId, hanHaiMember.getId()) - .eq(HotelCouponLog::getId, orderPayReq.getCouponId()) + .eq(HotelCouponLog::getStatus,0) + .eq(HotelCouponLog::getUserId, hanHaiMember.getId()) + .eq(HotelCouponLog::getId, orderPayReq.getCouponId()) + .one(); + +// if(hotelOrderLog.getType() == 1){ +// hotelOrderService.lambdaQuery() +// .eq(HotelOrder::getDelFlag, 0) +// .eq(HotelOrder::getType, 1) +// .eq(HotelOrder::get,) +// HotelOrder hotelOrder1 = hotelOrderService.lambdaQuery() +// .eq(HotelOrder::getDelFlag, 0) +// .eq(HotelOrder::getType, 1) +// .in(HotelOrder::getStatus, 4, 5, 6, 16) +// .eq(HotelOrder::getLeaseId, hotelLeaseLog.getId()) +// .one(); +// if(hotelOrder1 != null){ +// throw new JeecgBootException("该租赁正在水洗中"); +// } +// } + + //0可使用优惠券 1不可以 + Integer use = 1; + if(hotelCouponLog!= null){ + if(hotelCouponLog.getType() == 0){ + Long nowMill = DateUtils2.getMilliSecond(DateUtils2.getNowDate()); + if(hotelCouponLog.getEndTime() != null){ + if(nowMill < DateUtils2.getMilliSecond(hotelCouponLog.getEndTime().toString())){ + use = 0; + } + }else{ + String couponTime = hotelConfService.getConf("couponTime"); + String[] split = StringUtils.split(couponTime, "="); + if(nowMill > DateUtils2.getMilliSecond(split[0]) || nowMill < DateUtils2.getMilliSecond(split[1])){ + use = 0; + } + } + }else if(hotelCouponLog.getType() == 1){ + use = 0; + } + + } + + + + HttpServletRequest req = SpringContextUtils.getHttpServletRequest(); + BigDecimal multiply = hotelOrderLog.getOrderPay(); + HotelOrderLog hotelOrderLog1 = null; + HotelOrder hotelOrder1 = null; + //租金 + BigDecimal rentPay = BigDecimal.ZERO; + BigDecimal washPay = BigDecimal.ZERO; + if(StringUtils.isNotBlank(orderPayReq.getOrderId()) && hotelOrderLog.getType() == 0){ + HotelOrder hotelOrder = hotelOrderService.lambdaQuery() + .eq(HotelOrder::getDelFlag, 0) + .eq(HotelOrder::getId, orderPayReq.getOrderId()) + .eq(HotelOrder::getUserId, hanHaiMember.getId()) + .one(); + + + hotelOrderLog1 = new HotelOrderLog(); + hotelOrderLog1.setId(IdWorker.getIdStr()); + hotelOrderLog1.setType(hotelOrderLog.getType()); + hotelOrderLog1.setOrderPay(hotelOrder.getOrderPay()); + hotelOrderLog1.setUserId(hotelOrderLog.getUserId()); + multiply = hotelOrderLog1.getOrderPay(); + orderNo = hotelOrderLog1.getId(); + + hotelOrder1 = new HotelOrder(); + hotelOrder1.setId(hotelOrder.getId()); + hotelOrder1.setOrderLogId(hotelOrderLog1.getId()); + } + + if(use == 0){ + if(hotelOrderLog1 == null){ + if(hotelOrderLog.getOrderPay().compareTo(hotelCouponLog.getConditionPrice()) >= 0){ + if(hotelOrderLog.getType() == 0 && hotelCouponLog.getUseType() == 0){ + multiply = hotelOrderLog.getOrderPay().subtract(hotelCouponLog.getPrice()); + + HotelCouponLog hotelCouponLog1 = new HotelCouponLog(); + hotelCouponLog1.setId(hotelCouponLog.getId()); + hotelCouponLog1.setOrderLogId(hotelOrderLog.getId()); + hotelCouponLogService.updateById(hotelCouponLog1); + + HotelOrderLog hotelOrderLog2 = new HotelOrderLog(); + hotelOrderLog2.setId(hotelOrderLog.getId()); + hotelOrderLog2.setDiscountOrderPay(multiply); + hotelOrderLogService.updateById(hotelOrderLog2); + }else if(hotelOrderLog.getType() == 1 && hotelCouponLog.getUseType() == 1){//租金 + HotelOrder hotelOrder = hotelOrderService.lambdaQuery() + .eq(HotelOrder::getDelFlag, 0) + .eq(HotelOrder::getOrderLogId, hotelOrderLog.getId()) + .one(); + rentPay = (hotelOrder.getRentPay() == null?BigDecimal.ZERO:hotelOrder.getRentPay()).subtract(hotelCouponLog.getPrice()); + multiply = (hotelOrder.getWashPay() == null?BigDecimal.ZERO:hotelOrder.getWashPay()).add(rentPay); + HotelCouponLog hotelCouponLog1 = new HotelCouponLog(); + hotelCouponLog1.setId(hotelCouponLog.getId()); + hotelCouponLog1.setOrderLogId(hotelOrderLog.getId()); + hotelCouponLogService.updateById(hotelCouponLog1); + + HotelOrderLog hotelOrderLog2 = new HotelOrderLog(); + hotelOrderLog2.setId(hotelOrderLog.getId()); + hotelOrderLog2.setDiscountOrderPay(multiply); + hotelOrderLogService.updateById(hotelOrderLog2); + + HotelOrder hotelOrder2 = new HotelOrder(); + hotelOrder2.setId(hotelOrder.getId()); + hotelOrder2.setRentPay(rentPay); + hotelOrderService.updateById(hotelOrder2); + + }else if(hotelOrderLog.getType() == 1 && hotelCouponLog.getUseType() == 2){//水洗 + HotelOrder hotelOrder = hotelOrderService.lambdaQuery() + .eq(HotelOrder::getDelFlag, 0) + .eq(HotelOrder::getOrderLogId, hotelOrderLog.getId()) + .one(); + washPay = hotelOrder.getWashPay().subtract(hotelCouponLog.getPrice()); + multiply = (hotelOrder.getRentPay() == null?BigDecimal.ZERO:hotelOrder.getRentPay()).add(washPay); + HotelCouponLog hotelCouponLog1 = new HotelCouponLog(); + hotelCouponLog1.setId(hotelCouponLog.getId()); + hotelCouponLog1.setOrderLogId(hotelOrderLog.getId()); + hotelCouponLogService.updateById(hotelCouponLog1); + + HotelOrderLog hotelOrderLog2 = new HotelOrderLog(); + hotelOrderLog2.setId(hotelOrderLog.getId()); + hotelOrderLog2.setDiscountOrderPay(multiply); + hotelOrderLogService.updateById(hotelOrderLog2); + + HotelOrder hotelOrder2 = new HotelOrder(); + hotelOrder2.setId(hotelOrder.getId()); + hotelOrder2.setWashPay(washPay); + hotelOrderService.updateById(hotelOrder2); + } + + } + }else{ + if(hotelOrderLog1.getOrderPay().compareTo(hotelCouponLog.getConditionPrice()) >= 0){ + multiply = hotelOrderLog1.getOrderPay().subtract(hotelCouponLog.getPrice()); + + HotelCouponLog hotelCouponLog1 = new HotelCouponLog(); + hotelCouponLog1.setId(hotelCouponLog.getId()); + hotelCouponLog1.setOrderLogId(hotelOrderLog.getId()); + hotelCouponLogService.updateById(hotelCouponLog1); + + hotelOrderLog1.setDiscountOrderPay(multiply); + } + } + + + } + + if(hotelOrderLog1 != null){ + hotelOrderLogService.save(hotelOrderLog1); + hotelOrderService.updateById(hotelOrder1); + } + + multiply = multiply.multiply(new BigDecimal(100)); +// HotelOrder hotelOrder = hotelOrderService.lambdaQuery() +// .eq(HotelOrder::getDelFlag, 0) +// .eq(HotelOrder::getId, orderPayReq.getId()) +// .one(); +// +// HotelGoods hotelGoods = hotelGoodsService.lambdaQuery() +// .eq(HotelGoods::getDelFlag, 0) +// .eq(HotelGoods::getId, hotelOrder.getGoodsId()) +// .one(); + + + Object order = mpWxPayService.createOrder("酒店桌布", oConvertUtils.getIpAddrByRequest(req), hotelOrderLog.getId(), multiply.intValue(), orderNo, hanHaiMember.getAppletOpenid(),orderNotifyUrl,"{}"); + + return Result.OK(order); + } + + @Override + public Result orderPay2(OrderPayReq orderPayReq) { + HanHaiMember hanHaiMember = shiroRealm.checkUserTokenIsEffectHanHaiAccount(orderPayReq.getToken()); + + HotelOrderLog hotelOrderLog = hotelOrderLogService.lambdaQuery() + .eq(HotelOrderLog::getDelFlag, 0) + .eq(HotelOrderLog::getId, orderPayReq.getId()) + .eq(HotelOrderLog::getIsPay, 0) + .one(); + if(hotelOrderLog.getPayInfo() != null){ + + Long time = DateUtils2.getMilliSecond(DateUtils2.getYYYYMMDDHHMMSS(hotelOrderLog.getCreateTime()))+ 3600000L; + if(time < DateUtils2.getMilliSecond(DateUtils2.getNowDate())){ + HotelOrder order = hotelOrderService.lambdaQuery() + .eq(HotelOrder::getDelFlag, 0) + .eq(HotelOrder::getOrderLogId, hotelOrderLog.getId()) + .one(); +// HotelOrder hotelOrder = new HotelOrder(); +// hotelOrder.setId(order.getId()); +// hotelOrder.setDelFlag(1); + hotelOrderService.removeById(order.getId()); + hotelOrderLogService.removeById(hotelOrderLog.getId()); + + + return Result.error("该订单已超过一小时,无法继续支付,请重新创建订单"); + } + + Object jsonObject = JSON.parseObject(hotelOrderLog.getPayInfo()); + return Result.OK(jsonObject); + } + String orderNo = hotelOrderLog.getId(); + + HttpServletRequest req = SpringContextUtils.getHttpServletRequest(); + BigDecimal multiply = hotelOrderLog.getOrderPay(); + + multiply = multiply.multiply(new BigDecimal(100)); + Object order = mpWxPayService.createOrder("酒店桌布", oConvertUtils.getIpAddrByRequest(req), hotelOrderLog.getId(), multiply.intValue(), orderNo, hanHaiMember.getAppletOpenid(),orderNotifyUrl,"{}"); + + HotelOrderLog hotelOrderLog1 = new HotelOrderLog(); + hotelOrderLog1.setId(orderNo); + hotelOrderLog1.setPayInfo(JSON.toJSONString(order)); + hotelOrderLogService.updateById(hotelOrderLog1); + + return Result.OK(order); + } + + @Transactional(rollbackFor = Exception.class) + @Override + public Object orderNotify(String requestBody) { + WxPayOrderNotifyResult notify = mpWxPayService.notify(requestBody); + //对比outTradeNo进行业务处理 + if (notify == null){ + //会继续通知 + return "FAIL"; + } + String outTradeNo = notify.getOutTradeNo(); + System.err.println(outTradeNo); + HotelOrderLog hotelOrderLog = hotelOrderLogService.lambdaQuery() + .eq(HotelOrderLog::getDelFlag, 0) + .eq(HotelOrderLog::getId, outTradeNo) + .eq(HotelOrderLog::getIsPay, 0) + .one(); + List hotelOrderList = hotelOrderService.lambdaQuery() + .eq(HotelOrder::getDelFlag, 0) + .eq(HotelOrder::getOrderLogId, hotelOrderLog.getId()) + .list(); + + /*订单未找到*/ + if(hotelOrderList == null || hotelOrderList.size() == 0){ + System.err.println("订单未找到"); + return "FAIL"; + } + HotelCouponLog hotelCouponLog = hotelCouponLogService.lambdaQuery() + .eq(HotelCouponLog::getDelFlag, 0) + .eq(HotelCouponLog::getStatus, 0) + .eq(HotelCouponLog::getOrderLogId, hotelOrderLog.getId()) .one(); -// if(hotelOrderLog.getType() == 1){ -// hotelOrderService.lambdaQuery() -// .eq(HotelOrder::getDelFlag, 0) -// .eq(HotelOrder::getType, 1) -// .eq(HotelOrder::get,) -// HotelOrder hotelOrder1 = hotelOrderService.lambdaQuery() -// .eq(HotelOrder::getDelFlag, 0) -// .eq(HotelOrder::getType, 1) -// .in(HotelOrder::getStatus, 4, 5, 6, 16) -// .eq(HotelOrder::getLeaseId, hotelLeaseLog.getId()) -// .one(); -// if(hotelOrder1 != null){ -// throw new JeecgBootException("该租赁正在水洗中"); -// } -// } + BigDecimal divide = BigDecimal.ONE; + if(hotelCouponLog != null){ + HotelCouponLog hotelCouponLog1 = new HotelCouponLog(); + hotelCouponLog1.setId(hotelCouponLog.getId()); + hotelCouponLog1.setStatus(1); + hotelCouponLogService.updateById(hotelCouponLog1); + divide = hotelOrderLog.getDiscountOrderPay().divide(hotelOrderLog.getOrderPay(), 2, BigDecimal.ROUND_HALF_UP); - //0可使用优惠券 1不可以 - Integer use = 1; - if(hotelCouponLog!= null){ - if(hotelCouponLog.getType() == 0){ - Long nowMill = DateUtils2.getMilliSecond(DateUtils2.getNowDate()); - if(hotelCouponLog.getEndTime() != null){ - if(nowMill < DateUtils2.getMilliSecond(hotelCouponLog.getEndTime().toString())){ - use = 0; + } + + + List hotelOrders = new ArrayList<>(); + List hotelLeaseLogs = new ArrayList<>(); + List orders = new ArrayList<>(); + Integer type = 0; + Integer n = 0; + for (HotelOrder hotelOrder:hotelOrderList) { + n = n+1; + /*租赁业务*/ + if(hotelOrder.getType() == 0){ + /*已经处理过订单*/ + if (hotelOrder.getStatus() !=0){ + return "SUCCESS"; + } + HotelLeaseLog hotelLeaseLog = new HotelLeaseLog(); + HotelLeaseLog hotelLeaseLog1 = new HotelLeaseLog(); +// if(hotelOrder.getWashShopFlag() == 1){//水洗店 + + + + + + + +// }else{//用户 + + //用户 + hotelLeaseLog.setUserId(hotelOrder.getUserId()); + hotelLeaseLog.setShopId(hotelOrder.getShopId()); + hotelLeaseLog.setOrderId(hotelOrder.getId()); + hotelLeaseLog.setGoodsId(hotelOrder.getGoodsId()); + hotelLeaseLog.setSkuId(hotelOrder.getSkuId()); + hotelLeaseLog.setGoodsName(hotelOrder.getGoodsName()); + hotelLeaseLog.setGoodsPic(hotelOrder.getPic()); + hotelLeaseLog.setSku(hotelOrder.getSku()); + hotelLeaseLog.setStatus(0); + hotelLeaseLog.setNum(hotelOrder.getNum()); + hotelLeaseLog.setPrice(hotelOrder.getDeposit()); + hotelLeaseLog.setCategoryId(hotelOrder.getCategoryId()); + + + HotelGoods hotelGoods = hotelGoodsService.lambdaQuery() + .eq(HotelGoods::getDelFlag, 0) + .eq(HotelGoods::getId, hotelOrder.getGoodsId()) + .one(); + + HotelGoodsSku hotelGoodsSku = hotelGoodsSkuService.lambdaQuery() + .eq(HotelGoodsSku::getDelFlag, 0) + .eq(HotelGoodsSku::getId, hotelOrder.getSkuId()) + .one(); + + HanHaiMember hanHaiMember = hanHaiMemberService.lambdaQuery() + .eq(HanHaiMember::getId, hotelOrder.getUserId()) + .one(); + + HotelShop hotelShop = hotelShopService.lambdaQuery() + .eq(HotelShop::getDelFlag, 0) + .eq(HotelShop::getId, hanHaiMember.getShopId()) + .one(); + + HotelCategory hotelCategory = hotelCategoryService.lambdaQuery() + .eq(HotelCategory::getDelFlag, 0) + .eq(HotelCategory::getId, hotelGoods.getCategoryId()) + .one(); + /*水洗店*/ + HotelOrder hotelOrder2 = new HotelOrder(); + hotelOrder2.setId(IdWorker.getIdStr()); + hotelOrder2.setTitle(hotelGoods.getName()); + hotelOrder2.setPic(hotelGoods.getPic()); + hotelOrder2.setUserName(hotelShop.getUserName()); + hotelOrder2.setUserPhone(hotelShop.getPhone()); + hotelOrder2.setUserAddress(hotelShop.getAddress()); + hotelOrder2.setUserId(hotelShop.getUserId()); + hotelOrder2.setDeposit(hotelOrder.getDeposit()); + hotelOrder2.setType(0); + hotelOrder2.setStatus(1); + hotelOrder2.setGoodsId(hotelGoods.getId()); + hotelOrder2.setGoodsName(hotelGoods.getName()); + hotelOrder2.setSkuId(hotelGoodsSku.getId()); + hotelOrder2.setSku(hotelGoodsSku.getTitle()); + hotelOrder2.setNum(hotelOrder.getNum()); + hotelOrder2.setOrderPay(hotelOrder.getOrderPay()); + hotelOrder2.setOrderLogId(hotelOrderLog.getId()); + hotelOrder2.setWashShopFlag(1); + hotelOrder2.setCategoryId(hotelCategory.getId()); + orders.add(hotelOrder2); + + + //水洗店 + hotelLeaseLog1.setUserId(hotelShop.getUserId()); + hotelLeaseLog1.setOrderId(hotelOrder2.getId()); + hotelLeaseLog1.setGoodsId(hotelOrder2.getGoodsId()); + hotelLeaseLog1.setSkuId(hotelOrder2.getSkuId()); + hotelLeaseLog1.setGoodsName(hotelOrder2.getGoodsName()); + hotelLeaseLog1.setGoodsPic(hotelOrder2.getPic()); + hotelLeaseLog1.setSku(hotelOrder2.getSku()); + hotelLeaseLog1.setStatus(0); + hotelLeaseLog1.setNum(hotelOrder2.getNum()); + hotelLeaseLog1.setPrice(hotelOrder2.getDeposit()); + hotelLeaseLog1.setFormUserId(hotelOrderLog.getUserId()); + hotelLeaseLog1.setCategoryId(hotelOrder2.getCategoryId()); +// } + + hotelLeaseLogs.add(hotelLeaseLog1); + hotelLeaseLogs.add(hotelLeaseLog); + + HotelOrder hotelOrder1 = new HotelOrder(); + hotelOrder1.setId(hotelOrder.getId()); + hotelOrder1.setStatus(1); + BigDecimal multiply = hotelOrder.getOriginalPrice().multiply(divide); + if(n == hotelOrderList.size()){ + BigDecimal add = multiply; + for (HotelOrder hotelOrder3:hotelOrders){ + add = add.add(hotelOrder3.getOrderPay()); + if(add.compareTo(hotelOrderLog.getOrderPay()) == -1){ + multiply = multiply.add(hotelOrderLog.getOrderPay().subtract(add)); + }else if(add.compareTo(hotelOrderLog.getOrderPay()) == 1){ + multiply = multiply.subtract(hotelOrderLog.getOrderPay().subtract(add)); + } } - }else{ - String couponTime = hotelConfService.getConf("couponTime"); - String[] split = StringUtils.split(couponTime, "="); - if(nowMill > DateUtils2.getMilliSecond(split[0]) || nowMill < DateUtils2.getMilliSecond(split[1])){ - use = 0; + } + hotelOrder1.setDiscountPrice(hotelOrder.getOriginalPrice().subtract(multiply)); + hotelOrder1.setOrderPay(multiply); + hotelOrders.add(hotelOrder1); + + }else if(hotelOrder.getType() == 1){/*水洗逻辑*/ + + + HotelOrder hotelOrder1 = new HotelOrder(); + hotelOrder1.setId(hotelOrder.getId()); + hotelOrder1.setStatus(4); + hotelOrder1.setOriginalPrice(hotelOrder.getOrderPay()); + + if(hotelCouponLog != null){ + BigDecimal subtract = hotelOrder.getOrderPay().subtract(hotelOrderLog.getDiscountOrderPay()); + hotelOrder1.setOrderPay(hotelOrderLog.getDiscountOrderPay()); + hotelOrder1.setDiscountPrice(subtract); + if(hotelCouponLog.getUseType() == 1){//租金 + hotelOrder1.setRentPay(subtract); + + }else if(hotelCouponLog.getUseType() == 2){ //水洗 + hotelOrder1.setWashPay(subtract); } } - }else if(hotelCouponLog.getType() == 1){ - use = 0; + hotelOrders.add(hotelOrder1); + + HotelLeaseLog hotelLeaseLog = hotelLeaseLogService.lambdaQuery() + .eq(HotelLeaseLog::getDelFlag, 0) + .eq(HotelLeaseLog::getId, hotelOrder.getLeaseId()) + .one(); + if(hotelLeaseLog == null){ + return "FAIL"; + } + if(hotelLeaseLog.getLeaseFlag() == 1){ + type = 1; + HotelLeaseLog hotelLeaseLog1 = new HotelLeaseLog(); + hotelLeaseLog1.setId(hotelLeaseLog.getId()); + hotelLeaseLog1.setStartTime(new Date()); + hotelLeaseLogs.add(hotelLeaseLog1); + } + + } } + HotelOrderLog hotelOrderLog1 = new HotelOrderLog(); + hotelOrderLog1.setId(hotelOrderLog.getId()); + hotelOrderLog1.setIsPay(1); + hotelOrderLogService.updateById(hotelOrderLog1); + + if(type == 0){ + hotelLeaseLogService.saveBatch(hotelLeaseLogs); + hotelOrderService.saveBatch(orders); + }else{ + hotelLeaseLogService.updateBatchById(hotelLeaseLogs); + + } + + hotelOrderService.updateBatchById(hotelOrders); + + + //不再通知该结果 + return "SUCCESS"; + } + + + @Transactional(rollbackFor = Exception.class) + @Override + public Object orderNotify2(String requestBody) { + WxPayOrderNotifyResult notify = mpWxPayService.notify(requestBody); + //对比outTradeNo进行业务处理 + if (notify == null){ + //会继续通知 + return "FAIL"; + } + String outTradeNo = notify.getOutTradeNo(); + System.err.println(outTradeNo); + HotelOrderLog hotelOrderLog = hotelOrderLogService.lambdaQuery() + .eq(HotelOrderLog::getDelFlag, 0) + .eq(HotelOrderLog::getId, outTradeNo) + .eq(HotelOrderLog::getIsPay, 0) + .one(); + HotelOrder hotelOrder = hotelOrderService.lambdaQuery() + .eq(HotelOrder::getDelFlag, 0) + .eq(HotelOrder::getOrderLogId, hotelOrderLog.getId()) + .one(); + + /*订单未找到*/ + if(hotelOrder == null ){ + System.err.println("订单未找到"); + return "FAIL"; + } + + /*已经处理过订单*/ + if (hotelOrder.getStatus() !=0 && hotelOrder.getStatus() != 3){ + return "SUCCESS"; + } + List hotelOrderDetails = hotelOrderDetailService.lambdaQuery() + .eq(HotelOrderDetail::getDelFlag, 0) + .eq(HotelOrderDetail::getOrderId, hotelOrder.getId()) + .list(); + HanHaiMember hanHaiMember = hanHaiMemberService.lambdaQuery() + .eq(HanHaiMember::getId, hotelOrder.getUserId()) + .one(); - HttpServletRequest req = SpringContextUtils.getHttpServletRequest(); - BigDecimal multiply = hotelOrderLog.getOrderPay(); - HotelOrderLog hotelOrderLog1 = null; - HotelOrder hotelOrder1 = null; - //租金 - BigDecimal rentPay = BigDecimal.ZERO; - BigDecimal washPay = BigDecimal.ZERO; - if(StringUtils.isNotBlank(orderPayReq.getOrderId()) && hotelOrderLog.getType() == 0){ - HotelOrder hotelOrder = hotelOrderService.lambdaQuery() - .eq(HotelOrder::getDelFlag, 0) - .eq(HotelOrder::getId, orderPayReq.getOrderId()) - .eq(HotelOrder::getUserId, hanHaiMember.getId()) - .one(); + HotelShop hotelShop = hotelShopService.lambdaQuery() + .eq(HotelShop::getDelFlag, 0) + .eq(HotelShop::getId, hanHaiMember.getShopId()) + .one(); + HotelOrder shopOrder = new HotelOrder(); + shopOrder.setId(IdWorker.getIdStr()); + shopOrder.setTitle(hotelOrder.getTitle()); + List hotelOrderDetails1 = new ArrayList<>(); + List hotelLeaseLogs = new ArrayList<>(); + List hotelLeaseLogs2 = new ArrayList<>(); + List orders = new ArrayList<>(); + Integer type = 0; + for (HotelOrderDetail hotelOrderDetail:hotelOrderDetails) { + /*租赁业务*/ + if(hotelOrder.getType() == 0){ - hotelOrderLog1 = new HotelOrderLog(); - hotelOrderLog1.setId(IdWorker.getIdStr()); - hotelOrderLog1.setType(hotelOrderLog.getType()); - hotelOrderLog1.setOrderPay(hotelOrder.getOrderPay()); - hotelOrderLog1.setUserId(hotelOrderLog.getUserId()); - multiply = hotelOrderLog1.getOrderPay(); - orderNo = hotelOrderLog1.getId(); + HotelLeaseLog hotelLeaseLog = new HotelLeaseLog(); - hotelOrder1 = new HotelOrder(); - hotelOrder1.setId(hotelOrder.getId()); - hotelOrder1.setOrderLogId(hotelOrderLog1.getId()); - } - if(use == 0){ - if(hotelOrderLog1 == null){ - if(hotelOrderLog.getOrderPay().compareTo(hotelCouponLog.getConditionPrice()) >= 0){ - if(hotelOrderLog.getType() == 0 && hotelCouponLog.getUseType() == 0){ - multiply = hotelOrderLog.getOrderPay().subtract(hotelCouponLog.getPrice()); + //用户 + hotelLeaseLog.setUserId(hotelOrder.getUserId()); + hotelLeaseLog.setShopId(hotelOrder.getShopId()); + hotelLeaseLog.setOrderId(hotelOrder.getId()); + hotelLeaseLog.setOrderDetailId(hotelOrderDetail.getId()); + hotelLeaseLog.setGoodsId(hotelOrderDetail.getGoodsId()); + hotelLeaseLog.setSkuId(hotelOrderDetail.getSkuId()); + hotelLeaseLog.setGoodsName(hotelOrderDetail.getGoodsName()); + hotelLeaseLog.setGoodsPic(hotelOrderDetail.getPic()); + hotelLeaseLog.setSku(hotelOrderDetail.getSku()); + hotelLeaseLog.setStatus(0); + hotelLeaseLog.setNum(hotelOrderDetail.getNum()); + hotelLeaseLog.setPrice(hotelOrderDetail.getDeposit()); + hotelLeaseLog.setCategoryId(hotelOrderDetail.getCategoryId()); - HotelCouponLog hotelCouponLog1 = new HotelCouponLog(); - hotelCouponLog1.setId(hotelCouponLog.getId()); - hotelCouponLog1.setOrderLogId(hotelOrderLog.getId()); - hotelCouponLogService.updateById(hotelCouponLog1); - HotelOrderLog hotelOrderLog2 = new HotelOrderLog(); - hotelOrderLog2.setId(hotelOrderLog.getId()); - hotelOrderLog2.setDiscountOrderPay(multiply); - hotelOrderLogService.updateById(hotelOrderLog2); - }else if(hotelOrderLog.getType() == 1 && hotelCouponLog.getUseType() == 1){//租金 - HotelOrder hotelOrder = hotelOrderService.lambdaQuery() - .eq(HotelOrder::getDelFlag, 0) - .eq(HotelOrder::getOrderLogId, hotelOrderLog.getId()) - .one(); - rentPay = (hotelOrder.getRentPay() == null?BigDecimal.ZERO:hotelOrder.getRentPay()).subtract(hotelCouponLog.getPrice()); - multiply = (hotelOrder.getWashPay() == null?BigDecimal.ZERO:hotelOrder.getWashPay()).add(rentPay); - HotelCouponLog hotelCouponLog1 = new HotelCouponLog(); - hotelCouponLog1.setId(hotelCouponLog.getId()); - hotelCouponLog1.setOrderLogId(hotelOrderLog.getId()); - hotelCouponLogService.updateById(hotelCouponLog1); + HotelGoods hotelGoods = hotelGoodsService.lambdaQuery() + .eq(HotelGoods::getDelFlag, 0) + .eq(HotelGoods::getId, hotelOrderDetail.getGoodsId()) + .one(); - HotelOrderLog hotelOrderLog2 = new HotelOrderLog(); - hotelOrderLog2.setId(hotelOrderLog.getId()); - hotelOrderLog2.setDiscountOrderPay(multiply); - hotelOrderLogService.updateById(hotelOrderLog2); + HotelGoodsSku hotelGoodsSku = hotelGoodsSkuService.lambdaQuery() + .eq(HotelGoodsSku::getDelFlag, 0) + .eq(HotelGoodsSku::getId, hotelOrderDetail.getSkuId()) + .one(); - HotelOrder hotelOrder2 = new HotelOrder(); - hotelOrder2.setId(hotelOrder.getId()); - hotelOrder2.setRentPay(rentPay); - hotelOrderService.updateById(hotelOrder2); - }else if(hotelOrderLog.getType() == 1 && hotelCouponLog.getUseType() == 2){//水洗 - HotelOrder hotelOrder = hotelOrderService.lambdaQuery() - .eq(HotelOrder::getDelFlag, 0) - .eq(HotelOrder::getOrderLogId, hotelOrderLog.getId()) - .one(); - washPay = hotelOrder.getWashPay().subtract(hotelCouponLog.getPrice()); - multiply = (hotelOrder.getRentPay() == null?BigDecimal.ZERO:hotelOrder.getRentPay()).add(washPay); - HotelCouponLog hotelCouponLog1 = new HotelCouponLog(); - hotelCouponLog1.setId(hotelCouponLog.getId()); - hotelCouponLog1.setOrderLogId(hotelOrderLog.getId()); - hotelCouponLogService.updateById(hotelCouponLog1); - HotelOrderLog hotelOrderLog2 = new HotelOrderLog(); - hotelOrderLog2.setId(hotelOrderLog.getId()); - hotelOrderLog2.setDiscountOrderPay(multiply); - hotelOrderLogService.updateById(hotelOrderLog2); - HotelOrder hotelOrder2 = new HotelOrder(); - hotelOrder2.setId(hotelOrder.getId()); - hotelOrder2.setWashPay(washPay); - hotelOrderService.updateById(hotelOrder2); - } - } - }else{ - if(hotelOrderLog1.getOrderPay().compareTo(hotelCouponLog.getConditionPrice()) >= 0){ - multiply = hotelOrderLog1.getOrderPay().subtract(hotelCouponLog.getPrice()); + HotelCategory hotelCategory = hotelCategoryService.lambdaQuery() + .eq(HotelCategory::getDelFlag, 0) + .eq(HotelCategory::getId, hotelOrderDetail.getCategoryId()) + .one(); + /*水洗店*/ + HotelOrderDetail hotelOrderDetail1 = new HotelOrderDetail(); - HotelCouponLog hotelCouponLog1 = new HotelCouponLog(); - hotelCouponLog1.setId(hotelCouponLog.getId()); - hotelCouponLog1.setOrderLogId(hotelOrderLog.getId()); - hotelCouponLogService.updateById(hotelCouponLog1); + shopOrder.setUserName(hotelShop.getUserName()); + shopOrder.setUserPhone(hotelShop.getPhone()); + shopOrder.setUserAddress(hotelShop.getAddress()); + shopOrder.setUserId(hotelShop.getUserId()); + shopOrder.setDeposit(hotelOrder.getDeposit()); + shopOrder.setType(0); + shopOrder.setStatus(1); + shopOrder.setOrderLogId(hotelOrderLog.getId()); + shopOrder.setWashShopFlag(1); + hotelOrderDetail1.setId(IdWorker.getIdStr()); + hotelOrderDetail1.setPic(hotelGoods.getPic()); + hotelOrderDetail1.setGoodsId(hotelGoods.getId()); + hotelOrderDetail1.setGoodsName(hotelGoods.getName()); + hotelOrderDetail1.setSkuId(hotelGoodsSku.getId()); + hotelOrderDetail1.setSku(hotelGoodsSku.getTitle()); + hotelOrderDetail1.setNum(hotelOrderDetail.getNum()); + hotelOrderDetail1.setOrderPay(hotelOrderDetail.getOrderPay()); + hotelOrderDetail1.setCategoryId(hotelCategory.getId()); + hotelOrderDetail1.setOrderId(shopOrder.getId()); + hotelOrderDetails1.add(hotelOrderDetail1); - hotelOrderLog1.setDiscountOrderPay(multiply); - } - } + //水洗店 + HotelLeaseLog hotelLeaseLog1 = new HotelLeaseLog(); + hotelLeaseLog1.setUserId(hotelShop.getUserId()); + hotelLeaseLog1.setOrderId(shopOrder.getId()); + hotelLeaseLog1.setOrderDetailId(hotelOrderDetail1.getId()); + hotelLeaseLog1.setGoodsId(hotelOrderDetail.getGoodsId()); + hotelLeaseLog1.setSkuId(hotelOrderDetail.getSkuId()); + hotelLeaseLog1.setGoodsName(hotelOrderDetail.getGoodsName()); + hotelLeaseLog1.setGoodsPic(hotelOrderDetail.getPic()); + hotelLeaseLog1.setSku(hotelOrderDetail.getSku()); + hotelLeaseLog1.setStatus(0); + hotelLeaseLog1.setNum(hotelOrderDetail.getNum()); + hotelLeaseLog1.setPrice(hotelOrderDetail.getDeposit()); + hotelLeaseLog1.setFormUserId(hotelOrderLog.getUserId()); + hotelLeaseLog1.setCategoryId(hotelOrderDetail.getCategoryId()); - } + hotelLeaseLogs.add(hotelLeaseLog1); + hotelLeaseLogs.add(hotelLeaseLog); - if(hotelOrderLog1 != null){ - hotelOrderLogService.save(hotelOrderLog1); - hotelOrderService.updateById(hotelOrder1); - } - multiply = multiply.multiply(new BigDecimal(100)); -// HotelOrder hotelOrder = hotelOrderService.lambdaQuery() -// .eq(HotelOrder::getDelFlag, 0) -// .eq(HotelOrder::getId, orderPayReq.getId()) -// .one(); -// -// HotelGoods hotelGoods = hotelGoodsService.lambdaQuery() -// .eq(HotelGoods::getDelFlag, 0) -// .eq(HotelGoods::getId, hotelOrder.getGoodsId()) -// .one(); + }else if(hotelOrder.getType() == 1){/*水洗逻辑*/ - Object order = mpWxPayService.createOrder("酒店桌布", oConvertUtils.getIpAddrByRequest(req), hotelOrderLog.getId(), multiply.intValue(), orderNo, hanHaiMember.getAppletOpenid(),orderNotifyUrl,"{}"); - return Result.OK(order); - } + HotelLeaseLog hotelLeaseLog = hotelLeaseLogService.lambdaQuery() + .eq(HotelLeaseLog::getDelFlag, 0) + .eq(HotelLeaseLog::getId, hotelOrderDetail.getLeaseId()) + .one(); + if(hotelLeaseLog == null){ + return "FAIL"; + } + if(hotelLeaseLog.getLeaseFlag() == 1){ + type = 1; + HotelLeaseLog hotelLeaseLog1 = new HotelLeaseLog(); + hotelLeaseLog1.setId(hotelLeaseLog.getId()); + hotelLeaseLog1.setStartTime(new Date()); + hotelLeaseLogs.add(hotelLeaseLog1); + } - @Override - public Result orderPay2(OrderPayReq orderPayReq) { - HanHaiMember hanHaiMember = shiroRealm.checkUserTokenIsEffectHanHaiAccount(orderPayReq.getToken()); - HotelOrderLog hotelOrderLog = hotelOrderLogService.lambdaQuery() - .eq(HotelOrderLog::getDelFlag, 0) - .eq(HotelOrderLog::getId, orderPayReq.getId()) - .eq(HotelOrderLog::getIsPay, 0) - .one(); - if(hotelOrderLog.getPayInfo() != null){ + } + } + //修改订单状态 + HotelOrder hotelOrder1 = new HotelOrder(); + hotelOrder1.setId(hotelOrder.getId()); + if(hotelOrder.getType() == 0){ + hotelOrder1.setStatus(1); + }else if(hotelOrder.getType() == 1){ + hotelOrder1.setStatus(4); + } + hotelOrderService.updateById(hotelOrder1); - Long time = DateUtils2.getMilliSecond(DateUtils2.getYYYYMMDDHHMMSS(hotelOrderLog.getCreateTime()))+ 3600000L; - if(time < DateUtils2.getMilliSecond(DateUtils2.getNowDate())){ - HotelOrder order = hotelOrderService.lambdaQuery() - .eq(HotelOrder::getDelFlag, 0) - .eq(HotelOrder::getOrderLogId, hotelOrderLog.getId()) - .one(); -// HotelOrder hotelOrder = new HotelOrder(); -// hotelOrder.setId(order.getId()); -// hotelOrder.setDelFlag(1); - hotelOrderService.removeById(order.getId()); - hotelOrderLogService.removeById(hotelOrderLog.getId()); + HotelOrderLog hotelOrderLog1 = new HotelOrderLog(); + hotelOrderLog1.setId(hotelOrderLog.getId()); + hotelOrderLog1.setIsPay(1); + hotelOrderLogService.updateById(hotelOrderLog1); + + if(type == 0){ + hotelLeaseLogService.saveBatch(hotelLeaseLogs); + hotelOrderService.save(shopOrder); + hotelOrderDetailService.saveBatch(hotelOrderDetails1); + }else{ + hotelLeaseLogService.updateBatchById(hotelLeaseLogs); + } - return Result.error("该订单已超过一小时,无法继续支付,请重新创建订单"); - } + if(hotelOrder.getType() == 0){ + HotelMemberAccount hotelMemberAccount = hotelMemberAccountService.lambdaQuery() + .eq(HotelMemberAccount::getDelFlag, 0) + .eq(HotelMemberAccount::getUserId, hanHaiMember.getId()) + .one(); + HotelMemberAccount hotelMemberAccount1 = new HotelMemberAccount(); + hotelMemberAccount1.setId(hotelMemberAccount.getId()); + hotelMemberAccount1.setDeposit(hotelMemberAccount.getDeposit().add(hotelOrder.getDeposit())); + hotelMemberAccountService.updateById(hotelMemberAccount1); - Object jsonObject = JSON.parseObject(hotelOrderLog.getPayInfo()); - return Result.OK(jsonObject); + HotelBalanceLog hotelBalanceLog = new HotelBalanceLog(); + hotelBalanceLog.setBalance(hotelOrder.getDeposit()); + hotelBalanceLog.setUserBalance(hotelMemberAccount.getDeposit()); + hotelBalanceLog.setOrderId(hotelOrder.getId()); + hotelBalanceLog.setPayType(0); + hotelBalanceLog.setUserId(hanHaiMember.getId()); + hotelBalanceLog.setTitle("租赁押金"); + hotelBalanceLogService.save(hotelBalanceLog); } - String orderNo = hotelOrderLog.getId(); - - HttpServletRequest req = SpringContextUtils.getHttpServletRequest(); - BigDecimal multiply = hotelOrderLog.getOrderPay(); - multiply = multiply.multiply(new BigDecimal(100)); - Object order = mpWxPayService.createOrder("酒店桌布", oConvertUtils.getIpAddrByRequest(req), hotelOrderLog.getId(), multiply.intValue(), orderNo, hanHaiMember.getAppletOpenid(),orderNotifyUrl,"{}"); - HotelOrderLog hotelOrderLog1 = new HotelOrderLog(); - hotelOrderLog1.setId(orderNo); - hotelOrderLog1.setPayInfo(JSON.toJSONString(order)); - hotelOrderLogService.updateById(hotelOrderLog1); - return Result.OK(order); + //不再通知该结果 + return "SUCCESS"; } + @Transactional(rollbackFor = Exception.class) @Override - public Object orderNotify(String requestBody) { + public Object orderNotify3(String requestBody) { WxPayOrderNotifyResult notify = mpWxPayService.notify(requestBody); //对比outTradeNo进行业务处理 if (notify == null){ @@ -996,197 +2003,164 @@ public class OrderServiceImpl implements IOrderService { .eq(HotelOrderLog::getId, outTradeNo) .eq(HotelOrderLog::getIsPay, 0) .one(); - List hotelOrderList = hotelOrderService.lambdaQuery() + HotelOrder hotelOrder = hotelOrderService.lambdaQuery() .eq(HotelOrder::getDelFlag, 0) .eq(HotelOrder::getOrderLogId, hotelOrderLog.getId()) - .list(); + .one(); /*订单未找到*/ - if(hotelOrderList == null || hotelOrderList.size() == 0){ + if(hotelOrder == null ){ System.err.println("订单未找到"); return "FAIL"; } - HotelCouponLog hotelCouponLog = hotelCouponLogService.lambdaQuery() - .eq(HotelCouponLog::getDelFlag, 0) - .eq(HotelCouponLog::getStatus, 0) - .eq(HotelCouponLog::getOrderLogId, hotelOrderLog.getId()) - .one(); - - BigDecimal divide = BigDecimal.ONE; - if(hotelCouponLog != null){ - HotelCouponLog hotelCouponLog1 = new HotelCouponLog(); - hotelCouponLog1.setId(hotelCouponLog.getId()); - hotelCouponLog1.setStatus(1); - hotelCouponLogService.updateById(hotelCouponLog1); - divide = hotelOrderLog.getDiscountOrderPay().divide(hotelOrderLog.getOrderPay(), 2, BigDecimal.ROUND_HALF_UP); + /*已经处理过订单*/ + if (hotelOrder.getStatus() !=0 && hotelOrder.getStatus() != 3){ + return "SUCCESS"; } + List hotelOrderDetails = hotelOrderDetailService.lambdaQuery() + .eq(HotelOrderDetail::getDelFlag, 0) + .eq(HotelOrderDetail::getOrderId, hotelOrder.getId()) + .list(); + + HanHaiMember hanHaiMember = hanHaiMemberService.lambdaQuery() + .eq(HanHaiMember::getId, hotelOrder.getUserId()) + .one(); - List hotelOrders = new ArrayList<>(); + HotelShop hotelShop = hotelShopService.lambdaQuery() + .eq(HotelShop::getDelFlag, 0) + .eq(HotelShop::getId, hanHaiMember.getShopId()) + .one(); + + HotelOrder shopOrder = new HotelOrder(); + shopOrder.setId(IdWorker.getIdStr()); + shopOrder.setTitle(hotelOrder.getTitle()); + List hotelOrderDetails1 = new ArrayList<>(); List hotelLeaseLogs = new ArrayList<>(); + List hotelLeaseLogs2 = new ArrayList<>(); List orders = new ArrayList<>(); Integer type = 0; - Integer n = 0; - for (HotelOrder hotelOrder:hotelOrderList) { - n = n+1; + for (HotelOrderDetail hotelOrderDetail:hotelOrderDetails) { /*租赁业务*/ if(hotelOrder.getType() == 0){ - /*已经处理过订单*/ - if (hotelOrder.getStatus() !=0){ - return "SUCCESS"; - } - HotelLeaseLog hotelLeaseLog = new HotelLeaseLog(); - HotelLeaseLog hotelLeaseLog1 = new HotelLeaseLog(); -// if(hotelOrder.getWashShopFlag() == 1){//水洗店 - - - - - + HotelLeaseLog hotelLeaseLog = new HotelLeaseLog(); -// }else{//用户 //用户 hotelLeaseLog.setUserId(hotelOrder.getUserId()); hotelLeaseLog.setShopId(hotelOrder.getShopId()); hotelLeaseLog.setOrderId(hotelOrder.getId()); - hotelLeaseLog.setGoodsId(hotelOrder.getGoodsId()); - hotelLeaseLog.setSkuId(hotelOrder.getSkuId()); - hotelLeaseLog.setGoodsName(hotelOrder.getGoodsName()); - hotelLeaseLog.setGoodsPic(hotelOrder.getPic()); - hotelLeaseLog.setSku(hotelOrder.getSku()); + hotelLeaseLog.setOrderDetailId(hotelOrderDetail.getId()); + hotelLeaseLog.setGoodsId(hotelOrderDetail.getGoodsId()); + hotelLeaseLog.setSkuId(hotelOrderDetail.getSkuId()); + hotelLeaseLog.setGoodsName(hotelOrderDetail.getGoodsName()); + hotelLeaseLog.setGoodsPic(hotelOrderDetail.getPic()); + hotelLeaseLog.setSku(hotelOrderDetail.getSku()); hotelLeaseLog.setStatus(0); - hotelLeaseLog.setNum(hotelOrder.getNum()); - hotelLeaseLog.setPrice(hotelOrder.getDeposit()); - hotelLeaseLog.setCategoryId(hotelOrder.getCategoryId()); + hotelLeaseLog.setNum(hotelOrderDetail.getNum()); + hotelLeaseLog.setPrice(hotelOrderDetail.getDeposit()); + hotelLeaseLog.setCategoryId(hotelOrderDetail.getCategoryId()); HotelGoods hotelGoods = hotelGoodsService.lambdaQuery() .eq(HotelGoods::getDelFlag, 0) - .eq(HotelGoods::getId, hotelOrder.getGoodsId()) + .eq(HotelGoods::getId, hotelOrderDetail.getGoodsId()) .one(); HotelGoodsSku hotelGoodsSku = hotelGoodsSkuService.lambdaQuery() .eq(HotelGoodsSku::getDelFlag, 0) - .eq(HotelGoodsSku::getId, hotelOrder.getSkuId()) + .eq(HotelGoodsSku::getId, hotelOrderDetail.getSkuId()) .one(); - HanHaiMember hanHaiMember = hanHaiMemberService.lambdaQuery() - .eq(HanHaiMember::getId, hotelOrder.getUserId()) - .one(); - HotelShop hotelShop = hotelShopService.lambdaQuery() - .eq(HotelShop::getDelFlag, 0) - .eq(HotelShop::getId, hanHaiMember.getShopId()) - .one(); + + HotelCategory hotelCategory = hotelCategoryService.lambdaQuery() .eq(HotelCategory::getDelFlag, 0) - .eq(HotelCategory::getId, hotelGoods.getCategoryId()) + .eq(HotelCategory::getId, hotelOrderDetail.getCategoryId()) .one(); /*水洗店*/ - HotelOrder hotelOrder2 = new HotelOrder(); - hotelOrder2.setId(IdWorker.getIdStr()); - hotelOrder2.setTitle(hotelGoods.getName()); - hotelOrder2.setPic(hotelGoods.getPic()); - hotelOrder2.setUserName(hotelShop.getUserName()); - hotelOrder2.setUserPhone(hotelShop.getPhone()); - hotelOrder2.setUserAddress(hotelShop.getAddress()); - hotelOrder2.setUserId(hotelShop.getUserId()); - hotelOrder2.setDeposit(hotelOrder.getDeposit()); - hotelOrder2.setType(0); - hotelOrder2.setStatus(1); - hotelOrder2.setGoodsId(hotelGoods.getId()); - hotelOrder2.setGoodsName(hotelGoods.getName()); - hotelOrder2.setSkuId(hotelGoodsSku.getId()); - hotelOrder2.setSku(hotelGoodsSku.getTitle()); - hotelOrder2.setNum(hotelOrder.getNum()); - hotelOrder2.setOrderPay(hotelOrder.getOrderPay()); - hotelOrder2.setOrderLogId(hotelOrderLog.getId()); - hotelOrder2.setWashShopFlag(1); - hotelOrder2.setCategoryId(hotelCategory.getId()); - orders.add(hotelOrder2); + HotelOrderDetail hotelOrderDetail1 = new HotelOrderDetail(); + + shopOrder.setUserName(hotelShop.getUserName()); + shopOrder.setUserPhone(hotelShop.getPhone()); + shopOrder.setUserAddress(hotelShop.getAddress()); + shopOrder.setUserId(hotelShop.getUserId()); + shopOrder.setDeposit(hotelOrder.getDeposit()); + shopOrder.setType(0); + shopOrder.setStatus(1); + shopOrder.setOrderLogId(hotelOrderLog.getId()); + shopOrder.setWashShopFlag(1); + hotelOrderDetail1.setId(IdWorker.getIdStr()); + hotelOrderDetail1.setPic(hotelGoods.getPic()); + hotelOrderDetail1.setGoodsId(hotelGoods.getId()); + hotelOrderDetail1.setGoodsName(hotelGoods.getName()); + hotelOrderDetail1.setSkuId(hotelGoodsSku.getId()); + hotelOrderDetail1.setSku(hotelGoodsSku.getTitle()); + hotelOrderDetail1.setNum(hotelOrderDetail.getNum()); + hotelOrderDetail1.setOrderPay(hotelOrderDetail.getOrderPay()); + hotelOrderDetail1.setCategoryId(hotelCategory.getId()); + hotelOrderDetail1.setOrderId(shopOrder.getId()); + hotelOrderDetails1.add(hotelOrderDetail1); //水洗店 + HotelLeaseLog hotelLeaseLog1 = new HotelLeaseLog(); hotelLeaseLog1.setUserId(hotelShop.getUserId()); - hotelLeaseLog1.setOrderId(hotelOrder2.getId()); - hotelLeaseLog1.setGoodsId(hotelOrder2.getGoodsId()); - hotelLeaseLog1.setSkuId(hotelOrder2.getSkuId()); - hotelLeaseLog1.setGoodsName(hotelOrder2.getGoodsName()); - hotelLeaseLog1.setGoodsPic(hotelOrder2.getPic()); - hotelLeaseLog1.setSku(hotelOrder2.getSku()); + hotelLeaseLog1.setOrderId(shopOrder.getId()); + hotelLeaseLog1.setOrderDetailId(hotelOrderDetail1.getId()); + hotelLeaseLog1.setGoodsId(hotelOrderDetail.getGoodsId()); + hotelLeaseLog1.setSkuId(hotelOrderDetail.getSkuId()); + hotelLeaseLog1.setGoodsName(hotelOrderDetail.getGoodsName()); + hotelLeaseLog1.setGoodsPic(hotelOrderDetail.getPic()); + hotelLeaseLog1.setSku(hotelOrderDetail.getSku()); hotelLeaseLog1.setStatus(0); - hotelLeaseLog1.setNum(hotelOrder2.getNum()); - hotelLeaseLog1.setPrice(hotelOrder2.getDeposit()); + hotelLeaseLog1.setNum(hotelOrderDetail.getNum()); + hotelLeaseLog1.setPrice(hotelOrderDetail.getDeposit()); hotelLeaseLog1.setFormUserId(hotelOrderLog.getUserId()); - hotelLeaseLog1.setCategoryId(hotelOrder2.getCategoryId()); -// } + hotelLeaseLog1.setCategoryId(hotelOrderDetail.getCategoryId()); hotelLeaseLogs.add(hotelLeaseLog1); hotelLeaseLogs.add(hotelLeaseLog); - HotelOrder hotelOrder1 = new HotelOrder(); - hotelOrder1.setId(hotelOrder.getId()); - hotelOrder1.setStatus(1); - BigDecimal multiply = hotelOrder.getOriginalPrice().multiply(divide); - if(n == hotelOrderList.size()){ - BigDecimal add = multiply; - for (HotelOrder hotelOrder3:hotelOrders){ - add = add.add(hotelOrder3.getOrderPay()); - if(add.compareTo(hotelOrderLog.getOrderPay()) == -1){ - multiply = multiply.add(hotelOrderLog.getOrderPay().subtract(add)); - }else if(add.compareTo(hotelOrderLog.getOrderPay()) == 1){ - multiply = multiply.subtract(hotelOrderLog.getOrderPay().subtract(add)); - } - } - } - hotelOrder1.setDiscountPrice(hotelOrder.getOriginalPrice().subtract(multiply)); - hotelOrder1.setOrderPay(multiply); - hotelOrders.add(hotelOrder1); - - }else if(hotelOrder.getType() == 1){/*水洗逻辑*/ - - HotelOrder hotelOrder1 = new HotelOrder(); - hotelOrder1.setId(hotelOrder.getId()); - hotelOrder1.setStatus(4); - hotelOrder1.setOriginalPrice(hotelOrder.getOrderPay()); - if(hotelCouponLog != null){ - BigDecimal subtract = hotelOrder.getOrderPay().subtract(hotelOrderLog.getDiscountOrderPay()); - hotelOrder1.setOrderPay(hotelOrderLog.getDiscountOrderPay()); - hotelOrder1.setDiscountPrice(subtract); - if(hotelCouponLog.getUseType() == 1){//租金 - hotelOrder1.setRentPay(subtract); + }else if(hotelOrder.getType() == 1){/*水洗逻辑*/ - }else if(hotelCouponLog.getUseType() == 2){ //水洗 - hotelOrder1.setWashPay(subtract); - } - } - hotelOrders.add(hotelOrder1); - HotelLeaseLog hotelLeaseLog = hotelLeaseLogService.lambdaQuery() + List hotelLeaseLogList = hotelLeaseLogService.lambdaQuery() .eq(HotelLeaseLog::getDelFlag, 0) - .eq(HotelLeaseLog::getId, hotelOrder.getLeaseId()) - .one(); - if(hotelLeaseLog == null){ - return "FAIL"; - } - if(hotelLeaseLog.getLeaseFlag() == 1){ + .eq(HotelLeaseLog::getLeaseFlag, 1) + .eq(HotelLeaseLog::getUserId, hanHaiMember.getId()) + .list(); + + for (HotelLeaseLog hotelLeaseLog:hotelLeaseLogList){ type = 1; HotelLeaseLog hotelLeaseLog1 = new HotelLeaseLog(); hotelLeaseLog1.setId(hotelLeaseLog.getId()); hotelLeaseLog1.setStartTime(new Date()); + if(StringUtils.equals(hotelLeaseLog.getId(),hotelOrderDetail.getLeaseId())){ + hotelLeaseLog1.setWashNum(hotelOrderDetails.get(0).getNum()); + } hotelLeaseLogs.add(hotelLeaseLog1); } } - } + //修改订单状态 + HotelOrder hotelOrder1 = new HotelOrder(); + hotelOrder1.setId(hotelOrder.getId()); + if(hotelOrder.getType() == 0){ + hotelOrder1.setStatus(1); + }else if(hotelOrder.getType() == 1){ + hotelOrder1.setStatus(4); + } + hotelOrderService.updateById(hotelOrder1); + HotelOrderLog hotelOrderLog1 = new HotelOrderLog(); hotelOrderLog1.setId(hotelOrderLog.getId()); hotelOrderLog1.setIsPay(1); @@ -1194,23 +2168,42 @@ public class OrderServiceImpl implements IOrderService { if(type == 0){ hotelLeaseLogService.saveBatch(hotelLeaseLogs); - hotelOrderService.saveBatch(orders); + hotelOrderService.save(shopOrder); + hotelOrderDetailService.saveBatch(hotelOrderDetails1); }else{ hotelLeaseLogService.updateBatchById(hotelLeaseLogs); } - hotelOrderService.updateBatchById(hotelOrders); + if(hotelOrder.getType() == 0){ + HotelMemberAccount hotelMemberAccount = hotelMemberAccountService.lambdaQuery() + .eq(HotelMemberAccount::getDelFlag, 0) + .eq(HotelMemberAccount::getUserId, hanHaiMember.getId()) + .one(); + HotelMemberAccount hotelMemberAccount1 = new HotelMemberAccount(); + hotelMemberAccount1.setId(hotelMemberAccount.getId()); + hotelMemberAccount1.setDeposit(hotelMemberAccount.getDeposit().add(hotelOrder.getDeposit())); + hotelMemberAccountService.updateById(hotelMemberAccount1); + + HotelBalanceLog hotelBalanceLog = new HotelBalanceLog(); + hotelBalanceLog.setBalance(hotelOrder.getDeposit()); + hotelBalanceLog.setUserBalance(hotelMemberAccount.getDeposit()); + hotelBalanceLog.setOrderId(hotelOrder.getId()); + hotelBalanceLog.setPayType(0); + hotelBalanceLog.setUserId(hanHaiMember.getId()); + hotelBalanceLog.setTitle("租赁押金"); + hotelBalanceLogService.save(hotelBalanceLog); + } + //不再通知该结果 return "SUCCESS"; } - @Transactional(rollbackFor = Exception.class) @Override - public Object orderNotify2(String requestBody) { + public Object orderNotify4(String requestBody) { WxPayOrderNotifyResult notify = mpWxPayService.notify(requestBody); //对比outTradeNo进行业务处理 if (notify == null){ @@ -1224,7 +2217,7 @@ public class OrderServiceImpl implements IOrderService { .eq(HotelOrderLog::getId, outTradeNo) .eq(HotelOrderLog::getIsPay, 0) .one(); - HotelOrder hotelOrder = hotelOrderService.lambdaQuery() + HotelOrder hotelOrder = hotelOrderService.lambdaQuery() .eq(HotelOrder::getDelFlag, 0) .eq(HotelOrder::getOrderLogId, hotelOrderLog.getId()) .one(); @@ -1352,14 +2345,13 @@ public class OrderServiceImpl implements IOrderService { }else if(hotelOrder.getType() == 1){/*水洗逻辑*/ - HotelLeaseLog hotelLeaseLog = hotelLeaseLogService.lambdaQuery() + List hotelLeaseLogList = hotelLeaseLogService.lambdaQuery() .eq(HotelLeaseLog::getDelFlag, 0) - .eq(HotelLeaseLog::getId, hotelOrderDetail.getLeaseId()) - .one(); - if(hotelLeaseLog == null){ - return "FAIL"; - } - if(hotelLeaseLog.getLeaseFlag() == 1){ + .eq(HotelLeaseLog::getLeaseFlag, 1) + .eq(HotelLeaseLog::getUserId, hanHaiMember.getId()) + .list(); + + for (HotelLeaseLog hotelLeaseLog:hotelLeaseLogList){ type = 1; HotelLeaseLog hotelLeaseLog1 = new HotelLeaseLog(); hotelLeaseLog1.setId(hotelLeaseLog.getId()); @@ -1408,150 +2400,374 @@ public class OrderServiceImpl implements IOrderService { hotelBalanceLog.setBalance(hotelOrder.getDeposit()); hotelBalanceLog.setUserBalance(hotelMemberAccount.getDeposit()); hotelBalanceLog.setOrderId(hotelOrder.getId()); - hotelBalanceLog.setPayType(0); - hotelBalanceLog.setUserId(hanHaiMember.getId()); - hotelBalanceLog.setTitle("租赁押金"); + hotelBalanceLog.setPayType(0); + hotelBalanceLog.setUserId(hanHaiMember.getId()); + hotelBalanceLog.setTitle("租赁押金"); + hotelBalanceLogService.save(hotelBalanceLog); + } + + + + //不再通知该结果 + return "SUCCESS"; + } + + @Transactional(rollbackFor = Exception.class) + @Override + public Result applyRefundOrder(ApplyRefundOrderReq applyRefundOrderReq) { + Integer n = (Integer) redisUtil.get("apply:refund:order:"+applyRefundOrderReq.getToken()); + if(n != null){ + return Result.error("请勿重复点击"); + } + redisUtil.set("apply:refund:order:"+applyRefundOrderReq.getToken(),1,3); + HanHaiMember hanHaiMember = shiroRealm.checkUserTokenIsEffectHanHaiAccount(applyRefundOrderReq.getToken()); + if(StringUtils.isBlank(applyRefundOrderReq.getReason())){ + throw new JeecgBootException("请填写申请原因"); + } + if(applyRefundOrderReq.getRefundNum() == null || applyRefundOrderReq.getRefundNum() <= 0){ + String name = applyRefundOrderReq.getType() == 0?"退货数量":"换货数量"; + throw new JeecgBootException("请填写"+name); + } + + if(StringUtils.isBlank(applyRefundOrderReq.getAddressId())){ + throw new JeecgBootException("请选择收货地址"); + } + HotelAddress hotelAddress = hotelAddressService.lambdaQuery() + .eq(HotelAddress::getDelFlag, 0) + .eq(HotelAddress::getId, applyRefundOrderReq.getAddressId()) + .one(); + if(hotelAddress == null){ + throw new JeecgBootException("地址数据错误"); + } + + + HotelOrder hotelOrder1 = new HotelOrder(); + + if(applyRefundOrderReq.getType() == 0){ + if(applyRefundOrderReq.getReasonPrice() == null || applyRefundOrderReq.getReasonPrice().compareTo(BigDecimal.ZERO) <= 0){ + throw new JeecgBootException("请输入申请金额"); + } + hotelOrder1.setOrderPay(hotelOrder1.getReasonPrice()); + } + + HotelLeaseLog hotelLeaseLog = hotelLeaseLogService.lambdaQuery() + .eq(HotelLeaseLog::getDelFlag, 0) + .eq(HotelLeaseLog::getUserId, hanHaiMember.getId()) + .eq(HotelLeaseLog::getId, applyRefundOrderReq.getId()) + .one(); + if(hotelLeaseLog == null){ + throw new JeecgBootException("数据错误,请刷新重试"); + } +// int num = hotelLeaseLog.getNum() - hotelLeaseLog.getWashNum(); +// if(num <= 0 || num hotelOrders = hotelOrderService.lambdaQuery() + .eq(HotelOrder::getDelFlag, 0) + .eq(HotelOrder::getType,applyRefundOrderReq.getType() == 0?2:1) + .eq(HotelOrder::getLeaseId, hotelLeaseLog.getId()) + .ne(HotelOrder::getStatus, 15) + .list(); + if(hotelOrders.size() != 0){ + throw new JeecgBootException("该租赁不可操作"); + } + HotelOrder hotelOrder = hotelOrderService.lambdaQuery() + .eq(HotelOrder::getDelFlag, 0) + .eq(HotelOrder::getId, hotelLeaseLog.getOrderId()) + .one(); + if(hotelOrder.getStatus() != 15){ + throw new JeecgBootException("该订单还未收货"); + } + + HotelShop hotelShop = hotelShopService.lambdaQuery() + .eq(HotelShop::getDelFlag, 0) + .eq(HotelShop::getId, hanHaiMember.getShopId()) + .one(); + HotelLeaseLog hotelLeaseLog2 = new HotelLeaseLog(); + int num = hotelLeaseLog.getNum() - applyRefundOrderReq.getRefundNum(); + if(num > 0){ + + hotelLeaseLog2.setUserId(hotelLeaseLog.getUserId()); + hotelLeaseLog2.setShopId(hotelLeaseLog.getShopId()); + hotelLeaseLog2.setOrderId(hotelLeaseLog.getOrderId()); + hotelLeaseLog2.setGoodsId(hotelLeaseLog.getGoodsId()); + hotelLeaseLog2.setSkuId(hotelLeaseLog.getSkuId()); + hotelLeaseLog2.setGoodsName(hotelLeaseLog.getGoodsName()); + hotelLeaseLog2.setGoodsPic(hotelLeaseLog.getGoodsPic()); + hotelLeaseLog2.setSku(hotelLeaseLog.getSku()); + hotelLeaseLog2.setStatus(applyRefundOrderReq.getType() == 0?2:1); + hotelLeaseLog2.setNum(applyRefundOrderReq.getRefundNum()); + hotelLeaseLog2.setPrice(hotelLeaseLog.getPrice()); + hotelLeaseLog2.setCategoryId(hotelLeaseLog.getCategoryId()); + hotelLeaseLog2.setPid(hotelLeaseLog.getId()); + hotelLeaseLogService.save(hotelLeaseLog2); + } + + + HotelOrderDetail hotelOrderDetail = new HotelOrderDetail(); + hotelOrder1.setReason(applyRefundOrderReq.getReason()); + hotelOrder1.setRefundNum(applyRefundOrderReq.getRefundNum()); + hotelOrder1.setType(applyRefundOrderReq.getType() == 0?3:2); + hotelOrder1.setReasonInfo(applyRefundOrderReq.getReasonInfo() == null?null:applyRefundOrderReq.getReasonInfo()); + hotelOrder1.setReasonPic(applyRefundOrderReq.getReasonPic() == null?null:applyRefundOrderReq.getReasonPic()); + hotelOrder1.setReasonPhone(applyRefundOrderReq.getPhone() == null?null:applyRefundOrderReq.getPhone()); + hotelOrder1.setUserId(hanHaiMember.getId()); + hotelOrderDetail.setGoodsId(hotelLeaseLog.getGoodsId()); + hotelOrderDetail.setGoodsName(hotelLeaseLog.getGoodsName()); + hotelOrderDetail.setSkuId(hotelLeaseLog.getSkuId()); + hotelOrderDetail.setSku(hotelLeaseLog.getSku()); + hotelOrderDetail.setPic(hotelLeaseLog.getGoodsPic()); + hotelOrder1.setStatus(applyRefundOrderReq.getType() == 0 ?11:7); + hotelOrderDetail.setLeaseId(hotelLeaseLog.getNum() > applyRefundOrderReq.getRefundNum()?hotelLeaseLog2.getId():hotelLeaseLog.getId()); + hotelOrder1.setLeaseId(hotelLeaseLog.getNum() > applyRefundOrderReq.getRefundNum()?hotelLeaseLog2.getId():hotelLeaseLog.getId()); + hotelOrder1.setUserName(hotelAddress.getName()); + hotelOrder1.setUserPhone(hotelAddress.getPhone()); + hotelOrder1.setUserAddress(hotelAddress.getAddress()+hotelAddress.getAddressDetail()); + hotelOrder1.setShopId(hotelShop.getUserId()); + hotelOrderService.save(hotelOrder1); + + hotelOrderDetail.setOrderId(hotelOrder1.getId()); + hotelOrderDetailService.save(hotelOrderDetail); + + if(num > 0){ + HotelLeaseLog hotelLeaseLog1 = new HotelLeaseLog(); + hotelLeaseLog1.setId(hotelLeaseLog.getId()); + if(hotelLeaseLog.getNum().equals(applyRefundOrderReq.getRefundNum() + )){ + hotelLeaseLog1.setStatus(applyRefundOrderReq.getType() == 0?2:1); + } +// int i = hotelLeaseLog.getNum() - applyRefundOrderReq.getRefundNum(); + hotelLeaseLog1.setNum(num); + hotelLeaseLogService.updateById(hotelLeaseLog1); + } + + + + + return Result.OK(); + } + + + + + + @Transactional(rollbackFor = Exception.class) + @Override + public Result confirmOrder(ConfirmOrderReq confirmOrderReq) { + + Integer n = (Integer) redisUtil.get("confirm:order:"+confirmOrderReq.getToken()); + if(n != null){ + throw new JeecgBootException("请勿重复点击"); + } + redisUtil.set("confirm:order:"+confirmOrderReq.getToken(),1,3); + HanHaiMember hanHaiMember = shiroRealm.checkUserTokenIsEffectHanHaiAccount(confirmOrderReq.getToken()); + HotelOrder hotelOrder = hotelOrderService.lambdaQuery() + .eq(HotelOrder::getDelFlag, 0) + .eq(HotelOrder::getId, confirmOrderReq.getId()) +// .eq(HotelOrder::getUserId, hanHaiMember.getId()) + .one(); + if(hotelOrder == null){ + throw new JeecgBootException("数据错误,请刷新重试"); + } + List hotelOrderDetails = hotelOrderDetailService.lambdaQuery() + .eq(HotelOrderDetail::getDelFlag, 0) + .eq(HotelOrderDetail::getOrderId, hotelOrder.getId()) + .list(); + if(hotelOrder.getType() == 0){ + if(!StringUtils.equals(hotelOrder.getUserId(),hanHaiMember.getId())){ + throw new JeecgBootException("数据订单错误"); + } + List hotelLeaseLogs = new ArrayList<>(); + for (HotelOrderDetail hotelOrderDetail:hotelOrderDetails){ + HotelLeaseLog hotelLeaseLog = hotelLeaseLogService.lambdaQuery() + .eq(HotelLeaseLog::getDelFlag, 0) + .eq(HotelLeaseLog::getOrderDetailId, hotelOrderDetail.getId()) + .eq(HotelLeaseLog::getUserId, hanHaiMember.getId()) + .one(); + if(hotelLeaseLog == null){ + throw new JeecgBootException("数据错误,请刷新重试"); + } + + HotelLeaseLog hotelLeaseLog1 = new HotelLeaseLog(); + hotelLeaseLog1.setId(hotelLeaseLog.getId()); + hotelLeaseLog1.setStartTime(new Date()); + hotelLeaseLogs.add(hotelLeaseLog1); + + } + hotelLeaseLogService.updateBatchById(hotelLeaseLogs); + HotelOrder hotelOrder1 = new HotelOrder(); + hotelOrder1.setId(hotelOrder.getId()); + hotelOrder1.setStatus(15); + hotelOrderService.updateById(hotelOrder1); + + }else if(hotelOrder.getType() == 1){ + if(!StringUtils.equals(hotelOrder.getShopId(),hanHaiMember.getId())){ + throw new JeecgBootException("数据订单错误"); + } + HotelShop hotelShop = hotelShopService.lambdaQuery() + .eq(HotelShop::getDelFlag, 0) + .eq(HotelShop::getUserId, hotelOrder.getShopId()) + .one(); + + HotelMemberAccount hotelMemberAccount = hotelMemberAccountService.lambdaQuery() + .eq(HotelMemberAccount::getDelFlag, 0) + .eq(HotelMemberAccount::getUserId, hotelShop.getUserId()) + .one(); + + + BigDecimal platformServiceRate = new BigDecimal(hotelConfService.getConf("platformServiceRate")); + BigDecimal platformServicePrice = hotelOrder.getOrderPay().multiply(platformServiceRate); + BigDecimal shopPrice = hotelOrder.getOrderPay().multiply(hotelShop.getRate()); + BigDecimal price = hotelMemberAccount.getShopBalance().add(shopPrice); + + + HotelMemberAccount hotelMemberAccount1 = new HotelMemberAccount(); + hotelMemberAccount1.setId(hotelMemberAccount.getId()); + hotelMemberAccount1.setShopBalance(price); + hotelMemberAccountService.updateById(hotelMemberAccount1); + + + HotelBalanceLog hotelBalanceLog = new HotelBalanceLog(); + hotelBalanceLog.setUserId(hotelShop.getUserId()); + hotelBalanceLog.setBalance(shopPrice); + hotelBalanceLog.setUserBalance(hotelMemberAccount.getShopBalance()); + hotelBalanceLog.setType(2); + hotelBalanceLog.setTitle("佣金到账"); + hotelBalanceLog.setPayType(1); + hotelBalanceLog.setPlatformServicePrice(platformServicePrice); + hotelBalanceLog.setOrderId(hotelOrder.getId()); hotelBalanceLogService.save(hotelBalanceLog); - } + HotelOrder hotelOrder1 = new HotelOrder(); + hotelOrder1.setId(hotelOrder.getId()); + hotelOrder1.setStatus(15); + hotelOrderService.updateById(hotelOrder1); - //不再通知该结果 - return "SUCCESS"; - } - @Transactional(rollbackFor = Exception.class) - @Override - public Result applyRefundOrder(ApplyRefundOrderReq applyRefundOrderReq) { - Integer n = (Integer) redisUtil.get("apply:refund:order:"+applyRefundOrderReq.getToken()); - if(n != null){ - return Result.error("请勿重复点击"); - } - redisUtil.set("apply:refund:order:"+applyRefundOrderReq.getToken(),1,3); - HanHaiMember hanHaiMember = shiroRealm.checkUserTokenIsEffectHanHaiAccount(applyRefundOrderReq.getToken()); - if(StringUtils.isBlank(applyRefundOrderReq.getReason())){ - throw new JeecgBootException("请填写申请原因"); - } - if(applyRefundOrderReq.getRefundNum() == null || applyRefundOrderReq.getRefundNum() <= 0){ - String name = applyRefundOrderReq.getType() == 0?"退货数量":"换货数量"; - throw new JeecgBootException("请填写"+name); } - if(StringUtils.isBlank(applyRefundOrderReq.getAddressId())){ - throw new JeecgBootException("请选择收货地址"); - } - HotelAddress hotelAddress = hotelAddressService.lambdaQuery() - .eq(HotelAddress::getDelFlag, 0) - .eq(HotelAddress::getId, applyRefundOrderReq.getAddressId()) - .one(); - if(hotelAddress == null){ - throw new JeecgBootException("地址数据错误"); - } + return Result.OK(); + } - HotelOrder hotelOrder1 = new HotelOrder(); - if(applyRefundOrderReq.getType() == 0){ - if(applyRefundOrderReq.getReasonPrice() == null || applyRefundOrderReq.getReasonPrice().compareTo(BigDecimal.ZERO) <= 0){ - throw new JeecgBootException("请输入申请金额"); - } - hotelOrder1.setOrderPay(hotelOrder1.getReasonPrice()); - } + @Transactional(rollbackFor = Exception.class) + @Override + public Result confirmOrder2(ConfirmOrderReq confirmOrderReq) { - HotelLeaseLog hotelLeaseLog = hotelLeaseLogService.lambdaQuery() - .eq(HotelLeaseLog::getDelFlag, 0) - .eq(HotelLeaseLog::getUserId, hanHaiMember.getId()) - .eq(HotelLeaseLog::getId, applyRefundOrderReq.getId()) - .one(); - if(hotelLeaseLog == null){ - throw new JeecgBootException("数据错误,请刷新重试"); - } - List hotelOrders = hotelOrderService.lambdaQuery() - .eq(HotelOrder::getDelFlag, 0) - .eq(HotelOrder::getType,applyRefundOrderReq.getType() == 0?2:1) - .eq(HotelOrder::getLeaseId, hotelLeaseLog.getId()) - .ne(HotelOrder::getStatus, 15) - .list(); - if(hotelOrders.size() != 0){ - throw new JeecgBootException("该租赁不可操作"); + Integer n = (Integer) redisUtil.get("confirm:order:"+confirmOrderReq.getToken()); + if(n != null){ + throw new JeecgBootException("请勿重复点击"); } + redisUtil.set("confirm:order:"+confirmOrderReq.getToken(),1,3); + HanHaiMember hanHaiMember = shiroRealm.checkUserTokenIsEffectHanHaiAccount(confirmOrderReq.getToken()); HotelOrder hotelOrder = hotelOrderService.lambdaQuery() .eq(HotelOrder::getDelFlag, 0) - .eq(HotelOrder::getId, hotelLeaseLog.getOrderId()) + .eq(HotelOrder::getId, confirmOrderReq.getId()) +// .eq(HotelOrder::getUserId, hanHaiMember.getId()) .one(); - if(hotelOrder.getStatus() != 15){ - throw new JeecgBootException("该订单还未收货"); + if(hotelOrder == null){ + throw new JeecgBootException("数据错误,请刷新重试"); } + List hotelOrderDetails = hotelOrderDetailService.lambdaQuery() + .eq(HotelOrderDetail::getDelFlag, 0) + .eq(HotelOrderDetail::getOrderId, hotelOrder.getId()) + .list(); + if(hotelOrder.getType() == 0){ + if(!StringUtils.equals(hotelOrder.getUserId(),hanHaiMember.getId())){ + throw new JeecgBootException("数据订单错误"); + } + List hotelLeaseLogs = new ArrayList<>(); + for (HotelOrderDetail hotelOrderDetail:hotelOrderDetails){ + HotelLeaseLog hotelLeaseLog = hotelLeaseLogService.lambdaQuery() + .eq(HotelLeaseLog::getDelFlag, 0) + .eq(HotelLeaseLog::getOrderDetailId, hotelOrderDetail.getId()) + .eq(HotelLeaseLog::getUserId, hanHaiMember.getId()) + .one(); + if(hotelLeaseLog == null){ + throw new JeecgBootException("数据错误,请刷新重试"); + } - HotelShop hotelShop = hotelShopService.lambdaQuery() - .eq(HotelShop::getDelFlag, 0) - .eq(HotelShop::getId, hanHaiMember.getShopId()) - .one(); - HotelLeaseLog hotelLeaseLog2 = new HotelLeaseLog(); - if(hotelLeaseLog.getNum() > applyRefundOrderReq.getRefundNum()){ + HotelLeaseLog hotelLeaseLog1 = new HotelLeaseLog(); + hotelLeaseLog1.setId(hotelLeaseLog.getId()); + hotelLeaseLog1.setStartTime(new Date()); + hotelLeaseLogs.add(hotelLeaseLog1); - hotelLeaseLog2.setUserId(hotelLeaseLog.getUserId()); - hotelLeaseLog2.setShopId(hotelLeaseLog.getShopId()); - hotelLeaseLog2.setOrderId(hotelLeaseLog.getOrderId()); - hotelLeaseLog2.setGoodsId(hotelLeaseLog.getGoodsId()); - hotelLeaseLog2.setSkuId(hotelLeaseLog.getSkuId()); - hotelLeaseLog2.setGoodsName(hotelLeaseLog.getGoodsName()); - hotelLeaseLog2.setGoodsPic(hotelLeaseLog.getGoodsPic()); - hotelLeaseLog2.setSku(hotelLeaseLog.getSku()); - hotelLeaseLog2.setStatus(applyRefundOrderReq.getType() == 0?2:1); - hotelLeaseLog2.setNum(applyRefundOrderReq.getRefundNum()); - hotelLeaseLog2.setPrice(hotelLeaseLog.getPrice()); - hotelLeaseLog2.setCategoryId(hotelLeaseLog.getCategoryId()); - hotelLeaseLogService.save(hotelLeaseLog2); - } + } + hotelLeaseLogService.updateBatchById(hotelLeaseLogs); + HotelOrder hotelOrder1 = new HotelOrder(); + hotelOrder1.setId(hotelOrder.getId()); + hotelOrder1.setStatus(15); + hotelOrderService.updateById(hotelOrder1); + + }else if(hotelOrder.getType() == 1){ + if(!StringUtils.equals(hotelOrder.getShopId(),hanHaiMember.getId())){ + throw new JeecgBootException("数据订单错误"); + } + HotelShop hotelShop = hotelShopService.lambdaQuery() + .eq(HotelShop::getDelFlag, 0) + .eq(HotelShop::getUserId, hotelOrder.getShopId()) + .one(); + HotelMemberAccount hotelMemberAccount = hotelMemberAccountService.lambdaQuery() + .eq(HotelMemberAccount::getDelFlag, 0) + .eq(HotelMemberAccount::getUserId, hotelShop.getUserId()) + .one(); - HotelOrderDetail hotelOrderDetail = new HotelOrderDetail(); - hotelOrder1.setReason(applyRefundOrderReq.getReason()); - hotelOrder1.setRefundNum(applyRefundOrderReq.getRefundNum()); - hotelOrder1.setType(applyRefundOrderReq.getType() == 0?3:2); - hotelOrder1.setReasonInfo(applyRefundOrderReq.getReasonInfo() == null?null:applyRefundOrderReq.getReasonInfo()); - hotelOrder1.setReasonPic(applyRefundOrderReq.getReasonPic() == null?null:applyRefundOrderReq.getReasonPic()); - hotelOrder1.setReasonPhone(applyRefundOrderReq.getPhone() == null?null:applyRefundOrderReq.getPhone()); - hotelOrder1.setUserId(hanHaiMember.getId()); - hotelOrderDetail.setGoodsId(hotelLeaseLog.getGoodsId()); - hotelOrderDetail.setGoodsName(hotelLeaseLog.getGoodsName()); - hotelOrderDetail.setSkuId(hotelLeaseLog.getSkuId()); - hotelOrderDetail.setSku(hotelLeaseLog.getSku()); - hotelOrderDetail.setPic(hotelLeaseLog.getGoodsPic()); - hotelOrder1.setStatus(applyRefundOrderReq.getType() == 0 ?11:7); - hotelOrderDetail.setLeaseId(hotelLeaseLog.getNum() > applyRefundOrderReq.getRefundNum()?hotelLeaseLog2.getId():hotelLeaseLog.getId()); - hotelOrder1.setLeaseId(hotelLeaseLog.getNum() > applyRefundOrderReq.getRefundNum()?hotelLeaseLog2.getId():hotelLeaseLog.getId()); - hotelOrder1.setUserName(hotelAddress.getName()); - hotelOrder1.setUserPhone(hotelAddress.getPhone()); - hotelOrder1.setUserAddress(hotelAddress.getAddress()+hotelAddress.getAddressDetail()); - hotelOrder1.setShopId(hotelShop.getUserId()); - hotelOrderService.save(hotelOrder1); - hotelOrderDetail.setOrderId(hotelOrder1.getId()); - hotelOrderDetailService.save(hotelOrderDetail); + BigDecimal platformServiceRate = new BigDecimal(hotelConfService.getConf("platformServiceRate")); + BigDecimal platformServicePrice = hotelOrder.getOrderPay().multiply(platformServiceRate); + BigDecimal shopPrice = hotelOrder.getOrderPay().multiply(hotelShop.getRate()); + BigDecimal price = hotelMemberAccount.getShopBalance().add(shopPrice); - HotelLeaseLog hotelLeaseLog1 = new HotelLeaseLog(); - hotelLeaseLog1.setId(hotelLeaseLog.getId()); - if(hotelLeaseLog.getNum() == applyRefundOrderReq.getRefundNum()){ - hotelLeaseLog1.setStatus(applyRefundOrderReq.getType() == 0?2:1); - } - hotelLeaseLog1.setNum(hotelLeaseLog.getNum() - applyRefundOrderReq.getRefundNum()); - hotelLeaseLogService.updateById(hotelLeaseLog1); + HotelMemberAccount hotelMemberAccount1 = new HotelMemberAccount(); + hotelMemberAccount1.setId(hotelMemberAccount.getId()); + hotelMemberAccount1.setShopBalance(price); + hotelMemberAccountService.updateById(hotelMemberAccount1); + + HotelBalanceLog hotelBalanceLog = new HotelBalanceLog(); + hotelBalanceLog.setUserId(hotelShop.getUserId()); + hotelBalanceLog.setBalance(shopPrice); + hotelBalanceLog.setUserBalance(hotelMemberAccount.getShopBalance()); + hotelBalanceLog.setType(2); + hotelBalanceLog.setTitle("佣金到账"); + hotelBalanceLog.setPayType(1); + hotelBalanceLog.setPlatformServicePrice(platformServicePrice); + hotelBalanceLog.setOrderId(hotelOrder.getId()); + hotelBalanceLogService.save(hotelBalanceLog); + HotelOrder hotelOrder1 = new HotelOrder(); + hotelOrder1.setId(hotelOrder.getId()); + hotelOrder1.setStatus(15); + hotelOrderService.updateById(hotelOrder1); - return Result.OK(); - } + HotelLeaseLog hotelLeaseLog = hotelLeaseLogService.lambdaQuery() + .eq(HotelLeaseLog::getDelFlag, 0) + .eq(HotelLeaseLog::getOrderDetailId, hotelOrderDetails.get(0).getId()) + .eq(HotelLeaseLog::getUserId, hanHaiMember.getId()) + .one(); + if(hotelLeaseLog == null){ + throw new JeecgBootException("数据错误,请刷新重试"); + } + HotelLeaseLog hotelLeaseLog1 = new HotelLeaseLog(); + hotelLeaseLog1.setId(hotelLeaseLog.getId()); + int num = hotelLeaseLog.getWashNum() - hotelOrderDetails.get(0).getNum(); + hotelLeaseLog1.setWashNum(num); + hotelLeaseLogService.updateById(hotelLeaseLog1); + } + return Result.OK(); + } @Transactional(rollbackFor = Exception.class) @Override - public Result confirmOrder(ConfirmOrderReq confirmOrderReq) { + public Result confirmOrder3(ConfirmOrderReq confirmOrderReq) { Integer n = (Integer) redisUtil.get("confirm:order:"+confirmOrderReq.getToken()); if(n != null){ @@ -1641,6 +2857,39 @@ public class OrderServiceImpl implements IOrderService { hotelOrder1.setStatus(15); hotelOrderService.updateById(hotelOrder1); + + //子 + HotelLeaseLog hotelLeaseLog = hotelLeaseLogService.lambdaQuery() + .eq(HotelLeaseLog::getDelFlag, 0) + .eq(HotelLeaseLog::getId, hotelOrderDetails.get(0).getLeaseId()) + .eq(HotelLeaseLog::getUserId, hanHaiMember.getId()) + .one(); + if(hotelLeaseLog == null){ + throw new JeecgBootException("数据错误,请刷新重试"); + } + + if(StringUtils.isNotBlank(hotelLeaseLog.getPid())){ + //父 + HotelLeaseLog hotelLeaseLog1 = hotelLeaseLogService.lambdaQuery() + .eq(HotelLeaseLog::getDelFlag, 0) + .eq(HotelLeaseLog::getId, hotelLeaseLog.getPid()) + .one(); + int num = hotelLeaseLog.getNum() + hotelLeaseLog1.getNum(); + BigDecimal price2 = hotelLeaseLog1.getPrice().add(hotelLeaseLog.getPrice()); + HotelLeaseLog hotelLeaseLog2 = new HotelLeaseLog(); + hotelLeaseLog2.setId(hotelLeaseLog1.getId()); + + hotelLeaseLog2.setPrice(price2); + hotelLeaseLog2.setNum(num); + hotelLeaseLogService.updateById(hotelLeaseLog2); + + + hotelLeaseLogService.removeById(hotelLeaseLog.getId()); + } + + + + } @@ -1764,6 +3013,14 @@ public class OrderServiceImpl implements IOrderService { .eq(HotelOrder::getShopId,hanHaiMember.getId()) .eq(HotelOrder::getId, confirmAcceptOrderReq.getId()) .one(); + + List hotelOrderDetails = hotelOrderDetailService.lambdaQuery() + .eq(HotelOrderDetail::getDelFlag, 0) + .eq(HotelOrderDetail::getId, hotelOrder.getId()) + .list(); + + + HotelOrder hotelOrder1 = new HotelOrder(); hotelOrder1.setId(hotelOrder.getId()); @@ -1785,6 +3042,14 @@ public class OrderServiceImpl implements IOrderService { hotelOrder1.setStatus(6); break; case 6: + HotelLeaseLog hotelLeaseLog = hotelLeaseLogService.lambdaQuery() + .eq(HotelLeaseLog::getDelFlag, 0) + .eq(HotelLeaseLog::getId, hotelOrderDetails.get(0).getLeaseId()) + .one(); + HotelLeaseLog hotelLeaseLog1 = new HotelLeaseLog(); + hotelLeaseLog1.setId(hotelLeaseLog.getId()); + hotelLeaseLog1.setWashNum(hotelLeaseLog.getWashNum() - hotelOrderDetails.get(0).getNum()); + hotelLeaseLogService.updateById(hotelLeaseLog1); hotelOrder1.setStatus(15); break; } @@ -1879,6 +3144,56 @@ public class OrderServiceImpl implements IOrderService { return Result.OK(); } + @Override + public Result cancelOrder2(CancelOrderReq cancelOrderReq) { + HanHaiMember hanHaiMember = shiroRealm.checkUserTokenIsEffectHanHaiAccount(cancelOrderReq.getToken()); + HotelOrder hotelOrder = hotelOrderService.lambdaQuery() + .eq(HotelOrder::getDelFlag, 0) + .in(HotelOrder::getStatus, 0, 3) + .eq(HotelOrder::getUserId,hanHaiMember.getId()) + .eq(HotelOrder::getId, cancelOrderReq.getId()) + .one(); + if(hotelOrder == null){ + throw new JeecgBootException("未找到该订单"); + } + + if(hotelOrder.getType() == 1){ + HotelOrderDetail hotelOrderDetail = hotelOrderDetailService.lambdaQuery() + .eq(HotelOrderDetail::getDelFlag, 0) + .eq(HotelOrderDetail::getOrderId, hotelOrder.getId()) + .one(); + //子物品 + HotelLeaseLog hotelLeaseLog = hotelLeaseLogService.lambdaQuery() + .eq(HotelLeaseLog::getDelFlag,0) + .eq(HotelLeaseLog::getId, hotelOrderDetail.getLeaseId()) + .one(); + + //父物品 + HotelLeaseLog hotelLeaseLog1 = hotelLeaseLogService.lambdaQuery() + .eq(HotelLeaseLog::getDelFlag, 0) + .eq(HotelLeaseLog::getId, hotelLeaseLog.getPid()) + .one(); + + int num = hotelLeaseLog1.getNum() + hotelLeaseLog.getNum(); + BigDecimal price = hotelLeaseLog1.getPrice().add(hotelLeaseLog.getPrice()); + HotelLeaseLog hotelLeaseLog2 = new HotelLeaseLog(); + hotelLeaseLog2.setId(hotelLeaseLog1.getId()); + hotelLeaseLog2.setNum(num); + hotelLeaseLog2.setPrice(price); + hotelLeaseLogService.updateById(hotelLeaseLog2); + + hotelLeaseLogService.removeById(hotelLeaseLog.getId()); + + } + + + HotelOrder hotelOrder1 = new HotelOrder(); + hotelOrder1.setId(hotelOrder.getId()); + hotelOrderService.removeById(hotelOrder1); + + return Result.OK(); + } + @Override public Result replaceOrderPay(ReplaceOrderPayReq replaceOrderPayReq) { HanHaiMember hanHaiMember = shiroRealm.checkUserTokenIsEffectHanHaiAccount(replaceOrderPayReq.getToken());