java110 5 lat temu
rodzic
commit
c6352f6330

+ 51 - 28
java110-bean/src/main/java/com/java110/dto/storeOrder/StoreOrderDto.java

@@ -1,6 +1,7 @@
 package com.java110.dto.storeOrder;
 
 import com.java110.dto.PageDto;
+
 import java.io.Serializable;
 import java.util.Date;
 
@@ -14,16 +15,19 @@ import java.util.Date;
  **/
 public class StoreOrderDto extends PageDto implements Serializable {
 
+
+    public static final String STATE_WAIT_PAY = "1";
+    public static final String STATE_FINISH_PAY = "0";
     private String personName;
-private String extOrderId;
-private String orderId;
-private String totalPrice;
-private String payPrice;
-private String personId;
-private String remark;
-private String oId;
-private String state;
-private String freightPrice;
+    private String extOrderId;
+    private String orderId;
+    private String totalPrice;
+    private String payPrice;
+    private String personId;
+    private String remark;
+    private String oId;
+    private String state;
+    private String freightPrice;
 
 
     private Date createTime;
@@ -34,61 +38,80 @@ private String freightPrice;
     public String getPersonName() {
         return personName;
     }
-public void setPersonName(String personName) {
+
+    public void setPersonName(String personName) {
         this.personName = personName;
     }
-public String getExtOrderId() {
+
+    public String getExtOrderId() {
         return extOrderId;
     }
-public void setExtOrderId(String extOrderId) {
+
+    public void setExtOrderId(String extOrderId) {
         this.extOrderId = extOrderId;
     }
-public String getOrderId() {
+
+    public String getOrderId() {
         return orderId;
     }
-public void setOrderId(String orderId) {
+
+    public void setOrderId(String orderId) {
         this.orderId = orderId;
     }
-public String getTotalPrice() {
+
+    public String getTotalPrice() {
         return totalPrice;
     }
-public void setTotalPrice(String totalPrice) {
+
+    public void setTotalPrice(String totalPrice) {
         this.totalPrice = totalPrice;
     }
-public String getPayPrice() {
+
+    public String getPayPrice() {
         return payPrice;
     }
-public void setPayPrice(String payPrice) {
+
+    public void setPayPrice(String payPrice) {
         this.payPrice = payPrice;
     }
-public String getPersonId() {
+
+    public String getPersonId() {
         return personId;
     }
-public void setPersonId(String personId) {
+
+    public void setPersonId(String personId) {
         this.personId = personId;
     }
-public String getRemark() {
+
+    public String getRemark() {
         return remark;
     }
-public void setRemark(String remark) {
+
+    public void setRemark(String remark) {
         this.remark = remark;
     }
-public String getOId() {
+
+    public String getOId() {
         return oId;
     }
-public void setOId(String oId) {
+
+    public void setOId(String oId) {
         this.oId = oId;
     }
-public String getState() {
+
+    public String getState() {
         return state;
     }
-public void setState(String state) {
+
+    public void setState(String state) {
         this.state = state;
     }
-public String getFreightPrice() {
+
+    public String getFreightPrice() {
         return freightPrice;
     }
-public void setFreightPrice(String freightPrice) {
+
+    public void setFreightPrice(String freightPrice) {
         this.freightPrice = freightPrice;
     }
 

+ 61 - 34
java110-bean/src/main/java/com/java110/dto/storeOrderCart/StoreOrderCartDto.java

@@ -1,6 +1,7 @@
 package com.java110.dto.storeOrderCart;
 
 import com.java110.dto.PageDto;
+
 import java.io.Serializable;
 import java.util.Date;
 
@@ -14,18 +15,21 @@ import java.util.Date;
  **/
 public class StoreOrderCartDto extends PageDto implements Serializable {
 
+    public static final String STATE_WAIT_BUY = "1001";//未购买
+    public static final String STATE_FINISH_BUY = "2002";//已支付
+
     private String valueId;
-private String productId;
-private String orderId;
-private String cartId;
-private String remark;
-private String storeId;
-private String cartNum;
-private String price;
-private String payPrice;
-private String personId;
-private String state;
-private String freightPrice;
+    private String productId;
+    private String orderId;
+    private String cartId;
+    private String remark;
+    private String storeId;
+    private String cartNum;
+    private String price;
+    private String payPrice;
+    private String personId;
+    private String state;
+    private String freightPrice;
 
 
     private Date createTime;
@@ -36,73 +40,96 @@ private String freightPrice;
     public String getValueId() {
         return valueId;
     }
-public void setValueId(String valueId) {
+
+    public void setValueId(String valueId) {
         this.valueId = valueId;
     }
-public String getProductId() {
+
+    public String getProductId() {
         return productId;
     }
-public void setProductId(String productId) {
+
+    public void setProductId(String productId) {
         this.productId = productId;
     }
-public String getOrderId() {
+
+    public String getOrderId() {
         return orderId;
     }
-public void setOrderId(String orderId) {
+
+    public void setOrderId(String orderId) {
         this.orderId = orderId;
     }
-public String getCartId() {
+
+    public String getCartId() {
         return cartId;
     }
-public void setCartId(String cartId) {
+
+    public void setCartId(String cartId) {
         this.cartId = cartId;
     }
-public String getRemark() {
+
+    public String getRemark() {
         return remark;
     }
-public void setRemark(String remark) {
+
+    public void setRemark(String remark) {
         this.remark = remark;
     }
-public String getStoreId() {
+
+    public String getStoreId() {
         return storeId;
     }
-public void setStoreId(String storeId) {
+
+    public void setStoreId(String storeId) {
         this.storeId = storeId;
     }
-public String getCartNum() {
+
+    public String getCartNum() {
         return cartNum;
     }
-public void setCartNum(String cartNum) {
+
+    public void setCartNum(String cartNum) {
         this.cartNum = cartNum;
     }
-public String getPrice() {
+
+    public String getPrice() {
         return price;
     }
-public void setPrice(String price) {
+
+    public void setPrice(String price) {
         this.price = price;
     }
-public String getPayPrice() {
+
+    public String getPayPrice() {
         return payPrice;
     }
-public void setPayPrice(String payPrice) {
+
+    public void setPayPrice(String payPrice) {
         this.payPrice = payPrice;
     }
-public String getPersonId() {
+
+    public String getPersonId() {
         return personId;
     }
-public void setPersonId(String personId) {
+
+    public void setPersonId(String personId) {
         this.personId = personId;
     }
-public String getState() {
+
+    public String getState() {
         return state;
     }
-public void setState(String state) {
+
+    public void setState(String state) {
         this.state = state;
     }
-public String getFreightPrice() {
+
+    public String getFreightPrice() {
         return freightPrice;
     }
-public void setFreightPrice(String freightPrice) {
+
+    public void setFreightPrice(String freightPrice) {
         this.freightPrice = freightPrice;
     }
 

+ 3 - 3
service-front/src/main/java/com/java110/front/smo/payment/impl/GoodsToPaySMOImpl.java

@@ -70,15 +70,15 @@ public class GoodsToPaySMOImpl extends AppAbstractComponentSMO implements IGoods
 
         //查询用户ID
         paramIn.put("userId", pd.getUserId());
-        String url = ServiceConstant.SERVICE_API_URL + "/api/fee.payFeePre";
+        String url = ServiceConstant.SERVICE_API_URL + "/app/storeOrder/saveStoreOrder";
         responseEntity = super.callCenterService(restTemplate, pd, paramIn.toJSONString(), url, HttpMethod.POST);
 
         if (responseEntity.getStatusCode() != HttpStatus.OK) {
             return responseEntity;
         }
         JSONObject orderInfo = JSONObject.parseObject(responseEntity.getBody().toString());
-        String orderId = orderInfo.getString("oId");
-        double money = Double.parseDouble(orderInfo.getString("receivableAmount"));
+        String orderId = orderInfo.getString("orderId");
+        double money = Double.parseDouble(orderInfo.getString("payPrice"));
         String appType = OwnerAppUserDto.APP_TYPE_WECHAT_MINA;
         if (AppDto.WECHAT_OWNER_APP_ID.equals(pd.getAppId())) {
             appType = OwnerAppUserDto.APP_TYPE_WECHAT;

+ 2 - 4
service-goods/src/main/java/com/java110/goods/api/StoreOrderApi.java

@@ -79,12 +79,10 @@ public class StoreOrderApi {
 
         Assert.hasKeyAndValue(reqJson, "personId", "请求报文中未包含personId");
         Assert.hasKeyAndValue(reqJson, "personName", "请求报文中未包含personName");
-        Assert.hasKeyAndValue(reqJson, "totalPrice", "请求报文中未包含totalPrice");
-        Assert.hasKeyAndValue(reqJson, "payPrice", "请求报文中未包含payPrice");
-
+        Assert.hasKey(reqJson, "goodsList", "未包含商品信息");
 
         StoreOrderPo storeOrderPo = BeanConvertUtil.covertBean(reqJson, StoreOrderPo.class);
-        return saveStoreOrderBMOImpl.save(storeOrderPo);
+        return saveStoreOrderBMOImpl.save(storeOrderPo,reqJson.getJSONArray("goodsList"));
     }
 
     /**

+ 2 - 1
service-goods/src/main/java/com/java110/goods/bmo/storeOrder/ISaveStoreOrderBMO.java

@@ -1,5 +1,6 @@
 package com.java110.goods.bmo.storeOrder;
 
+import com.alibaba.fastjson.JSONArray;
 import com.java110.po.storeOrder.StoreOrderPo;
 import org.springframework.http.ResponseEntity;
 public interface ISaveStoreOrderBMO {
@@ -11,7 +12,7 @@ public interface ISaveStoreOrderBMO {
      * @param storeOrderPo
      * @return
      */
-    ResponseEntity<String> save(StoreOrderPo storeOrderPo);
+    ResponseEntity<String> save(StoreOrderPo storeOrderPo, JSONArray goodsList);
 
 
 }

+ 188 - 4
service-goods/src/main/java/com/java110/goods/bmo/storeOrder/impl/SaveStoreOrderBMOImpl.java

@@ -1,38 +1,222 @@
 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.goods.bmo.storeOrder.ISaveStoreOrderBMO;
+import com.java110.intf.IStoreOrderCartInnerServiceSMO;
 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.po.groupBuyProductSpec.GroupBuyProductSpecPo;
+import com.java110.po.productSpecValue.ProductSpecValuePo;
 import com.java110.po.storeOrder.StoreOrderPo;
+import com.java110.po.storeOrderCart.StoreOrderCartPo;
+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 {
 
     @Autowired
     private IStoreOrderInnerServiceSMO storeOrderInnerServiceSMOImpl;
 
+    @Autowired
+    private IStoreOrderCartInnerServiceSMO storeOrderCartInnerServiceSMOImpl;
+
+    @Autowired
+    private IProductInnerServiceSMO productInnerServiceSMOImpl;
+
+    @Autowired
+    private IProductSpecValueInnerServiceSMO productSpecValueInnerServiceSMOImpl;
+
+    @Autowired
+    private IGroupBuyProductSpecInnerServiceSMO groupBuyProductSpecInnerServiceSMOImpl;
+
     /**
      * 添加小区信息
      *
      * @param storeOrderPo
+     * @param goodsList    [
+     *                     {
+     *                     cartId:"123",//没有写-1
+     *                     productId:"产品ID",
+     *                     valueId:"产品规格ID",
+     *                     cartNum:1,//购买数量
+     *                     storeId:"产品商户ID",
+     *                     <p>
+     *                     }
+     *                     ]
      * @return 订单服务能够接受的报文
      */
     @Java110Transactional
-    public ResponseEntity<String> save(StoreOrderPo storeOrderPo) {
+    public ResponseEntity<String> save(StoreOrderPo storeOrderPo, JSONArray goodsList) {
 
         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_OK, "保存成功", storeOrderPo);
+
+    }
+
+    /**
+     * 保存购物车
+     *
+     * @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, "cartNum", "未包含商品数量");
+        Assert.hasKeyAndValue(goods, "storeId", "未包含商户");
+
+        int flag = 0;
+        ProductSpecValueDto productSpecValueDto = null;
+        GroupBuyProductSpecDto groupBuyProductSpecDto = null;
+        //开始锁代码
+        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("carId").startsWith("-")) {
+            goods.put("carId", GenerateCodeFactory.getGeneratorId(GenerateCodeFactory.CODE_PREFIX_cartId));
+        }
+
+        String payPrice = groupBuyProductSpecDto == null ? productSpecValueDto.getPrice() : groupBuyProductSpecDto.getGroupPrice();
+
+        StoreOrderCartPo storeOrderCartPo = new StoreOrderCartPo();
+        storeOrderCartPo.setCartId(goods.getString("carId"));
+        storeOrderCartPo.setCartNum(goods.getString("cartNum"));
+        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("保存购物车失败");
         }
 
-        return ResultVo.createResponseEntity(ResultVo.CODE_ERROR, "保存失败");
+        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;
     }
 
 }