From 2f4b9816caa150a948ba6fabe3e4025f4667a236 Mon Sep 17 00:00:00 2001 From: KKSU <15274802129@163.com> Date: Fri, 02 Feb 2024 11:11:09 +0800 Subject: [PATCH] 购物车使用优惠卷 --- src/main/java/cc/mrbird/febs/mall/entity/MallOrderItem.java | 3 + src/main/java/cc/mrbird/febs/mall/service/MallInvoiceService.java | 2 src/main/java/cc/mrbird/febs/mall/controller/ApiMallOrderController.java | 6 ++ src/main/java/cc/mrbird/febs/mall/service/IApiMallOrderInfoService.java | 2 src/main/java/cc/mrbird/febs/mall/dto/ApiChooseCouponDto.java | 18 ++++++ src/main/java/cc/mrbird/febs/mall/service/impl/ApiMallOrderInfoServiceImpl.java | 40 ++++++++++--- src/main/java/cc/mrbird/febs/mall/vo/ApiCouponAmountMapVo.java | 16 +++++ src/main/java/cc/mrbird/febs/mall/controller/AdminMallOrderController.java | 11 +++ src/main/java/cc/mrbird/febs/mall/vo/OrderItemVo.java | 3 + src/main/java/cc/mrbird/febs/mall/service/impl/MallInvoiceServiceImpl.java | 24 ++++++++ src/main/resources/templates/febs/views/modules/order/invoiceList.html | 15 ++++ 11 files changed, 129 insertions(+), 11 deletions(-) diff --git a/src/main/java/cc/mrbird/febs/mall/controller/AdminMallOrderController.java b/src/main/java/cc/mrbird/febs/mall/controller/AdminMallOrderController.java index cff652b..7973074 100644 --- a/src/main/java/cc/mrbird/febs/mall/controller/AdminMallOrderController.java +++ b/src/main/java/cc/mrbird/febs/mall/controller/AdminMallOrderController.java @@ -704,4 +704,15 @@ return mallInvoiceService.updateInvoiceDetail(id); } + /** + * 发票列表-更新订单状态 + * @param id + * @return + */ + @GetMapping("updateOrderDetail/{id}") + @ControllerEndpoint(operation = "发票列表-更新订单状态", exceptionMessage = "操作失败") + public FebsResponse updateOrderDetail(@NotNull(message = "{required}") @PathVariable Long id) { + return mallInvoiceService.updateOrderDetail(id); + } + } diff --git a/src/main/java/cc/mrbird/febs/mall/controller/ApiMallOrderController.java b/src/main/java/cc/mrbird/febs/mall/controller/ApiMallOrderController.java index 5975313..bdb6196 100644 --- a/src/main/java/cc/mrbird/febs/mall/controller/ApiMallOrderController.java +++ b/src/main/java/cc/mrbird/febs/mall/controller/ApiMallOrderController.java @@ -39,6 +39,12 @@ return mallOrderInfoService.createOrderVerify(apiCreateOrderVerifyDto); } + @ApiOperation(value = "选择优惠卷", notes = "选择优惠卷") + @PostMapping(value = "/chooseCoupon") + public FebsResponse chooseCoupon(@RequestBody ApiChooseCouponDto chooseCouponDto) { + return mallOrderInfoService.chooseCoupon(chooseCouponDto); + } + @ApiOperation(value = "创建订单", notes = "创建订单") @PostMapping(value = "/createOrder") public FebsResponse createOrder(@RequestBody AddOrderDto addOrderDto) { diff --git a/src/main/java/cc/mrbird/febs/mall/dto/ApiChooseCouponDto.java b/src/main/java/cc/mrbird/febs/mall/dto/ApiChooseCouponDto.java new file mode 100644 index 0000000..f5b92ed --- /dev/null +++ b/src/main/java/cc/mrbird/febs/mall/dto/ApiChooseCouponDto.java @@ -0,0 +1,18 @@ +package cc.mrbird.febs.mall.dto; + +import io.swagger.annotations.ApiModel; +import io.swagger.annotations.ApiModelProperty; +import lombok.Data; +import java.util.List; + +@Data +@ApiModel(value = "ApiChooseCouponDto", description = "参数接收类") +public class ApiChooseCouponDto { + + @ApiModelProperty(value = "会员优惠卷ID") + private Long memberCouponId; + + @ApiModelProperty(value = "商品明细") + private List<AddOrderItemDto> items; + +} diff --git a/src/main/java/cc/mrbird/febs/mall/entity/MallOrderItem.java b/src/main/java/cc/mrbird/febs/mall/entity/MallOrderItem.java index 3bdbce5..29c9ed8 100644 --- a/src/main/java/cc/mrbird/febs/mall/entity/MallOrderItem.java +++ b/src/main/java/cc/mrbird/febs/mall/entity/MallOrderItem.java @@ -55,4 +55,7 @@ @TableField(exist = false) private String unit; + + @TableField(exist = false) + private BigDecimal itemAmount; } diff --git a/src/main/java/cc/mrbird/febs/mall/service/IApiMallOrderInfoService.java b/src/main/java/cc/mrbird/febs/mall/service/IApiMallOrderInfoService.java index 5632b26..1036672 100644 --- a/src/main/java/cc/mrbird/febs/mall/service/IApiMallOrderInfoService.java +++ b/src/main/java/cc/mrbird/febs/mall/service/IApiMallOrderInfoService.java @@ -44,4 +44,6 @@ FebsResponse cancelRefundOrder(Long id); FebsResponse createOrderVerify(ApiCreateOrderVerifyDto apiCreateOrderVerifyDto); + + FebsResponse chooseCoupon(ApiChooseCouponDto chooseCouponDto); } diff --git a/src/main/java/cc/mrbird/febs/mall/service/MallInvoiceService.java b/src/main/java/cc/mrbird/febs/mall/service/MallInvoiceService.java index 4be679a..e13ef1f 100644 --- a/src/main/java/cc/mrbird/febs/mall/service/MallInvoiceService.java +++ b/src/main/java/cc/mrbird/febs/mall/service/MallInvoiceService.java @@ -28,4 +28,6 @@ FebsResponse addInvoiceUrl(MallInvoice mallInvoice); FebsResponse updateInvoiceDetail(Long id); + + FebsResponse updateOrderDetail(Long id); } diff --git a/src/main/java/cc/mrbird/febs/mall/service/impl/ApiMallOrderInfoServiceImpl.java b/src/main/java/cc/mrbird/febs/mall/service/impl/ApiMallOrderInfoServiceImpl.java index 924fbef..1b46a1c 100644 --- a/src/main/java/cc/mrbird/febs/mall/service/impl/ApiMallOrderInfoServiceImpl.java +++ b/src/main/java/cc/mrbird/febs/mall/service/impl/ApiMallOrderInfoServiceImpl.java @@ -13,10 +13,7 @@ import cc.mrbird.febs.mall.entity.*; import cc.mrbird.febs.mall.mapper.*; import cc.mrbird.febs.mall.service.*; -import cc.mrbird.febs.mall.vo.ApiLeaderListVo; -import cc.mrbird.febs.mall.vo.OrderDetailVo; -import cc.mrbird.febs.mall.vo.OrderListVo; -import cc.mrbird.febs.mall.vo.OrderRefundVo; +import cc.mrbird.febs.mall.vo.*; import cc.mrbird.febs.pay.model.BrandWCPayRequestData; import cc.mrbird.febs.pay.model.OrderStateDto; import cc.mrbird.febs.pay.service.IPayService; @@ -219,11 +216,13 @@ //是否使用优惠卷 if(ObjectUtil.isNotEmpty(addOrderDto.getMemberCouponId())){ Long memberCouponId = addOrderDto.getMemberCouponId(); - BigDecimal skuCouponAmount = couponAmountMap.get(item.getSkuId());//使用折扣卷后的应该支付的钱 - if(skuCouponAmount.compareTo(BigDecimal.ZERO) > 0){ - amount = skuCouponAmount; + if(ObjectUtil.isNotEmpty(couponAmountMap.get(item.getSkuId()))){ + BigDecimal skuCouponAmount = couponAmountMap.get(item.getSkuId());//使用折扣卷后的应该支付的钱 + if(skuCouponAmount.compareTo(BigDecimal.ZERO) > 0){ + amount = skuCouponAmount; + } + orderItem.setMemberCouponId(memberCouponId); } - orderItem.setMemberCouponId(memberCouponId); } orderItem.setAmount(amount); orderItem.setCnt(item.getCnt()); @@ -352,14 +351,14 @@ skuMapPercent.put(keySkuId,divide); Integer type = mallGoodsCoupon.getType(); if(MallGoodsCoupon.TYPE_ONE == type){ - BigDecimal bigDecimal = realAmount.multiply(divide).setScale(2, BigDecimal.ROUND_DOWN);//每个SKU的减免金额(比例*减免金额) + BigDecimal bigDecimal = realAmount.multiply(divide).setScale(0, BigDecimal.ROUND_DOWN);//每个SKU的减免金额(比例*减免金额) BigDecimal skuRealAmount = valueSkuAmount.subtract(bigDecimal.compareTo(BigDecimal.ZERO) > 0 ? bigDecimal : BigDecimal.ZERO);//实际支付金额 couponAmountMap.put(keySkuId,skuRealAmount); } if(MallGoodsCoupon.TYPE_TWO == type){ BigDecimal divideTime = totalAmount.divide(costAmount, 0, BigDecimal.ROUND_DOWN);//累计减免次数 BigDecimal multiply = divideTime.multiply(realAmount);//实际减免金额 - BigDecimal bigDecimal = multiply.multiply(divide).setScale(2, BigDecimal.ROUND_DOWN);//每个SKU的减免金额(比例*实际减免金额) + BigDecimal bigDecimal = multiply.multiply(divide).setScale(0, BigDecimal.ROUND_DOWN);//每个SKU的减免金额(比例*实际减免金额) BigDecimal skuRealAmount = valueSkuAmount.subtract(bigDecimal.compareTo(BigDecimal.ZERO) > 0 ? bigDecimal : BigDecimal.ZERO);//实际支付金额 couponAmountMap.put(keySkuId,skuRealAmount); } @@ -612,6 +611,12 @@ // if (orderInfo == null || AppContants.DEL_FLAG_Y == orderInfo.getDelFlag()) { if (ObjectUtil.isNull(orderInfo)) { throw new FebsException("订单不存在"); + } + List<MallOrderItem> items = orderInfo.getItems(); + if(CollUtil.isNotEmpty(items)){ + for(MallOrderItem mallOrderItem : items){ + mallOrderItem.setItemAmount(mallOrderItemMapper.selectById(mallOrderItem.getId()).getAmount()); + } } OrderDetailVo orderDetailVo = MallOrderInfoConversion.INSTANCE.entityToDetailVo(orderInfo); @@ -1035,4 +1040,19 @@ return new FebsResponse().success(); } + @Override + public FebsResponse chooseCoupon(ApiChooseCouponDto chooseCouponDto) { + Map<Long, BigDecimal> couponAmountMap = getCouponAmountMap(chooseCouponDto.getMemberCouponId(), chooseCouponDto.getItems()); + ArrayList<ApiCouponAmountMapVo> objects = new ArrayList<>(); + for (Map.Entry<Long,BigDecimal> entry : couponAmountMap.entrySet()) { + Long keySkuId = entry.getKey(); + BigDecimal valueSkuAmount = entry.getValue(); + ApiCouponAmountMapVo apiCouponAmountMapVo = new ApiCouponAmountMapVo(); + apiCouponAmountMapVo.setId(keySkuId); + apiCouponAmountMapVo.setAmount(valueSkuAmount); + objects.add(apiCouponAmountMapVo); + } + return new FebsResponse().success().data(objects); + } + } diff --git a/src/main/java/cc/mrbird/febs/mall/service/impl/MallInvoiceServiceImpl.java b/src/main/java/cc/mrbird/febs/mall/service/impl/MallInvoiceServiceImpl.java index 1739659..ae2b541 100644 --- a/src/main/java/cc/mrbird/febs/mall/service/impl/MallInvoiceServiceImpl.java +++ b/src/main/java/cc/mrbird/febs/mall/service/impl/MallInvoiceServiceImpl.java @@ -157,4 +157,28 @@ } return new FebsResponse().success(); } + + @Override + @Transactional + public FebsResponse updateOrderDetail(Long id) { + MallInvoice mallInvoice = this.baseMapper.selectById(id); + String fapiaoApplyId = mallInvoice.getFapiaoApplyId(); + MallOrderInfo mallOrderInfo = mallOrderInfoMapper.selectBypayOrderNo(fapiaoApplyId); + if(OrderStatusEnum.FINISH.getValue() != mallOrderInfo.getStatus()){ + return new FebsResponse().fail().message("当前订单还未完成。"); + } + /** + * fapiao_apply_id + * 发票申请单号,唯一标识一次开票行为。微信支付场景下,为微信支付订单号;非微信支付场景下,为调用【获取抬头填写链接】接口时指定的发票申请单号 + * 对应订单信息的pay_order_no支付订单号 + */ + mallInvoice.setStatus(mallOrderInfo.getStatus()); + this.baseMapper.updateById(mallInvoice); + /** + * 更新订单为已开票 + */ + mallOrderInfo.setIsInvoice(1); + mallOrderInfoMapper.updateById(mallOrderInfo); + return new FebsResponse().success(); + } } diff --git a/src/main/java/cc/mrbird/febs/mall/vo/ApiCouponAmountMapVo.java b/src/main/java/cc/mrbird/febs/mall/vo/ApiCouponAmountMapVo.java new file mode 100644 index 0000000..3f36cb7 --- /dev/null +++ b/src/main/java/cc/mrbird/febs/mall/vo/ApiCouponAmountMapVo.java @@ -0,0 +1,16 @@ +package cc.mrbird.febs.mall.vo; + +import io.swagger.annotations.ApiModel; +import io.swagger.annotations.ApiModelProperty; +import lombok.Data; + +import java.math.BigDecimal; + +@Data +@ApiModel(value = "ApiCouponAmountMapVo", description = "信息返回类") +public class ApiCouponAmountMapVo { + @ApiModelProperty(value = "SKUID") + private Long id; + @ApiModelProperty(value = "优惠后金额") + private BigDecimal amount; +} diff --git a/src/main/java/cc/mrbird/febs/mall/vo/OrderItemVo.java b/src/main/java/cc/mrbird/febs/mall/vo/OrderItemVo.java index fb4061a..d7a0c3d 100644 --- a/src/main/java/cc/mrbird/febs/mall/vo/OrderItemVo.java +++ b/src/main/java/cc/mrbird/febs/mall/vo/OrderItemVo.java @@ -53,4 +53,7 @@ @ApiModelProperty(value = "1:正常 2:退款中3:已退") private Integer state; + + @ApiModelProperty(value = "支付金额") + private BigDecimal itemAmount; } diff --git a/src/main/resources/templates/febs/views/modules/order/invoiceList.html b/src/main/resources/templates/febs/views/modules/order/invoiceList.html index 5a19dee..595a776 100644 --- a/src/main/resources/templates/febs/views/modules/order/invoiceList.html +++ b/src/main/resources/templates/febs/views/modules/order/invoiceList.html @@ -127,7 +127,19 @@ updateInvoiceDetail(data.id); }); } + if (layEvent === 'updateOrderDetail') { + febs.modal.confirm('更新', '是否更新订单状态信息?', function () { + updateOrderDetail(data.id); + }); + } }); + + function updateOrderDetail(id) { + febs.get(ctx + 'admin/order/updateOrderDetail/' + id, null, function () { + febs.alert.success('操作成功'); + $query.click(); + }); + } function updateInvoiceDetail(id) { febs.get(ctx + 'admin/order/updateInvoiceDetail/' + id, null, function () { @@ -212,9 +224,10 @@ templet: function (d) { if(d.status === 4){ return '<button class="layui-btn layui-btn-normal layui-btn-xs" lay-event="seeInvoiceDetail" shiro:hasPermission="user:update">开票信息</button>' + + '<button class="layui-btn layui-btn-normal layui-btn-xs" lay-event="updateOrderDetail" shiro:hasPermission="user:update">更新订单状态</button>'+ '<button class="layui-btn layui-btn-normal layui-btn-xs" lay-event="updateInvoiceDetail" shiro:hasPermission="user:update">更新抬头</button>' }else{ - return '' + return '<button class="layui-btn layui-btn-normal layui-btn-xs" lay-event="updateOrderDetail" shiro:hasPermission="user:update">更新订单状态</button>' } },minWidth: 300,align:'center', fixed:'right'} ]] -- Gitblit v1.9.1