diff --git a/ghy-admin/src/main/java/com/ghy/web/controller/order/OrderController.java b/ghy-admin/src/main/java/com/ghy/web/controller/order/OrderController.java index 08f75d0e..9de227e3 100644 --- a/ghy-admin/src/main/java/com/ghy/web/controller/order/OrderController.java +++ b/ghy-admin/src/main/java/com/ghy/web/controller/order/OrderController.java @@ -5,22 +5,28 @@ import com.ghy.common.core.domain.AjaxResult; import com.ghy.common.utils.StringUtils; import com.ghy.customer.domain.Customer; import com.ghy.customer.service.CustomerService; +import com.ghy.goods.domain.Goods; +import com.ghy.goods.request.AppGoodsRequest; import com.ghy.goods.service.GoodsService; +import com.ghy.order.domain.OrderGoods; import com.ghy.order.domain.OrderMaster; import com.ghy.order.request.AppOrderRequest; import com.ghy.order.service.OrderDetailService; +import com.ghy.order.service.OrderGoodsService; import com.ghy.order.service.OrderMasterService; import com.ghy.payment.service.FinancialDetailService; import com.ghy.payment.service.FinancialMasterService; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Controller; +import org.springframework.util.Assert; import org.springframework.web.bind.annotation.PostMapping; import org.springframework.web.bind.annotation.RequestBody; import org.springframework.web.bind.annotation.RequestMapping; import org.springframework.web.bind.annotation.ResponseBody; import java.math.BigDecimal; -import java.util.Date; +import java.util.*; +import java.util.stream.Collectors; /** * @author clunt @@ -42,6 +48,9 @@ public class OrderController extends BaseController { @Autowired private OrderDetailService orderDetailService; + @Autowired + private OrderGoodsService orderGoodsService; + @Autowired private FinancialMasterService financialMasterService; @@ -51,19 +60,20 @@ public class OrderController extends BaseController { @PostMapping("/server/app") @ResponseBody - public AjaxResult appOrder(@RequestBody AppOrderRequest appOrderRequest){ + public AjaxResult appOrder(@RequestBody AppOrderRequest appOrderRequest) { // 校验用户信息 Customer customer = customerService.selectByCustomerId(appOrderRequest.getCustomerId()); - if(StringUtils.isNull(customer)){ + if (StringUtils.isNull(customer)) { return AjaxResult.error("用户不存在!"); } + List appGoodsList = appOrderRequest.getGoodsList(); // 校验商品信息(库存) - boolean flag = goodsService.checkStore(appOrderRequest.getGoodsList()); - if(!flag){ + boolean flag = goodsService.checkStore(appGoodsList); + if (!flag) { return AjaxResult.error("库存不足!"); } // 计算商品费用 - BigDecimal totalPay = goodsService.calculate(appOrderRequest.getGoodsList()); + BigDecimal totalPay = goodsService.calculate(appGoodsList); // 生成主单 OrderMaster orderMaster = new OrderMaster(); orderMaster.setCode(orderMasterService.createOrderCode()); @@ -73,12 +83,24 @@ public class OrderController extends BaseController { orderMaster.setPayStatus(0); orderMaster.setCreateTime(new Date()); orderMasterService.insertOrderMaster(orderMaster); + Assert.notNull(orderMaster.getId(), "OrderMaster ID is null!"); + //TODO 生成财务主单 //TODO 生成细单 //TODO 生成财务细单(含分销等.) + // 生成商品订单 + Set goodsIds = appGoodsList.stream().map(AppGoodsRequest::getGoodsId).collect(Collectors.toSet()); + Map goodsMap = goodsService.selectByIds(goodsIds).stream().filter(Objects::nonNull) + .collect(Collectors.toMap(Goods::getGoodsId, x -> x)); + for (AppGoodsRequest appGoods : appGoodsList) { + Goods goods = goodsMap.get(appGoods.getGoodsId()); + OrderGoods orderGoods = new OrderGoods(orderMaster.getId(), goods.getGoodsId(), goods.getGoodsName(), appGoods.getNum(), 0); + orderGoodsService.insertOrderGoods(orderGoods); + } + return AjaxResult.success(orderMaster); } diff --git a/ghy-goods/src/main/java/com/ghy/goods/mapper/GoodsMapper.java b/ghy-goods/src/main/java/com/ghy/goods/mapper/GoodsMapper.java index 6c8bf8a8..26771226 100644 --- a/ghy-goods/src/main/java/com/ghy/goods/mapper/GoodsMapper.java +++ b/ghy-goods/src/main/java/com/ghy/goods/mapper/GoodsMapper.java @@ -4,6 +4,7 @@ import com.ghy.goods.domain.Goods; import com.ghy.goods.request.AppGoodsRequest; import org.apache.ibatis.annotations.Param; +import java.util.Collection; import java.util.List; /** @@ -80,4 +81,11 @@ public interface GoodsMapper { * @return */ int setCode(@Param("goodsId") Long goodsId, @Param("goodsCode") String goodsCode); + + /** + * 用商品ID批量查询 + * + * @param ids 商品ID + */ + List selectByIds(Collection ids); } diff --git a/ghy-goods/src/main/java/com/ghy/goods/service/GoodsService.java b/ghy-goods/src/main/java/com/ghy/goods/service/GoodsService.java index 6ef60a5d..89abfb12 100644 --- a/ghy-goods/src/main/java/com/ghy/goods/service/GoodsService.java +++ b/ghy-goods/src/main/java/com/ghy/goods/service/GoodsService.java @@ -4,6 +4,7 @@ import com.ghy.goods.domain.Goods; import com.ghy.goods.request.AppGoodsRequest; import java.math.BigDecimal; +import java.util.Collection; import java.util.List; /** @@ -72,4 +73,10 @@ public interface GoodsService { */ String checkGoodsCodeUnique(Goods goods); + /** + * 用商品ID批量查询 + * + * @param ids 商品ID + */ + List selectByIds(Collection ids); } diff --git a/ghy-goods/src/main/java/com/ghy/goods/service/impl/GoodsServiceImpl.java b/ghy-goods/src/main/java/com/ghy/goods/service/impl/GoodsServiceImpl.java index 64ce7489..fcaabcdb 100644 --- a/ghy-goods/src/main/java/com/ghy/goods/service/impl/GoodsServiceImpl.java +++ b/ghy-goods/src/main/java/com/ghy/goods/service/impl/GoodsServiceImpl.java @@ -14,6 +14,7 @@ import org.springframework.util.Assert; import javax.annotation.Resource; import java.math.BigDecimal; +import java.util.Collection; import java.util.List; /** @@ -41,7 +42,7 @@ public class GoodsServiceImpl implements GoodsService { @Override public BigDecimal calculate(List goodsList) { BigDecimal totalPay = BigDecimal.ZERO; - for (AppGoodsRequest appGoodsRequest : goodsList){ + for (AppGoodsRequest appGoodsRequest : goodsList) { Goods goods = goodsMapper.selectById(appGoodsRequest.getGoodsId()); totalPay = totalPay.add(goods.getGoodsPrice().multiply(BigDecimal.valueOf(appGoodsRequest.getNum()))); } @@ -104,6 +105,11 @@ public class GoodsServiceImpl implements GoodsService { return UserConstants.GOODS_CODE_UNIQUE; } + @Override + public List selectByIds(Collection ids) { + return goodsMapper.selectByIds(ids); + } + public int countUserGoodsById(Goods goods) { //TODO 校验商品是否上架 diff --git a/ghy-goods/src/main/resources/mapper/goods/GoodsMapper.xml b/ghy-goods/src/main/resources/mapper/goods/GoodsMapper.xml index d23a63b8..ea2d4e94 100644 --- a/ghy-goods/src/main/resources/mapper/goods/GoodsMapper.xml +++ b/ghy-goods/src/main/resources/mapper/goods/GoodsMapper.xml @@ -138,4 +138,11 @@ WHERE dept_goods_category_id = #{deptGoodsCategoryId} LIMIT 1 + \ No newline at end of file diff --git a/ghy-order/src/main/java/com/ghy/order/domain/OrderGoods.java b/ghy-order/src/main/java/com/ghy/order/domain/OrderGoods.java index 7d133d87..c62b64fa 100644 --- a/ghy-order/src/main/java/com/ghy/order/domain/OrderGoods.java +++ b/ghy-order/src/main/java/com/ghy/order/domain/OrderGoods.java @@ -38,4 +38,14 @@ public class OrderGoods extends BaseEntity { @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss") private Date finishTime; + public OrderGoods() { + } + + public OrderGoods(Long orderId, Long goodsId, String goodsName, Integer goodsNum, Integer serverGoodsNum) { + this.orderId = orderId; + this.goodsId = goodsId; + this.goodsName = goodsName; + this.goodsNum = goodsNum; + this.serverGoodsNum = serverGoodsNum; + } }