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