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); } } 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) { src/main/java/cc/mrbird/febs/mall/dto/ApiChooseCouponDto.java
New file @@ -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; } 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; } 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); } 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); } 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); } } 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(); } } src/main/java/cc/mrbird/febs/mall/vo/ApiCouponAmountMapVo.java
New file @@ -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; } 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; } 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'} ]]