diff --git a/.editorconfig b/.editorconfig index d1989d440..abd071783 100644 --- a/.editorconfig +++ b/.editorconfig @@ -1,11 +1,10 @@ root=true -[*.java] +[*.{adoc,bat,groovy,html,java,js,jsp,kt,kts,md,properties,py,rb,sh,sql,svg,txt,xml,xsd}] +charset = utf-8 + +[*.{groovy,java,kt,kts,xml,xsd}] indent_style = space indent_size = 4 continuation_indent_size = 8 - -[*.xml] -indent_style = space -indent_size = 4 -continuation_indent_size = 4 +end_of_line = lf diff --git a/order/order-application/pom.xml b/order/order-application/pom.xml index 42d90ee09..2f80d4ffb 100644 --- a/order/order-application/pom.xml +++ b/order/order-application/pom.xml @@ -15,89 +15,16 @@ cn.iocoder.mall - common-framework + order-rest 1.0-SNAPSHOT cn.iocoder.mall - mall-spring-boot - 1.0-SNAPSHOT - - - cn.iocoder.mall - order-service-impl - 1.0-SNAPSHOT - - - cn.iocoder.mall - system-sdk - 1.0-SNAPSHOT - - - cn.iocoder.mall - user-sdk + order-rpc 1.0-SNAPSHOT - - - org.springframework.boot - spring-boot-starter-web - - - - io.springfox - springfox-swagger2 - - - com.github.xiaoymin - swagger-bootstrap-ui - - - - - com.alibaba.cloud - spring-cloud-starter-alibaba-sentinel - - - - - de.codecentric - spring-boot-admin-starter-client - - - - org.springframework.boot - spring-boot-starter-actuator - - - - io.micrometer - micrometer-registry-prometheus - - - - - org.springframework.boot - spring-boot-starter-test - test - - - - - - org.apache.maven.plugins - maven-compiler-plugin - - - - - org.springframework.boot - spring-boot-maven-plugin - - - diff --git a/order/order-application/src/main/java/cn/iocoder/mall/order/application/OrderApplication.java b/order/order-application/src/main/java/cn/iocoder/mall/order/application/OrderApplication.java index 6928ec3ff..ed0d910a0 100644 --- a/order/order-application/src/main/java/cn/iocoder/mall/order/application/OrderApplication.java +++ b/order/order-application/src/main/java/cn/iocoder/mall/order/application/OrderApplication.java @@ -3,24 +3,35 @@ package cn.iocoder.mall.order.application; import org.apache.catalina.connector.Connector; import org.springframework.boot.SpringApplication; import org.springframework.boot.autoconfigure.SpringBootApplication; +import org.springframework.boot.context.config.ConfigFileApplicationListener; import org.springframework.boot.web.embedded.tomcat.TomcatConnectorCustomizer; import org.springframework.boot.web.embedded.tomcat.TomcatServletWebServerFactory; import org.springframework.boot.web.servlet.server.ConfigurableServletWebServerFactory; import org.springframework.context.annotation.Bean; +/** + * @author xiaofeng + */ @SpringBootApplication(scanBasePackages = {"cn.iocoder.mall.order"}) public class OrderApplication { - public static void main(String[] args) { - SpringApplication.run(OrderApplication.class, args); - } + /** + * 设置需要读取的配置文件的名字。 基于 {@link org.springframework.boot.context.config.ConfigFileApplicationListener#CONFIG_NAME_PROPERTY} + * 实现。 + */ + private static final String CONFIG_NAME_VALUE = "biz,rest,rpc,application"; + public static void main(String[] args) { + // 设置环境变量 + System.setProperty(ConfigFileApplicationListener.CONFIG_NAME_PROPERTY, CONFIG_NAME_VALUE); + SpringApplication.run(OrderApplication.class, args); + } /** - * 解决异常信息: - * java.lang.IllegalArgumentException: - * Invalid character found in the request target. The valid characters are defined in RFC 7230 and RFC 3986 + * 解决异常信息: java.lang.IllegalArgumentException: Invalid character found in the request target. + * The valid characters are defined in RFC 7230 and RFC 3986 + * * @return */ @Bean @@ -36,5 +47,4 @@ public class OrderApplication { } - -} \ No newline at end of file +} diff --git a/order/order-application/src/main/java/cn/iocoder/mall/order/application/controller/admins/AdminOrderReturnController.java b/order/order-application/src/main/java/cn/iocoder/mall/order/application/controller/admins/AdminOrderReturnController.java deleted file mode 100644 index d7591408c..000000000 --- a/order/order-application/src/main/java/cn/iocoder/mall/order/application/controller/admins/AdminOrderReturnController.java +++ /dev/null @@ -1,57 +0,0 @@ -package cn.iocoder.mall.order.application.controller.admins; - -import cn.iocoder.common.framework.util.HttpUtil; -import cn.iocoder.common.framework.vo.CommonResult; -import cn.iocoder.mall.order.api.OrderReturnService; -import cn.iocoder.mall.order.api.bo.OrderReturnListBO; -import cn.iocoder.mall.order.api.dto.OrderReturnQueryDTO; -import cn.iocoder.mall.order.application.convert.OrderReturnConvert; -import cn.iocoder.mall.order.application.po.admin.OrderReturnQueryPO; -import io.swagger.annotations.Api; -import org.apache.dubbo.config.annotation.Reference; -import org.springframework.validation.annotation.Validated; -import org.springframework.web.bind.annotation.*; - -import javax.servlet.http.HttpServletRequest; - -/** - * 订单退货 - * - * @author Sin - * @time 2019-05-06 21:31 - */ -@RestController -@RequestMapping("admins/order_return") -@Api("订单退货(admins api)") -public class AdminOrderReturnController { - - @Reference(validation = "true", version = "${dubbo.provider.OrderReturnService.version}") - private OrderReturnService orderReturnService; - - @GetMapping("list") - public CommonResult list(@Validated OrderReturnQueryPO queryPO) { - OrderReturnQueryDTO queryDTO = OrderReturnConvert.INSTANCE.convert(queryPO); - return orderReturnService.orderReturnList(queryDTO); - } - - @PostMapping("agree") - public CommonResult agree(@RequestParam("id") Integer id) { - return orderReturnService.orderReturnAgree(id); - } - - @PostMapping("refuse") - public CommonResult refuse(@RequestParam("id") Integer id) { - return orderReturnService.orderReturnRefuse(id); - } - - @PostMapping("confirm_receipt") - public CommonResult confirmReceipt(@RequestParam("id") Integer id) { - return orderReturnService.confirmReceipt(id); - } - - @PostMapping("confirm_refund") - public CommonResult confirmRefund(HttpServletRequest request, @RequestParam("id") Integer id) { - String ip = HttpUtil.getIp(request); - return orderReturnService.refund(id, ip); - } -} diff --git a/order/order-application/src/main/java/cn/iocoder/mall/order/application/controller/admins/AdminsOrderController.java b/order/order-application/src/main/java/cn/iocoder/mall/order/application/controller/admins/AdminsOrderController.java deleted file mode 100644 index 7dd025655..000000000 --- a/order/order-application/src/main/java/cn/iocoder/mall/order/application/controller/admins/AdminsOrderController.java +++ /dev/null @@ -1,101 +0,0 @@ -package cn.iocoder.mall.order.application.controller.admins; - -import cn.iocoder.common.framework.vo.CommonResult; -import cn.iocoder.mall.order.api.OrderService; -import cn.iocoder.mall.order.api.bo.OrderItemBO; -import cn.iocoder.mall.order.api.bo.OrderPageBO; -import cn.iocoder.mall.order.api.bo.OrderRecipientBO; -import cn.iocoder.mall.order.api.dto.OrderItemUpdateDTO; -import cn.iocoder.mall.order.api.dto.OrderLogisticsUpdateDTO; -import cn.iocoder.mall.order.api.dto.OrderQueryDTO; -import cn.iocoder.mall.order.application.convert.OrderConvertAPP; -import cn.iocoder.mall.order.application.convert.OrderDeliveryConvert; -import cn.iocoder.mall.order.application.po.admin.OrderDeliverPO; -import cn.iocoder.mall.order.application.po.admin.OrderItemUpdatePO; -import cn.iocoder.mall.order.application.po.admin.OrderLogisticsPO; -import cn.iocoder.mall.order.application.po.admin.OrderPageQueryPO; -import io.swagger.annotations.Api; -import io.swagger.annotations.ApiOperation; -import org.apache.dubbo.config.annotation.Reference; -import org.springframework.validation.annotation.Validated; -import org.springframework.web.bind.annotation.*; - -import java.util.List; - -/** - * 订单API(admins) - * - * @author Sin - * @time 2019-03-24 10:22 - */ -@RestController -@RequestMapping("admins/order") -@Api(value = "订单 API(admins)") -public class AdminsOrderController { - - @Reference(validation = "true", version = "${dubbo.provider.OrderService.version}") - private OrderService orderService; - - @GetMapping("page") - @ApiOperation("订单列表") - public CommonResult getOrderPage(@Validated OrderPageQueryPO orderPageQueryVO) { - OrderQueryDTO orderQueryDTO = OrderConvertAPP.INSTANCE.convert(orderPageQueryVO); - return orderService.getOrderPage(orderQueryDTO); - } - - @GetMapping("order_items") - @ApiOperation("订单列表") - public CommonResult> getOrderItems(@RequestParam("orderId") Integer orderId) { - return orderService.getOrderItems(orderId); - } - - @GetMapping("order_recipient_info") - @ApiOperation("订单收件人信息") - public CommonResult getOrderRecipientBO(@RequestParam("orderId") Integer orderId) { - return orderService.getOrderRecipientBO(orderId); - } - - @PostMapping("order_deliver") - @ApiOperation("订单发货") - public CommonResult orderDeliver(@RequestBody @Validated OrderDeliverPO orderDeliverPO) { - return orderService.orderDelivery(OrderDeliveryConvert.INSTANCE.convert(orderDeliverPO)); - } - - @PutMapping("update_remark") - @ApiOperation("更新-更新订单备注") - public CommonResult updateRemark(@RequestParam("orderId") Integer orderId, - @RequestParam("remark") String remark) { - return orderService.updateOrderRemake(orderId, remark); - } - - @PutMapping("cancel_order") - @ApiOperation("取消订单") - public CommonResult cancelOrder( - @RequestParam("orderId") Integer orderId, - @RequestParam("reasons") Integer reasons, - @RequestParam(value = "otherReasons", required = false) String otherReasons) { - return orderService.cancelOrder(orderId, reasons, otherReasons); - } - - @PutMapping("order_item/update_pay_amount") - @ApiOperation("更新-订单item实付金额") - public CommonResult updateOrderItemPayAmount(@RequestParam("orderId") Integer orderId, - @RequestParam("orderItemId") Integer orderItemId, - @RequestParam("payAmount") Integer payAmount) { - return orderService.updateOrderItemPayAmount(orderId, orderItemId, payAmount); - } - - @PutMapping("order_item/update") - @ApiOperation("更新-订单item") - public CommonResult updateOrderItem(@RequestBody @Validated OrderItemUpdatePO orderItemUpdateVO) { - OrderItemUpdateDTO dto = OrderConvertAPP.INSTANCE.convert(orderItemUpdateVO); - return orderService.updateOrderItem(dto); - } - - @PutMapping("logistics/update") - @ApiOperation("更新-订单物流") - public CommonResult updateLogistics(@RequestBody @Validated OrderLogisticsPO orderLogisticsVO) { - OrderLogisticsUpdateDTO dto = OrderConvertAPP.INSTANCE.convert(orderLogisticsVO); - return orderService.updateLogistics(dto); - } -} diff --git a/order/order-application/src/main/java/cn/iocoder/mall/order/application/controller/users/OrderCommentController.java b/order/order-application/src/main/java/cn/iocoder/mall/order/application/controller/users/OrderCommentController.java deleted file mode 100644 index e908c5e16..000000000 --- a/order/order-application/src/main/java/cn/iocoder/mall/order/application/controller/users/OrderCommentController.java +++ /dev/null @@ -1,78 +0,0 @@ -package cn.iocoder.mall.order.application.controller.users; - -import cn.iocoder.common.framework.constant.MallConstants; -import cn.iocoder.common.framework.vo.CommonResult; -import cn.iocoder.mall.order.api.OrderCommentReplyService; -import cn.iocoder.mall.order.api.OrderCommentService; -import cn.iocoder.mall.order.api.bo.OrderCommentCreateBO; -import cn.iocoder.mall.order.api.bo.OrderCommentInfoAndMerchantReplyBO; -import cn.iocoder.mall.order.api.bo.OrderCommentPageBO; -import cn.iocoder.mall.order.api.bo.OrderCommentStateInfoPageBO; -import cn.iocoder.mall.order.api.dto.OrderCommentCreateDTO; -import cn.iocoder.mall.order.api.dto.OrderCommentPageDTO; -import cn.iocoder.mall.order.api.dto.OrderCommentStateInfoPageDTO; -import cn.iocoder.mall.user.sdk.annotation.RequiresLogin; -import cn.iocoder.mall.user.sdk.context.UserSecurityContextHolder; -import io.swagger.annotations.Api; -import io.swagger.annotations.ApiOperation; -import org.apache.dubbo.config.annotation.Reference; -import org.springframework.validation.annotation.Validated; -import org.springframework.web.bind.annotation.*; - - -import static cn.iocoder.common.framework.vo.CommonResult.success; - -/** - * - * 订单评论 Api(user) - * - * @author wtz - * @time 2019-05-27 20:46 - */ -@RestController -@RequestMapping(MallConstants.ROOT_PATH_USER + "/order_comment") -@Api("用户评论模块") -public class OrderCommentController { - - @Reference(validation = "true", version = "${dubbo.provider.OrderCommentService.version}") - private OrderCommentService orderCommentService; - - @Reference(validation = "true", version = "${dubbo.provider.OrderCommentReplyService.version}") - private OrderCommentReplyService orderCommentReplyService; - - - @PostMapping("create_order_comment") - //@RequiresLogin - @ApiOperation(value = "创建订单评论") - public CommonResult createOrderComment(@RequestBody @Validated OrderCommentCreateDTO orderCommentCreateDTO) { - Integer userId = UserSecurityContextHolder.getContext().getUserId(); - orderCommentCreateDTO.setUserId(userId); - return success(orderCommentService.createOrderComment(orderCommentCreateDTO)); - } - - @GetMapping("order_comment_page") - @ApiOperation(value = "获取评论分页") - public CommonResult getOrderCommentPage(@Validated OrderCommentPageDTO orderCommentPageDTO){ - return success(orderCommentService.getOrderCommentPage(orderCommentPageDTO)); - } - - @GetMapping("order_comment_info_merchant_reply") - @ApiOperation(value = "获取评论和商家回复") - public CommonResult geOrderCommentInfoAndMerchantReply(@RequestParam("commentId") Integer commentId){ - OrderCommentInfoAndMerchantReplyBO orderCommentInfoAndMerchantReplyBO=new OrderCommentInfoAndMerchantReplyBO(); - orderCommentInfoAndMerchantReplyBO.setOrderCommentInfoBO(orderCommentService.getOrderCommentInfo(commentId)); - orderCommentInfoAndMerchantReplyBO.setOrderCommentMerchantReplyBOS(orderCommentReplyService.getOrderCommentMerchantReply(commentId)); - return success(orderCommentInfoAndMerchantReplyBO); - } - - @GetMapping - //@RequiresLogin - @ApiOperation(value = "获取订单评论状态分页") - public CommonResult getOrderCommentStateInfoPage(@Validated OrderCommentStateInfoPageDTO orderCommentStateInfoPageDTO){ - //Integer userId = UserSecurityContextHolder.getContext().getUserId(); - //orderCommentStateInfoPageDTO.setUserId(userId); - return success(orderCommentService.getOrderCommentStateInfoPage(orderCommentStateInfoPageDTO)); - } - - -} diff --git a/order/order-application/src/main/java/cn/iocoder/mall/order/application/controller/users/OrderCommentReplyController.java b/order/order-application/src/main/java/cn/iocoder/mall/order/application/controller/users/OrderCommentReplyController.java deleted file mode 100644 index 37c147b65..000000000 --- a/order/order-application/src/main/java/cn/iocoder/mall/order/application/controller/users/OrderCommentReplyController.java +++ /dev/null @@ -1,47 +0,0 @@ -package cn.iocoder.mall.order.application.controller.users; - -import cn.iocoder.common.framework.constant.MallConstants; -import cn.iocoder.common.framework.vo.CommonResult; -import cn.iocoder.mall.order.api.OrderCommentReplyService; -import cn.iocoder.mall.order.api.bo.OrderCommentReplyCreateBO; -import cn.iocoder.mall.order.api.bo.OrderCommentReplyPageBO; -import cn.iocoder.mall.order.api.dto.OrderCommentReplyCreateDTO; -import cn.iocoder.mall.order.api.dto.OrderCommentReplyPageDTO; -import io.swagger.annotations.Api; -import io.swagger.annotations.ApiOperation; -import org.apache.dubbo.config.annotation.Reference; -import org.springframework.validation.annotation.Validated; -import org.springframework.web.bind.annotation.*; - -import static cn.iocoder.common.framework.vo.CommonResult.success; - - -/** - * - * 评论回复模块 Api(user) - * - * @author wtz - * @time 2019-05-31 18:00 - */ -@RestController -@RequestMapping(MallConstants.ROOT_PATH_USER + "/order_comment_reply") -@Api("用户评论回复模块 ") -public class OrderCommentReplyController { - - @Reference(validation = "true", version = "${dubbo.provider.OrderCommentService.version}") - private OrderCommentReplyService orderCommentReplyService; - - @PostMapping("create_order_comment_reply") - //@RequiresLogin - @ApiOperation(value = "创建订单回复") - public CommonResult createOrderCommentReply(@RequestBody @Validated OrderCommentReplyCreateDTO orderCommentReplyCreateDTO){ - return success(orderCommentReplyService.createOrderCommentReply(orderCommentReplyCreateDTO)); - } - - @GetMapping("order_comment_reply_page") - //@RequiresLogin - @ApiOperation(value = "分页获取评论回复") - public CommonResult getOrderCommentReplyPage(@Validated OrderCommentReplyPageDTO orderCommentReplyCreateDTO){ - return success(orderCommentReplyService.getOrderCommentReplyPage(orderCommentReplyCreateDTO)); - } -} diff --git a/order/order-application/src/main/java/cn/iocoder/mall/order/application/controller/users/OrderController.java b/order/order-application/src/main/java/cn/iocoder/mall/order/application/controller/users/OrderController.java deleted file mode 100644 index 2d53ae44d..000000000 --- a/order/order-application/src/main/java/cn/iocoder/mall/order/application/controller/users/OrderController.java +++ /dev/null @@ -1,152 +0,0 @@ -package cn.iocoder.mall.order.application.controller.users; - -import cn.iocoder.common.framework.util.HttpUtil; -import cn.iocoder.common.framework.util.ServiceExceptionUtil; -import cn.iocoder.common.framework.vo.CommonResult; -import cn.iocoder.mall.system.api.DataDictService; -import cn.iocoder.mall.system.api.bo.datadict.DataDictBO; -import cn.iocoder.mall.order.api.CartService; -import cn.iocoder.mall.order.api.OrderService; -import cn.iocoder.mall.order.api.bo.*; -import cn.iocoder.mall.order.api.constant.DictKeyConstants; -import cn.iocoder.mall.order.api.constant.OrderErrorCodeEnum; -import cn.iocoder.mall.order.api.dto.CalcOrderPriceDTO; -import cn.iocoder.mall.order.api.dto.OrderCreateDTO; -import cn.iocoder.mall.order.api.dto.OrderQueryDTO; -import cn.iocoder.mall.order.application.convert.CartConvert; -import cn.iocoder.mall.order.application.convert.OrderConvertAPP; -import cn.iocoder.mall.order.application.po.user.OrderCreatePO; -import cn.iocoder.mall.order.application.vo.UsersOrderConfirmCreateVO; -import cn.iocoder.mall.promotion.api.CouponService; -import cn.iocoder.mall.promotion.api.bo.CouponCardAvailableBO; -import cn.iocoder.mall.user.sdk.annotation.RequiresLogin; -import cn.iocoder.mall.user.sdk.context.UserSecurityContextHolder; -import io.swagger.annotations.Api; -import io.swagger.annotations.ApiOperation; -import org.apache.dubbo.config.annotation.Reference; -import org.springframework.validation.annotation.Validated; -import org.springframework.web.bind.annotation.*; - -import javax.servlet.http.HttpServletRequest; -import java.util.Collections; -import java.util.List; -import java.util.stream.Collectors; - -import static cn.iocoder.common.framework.vo.CommonResult.success; - -/** - * 订单API(users) - * - * @author Sin - * @time 2019-03-24 11:24 - */ -@RestController -@RequestMapping("users/order") -@Api(description = "用户订单") // TODO FROM 芋艿 to 小范,description 已经废弃啦 -public class OrderController { - - @Reference(validation = "true", version = "${dubbo.provider.OrderReturnService.version}") - private OrderService orderService; - - @Reference(validation = "true", version = "${dubbo.provider.CartService.version}") - private CartService cartService; - - @Reference(validation = "true", version = "${dubbo.consumer.DataDictService.version}") - private DataDictService dataDictService; - - @Reference(validation = "true", version = "${dubbo.consumer.CouponService.version}") - private CouponService couponService; - - @GetMapping("order_page") - @RequiresLogin - @ApiOperation("订单分页") - public CommonResult getOrderPage(@Validated OrderQueryDTO orderQueryDTO) { - Integer userId = UserSecurityContextHolder.getContext().getUserId(); - orderQueryDTO.setUserId(userId); - return orderService.getOrderPage(orderQueryDTO); - } - - @PostMapping("create_order") - @RequiresLogin - @ApiOperation("创建订单") - public CommonResult createOrder(@RequestBody @Validated OrderCreatePO orderCreatePO, - HttpServletRequest request) { - Integer userId = UserSecurityContextHolder.getContext().getUserId(); - OrderCreateDTO orderCreateDTO = OrderConvertAPP.INSTANCE.convert(orderCreatePO); - orderCreateDTO.setUserId(userId).setIp(HttpUtil.getIp(request)); - return orderService.createOrder(orderCreateDTO); - } - - @PostMapping("create_order_from_cart") - @RequiresLogin - @ApiOperation("创建订单购物车") - public CommonResult createOrderFromCart(@RequestParam("userAddressId") Integer userAddressId, - @RequestParam(value = "couponCardId", required = false) Integer couponCardId, - @RequestParam(value = "remark", required = false) String remark, - HttpServletRequest request) { - Integer userId = UserSecurityContextHolder.getContext().getUserId(); - // 获得购物车中选中的商品 - List cartItems = cartService.list(userId, true); - if (cartItems.isEmpty()) { - return ServiceExceptionUtil.error(OrderErrorCodeEnum.ORDER_CREATE_CART_IS_EMPTY.getCode()); - } - // 创建 OrderCreateDTO 对象 - OrderCreateDTO orderCreateDTO = OrderConvertAPP.INSTANCE.createOrderCreateDTO(userId, userAddressId, - remark, HttpUtil.getIp(request), - cartItems, couponCardId); - // 创建订单 - CommonResult createResult = orderService.createOrder(orderCreateDTO); - if (createResult.isError()) { - return CommonResult.error(createResult); - } - // 清空购物车 // TODO 芋艿,需要标记删除的原因,即结果为创建为某个订单。 - cartService.deleteList(userId, cartItems.stream().map(CartItemBO::getSkuId).collect(Collectors.toList())); - // 返回结果 - return createResult; - } - - @GetMapping("confirm_create_order") - @RequiresLogin - @ApiOperation("确认创建订单") - public CommonResult getConfirmCreateOrder(@RequestParam("skuId") Integer skuId, - @RequestParam("quantity") Integer quantity, - @RequestParam(value = "couponCardId", required = false) Integer couponCardId) { - Integer userId = UserSecurityContextHolder.getContext().getUserId(); - // 创建 CalcOrderPriceDTO 对象,并执行价格计算 - CalcOrderPriceDTO calcOrderPriceDTO = new CalcOrderPriceDTO() - .setUserId(userId) - .setItems(Collections.singletonList(new CalcOrderPriceDTO.Item(skuId, quantity, true))) - .setCouponCardId(couponCardId); - CalcOrderPriceBO calcOrderPrice = cartService.calcOrderPrice(calcOrderPriceDTO); - // 获得优惠劵 - List couponCards = couponService.getCouponCardList(userId, - CartConvert.INSTANCE.convertList(calcOrderPrice.getItemGroups())); - // 执行数据拼装 - return success(CartConvert.INSTANCE.convert(calcOrderPrice).setCouponCards(couponCards)); - } - - @PostMapping("confirm_receiving") - @RequiresLogin - @ApiOperation("确认收货") - public CommonResult confirmReceiving(@RequestParam("orderId") Integer orderId) { - Integer userId = UserSecurityContextHolder.getContext().getUserId(); - return orderService.confirmReceiving(userId, orderId); - } - - @GetMapping("info") - @RequiresLogin - @ApiOperation("订单详情") - public CommonResult orderInfo(@RequestParam("orderId") Integer orderId) { - Integer userId = UserSecurityContextHolder.getContext().getUserId(); - CommonResult commonResult = orderService.info(userId, orderId); - - OrderInfoBO orderInfoBO = commonResult.getData(); - if (orderInfoBO != null) { - CommonResult dictResult = dataDictService - .getDataDict(DictKeyConstants.ORDER_STATUS, orderInfoBO.getStatus()); - orderInfoBO.setStatusText(dictResult.getData().getDisplayName()); - } - return commonResult; - } - -} diff --git a/order/order-application/src/main/java/cn/iocoder/mall/order/application/controller/users/OrderLogisticsController.java b/order/order-application/src/main/java/cn/iocoder/mall/order/application/controller/users/OrderLogisticsController.java deleted file mode 100644 index 918b92ac2..000000000 --- a/order/order-application/src/main/java/cn/iocoder/mall/order/application/controller/users/OrderLogisticsController.java +++ /dev/null @@ -1,85 +0,0 @@ -package cn.iocoder.mall.order.application.controller.users; - -import cn.iocoder.common.framework.util.ServiceExceptionUtil; -import cn.iocoder.common.framework.vo.CommonResult; -import cn.iocoder.mall.system.api.DataDictService; -import cn.iocoder.mall.system.api.bo.datadict.DataDictBO; -import cn.iocoder.mall.order.api.OrderLogisticsService; -import cn.iocoder.mall.order.api.bo.OrderLogisticsInfoBO; -import cn.iocoder.mall.order.api.bo.OrderLogisticsInfoWithOrderBO; -import cn.iocoder.mall.order.api.constant.DictKeyConstants; -import cn.iocoder.mall.order.api.constant.OrderErrorCodeEnum; -import cn.iocoder.mall.user.sdk.context.UserSecurityContextHolder; -import org.apache.dubbo.config.annotation.Reference; -import io.swagger.annotations.Api; -import io.swagger.annotations.ApiOperation; -import org.springframework.util.CollectionUtils; -import org.springframework.web.bind.annotation.GetMapping; -import org.springframework.web.bind.annotation.RequestMapping; -import org.springframework.web.bind.annotation.RequestParam; -import org.springframework.web.bind.annotation.RestController; - -import java.util.List; -import java.util.Map; -import java.util.Set; -import java.util.stream.Collectors; - -/** - * 订单物流 controller - * - * @author Sin - * @time 2019-04-12 22:24 - */ -@RestController -@RequestMapping("users/order_logistics") -@Api(description = "订单物流信息") -public class OrderLogisticsController { - - @Reference(validation = "true", version = "${dubbo.provider.OrderLogisticsService.version}") - private OrderLogisticsService orderLogisticsService; - - @Reference(validation = "true", version = "${dubbo.consumer.DataDictService.version}") - private DataDictService dataDictService; - - @GetMapping("info") - @ApiOperation("物流详细 - 物流通用") - public CommonResult logistics(@RequestParam("logisticsId") Integer logisticsId) { - return orderLogisticsService.getLogisticsInfo(logisticsId); - } - - @GetMapping("info_order") - @ApiOperation("物流详细 - 返回订单所关联的所有物流信息(订单用的)") - public CommonResult logisticsInfoWithOrder(@RequestParam("orderId") Integer orderId) { - Integer userId = UserSecurityContextHolder.getContext().getUserId(); - CommonResult commonResult = orderLogisticsService.getOrderLogisticsInfo(userId, orderId); - if (commonResult.isSuccess()) { - OrderLogisticsInfoWithOrderBO orderLogisticsInfoBO = commonResult.getData(); - List logisticsList = orderLogisticsInfoBO.getLogistics(); - - // 获取字典值 - Set dictValues = logisticsList.stream().map(o -> o.getLogistics()).collect(Collectors.toSet()); - if (!CollectionUtils.isEmpty(dictValues)) { - CommonResult> dictResult = dataDictService - .getDataDictList(DictKeyConstants.ORDER_LOGISTICS_COMPANY, dictValues); - - if (dictResult.isError()) { - // 错误情况 - return ServiceExceptionUtil.error(OrderErrorCodeEnum.DICT_SERVER_INVOKING_FAIL.getCode()); - } - - // 转换结果字典值 - Map dataDictBOMap = dictResult.getData() - .stream().collect(Collectors.toMap(o -> o.getValue(), o -> o)); - - logisticsList.stream().map(o -> { - String dicValue = o.getLogistics().toString(); - if (dataDictBOMap.containsKey(dicValue)) { - o.setLogisticsText(dataDictBOMap.get(dicValue).getDisplayName()); - } - return o; - }).collect(Collectors.toList()); - } - } - return commonResult; - } -} diff --git a/order/order-application/src/main/java/cn/iocoder/mall/order/application/controller/users/OrderReturnController.java b/order/order-application/src/main/java/cn/iocoder/mall/order/application/controller/users/OrderReturnController.java deleted file mode 100644 index ff5503dbc..000000000 --- a/order/order-application/src/main/java/cn/iocoder/mall/order/application/controller/users/OrderReturnController.java +++ /dev/null @@ -1,65 +0,0 @@ -package cn.iocoder.mall.order.application.controller.users; - -import cn.iocoder.common.framework.vo.CommonResult; -import cn.iocoder.mall.system.api.DataDictService; -import cn.iocoder.mall.system.api.bo.datadict.DataDictBO; -import cn.iocoder.mall.order.api.OrderReturnService; -import cn.iocoder.mall.order.api.bo.OrderReturnInfoBO; -import cn.iocoder.mall.order.api.constant.DictKeyConstants; -import cn.iocoder.mall.order.api.dto.OrderReturnApplyDTO; -import cn.iocoder.mall.order.application.convert.OrderReturnConvert; -import cn.iocoder.mall.order.application.po.user.OrderReturnApplyPO; -import org.apache.dubbo.config.annotation.Reference; -import io.swagger.annotations.ApiOperation; -import org.springframework.web.bind.annotation.*; - -import java.util.List; - -/** - * 订单退款/售后流程 - * - * @author Sin - * @time 2019-04-25 22:04 - */ -@RestController -@RequestMapping("users/order_return") -public class OrderReturnController { - - @Reference(validation = "true", version = "${dubbo.provider.OrderReturnService.version}") - private OrderReturnService orderReturnService; - - @Reference(validation = "true", version = "${dubbo.consumer.DataDictService.version}") - private DataDictService dataDictService; - - @GetMapping("reason") - @ApiOperation("原因") - public CommonResult> orderReturnReason() { - return dataDictService.getDataDict(DictKeyConstants.ORDER_RETURN_REASON); - } - - @PostMapping("apply") - @ApiOperation("订单售后") - public CommonResult orderReturnApply(@RequestBody OrderReturnApplyPO orderReturnApplyPO) { - OrderReturnApplyDTO applyDTO = OrderReturnConvert.INSTANCE.convert(orderReturnApplyPO); - return orderReturnService.orderReturnApply(applyDTO); - } - - @GetMapping("info") - @ApiOperation("订单售后详细") - public CommonResult orderApplyInfo(@RequestParam("orderId") Integer orderId) { - CommonResult commonResult = orderReturnService.orderApplyInfo(orderId); - - // 转换 字典值 - if (commonResult.isSuccess()) { - CommonResult dataDictResult = dataDictService.getDataDict( - DictKeyConstants.ORDER_RETURN_SERVICE_TYPE, - commonResult.getData().getReturnInfo().getServiceType()); - - if (dataDictResult.isSuccess()) { - commonResult.getData().getReturnInfo().setServiceTypeText(dataDictResult.getData().getDisplayName()); - } - } - - return commonResult; - } -} diff --git a/order/order-application/src/main/java/cn/iocoder/mall/order/application/controller/users/UsersCartController.java b/order/order-application/src/main/java/cn/iocoder/mall/order/application/controller/users/UsersCartController.java deleted file mode 100644 index 5e021055c..000000000 --- a/order/order-application/src/main/java/cn/iocoder/mall/order/application/controller/users/UsersCartController.java +++ /dev/null @@ -1,143 +0,0 @@ -package cn.iocoder.mall.order.application.controller.users; - -import cn.iocoder.common.framework.vo.CommonResult; -import cn.iocoder.mall.order.api.CartService; -import cn.iocoder.mall.order.api.OrderService; -import cn.iocoder.mall.order.api.bo.CalcOrderPriceBO; -import cn.iocoder.mall.order.api.bo.CalcSkuPriceBO; -import cn.iocoder.mall.order.api.bo.CartItemBO; -import cn.iocoder.mall.order.api.dto.CalcOrderPriceDTO; -import cn.iocoder.mall.order.application.convert.CartConvert; -import cn.iocoder.mall.order.application.vo.UsersCalcSkuPriceVO; -import cn.iocoder.mall.order.application.vo.UsersCartDetailVO; -import cn.iocoder.mall.order.application.vo.UsersOrderConfirmCreateVO; -import cn.iocoder.mall.promotion.api.CouponService; -import cn.iocoder.mall.promotion.api.bo.CouponCardAvailableBO; -import cn.iocoder.mall.user.sdk.context.UserSecurityContextHolder; -import org.apache.dubbo.config.annotation.Reference; -import org.springframework.web.bind.annotation.*; - -import java.util.ArrayList; -import java.util.Collections; -import java.util.List; -import java.util.Set; - -import static cn.iocoder.common.framework.vo.CommonResult.success; - -@RestController -@RequestMapping("users/cart") -public class UsersCartController { - - @Reference(validation = "true", version = "${dubbo.provider.CartService.version}") - private CartService cartService; - - @Reference(validation = "true", version = "${dubbo.provider.OrderService.version}") - private OrderService orderService; - - @Reference(validation = "true", version = "${dubbo.consumer.CouponService.version}") - private CouponService couponService; - - @PostMapping("add") - public CommonResult add(@RequestParam("skuId") Integer skuId, - @RequestParam("quantity") Integer quantity) { - // 添加到购物车 - cartService.add(UserSecurityContextHolder.getContext().getUserId(), skuId, quantity); - // 获得目前购物车商品总数量 - return success(cartService.count(UserSecurityContextHolder.getContext().getUserId())); - } - - @PostMapping("update_quantity") - public CommonResult updateQuantity(@RequestParam("skuId") Integer skuId, // TODO 芋艿,先暂用这个 VO 。等促销活动出来后,做调整 - @RequestParam("quantity") Integer quantity) { - // 添加到购物车 - cartService.updateQuantity(UserSecurityContextHolder.getContext().getUserId(), - skuId, quantity); - // 获得目前购物车明细 - return getCartDetail(); - } - - @PostMapping("update_selected") - public CommonResult updateSelected(@RequestParam("skuIds") Set skuIds, // TODO 芋艿,先暂用这个 VO 。等促销活动出来后,做调整 - @RequestParam("selected") Boolean selected) { - // 添加到购物车 - cartService.updateSelected(UserSecurityContextHolder.getContext().getUserId(), skuIds, selected); - // 获得目前购物车明细 - return getCartDetail(); - } - - @GetMapping("count") - public CommonResult count() { - return success(cartService.count(UserSecurityContextHolder.getContext().getUserId())); - } - - @GetMapping("/list") - public CommonResult list() { // TODO 芋艿,先暂用这个 VO 。等促销活动出来后,做调整 - return getCartDetail(); - } - - private CommonResult getCartDetail() { - // 获得购物车中选中的 - List cartItems = cartService.list(UserSecurityContextHolder.getContext().getUserId(), null); - // 购物车为空时,构造空的 UsersOrderConfirmCreateVO 返回 - if (cartItems.isEmpty()) { - UsersCartDetailVO result = new UsersCartDetailVO(); - result.setItemGroups(Collections.emptyList()); - result.setFee(new UsersCartDetailVO.Fee(0, 0, 0, 0)); - return success(result); - } - // 计算商品价格 - CalcOrderPriceBO calcOrder = list0(cartItems, null); - // 执行数据拼装 - return success(CartConvert.INSTANCE.convert2(calcOrder)); - } - - @GetMapping("/confirm_create_order") - public CommonResult getConfirmCreateOrder(@RequestParam(value = "couponCardId", required = false) Integer couponCardId) { - Integer userId = UserSecurityContextHolder.getContext().getUserId(); - // 获得购物车中选中的 - List cartItems = cartService.list(userId, true); - // 购物车为空时,构造空的 UsersOrderConfirmCreateVO 返回 - if (cartItems.isEmpty()) { - UsersOrderConfirmCreateVO result = new UsersOrderConfirmCreateVO(); - result.setItemGroups(Collections.emptyList()); - result.setFee(new UsersOrderConfirmCreateVO.Fee(0, 0, 0, 0)); - return success(result); - } - // 计算商品价格 - CalcOrderPriceBO calcOrderPrice = list0(cartItems, couponCardId); - // 获得优惠劵 - List couponCards = couponService.getCouponCardList(userId, - CartConvert.INSTANCE.convertList(calcOrderPrice.getItemGroups())); - // 执行数据拼装 - return success(CartConvert.INSTANCE.convert(calcOrderPrice).setCouponCards(couponCards)); - } - - private CalcOrderPriceBO list0(List cartItems, Integer couponCardId) { - // 创建计算的 DTO - CalcOrderPriceDTO calcOrderPriceDTO = new CalcOrderPriceDTO() - .setUserId(UserSecurityContextHolder.getContext().getUserId()) - .setItems(new ArrayList<>(cartItems.size())) - .setCouponCardId(couponCardId); - for (CartItemBO item : cartItems) { - calcOrderPriceDTO.getItems().add(new CalcOrderPriceDTO.Item(item.getSkuId(), item.getQuantity(), item.getSelected())); - } - // 执行计算 - return cartService.calcOrderPrice(calcOrderPriceDTO); - } - - @GetMapping("/calc_sku_price") - public CommonResult calcSkuPrice(@RequestParam("skuId") Integer skuId) { - // 计算 sku 的价格 - CalcSkuPriceBO calcSkuPrice = cartService.calcSkuPrice(skuId); - return success(CartConvert.INSTANCE.convert2(calcSkuPrice)); - } - - public CommonResult confirmOrder() { - // 查询购物车列表(选中的) -// cartService.list(userId, true); - // 查询确认订单信息的明细 - - return null; - } - -} diff --git a/order/order-application/src/main/java/cn/iocoder/mall/order/application/convert/CartConvert.java b/order/order-application/src/main/java/cn/iocoder/mall/order/application/convert/CartConvert.java deleted file mode 100644 index eec491ebe..000000000 --- a/order/order-application/src/main/java/cn/iocoder/mall/order/application/convert/CartConvert.java +++ /dev/null @@ -1,40 +0,0 @@ -package cn.iocoder.mall.order.application.convert; - -import cn.iocoder.mall.order.api.bo.CalcOrderPriceBO; -import cn.iocoder.mall.order.api.bo.CalcSkuPriceBO; -import cn.iocoder.mall.order.application.vo.UsersCalcSkuPriceVO; -import cn.iocoder.mall.order.application.vo.UsersCartDetailVO; -import cn.iocoder.mall.order.application.vo.UsersOrderConfirmCreateVO; -import cn.iocoder.mall.promotion.api.dto.CouponCardSpuDTO; -import org.mapstruct.Mapper; -import org.mapstruct.factory.Mappers; - -import java.util.ArrayList; -import java.util.List; -import java.util.stream.Collectors; - -@Mapper -public interface CartConvert { - - CartConvert INSTANCE = Mappers.getMapper(CartConvert.class); - - UsersOrderConfirmCreateVO convert(CalcOrderPriceBO calcOrderPriceBO); - - UsersCartDetailVO convert2(CalcOrderPriceBO calcOrderPriceBO); - - UsersCalcSkuPriceVO convert2(CalcSkuPriceBO calcSkuPriceBO); - - default List convertList(List itemGroups) { - List items = new ArrayList<>(); - itemGroups.forEach(itemGroup -> items.addAll(itemGroup.getItems().stream().map( - item -> new CouponCardSpuDTO() - .setSpuId(item.getSpu().getId()) - .setSkuId(item.getId()) - .setCategoryId(item.getSpu().getCid()) - .setPrice(item.getBuyPrice()) - .setQuantity(item.getBuyQuantity())) - .collect(Collectors.toList()))); - return items; - } - -} diff --git a/order/order-application/src/main/java/cn/iocoder/mall/order/application/convert/OrderConvertAPP.java b/order/order-application/src/main/java/cn/iocoder/mall/order/application/convert/OrderConvertAPP.java deleted file mode 100644 index 98703be0e..000000000 --- a/order/order-application/src/main/java/cn/iocoder/mall/order/application/convert/OrderConvertAPP.java +++ /dev/null @@ -1,54 +0,0 @@ -package cn.iocoder.mall.order.application.convert; - -import cn.iocoder.mall.order.api.bo.CartItemBO; -import cn.iocoder.mall.order.api.dto.*; -import cn.iocoder.mall.order.application.po.admin.OrderItemUpdatePO; -import cn.iocoder.mall.order.application.po.admin.OrderLogisticsPO; -import cn.iocoder.mall.order.application.po.admin.OrderPageQueryPO; -import cn.iocoder.mall.order.application.po.user.OrderCreatePO; -import org.mapstruct.Mapper; -import org.mapstruct.Mappings; -import org.mapstruct.factory.Mappers; - -import java.util.List; - -/** - * application 订单 convert - * - * TODO 这种方式 文件名不能一样哈! - * - * @author Sin - * @time 2019-03-24 10:45 - */ -@Mapper -public interface OrderConvertAPP { - - OrderConvertAPP INSTANCE = Mappers.getMapper(OrderConvertAPP.class); - - @Mappings({}) - OrderQueryDTO convert(OrderPageQueryPO orderPageQueryVO); - - @Mappings({}) - OrderLogisticsUpdateDTO convert(OrderLogisticsPO orderLogisticsVO); - - @Mappings({}) - OrderItemUpdateDTO convert(OrderItemUpdatePO orderItemUpdateVO); - - @Mappings({}) - OrderCreateDTO convert(OrderCreatePO orderCreatePO); - - @Mappings({}) - List convert(List cartItems); - - default OrderCreateDTO createOrderCreateDTO(Integer userId, Integer userAddressId, String remark, String ip, - List cartItems, Integer couponCardId) { - return new OrderCreateDTO() - .setUserId(userId) - .setUserAddressId(userAddressId) - .setRemark(remark) - .setIp(ip) - .setOrderItems(this.convert(cartItems)) - .setCouponCardId(couponCardId); - } - -} diff --git a/order/order-application/src/main/java/cn/iocoder/mall/order/application/convert/OrderDeliveryConvert.java b/order/order-application/src/main/java/cn/iocoder/mall/order/application/convert/OrderDeliveryConvert.java deleted file mode 100644 index 777126121..000000000 --- a/order/order-application/src/main/java/cn/iocoder/mall/order/application/convert/OrderDeliveryConvert.java +++ /dev/null @@ -1,20 +0,0 @@ -package cn.iocoder.mall.order.application.convert; - -import cn.iocoder.mall.order.api.dto.OrderDeliveryDTO; -import cn.iocoder.mall.order.application.po.admin.OrderDeliverPO; -import org.mapstruct.Mapper; -import org.mapstruct.Mappings; -import org.mapstruct.factory.Mappers; - -/** - * @author Sin - * @time 2019-04-05 17:00 - */ -@Mapper -public interface OrderDeliveryConvert { - - OrderDeliveryConvert INSTANCE = Mappers.getMapper(OrderDeliveryConvert.class); - - @Mappings({}) - OrderDeliveryDTO convert(OrderDeliverPO orderDeliverPO); -} diff --git a/order/order-application/src/main/java/cn/iocoder/mall/order/application/convert/OrderReturnConvert.java b/order/order-application/src/main/java/cn/iocoder/mall/order/application/convert/OrderReturnConvert.java deleted file mode 100644 index 71f25954f..000000000 --- a/order/order-application/src/main/java/cn/iocoder/mall/order/application/convert/OrderReturnConvert.java +++ /dev/null @@ -1,27 +0,0 @@ -package cn.iocoder.mall.order.application.convert; - -import cn.iocoder.mall.order.api.dto.OrderReturnApplyDTO; -import cn.iocoder.mall.order.api.dto.OrderReturnQueryDTO; -import cn.iocoder.mall.order.application.po.admin.OrderReturnQueryPO; -import cn.iocoder.mall.order.application.po.user.OrderReturnApplyPO; -import org.mapstruct.Mapper; -import org.mapstruct.Mappings; -import org.mapstruct.factory.Mappers; - -/** - * 订单退货 - * - * @author Sin - * @time 2019-04-25 21:54 - */ -@Mapper -public interface OrderReturnConvert { - - OrderReturnConvert INSTANCE = Mappers.getMapper(OrderReturnConvert.class); - - @Mappings({}) - OrderReturnApplyDTO convert(OrderReturnApplyPO orderReturnApplyPO); - - @Mappings({}) - OrderReturnQueryDTO convert(OrderReturnQueryPO orderReturnQueryPO); -} diff --git a/order/order-application/src/main/resources/application.yaml b/order/order-application/src/main/resources/application.yaml index a602900ae..17a49c062 100644 --- a/order/order-application/src/main/resources/application.yaml +++ b/order/order-application/src/main/resources/application.yaml @@ -1,32 +1,7 @@ spring: + # Application 的配置项 application: name: order-application - - # Spring Cloud 配置项 - cloud: - # Spring Cloud Sentinel 配置项 - sentinel: - transport: - dashboard: s1.iocoder.cn:12088 # Sentinel Dashboard 服务地址 - eager: true # 项目启动时,直接连接到 Sentinel - -# server -server: - port: 18088 - servlet: - context-path: /order-api/ - -swagger: - enable: true # 暂时不去掉 - title: 订单子系统 - description: 订单子系统 - version: 1.0.0 - base-package: cn.iocoder.mall.order.application.controller - -management: - endpoints: - web: - exposure: - include: health,info,env,metrics,prometheus - metrics: - enabled: true + # Profile 的配置项 + profiles: + active: local diff --git a/order/order-biz-api/pom.xml b/order/order-biz-api/pom.xml new file mode 100644 index 000000000..b024bd6de --- /dev/null +++ b/order/order-biz-api/pom.xml @@ -0,0 +1,24 @@ + + + + onemall + cn.iocoder.mall + 1.0-SNAPSHOT + + 4.0.0 + + order-biz-api + + + + + cn.iocoder.mall + common-framework + 1.0-SNAPSHOT + + + + + diff --git a/order/order-biz-api/src/main/java/cn/iocoder/mall/order/biz/package-info.java b/order/order-biz-api/src/main/java/cn/iocoder/mall/order/biz/package-info.java new file mode 100644 index 000000000..6c1bb4730 --- /dev/null +++ b/order/order-biz-api/src/main/java/cn/iocoder/mall/order/biz/package-info.java @@ -0,0 +1,6 @@ +/** + * 该项目,主要用于暴露一些共享的枚举类等。 + * + * 例如说,RPC 接口提供错误码给调用方 + */ +package cn.iocoder.mall.order.biz; diff --git a/order/order-biz/pom.xml b/order/order-biz/pom.xml new file mode 100644 index 000000000..3a30bd194 --- /dev/null +++ b/order/order-biz/pom.xml @@ -0,0 +1,73 @@ + + + + onemall + cn.iocoder.mall + 1.0-SNAPSHOT + + 4.0.0 + + order-biz + + + + cn.iocoder.mall + order-biz-api + 1.0-SNAPSHOT + + + + + org.springframework.boot + spring-boot-starter + + + + + mysql + mysql-connector-java + + + org.springframework + spring-tx + + + org.springframework + spring-jdbc + + + com.alibaba + druid-spring-boot-starter + + + + cn.iocoder.mall + mall-spring-boot-starter-mybatis + 1.0-SNAPSHOT + + + + + org.mapstruct + mapstruct + + + org.mapstruct + mapstruct-jdk8 + + + org.projectlombok + lombok + + + + com.alibaba + fastjson + + + + + + diff --git a/order/order-biz/src/main/resources/biz.yaml b/order/order-biz/src/main/resources/biz.yaml new file mode 100644 index 000000000..ba156c62e --- /dev/null +++ b/order/order-biz/src/main/resources/biz.yaml @@ -0,0 +1,19 @@ +spring: + # 数据源配置项 + datasource: + url: jdbc:mysql://s1.iocoder.cn:3306/mall_system?useSSL=false&useUnicode=true&characterEncoding=UTF-8 + driver-class-name: com.mysql.jdbc.Driver + username: root + password: 3WLiVUBEwTbvAfsh + +# MyBatis Plus 配置项 +mybatis-plus: + configuration: + map-underscore-to-camel-case: true # 虽然默认为 true ,但是还是显示去指定下。 + global-config: + db-config: + id-type: auto + logic-delete-value: 1 # 逻辑已删除值(默认为 1) + logic-not-delete-value: 0 # 逻辑未删除值(默认为 0) + mapper-locations: classpath*:mapper/*.xml + type-aliases-package: cn.iocoder.mall.system.biz.dataobject diff --git a/order/order-rest/pom.xml b/order/order-rest/pom.xml new file mode 100644 index 000000000..150c7d471 --- /dev/null +++ b/order/order-rest/pom.xml @@ -0,0 +1,41 @@ + + + + order + cn.iocoder.mall + 1.0-SNAPSHOT + + 4.0.0 + + order-rest + 提供 order 服务的 Rest 接口的实现,提供对外调用 + + + + + cn.iocoder.mall + order-biz + 1.0-SNAPSHOT + + + + cn.iocoder.mall + mall-spring-boot-starter-web + 1.0-SNAPSHOT + + + cn.iocoder.mall + mall-spring-boot-starter-security + 1.0-SNAPSHOT + + + cn.iocoder.mall + mall-spring-boot-starter-swagger + 1.0-SNAPSHOT + + + + + diff --git a/order/order-rest/src/main/java/cn/iocoder/mall/order/rest/controller/admins/AdminOrderReturnController.java b/order/order-rest/src/main/java/cn/iocoder/mall/order/rest/controller/admins/AdminOrderReturnController.java new file mode 100644 index 000000000..e0a2e3ba6 --- /dev/null +++ b/order/order-rest/src/main/java/cn/iocoder/mall/order/rest/controller/admins/AdminOrderReturnController.java @@ -0,0 +1,47 @@ +package cn.iocoder.mall.order.rest.controller.admins; + +import io.swagger.annotations.Api; +import org.springframework.web.bind.annotation.RequestMapping; +import org.springframework.web.bind.annotation.RestController; + +/** + * 订单退货 + * + * @author Sin + * @time 2019-05-06 21:31 + */ +@RestController +@RequestMapping("admins/order_return") +@Api("订单退货(admins api)") +public class AdminOrderReturnController { + +// @Reference(validation = "true", version = "${dubbo.provider.OrderReturnService.version}") +// private OrderReturnService orderReturnService; +// +// @GetMapping("list") +// public CommonResult list(@Validated OrderReturnQueryPO queryPO) { +// OrderReturnQueryDTO queryDTO = OrderReturnConvert.INSTANCE.convert(queryPO); +// return orderReturnService.orderReturnList(queryDTO); +// } +// +// @PostMapping("agree") +// public CommonResult agree(@RequestParam("id") Integer id) { +// return orderReturnService.orderReturnAgree(id); +// } +// +// @PostMapping("refuse") +// public CommonResult refuse(@RequestParam("id") Integer id) { +// return orderReturnService.orderReturnRefuse(id); +// } +// +// @PostMapping("confirm_receipt") +// public CommonResult confirmReceipt(@RequestParam("id") Integer id) { +// return orderReturnService.confirmReceipt(id); +// } +// +// @PostMapping("confirm_refund") +// public CommonResult confirmRefund(HttpServletRequest request, @RequestParam("id") Integer id) { +// String ip = HttpUtil.getIp(request); +// return orderReturnService.refund(id, ip); +// } +} diff --git a/order/order-rest/src/main/java/cn/iocoder/mall/order/rest/controller/admins/AdminsOrderController.java b/order/order-rest/src/main/java/cn/iocoder/mall/order/rest/controller/admins/AdminsOrderController.java new file mode 100644 index 000000000..fa2eb03d6 --- /dev/null +++ b/order/order-rest/src/main/java/cn/iocoder/mall/order/rest/controller/admins/AdminsOrderController.java @@ -0,0 +1,83 @@ +package cn.iocoder.mall.order.rest.controller.admins; + +import io.swagger.annotations.Api; +import org.springframework.web.bind.annotation.RequestMapping; +import org.springframework.web.bind.annotation.RestController; + +/** + * 订单API(admins) + * + * @author Sin + * @time 2019-03-24 10:22 + */ +@RestController +@RequestMapping("admins/order") +@Api(value = "订单 API(admins)") +public class AdminsOrderController { + +// @Reference(validation = "true", version = "${dubbo.provider.OrderService.version}") +// private OrderService orderService; +// +// @GetMapping("page") +// @ApiOperation("订单列表") +// public CommonResult getOrderPage(@Validated OrderPageQueryPO orderPageQueryVO) { +// OrderQueryDTO orderQueryDTO = OrderConvertAPP.INSTANCE.convert(orderPageQueryVO); +// return orderService.getOrderPage(orderQueryDTO); +// } +// +// @GetMapping("order_items") +// @ApiOperation("订单列表") +// public CommonResult> getOrderItems(@RequestParam("orderId") Integer orderId) { +// return orderService.getOrderItems(orderId); +// } +// +// @GetMapping("order_recipient_info") +// @ApiOperation("订单收件人信息") +// public CommonResult getOrderRecipientBO(@RequestParam("orderId") Integer orderId) { +// return orderService.getOrderRecipientBO(orderId); +// } +// +// @PostMapping("order_deliver") +// @ApiOperation("订单发货") +// public CommonResult orderDeliver(@RequestBody @Validated OrderDeliverPO orderDeliverPO) { +// return orderService.orderDelivery(OrderDeliveryConvert.INSTANCE.convert(orderDeliverPO)); +// } +// +// @PutMapping("update_remark") +// @ApiOperation("更新-更新订单备注") +// public CommonResult updateRemark(@RequestParam("orderId") Integer orderId, +// @RequestParam("remark") String remark) { +// return orderService.updateOrderRemake(orderId, remark); +// } +// +// @PutMapping("cancel_order") +// @ApiOperation("取消订单") +// public CommonResult cancelOrder( +// @RequestParam("orderId") Integer orderId, +// @RequestParam("reasons") Integer reasons, +// @RequestParam(value = "otherReasons", required = false) String otherReasons) { +// return orderService.cancelOrder(orderId, reasons, otherReasons); +// } +// +// @PutMapping("order_item/update_pay_amount") +// @ApiOperation("更新-订单item实付金额") +// public CommonResult updateOrderItemPayAmount(@RequestParam("orderId") Integer orderId, +// @RequestParam("orderItemId") Integer orderItemId, +// @RequestParam("payAmount") Integer payAmount) { +// return orderService.updateOrderItemPayAmount(orderId, orderItemId, payAmount); +// } +// +// @PutMapping("order_item/update") +// @ApiOperation("更新-订单item") +// public CommonResult updateOrderItem(@RequestBody @Validated OrderItemUpdatePO orderItemUpdateVO) { +// OrderItemUpdateDTO dto = OrderConvertAPP.INSTANCE.convert(orderItemUpdateVO); +// return orderService.updateOrderItem(dto); +// } +// +// @PutMapping("logistics/update") +// @ApiOperation("更新-订单物流") +// public CommonResult updateLogistics(@RequestBody @Validated OrderLogisticsPO orderLogisticsVO) { +// OrderLogisticsUpdateDTO dto = OrderConvertAPP.INSTANCE.convert(orderLogisticsVO); +// return orderService.updateLogistics(dto); +// } +} diff --git a/order/order-rest/src/main/java/cn/iocoder/mall/order/rest/controller/users/OrderCommentController.java b/order/order-rest/src/main/java/cn/iocoder/mall/order/rest/controller/users/OrderCommentController.java new file mode 100644 index 000000000..d13a233e7 --- /dev/null +++ b/order/order-rest/src/main/java/cn/iocoder/mall/order/rest/controller/users/OrderCommentController.java @@ -0,0 +1,61 @@ +package cn.iocoder.mall.order.rest.controller.users; + +import cn.iocoder.common.framework.constant.MallConstants; +import io.swagger.annotations.Api; +import org.springframework.web.bind.annotation.RequestMapping; +import org.springframework.web.bind.annotation.RestController; + +/** + * + * 订单评论 Api(user) + * + * @author wtz + * @time 2019-05-27 20:46 + */ +@RestController +@RequestMapping(MallConstants.ROOT_PATH_USER + "/order_comment") +@Api("用户评论模块") +public class OrderCommentController { + +// @Reference(validation = "true", version = "${dubbo.provider.OrderCommentService.version}") +// private OrderCommentService orderCommentService; +// +// @Reference(validation = "true", version = "${dubbo.provider.OrderCommentReplyService.version}") +// private OrderCommentReplyService orderCommentReplyService; +// +// +// @PostMapping("create_order_comment") +// //@RequiresLogin +// @ApiOperation(value = "创建订单评论") +// public CommonResult createOrderComment(@RequestBody @Validated OrderCommentCreateDTO orderCommentCreateDTO) { +// Integer userId = UserSecurityContextHolder.getContext().getUserId(); +// orderCommentCreateDTO.setUserId(userId); +// return success(orderCommentService.createOrderComment(orderCommentCreateDTO)); +// } +// +// @GetMapping("order_comment_page") +// @ApiOperation(value = "获取评论分页") +// public CommonResult getOrderCommentPage(@Validated OrderCommentPageDTO orderCommentPageDTO){ +// return success(orderCommentService.getOrderCommentPage(orderCommentPageDTO)); +// } +// +// @GetMapping("order_comment_info_merchant_reply") +// @ApiOperation(value = "获取评论和商家回复") +// public CommonResult geOrderCommentInfoAndMerchantReply(@RequestParam("commentId") Integer commentId){ +// OrderCommentInfoAndMerchantReplyBO orderCommentInfoAndMerchantReplyBO=new OrderCommentInfoAndMerchantReplyBO(); +// orderCommentInfoAndMerchantReplyBO.setOrderCommentInfoBO(orderCommentService.getOrderCommentInfo(commentId)); +// orderCommentInfoAndMerchantReplyBO.setOrderCommentMerchantReplyBOS(orderCommentReplyService.getOrderCommentMerchantReply(commentId)); +// return success(orderCommentInfoAndMerchantReplyBO); +// } +// +// @GetMapping +// //@RequiresLogin +// @ApiOperation(value = "获取订单评论状态分页") +// public CommonResult getOrderCommentStateInfoPage(@Validated OrderCommentStateInfoPageDTO orderCommentStateInfoPageDTO){ +// //Integer userId = UserSecurityContextHolder.getContext().getUserId(); +// //orderCommentStateInfoPageDTO.setUserId(userId); +// return success(orderCommentService.getOrderCommentStateInfoPage(orderCommentStateInfoPageDTO)); +// } + + +} diff --git a/order/order-rest/src/main/java/cn/iocoder/mall/order/rest/controller/users/OrderCommentReplyController.java b/order/order-rest/src/main/java/cn/iocoder/mall/order/rest/controller/users/OrderCommentReplyController.java new file mode 100644 index 000000000..b9787a203 --- /dev/null +++ b/order/order-rest/src/main/java/cn/iocoder/mall/order/rest/controller/users/OrderCommentReplyController.java @@ -0,0 +1,37 @@ +package cn.iocoder.mall.order.rest.controller.users; + +import cn.iocoder.common.framework.constant.MallConstants; +import io.swagger.annotations.Api; +import org.springframework.web.bind.annotation.RequestMapping; +import org.springframework.web.bind.annotation.RestController; + + +/** + * + * 评论回复模块 Api(user) + * + * @author wtz + * @time 2019-05-31 18:00 + */ +@RestController +@RequestMapping(MallConstants.ROOT_PATH_USER + "/order_comment_reply") +@Api("用户评论回复模块 ") +public class OrderCommentReplyController { + +// @Reference(validation = "true", version = "${dubbo.provider.OrderCommentService.version}") +// private OrderCommentReplyService orderCommentReplyService; +// +// @PostMapping("create_order_comment_reply") +// //@RequiresLogin +// @ApiOperation(value = "创建订单回复") +// public CommonResult createOrderCommentReply(@RequestBody @Validated OrderCommentReplyCreateDTO orderCommentReplyCreateDTO){ +// return success(orderCommentReplyService.createOrderCommentReply(orderCommentReplyCreateDTO)); +// } +// +// @GetMapping("order_comment_reply_page") +// //@RequiresLogin +// @ApiOperation(value = "分页获取评论回复") +// public CommonResult getOrderCommentReplyPage(@Validated OrderCommentReplyPageDTO orderCommentReplyCreateDTO){ +// return success(orderCommentReplyService.getOrderCommentReplyPage(orderCommentReplyCreateDTO)); +// } +} diff --git a/order/order-rest/src/main/java/cn/iocoder/mall/order/rest/controller/users/OrderController.java b/order/order-rest/src/main/java/cn/iocoder/mall/order/rest/controller/users/OrderController.java new file mode 100644 index 000000000..ab0d08c95 --- /dev/null +++ b/order/order-rest/src/main/java/cn/iocoder/mall/order/rest/controller/users/OrderController.java @@ -0,0 +1,123 @@ +package cn.iocoder.mall.order.rest.controller.users; + + +import io.swagger.annotations.Api; +import org.springframework.web.bind.annotation.RequestMapping; +import org.springframework.web.bind.annotation.RestController; + +/** + * 订单API(users) + * + * @author Sin + * @time 2019-03-24 11:24 + */ +@RestController +@RequestMapping("users/order") +@Api(description = "用户订单") // TODO FROM 芋艿 to 小范,description 已经废弃啦 +public class OrderController { + +// @Reference(validation = "true", version = "${dubbo.provider.OrderReturnService.version}") +// private OrderService orderService; +// +// @Reference(validation = "true", version = "${dubbo.provider.CartService.version}") +// private CartService cartService; +// +// @Reference(validation = "true", version = "${dubbo.consumer.DataDictService.version}") +// private DataDictService dataDictService; +// +// @Reference(validation = "true", version = "${dubbo.consumer.CouponService.version}") +// private CouponService couponService; +// +// @GetMapping("order_page") +// @RequiresLogin +// @ApiOperation("订单分页") +// public CommonResult getOrderPage(@Validated OrderQueryDTO orderQueryDTO) { +// Integer userId = UserSecurityContextHolder.getContext().getUserId(); +// orderQueryDTO.setUserId(userId); +// return orderService.getOrderPage(orderQueryDTO); +// } +// +// @PostMapping("create_order") +// @RequiresLogin +// @ApiOperation("创建订单") +// public CommonResult createOrder(@RequestBody @Validated OrderCreatePO orderCreatePO, +// HttpServletRequest request) { +// Integer userId = UserSecurityContextHolder.getContext().getUserId(); +// OrderCreateDTO orderCreateDTO = OrderConvertAPP.INSTANCE.convert(orderCreatePO); +// orderCreateDTO.setUserId(userId).setIp(HttpUtil.getIp(request)); +// return orderService.createOrder(orderCreateDTO); +// } +// +// @PostMapping("create_order_from_cart") +// @RequiresLogin +// @ApiOperation("创建订单购物车") +// public CommonResult createOrderFromCart(@RequestParam("userAddressId") Integer userAddressId, +// @RequestParam(value = "couponCardId", required = false) Integer couponCardId, +// @RequestParam(value = "remark", required = false) String remark, +// HttpServletRequest request) { +// Integer userId = UserSecurityContextHolder.getContext().getUserId(); +// // 获得购物车中选中的商品 +// List cartItems = cartService.list(userId, true); +// if (cartItems.isEmpty()) { +// return ServiceExceptionUtil.error(OrderErrorCodeEnum.ORDER_CREATE_CART_IS_EMPTY.getCode()); +// } +// // 创建 OrderCreateDTO 对象 +// OrderCreateDTO orderCreateDTO = OrderConvertAPP.INSTANCE.createOrderCreateDTO(userId, userAddressId, +// remark, HttpUtil.getIp(request), +// cartItems, couponCardId); +// // 创建订单 +// CommonResult createResult = orderService.createOrder(orderCreateDTO); +// if (createResult.isError()) { +// return CommonResult.error(createResult); +// } +// // 清空购物车 // TODO 芋艿,需要标记删除的原因,即结果为创建为某个订单。 +// cartService.deleteList(userId, cartItems.stream().map(CartItemBO::getSkuId).collect(Collectors.toList())); +// // 返回结果 +// return createResult; +// } +// +// @GetMapping("confirm_create_order") +// @RequiresLogin +// @ApiOperation("确认创建订单") +// public CommonResult getConfirmCreateOrder(@RequestParam("skuId") Integer skuId, +// @RequestParam("quantity") Integer quantity, +// @RequestParam(value = "couponCardId", required = false) Integer couponCardId) { +// Integer userId = UserSecurityContextHolder.getContext().getUserId(); +// // 创建 CalcOrderPriceDTO 对象,并执行价格计算 +// CalcOrderPriceDTO calcOrderPriceDTO = new CalcOrderPriceDTO() +// .setUserId(userId) +// .setItems(Collections.singletonList(new CalcOrderPriceDTO.Item(skuId, quantity, true))) +// .setCouponCardId(couponCardId); +// CalcOrderPriceBO calcOrderPrice = cartService.calcOrderPrice(calcOrderPriceDTO); +// // 获得优惠劵 +// List couponCards = couponService.getCouponCardList(userId, +// CartConvert.INSTANCE.convertList(calcOrderPrice.getItemGroups())); +// // 执行数据拼装 +// return success(CartConvert.INSTANCE.convert(calcOrderPrice).setCouponCards(couponCards)); +// } +// +// @PostMapping("confirm_receiving") +// @RequiresLogin +// @ApiOperation("确认收货") +// public CommonResult confirmReceiving(@RequestParam("orderId") Integer orderId) { +// Integer userId = UserSecurityContextHolder.getContext().getUserId(); +// return orderService.confirmReceiving(userId, orderId); +// } +// +// @GetMapping("info") +// @RequiresLogin +// @ApiOperation("订单详情") +// public CommonResult orderInfo(@RequestParam("orderId") Integer orderId) { +// Integer userId = UserSecurityContextHolder.getContext().getUserId(); +// CommonResult commonResult = orderService.info(userId, orderId); +// +// OrderInfoBO orderInfoBO = commonResult.getData(); +// if (orderInfoBO != null) { +// CommonResult dictResult = dataDictService +// .getDataDict(DictKeyConstants.ORDER_STATUS, orderInfoBO.getStatus()); +// orderInfoBO.setStatusText(dictResult.getData().getDisplayName()); +// } +// return commonResult; +// } + +} diff --git a/order/order-rest/src/main/java/cn/iocoder/mall/order/rest/controller/users/OrderLogisticsController.java b/order/order-rest/src/main/java/cn/iocoder/mall/order/rest/controller/users/OrderLogisticsController.java new file mode 100644 index 000000000..43bfd8bfd --- /dev/null +++ b/order/order-rest/src/main/java/cn/iocoder/mall/order/rest/controller/users/OrderLogisticsController.java @@ -0,0 +1,65 @@ +package cn.iocoder.mall.order.rest.controller.users; + +import io.swagger.annotations.Api; +import org.springframework.web.bind.annotation.RequestMapping; +import org.springframework.web.bind.annotation.RestController; + +/** + * 订单物流 controller + * + * @author Sin + * @time 2019-04-12 22:24 + */ +@RestController +@RequestMapping("users/order_logistics") +@Api(description = "订单物流信息") +public class OrderLogisticsController { + +// @Reference(validation = "true", version = "${dubbo.provider.OrderLogisticsService.version}") +// private OrderLogisticsService orderLogisticsService; +// +// @Reference(validation = "true", version = "${dubbo.consumer.DataDictService.version}") +// private DataDictService dataDictService; +// +// @GetMapping("info") +// @ApiOperation("物流详细 - 物流通用") +// public CommonResult logistics(@RequestParam("logisticsId") Integer logisticsId) { +// return orderLogisticsService.getLogisticsInfo(logisticsId); +// } +// +// @GetMapping("info_order") +// @ApiOperation("物流详细 - 返回订单所关联的所有物流信息(订单用的)") +// public CommonResult logisticsInfoWithOrder(@RequestParam("orderId") Integer orderId) { +// Integer userId = UserSecurityContextHolder.getContext().getUserId(); +// CommonResult commonResult = orderLogisticsService.getOrderLogisticsInfo(userId, orderId); +// if (commonResult.isSuccess()) { +// OrderLogisticsInfoWithOrderBO orderLogisticsInfoBO = commonResult.getData(); +// List logisticsList = orderLogisticsInfoBO.getLogistics(); +// +// // 获取字典值 +// Set dictValues = logisticsList.stream().map(o -> o.getLogistics()).collect(Collectors.toSet()); +// if (!CollectionUtils.isEmpty(dictValues)) { +// CommonResult> dictResult = dataDictService +// .getDataDictList(DictKeyConstants.ORDER_LOGISTICS_COMPANY, dictValues); +// +// if (dictResult.isError()) { +// // 错误情况 +// return ServiceExceptionUtil.error(OrderErrorCodeEnum.DICT_SERVER_INVOKING_FAIL.getCode()); +// } +// +// // 转换结果字典值 +// Map dataDictBOMap = dictResult.getData() +// .stream().collect(Collectors.toMap(o -> o.getValue(), o -> o)); +// +// logisticsList.stream().map(o -> { +// String dicValue = o.getLogistics().toString(); +// if (dataDictBOMap.containsKey(dicValue)) { +// o.setLogisticsText(dataDictBOMap.get(dicValue).getDisplayName()); +// } +// return o; +// }).collect(Collectors.toList()); +// } +// } +// return commonResult; +// } +} diff --git a/order/order-rest/src/main/java/cn/iocoder/mall/order/rest/controller/users/OrderReturnController.java b/order/order-rest/src/main/java/cn/iocoder/mall/order/rest/controller/users/OrderReturnController.java new file mode 100644 index 000000000..d9ea9dfdd --- /dev/null +++ b/order/order-rest/src/main/java/cn/iocoder/mall/order/rest/controller/users/OrderReturnController.java @@ -0,0 +1,53 @@ +package cn.iocoder.mall.order.rest.controller.users; + +import org.springframework.web.bind.annotation.RequestMapping; +import org.springframework.web.bind.annotation.RestController; + +/** + * 订单退款/售后流程 + * + * @author Sin + * @time 2019-04-25 22:04 + */ +@RestController +@RequestMapping("users/order_return") +public class OrderReturnController { + +// @Reference(validation = "true", version = "${dubbo.provider.OrderReturnService.version}") +// private OrderReturnService orderReturnService; +// +// @Reference(validation = "true", version = "${dubbo.consumer.DataDictService.version}") +// private DataDictService dataDictService; +// +// @GetMapping("reason") +// @ApiOperation("原因") +// public CommonResult> orderReturnReason() { +// return dataDictService.getDataDict(DictKeyConstants.ORDER_RETURN_REASON); +// } +// +// @PostMapping("apply") +// @ApiOperation("订单售后") +// public CommonResult orderReturnApply(@RequestBody OrderReturnApplyPO orderReturnApplyPO) { +// OrderReturnApplyDTO applyDTO = OrderReturnConvert.INSTANCE.convert(orderReturnApplyPO); +// return orderReturnService.orderReturnApply(applyDTO); +// } +// +// @GetMapping("info") +// @ApiOperation("订单售后详细") +// public CommonResult orderApplyInfo(@RequestParam("orderId") Integer orderId) { +// CommonResult commonResult = orderReturnService.orderApplyInfo(orderId); +// +// // 转换 字典值 +// if (commonResult.isSuccess()) { +// CommonResult dataDictResult = dataDictService.getDataDict( +// DictKeyConstants.ORDER_RETURN_SERVICE_TYPE, +// commonResult.getData().getReturnInfo().getServiceType()); +// +// if (dataDictResult.isSuccess()) { +// commonResult.getData().getReturnInfo().setServiceTypeText(dataDictResult.getData().getDisplayName()); +// } +// } +// +// return commonResult; +// } +} diff --git a/order/order-rest/src/main/java/cn/iocoder/mall/order/rest/controller/users/UsersCartController.java b/order/order-rest/src/main/java/cn/iocoder/mall/order/rest/controller/users/UsersCartController.java new file mode 100644 index 000000000..9b8b4e16a --- /dev/null +++ b/order/order-rest/src/main/java/cn/iocoder/mall/order/rest/controller/users/UsersCartController.java @@ -0,0 +1,122 @@ +package cn.iocoder.mall.order.rest.controller.users; + +import org.springframework.web.bind.annotation.RequestMapping; +import org.springframework.web.bind.annotation.RestController; + +@RestController +@RequestMapping("users/cart") +public class UsersCartController { + +// @Reference(validation = "true", version = "${dubbo.provider.CartService.version}") +// private CartService cartService; +// +// @Reference(validation = "true", version = "${dubbo.provider.OrderService.version}") +// private OrderService orderService; +// +// @Reference(validation = "true", version = "${dubbo.consumer.CouponService.version}") +// private CouponService couponService; +// +// @PostMapping("add") +// public CommonResult add(@RequestParam("skuId") Integer skuId, +// @RequestParam("quantity") Integer quantity) { +// // 添加到购物车 +// cartService.add(UserSecurityContextHolder.getContext().getUserId(), skuId, quantity); +// // 获得目前购物车商品总数量 +// return success(cartService.count(UserSecurityContextHolder.getContext().getUserId())); +// } +// +// @PostMapping("update_quantity") +// public CommonResult updateQuantity(@RequestParam("skuId") Integer skuId, // TODO 芋艿,先暂用这个 VO 。等促销活动出来后,做调整 +// @RequestParam("quantity") Integer quantity) { +// // 添加到购物车 +// cartService.updateQuantity(UserSecurityContextHolder.getContext().getUserId(), +// skuId, quantity); +// // 获得目前购物车明细 +// return getCartDetail(); +// } +// +// @PostMapping("update_selected") +// public CommonResult updateSelected(@RequestParam("skuIds") Set skuIds, // TODO 芋艿,先暂用这个 VO 。等促销活动出来后,做调整 +// @RequestParam("selected") Boolean selected) { +// // 添加到购物车 +// cartService.updateSelected(UserSecurityContextHolder.getContext().getUserId(), skuIds, selected); +// // 获得目前购物车明细 +// return getCartDetail(); +// } +// +// @GetMapping("count") +// public CommonResult count() { +// return success(cartService.count(UserSecurityContextHolder.getContext().getUserId())); +// } +// +// @GetMapping("/list") +// public CommonResult list() { // TODO 芋艿,先暂用这个 VO 。等促销活动出来后,做调整 +// return getCartDetail(); +// } +// +// private CommonResult getCartDetail() { +// // 获得购物车中选中的 +// List cartItems = cartService.list(UserSecurityContextHolder.getContext().getUserId(), null); +// // 购物车为空时,构造空的 UsersOrderConfirmCreateVO 返回 +// if (cartItems.isEmpty()) { +// UsersCartDetailVO result = new UsersCartDetailVO(); +// result.setItemGroups(Collections.emptyList()); +// result.setFee(new UsersCartDetailVO.Fee(0, 0, 0, 0)); +// return success(result); +// } +// // 计算商品价格 +// CalcOrderPriceBO calcOrder = list0(cartItems, null); +// // 执行数据拼装 +// return success(CartConvert.INSTANCE.convert2(calcOrder)); +// } +// +// @GetMapping("/confirm_create_order") +// public CommonResult getConfirmCreateOrder(@RequestParam(value = "couponCardId", required = false) Integer couponCardId) { +// Integer userId = UserSecurityContextHolder.getContext().getUserId(); +// // 获得购物车中选中的 +// List cartItems = cartService.list(userId, true); +// // 购物车为空时,构造空的 UsersOrderConfirmCreateVO 返回 +// if (cartItems.isEmpty()) { +// UsersOrderConfirmCreateVO result = new UsersOrderConfirmCreateVO(); +// result.setItemGroups(Collections.emptyList()); +// result.setFee(new UsersOrderConfirmCreateVO.Fee(0, 0, 0, 0)); +// return success(result); +// } +// // 计算商品价格 +// CalcOrderPriceBO calcOrderPrice = list0(cartItems, couponCardId); +// // 获得优惠劵 +// List couponCards = couponService.getCouponCardList(userId, +// CartConvert.INSTANCE.convertList(calcOrderPrice.getItemGroups())); +// // 执行数据拼装 +// return success(CartConvert.INSTANCE.convert(calcOrderPrice).setCouponCards(couponCards)); +// } +// +// private CalcOrderPriceBO list0(List cartItems, Integer couponCardId) { +// // 创建计算的 DTO +// CalcOrderPriceDTO calcOrderPriceDTO = new CalcOrderPriceDTO() +// .setUserId(UserSecurityContextHolder.getContext().getUserId()) +// .setItems(new ArrayList<>(cartItems.size())) +// .setCouponCardId(couponCardId); +// for (CartItemBO item : cartItems) { +// calcOrderPriceDTO.getItems().add(new CalcOrderPriceDTO.Item(item.getSkuId(), item.getQuantity(), item.getSelected())); +// } +// // 执行计算 +// return cartService.calcOrderPrice(calcOrderPriceDTO); +// } +// +// @GetMapping("/calc_sku_price") +// public CommonResult calcSkuPrice(@RequestParam("skuId") Integer skuId) { +// // 计算 sku 的价格 +// CalcSkuPriceBO calcSkuPrice = cartService.calcSkuPrice(skuId); +// return success(CartConvert.INSTANCE.convert2(calcSkuPrice)); +// } +// +// public CommonResult confirmOrder() { +// // 查询购物车列表(选中的) +//// cartService.list(userId, true); +// // 查询确认订单信息的明细 +// +// return null; +// } + +} diff --git a/order/order-rest/src/main/java/cn/iocoder/mall/order/rest/convert/CartConvert.java b/order/order-rest/src/main/java/cn/iocoder/mall/order/rest/convert/CartConvert.java new file mode 100644 index 000000000..432f602c4 --- /dev/null +++ b/order/order-rest/src/main/java/cn/iocoder/mall/order/rest/convert/CartConvert.java @@ -0,0 +1,30 @@ +package cn.iocoder.mall.order.rest.convert; + +import org.mapstruct.Mapper; +import org.mapstruct.factory.Mappers; + +@Mapper +public interface CartConvert { + + CartConvert INSTANCE = Mappers.getMapper(CartConvert.class); + +// UsersOrderConfirmCreateVO convert(CalcOrderPriceBO calcOrderPriceBO); +// +// UsersCartDetailVO convert2(CalcOrderPriceBO calcOrderPriceBO); +// +// UsersCalcSkuPriceVO convert2(CalcSkuPriceBO calcSkuPriceBO); +// +// default List convertList(List itemGroups) { +// List items = new ArrayList<>(); +// itemGroups.forEach(itemGroup -> items.addAll(itemGroup.getItems().stream().map( +// item -> new CouponCardSpuDTO() +// .setSpuId(item.getSpu().getId()) +// .setSkuId(item.getId()) +// .setCategoryId(item.getSpu().getCid()) +// .setPrice(item.getBuyPrice()) +// .setQuantity(item.getBuyQuantity())) +// .collect(Collectors.toList()))); +// return items; +// } + +} diff --git a/order/order-rest/src/main/java/cn/iocoder/mall/order/rest/convert/OrderConvertAPP.java b/order/order-rest/src/main/java/cn/iocoder/mall/order/rest/convert/OrderConvertAPP.java new file mode 100644 index 000000000..67deea991 --- /dev/null +++ b/order/order-rest/src/main/java/cn/iocoder/mall/order/rest/convert/OrderConvertAPP.java @@ -0,0 +1,46 @@ +package cn.iocoder.mall.order.rest.convert; + +import org.mapstruct.Mapper; +import org.mapstruct.factory.Mappers; + +/** + * application 订单 convert + * + * TODO 这种方式 文件名不能一样哈! + * + * @author Sin + * @time 2019-03-24 10:45 + */ +@Mapper +public interface OrderConvertAPP { + + OrderConvertAPP INSTANCE = Mappers.getMapper(OrderConvertAPP.class); + +// @Mappings({}) +// OrderQueryDTO convert(OrderPageQueryPO orderPageQueryVO); +// +// @Mappings({}) +// OrderLogisticsUpdateDTO convert(OrderLogisticsPO orderLogisticsVO); +// +// @Mappings({}) +// OrderItemUpdateDTO convert(OrderItemUpdatePO orderItemUpdateVO); +// +// @Mappings({}) +// OrderCreateDTO convert(OrderCreatePO orderCreatePO); +// +// @Mappings({}) +// List convert(List cartItems); +// +// default OrderCreateDTO createOrderCreateDTO(Integer userId, Integer userAddressId, +// String remark, String ip, +// List cartItems, Integer couponCardId) { +// return new OrderCreateDTO() +// .setUserId(userId) +// .setUserAddressId(userAddressId) +// .setRemark(remark) +// .setIp(ip) +// .setOrderItems(this.convert(cartItems)) +// .setCouponCardId(couponCardId); +// } + +} diff --git a/order/order-rest/src/main/java/cn/iocoder/mall/order/rest/convert/OrderDeliveryConvert.java b/order/order-rest/src/main/java/cn/iocoder/mall/order/rest/convert/OrderDeliveryConvert.java new file mode 100644 index 000000000..d6c8d6ec5 --- /dev/null +++ b/order/order-rest/src/main/java/cn/iocoder/mall/order/rest/convert/OrderDeliveryConvert.java @@ -0,0 +1,17 @@ +package cn.iocoder.mall.order.rest.convert; + +import org.mapstruct.Mapper; +import org.mapstruct.factory.Mappers; + +/** + * @author Sin + * @time 2019-04-05 17:00 + */ +@Mapper +public interface OrderDeliveryConvert { + + OrderDeliveryConvert INSTANCE = Mappers.getMapper(OrderDeliveryConvert.class); + +// @Mappings({}) +// OrderDeliveryDTO convert(OrderDeliverPO orderDeliverPO); +} diff --git a/order/order-rest/src/main/java/cn/iocoder/mall/order/rest/convert/OrderReturnConvert.java b/order/order-rest/src/main/java/cn/iocoder/mall/order/rest/convert/OrderReturnConvert.java new file mode 100644 index 000000000..90997321d --- /dev/null +++ b/order/order-rest/src/main/java/cn/iocoder/mall/order/rest/convert/OrderReturnConvert.java @@ -0,0 +1,22 @@ +package cn.iocoder.mall.order.rest.convert; + +import org.mapstruct.Mapper; +import org.mapstruct.factory.Mappers; + +/** + * 订单退货 + * + * @author Sin + * @time 2019-04-25 21:54 + */ +@Mapper +public interface OrderReturnConvert { + + OrderReturnConvert INSTANCE = Mappers.getMapper(OrderReturnConvert.class); + +// @Mappings({}) +// OrderReturnApplyDTO convert(OrderReturnApplyPO orderReturnApplyPO); +// +// @Mappings({}) +// OrderReturnQueryDTO convert(OrderReturnQueryPO orderReturnQueryPO); +} diff --git a/order/order-application/src/main/java/cn/iocoder/mall/order/application/po/admin/OrderDeliverPO.java b/order/order-rest/src/main/java/cn/iocoder/mall/order/rest/request/admin/OrderDeliverRequest.java similarity index 90% rename from order/order-application/src/main/java/cn/iocoder/mall/order/application/po/admin/OrderDeliverPO.java rename to order/order-rest/src/main/java/cn/iocoder/mall/order/rest/request/admin/OrderDeliverRequest.java index f91264987..2a7326da8 100644 --- a/order/order-application/src/main/java/cn/iocoder/mall/order/application/po/admin/OrderDeliverPO.java +++ b/order/order-rest/src/main/java/cn/iocoder/mall/order/rest/request/admin/OrderDeliverRequest.java @@ -1,13 +1,12 @@ -package cn.iocoder.mall.order.application.po.admin; +package cn.iocoder.mall.order.rest.request.admin; import io.swagger.annotations.ApiModel; import io.swagger.annotations.ApiModelProperty; -import lombok.Data; -import lombok.experimental.Accessors; - -import javax.validation.constraints.NotNull; import java.io.Serializable; import java.util.List; +import javax.validation.constraints.NotNull; +import lombok.Data; +import lombok.experimental.Accessors; /** * 订单发货 @@ -18,7 +17,7 @@ import java.util.List; @Data @Accessors(chain = true) @ApiModel(description = "订单发货PO") -public class OrderDeliverPO implements Serializable { +public class OrderDeliverRequest implements Serializable { /** * 订单编号 diff --git a/order/order-application/src/main/java/cn/iocoder/mall/order/application/po/admin/OrderItemUpdatePO.java b/order/order-rest/src/main/java/cn/iocoder/mall/order/rest/request/admin/OrderItemUpdateRequest.java similarity index 90% rename from order/order-application/src/main/java/cn/iocoder/mall/order/application/po/admin/OrderItemUpdatePO.java rename to order/order-rest/src/main/java/cn/iocoder/mall/order/rest/request/admin/OrderItemUpdateRequest.java index dac2b7e15..263bc3bec 100644 --- a/order/order-application/src/main/java/cn/iocoder/mall/order/application/po/admin/OrderItemUpdatePO.java +++ b/order/order-rest/src/main/java/cn/iocoder/mall/order/rest/request/admin/OrderItemUpdateRequest.java @@ -1,13 +1,12 @@ -package cn.iocoder.mall.order.application.po.admin; +package cn.iocoder.mall.order.rest.request.admin; import io.swagger.annotations.ApiModel; import io.swagger.annotations.ApiModelProperty; -import lombok.Data; -import lombok.experimental.Accessors; - +import java.io.Serializable; import javax.validation.constraints.NotNull; import javax.validation.constraints.Size; -import java.io.Serializable; +import lombok.Data; +import lombok.experimental.Accessors; /** * 订单 item 更新 @@ -18,7 +17,7 @@ import java.io.Serializable; @Data @Accessors(chain = true) @ApiModel("订单item更新") -public class OrderItemUpdatePO implements Serializable { +public class OrderItemUpdateRequest implements Serializable { /** * 编号 diff --git a/order/order-application/src/main/java/cn/iocoder/mall/order/application/po/admin/OrderLogisticsPO.java b/order/order-rest/src/main/java/cn/iocoder/mall/order/rest/request/admin/OrderLogisticsRequest.java similarity index 92% rename from order/order-application/src/main/java/cn/iocoder/mall/order/application/po/admin/OrderLogisticsPO.java rename to order/order-rest/src/main/java/cn/iocoder/mall/order/rest/request/admin/OrderLogisticsRequest.java index 1661562f4..80df6f660 100644 --- a/order/order-application/src/main/java/cn/iocoder/mall/order/application/po/admin/OrderLogisticsPO.java +++ b/order/order-rest/src/main/java/cn/iocoder/mall/order/rest/request/admin/OrderLogisticsRequest.java @@ -1,13 +1,12 @@ -package cn.iocoder.mall.order.application.po.admin; +package cn.iocoder.mall.order.rest.request.admin; import io.swagger.annotations.ApiModel; import io.swagger.annotations.ApiModelProperty; -import lombok.Data; -import lombok.experimental.Accessors; - +import java.io.Serializable; import javax.validation.constraints.NotNull; import javax.validation.constraints.Size; -import java.io.Serializable; +import lombok.Data; +import lombok.experimental.Accessors; /** * 订单物流 @@ -18,7 +17,7 @@ import java.io.Serializable; @Data @Accessors(chain = true) @ApiModel("订单物流信息") -public class OrderLogisticsPO implements Serializable { +public class OrderLogisticsRequest implements Serializable { /** * 订单 id diff --git a/order/order-application/src/main/java/cn/iocoder/mall/order/application/po/admin/OrderPageQueryPO.java b/order/order-rest/src/main/java/cn/iocoder/mall/order/rest/request/admin/OrderPageQueryRequest.java similarity index 94% rename from order/order-application/src/main/java/cn/iocoder/mall/order/application/po/admin/OrderPageQueryPO.java rename to order/order-rest/src/main/java/cn/iocoder/mall/order/rest/request/admin/OrderPageQueryRequest.java index 70ea5a0ee..d56338c4e 100644 --- a/order/order-application/src/main/java/cn/iocoder/mall/order/application/po/admin/OrderPageQueryPO.java +++ b/order/order-rest/src/main/java/cn/iocoder/mall/order/rest/request/admin/OrderPageQueryRequest.java @@ -1,14 +1,13 @@ -package cn.iocoder.mall.order.application.po.admin; +package cn.iocoder.mall.order.rest.request.admin; import io.swagger.annotations.ApiModel; import io.swagger.annotations.ApiModelProperty; +import java.io.Serializable; +import java.util.Date; import lombok.Data; import lombok.experimental.Accessors; import org.springframework.format.annotation.DateTimeFormat; -import java.io.Serializable; -import java.util.Date; - /** * 订单 page 查询 vo * @@ -18,7 +17,7 @@ import java.util.Date; @Data @Accessors(chain = true) @ApiModel("订单查询") -public class OrderPageQueryPO implements Serializable { +public class OrderPageQueryRequest implements Serializable { /** * id diff --git a/order/order-application/src/main/java/cn/iocoder/mall/order/application/po/admin/OrderPagePO.java b/order/order-rest/src/main/java/cn/iocoder/mall/order/rest/request/admin/OrderPageRequest.java similarity index 86% rename from order/order-application/src/main/java/cn/iocoder/mall/order/application/po/admin/OrderPagePO.java rename to order/order-rest/src/main/java/cn/iocoder/mall/order/rest/request/admin/OrderPageRequest.java index 8a8a4a068..8200e491d 100644 --- a/order/order-application/src/main/java/cn/iocoder/mall/order/application/po/admin/OrderPagePO.java +++ b/order/order-rest/src/main/java/cn/iocoder/mall/order/rest/request/admin/OrderPageRequest.java @@ -1,13 +1,12 @@ -package cn.iocoder.mall.order.application.po.admin; +package cn.iocoder.mall.order.rest.request.admin; import cn.iocoder.mall.order.api.bo.OrderBO; import io.swagger.annotations.ApiModel; import io.swagger.annotations.ApiModelProperty; -import lombok.Data; -import lombok.experimental.Accessors; - import java.io.Serializable; import java.util.List; +import lombok.Data; +import lombok.experimental.Accessors; /** * 订单分页 vo @@ -18,7 +17,7 @@ import java.util.List; @Data @Accessors(chain = true) @ApiModel("订单VO") -public class OrderPagePO implements Serializable { +public class OrderPageRequest implements Serializable { /** * 分页 diff --git a/order/order-application/src/main/java/cn/iocoder/mall/order/application/po/admin/OrderReturnQueryPO.java b/order/order-rest/src/main/java/cn/iocoder/mall/order/rest/request/admin/OrderReturnQueryRequest.java similarity index 90% rename from order/order-application/src/main/java/cn/iocoder/mall/order/application/po/admin/OrderReturnQueryPO.java rename to order/order-rest/src/main/java/cn/iocoder/mall/order/rest/request/admin/OrderReturnQueryRequest.java index b1b496b32..d4c89d137 100644 --- a/order/order-application/src/main/java/cn/iocoder/mall/order/application/po/admin/OrderReturnQueryPO.java +++ b/order/order-rest/src/main/java/cn/iocoder/mall/order/rest/request/admin/OrderReturnQueryRequest.java @@ -1,13 +1,12 @@ -package cn.iocoder.mall.order.application.po.admin; +package cn.iocoder.mall.order.rest.request.admin; +import java.io.Serializable; +import java.util.Date; +import javax.validation.constraints.NotNull; import lombok.Data; import lombok.experimental.Accessors; import org.springframework.format.annotation.DateTimeFormat; -import javax.validation.constraints.NotNull; -import java.io.Serializable; -import java.util.Date; - /** * 订单退货 查询 po * @@ -16,7 +15,7 @@ import java.util.Date; */ @Data @Accessors(chain = true) -public class OrderReturnQueryPO implements Serializable { +public class OrderReturnQueryRequest implements Serializable { /** * diff --git a/order/order-application/src/main/java/cn/iocoder/mall/order/application/po/user/OrderCreatePO.java b/order/order-rest/src/main/java/cn/iocoder/mall/order/rest/request/users/OrderCreateRequest.java similarity index 90% rename from order/order-application/src/main/java/cn/iocoder/mall/order/application/po/user/OrderCreatePO.java rename to order/order-rest/src/main/java/cn/iocoder/mall/order/rest/request/users/OrderCreateRequest.java index 4c193fbc3..678918fd6 100644 --- a/order/order-application/src/main/java/cn/iocoder/mall/order/application/po/user/OrderCreatePO.java +++ b/order/order-rest/src/main/java/cn/iocoder/mall/order/rest/request/users/OrderCreateRequest.java @@ -1,13 +1,12 @@ -package cn.iocoder.mall.order.application.po.user; - -import lombok.Data; -import lombok.experimental.Accessors; +package cn.iocoder.mall.order.rest.request.users; +import java.io.Serializable; +import java.util.List; import javax.validation.constraints.Max; import javax.validation.constraints.NotNull; import javax.validation.constraints.Size; -import java.io.Serializable; -import java.util.List; +import lombok.Data; +import lombok.experimental.Accessors; /** * 订单创建 @@ -17,7 +16,7 @@ import java.util.List; */ @Data @Accessors(chain = true) -public class OrderCreatePO implements Serializable { +public class OrderCreateRequest implements Serializable { /** * 收件手机号 diff --git a/order/order-application/src/main/java/cn/iocoder/mall/order/application/po/user/OrderReturnApplyPO.java b/order/order-rest/src/main/java/cn/iocoder/mall/order/rest/request/users/OrderReturnApplyRequest.java similarity index 89% rename from order/order-application/src/main/java/cn/iocoder/mall/order/application/po/user/OrderReturnApplyPO.java rename to order/order-rest/src/main/java/cn/iocoder/mall/order/rest/request/users/OrderReturnApplyRequest.java index 64cad4de9..a34c2455c 100644 --- a/order/order-application/src/main/java/cn/iocoder/mall/order/application/po/user/OrderReturnApplyPO.java +++ b/order/order-rest/src/main/java/cn/iocoder/mall/order/rest/request/users/OrderReturnApplyRequest.java @@ -1,11 +1,10 @@ -package cn.iocoder.mall.order.application.po.user; - -import lombok.Data; -import lombok.experimental.Accessors; +package cn.iocoder.mall.order.rest.request.users; +import java.io.Serializable; import javax.validation.constraints.NotNull; import javax.validation.constraints.Size; -import java.io.Serializable; +import lombok.Data; +import lombok.experimental.Accessors; /** * 订单售后 @@ -15,7 +14,7 @@ import java.io.Serializable; */ @Data @Accessors(chain = true) -public class OrderReturnApplyPO implements Serializable { +public class OrderReturnApplyRequest implements Serializable { /** * 订单编号 diff --git a/order/order-application/src/main/java/cn/iocoder/mall/order/application/vo/UsersCalcSkuPriceVO.java b/order/order-rest/src/main/java/cn/iocoder/mall/order/rest/response/UsersCalcSkuPriceResponse.java similarity index 68% rename from order/order-application/src/main/java/cn/iocoder/mall/order/application/vo/UsersCalcSkuPriceVO.java rename to order/order-rest/src/main/java/cn/iocoder/mall/order/rest/response/UsersCalcSkuPriceResponse.java index d8826ed7e..6cf7ed411 100644 --- a/order/order-application/src/main/java/cn/iocoder/mall/order/application/vo/UsersCalcSkuPriceVO.java +++ b/order/order-rest/src/main/java/cn/iocoder/mall/order/rest/response/UsersCalcSkuPriceResponse.java @@ -1,6 +1,5 @@ -package cn.iocoder.mall.order.application.vo; +package cn.iocoder.mall.order.rest.response; -import cn.iocoder.mall.promotion.api.bo.PromotionActivityBO; import io.swagger.annotations.ApiModel; import lombok.Data; import lombok.experimental.Accessors; @@ -8,20 +7,20 @@ import lombok.experimental.Accessors; @ApiModel("计算商品 SKU 价格结果 VO") @Data @Accessors(chain = true) -public class UsersCalcSkuPriceVO { +public class UsersCalcSkuPriceResponse { /** * 满减送促销活动 * * TODO 芋艿,后续改成 VO */ - private PromotionActivityBO fullPrivilege; +// private PromotionActivityBO fullPrivilege; /** * 电视和折扣促销活动 * * TODO 芋艿,后续改成 VO */ - private PromotionActivityBO timeLimitedDiscount; +// private PromotionActivityBO timeLimitedDiscount; /** * 原价格,单位:分。 */ diff --git a/order/order-application/src/main/java/cn/iocoder/mall/order/application/vo/UsersCartDetailVO.java b/order/order-rest/src/main/java/cn/iocoder/mall/order/rest/response/UsersCartDetailResponse.java similarity index 91% rename from order/order-application/src/main/java/cn/iocoder/mall/order/application/vo/UsersCartDetailVO.java rename to order/order-rest/src/main/java/cn/iocoder/mall/order/rest/response/UsersCartDetailResponse.java index c34696f1a..68e30c5c0 100644 --- a/order/order-application/src/main/java/cn/iocoder/mall/order/application/vo/UsersCartDetailVO.java +++ b/order/order-rest/src/main/java/cn/iocoder/mall/order/rest/response/UsersCartDetailResponse.java @@ -1,17 +1,14 @@ -package cn.iocoder.mall.order.application.vo; +package cn.iocoder.mall.order.rest.response; -import cn.iocoder.mall.product.api.bo.ProductAttrAndValuePairBO; -import cn.iocoder.mall.promotion.api.bo.PromotionActivityBO; import io.swagger.annotations.ApiModel; +import java.util.List; import lombok.Data; import lombok.experimental.Accessors; -import java.util.List; - @ApiModel(value = "购物车明细 VO") @Data @Accessors(chain = true) -public class UsersCartDetailVO { +public class UsersCartDetailResponse { /** * 商品分组数组 @@ -34,7 +31,7 @@ public class UsersCartDetailVO { /** * 优惠活动 */ - private PromotionActivityBO activity; // TODO 芋艿,偷懒 +// private PromotionActivityBO activity; // TODO 芋艿,偷懒 /** * 促销减少的金额 * @@ -69,7 +66,7 @@ public class UsersCartDetailVO { /** * 规格值数组 */ - private List attrs; // TODO 后面改下 +// private List attrs; // TODO 后面改下 /** * 价格,单位:分 */ @@ -92,7 +89,7 @@ public class UsersCartDetailVO { /** * 优惠活动 */ - private PromotionActivityBO activity; +// private PromotionActivityBO activity; /** * 原始单价,单位:分。 */ diff --git a/order/order-application/src/main/java/cn/iocoder/mall/order/application/vo/UsersOrderConfirmCreateVO.java b/order/order-rest/src/main/java/cn/iocoder/mall/order/rest/response/UsersOrderConfirmCreateResponse.java similarity index 90% rename from order/order-application/src/main/java/cn/iocoder/mall/order/application/vo/UsersOrderConfirmCreateVO.java rename to order/order-rest/src/main/java/cn/iocoder/mall/order/rest/response/UsersOrderConfirmCreateResponse.java index 21c0379c7..d16970dd0 100644 --- a/order/order-application/src/main/java/cn/iocoder/mall/order/application/vo/UsersOrderConfirmCreateVO.java +++ b/order/order-rest/src/main/java/cn/iocoder/mall/order/rest/response/UsersOrderConfirmCreateResponse.java @@ -1,16 +1,12 @@ -package cn.iocoder.mall.order.application.vo; +package cn.iocoder.mall.order.rest.response; -import cn.iocoder.mall.product.api.bo.ProductAttrAndValuePairBO; -import cn.iocoder.mall.promotion.api.bo.CouponCardAvailableBO; -import cn.iocoder.mall.promotion.api.bo.PromotionActivityBO; +import java.util.List; import lombok.Data; import lombok.experimental.Accessors; -import java.util.List; - @Data @Accessors(chain = true) -public class UsersOrderConfirmCreateVO { +public class UsersOrderConfirmCreateResponse { /** * 商品分组数组 @@ -23,7 +19,7 @@ public class UsersOrderConfirmCreateVO { /** * 优惠劵列表 TODO 芋艿,后续改改 */ - private List couponCards; +// private List couponCards; /** * 优惠劵优惠金额 */ @@ -42,7 +38,7 @@ public class UsersOrderConfirmCreateVO { */ // TODO 芋艿,目前只会有【满减送】的情况,未来有新的促销方式,可能需要改成数组 // TODO 芋艿,后面改成 VO - private PromotionActivityBO activity; +// private PromotionActivityBO activity; /** * 商品数组 */ @@ -70,7 +66,7 @@ public class UsersOrderConfirmCreateVO { /** * 规格值数组 */ - private List attrs; // TODO 后面改下 +// private List attrs; // TODO 后面改下 /** * 价格,单位:分 */ diff --git a/order/order-rest/src/main/resources/rest.yaml b/order/order-rest/src/main/resources/rest.yaml new file mode 100644 index 000000000..460ca2af0 --- /dev/null +++ b/order/order-rest/src/main/resources/rest.yaml @@ -0,0 +1,12 @@ +# 服务器的配置项 +server: + port: 18088 + servlet: + context-path: /order-api/ + +# Swagger 配置项 +swagger: + title: 订单子系统 + description: 订单子系统 + version: 1.0.0 + base-package: cn.iocoder.mall.order.rest.controller diff --git a/order/order-rpc-api/pom.xml b/order/order-rpc-api/pom.xml new file mode 100644 index 000000000..d8c4aa5f7 --- /dev/null +++ b/order/order-rpc-api/pom.xml @@ -0,0 +1,36 @@ + + + + order + cn.iocoder.mall + 1.0-SNAPSHOT + + 4.0.0 + + order-rpc-api + + + + + cn.iocoder.mall + order-biz-api + 1.0-SNAPSHOT + + + + + javax.validation + validation-api + + + org.projectlombok + lombok + + + + + + + diff --git a/order/order-rpc-api/src/main/java/cn/iocoder/mall/order/rpc/package-info.java b/order/order-rpc-api/src/main/java/cn/iocoder/mall/order/rpc/package-info.java new file mode 100644 index 000000000..5f974723b --- /dev/null +++ b/order/order-rpc-api/src/main/java/cn/iocoder/mall/order/rpc/package-info.java @@ -0,0 +1,4 @@ +/** + * 提供 order 服务的 RPC 接口的定义,提供内部调用 + */ +package cn.iocoder.mall.order.rpc; diff --git a/order/order-rpc/pom.xml b/order/order-rpc/pom.xml new file mode 100644 index 000000000..bc7aac411 --- /dev/null +++ b/order/order-rpc/pom.xml @@ -0,0 +1,42 @@ + + + + order + cn.iocoder.mall + 1.0-SNAPSHOT + + 4.0.0 + + order-rpc + + + + + cn.iocoder.mall + order-rpc-api + 1.0-SNAPSHOT + + + cn.iocoder.mall + order-biz + 1.0-SNAPSHOT + + + + + com.alibaba.cloud + spring-cloud-starter-dubbo + + + + + com.alibaba.cloud + spring-cloud-starter-alibaba-nacos-discovery + + + + + + diff --git a/order/order-rpc/src/main/java/cn/iocoder/mall/order/rpc/package-info.java b/order/order-rpc/src/main/java/cn/iocoder/mall/order/rpc/package-info.java new file mode 100644 index 000000000..ac5570aeb --- /dev/null +++ b/order/order-rpc/src/main/java/cn/iocoder/mall/order/rpc/package-info.java @@ -0,0 +1,4 @@ +/** + * 提供 order 服务的 RPC 接口的实现,提供内部调用 + */ +package cn.iocoder.mall.order.rpc; diff --git a/order/order-rpc/src/main/resources/rpc-local.yaml b/order/order-rpc/src/main/resources/rpc-local.yaml new file mode 100644 index 000000000..e056170af --- /dev/null +++ b/order/order-rpc/src/main/resources/rpc-local.yaml @@ -0,0 +1,14 @@ +spring: + # Spring Cloud 配置项 + cloud: + nacos: + # Spring Cloud Nacos Discovery 配置项 + discovery: + server-addr: s1.iocoder.cn:8848 # Nacos 服务器地址 + namespace: local # Nacos 命名空间 + +# Dubbo 配置项 +dubbo: + # Dubbo 注册中心 + registry: + address: spring-cloud://s1.iocoder.cn:8848 # 指定 Dubbo 服务注册中心的地址 diff --git a/order/order-rpc/src/main/resources/rpc-test.yaml b/order/order-rpc/src/main/resources/rpc-test.yaml new file mode 100644 index 000000000..d3d0e9e69 --- /dev/null +++ b/order/order-rpc/src/main/resources/rpc-test.yaml @@ -0,0 +1,14 @@ +spring: + # Spring Cloud 配置项 + cloud: + nacos: + # Spring Cloud Nacos Discovery 配置项 + discovery: + server-addr: s1.iocoder.cn:8848 # Nacos 服务器地址 + namespace: test # Nacos 命名空间 + +# Dubbo 配置项 +dubbo: + # Dubbo 注册中心 + registry: + address: spring-cloud://s1.iocoder.cn:8848 # 指定 Dubbo 服务注册中心的地址 diff --git a/order/order-rpc/src/main/resources/rpc.yaml b/order/order-rpc/src/main/resources/rpc.yaml new file mode 100644 index 000000000..8c8b6b591 --- /dev/null +++ b/order/order-rpc/src/main/resources/rpc.yaml @@ -0,0 +1,40 @@ +# Dubbo 配置项 +dubbo: + # Spring Cloud Alibaba Dubbo 专属配置 + cloud: + subscribed-services: '' # 设置订阅的应用列表,默认为 * 订阅所有应用 + # Dubbo 提供者的协议 + protocol: + name: dubbo + port: -1 + # Dubbo 提供服务的扫描基础包 + scan: + base-packages: cn.iocoder.mall.order.rpc.rpc + # Dubbo 服务提供者的配置 + provider: + filter: -exception + SystemLogRPC: + version: 1.0.0 + OAuth2RPC: + version: 1.0.0 + AuthorizationRPC: + version: 1.0.0 + AdminRPC: + version: 1.0.0 + UserRPC: + version: 1.0.0 + UserAddressRPC: + version: 1.0.0 + + # Dubbo 服务消费者的配置 + consumer: + SystemLogRPC: # 用于 AccessLogInterceptor 等拦截器,记录 HTTP API 请求的访问日志 + version: 1.0.0 + OAuth2RPC: # 用于 AccountAuthInterceptor 拦截器,执行认证 + version: 1.0.0 + AuthorizationRPC: # 用于 AccountAuthInterceptor 拦截器,执行鉴权(权限验证) + version: 1.0.0 + AdminRPC: + version: 1.0.0 + UserRPC: + version: 1.0.0 diff --git a/order/pom.xml b/order/pom.xml index 3fe0dbfaf..26cf50f5d 100644 --- a/order/pom.xml +++ b/order/pom.xml @@ -13,8 +13,12 @@ pom order-application - order-service-api - order-service-impl + order-biz + order-biz-api + order-rest + order-rpc + order-rpc-api + diff --git a/pom.xml b/pom.xml index c95dbbe22..95aded6bf 100644 --- a/pom.xml +++ b/pom.xml @@ -15,16 +15,22 @@ 1.0-SNAPSHOT product - - + order + user common system - + promotion mall-dependencies + order-biz + order/order-biz + order/order-biz-api + order/order-rpc + order/order-rpc-api + order-rest pom diff --git a/product/product-biz-api/src/main/java/cn/iocoder/mall/product/biz/enums/ProductErrorCodeEnum.java b/product/product-biz-api/src/main/java/cn/iocoder/mall/product/biz/enums/ProductErrorCodeEnum.java index e5ad307c8..f2e7c10ae 100644 --- a/product/product-biz-api/src/main/java/cn/iocoder/mall/product/biz/enums/ProductErrorCodeEnum.java +++ b/product/product-biz-api/src/main/java/cn/iocoder/mall/product/biz/enums/ProductErrorCodeEnum.java @@ -1,11 +1,13 @@ package cn.iocoder.mall.product.biz.enums; +import cn.iocoder.common.framework.util.ServiceExceptionUtil; + /** * 错误码枚举类 * * 商品系统,使用 1-003-000-000 段 */ -public enum ProductErrorCodeEnum { +public enum ProductErrorCodeEnum implements ServiceExceptionUtil.Enumerable { // ========== PRODUCT CATEGORY 模块 ========== PRODUCT_CATEGORY_PARENT_NOT_EXISTS(1003001000, "父分类不存在"), @@ -45,12 +47,12 @@ public enum ProductErrorCodeEnum { this.message = message; } - public int getCode() { - return code; - } - public String getMessage() { return message; } + @Override + public int getCode() { + return code; + } } diff --git a/product/product-biz/src/main/java/cn/iocoder/mall/product/biz/bo/category/ProductCategoryAllListBO.java b/product/product-biz/src/main/java/cn/iocoder/mall/product/biz/bo/category/ProductCategoryAllListBO.java deleted file mode 100644 index 8b568fb51..000000000 --- a/product/product-biz/src/main/java/cn/iocoder/mall/product/biz/bo/category/ProductCategoryAllListBO.java +++ /dev/null @@ -1,55 +0,0 @@ -package cn.iocoder.mall.product.biz.bo.category; - -import lombok.Data; -import lombok.experimental.Accessors; -import java.io.Serializable; -import java.util.Date; - -/** - * @Author: jiangweifan - * @Date: 2020/5/6 - * @Description: 商品分类 - 商品分类列表BO - */ -@Data -@Accessors(chain = true) -public class ProductCategoryAllListBO implements Serializable { - - /** - * 分类编号 - */ - private Integer id; - /** - * 父分类编号 - * - * 如果不存在父级,则 pid = 0 。 - */ - private Integer pid; - /** - * 名称 - */ - private String name; - /** - * 描述 - */ - private String description; - /** - * 分类图片 - */ - private String picUrl; - /** - * 排序值 - */ - private Integer sort; - /** - * 状态 - * - * 1-开启 - * 2-关闭 - */ - private Integer status; - /** - * 创建时间 - */ - private Date createTime; - -} diff --git a/product/product-biz/src/main/java/cn/iocoder/mall/product/biz/bo/category/ProductCategoryAddBO.java b/product/product-biz/src/main/java/cn/iocoder/mall/product/biz/bo/category/ProductCategoryBO.java similarity index 73% rename from product/product-biz/src/main/java/cn/iocoder/mall/product/biz/bo/category/ProductCategoryAddBO.java rename to product/product-biz/src/main/java/cn/iocoder/mall/product/biz/bo/category/ProductCategoryBO.java index 5aa2cf611..1b918d4ab 100644 --- a/product/product-biz/src/main/java/cn/iocoder/mall/product/biz/bo/category/ProductCategoryAddBO.java +++ b/product/product-biz/src/main/java/cn/iocoder/mall/product/biz/bo/category/ProductCategoryBO.java @@ -8,11 +8,12 @@ import java.util.Date; /** * @Author: jiangweifan * @Date: 2020/5/6 - * @Description: 商品分类 - 创建商品分类BO + * @Description: 商品分类 - 商品分类统一BO */ @Data @Accessors(chain = true) -public class ProductCategoryAddBO implements Serializable { +// TODO FROM 芋艿 to 伟帆,BO 可以不加 Serializable 接口,因为没序列化的诉求哈。一般 BO 可以创建一个统一的 ProductCategory,可以把 ProductCategoryAllListBO 合并过来 [DONE] +public class ProductCategoryBO { /** * 分类编号 diff --git a/product/product-biz/src/main/java/cn/iocoder/mall/product/biz/convert/category/ProductCategoryConvert.java b/product/product-biz/src/main/java/cn/iocoder/mall/product/biz/convert/category/ProductCategoryConvert.java index e19de6c07..8bcdba78d 100644 --- a/product/product-biz/src/main/java/cn/iocoder/mall/product/biz/convert/category/ProductCategoryConvert.java +++ b/product/product-biz/src/main/java/cn/iocoder/mall/product/biz/convert/category/ProductCategoryConvert.java @@ -1,12 +1,10 @@ package cn.iocoder.mall.product.biz.convert.category; -import cn.iocoder.mall.product.biz.bo.category.ProductCategoryAddBO; -import cn.iocoder.mall.product.biz.bo.category.ProductCategoryAllListBO; +import cn.iocoder.mall.product.biz.bo.category.ProductCategoryBO; import cn.iocoder.mall.product.biz.dataobject.product.ProductCategoryDO; import cn.iocoder.mall.product.biz.dto.category.ProductCategoryAddDTO; import cn.iocoder.mall.product.biz.dto.category.ProductCategoryUpdateDTO; import org.mapstruct.Mapper; -import org.mapstruct.Mappings; import org.mapstruct.factory.Mappers; import java.util.List; @@ -21,19 +19,19 @@ public interface ProductCategoryConvert { ProductCategoryConvert INSTANCE = Mappers.getMapper(ProductCategoryConvert.class); /** - * 商品分类列表 - DO转换BO 单实体 + * 商品分类统一DO转BO * @param category * @return */ - ProductCategoryAllListBO convertToAllListBO(ProductCategoryDO category); + ProductCategoryBO convertToBO(ProductCategoryDO category); /** - * 商品分类列表 - DO转换BO {@link #convertToAllListBO(ProductCategoryDO)} + * 商品分类列表 - DO转换BO {@link #convertToBO(ProductCategoryDO)} * @param category * @return */ - List convertToAllListBO(List category); + List convertToAllListBO(List category); /** * 新增商品分类 - DTO转换DO @@ -42,13 +40,6 @@ public interface ProductCategoryConvert { */ ProductCategoryDO convertToDO(ProductCategoryAddDTO productCategoryAddDTO); - /** - * 新增商品分类 - DO转换BO - * @param category - * @return - */ - ProductCategoryAddBO convertToAddBO(ProductCategoryDO category); - /** * 更新商品分类 - DTO转换DO * @param productCategoryUpdateDTO diff --git a/product/product-biz/src/main/java/cn/iocoder/mall/product/biz/dto/category/ProductCategoryAddDTO.java b/product/product-biz/src/main/java/cn/iocoder/mall/product/biz/dto/category/ProductCategoryAddDTO.java index 237aab09d..8d0a8f389 100644 --- a/product/product-biz/src/main/java/cn/iocoder/mall/product/biz/dto/category/ProductCategoryAddDTO.java +++ b/product/product-biz/src/main/java/cn/iocoder/mall/product/biz/dto/category/ProductCategoryAddDTO.java @@ -3,6 +3,8 @@ package cn.iocoder.mall.product.biz.dto.category; import lombok.Data; import lombok.experimental.Accessors; +import javax.validation.constraints.NotNull; + /** * @Author: jiangweifan * @Date: 2020/5/6 @@ -15,19 +17,24 @@ public class ProductCategoryAddDTO { /** * 管理员id */ + // TODO FROM 芋艿 to 伟帆:传入 Service 的,要加下 Validation 的注解,虽然 Controller 那也添加了 Validation,但是相比来说,Service 更应该被保护,嘿嘿。因为一些时候,Service 也会被别人所调用,所以要保护好自己。[DONE] + @NotNull(message = "管理员id不能为空") private Integer adminId; /** * 父分类编号 */ + @NotNull(message = "父分类编号不能为空") private Integer pid; /** * 名称 */ + @NotNull(message = "名称不能为空") private String name; /** * 描述 */ + @NotNull(message = "描述不能为空") private String description; /** * 分类图片 @@ -36,6 +43,7 @@ public class ProductCategoryAddDTO { /** * 排序值 */ + @NotNull(message = "排序值不能为空") private Integer sort; } diff --git a/product/product-biz/src/main/java/cn/iocoder/mall/product/biz/dto/category/ProductCategoryDeleteDTO.java b/product/product-biz/src/main/java/cn/iocoder/mall/product/biz/dto/category/ProductCategoryDeleteDTO.java index d594f0afc..0f48ee4ca 100644 --- a/product/product-biz/src/main/java/cn/iocoder/mall/product/biz/dto/category/ProductCategoryDeleteDTO.java +++ b/product/product-biz/src/main/java/cn/iocoder/mall/product/biz/dto/category/ProductCategoryDeleteDTO.java @@ -3,6 +3,8 @@ package cn.iocoder.mall.product.biz.dto.category; import lombok.Data; import lombok.experimental.Accessors; +import javax.validation.constraints.NotNull; + /** * @Author: jiangweifan * @Date: 2020/5/6 @@ -15,10 +17,12 @@ public class ProductCategoryDeleteDTO { /** * 管理员id */ + @NotNull(message = "管理员id不能为空") private Integer adminId; /** * 商品分类编号 */ + @NotNull(message = "编号不能为空") private Integer id; } diff --git a/product/product-biz/src/main/java/cn/iocoder/mall/product/biz/dto/category/ProductCategoryUpdateDTO.java b/product/product-biz/src/main/java/cn/iocoder/mall/product/biz/dto/category/ProductCategoryUpdateDTO.java index 66310170d..e007878b0 100644 --- a/product/product-biz/src/main/java/cn/iocoder/mall/product/biz/dto/category/ProductCategoryUpdateDTO.java +++ b/product/product-biz/src/main/java/cn/iocoder/mall/product/biz/dto/category/ProductCategoryUpdateDTO.java @@ -3,6 +3,8 @@ package cn.iocoder.mall.product.biz.dto.category; import lombok.Data; import lombok.experimental.Accessors; +import javax.validation.constraints.NotNull; + /** * @Author: jiangweifan * @Date: 2020/5/6 @@ -15,22 +17,27 @@ public class ProductCategoryUpdateDTO { /** * 管理员id */ + @NotNull(message = "管理员id不能为空") private Integer adminId; /** * 编号 */ + @NotNull(message = "编号不能为空") private Integer id; /** * 父分类编号 */ + @NotNull(message = "父分类编号不能为空") private Integer pid; /** * 名称 */ + @NotNull(message = "名称不能为空") private String name; /** * 描述 */ + @NotNull(message = "描述不能为空") private String description; /** * 分类图片 @@ -39,6 +46,7 @@ public class ProductCategoryUpdateDTO { /** * 排序值 */ + @NotNull(message = "描述不能为空") private Integer sort; } diff --git a/product/product-biz/src/main/java/cn/iocoder/mall/product/biz/dto/category/ProductCategoryUpdateStatusDTO.java b/product/product-biz/src/main/java/cn/iocoder/mall/product/biz/dto/category/ProductCategoryUpdateStatusDTO.java index 1f7a68bac..9bd7f57e7 100644 --- a/product/product-biz/src/main/java/cn/iocoder/mall/product/biz/dto/category/ProductCategoryUpdateStatusDTO.java +++ b/product/product-biz/src/main/java/cn/iocoder/mall/product/biz/dto/category/ProductCategoryUpdateStatusDTO.java @@ -3,6 +3,8 @@ package cn.iocoder.mall.product.biz.dto.category; import lombok.Data; import lombok.experimental.Accessors; +import javax.validation.constraints.NotNull; + /** * @Author: jiangweifan * @Date: 2020/5/6 @@ -15,14 +17,17 @@ public class ProductCategoryUpdateStatusDTO { /** * 管理员id */ + @NotNull(message = "管理员id不能为空") private Integer adminId; /** * 商品分类编号 */ + @NotNull(message = "编号不能为空") private Integer id; /** * 状态 */ + @NotNull(message = "状态不能为空") private Integer status; } diff --git a/product/product-biz/src/main/java/cn/iocoder/mall/product/biz/service/product/ProductCategoryService.java b/product/product-biz/src/main/java/cn/iocoder/mall/product/biz/service/product/ProductCategoryService.java index e08b680e5..624ae9689 100644 --- a/product/product-biz/src/main/java/cn/iocoder/mall/product/biz/service/product/ProductCategoryService.java +++ b/product/product-biz/src/main/java/cn/iocoder/mall/product/biz/service/product/ProductCategoryService.java @@ -1,12 +1,10 @@ package cn.iocoder.mall.product.biz.service.product; -import cn.iocoder.mall.product.biz.bo.category.ProductCategoryAddBO; -import cn.iocoder.mall.product.biz.bo.category.ProductCategoryAllListBO; +import cn.iocoder.mall.product.biz.bo.category.ProductCategoryBO; import cn.iocoder.mall.product.biz.dto.category.ProductCategoryAddDTO; import cn.iocoder.mall.product.biz.dto.category.ProductCategoryDeleteDTO; import cn.iocoder.mall.product.biz.dto.category.ProductCategoryUpdateDTO; import cn.iocoder.mall.product.biz.dto.category.ProductCategoryUpdateStatusDTO; - import java.util.List; @@ -21,14 +19,14 @@ public interface ProductCategoryService { * 获取所有商品分类 * @return */ - List getAllProductCategory(); + List getAllProductCategory(); /** * 新增商品分类 * @param productCategoryAddDTO * @return */ - ProductCategoryAddBO addProductCategory(ProductCategoryAddDTO productCategoryAddDTO); + ProductCategoryBO addProductCategory(ProductCategoryAddDTO productCategoryAddDTO); /** * 更新商品分类 diff --git a/product/product-biz/src/main/java/cn/iocoder/mall/product/biz/service/product/impl/ProductCategoryServiceImpl.java b/product/product-biz/src/main/java/cn/iocoder/mall/product/biz/service/product/impl/ProductCategoryServiceImpl.java index ca377b6cf..180bbbe82 100644 --- a/product/product-biz/src/main/java/cn/iocoder/mall/product/biz/service/product/impl/ProductCategoryServiceImpl.java +++ b/product/product-biz/src/main/java/cn/iocoder/mall/product/biz/service/product/impl/ProductCategoryServiceImpl.java @@ -2,8 +2,7 @@ package cn.iocoder.mall.product.biz.service.product.impl; import cn.iocoder.common.framework.util.ServiceExceptionUtil; import cn.iocoder.mall.mybatis.enums.DeletedStatusEnum; -import cn.iocoder.mall.product.biz.bo.category.ProductCategoryAddBO; -import cn.iocoder.mall.product.biz.bo.category.ProductCategoryAllListBO; +import cn.iocoder.mall.product.biz.bo.category.ProductCategoryBO; import cn.iocoder.mall.product.biz.convert.category.ProductCategoryConvert; import cn.iocoder.mall.product.biz.dao.product.ProductCategoryMapper; import cn.iocoder.mall.product.biz.dataobject.product.ProductCategoryDO; @@ -11,15 +10,16 @@ import cn.iocoder.mall.product.biz.dto.category.ProductCategoryAddDTO; import cn.iocoder.mall.product.biz.dto.category.ProductCategoryDeleteDTO; import cn.iocoder.mall.product.biz.dto.category.ProductCategoryUpdateDTO; import cn.iocoder.mall.product.biz.dto.category.ProductCategoryUpdateStatusDTO; -import cn.iocoder.mall.product.biz.enums.ProductErrorCodeEnum; import cn.iocoder.mall.product.biz.enums.product.ProductCategoryConstants; import cn.iocoder.mall.product.biz.service.product.ProductCategoryService; import com.baomidou.mybatisplus.core.toolkit.Wrappers; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Service; - -import java.sql.Wrapper; -import java.util.*; +import org.springframework.validation.annotation.Validated; +import static cn.iocoder.mall.product.biz.enums.ProductErrorCodeEnum.*; +import javax.validation.Valid; +import java.util.Date; +import java.util.List; /** * @Author: jiangweifan @@ -27,6 +27,7 @@ import java.util.*; * @Description: 商品分类 - 服务实现层 */ @Service +@Validated public class ProductCategoryServiceImpl implements ProductCategoryService { @Autowired @@ -37,7 +38,7 @@ public class ProductCategoryServiceImpl implements ProductCategoryService { * @return */ @Override - public List getAllProductCategory() { + public List getAllProductCategory() { List categoryList = productCategoryMapper.selectList(null); return ProductCategoryConvert.INSTANCE.convertToAllListBO(categoryList); } @@ -48,7 +49,7 @@ public class ProductCategoryServiceImpl implements ProductCategoryService { * @return */ @Override - public ProductCategoryAddBO addProductCategory(ProductCategoryAddDTO productCategoryAddDTO) { + public ProductCategoryBO addProductCategory(@Valid ProductCategoryAddDTO productCategoryAddDTO) { // 校验父分类 validParent(productCategoryAddDTO.getPid()); // 保存到数据库 @@ -57,9 +58,9 @@ public class ProductCategoryServiceImpl implements ProductCategoryService { productCategory.setCreateTime(new Date()); productCategory.setDeleted(DeletedStatusEnum.DELETED_NO.getValue()); productCategoryMapper.insert(productCategory); - // TODO jiangweifan 操作日志 + // TODO 伟帆 操作日志 // 返回成功 - return ProductCategoryConvert.INSTANCE.convertToAddBO(productCategory); + return ProductCategoryConvert.INSTANCE.convertToBO(productCategory); } /** @@ -68,26 +69,26 @@ public class ProductCategoryServiceImpl implements ProductCategoryService { * @return */ @Override - public Boolean updateProductCategory(ProductCategoryUpdateDTO productCategoryUpdateDTO) { + public Boolean updateProductCategory(@Valid ProductCategoryUpdateDTO productCategoryUpdateDTO) { // 校验当前分类是否存在 if (productCategoryMapper.selectById(productCategoryUpdateDTO.getId()) == null) { - throw ServiceExceptionUtil.exception(ProductErrorCodeEnum.PRODUCT_CATEGORY_NOT_EXISTS.getCode()); + throw ServiceExceptionUtil.exception(PRODUCT_CATEGORY_NOT_EXISTS); } // 校验父分类 validParent(productCategoryUpdateDTO.getPid()); // 校验不能设置自己为父分类 if (productCategoryUpdateDTO.getId().equals(productCategoryUpdateDTO.getPid())) { - throw ServiceExceptionUtil.exception(ProductErrorCodeEnum.PRODUCT_CATEGORY_PARENT_NOT_SELF.getCode()); + throw ServiceExceptionUtil.exception(PRODUCT_CATEGORY_PARENT_NOT_SELF); } // 校验父分类是否存在 if (!ProductCategoryConstants.PID_ROOT.equals(productCategoryUpdateDTO.getPid()) && productCategoryMapper.selectById(productCategoryUpdateDTO.getPid()) == null) { - throw ServiceExceptionUtil.exception(ProductErrorCodeEnum.PRODUCT_CATEGORY_PARENT_NOT_EXISTS.getCode()); + throw ServiceExceptionUtil.exception(PRODUCT_CATEGORY_PARENT_NOT_EXISTS); } // 更新到数据库 ProductCategoryDO productCategoryDO = ProductCategoryConvert.INSTANCE.convertToDO(productCategoryUpdateDTO); productCategoryMapper.updateById(productCategoryDO); - // TODO jiangweifan 操作日志 + // TODO 伟帆 操作日志 return true; } @@ -97,27 +98,27 @@ public class ProductCategoryServiceImpl implements ProductCategoryService { * @return */ @Override - public Boolean updateProductCategoryStatus(ProductCategoryUpdateStatusDTO productCategoryUpdateStatusDTO) { + public Boolean updateProductCategoryStatus(@Valid ProductCategoryUpdateStatusDTO productCategoryUpdateStatusDTO) { Integer productCategoryId = productCategoryUpdateStatusDTO.getId(); Integer status = productCategoryUpdateStatusDTO.getStatus(); // 校验商品分类是否存在 ProductCategoryDO productCategoryDO = productCategoryMapper.selectById(productCategoryId); if (productCategoryDO == null) { - throw ServiceExceptionUtil.exception(ProductErrorCodeEnum.PRODUCT_CATEGORY_NOT_EXISTS.getCode()); + throw ServiceExceptionUtil.exception(PRODUCT_CATEGORY_NOT_EXISTS); } // 判断更新状态是否存在 if (!ProductCategoryConstants.STATUS_ENABLE.equals(status) && !ProductCategoryConstants.STATUS_DISABLE.equals(status)) { - throw ServiceExceptionUtil.exception(ProductErrorCodeEnum.PRODUCT_CATEGORY_STATUS_NOT_EXISTS.getCode()); + throw ServiceExceptionUtil.exception(PRODUCT_CATEGORY_STATUS_NOT_EXISTS); } // 如果状态相同,则返回错误 if (productCategoryDO.getStatus().equals(status)) { - throw ServiceExceptionUtil.exception(ProductErrorCodeEnum.PRODUCT_CATEGORY_STATUS_EQUALS.getCode()); + throw ServiceExceptionUtil.exception(PRODUCT_CATEGORY_STATUS_EQUALS); } // 更新商品分类 productCategoryDO.setId(productCategoryId).setStatus(status); productCategoryMapper.updateById(productCategoryDO); - // TODO jiangweifan 操作日志 + // TODO 伟帆 操作日志 return true; } @@ -127,31 +128,31 @@ public class ProductCategoryServiceImpl implements ProductCategoryService { * @return */ @Override - public Boolean deleteProductCategory(ProductCategoryDeleteDTO productCategoryDeleteDTO) { + public Boolean deleteProductCategory(@Valid ProductCategoryDeleteDTO productCategoryDeleteDTO) { Integer productCategoryId = productCategoryDeleteDTO.getId(); // 校验分类是否存在 ProductCategoryDO productCategory = productCategoryMapper.selectById(productCategoryId); if (productCategory == null) { - throw ServiceExceptionUtil.exception(ProductErrorCodeEnum.PRODUCT_CATEGORY_NOT_EXISTS.getCode()); + throw ServiceExceptionUtil.exception(PRODUCT_CATEGORY_NOT_EXISTS); } // 只有禁用的商品分类才可以删除 if (ProductCategoryConstants.STATUS_ENABLE.equals(productCategory.getStatus())) { - throw ServiceExceptionUtil.exception(ProductErrorCodeEnum.PRODUCT_CATEGORY_DELETE_ONLY_DISABLE.getCode()); + throw ServiceExceptionUtil.exception(PRODUCT_CATEGORY_DELETE_ONLY_DISABLE); } // 只有不存在子分类才可以删除 Integer childCount = productCategoryMapper.selectCount( Wrappers.lambdaQuery().eq(ProductCategoryDO::getPid, productCategoryId) ); if (childCount > 0) { - throw ServiceExceptionUtil.exception(ProductErrorCodeEnum.PRODUCT_CATEGORY_DELETE_ONLY_NO_CHILD.getCode()); + throw ServiceExceptionUtil.exception(PRODUCT_CATEGORY_DELETE_ONLY_NO_CHILD); } - // TODO jiangweifan 补充只有不存在商品才可以删除 + // TODO 伟帆 补充只有不存在商品才可以删除 // 标记删除商品分类 ProductCategoryDO updateProductCategory = new ProductCategoryDO() .setId(productCategoryId); updateProductCategory.setDeleted(DeletedStatusEnum.DELETED_YES.getValue()); productCategoryMapper.updateById(updateProductCategory); - // TODO jiangweifan 操作日志 + // TODO 伟帆 操作日志 return true; } @@ -164,11 +165,12 @@ public class ProductCategoryServiceImpl implements ProductCategoryService { ProductCategoryDO parentCategory = productCategoryMapper.selectById(pid); // 校验父分类是否存在 if (parentCategory == null) { - throw ServiceExceptionUtil.exception(ProductErrorCodeEnum.PRODUCT_CATEGORY_PARENT_NOT_EXISTS.getCode()); + throw ServiceExceptionUtil.exception(PRODUCT_CATEGORY_PARENT_NOT_EXISTS); } // 父分类必须是一级分类 if (!ProductCategoryConstants.PID_ROOT.equals(parentCategory.getPid())) { - throw ServiceExceptionUtil.exception((ProductErrorCodeEnum.PRODUCT_CATEGORY_PARENT_CAN_NOT_BE_LEVEL2.getCode())); + // TODO FROM 芋艿 to 伟帆,ProductErrorCodeEnum 去实现下 ServiceExceptionUtil.Enumerable 接口,酱紫就不用 .getCode() 方法,代码会更简洁。同时,可以把 ProductErrorCodeEnum static import 下,[DONE] + throw ServiceExceptionUtil.exception(PRODUCT_CATEGORY_PARENT_CAN_NOT_BE_LEVEL2); } } } diff --git a/product/product-rest/src/main/java/cn/iocoder/mall/product/rest/controller/admins/AdminsProductCategoryController.java b/product/product-rest/src/main/java/cn/iocoder/mall/product/rest/controller/admins/AdminsProductCategoryController.java index 658b5a0ac..3ce92f8de 100644 --- a/product/product-rest/src/main/java/cn/iocoder/mall/product/rest/controller/admins/AdminsProductCategoryController.java +++ b/product/product-rest/src/main/java/cn/iocoder/mall/product/rest/controller/admins/AdminsProductCategoryController.java @@ -2,8 +2,7 @@ package cn.iocoder.mall.product.rest.controller.admins; import cn.iocoder.common.framework.constant.MallConstants; import cn.iocoder.common.framework.vo.CommonResult; -import cn.iocoder.mall.product.biz.bo.category.ProductCategoryAddBO; -import cn.iocoder.mall.product.biz.bo.category.ProductCategoryAllListBO; +import cn.iocoder.mall.product.biz.bo.category.ProductCategoryBO; import cn.iocoder.mall.product.biz.dto.category.ProductCategoryAddDTO; import cn.iocoder.mall.product.biz.dto.category.ProductCategoryDeleteDTO; import cn.iocoder.mall.product.biz.dto.category.ProductCategoryUpdateDTO; @@ -45,9 +44,9 @@ public class AdminsProductCategoryController { @GetMapping("/tree") @ApiOperation("获取分类树结构") public CommonResult> tree() { - List productCategories = productCategoryService.getAllProductCategory(); + List productCategories = productCategoryService.getAllProductCategory(); // 创建 ProductCategoryTreeNodeVO Map - Map treeNodeMap = productCategories.stream().collect(Collectors.toMap(ProductCategoryAllListBO::getId, ProductCategoryConvert.INSTANCE::convertToTreeNodeResponse)); + Map treeNodeMap = productCategories.stream().collect(Collectors.toMap(ProductCategoryBO::getId, ProductCategoryConvert.INSTANCE::convertToTreeNodeResponse)); // 处理父子关系 treeNodeMap.values().stream() .filter(node -> !node.getPid().equals(ProductCategoryConstants.PID_ROOT)) @@ -74,7 +73,7 @@ public class AdminsProductCategoryController { // 转换 ProductCategoryAddDTO 对象 ProductCategoryAddDTO productCategoryAddDTO = ProductCategoryConvert.INSTANCE.convertToAddDTO(AdminSecurityContextHolder.getContext().getAdminId(), adminsProductCategoryAddRequest); // 创建商品分类 - ProductCategoryAddBO addProductCategoryBO = productCategoryService.addProductCategory(productCategoryAddDTO); + ProductCategoryBO addProductCategoryBO = productCategoryService.addProductCategory(productCategoryAddDTO); // 返回结果 return success(ProductCategoryConvert.INSTANCE.convertToAddResponse(addProductCategoryBO)); } diff --git a/product/product-rest/src/main/java/cn/iocoder/mall/product/rest/convert/category/ProductCategoryConvert.java b/product/product-rest/src/main/java/cn/iocoder/mall/product/rest/convert/category/ProductCategoryConvert.java index a300108bf..50cddef0b 100644 --- a/product/product-rest/src/main/java/cn/iocoder/mall/product/rest/convert/category/ProductCategoryConvert.java +++ b/product/product-rest/src/main/java/cn/iocoder/mall/product/rest/convert/category/ProductCategoryConvert.java @@ -1,7 +1,6 @@ package cn.iocoder.mall.product.rest.convert.category; -import cn.iocoder.mall.product.biz.bo.category.ProductCategoryAddBO; -import cn.iocoder.mall.product.biz.bo.category.ProductCategoryAllListBO; +import cn.iocoder.mall.product.biz.bo.category.ProductCategoryBO; import cn.iocoder.mall.product.biz.dto.category.ProductCategoryAddDTO; import cn.iocoder.mall.product.biz.dto.category.ProductCategoryDeleteDTO; import cn.iocoder.mall.product.biz.dto.category.ProductCategoryUpdateDTO; @@ -12,7 +11,6 @@ import cn.iocoder.mall.product.rest.request.category.AdminsProductCategoryUpdate import cn.iocoder.mall.product.rest.response.category.AdminsProductCategoryAddResponse; import cn.iocoder.mall.product.rest.response.category.AdminsProductCategoryTreeNodeResponse; import org.mapstruct.Mapper; -import org.mapstruct.Mappings; import org.mapstruct.factory.Mappers; /** @@ -30,7 +28,7 @@ public interface ProductCategoryConvert { * @param productCategoryAllListBO * @return */ - AdminsProductCategoryTreeNodeResponse convertToTreeNodeResponse(ProductCategoryAllListBO productCategoryAllListBO); + AdminsProductCategoryTreeNodeResponse convertToTreeNodeResponse(ProductCategoryBO productCategoryAllListBO); /** @@ -45,7 +43,7 @@ public interface ProductCategoryConvert { * @param productCategoryAddBO * @return */ - AdminsProductCategoryAddResponse convertToAddResponse(ProductCategoryAddBO productCategoryAddBO); + AdminsProductCategoryAddResponse convertToAddResponse(ProductCategoryBO productCategoryAddBO); /** * 更新商品分类 - Request转DTO diff --git a/product/product-rest/src/main/java/cn/iocoder/mall/product/rest/request/category/AdminsProductCategoryAddRequest.java b/product/product-rest/src/main/java/cn/iocoder/mall/product/rest/request/category/AdminsProductCategoryAddRequest.java index a9bd29c2a..6b25daf69 100644 --- a/product/product-rest/src/main/java/cn/iocoder/mall/product/rest/request/category/AdminsProductCategoryAddRequest.java +++ b/product/product-rest/src/main/java/cn/iocoder/mall/product/rest/request/category/AdminsProductCategoryAddRequest.java @@ -16,32 +16,23 @@ import javax.validation.constraints.NotNull; @Data @Accessors(chain = true) public class AdminsProductCategoryAddRequest { - /** - * 父分类编号 - */ + + // TODO FROM 芋艿 to 伟帆:写了 swagger 注解,我们可以少写一份 Java 注释。[DONE] @ApiModelProperty(name = "pid", value = "父级分类编号", required = true, example = "1") @NotNull(message = "父分类编号不能为空") private Integer pid; - /** - * 名称 - */ + @ApiModelProperty(name = "name", value = "分类名字(标识)", required = true, example = "admin/info") @NotNull(message = "名称不能为空") private String name; - /** - * 描述 - */ + @ApiModelProperty(name = "description", value = "描述", required = true, example = "1") @NotNull(message = "描述不能为空") private String description; - /** - * 分类图片 - */ + @ApiModelProperty(name = "picUrl", value = "分类图片", example = "http://www.iocoder.cn/images/common/wechat_mp_2017_07_31_bak.jpg/") private String picUrl; - /** - * 排序值 - */ + @ApiModelProperty(name = "sort", value = "排序", required = true, example = "1") @NotNull(message = "排序值不能为空") private Integer sort; diff --git a/product/product-rest/src/main/java/cn/iocoder/mall/product/rest/request/category/AdminsProductCategoryUpdateRequest.java b/product/product-rest/src/main/java/cn/iocoder/mall/product/rest/request/category/AdminsProductCategoryUpdateRequest.java index e96799935..27dd4a6ff 100644 --- a/product/product-rest/src/main/java/cn/iocoder/mall/product/rest/request/category/AdminsProductCategoryUpdateRequest.java +++ b/product/product-rest/src/main/java/cn/iocoder/mall/product/rest/request/category/AdminsProductCategoryUpdateRequest.java @@ -16,38 +16,26 @@ import javax.validation.constraints.NotNull; @Data @Accessors(chain = true) public class AdminsProductCategoryUpdateRequest { - /** - * 编号 - */ + @ApiModelProperty(name = "id", value = "分类编号", required = true, example = "1") @NotNull(message = "编号不能为空") private Integer id; - /** - * 父分类编号 - */ + @ApiModelProperty(name = "pid", value = "父级分类编号", required = true, example = "1") @NotNull(message = "父分类编号不能为空") private Integer pid; - /** - * 名称 - */ + @ApiModelProperty(name = "name", value = "分类名字(标识)", required = true, example = "admin/info") @NotNull(message = "名称不能为空") private String name; - /** - * 描述 - */ + @ApiModelProperty(name = "description", value = "描述", required = true, example = "1") @NotNull(message = "描述不能为空") private String description; - /** - * 分类图片 - */ + @ApiModelProperty(name = "picUrl", value = "分类图片", example = "http://www.iocoder.cn/images/common/wechat_mp_2017_07_31_bak.jpg/") private String picUrl; - /** - * 排序值 - */ + @ApiModelProperty(name = "sort", value = "排序", required = true, example = "1") @NotNull(message = "排序值不能为空") private Integer sort; diff --git a/product/product-rest/src/main/java/cn/iocoder/mall/product/rest/request/category/AdminsProductCategoryUpdateStatusRequest.java b/product/product-rest/src/main/java/cn/iocoder/mall/product/rest/request/category/AdminsProductCategoryUpdateStatusRequest.java index 8777902a1..d572e89ba 100644 --- a/product/product-rest/src/main/java/cn/iocoder/mall/product/rest/request/category/AdminsProductCategoryUpdateStatusRequest.java +++ b/product/product-rest/src/main/java/cn/iocoder/mall/product/rest/request/category/AdminsProductCategoryUpdateStatusRequest.java @@ -16,15 +16,11 @@ import javax.validation.constraints.NotNull; @Data @Accessors(chain = true) public class AdminsProductCategoryUpdateStatusRequest { - /** - * 商品分类编号 - */ + @ApiModelProperty(name = "id", value = "分类编号", required = true, example = "1") @NotNull(message = "编号不能为空") private Integer id; - /** - * 更新状态 - */ + @ApiModelProperty(name = "status", value = "状态。1 - 开启;2 - 禁用", required = true, example = "1") @NotNull(message = "状态不能为空") private Integer status; diff --git a/product/product-rest/src/main/java/cn/iocoder/mall/product/rest/response/category/AdminsProductCategoryAddResponse.java b/product/product-rest/src/main/java/cn/iocoder/mall/product/rest/response/category/AdminsProductCategoryAddResponse.java index b4ebff33a..b86b6e2aa 100644 --- a/product/product-rest/src/main/java/cn/iocoder/mall/product/rest/response/category/AdminsProductCategoryAddResponse.java +++ b/product/product-rest/src/main/java/cn/iocoder/mall/product/rest/response/category/AdminsProductCategoryAddResponse.java @@ -18,18 +18,25 @@ public class AdminsProductCategoryAddResponse { @ApiModelProperty(value = "分类编号", required = true, example = "1") private Integer id; + @ApiModelProperty(value = "父分类编号", required = true, example = "0") private Integer pid; + @ApiModelProperty(value = "分类名", required = true, example = "手机") private String name; + @ApiModelProperty(value = "描述", required = true, example = "这个商品很吊") private String description; + @ApiModelProperty(value = "分类图片", notes = "一般情况下,只有根分类才有图片", example = "http://www.iocoder.cn/images/common/wechat_mp_2017_07_31_bak.jpg") private String picUrl; + @ApiModelProperty(value = "排序值", required = true, example = "10") private Integer sort; + @ApiModelProperty(value = "状态", required = true, notes = "1-开启;2-关闭", example = "1") private Integer status; + @ApiModelProperty(value = "创建时间", required = true, example = "时间戳") private Date createTime; diff --git a/product/product-rest/src/main/java/cn/iocoder/mall/product/rest/response/category/AdminsProductCategoryTreeNodeResponse.java b/product/product-rest/src/main/java/cn/iocoder/mall/product/rest/response/category/AdminsProductCategoryTreeNodeResponse.java index 2fec71cd7..24ed628ad 100644 --- a/product/product-rest/src/main/java/cn/iocoder/mall/product/rest/response/category/AdminsProductCategoryTreeNodeResponse.java +++ b/product/product-rest/src/main/java/cn/iocoder/mall/product/rest/response/category/AdminsProductCategoryTreeNodeResponse.java @@ -20,20 +20,28 @@ public class AdminsProductCategoryTreeNodeResponse { @ApiModelProperty(value = "分类编号", required = true, example = "1") private Integer id; + @ApiModelProperty(value = "父分类编号", required = true, example = "0") private Integer pid; + @ApiModelProperty(value = "分类名", required = true, example = "手机") private String name; + @ApiModelProperty(value = "描述", required = true, example = "这个商品很吊") private String description; + @ApiModelProperty(value = "分类图片", notes = "一般情况下,只有根分类才有图片", example = "http://www.iocoder.cn/images/common/wechat_mp_2017_07_31_bak.jpg") private String picUrl; + @ApiModelProperty(value = "排序值", required = true, example = "10") private Integer sort; + @ApiModelProperty(value = "状态", required = true, notes = "1-开启;2-关闭", example = "1") private Integer status; + @ApiModelProperty(value = "创建时间", required = true, example = "时间戳") private Date createTime; + @ApiModelProperty(value = "子节点数组") private List children; diff --git a/promotion/promotion-application/pom.xml b/promotion/promotion-application/pom.xml index d6bb18129..784fbe036 100644 --- a/promotion/promotion-application/pom.xml +++ b/promotion/promotion-application/pom.xml @@ -53,6 +53,10 @@ system-sdk 1.0-SNAPSHOT + + cn.iocoder.mall + mall-spring-boot-starter-mybatis + @@ -93,6 +97,18 @@ spring-boot-starter-test test + + cn.iocoder.mall + mall-spring-boot-starter-security + 1.0-SNAPSHOT + compile + + + cn.iocoder.mall + mall-spring-boot-starter-security + 1.0-SNAPSHOT + compile + diff --git a/promotion/promotion-application/src/main/java/cn/iocoder/mall/promotion/application/controller/admins/AdminsBannerController.java b/promotion/promotion-application/src/main/java/cn/iocoder/mall/promotion/application/controller/admins/AdminsBannerController.java index 30ca5e58c..7b20fc96c 100644 --- a/promotion/promotion-application/src/main/java/cn/iocoder/mall/promotion/application/controller/admins/AdminsBannerController.java +++ b/promotion/promotion-application/src/main/java/cn/iocoder/mall/promotion/application/controller/admins/AdminsBannerController.java @@ -1,7 +1,6 @@ package cn.iocoder.mall.promotion.application.controller.admins; import cn.iocoder.common.framework.vo.CommonResult; -import cn.iocoder.mall.system.sdk.context.AdminSecurityContextHolder; import cn.iocoder.mall.promotion.api.BannerService; import cn.iocoder.mall.promotion.api.bo.BannerPageBO; import cn.iocoder.mall.promotion.api.dto.BannerAddDTO; @@ -10,6 +9,7 @@ import cn.iocoder.mall.promotion.api.dto.BannerUpdateDTO; import cn.iocoder.mall.promotion.application.convert.BannerConvert; import cn.iocoder.mall.promotion.application.vo.admins.AdminsBannerPageVO; import cn.iocoder.mall.promotion.application.vo.admins.AdminsBannerVO; +import cn.iocoder.mall.security.core.context.AdminSecurityContextHolder; import io.swagger.annotations.Api; import io.swagger.annotations.ApiImplicitParam; import io.swagger.annotations.ApiImplicitParams; diff --git a/promotion/promotion-application/src/main/java/cn/iocoder/mall/promotion/application/controller/admins/AdminsCouponController.java b/promotion/promotion-application/src/main/java/cn/iocoder/mall/promotion/application/controller/admins/AdminsCouponController.java index 476ae30fc..3a22f90f4 100644 --- a/promotion/promotion-application/src/main/java/cn/iocoder/mall/promotion/application/controller/admins/AdminsCouponController.java +++ b/promotion/promotion-application/src/main/java/cn/iocoder/mall/promotion/application/controller/admins/AdminsCouponController.java @@ -2,7 +2,6 @@ package cn.iocoder.mall.promotion.application.controller.admins; import cn.iocoder.common.framework.util.DateUtil; import cn.iocoder.common.framework.vo.CommonResult; -import cn.iocoder.mall.system.sdk.context.AdminSecurityContextHolder; import cn.iocoder.mall.promotion.api.CouponService; import cn.iocoder.mall.promotion.api.bo.CouponTemplateBO; import cn.iocoder.mall.promotion.api.bo.CouponTemplatePageBO; @@ -12,6 +11,7 @@ import cn.iocoder.mall.promotion.api.dto.CouponTemplatePageDTO; import cn.iocoder.mall.promotion.application.convert.CouponTemplateConvert; import cn.iocoder.mall.promotion.application.vo.admins.AdminsCouponTemplatePageVO; import cn.iocoder.mall.promotion.application.vo.admins.AdminsCouponTemplateVO; +import cn.iocoder.mall.security.core.context.AdminSecurityContextHolder; import io.swagger.annotations.Api; import io.swagger.annotations.ApiImplicitParam; import io.swagger.annotations.ApiImplicitParams; diff --git a/promotion/promotion-application/src/main/java/cn/iocoder/mall/promotion/application/controller/admins/AdminsProductRecommendController.java b/promotion/promotion-application/src/main/java/cn/iocoder/mall/promotion/application/controller/admins/AdminsProductRecommendController.java index 4737a85c1..8670c7b81 100644 --- a/promotion/promotion-application/src/main/java/cn/iocoder/mall/promotion/application/controller/admins/AdminsProductRecommendController.java +++ b/promotion/promotion-application/src/main/java/cn/iocoder/mall/promotion/application/controller/admins/AdminsProductRecommendController.java @@ -1,7 +1,6 @@ package cn.iocoder.mall.promotion.application.controller.admins; import cn.iocoder.common.framework.vo.CommonResult; -import cn.iocoder.mall.system.sdk.context.AdminSecurityContextHolder; import cn.iocoder.mall.product.api.ProductSpuService; import cn.iocoder.mall.product.api.bo.ProductSpuBO; import cn.iocoder.mall.promotion.api.ProductRecommendService; @@ -13,6 +12,7 @@ import cn.iocoder.mall.promotion.api.dto.ProductRecommendUpdateDTO; import cn.iocoder.mall.promotion.application.convert.ProductRecommendConvert; import cn.iocoder.mall.promotion.application.vo.admins.AdminsProductRecommendPageVO; import cn.iocoder.mall.promotion.application.vo.admins.AdminsProductRecommendVO; +import cn.iocoder.mall.security.core.context.AdminSecurityContextHolder; import io.swagger.annotations.Api; import io.swagger.annotations.ApiImplicitParam; import io.swagger.annotations.ApiImplicitParams; diff --git a/promotion/promotion-application/src/main/java/cn/iocoder/mall/promotion/application/controller/users/UsersCouponController.java b/promotion/promotion-application/src/main/java/cn/iocoder/mall/promotion/application/controller/users/UsersCouponController.java index dce496e1a..cb4f095cf 100644 --- a/promotion/promotion-application/src/main/java/cn/iocoder/mall/promotion/application/controller/users/UsersCouponController.java +++ b/promotion/promotion-application/src/main/java/cn/iocoder/mall/promotion/application/controller/users/UsersCouponController.java @@ -11,7 +11,7 @@ import cn.iocoder.mall.promotion.application.convert.CouponTemplateConvert; import cn.iocoder.mall.promotion.application.vo.users.UsersCouponCardPageVO; import cn.iocoder.mall.promotion.application.vo.users.UsersCouponCardVO; import cn.iocoder.mall.promotion.application.vo.users.UsersCouponTemplateVO; -import cn.iocoder.mall.user.sdk.context.UserSecurityContextHolder; +import cn.iocoder.mall.security.core.context.UserSecurityContextHolder; import io.swagger.annotations.Api; import io.swagger.annotations.ApiImplicitParam; import io.swagger.annotations.ApiImplicitParams; diff --git a/promotion/promotion-service-impl/pom.xml b/promotion/promotion-service-impl/pom.xml index f6fb32b5f..49b3d9bf7 100644 --- a/promotion/promotion-service-impl/pom.xml +++ b/promotion/promotion-service-impl/pom.xml @@ -90,6 +90,18 @@ spring-boot-starter-test test + + cn.iocoder.mall + mall-spring-boot-starter-mybatis + 1.0-SNAPSHOT + compile + + + cn.iocoder.mall + mall-spring-boot-starter-mybatis + 1.0-SNAPSHOT + compile + diff --git a/promotion/promotion-service-impl/src/main/java/cn/iocoder/mall/promotion/biz/dataobject/BannerDO.java b/promotion/promotion-service-impl/src/main/java/cn/iocoder/mall/promotion/biz/dataobject/BannerDO.java index 9e2cc22b9..49f4091c3 100644 --- a/promotion/promotion-service-impl/src/main/java/cn/iocoder/mall/promotion/biz/dataobject/BannerDO.java +++ b/promotion/promotion-service-impl/src/main/java/cn/iocoder/mall/promotion/biz/dataobject/BannerDO.java @@ -1,6 +1,6 @@ package cn.iocoder.mall.promotion.biz.dataobject; -import cn.iocoder.common.framework.dataobject.DeletableDO; +import cn.iocoder.mall.mybatis.dataobject.DeletableDO; import lombok.Data; import lombok.experimental.Accessors; diff --git a/promotion/promotion-service-impl/src/main/java/cn/iocoder/mall/promotion/biz/dataobject/CouponCardDO.java b/promotion/promotion-service-impl/src/main/java/cn/iocoder/mall/promotion/biz/dataobject/CouponCardDO.java index 4a41d6291..e4803d5f3 100644 --- a/promotion/promotion-service-impl/src/main/java/cn/iocoder/mall/promotion/biz/dataobject/CouponCardDO.java +++ b/promotion/promotion-service-impl/src/main/java/cn/iocoder/mall/promotion/biz/dataobject/CouponCardDO.java @@ -1,6 +1,6 @@ package cn.iocoder.mall.promotion.biz.dataobject; -import cn.iocoder.common.framework.dataobject.BaseDO; +import cn.iocoder.mall.mybatis.dataobject.BaseDO; import lombok.Data; import lombok.experimental.Accessors; diff --git a/promotion/promotion-service-impl/src/main/java/cn/iocoder/mall/promotion/biz/dataobject/CouponCodeDO.java b/promotion/promotion-service-impl/src/main/java/cn/iocoder/mall/promotion/biz/dataobject/CouponCodeDO.java index 61ee2c9cc..d090227ab 100644 --- a/promotion/promotion-service-impl/src/main/java/cn/iocoder/mall/promotion/biz/dataobject/CouponCodeDO.java +++ b/promotion/promotion-service-impl/src/main/java/cn/iocoder/mall/promotion/biz/dataobject/CouponCodeDO.java @@ -1,6 +1,6 @@ package cn.iocoder.mall.promotion.biz.dataobject; -import cn.iocoder.common.framework.dataobject.BaseDO; +import cn.iocoder.mall.mybatis.dataobject.BaseDO; import lombok.Data; import lombok.experimental.Accessors; diff --git a/promotion/promotion-service-impl/src/main/java/cn/iocoder/mall/promotion/biz/dataobject/CouponTemplateDO.java b/promotion/promotion-service-impl/src/main/java/cn/iocoder/mall/promotion/biz/dataobject/CouponTemplateDO.java index 37f5284bc..6d3a20406 100644 --- a/promotion/promotion-service-impl/src/main/java/cn/iocoder/mall/promotion/biz/dataobject/CouponTemplateDO.java +++ b/promotion/promotion-service-impl/src/main/java/cn/iocoder/mall/promotion/biz/dataobject/CouponTemplateDO.java @@ -1,6 +1,6 @@ package cn.iocoder.mall.promotion.biz.dataobject; -import cn.iocoder.common.framework.dataobject.BaseDO; +import cn.iocoder.mall.mybatis.dataobject.BaseDO; import lombok.Data; import lombok.experimental.Accessors; diff --git a/promotion/promotion-service-impl/src/main/java/cn/iocoder/mall/promotion/biz/dataobject/ProductRecommendDO.java b/promotion/promotion-service-impl/src/main/java/cn/iocoder/mall/promotion/biz/dataobject/ProductRecommendDO.java index 8b245aa5a..0294450ab 100644 --- a/promotion/promotion-service-impl/src/main/java/cn/iocoder/mall/promotion/biz/dataobject/ProductRecommendDO.java +++ b/promotion/promotion-service-impl/src/main/java/cn/iocoder/mall/promotion/biz/dataobject/ProductRecommendDO.java @@ -1,6 +1,7 @@ package cn.iocoder.mall.promotion.biz.dataobject; -import cn.iocoder.common.framework.dataobject.DeletableDO; + +import cn.iocoder.mall.mybatis.dataobject.DeletableDO; import cn.iocoder.mall.promotion.api.constant.ProductRecommendTypeEnum; import lombok.Data; import lombok.experimental.Accessors; diff --git a/promotion/promotion-service-impl/src/main/java/cn/iocoder/mall/promotion/biz/dataobject/PromotionActivityDO.java b/promotion/promotion-service-impl/src/main/java/cn/iocoder/mall/promotion/biz/dataobject/PromotionActivityDO.java index aa274796b..d729a0ee0 100644 --- a/promotion/promotion-service-impl/src/main/java/cn/iocoder/mall/promotion/biz/dataobject/PromotionActivityDO.java +++ b/promotion/promotion-service-impl/src/main/java/cn/iocoder/mall/promotion/biz/dataobject/PromotionActivityDO.java @@ -1,6 +1,6 @@ package cn.iocoder.mall.promotion.biz.dataobject; -import cn.iocoder.common.framework.dataobject.BaseDO; +import cn.iocoder.mall.mybatis.dataobject.BaseDO; import lombok.Data; import lombok.experimental.Accessors; diff --git a/promotion/promotion-service-impl/src/main/java/cn/iocoder/mall/promotion/biz/mybatis/TestHandler.java b/promotion/promotion-service-impl/src/main/java/cn/iocoder/mall/promotion/biz/mybatis/TestHandler.java index d8a87c9d2..f36c8ba77 100644 --- a/promotion/promotion-service-impl/src/main/java/cn/iocoder/mall/promotion/biz/mybatis/TestHandler.java +++ b/promotion/promotion-service-impl/src/main/java/cn/iocoder/mall/promotion/biz/mybatis/TestHandler.java @@ -1,6 +1,6 @@ package cn.iocoder.mall.promotion.biz.mybatis; -import cn.iocoder.common.framework.mybatis.JSONTypeHandler; +import cn.iocoder.mall.mybatis.type.JSONTypeHandler; import cn.iocoder.mall.promotion.biz.dataobject.PromotionActivityDO; public class TestHandler extends JSONTypeHandler { diff --git a/promotion/promotion-service-impl/src/main/java/cn/iocoder/mall/promotion/biz/service/BannerServiceImpl.java b/promotion/promotion-service-impl/src/main/java/cn/iocoder/mall/promotion/biz/service/BannerServiceImpl.java index e16287bab..0c1f6d867 100644 --- a/promotion/promotion-service-impl/src/main/java/cn/iocoder/mall/promotion/biz/service/BannerServiceImpl.java +++ b/promotion/promotion-service-impl/src/main/java/cn/iocoder/mall/promotion/biz/service/BannerServiceImpl.java @@ -1,8 +1,8 @@ package cn.iocoder.mall.promotion.biz.service; import cn.iocoder.common.framework.constant.CommonStatusEnum; -import cn.iocoder.common.framework.constant.DeletedStatusEnum; import cn.iocoder.common.framework.util.ServiceExceptionUtil; +import cn.iocoder.mall.mybatis.enums.DeletedStatusEnum; import cn.iocoder.mall.promotion.api.BannerService; import cn.iocoder.mall.promotion.api.bo.BannerBO; import cn.iocoder.mall.promotion.api.bo.BannerPageBO; diff --git a/promotion/promotion-service-impl/src/main/java/cn/iocoder/mall/promotion/biz/service/ProductRecommendServiceImpl.java b/promotion/promotion-service-impl/src/main/java/cn/iocoder/mall/promotion/biz/service/ProductRecommendServiceImpl.java index e3e6a940c..f9817416b 100644 --- a/promotion/promotion-service-impl/src/main/java/cn/iocoder/mall/promotion/biz/service/ProductRecommendServiceImpl.java +++ b/promotion/promotion-service-impl/src/main/java/cn/iocoder/mall/promotion/biz/service/ProductRecommendServiceImpl.java @@ -1,8 +1,8 @@ package cn.iocoder.mall.promotion.biz.service; import cn.iocoder.common.framework.constant.CommonStatusEnum; -import cn.iocoder.common.framework.constant.DeletedStatusEnum; import cn.iocoder.common.framework.util.ServiceExceptionUtil; +import cn.iocoder.mall.mybatis.enums.DeletedStatusEnum; import cn.iocoder.mall.product.api.ProductSpuService; import cn.iocoder.mall.promotion.api.ProductRecommendService; import cn.iocoder.mall.promotion.api.bo.ProductRecommendBO; diff --git a/user/user-biz-api/pom.xml b/user/user-biz-api/pom.xml index 85d7f33aa..fec19c094 100644 --- a/user/user-biz-api/pom.xml +++ b/user/user-biz-api/pom.xml @@ -11,5 +11,12 @@ user-biz-api - + + + + cn.iocoder.mall + common-framework + 1.0-SNAPSHOT + + \ No newline at end of file diff --git a/user/user-biz/pom.xml b/user/user-biz/pom.xml index 50b38c0ab..0fb88e044 100644 --- a/user/user-biz/pom.xml +++ b/user/user-biz/pom.xml @@ -16,7 +16,7 @@ cn.iocoder.mall - system-biz-api + user-biz-api 1.0-SNAPSHOT diff --git a/user/user-biz/src/main/java/cn/iocoder/mall/user/biz/convert/user/UserAddressConvert.java b/user/user-biz/src/main/java/cn/iocoder/mall/user/biz/convert/user/UserAddressConvert.java index 21231e225..abbf44eea 100644 --- a/user/user-biz/src/main/java/cn/iocoder/mall/user/biz/convert/user/UserAddressConvert.java +++ b/user/user-biz/src/main/java/cn/iocoder/mall/user/biz/convert/user/UserAddressConvert.java @@ -1,7 +1,7 @@ package cn.iocoder.mall.user.biz.convert.user; import cn.iocoder.mall.user.biz.bo.user.UserAddressBO; -import cn.iocoder.mall.user.biz.dataobject.user.UserAddressDO; +import cn.iocoder.mall.user.biz.dataobject.user.UsersUserAddressDO; import cn.iocoder.mall.user.biz.dto.user.UserAddressAddDTO; import cn.iocoder.mall.user.biz.dto.user.UserAddressUpdateDTO; import org.mapstruct.Mapper; @@ -22,14 +22,14 @@ public interface UserAddressConvert { UserAddressConvert INSTANCE = Mappers.getMapper(UserAddressConvert.class); @Mappings({}) - UserAddressDO convert(UserAddressAddDTO userAddressAddDTO); + UsersUserAddressDO convert(UserAddressAddDTO userAddressAddDTO); @Mappings({}) - UserAddressDO convert(UserAddressUpdateDTO userAddressUpdateDTO); + UsersUserAddressDO convert(UserAddressUpdateDTO userAddressUpdateDTO); @Mappings({}) - UserAddressBO convert(UserAddressDO userAddressDO); + UserAddressBO convert(UsersUserAddressDO userAddressDO); @Mappings({}) - List convertUserAddressBOList(List userAddressDOList); + List convertUserAddressBOList(List userAddressDOList); } diff --git a/user/user-biz/src/main/java/cn/iocoder/mall/user/biz/dao/user/UserAddressMapper.java b/user/user-biz/src/main/java/cn/iocoder/mall/user/biz/dao/user/UserAddressMapper.java index 9534b6df8..e9aed689b 100644 --- a/user/user-biz/src/main/java/cn/iocoder/mall/user/biz/dao/user/UserAddressMapper.java +++ b/user/user-biz/src/main/java/cn/iocoder/mall/user/biz/dao/user/UserAddressMapper.java @@ -1,6 +1,6 @@ package cn.iocoder.mall.user.biz.dao.user; -import cn.iocoder.mall.user.biz.dataobject.user.UserAddressDO; +import cn.iocoder.mall.user.biz.dataobject.user.UsersUserAddressDO; import cn.iocoder.mall.user.biz.enums.user.UserAddressHasDefaultEnum; import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; import com.baomidou.mybatisplus.core.mapper.BaseMapper; @@ -15,19 +15,19 @@ import java.util.List; * @time 2019-04-06 13:29 */ @Repository -// TODO FROM 芋艿 to 小范:替换成 Mybatis Plus -public interface UserAddressMapper extends BaseMapper { +// TODO done FROM 芋艿 to 小范:替换成 Mybatis Plus +public interface UserAddressMapper extends BaseMapper { - default List selectByUserId(Integer userId) { - LambdaQueryWrapper wrapper = new LambdaQueryWrapper<>(); - wrapper.eq(UserAddressDO::getUserId, userId); + default List selectByUserId(Integer userId) { + LambdaQueryWrapper wrapper = new LambdaQueryWrapper<>(); + wrapper.eq(UsersUserAddressDO::getUserId, userId); return selectList(wrapper); } - default UserAddressDO selectHasDefault(Integer userId) { - LambdaQueryWrapper wrapper = new LambdaQueryWrapper<>(); - wrapper.eq(UserAddressDO::getUserId, userId); - wrapper.eq(UserAddressDO::getHasDefault, UserAddressHasDefaultEnum.DEFAULT_ADDRESS_YES.getValue()); + default UsersUserAddressDO selectHasDefault(Integer userId) { + LambdaQueryWrapper wrapper = new LambdaQueryWrapper<>(); + wrapper.eq(UsersUserAddressDO::getUserId, userId); + wrapper.eq(UsersUserAddressDO::getHasDefault, UserAddressHasDefaultEnum.DEFAULT_ADDRESS_YES.getValue()); return selectOne(wrapper); } } diff --git a/user/user-biz/src/main/java/cn/iocoder/mall/user/biz/dataobject/user/UserAddressDO.java b/user/user-biz/src/main/java/cn/iocoder/mall/user/biz/dataobject/user/UsersUserAddressDO.java similarity index 93% rename from user/user-biz/src/main/java/cn/iocoder/mall/user/biz/dataobject/user/UserAddressDO.java rename to user/user-biz/src/main/java/cn/iocoder/mall/user/biz/dataobject/user/UsersUserAddressDO.java index b6112b911..3b49d0e9a 100644 --- a/user/user-biz/src/main/java/cn/iocoder/mall/user/biz/dataobject/user/UserAddressDO.java +++ b/user/user-biz/src/main/java/cn/iocoder/mall/user/biz/dataobject/user/UsersUserAddressDO.java @@ -12,7 +12,7 @@ import lombok.experimental.Accessors; */ @Data @Accessors(chain = true) -public class UserAddressDO extends DeletableDO { +public class UsersUserAddressDO extends DeletableDO { /** * 编号 diff --git a/user/user-biz/src/main/java/cn/iocoder/mall/user/biz/enums/UserErrorCodeEnum.java b/user/user-biz/src/main/java/cn/iocoder/mall/user/biz/enums/UserErrorCodeEnum.java new file mode 100644 index 000000000..8d17f5a20 --- /dev/null +++ b/user/user-biz/src/main/java/cn/iocoder/mall/user/biz/enums/UserErrorCodeEnum.java @@ -0,0 +1,34 @@ +package cn.iocoder.mall.user.biz.enums; + +import cn.iocoder.common.framework.util.ServiceExceptionUtil; + +/** + * 错误码枚举类 + * + * 用户系统,使用 1-001-000-000 段 + */ +public enum UserErrorCodeEnum implements ServiceExceptionUtil.Enumerable { + + // ========== 用户地址 ========== + USER_ADDRESS_NOT_EXISTENT(1001004000, "用户地址不存在!"), + USER_ADDRESS_IS_DELETED(1001004001, "用户地址已被删除!"), + USER_GET_ADDRESS_NOT_EXISTS(1001004002, "获取的地址不存在!"), + ; + + private final int code; + private final String message; + + UserErrorCodeEnum(int code, String message) { + this.code = code; + this.message = message; + } + + public int getCode() { + return code; + } + + public String getMessage() { + return message; + } + +} diff --git a/user/user-biz/src/main/java/cn/iocoder/mall/user/biz/enums/package-info.java b/user/user-biz/src/main/java/cn/iocoder/mall/user/biz/enums/package-info.java deleted file mode 100644 index b096c9f2e..000000000 --- a/user/user-biz/src/main/java/cn/iocoder/mall/user/biz/enums/package-info.java +++ /dev/null @@ -1,5 +0,0 @@ -/** - * author: sin - * time: 2020/5/3 8:29 下午 - */ -package cn.iocoder.mall.user.biz.enums; \ No newline at end of file diff --git a/user/user-biz/src/main/java/cn/iocoder/mall/user/biz/service/user/UserAddressService.java b/user/user-biz/src/main/java/cn/iocoder/mall/user/biz/service/user/UserAddressService.java index 659ea1f3d..294357237 100644 --- a/user/user-biz/src/main/java/cn/iocoder/mall/user/biz/service/user/UserAddressService.java +++ b/user/user-biz/src/main/java/cn/iocoder/mall/user/biz/service/user/UserAddressService.java @@ -14,15 +14,49 @@ import java.util.List; */ public interface UserAddressService { + /** + * 添加地址 + * + * @param userAddressAddDTO + */ void addAddress(UserAddressAddDTO userAddressAddDTO); + /** + * 更新 - 根据id 更新 + * + * @param userAddressAddDTO + */ void updateAddress(UserAddressUpdateDTO userAddressAddDTO); + /** + * 删除 - 更新id 删除 + * + * @param userId + * @param addressId + */ void removeAddress(Integer userId, Integer addressId); - List addressList(Integer userId); + /** + * 获取 - 用户所有地址 + * + * @param userId + * @return + */ + List listAddress(Integer userId); - UserAddressBO getAddress(Integer userId, Integer id); + /** + * 获取 - 根据id 获取地址 + * + * @param id + * @return + */ + UserAddressBO getAddress(Integer id); + /** + * 获取 - 获取用户 default 地址 + * + * @param userId + * @return + */ UserAddressBO getDefaultAddress(Integer userId); } diff --git a/user/user-biz/src/main/java/cn/iocoder/mall/user/biz/service/user/UserAddressServiceImpl.java b/user/user-biz/src/main/java/cn/iocoder/mall/user/biz/service/user/UserAddressServiceImpl.java index 111eecbbe..90627bc28 100644 --- a/user/user-biz/src/main/java/cn/iocoder/mall/user/biz/service/user/UserAddressServiceImpl.java +++ b/user/user-biz/src/main/java/cn/iocoder/mall/user/biz/service/user/UserAddressServiceImpl.java @@ -2,13 +2,13 @@ package cn.iocoder.mall.user.biz.service.user; import cn.iocoder.common.framework.util.ServiceExceptionUtil; import cn.iocoder.mall.mybatis.enums.DeletedStatusEnum; -import cn.iocoder.mall.system.biz.enums.SystemErrorCodeEnum; import cn.iocoder.mall.user.biz.bo.user.UserAddressBO; import cn.iocoder.mall.user.biz.convert.user.UserAddressConvert; import cn.iocoder.mall.user.biz.dao.user.UserAddressMapper; -import cn.iocoder.mall.user.biz.dataobject.user.UserAddressDO; +import cn.iocoder.mall.user.biz.dataobject.user.UsersUserAddressDO; import cn.iocoder.mall.user.biz.dto.user.UserAddressAddDTO; import cn.iocoder.mall.user.biz.dto.user.UserAddressUpdateDTO; +import cn.iocoder.mall.user.biz.enums.UserErrorCodeEnum; import cn.iocoder.mall.user.biz.enums.user.UserAddressHasDefaultEnum; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Service; @@ -32,112 +32,101 @@ public class UserAddressServiceImpl implements UserAddressService { @Override @Transactional public void addAddress(UserAddressAddDTO userAddressAddDTO) { - UserAddressDO userAddressDO = UserAddressConvert.INSTANCE.convert(userAddressAddDTO); + + // 转换do,设置默认数据 + UsersUserAddressDO userAddressDO = UserAddressConvert.INSTANCE.convert(userAddressAddDTO); userAddressDO.setCreateTime(new Date()); userAddressDO.setDeleted(DeletedStatusEnum.DELETED_NO.getValue()); // 检查是否设置为默认地址 if (UserAddressHasDefaultEnum.DEFAULT_ADDRESS_YES.getValue() == userAddressAddDTO.getHasDefault()) { - UserAddressDO defaultUserAddress = userAddressMapper.selectHasDefault(userAddressAddDTO.getUserId()); - + UsersUserAddressDO defaultUserAddress = userAddressMapper.selectHasDefault(userAddressAddDTO.getUserId()); if (defaultUserAddress != null) { userAddressMapper.updateById( - new UserAddressDO() + new UsersUserAddressDO() .setId(defaultUserAddress.getId()) .setHasDefault(UserAddressHasDefaultEnum.DEFAULT_ADDRESS_NO.getValue()) ); } } + // 保存地址 userAddressMapper.insert(userAddressDO); } @Override + @Transactional public void updateAddress(UserAddressUpdateDTO userAddressAddDTO) { - UserAddressDO userAddress = userAddressMapper.selectById(userAddressAddDTO.getId()); - if (DeletedStatusEnum.DELETED_YES.getValue().equals(userAddress.getDeleted())) { - throw ServiceExceptionUtil.exception(SystemErrorCodeEnum.USER_ADDRESS_IS_DELETED.getCode()); - } + + // 检查地址 + UsersUserAddressDO userAddress = userAddressMapper.selectById(userAddressAddDTO.getId()); if (userAddress == null) { - throw ServiceExceptionUtil.exception(SystemErrorCodeEnum.USER_ADDRESS_NOT_EXISTENT.getCode()); + throw ServiceExceptionUtil.exception(UserErrorCodeEnum.USER_ADDRESS_NOT_EXISTENT.getCode()); + } + + // 删除的地址不能更新 + if (DeletedStatusEnum.DELETED_YES.getValue().equals(userAddress.getDeleted())) { + throw ServiceExceptionUtil.exception(UserErrorCodeEnum.USER_ADDRESS_IS_DELETED.getCode()); } // 检查是否设置为默认地址 + // 是:将数据库 default address 设置为 no if (UserAddressHasDefaultEnum.DEFAULT_ADDRESS_YES.getValue() == userAddressAddDTO.getHasDefault()) { - UserAddressDO defaultUserAddress = userAddressMapper.selectHasDefault(userAddressAddDTO.getUserId()); - + UsersUserAddressDO defaultUserAddress = userAddressMapper.selectHasDefault(userAddressAddDTO.getUserId()); if (defaultUserAddress != null && !userAddressAddDTO.getId().equals(defaultUserAddress.getId())) { userAddressMapper.updateById( - new UserAddressDO() + new UsersUserAddressDO() .setId(defaultUserAddress.getId()) .setHasDefault(UserAddressHasDefaultEnum.DEFAULT_ADDRESS_NO.getValue()) ); } } - UserAddressDO defaultUserAddress = userAddressMapper.selectHasDefault(userAddressAddDTO.getUserId()); - if (defaultUserAddress != null && !userAddressAddDTO.getId().equals(defaultUserAddress.getId())) { - userAddressMapper.updateById( - new UserAddressDO() - .setId(defaultUserAddress.getId()) - .setHasDefault(UserAddressHasDefaultEnum.DEFAULT_ADDRESS_NO.getValue()) - ); - } - - UserAddressDO userAddressDO = UserAddressConvert.INSTANCE.convert(userAddressAddDTO); + // 转换 vo, 并保存数据 + UsersUserAddressDO userAddressDO = UserAddressConvert.INSTANCE.convert(userAddressAddDTO); userAddressDO.setUpdateTime(new Date()); userAddressMapper.updateById(userAddressDO); } @Override public void removeAddress(Integer userId, Integer addressId) { - UserAddressDO userAddress = userAddressMapper.selectById(addressId); + // checked address is exists. + UsersUserAddressDO userAddress = userAddressMapper.selectById(addressId); + + if (userAddress == null) { + throw ServiceExceptionUtil.exception(UserErrorCodeEnum.USER_ADDRESS_NOT_EXISTENT.getCode()); + } if (DeletedStatusEnum.DELETED_YES.getValue().equals(userAddress.getDeleted())) { // skip return; } - if (userAddress == null) { - throw ServiceExceptionUtil.exception(SystemErrorCodeEnum.USER_ADDRESS_NOT_EXISTENT.getCode()); - } - + // 更新状态为 remove userAddressMapper.updateById( - (UserAddressDO) new UserAddressDO() + (UsersUserAddressDO) new UsersUserAddressDO() .setId(addressId) .setDeleted(DeletedStatusEnum.DELETED_YES.getValue()) ); } @Override - public List addressList(Integer userId) { - List userAddressDOList = userAddressMapper.selectByUserId(userId); - - List userAddressBOList = UserAddressConvert - .INSTANCE.convertUserAddressBOList(userAddressDOList); - + public List listAddress(Integer userId) { + List userAddressDOList = userAddressMapper.selectByUserId(userId); + List userAddressBOList = UserAddressConvert.INSTANCE.convertUserAddressBOList(userAddressDOList); return userAddressBOList; } @Override - public UserAddressBO getAddress(Integer userId, Integer id) { - UserAddressDO userAddress = userAddressMapper.selectById(id); - if (userAddress == null) { - throw ServiceExceptionUtil.exception(SystemErrorCodeEnum.USER_GET_ADDRESS_NOT_EXISTS.getCode()); - } - - if (DeletedStatusEnum.DELETED_YES.getValue().equals(userAddress.getDeleted())) { - throw ServiceExceptionUtil.exception(SystemErrorCodeEnum.USER_ADDRESS_IS_DELETED.getCode()); - } - - UserAddressBO userAddressBO = UserAddressConvert.INSTANCE.convert(userAddress); - return userAddressBO; + public UserAddressBO getAddress(Integer id) { + UsersUserAddressDO userAddress = userAddressMapper.selectById(id); + return UserAddressConvert.INSTANCE.convert(userAddress); } @Override public UserAddressBO getDefaultAddress(Integer userId) { - UserAddressDO defaultUserAddress = userAddressMapper.selectHasDefault(userId); + UsersUserAddressDO defaultUserAddress = userAddressMapper.selectHasDefault(userId); return UserAddressConvert.INSTANCE.convert(defaultUserAddress); } } diff --git a/user/user-rest/pom.xml b/user/user-rest/pom.xml index e5fd87907..88bfd5d54 100644 --- a/user/user-rest/pom.xml +++ b/user/user-rest/pom.xml @@ -13,17 +13,11 @@ - - - - - - - cn.iocoder.mall - common-framework + user-biz 1.0-SNAPSHOT + compile @@ -32,8 +26,16 @@ mall-spring-boot-starter-web 1.0-SNAPSHOT - - + + cn.iocoder.mall + mall-spring-boot-starter-security + 1.0-SNAPSHOT + + + cn.iocoder.mall + mall-spring-boot-starter-swagger + 1.0-SNAPSHOT + diff --git a/user/user-rest/src/main/java/cn/iocoder/mall/user/rest/controller/user/UsersUserAddressController.java b/user/user-rest/src/main/java/cn/iocoder/mall/user/rest/controller/user/UsersUserAddressController.java new file mode 100644 index 000000000..8231dca7a --- /dev/null +++ b/user/user-rest/src/main/java/cn/iocoder/mall/user/rest/controller/user/UsersUserAddressController.java @@ -0,0 +1,81 @@ +package cn.iocoder.mall.user.rest.controller.user; + +import cn.iocoder.common.framework.vo.CommonResult; +import cn.iocoder.mall.security.core.context.UserSecurityContextHolder; +import cn.iocoder.mall.user.biz.dto.user.UserAddressAddDTO; +import cn.iocoder.mall.user.biz.dto.user.UserAddressUpdateDTO; +import cn.iocoder.mall.user.biz.service.user.UserAddressService; +import cn.iocoder.mall.user.rest.convert.UserAddressConvert; +import cn.iocoder.mall.user.rest.request.user.UserAddressAddRequest; +import cn.iocoder.mall.user.rest.request.user.UserAddressUpdateRequest; +import cn.iocoder.mall.user.rest.response.user.UserAddressResponse; +import io.swagger.annotations.Api; +import io.swagger.annotations.ApiOperation; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.web.bind.annotation.*; + +import javax.validation.Valid; +import java.util.List; + +/** + * 用户地址(user API) + * + * author: sin + * time: 2020/5/8 9:50 + */ +@RestController +@Api(tags = "用户地址(user API)") +@RequestMapping("/users/user-address") +public class UsersUserAddressController { + + @Autowired + private UserAddressService userAddressService; + + @GetMapping("list-address") + @ApiOperation("获取 - 地址列表(all)") + public CommonResult> listAddress() { + Integer userId = UserSecurityContextHolder.getContext().getUserId(); + return CommonResult.success(UserAddressConvert.INSTANCE.convert(userAddressService.listAddress(userId))); + } + + @GetMapping("{addressId}") + @ApiOperation("获取 - 根据id获取") + public CommonResult getAddress(@PathVariable("addressId") Integer addressId) { + return CommonResult.success(UserAddressConvert.INSTANCE.convert(userAddressService.getAddress(addressId))); + } + + @GetMapping("default") + @ApiOperation("获取 - 获取默认地址") + public CommonResult getDefaultAddress() { + Integer userId = UserSecurityContextHolder.getContext().getUserId(); + return CommonResult.success(UserAddressConvert.INSTANCE.convert(userAddressService.getDefaultAddress(userId))); + } + + @DeleteMapping("/{addressId}/remove") + @ApiOperation("删除 - 根据id删除") + public CommonResult getDefaultAddress(@PathVariable("addressId") Integer addressId) { + Integer userId = UserSecurityContextHolder.getContext().getUserId(); + userAddressService.removeAddress(userId, addressId); + return CommonResult.success(null); + } + + @PostMapping("/add-address") + @ApiOperation("添加地址") + public CommonResult addAddress(@RequestBody @Valid UserAddressAddRequest userAddressAddRequest) { + Integer userId = UserSecurityContextHolder.getContext().getUserId(); + UserAddressAddDTO userAddressAddDTO = UserAddressConvert.INSTANCE.convert(userAddressAddRequest); + userAddressAddDTO.setUserId(userId); + userAddressService.addAddress(userAddressAddDTO); + return CommonResult.success(null); + } + + @PutMapping("/update-address") + @ApiOperation("更新地址") + public CommonResult updateAddress(@RequestBody @Valid UserAddressUpdateRequest userAddressAddRequest) { + Integer userId = UserSecurityContextHolder.getContext().getUserId(); + UserAddressUpdateDTO userAddressAddDTO = UserAddressConvert.INSTANCE.convert(userAddressAddRequest); + userAddressAddDTO.setUserId(userId); + userAddressService.updateAddress(userAddressAddDTO); + return CommonResult.success(null); + } +} diff --git a/user/user-rest/src/main/java/cn/iocoder/mall/user/rest/convert/UserAddressConvert.java b/user/user-rest/src/main/java/cn/iocoder/mall/user/rest/convert/UserAddressConvert.java new file mode 100644 index 000000000..b83de1f31 --- /dev/null +++ b/user/user-rest/src/main/java/cn/iocoder/mall/user/rest/convert/UserAddressConvert.java @@ -0,0 +1,37 @@ +package cn.iocoder.mall.user.rest.convert; + +import cn.iocoder.mall.user.biz.bo.user.UserAddressBO; +import cn.iocoder.mall.user.biz.dto.user.UserAddressAddDTO; +import cn.iocoder.mall.user.biz.dto.user.UserAddressUpdateDTO; +import cn.iocoder.mall.user.rest.request.user.UserAddressAddRequest; +import cn.iocoder.mall.user.rest.request.user.UserAddressUpdateRequest; +import cn.iocoder.mall.user.rest.response.user.UserAddressResponse; +import org.mapstruct.Mapper; +import org.mapstruct.Mappings; +import org.mapstruct.factory.Mappers; + +import java.util.List; + +/** + * 用户地址 convert + * + * author: sin + * time: 2020/5/8 10:01 + */ +@Mapper +public interface UserAddressConvert { + + UserAddressConvert INSTANCE = Mappers.getMapper(UserAddressConvert.class); + + @Mappings({}) + List convert(List userAddressBOList); + + @Mappings({}) + UserAddressResponse convert(UserAddressBO userAddressBO); + + @Mappings({}) + UserAddressAddDTO convert(UserAddressAddRequest userAddressAddRequest); + + @Mappings({}) + UserAddressUpdateDTO convert(UserAddressUpdateRequest userAddressUpdateRequest); +} diff --git a/user/user-rest/src/main/java/cn/iocoder/mall/user/rest/request/package-info.java b/user/user-rest/src/main/java/cn/iocoder/mall/user/rest/request/package-info.java new file mode 100644 index 000000000..bbf91bb60 --- /dev/null +++ b/user/user-rest/src/main/java/cn/iocoder/mall/user/rest/request/package-info.java @@ -0,0 +1,5 @@ +/** + * author: sin + * time: 2020/5/8 9:57 + */ +package cn.iocoder.mall.user.rest.request; \ No newline at end of file diff --git a/user/user-rest/src/main/java/cn/iocoder/mall/user/rest/request/user/UserAddressAddRequest.java b/user/user-rest/src/main/java/cn/iocoder/mall/user/rest/request/user/UserAddressAddRequest.java new file mode 100644 index 000000000..05353b9f0 --- /dev/null +++ b/user/user-rest/src/main/java/cn/iocoder/mall/user/rest/request/user/UserAddressAddRequest.java @@ -0,0 +1,41 @@ +package cn.iocoder.mall.user.rest.request.user; + +import io.swagger.annotations.ApiModel; +import io.swagger.annotations.ApiModelProperty; +import lombok.Data; +import lombok.experimental.Accessors; + +import javax.validation.constraints.NotNull; +import java.io.Serializable; + +/** + * 用户地址 add + * + * @author Sin + * @time 2019-04-06 13:25 + */ +@Data +@Accessors(chain = true) +@ApiModel("用户地址(添加)") +public class UserAddressAddRequest implements Serializable { + + @NotNull + @ApiModelProperty("收件区域编号") + private String areaNo; + + @NotNull + @ApiModelProperty("收件人名称") + private String name; + + @NotNull + @ApiModelProperty("收件手机号") + private String mobile; + + @NotNull + @ApiModelProperty("收件详细地址") + private String address; + + @NotNull + @ApiModelProperty("是否默认 1 不是 2 是") + private Integer hasDefault; +} diff --git a/user/user-rest/src/main/java/cn/iocoder/mall/user/rest/request/user/UserAddressUpdateRequest.java b/user/user-rest/src/main/java/cn/iocoder/mall/user/rest/request/user/UserAddressUpdateRequest.java new file mode 100644 index 000000000..e443db1a7 --- /dev/null +++ b/user/user-rest/src/main/java/cn/iocoder/mall/user/rest/request/user/UserAddressUpdateRequest.java @@ -0,0 +1,45 @@ +package cn.iocoder.mall.user.rest.request.user; + +import io.swagger.annotations.ApiModel; +import io.swagger.annotations.ApiModelProperty; +import lombok.Data; +import lombok.experimental.Accessors; + +import javax.validation.constraints.NotNull; +import java.io.Serializable; + +/** + * 用户地址 更新 + * + * @author Sin + * @time 2019-04-06 13:28 + */ +@Data +@Accessors(chain = true) +@ApiModel("用户地址(更新)") +public class UserAddressUpdateRequest implements Serializable { + + @NotNull + @ApiModelProperty("编号") + private Integer id; + + @NotNull + @ApiModelProperty("收件区域编号") + private String areaNo; + + @NotNull + @ApiModelProperty("收件人名称") + private String name; + + @NotNull + @ApiModelProperty("收件手机号") + private String mobile; + + @NotNull + @ApiModelProperty("收件详细地址") + private String address; + + @NotNull + @ApiModelProperty("是否默认地址") + private Integer hasDefault; +} diff --git a/user/user-rest/src/main/java/cn/iocoder/mall/user/rest/response/package-info.java b/user/user-rest/src/main/java/cn/iocoder/mall/user/rest/response/package-info.java new file mode 100644 index 000000000..20cf1449a --- /dev/null +++ b/user/user-rest/src/main/java/cn/iocoder/mall/user/rest/response/package-info.java @@ -0,0 +1,5 @@ +/** + * author: sin + * time: 2020/5/8 9:57 + */ +package cn.iocoder.mall.user.rest.response; \ No newline at end of file diff --git a/user/user-rest/src/main/java/cn/iocoder/mall/user/rest/response/user/UserAddressResponse.java b/user/user-rest/src/main/java/cn/iocoder/mall/user/rest/response/user/UserAddressResponse.java new file mode 100644 index 000000000..0de88b4cd --- /dev/null +++ b/user/user-rest/src/main/java/cn/iocoder/mall/user/rest/response/user/UserAddressResponse.java @@ -0,0 +1,41 @@ +package cn.iocoder.mall.user.rest.response.user; + +import io.swagger.annotations.ApiModel; +import io.swagger.annotations.ApiModelProperty; +import lombok.Data; +import lombok.experimental.Accessors; + +import java.io.Serializable; + +/** + * 用户地址 + * + * @author Sin + * @time 2019-04-06 13:28 + */ +@Data +@Accessors(chain = true) +@ApiModel(value = "用户地址") +public class UserAddressResponse implements Serializable { + + @ApiModelProperty("编号") + private Integer id; + + @ApiModelProperty("用户编号") + private Integer userId; + + @ApiModelProperty("收件区域编号") + private String areaNo; + + @ApiModelProperty("收件人名称") + private String name; + + @ApiModelProperty("收件手机号") + private String mobile; + + @ApiModelProperty("收件详细地址") + private String address; + + @ApiModelProperty("是否默认") + private Integer hasDefault; +} diff --git a/user/user-rpc-api/src/main/java/cn/iocoder/mall/user/rpc/api/UserAddressRPC.java b/user/user-rpc-api/src/main/java/cn/iocoder/mall/user/rpc/api/UserAddressRPC.java index cb58c1c4f..409d76d74 100644 --- a/user/user-rpc-api/src/main/java/cn/iocoder/mall/user/rpc/api/UserAddressRPC.java +++ b/user/user-rpc-api/src/main/java/cn/iocoder/mall/user/rpc/api/UserAddressRPC.java @@ -22,7 +22,7 @@ public interface UserAddressRPC { List addressList(Integer userId); - UserAddressResponse getAddress(Integer userId, Integer id); + UserAddressResponse getAddress(Integer id); UserAddressResponse getDefaultAddress(Integer userId); } diff --git a/user/user-rpc/src/main/java/cn/iocoder/mall/user/rpc/rpc/user/UserAddressRPCImpl.java b/user/user-rpc/src/main/java/cn/iocoder/mall/user/rpc/rpc/user/UserAddressRPCImpl.java index 6feb5d39f..60dea4528 100644 --- a/user/user-rpc/src/main/java/cn/iocoder/mall/user/rpc/rpc/user/UserAddressRPCImpl.java +++ b/user/user-rpc/src/main/java/cn/iocoder/mall/user/rpc/rpc/user/UserAddressRPCImpl.java @@ -34,12 +34,12 @@ public class UserAddressRPCImpl implements UserAddressRPC { @Override public List addressList(Integer userId) { - return UserAddressRPCConvert.INSTANCE.convert(userAddressService.addressList(userId)); + return UserAddressRPCConvert.INSTANCE.convert(userAddressService.listAddress(userId)); } @Override - public UserAddressResponse getAddress(Integer userId, Integer id) { - return UserAddressRPCConvert.INSTANCE.convert(userAddressService.getAddress(userId, id)); + public UserAddressResponse getAddress(Integer id) { + return UserAddressRPCConvert.INSTANCE.convert(userAddressService.getAddress(id)); } @Override