sql/xc_mall.sql
@@ -243,3 +243,36 @@ alter table mall_order_info add receiving_time datetime null comment '收货时间'; DROP TABLE IF EXISTS mall_order_refund; CREATE TABLE mall_order_refund( REVISION INT COMMENT '乐观锁' , CREATED_BY VARCHAR(32) COMMENT '创建人' , CREATED_TIME DATETIME COMMENT '创建时间' , UPDATED_BY VARCHAR(32) COMMENT '更新人' , UPDATED_TIME DATETIME COMMENT '更新时间' , ID BIGINT NOT NULL AUTO_INCREMENT COMMENT '主键' , member_id BIGINT COMMENT '用户ID' , order_id BIGINT COMMENT '订单ID' , reason VARCHAR(255) COMMENT '退款原因' , desp TEXT COMMENT '描述' , remark TEXT COMMENT '备注' , status INT COMMENT '状态;1-已申请2-同意退款3-驳回退款4-已提交物流信息5-已退款' , express_no VARCHAR(255) COMMENT '物流单号' , express_com VARCHAR(255) COMMENT '物流公司' , PRIMARY KEY (ID) ) COMMENT = '订单退款'; DROP TABLE IF EXISTS mall_order_refund_operation; CREATE TABLE mall_order_refund_operation( REVISION INT COMMENT '乐观锁' , CREATED_BY VARCHAR(32) COMMENT '创建人' , CREATED_TIME DATETIME COMMENT '创建时间' , UPDATED_BY VARCHAR(32) COMMENT '更新人' , UPDATED_TIME DATETIME COMMENT '更新时间' , ID BIGINT NOT NULL AUTO_INCREMENT COMMENT '主键' , refund_id BIGINT COMMENT '退款ID' , order_id BIGINT COMMENT '订单ID' , content TEXT COMMENT '操作内容' , PRIMARY KEY (ID) ) COMMENT = '退款操作明细'; src/main/java/cc/mrbird/febs/common/enumerates/OrderRefundStatusEnum.java
New file @@ -0,0 +1,42 @@ package cc.mrbird.febs.common.enumerates; import lombok.Getter; /** * @author wzy * @date 2021-09-23 **/ @Getter public enum OrderRefundStatusEnum { /** * 退款已提交 */ REFUND_APPLY(1), /** * 同意退款 */ AGREE(2), /** * 驳回退款 */ DISAGREE(3), /** * 物流信息已提交 */ EXPRESS_SUBMIT(4), /** * 已退款 */ FINISH(5), /** * 已取消 */ CANCEL(6); private final Integer value; OrderRefundStatusEnum(int value) { this.value = value; } } src/main/java/cc/mrbird/febs/common/enumerates/OrderStatusEnum.java
@@ -26,7 +26,7 @@ */ REFUNDING(5), /** * 已退款 * 退款处理完成 */ REFUNDED(6), /** src/main/java/cc/mrbird/febs/common/utils/AppContants.java
@@ -58,5 +58,9 @@ public static final String TIME_OUT = "time_out"; public static final int DEL_FLAG_Y = 1; public static final int DEL_FLAG_N = 2; } src/main/java/cc/mrbird/febs/mall/controller/ApiMallOrderController.java
@@ -1,9 +1,7 @@ package cc.mrbird.febs.mall.controller; import cc.mrbird.febs.common.entity.FebsResponse; import cc.mrbird.febs.mall.dto.AddOrderDto; import cc.mrbird.febs.mall.dto.OrderListDto; import cc.mrbird.febs.mall.dto.PayOrderDto; import cc.mrbird.febs.mall.dto.*; import cc.mrbird.febs.mall.service.IApiMallOrderInfoService; import cc.mrbird.febs.mall.vo.OrderDetailVo; import cc.mrbird.febs.mall.vo.OrderListVo; @@ -85,4 +83,24 @@ return new FebsResponse().success().message("确认成功"); } @ApiOperation(value = "删除订单", notes = "删除订单") @PostMapping(value = "/delOrder/{id}") public FebsResponse delOrder(@PathVariable("id") Long id) { mallOrderInfoService.delOrder(id); return new FebsResponse().success().message("删除成功"); } @ApiOperation(value = "提交退款申请", notes = "提交退款申请") @PostMapping(value = "/applyRefund") public FebsResponse applyRefund(@RequestBody AddRefundDto addRefundDto) { mallOrderInfoService.applyRefund(addRefundDto); return new FebsResponse().success().message("提交成功"); } @ApiOperation(value = "提交退款物流信息", notes = "提交退款物流信息") @PostMapping(value = "/refundExpress") public FebsResponse refundExpress(@RequestBody RefundExpressDto refundExpressDto) { mallOrderInfoService.refundExpress(refundExpressDto); return new FebsResponse().success().message("提交成功"); } } src/main/java/cc/mrbird/febs/mall/controller/ApiMallShoppingCartController.java
@@ -2,8 +2,12 @@ import cc.mrbird.febs.common.entity.FebsResponse; import cc.mrbird.febs.mall.dto.AddCartDto; import cc.mrbird.febs.mall.dto.DelCartGoodsDto; import cc.mrbird.febs.mall.dto.GoodsCntDto; import cc.mrbird.febs.mall.entity.MallShoppingCart; import cc.mrbird.febs.mall.service.IApiMallShoppingCartService; import cc.mrbird.febs.mall.vo.ShoppingCartGoodsVo; import cn.hutool.core.util.StrUtil; import io.swagger.annotations.Api; import io.swagger.annotations.ApiOperation; import io.swagger.annotations.ApiResponse; @@ -12,6 +16,8 @@ import lombok.extern.slf4j.Slf4j; import org.springframework.validation.annotation.Validated; import org.springframework.web.bind.annotation.*; import java.util.List; /** * @author wzy @@ -44,9 +50,21 @@ } @ApiOperation(value = "从购物车中删除商品", notes = "从购物车中删除商品") @PostMapping(value = "/delGoods/{id}") public FebsResponse delGoods(@PathVariable("id") Long id) { mallShoppingCartService.removeById(id); @PostMapping(value = "/delGoods") public FebsResponse delGoods(@RequestBody DelCartGoodsDto delCartGoodsDto) { List<String> ids = StrUtil.split(delCartGoodsDto.getIds(), ','); mallShoppingCartService.removeByIds(ids); return new FebsResponse().success().data("删除成功"); } @ApiOperation(value = "修改购物车商品数量", notes = "修改购物车商品数量") @PostMapping(value = "/goodsCnt") public FebsResponse goodsCnt(@RequestBody GoodsCntDto goodsCntDto) { MallShoppingCart shoppingCart = new MallShoppingCart(); shoppingCart.setId(goodsCntDto.getId()); shoppingCart.setCnt(goodsCntDto.getCnt()); mallShoppingCartService.updateById(shoppingCart); return new FebsResponse().success(); } } src/main/java/cc/mrbird/febs/mall/conversion/MallOrderRefundConversion.java
New file @@ -0,0 +1,17 @@ package cc.mrbird.febs.mall.conversion; import cc.mrbird.febs.mall.entity.MallOrderRefund; import cc.mrbird.febs.mall.vo.OrderRefundVo; import org.mapstruct.Mapper; import org.mapstruct.factory.Mappers; /** * @author wzy * @date 2021-09-23 **/ @Mapper public abstract class MallOrderRefundConversion { public static final MallOrderRefundConversion INSTANCE = Mappers.getMapper(MallOrderRefundConversion.class); public abstract OrderRefundVo entityToVo(MallOrderRefund orderRefund); } src/main/java/cc/mrbird/febs/mall/dto/AddRefundDto.java
New file @@ -0,0 +1,23 @@ package cc.mrbird.febs.mall.dto; import io.swagger.annotations.ApiModel; import io.swagger.annotations.ApiModelProperty; import lombok.Data; /** * @author wzy * @date 2021-09-23 **/ @Data @ApiModel(value = "AddRefundDto", description = "提交退款申请参数接收类") public class AddRefundDto { @ApiModelProperty(value = "订单ID", example = "1") private Long id; @ApiModelProperty(value = "退款原因", example = "太差了") private String reason; @ApiModelProperty(value = "描述", example = "描述") private String desp; } src/main/java/cc/mrbird/febs/mall/dto/DelCartGoodsDto.java
New file @@ -0,0 +1,20 @@ package cc.mrbird.febs.mall.dto; import io.swagger.annotations.ApiModel; import io.swagger.annotations.ApiModelProperty; import lombok.Data; import javax.validation.constraints.NotBlank; /** * @author wzy * @date 2021-09-23 **/ @Data @ApiModel(value = "DelCartGoodsDto", description = "删除购物车商品接口接收参数类") public class DelCartGoodsDto { @NotBlank(message = "参数不能为空") @ApiModelProperty(value = "逗号隔开id", example = "1,2,3") private String ids; } src/main/java/cc/mrbird/febs/mall/dto/GoodsCntDto.java
New file @@ -0,0 +1,25 @@ package cc.mrbird.febs.mall.dto; import io.swagger.annotations.ApiModel; import io.swagger.annotations.ApiModelProperty; import lombok.Data; import javax.validation.constraints.Min; import javax.validation.constraints.NotNull; /** * @author wzy * @date 2021-09-23 **/ @Data @ApiModel(value = "GoodsCntDto", description = "修改购物车数量参数接收类") public class GoodsCntDto { @NotNull(message = "参数不能为空") @ApiModelProperty(value = "购物车ID", example = "1") private Long id; @Min(1) @ApiModelProperty(value = "数量", example = "12") private Integer cnt; } src/main/java/cc/mrbird/febs/mall/dto/RefundExpressDto.java
New file @@ -0,0 +1,24 @@ package cc.mrbird.febs.mall.dto; import io.swagger.annotations.ApiModel; import io.swagger.annotations.ApiModelProperty; import lombok.Data; /** * @author wzy * @date 2021-09-23 **/ @Data @ApiModel(value = "RefundExpressDto", description = "退款订单物流接收参数类") public class RefundExpressDto { @ApiModelProperty(value = "订单ID", example = "1") private Long id; @ApiModelProperty(value = "物流单号", example = "123") private String expressNo; @ApiModelProperty(value = "物流公司", example = "中通") private String expressCom; } src/main/java/cc/mrbird/febs/mall/entity/MallOrderRefund.java
New file @@ -0,0 +1,33 @@ package cc.mrbird.febs.mall.entity; import cc.mrbird.febs.common.entity.BaseEntity; import com.baomidou.mybatisplus.annotation.TableName; import lombok.Data; /** * @author wzy * @date 2021-09-23 **/ @Data @TableName("mall_order_refund") public class MallOrderRefund extends BaseEntity { private Long memberId; private Long orderId; private String reason; private String desp; private String remark; /** * 1-已申请 2-同意退款 3-驳回退款 4-已提交物流信息 5-已退款 6-已取消 */ private Integer status; private String expressNo; private String expressCom; } src/main/java/cc/mrbird/febs/mall/entity/MallOrderRefundOperation.java
New file @@ -0,0 +1,20 @@ package cc.mrbird.febs.mall.entity; import cc.mrbird.febs.common.entity.BaseEntity; import com.baomidou.mybatisplus.annotation.TableName; import lombok.Data; /** * @author wzy * @date 2021-09-23 **/ @Data @TableName("mall_order_refund_operation") public class MallOrderRefundOperation extends BaseEntity { private Long refundId; private Long orderId; private String content; } src/main/java/cc/mrbird/febs/mall/mapper/MallOrderRefundMapper.java
New file @@ -0,0 +1,10 @@ package cc.mrbird.febs.mall.mapper; import cc.mrbird.febs.mall.entity.MallOrderRefund; import com.baomidou.mybatisplus.core.mapper.BaseMapper; import org.apache.ibatis.annotations.Param; public interface MallOrderRefundMapper extends BaseMapper<MallOrderRefund> { MallOrderRefund selectOrderRefundByOrderId(@Param("orderId") Long orderId); } src/main/java/cc/mrbird/febs/mall/mapper/MallOrderRefundOperationMapper.java
New file @@ -0,0 +1,7 @@ package cc.mrbird.febs.mall.mapper; import cc.mrbird.febs.mall.entity.MallOrderRefundOperation; import com.baomidou.mybatisplus.core.mapper.BaseMapper; public interface MallOrderRefundOperationMapper extends BaseMapper<MallOrderRefundOperation> { } src/main/java/cc/mrbird/febs/mall/mapper/MallShoppingCartMapper.java
@@ -15,4 +15,6 @@ List<MallShoppingCart> selectCartGoodsList(@Param("memberId") Long memberId); MallShoppingCart selectCartGoodsBySkuId(@Param("skuId") Long skuId, @Param("memberId") Long memberId); int delBySkuId(@Param("skuId") Long skuId, @Param("memberId") Long memberId); } src/main/java/cc/mrbird/febs/mall/service/IApiMallOrderInfoService.java
@@ -1,8 +1,6 @@ package cc.mrbird.febs.mall.service; import cc.mrbird.febs.mall.dto.AddOrderDto; import cc.mrbird.febs.mall.dto.OrderListDto; import cc.mrbird.febs.mall.dto.PayOrderDto; import cc.mrbird.febs.mall.dto.*; import cc.mrbird.febs.mall.entity.MallOrderInfo; import cc.mrbird.febs.mall.vo.OrderDetailVo; import cc.mrbird.febs.mall.vo.OrderListVo; @@ -23,4 +21,10 @@ OrderDetailVo findOrderDetailsById(Long id); void confirmOrder(Long id); void delOrder(Long id); void applyRefund(AddRefundDto addRefundDto); void refundExpress(RefundExpressDto refundExpressDto); } src/main/java/cc/mrbird/febs/mall/service/impl/ApiMallOrderInfoServiceImpl.java
@@ -1,20 +1,21 @@ package cc.mrbird.febs.mall.service.impl; import cc.mrbird.febs.common.enumerates.OrderRefundStatusEnum; import cc.mrbird.febs.common.enumerates.OrderStatusEnum; import cc.mrbird.febs.common.exception.FebsException; import cc.mrbird.febs.common.utils.AppContants; import cc.mrbird.febs.common.utils.LoginUserUtil; import cc.mrbird.febs.common.utils.MallUtils; import cc.mrbird.febs.mall.conversion.MallOrderInfoConversion; import cc.mrbird.febs.mall.dto.AddOrderDto; import cc.mrbird.febs.mall.dto.AddOrderItemDto; import cc.mrbird.febs.mall.dto.OrderListDto; import cc.mrbird.febs.mall.dto.PayOrderDto; import cc.mrbird.febs.mall.conversion.MallOrderRefundConversion; import cc.mrbird.febs.mall.dto.*; import cc.mrbird.febs.mall.entity.*; import cc.mrbird.febs.mall.mapper.*; import cc.mrbird.febs.mall.service.IApiMallMemberWalletService; import cc.mrbird.febs.mall.service.IApiMallOrderInfoService; import cc.mrbird.febs.mall.vo.OrderDetailVo; import cc.mrbird.febs.mall.vo.OrderListVo; import cc.mrbird.febs.mall.vo.OrderRefundVo; import cn.hutool.core.collection.CollUtil; import cn.hutool.core.util.StrUtil; import cn.hutool.crypto.SecureUtil; @@ -48,6 +49,9 @@ private final MallMemberMapper memberMapper; private final IApiMallMemberWalletService memberWalletService; private final MallExpressInfoMapper expressInfoMapper; private final MallOrderRefundMapper mallOrderRefundMapper; private final MallOrderRefundOperationMapper mallOrderRefundOperationMapper; private final MallShoppingCartMapper mallShoppingCartMapper; @Override @Transactional(rollbackFor = Exception.class) @@ -106,6 +110,10 @@ sku.setStock(sku.getStock() - item.getCnt()); mallGoodsSkuMapper.updateById(sku); if (addOrderDto.getType() == 1) { mallShoppingCartMapper.delBySkuId(sku.getId(), member.getId()); } } orderInfo.setAmount(total); @@ -119,7 +127,7 @@ public void cancelOrder(Long id) { MallMember member = LoginUserUtil.getLoginUser(); MallOrderInfo orderInfo = this.baseMapper.selectOrderByMemberIdAndId(member.getId(), id); if (orderInfo == null) { if (orderInfo == null || AppContants.DEL_FLAG_Y == orderInfo.getDelFlag()) { throw new FebsException("订单不存在"); } @@ -137,7 +145,7 @@ public String payOrder(PayOrderDto payOrderDto) { MallMember member = LoginUserUtil.getLoginUser(); MallOrderInfo orderInfo = this.baseMapper.selectOrderByMemberIdAndId(member.getId(), payOrderDto.getId()); if (orderInfo == null) { if (orderInfo == null || AppContants.DEL_FLAG_Y == orderInfo.getDelFlag()) { throw new FebsException("订单不存在"); } @@ -186,7 +194,7 @@ @Override public OrderDetailVo findOrderDetailsById(Long id) { MallOrderInfo orderInfo = this.baseMapper.selectOrderDetailsById(id); if (orderInfo == null) { if (orderInfo == null || AppContants.DEL_FLAG_Y == orderInfo.getDelFlag()) { throw new FebsException("订单不存在"); } @@ -197,6 +205,12 @@ orderDetailVo.setExpressNo(expressInfo.getExpressNo()); orderDetailVo.setExpressCom(expressInfo.getExpressCom()); } if (orderInfo.getStatus() == OrderStatusEnum.REFUNDING.getValue() || orderInfo.getStatus() == OrderStatusEnum.REFUNDED.getValue()) { MallOrderRefund orderRefund = mallOrderRefundMapper.selectOrderRefundByOrderId(orderInfo.getId()); OrderRefundVo orderRefundVo = MallOrderRefundConversion.INSTANCE.entityToVo(orderRefund); orderDetailVo.setOrderRefund(orderRefundVo); } return orderDetailVo; } @@ -205,12 +219,92 @@ public void confirmOrder(Long id) { MallMember member = LoginUserUtil.getLoginUser(); MallOrderInfo orderInfo = this.baseMapper.selectOrderByMemberIdAndId(member.getId(), id); if (orderInfo == null) { if (orderInfo == null || AppContants.DEL_FLAG_Y == orderInfo.getDelFlag()) { throw new FebsException("订单不存在"); } if (orderInfo.getStatus() != OrderStatusEnum.WAIT_FINISH.getValue()) { throw new FebsException("该状态不能确认收货"); } orderInfo.setStatus(OrderStatusEnum.FINISH.getValue()); orderInfo.setReceivingTime(new Date()); this.baseMapper.updateById(orderInfo); } @Override public void delOrder(Long id) { MallMember member = LoginUserUtil.getLoginUser(); MallOrderInfo orderInfo = this.baseMapper.selectOrderByMemberIdAndId(member.getId(), id); if (orderInfo == null || AppContants.DEL_FLAG_Y == orderInfo.getDelFlag()) { throw new FebsException("订单不存在"); } orderInfo.setDelFlag(AppContants.DEL_FLAG_Y); this.baseMapper.updateById(orderInfo); } @Override @Transactional(rollbackFor = Exception.class) public void applyRefund(AddRefundDto addRefundDto) { MallOrderInfo orderInfo = this.baseMapper.selectById(addRefundDto.getId()); if (orderInfo == null || AppContants.DEL_FLAG_Y == orderInfo.getDelFlag()) { throw new FebsException("订单不存在"); } if (orderInfo.getStatus() == OrderStatusEnum.REFUNDING.getValue()) { throw new FebsException("已提交退款, 请勿重复提交"); } if (orderInfo.getStatus() == OrderStatusEnum.WAIT_PAY.getValue()) { throw new FebsException("该订单不能退款"); } MallMember member = LoginUserUtil.getLoginUser(); orderInfo.setStatus(OrderStatusEnum.REFUNDING.getValue()); this.baseMapper.updateById(orderInfo); MallOrderRefund orderRefund = mallOrderRefundMapper.selectOrderRefundByOrderId(orderInfo.getId()); if (orderRefund == null) { orderRefund = new MallOrderRefund(); orderRefund.setOrderId(orderInfo.getId()); orderRefund.setMemberId(member.getId()); orderRefund.setDesp(addRefundDto.getDesp()); orderRefund.setReason(addRefundDto.getReason()); orderRefund.setStatus(OrderRefundStatusEnum.REFUND_APPLY.getValue()); mallOrderRefundMapper.insert(orderRefund); } else { orderRefund.setDesp(addRefundDto.getDesp()); orderRefund.setReason(addRefundDto.getReason()); orderRefund.setStatus(OrderRefundStatusEnum.REFUND_APPLY.getValue()); mallOrderRefundMapper.updateById(orderRefund); } MallOrderRefundOperation operation = new MallOrderRefundOperation(); operation.setOrderId(orderInfo.getId()); operation.setRefundId(orderRefund.getId()); operation.setContent(StrUtil.format("用户:{}提交退款申请", member.getName())); mallOrderRefundOperationMapper.insert(operation); } @Override public void refundExpress(RefundExpressDto refundExpressDto) { MallMember member = LoginUserUtil.getLoginUser(); MallOrderRefund orderRefund = mallOrderRefundMapper.selectOrderRefundByOrderId(refundExpressDto.getId()); if (!OrderRefundStatusEnum.AGREE.getValue().equals(orderRefund.getStatus())) { throw new FebsException("暂不能提交物流信息"); } orderRefund.setExpressNo(refundExpressDto.getExpressNo()); orderRefund.setExpressCom(refundExpressDto.getExpressCom()); mallOrderRefundMapper.updateById(orderRefund); MallOrderRefundOperation operation = new MallOrderRefundOperation(); operation.setOrderId(refundExpressDto.getId()); operation.setRefundId(orderRefund.getId()); operation.setContent(StrUtil.format("用户:{}提交物流信息,快递公司:{},单号:{}", member.getName(), refundExpressDto.getExpressCom(), refundExpressDto.getExpressNo())); mallOrderRefundOperationMapper.insert(operation); } } src/main/java/cc/mrbird/febs/mall/vo/OrderDetailVo.java
@@ -51,4 +51,7 @@ @ApiModelProperty(value = "订单明细") private List<OrderItemVo> items; @ApiModelProperty(value = "订单退款信息") private OrderRefundVo orderRefund; } src/main/java/cc/mrbird/febs/mall/vo/OrderListVo.java
@@ -25,7 +25,7 @@ @ApiModelProperty(value = "下单时间") private Date orderTime; @ApiModelProperty(value = "状态 1-待支付2-待发货3-待收货4-已完成5-退款中6-已退款7-已取消") @ApiModelProperty(value = "状态 1-待支付 2-待发货 3-待收货 4-已完成 5-退款中 6-退款处理完成 7-已取消") private Integer status; @ApiModelProperty(value = "订单金额") src/main/java/cc/mrbird/febs/mall/vo/OrderRefundVo.java
New file @@ -0,0 +1,32 @@ package cc.mrbird.febs.mall.vo; import io.swagger.annotations.ApiModel; import io.swagger.annotations.ApiModelProperty; import lombok.Data; /** * @author wzy * @date 2021-09-23 **/ @Data @ApiModel(value = "OrderRefundVo", description = "订单退款详情返回参数类") public class OrderRefundVo { @ApiModelProperty(value = "退款ID") private Long id; @ApiModelProperty(value = "退款理由") private String reason; @ApiModelProperty(value = "描述") private String desp; @ApiModelProperty(value = "退款状态 1-已申请 2-同意退款 3-驳回退款 4-已提交物流信息 5-已退款 6-已取消") private Integer status; @ApiModelProperty(value = "物流单号") private String expressNo; @ApiModelProperty(value = "物流公司") private String expressCom; } src/main/resources/mapper/modules/MallOrderInfoMapper.xml
@@ -53,6 +53,7 @@ <result column="longitude" property="longitude" /> <result column="latitude" property="latitude" /> <result column="remark" property="remark" /> <result column="del_flag" property="delFlag" /> <collection property="items" ofType="cc.mrbird.febs.mall.entity.MallOrderItem"> <id property="id" column="item_id" /> <result property="orderId" column="order_id" /> src/main/resources/mapper/modules/MallOrderRefundMapper.xml
New file @@ -0,0 +1,8 @@ <?xml version="1.0" encoding="UTF-8"?> <!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd"> <mapper namespace="cc.mrbird.febs.mall.mapper.MallOrderRefundMapper"> <select id="selectOrderRefundByOrderId" resultType="cc.mrbird.febs.mall.entity.MallOrderRefund"> select * from mall_order_refund where order_id=#{orderId} </select> </mapper> src/main/resources/mapper/modules/MallOrderRefundOperationMapper.xml
New file @@ -0,0 +1,5 @@ <?xml version="1.0" encoding="UTF-8"?> <!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd"> <mapper namespace="cc.mrbird.febs.mall.mapper.MallOrderRefundOperationMapper"> </mapper> src/main/resources/mapper/modules/MallShoppingCartMapper.xml
@@ -20,4 +20,9 @@ select * from mall_shopping_cart where member_id=#{memberId} and sku_id=#{skuId} </select> <delete id="delBySkuId"> delete from mall_shopping_cart where member_id=#{memberId} and sku_id=#{skuId} </delete> </mapper>