From d0028c4028e0eb447f36d24f3ef9bd790eb0540c Mon Sep 17 00:00:00 2001
From: shiyj1101 <1098226878@qq.com>
Date: 星期三, 16 六月 2021 16:44:39 +0800
Subject: [PATCH] 账户提现新增功能完善

---
 service-goods/src/main/java/com/java110/goods/bmo/storeOrder/impl/SaveStoreOrderBMOImpl.java |  254 +++++++++++++++++++++++++++++++++++++++++++++++++-
 1 files changed, 249 insertions(+), 5 deletions(-)

diff --git a/service-goods/src/main/java/com/java110/goods/bmo/storeOrder/impl/SaveStoreOrderBMOImpl.java b/service-goods/src/main/java/com/java110/goods/bmo/storeOrder/impl/SaveStoreOrderBMOImpl.java
old mode 100644
new mode 100755
index 24bcbe7..2dab842
--- a/service-goods/src/main/java/com/java110/goods/bmo/storeOrder/impl/SaveStoreOrderBMOImpl.java
+++ b/service-goods/src/main/java/com/java110/goods/bmo/storeOrder/impl/SaveStoreOrderBMOImpl.java
@@ -1,14 +1,40 @@
 package com.java110.goods.bmo.storeOrder.impl;
 
+import com.alibaba.fastjson.JSONArray;
+import com.alibaba.fastjson.JSONObject;
 import com.java110.core.annotation.Java110Transactional;
 import com.java110.core.factory.GenerateCodeFactory;
+import com.java110.core.factory.Java110TransactionalFactory;
+import com.java110.dto.groupBuyProductSpec.GroupBuyProductSpecDto;
+import com.java110.dto.productSpecValue.ProductSpecValueDto;
+import com.java110.dto.storeOrder.StoreOrderDto;
+import com.java110.dto.storeOrderCart.StoreOrderCartDto;
+import com.java110.dto.userAddress.UserAddressDto;
 import com.java110.goods.bmo.storeOrder.ISaveStoreOrderBMO;
-import com.java110.intf.IStoreOrderInnerServiceSMO;
+import com.java110.intf.goods.IGroupBuyProductSpecInnerServiceSMO;
+import com.java110.intf.goods.IProductInnerServiceSMO;
+import com.java110.intf.goods.IProductSpecValueInnerServiceSMO;
+import com.java110.intf.goods.IStoreOrderAddressInnerServiceSMO;
+import com.java110.intf.goods.IStoreOrderCartEventInnerServiceSMO;
+import com.java110.intf.goods.IStoreOrderCartInnerServiceSMO;
+import com.java110.intf.goods.IStoreOrderInnerServiceSMO;
+import com.java110.intf.user.IUserAddressInnerServiceSMO;
+import com.java110.po.groupBuyProductSpec.GroupBuyProductSpecPo;
+import com.java110.po.productSpecValue.ProductSpecValuePo;
 import com.java110.po.storeOrder.StoreOrderPo;
+import com.java110.po.storeOrderAddress.StoreOrderAddressPo;
+import com.java110.po.storeOrderCart.StoreOrderCartPo;
+import com.java110.po.storeOrderCartEvent.StoreOrderCartEventPo;
+import com.java110.utils.lock.DistributedLock;
+import com.java110.utils.util.Assert;
+import com.java110.utils.util.StringUtil;
 import com.java110.vo.ResultVo;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.http.ResponseEntity;
 import org.springframework.stereotype.Service;
+
+import java.math.BigDecimal;
+import java.util.List;
 
 @Service("saveStoreOrderBMOImpl")
 public class SaveStoreOrderBMOImpl implements ISaveStoreOrderBMO {
@@ -16,23 +42,241 @@
     @Autowired
     private IStoreOrderInnerServiceSMO storeOrderInnerServiceSMOImpl;
 
+    @Autowired
+    private IStoreOrderCartInnerServiceSMO storeOrderCartInnerServiceSMOImpl;
+
+    @Autowired
+    private IProductInnerServiceSMO productInnerServiceSMOImpl;
+
+    @Autowired
+    private IProductSpecValueInnerServiceSMO productSpecValueInnerServiceSMOImpl;
+
+    @Autowired
+    private IGroupBuyProductSpecInnerServiceSMO groupBuyProductSpecInnerServiceSMOImpl;
+
+    @Autowired
+    private IUserAddressInnerServiceSMO userAddressInnerServiceSMOImpl;
+
+    @Autowired
+    private IStoreOrderAddressInnerServiceSMO storeOrderAddressInnerServiceSMOImpl;
+
+    @Autowired
+    private IStoreOrderCartEventInnerServiceSMO storeOrderCartEventInnerServiceSMOImpl;
+
     /**
      * 娣诲姞灏忓尯淇℃伅
      *
      * @param storeOrderPo
+     * @param goodsList    [
+     *                     {
+     *                     cartId:"123",//娌℃湁鍐�-1
+     *                     productId:"浜у搧ID",
+     *                     valueId:"浜у搧瑙勬牸ID",
+     *                     goodsNum:1,//璐拱鏁伴噺
+     *                     storeId:"浜у搧鍟嗘埛ID",
+     *                     <p>
+     *                     }
+     *                     ]
      * @return 璁㈠崟鏈嶅姟鑳藉鎺ュ彈鐨勬姤鏂�
      */
     @Java110Transactional
-    public ResponseEntity<String> save(StoreOrderPo storeOrderPo) {
+    public ResponseEntity<String> save(StoreOrderPo storeOrderPo, JSONArray goodsList, String addressId) {
 
         storeOrderPo.setOrderId(GenerateCodeFactory.getGeneratorId(GenerateCodeFactory.CODE_PREFIX_orderId));
+        storeOrderPo.setPayPrice("0");
+        storeOrderPo.setTotalPrice("0");
+        storeOrderPo.setFreightPrice("0");
+        storeOrderPo.setState(StoreOrderDto.STATE_WAIT_PAY);
+        storeOrderPo.setOId(StringUtil.isEmpty(Java110TransactionalFactory.getOId()) ? "-1" : Java110TransactionalFactory.getOId());
+        JSONObject goods = null;
+        for (int goodsIndex = 0; goodsIndex < goodsList.size(); goodsIndex++) {
+            goods = goodsList.getJSONObject(goodsIndex);
+
+            saveStoreOrderCart(goods, storeOrderPo);
+        }
         int flag = storeOrderInnerServiceSMOImpl.saveStoreOrder(storeOrderPo);
 
-        if (flag > 0) {
-            return ResultVo.createResponseEntity(ResultVo.CODE_OK, "淇濆瓨鎴愬姛");
+        if (flag < 1) {
+            return ResultVo.createResponseEntity(ResultVo.CODE_ERROR, "淇濆瓨澶辫触");
         }
 
-        return ResultVo.createResponseEntity(ResultVo.CODE_ERROR, "淇濆瓨澶辫触");
+        //淇濆瓨鏀惰揣浜轰俊鎭�
+        saveOrderAddress(storeOrderPo, addressId);
+
+        return ResultVo.createResponseEntity(ResultVo.CODE_OK, "淇濆瓨鎴愬姛", storeOrderPo);
+
+    }
+
+    private void saveOrderAddress(StoreOrderPo storeOrderPo, String addressId) {
+
+        UserAddressDto userAddressDto = new UserAddressDto();
+        userAddressDto.setAddressId(addressId);
+        userAddressDto.setUserId(storeOrderPo.getPersonId());
+        List<UserAddressDto> userAddressDtos = userAddressInnerServiceSMOImpl.queryUserAddresss(userAddressDto);
+
+        Assert.listOnlyOne(userAddressDtos, "鏈壘鍒版敹璐т汉淇℃伅");
+
+        userAddressDto = userAddressDtos.get(0);
+
+        StoreOrderAddressPo storeOrderAddressPo = new StoreOrderAddressPo();
+        storeOrderAddressPo.setAddress(userAddressDto.getAddress());
+        storeOrderAddressPo.setAddressId(userAddressDto.getAddressId());
+        storeOrderAddressPo.setAreaCode(userAddressDto.getAreaCode());
+        storeOrderAddressPo.setOaId(GenerateCodeFactory.getGeneratorId(GenerateCodeFactory.CODE_PREFIX_oaId));
+        storeOrderAddressPo.setOrderId(storeOrderPo.getOrderId());
+        storeOrderAddressPo.setTel(userAddressDto.getTel());
+        storeOrderAddressPo.setUsername(userAddressDto.getUsername());
+
+        int flag = storeOrderAddressInnerServiceSMOImpl.saveStoreOrderAddress(storeOrderAddressPo);
+
+        if (flag < 1) {
+            throw new IllegalArgumentException("淇濆瓨鏀惰揣浜轰俊鎭け璐�");
+        }
+
+    }
+
+    /**
+     * 淇濆瓨璐墿杞�
+     *
+     * @param goods        鍟嗗搧
+     * @param storeOrderPo
+     */
+    private void saveStoreOrderCart(JSONObject goods, StoreOrderPo storeOrderPo) {
+
+        Assert.hasKeyAndValue(goods, "cartId", "鏈寘鍚喘鐗╄溅ID");
+        Assert.hasKeyAndValue(goods, "productId", "鏈寘鍚晢鍝�");
+        Assert.hasKeyAndValue(goods, "valueId", "鏈寘鍚晢鍝佽鏍�");
+        Assert.hasKeyAndValue(goods, "goodsNum", "鏈寘鍚晢鍝佹暟閲�");
+        Assert.hasKeyAndValue(goods, "storeId", "鏈寘鍚晢鎴�");
+
+        int flag = 0;
+        ProductSpecValueDto productSpecValueDto = null;
+        GroupBuyProductSpecDto groupBuyProductSpecDto = null;
+        //寮�濮嬮攣浠g爜
+        String requestId = DistributedLock.getLockUUID();
+        String key = this.getClass().getSimpleName() + goods.getString("productId") + goods.getString("valueId");
+        try {
+            DistributedLock.waitGetDistributedLock(key, requestId);
+            productSpecValueDto = getProductSpecValueDto(goods);
+            //鏌ヨ鏄惁 鎷煎洟浜у搧
+            groupBuyProductSpecDto = getGroupBuyProduct(productSpecValueDto);
+        } finally {
+            DistributedLock.releaseDistributedLock(requestId, key);
+        }
+
+        if (goods.getString("cartId").startsWith("-")) {
+            goods.put("cartId", GenerateCodeFactory.getGeneratorId(GenerateCodeFactory.CODE_PREFIX_cartId));
+        }
+
+        String payPrice = groupBuyProductSpecDto == null ? productSpecValueDto.getPrice() : groupBuyProductSpecDto.getGroupPrice();
+
+        StoreOrderCartPo storeOrderCartPo = new StoreOrderCartPo();
+        storeOrderCartPo.setCartId(goods.getString("cartId"));
+        storeOrderCartPo.setCartNum(goods.getString("goodsNum"));
+        storeOrderCartPo.setFreightPrice("0");
+        storeOrderCartPo.setOrderId(storeOrderPo.getOrderId());
+        storeOrderCartPo.setPayPrice(payPrice);
+        storeOrderCartPo.setPersonId(storeOrderPo.getPersonId());
+        storeOrderCartPo.setProductId(goods.getString("productId"));
+        storeOrderCartPo.setState(StoreOrderCartDto.STATE_WAIT_BUY);
+        storeOrderCartPo.setStoreId(goods.getString("storeId"));
+        storeOrderCartPo.setValueId(goods.getString("valueId"));
+        storeOrderCartPo.setPrice(productSpecValueDto.getPrice());
+
+        flag = storeOrderCartInnerServiceSMOImpl.saveStoreOrderCart(storeOrderCartPo);
+
+        if (flag < 1) {
+            throw new IllegalArgumentException("淇濆瓨璐墿杞﹀け璐�");
+        }
+
+        StoreOrderCartEventPo storeOrderCartEventPo = new StoreOrderCartEventPo();
+        storeOrderCartEventPo.setCartId(storeOrderCartPo.getCartId());
+        storeOrderCartEventPo.setOrderId(storeOrderCartPo.getOrderId());
+        storeOrderCartEventPo.setEventId(GenerateCodeFactory.getGeneratorId(GenerateCodeFactory.CODE_PREFIX_eventId));
+        storeOrderCartEventPo.setEventObjType("U");
+        storeOrderCartEventPo.setEventObjId(storeOrderPo.getPersonId());
+        storeOrderCartEventPo.setEventMsg("鐢ㄦ埛涓嬪崟");
+
+        flag = storeOrderCartEventInnerServiceSMOImpl.saveStoreOrderCartEvent(storeOrderCartEventPo);
+
+        if (flag < 1) {
+            throw new IllegalArgumentException("淇濆瓨璐墿杞︿簨浠跺け璐�");
+        }
+
+        BigDecimal orderPayPrice = new BigDecimal(Double.parseDouble(storeOrderPo.getPayPrice()));
+
+        double oPayPrice = orderPayPrice.add(new BigDecimal(Double.parseDouble(payPrice))).setScale(2, BigDecimal.ROUND_HALF_UP).doubleValue();
+
+        storeOrderPo.setPayPrice(oPayPrice + "");
+
+        BigDecimal orderPrice = new BigDecimal(Double.parseDouble(storeOrderPo.getTotalPrice()));
+
+        double oPrice = orderPrice.add(new BigDecimal(Double.parseDouble(storeOrderCartPo.getPrice()))).setScale(2, BigDecimal.ROUND_HALF_UP).doubleValue();
+
+        storeOrderPo.setPayPrice(oPrice + "");
+
+    }
+
+    private GroupBuyProductSpecDto getGroupBuyProduct(ProductSpecValueDto productSpecValueDto) {
+        GroupBuyProductSpecDto groupBuyProductSpecDto;
+        int flag;
+        groupBuyProductSpecDto = new GroupBuyProductSpecDto();
+        groupBuyProductSpecDto.setStoreId(productSpecValueDto.getStoreId());
+        groupBuyProductSpecDto.setProductId(productSpecValueDto.getProductId());
+        groupBuyProductSpecDto.setValueId(productSpecValueDto.getValueId());
+        List<GroupBuyProductSpecDto> groupBuyProductSpecDtos = groupBuyProductSpecInnerServiceSMOImpl.queryGroupBuyProductSpecs(groupBuyProductSpecDto);
+
+        if (groupBuyProductSpecDtos == null || groupBuyProductSpecDtos.size() < 1) {
+            return null;
+        }
+
+        groupBuyProductSpecDto = groupBuyProductSpecDtos.get(0);
+
+        int groupStock = Integer.parseInt(groupBuyProductSpecDto.getStock());
+        if (groupStock < 1) {
+            return null;
+        }
+        GroupBuyProductSpecPo groupBuyProductSpecPo = new GroupBuyProductSpecPo();
+        groupBuyProductSpecPo.setStoreId(productSpecValueDto.getStoreId());
+        groupBuyProductSpecPo.setProductId(productSpecValueDto.getProductId());
+        groupBuyProductSpecPo.setValueId(productSpecValueDto.getValueId());
+        groupBuyProductSpecPo.setGroupStock((groupStock - 1) + "");
+        groupBuyProductSpecPo.setGroupSales((Integer.parseInt(groupBuyProductSpecDto.getGroupSales()) + 1) + "");
+        flag = groupBuyProductSpecInnerServiceSMOImpl.updateGroupBuyProductSpec(groupBuyProductSpecPo);
+        if (flag < 1) {
+            throw new IllegalArgumentException("鍑忓簱瀛樺け璐�");
+        }
+        return groupBuyProductSpecDto;
+    }
+
+    private ProductSpecValueDto getProductSpecValueDto(JSONObject goods) {
+        ProductSpecValueDto productSpecValueDto;
+        int flag;//鏌ヨ 浜у搧 鍙婁环鏍� 骞朵笖 鍑忓簱瀛�
+        productSpecValueDto = new ProductSpecValueDto();
+        productSpecValueDto.setProductId(goods.getString("productId"));
+        productSpecValueDto.setValueId(goods.getString("valueId"));
+        productSpecValueDto.setStoreId(goods.getString("storeId"));
+        List<ProductSpecValueDto> productSpecValueDtos = productSpecValueInnerServiceSMOImpl.queryProductSpecValues(productSpecValueDto);
+        Assert.listOnlyOne(productSpecValueDtos, "涓嶅瓨鍦� 璇ヤ骇鍝佷俊鎭�");
+
+        productSpecValueDto = productSpecValueDtos.get(0);
+
+        int stock = Integer.parseInt(productSpecValueDto.getStock());
+
+        if (stock < 1) {
+            throw new IllegalArgumentException("搴撳瓨涓嶈冻");
+        }
+        ProductSpecValuePo productSpecValuePo = new ProductSpecValuePo();
+        productSpecValuePo.setValueId(productSpecValueDto.getValueId());
+        productSpecValuePo.setProductId(productSpecValueDto.getProductId());
+        productSpecValuePo.setStoreId(productSpecValueDto.getStoreId());
+        productSpecValuePo.setSales((Integer.parseInt(productSpecValueDto.getSales()) + 1) + "");
+        productSpecValuePo.setStock((stock - 1) + "");
+        flag = productSpecValueInnerServiceSMOImpl.updateProductSpecValue(productSpecValuePo);
+        if (flag < 1) {
+            throw new IllegalArgumentException("鍑忓簱瀛樺け璐�");
+        }
+        return productSpecValueDto;
     }
 
 }

--
Gitblit v1.8.0