1
0
فهرست منبع

第三方商户库存共享admin模块修改

hyq 6 سال پیش
والد
کامیت
40a1dc7d0a
26فایلهای تغییر یافته به همراه502 افزوده شده و 120 حذف شده
  1. 13 0
      kmall-admin/src/main/java/com/kmall/admin/controller/ProductStoreRelaController.java
  2. 34 0
      kmall-admin/src/main/java/com/kmall/admin/controller/ThirdMerchantBizController.java
  3. 1 1
      kmall-admin/src/main/java/com/kmall/admin/dao/ProductDao.java
  4. 9 0
      kmall-admin/src/main/java/com/kmall/admin/entity/GoodsEntity.java
  5. 43 0
      kmall-admin/src/main/java/com/kmall/admin/entity/ProductStoreRelaEntity.java
  6. 22 0
      kmall-admin/src/main/java/com/kmall/admin/entity/ThirdMerchantBizEntity.java
  7. 1 1
      kmall-admin/src/main/java/com/kmall/admin/service/ProductService.java
  8. 1 0
      kmall-admin/src/main/java/com/kmall/admin/service/ThirdMerchantBizService.java
  9. 32 21
      kmall-admin/src/main/java/com/kmall/admin/service/impl/GoodsServiceImpl.java
  10. 42 8
      kmall-admin/src/main/java/com/kmall/admin/service/impl/OrderServiceImpl.java
  11. 2 2
      kmall-admin/src/main/java/com/kmall/admin/service/impl/ProductServiceImpl.java
  12. 40 10
      kmall-admin/src/main/java/com/kmall/admin/service/impl/ProductStoreRelaServiceImpl.java
  13. 4 1
      kmall-admin/src/main/java/com/kmall/admin/service/impl/ThirdMerchantBizServiceImpl.java
  14. 19 0
      kmall-admin/src/main/java/com/kmall/admin/utils/XBasicDataSource.java
  15. 5 2
      kmall-admin/src/main/resources/mybatis/mapper/GoodsDao.xml
  16. 16 4
      kmall-admin/src/main/resources/mybatis/mapper/ProductDao.xml
  17. 15 3
      kmall-admin/src/main/resources/mybatis/mapper/ProductStoreRelaDao.xml
  18. 18 2
      kmall-admin/src/main/resources/mybatis/mapper/ThirdMerchantBizDao.xml
  19. 8 0
      kmall-admin/src/main/resources/spring/spring-jdbc.xml
  20. 13 8
      kmall-admin/src/main/webapp/WEB-INF/page/shop/goods.html
  21. 19 5
      kmall-admin/src/main/webapp/WEB-INF/page/shop/storeProductStock.html
  22. 20 0
      kmall-admin/src/main/webapp/WEB-INF/page/shop/thirdmerchantbiz.html
  23. 1 6
      kmall-admin/src/main/webapp/WEB-INF/web.xml
  24. 47 1
      kmall-admin/src/main/webapp/js/shop/goods.js
  25. 37 29
      kmall-admin/src/main/webapp/js/shop/storeProductStock.js
  26. 40 16
      kmall-admin/src/main/webapp/js/shop/thirdmerchantbiz.js

+ 13 - 0
kmall-admin/src/main/java/com/kmall/admin/controller/ProductStoreRelaController.java

@@ -2,12 +2,16 @@ package com.kmall.admin.controller;
 
 import com.kmall.admin.entity.ProductStoreRelaEntity;
 import com.kmall.admin.entity.StoreEntity;
+import com.kmall.admin.entity.ThirdMerchantBizEntity;
 import com.kmall.admin.service.ProductStoreRelaService;
 import com.kmall.admin.service.StoreService;
+import com.kmall.admin.service.ThirdMerchantBizService;
 import com.kmall.admin.utils.ParamUtils;
+import com.kmall.common.constant.Dict;
 import com.kmall.common.utils.PageUtils;
 import com.kmall.common.utils.Query;
 import com.kmall.common.utils.R;
+import com.kmall.common.utils.StringUtils;
 import org.apache.shiro.authz.annotation.RequiresPermissions;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.stereotype.Controller;
@@ -51,6 +55,15 @@ public class ProductStoreRelaController {
         Query query = new Query(params);
 
         List<ProductStoreRelaEntity> productStoreRelaList = productStoreRelaService.queryList(query);
+        for (ProductStoreRelaEntity pro: productStoreRelaList) {
+            if(org.apache.commons.lang3.StringUtils.isNotEmpty(pro.getIsStockShare())) {
+                if (pro.getGoodsBizType().equalsIgnoreCase(Dict.orderBizType.item_00.getItem())) {
+                    if(pro.getIsStockShare().equalsIgnoreCase(Dict.isStockShare.item_1.getItem())) {
+                        pro.setStockNum(pro.getGoodsNumber());
+                    }
+                }
+            }
+        }
         int total = productStoreRelaService.queryTotal(query);
 
         PageUtils pageUtil = new PageUtils(productStoreRelaList, total, query.getLimit(), query.getPage());

+ 34 - 0
kmall-admin/src/main/java/com/kmall/admin/controller/ThirdMerchantBizController.java

@@ -3,6 +3,7 @@ package com.kmall.admin.controller;
 import java.util.List;
 import java.util.Map;
 
+import com.google.common.collect.ImmutableBiMap;
 import com.kmall.admin.entity.StoreEntity;
 import com.kmall.admin.entity.ThirdMerchantBizEntity;
 import com.kmall.admin.service.StoreService;
@@ -70,6 +71,17 @@ public class ThirdMerchantBizController {
 
         return R.ok().put("thirdMerchantBiz", thirdMerchantBiz);
     }
+    /**
+     * 查看信息
+     */
+    @RequestMapping("/infoByCode")
+    @ResponseBody
+    public R infoByCode(@RequestParam Map<String, Object> params) {
+        String thirdMerchantCode = (String) params.get("thirdMerchantCode");
+        ThirdMerchantBizEntity thirdMerchantBiz = thirdMerchantBizService.getThirdMerchangByCode(thirdMerchantCode);
+
+        return R.ok().put("thirdMerchantBiz", thirdMerchantBiz);
+    }
 
     /**
      * 保存
@@ -85,6 +97,17 @@ public class ThirdMerchantBizController {
         }else {
             throw new RRException("登陆用户失效,请重新登陆!");
         }
+        Map<String, Object> valideDate = MapBeanUtil.fromObject(thirdMerchantBiz);
+        ImmutableBiMap.Builder builder = new ImmutableBiMap.Builder();
+        builder.put("merchSn", "商户编号");
+        builder.put("thirdPartyMerchCode", "第三方商户代码");
+        builder.put("thirdPartyMerchName", "第三方商户名称");
+        builder.put("isStockShare", "库存是否共享");
+        builder.put("isStoreUserShare", "门店用户是否共享");
+        R r = ValidatorUtil.isEmpty(builder.build(), valideDate);
+        if (Integer.valueOf(r.get("code").toString()) != 0) {
+            throw new RRException(r.get("msg").toString());
+        }
         thirdMerchantBizService.save(thirdMerchantBiz);
 
         return R.ok();
@@ -104,6 +127,17 @@ public class ThirdMerchantBizController {
         }else {
             throw new RRException("登陆用户失效,请重新登陆!");
         }
+        Map<String, Object> valideDate = MapBeanUtil.fromObject(thirdMerchantBiz);
+        ImmutableBiMap.Builder builder = new ImmutableBiMap.Builder();
+        builder.put("merchSn", "商户编号");
+        builder.put("thirdPartyMerchCode", "第三方商户代码");
+        builder.put("thirdPartyMerchName", "第三方商户名称");
+//        builder.put("isStockShare", "库存是否共享");
+//        builder.put("isStoreUserShare", "门店用户是否共享");
+        R r = ValidatorUtil.isEmpty(builder.build(), valideDate);
+        if (Integer.valueOf(r.get("code").toString()) != 0) {
+            throw new RRException(r.get("msg").toString());
+        }
         thirdMerchantBizService.update(thirdMerchantBiz);
 
         return R.ok();

+ 1 - 1
kmall-admin/src/main/java/com/kmall/admin/dao/ProductDao.java

@@ -27,7 +27,7 @@ public interface ProductDao extends BaseDao<ProductEntity> {
      * @param goodsId
      * @return
      */
-    ProductEntity queryObjectByGoodsId(@Param("goodsId") String goodsId);
+    ProductEntity queryObjectByGoodsIdAndStoreId(@Param("goodsId") String goodsId,@Param("storeId")String storeId);
 
 //    /**
 //     * 根据编码查询产品

+ 9 - 0
kmall-admin/src/main/java/com/kmall/admin/entity/GoodsEntity.java

@@ -180,6 +180,15 @@ public class GoodsEntity implements Serializable {
     private String merchSn;
     private String merchName;
     private String thirdPartyMerchCode;
+    private String isStockShare;
+
+    public String getIsStockShare() {
+        return isStockShare;
+    }
+
+    public void setIsStockShare(String isStockShare) {
+        this.isStockShare = isStockShare;
+    }
 
     public String getThirdPartyMerchCode() {
         return thirdPartyMerchCode;

+ 43 - 0
kmall-admin/src/main/java/com/kmall/admin/entity/ProductStoreRelaEntity.java

@@ -98,8 +98,51 @@ public class ProductStoreRelaEntity implements Serializable {
     //属性类别
     private Integer attributeCategory;
 
+    /**
+     * 第三方商户代码
+     */
+    private String thirdPartyMerchCode;
+
+    private Integer goodsNumber;
+
+    private String isStockShare;
+
+    private Integer goodsSellVolume;
+
     List<GoodsAttributeEntity> attributeEntityList = new ArrayList<>();
 
+    public Integer getGoodsSellVolume() {
+        return goodsSellVolume;
+    }
+
+    public void setGoodsSellVolume(Integer goodsSellVolume) {
+        this.goodsSellVolume = goodsSellVolume;
+    }
+
+    public String getIsStockShare() {
+        return isStockShare;
+    }
+
+    public void setIsStockShare(String isStockShare) {
+        this.isStockShare = isStockShare;
+    }
+
+    public Integer getGoodsNumber() {
+        return goodsNumber;
+    }
+
+    public void setGoodsNumber(Integer goodsNumber) {
+        this.goodsNumber = goodsNumber;
+    }
+
+    public String getThirdPartyMerchCode() {
+        return thirdPartyMerchCode;
+    }
+
+    public void setThirdPartyMerchCode(String thirdPartyMerchCode) {
+        this.thirdPartyMerchCode = thirdPartyMerchCode;
+    }
+
     public Integer getFreightId() {
         return freightId;
     }

+ 22 - 0
kmall-admin/src/main/java/com/kmall/admin/entity/ThirdMerchantBizEntity.java

@@ -28,6 +28,12 @@ public class ThirdMerchantBizEntity implements Serializable {
      * 第三方商户名称
      */
     private String thirdPartyMerchName;
+
+    private String isStockShare;
+
+    private String isStoreUserShare;
+
+
     /**
      * 是否有效,0:有效,1:无效
      */
@@ -53,6 +59,22 @@ public class ThirdMerchantBizEntity implements Serializable {
      */
     private Date tstm;
 
+    public String getIsStoreUserShare() {
+        return isStoreUserShare;
+    }
+
+    public void setIsStoreUserShare(String isStoreUserShare) {
+        this.isStoreUserShare = isStoreUserShare;
+    }
+
+    public String getIsStockShare() {
+        return isStockShare;
+    }
+
+    public void setIsStockShare(String isStockShare) {
+        this.isStockShare = isStockShare;
+    }
+
     public String getMerchSn() {
         return merchSn;
     }

+ 1 - 1
kmall-admin/src/main/java/com/kmall/admin/service/ProductService.java

@@ -28,7 +28,7 @@ public interface ProductService {
      * @param goodsId
      * @return 实体
      */
-    ProductEntity queryObjectByGoodsId(String goodsId);
+    ProductEntity queryObjectByGoodsIdAndStoreId(String goodsId,String storeId);
 
     /**
      * 分页查询

+ 1 - 0
kmall-admin/src/main/java/com/kmall/admin/service/ThirdMerchantBizService.java

@@ -22,6 +22,7 @@ public interface ThirdMerchantBizService {
      */
     ThirdMerchantBizEntity queryObject(Integer thirdMerchSn);
 
+    ThirdMerchantBizEntity getThirdMerchangByCode(String thirdMerchCode);
     /**
      * 分页查询
      *

+ 32 - 21
kmall-admin/src/main/java/com/kmall/admin/service/impl/GoodsServiceImpl.java

@@ -9,6 +9,7 @@ import com.kmall.admin.service.GoodsService;
 import com.kmall.common.constant.Dict;
 import com.kmall.common.entity.SysUserEntity;
 import com.kmall.common.utils.*;
+import org.apache.commons.lang3.StringUtils;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.stereotype.Service;
 import org.springframework.transaction.annotation.Transactional;
@@ -319,6 +320,9 @@ public class GoodsServiceImpl implements GoodsService {
         goods.setUpdateUserId(user.getUserId());
         goods.setUpdateTime(new Date());
         goods.setModTime(new Date());
+        if(goods.getGoodsNumber()==null){
+            goods.setGoodsNumber(0);
+        }
 
         // 修改商品
         goodsDao.update(goods);
@@ -419,15 +423,23 @@ public class GoodsServiceImpl implements GoodsService {
         }*/
 
         // 修改产品
-        ProductEntity product = productDao.queryObjectByGoodsId(String.valueOf(goods.getId()));
+        ProductEntity product = productDao.queryObjectByGoodsIdAndStoreId(String.valueOf(goods.getId()),"");
 
-        GoodsSpecificationEntity goodsSpecification = new GoodsSpecificationEntity();
+        GoodsSpecificationEntity goodsSpecification = null;
         // 保税商品,普通货物暂不添加商品规格
         if (!Dict.orderBizType.item_11.getItem().equals(goods.getGoodsBizType())) {
             // 添加商品规格
             goodsSpecification = goodsSpecificationDao.queryByGoodsId(goods.getId());
-            goodsSpecification.setValue(goods.getCiqProdModel());
-            goodsSpecificationDao.update(goodsSpecification);
+            if(goodsSpecification != null) {
+                goodsSpecification.setValue(goods.getCiqProdModel());
+                goodsSpecificationDao.update(goodsSpecification);
+            }else{
+                goodsSpecification = new GoodsSpecificationEntity();
+                goodsSpecification.setGoodsId(goods.getId());
+                goodsSpecification.setValue(goods.getCiqProdModel());
+                goodsSpecification.setSpecificationId(1);
+                goodsSpecificationDao.save(goodsSpecification);
+            }
 
             if(product == null){
                 product = new ProductEntity();
@@ -762,10 +774,10 @@ public class GoodsServiceImpl implements GoodsService {
 //                        }
 //                    }
                     // 修改产品
-                    ProductEntity product = productDao.queryObjectByGoodsId(String.valueOf(goodsEntity.getId()));
+                    ProductEntity product = productDao.queryObjectByGoodsIdAndStoreId(String.valueOf(goodsEntity.getId()), "");
 
                     GoodsSpecificationEntity goodsSpecification = new GoodsSpecificationEntity();
-                    // 保税商品,普通货物暂不添加商品规格
+                    // 普通货物暂不添加商品规格
                     if (!Dict.orderBizType.item_11.getItem().equals(goodsDto.getGoodsBizType())) {
                         // 添加商品规格
                         GoodsSpecificationEntity specificationEntity = goodsSpecificationDao.queryByGoodsId(goodsEntity.getId());
@@ -779,21 +791,20 @@ public class GoodsServiceImpl implements GoodsService {
                             goodsSpecification.setId(specificationEntity.getId());
                             goodsSpecificationDao.update(goodsSpecification);
                         }
-                        product.setGoodsSpecificationNameValue(goodsSpecification.getValue());
-                        product.setGoodsSpecificationIds(goodsSpecification.getId().toString());
-                    }
-
-                    if(product == null){
-                        product = new ProductEntity();
-                        product.setGoodsSn(goodsDto.getGoodsSn());
-                        product.setGoodsId(goodsEntity.getId());
-                        product.setGoodsDefault(0);
-                        product.setGoodsNumber(goodsEntity.getGoodsNumber());
-                        productDao.save(product);
-                    }else{
-                        product.setGoodsSpecificationIds(goodsSpecification.getId().toString());
-                        product.setGoodsSpecificationNameValue(goodsSpecification.getValue());
-                        productDao.update(product);
+                        if(product == null){
+                            product = new ProductEntity();
+                            product.setGoodsSn(goodsDto.getGoodsSn());
+                            product.setGoodsId(goodsEntity.getId());
+                            product.setGoodsDefault(0);
+                            product.setGoodsNumber(goodsEntity.getGoodsNumber());
+                            product.setGoodsSpecificationNameValue(goodsSpecification.getValue());
+                            product.setGoodsSpecificationIds(goodsSpecification.getId().toString());
+                            productDao.save(product);
+                        }else{
+                            product.setGoodsSpecificationIds(goodsSpecification.getId().toString());
+                            product.setGoodsSpecificationNameValue(goodsSpecification.getValue());
+                            productDao.update(product);
+                        }
                     }
                 }
             }

+ 42 - 8
kmall-admin/src/main/java/com/kmall/admin/service/impl/OrderServiceImpl.java

@@ -6,6 +6,7 @@ import com.kmall.admin.dao.*;
 import com.kmall.admin.entity.*;
 import com.kmall.admin.entity.OrderProcessRecordEntity;
 import com.kmall.admin.service.OrderService;
+import com.kmall.api.entity.GoodsVo;
 import com.kmall.common.constant.Dict;
 import com.kmall.api.service.merch.OmsMerchPropertiesBuilder;
 import com.kmall.api.util.CommonUtil;
@@ -400,8 +401,7 @@ public class OrderServiceImpl implements OrderService {
         List<OrderGoodsEntity> orderGoodsVoList = orderGoodsDao.queryList(map);
         for (OrderGoodsEntity orderGoodsEntity : orderGoodsVoList) {
             ProductStoreRelaEntity storeRelaEntity = productStoreRelaDao
-                    .queryByStoreIdProductId(Long.valueOf(order.getStoreId()),
-                            Long.valueOf(orderGoodsEntity.getProductId()));
+                    .queryByStoreIdProductId(Long.valueOf(order.getStoreId()),Long.valueOf(orderGoodsEntity.getProductId()));
             if (null == storeRelaEntity || null == storeRelaEntity.getSellVolume()) {
                 storeRelaEntity.setSellVolume(0);
             }
@@ -409,12 +409,46 @@ public class OrderServiceImpl implements OrderService {
             if (sellVolume.compareTo(Constant.ZERO) < 0) {
                 sellVolume = Constant.ZERO;
             }
-            storeRelaEntity.setSellVolume(Integer.parseInt(sellVolume.toString()));
-            if (null == storeRelaEntity.getStockNum()) {
-                storeRelaEntity.setStockNum(0);
+
+            Integer stockNum = 0;
+            // TODO: 2019/3/5  普通商品不受共享库存影响,直接取门店配置库存
+            if(storeRelaEntity.getGoodsBizType().equalsIgnoreCase(Dict.orderBizType.item_00.getItem())){
+                if (storeRelaEntity.getIsStockShare().equalsIgnoreCase(Dict.isStockShare.item_1.getItem())) {
+                    //还原商户商品库存
+                    stockNum = storeRelaEntity.getGoodsNumber();
+                    BigDecimal goodsSellVolume = new BigDecimal(storeRelaEntity.getGoodsSellVolume() - orderGoodsEntity.getNumber());//销售量
+                    if (goodsSellVolume.compareTo(Constant.ZERO) < 0) {
+                        goodsSellVolume = Constant.ZERO;
+                    }
+                    GoodsEntity goodsEntity = goodsDao.queryObject(storeRelaEntity.getGoodsId());
+                    if(goodsEntity!=null){
+                        goodsEntity.setGoodsNumber(stockNum + orderGoodsEntity.getNumber());
+                        goodsEntity.setSellVolume(Integer.parseInt(goodsSellVolume.toString()));
+                        goodsDao.update(goodsEntity);
+                    }
+                }
+                if (storeRelaEntity.getIsStockShare().equalsIgnoreCase(Dict.isStockShare.item_0.getItem())) {
+                    //还原门店库存
+                    if (null == storeRelaEntity.getStockNum()) {
+                        stockNum = 0;
+                    }else{
+                        stockNum = storeRelaEntity.getStockNum();
+                    }
+                    storeRelaEntity.setSellVolume(Integer.parseInt(sellVolume.toString()));
+                    storeRelaEntity.setStockNum(stockNum + orderGoodsEntity.getNumber());//库存数量
+                    productStoreRelaDao.update(storeRelaEntity);
+                }
+            }else {
+                //还原门店库存
+                if (null == storeRelaEntity.getStockNum()) {
+                    stockNum = 0;
+                }else{
+                    stockNum = storeRelaEntity.getStockNum();
+                }
+                storeRelaEntity.setSellVolume(Integer.parseInt(sellVolume.toString()));
+                storeRelaEntity.setStockNum(stockNum + orderGoodsEntity.getNumber());//库存数量
+                productStoreRelaDao.update(storeRelaEntity);
             }
-            storeRelaEntity.setStockNum(storeRelaEntity.getStockNum() + orderGoodsEntity.getNumber());//库存数量
-            productStoreRelaDao.update(storeRelaEntity);
         }
     }
     /**
@@ -657,7 +691,7 @@ public class OrderServiceImpl implements OrderService {
                         productInfo.setStockNum(productInfo.getStockNum() - cartEntity.getNumber());
                         productInfo.setStoreId(Long.valueOf(storeId));
                         productInfo.addSellVolume();
-                        productStoreRelaDao.updateStockNum(productInfo);
+                        productStoreRelaDao.updateStockNum(productInfo);//修改普通商品库存
                     }
                 }
             }

+ 2 - 2
kmall-admin/src/main/java/com/kmall/admin/service/impl/ProductServiceImpl.java

@@ -31,8 +31,8 @@ public class ProductServiceImpl implements ProductService {
     }
 
     @Override
-    public ProductEntity queryObjectByGoodsId(String goodsId) {
-        return productDao.queryObjectByGoodsId(goodsId);
+    public ProductEntity queryObjectByGoodsIdAndStoreId(String goodsId,String storeId) {
+        return productDao.queryObjectByGoodsIdAndStoreId(goodsId,storeId);
     }
 
     @Override

+ 40 - 10
kmall-admin/src/main/java/com/kmall/admin/service/impl/ProductStoreRelaServiceImpl.java

@@ -88,7 +88,6 @@ public class ProductStoreRelaServiceImpl implements ProductStoreRelaService {
         ImmutableBiMap.Builder builder = new ImmutableBiMap.Builder();
         builder.put("storeId", "门店");
         builder.put("goodsId", "商品");
-        builder.put("stockNum", "库存");
         builder.put("attributeCategory", "一级分类");
         builder.put("categoryId", "二级分类");
         builder.put("brandId", "品牌");
@@ -99,6 +98,14 @@ public class ProductStoreRelaServiceImpl implements ProductStoreRelaService {
             throw new RRException(r.get("msg").toString());
         } else {
             goodsEntity = goodsDao.queryObject(productStoreRela.getGoodsId());
+            if(Dict.orderBizType.item_00.getItem().equalsIgnoreCase(goodsEntity.getGoodsBizType())){
+                if(Dict.isStockShare.item_0.getItem().equalsIgnoreCase(goodsEntity.getIsStockShare())){
+                    builder.put("stockNum", "库存");
+                }
+            }else{
+                builder.put("stockNum", "库存");
+            }
+
             if (Dict.orderBizType.item_11.getItem().equals(goodsEntity.getGoodsBizType())) {
                 // 普通商品校验商品规格
                 builder.put("specification", "规格");
@@ -125,16 +132,19 @@ public class ProductStoreRelaServiceImpl implements ProductStoreRelaService {
         if(!goodsEntity.getMerchSn().equalsIgnoreCase(productStoreRela.getMerchSn())) {
             throw new RRException("该商品所属商户不属于该门店所属商户!");
         }
+        String storeId = String.valueOf(productStoreRela.getStoreId());
+        String goodsId = String.valueOf(goodsEntity.getId());
+
         Map<String, Object> map = Maps.newHashMap();
-        map.put("goodsId", goodsEntity.getId());
-        map.put("storeId", productStoreRela.getStoreId());
+        map.put("goodsId", goodsId);
+        map.put("storeId", storeId);
         List<ProductStoreRelaEntity> storeRelaList = querySameList(map);
         if (storeRelaList != null && storeRelaList.size() > 0) {
             throw new RRException("该门店已存在此商品!");
         }
 
         SysUserEntity user = ShiroUtils.getUserEntity();
-        ProductEntity product = productDao.queryObjectByGoodsId(String.valueOf(goodsEntity.getId()));
+        ProductEntity product = productDao.queryObjectByGoodsIdAndStoreId(goodsId, "");
 
 //        GoodsEntity goods = new GoodsEntity();
 //        goods.setRetailPrice(productStoreRela.getRetailPrice());
@@ -153,10 +163,22 @@ public class ProductStoreRelaServiceImpl implements ProductStoreRelaService {
             goodsSpecification.setValue(productStoreRela.getSpecification());
             goodsSpecification.setSpecificationId(1);
             goodsSpecificationDao.save(goodsSpecification);
+
             // 修改产品
-            product.setGoodsSpecificationIds(goodsSpecification.getId().toString());
-            product.setGoodsSpecificationNameValue(goodsSpecification.getValue());
-            productDao.update(product);
+            if(product == null){
+                product = new ProductEntity();
+                product.setGoodsSn(goodsEntity.getGoodsSn());
+                product.setGoodsSpecificationNameValue(goodsSpecification.getValue());
+                product.setGoodsSpecificationIds(goodsSpecification.getId().toString());
+                product.setGoodsId(goodsEntity.getId());
+                product.setGoodsNumber(goodsEntity.getGoodsNumber());
+                product.setGoodsDefault(0);
+                productDao.save(product);
+            }else{
+                product.setGoodsSpecificationIds(goodsSpecification.getId().toString());
+                product.setGoodsSpecificationNameValue(goodsSpecification.getValue());
+                productDao.update(product);
+            }
         }/* else {
             productStoreRela.setRetailPrice(goodsEntity.getRetailPrice());
             productStoreRela.setMarketPrice(goodsEntity.getMarketPrice());
@@ -230,9 +252,12 @@ public class ProductStoreRelaServiceImpl implements ProductStoreRelaService {
             throw new RRException("该商品所属商户不属于该门店所属商户!");
         }
 
+        String storeId = String.valueOf(productStoreRela.getStoreId());
+        String goodsId = String.valueOf(goodsEntity.getId());
+
         Map<String, Object> map = Maps.newHashMap();
-        map.put("goodsId", goodsEntity.getId());
-        map.put("storeId", productStoreRela.getStoreId());
+        map.put("goodsId", goodsId);
+        map.put("storeId", storeId);
         map.put("id", productStoreRela.getId());
         List<ProductStoreRelaEntity> storeRelaList = querySameList(map);
         if (storeRelaList != null && storeRelaList.size() > 0) {
@@ -245,6 +270,11 @@ public class ProductStoreRelaServiceImpl implements ProductStoreRelaService {
 //        goods.setMarketPrice(productStoreRela.getMarketPrice());
 //        goods.setId(goodsEntity.getId());
 //        goodsDao.update(goods);
+        ProductEntity product = productDao.queryObjectByGoodsIdAndStoreId(goodsId, storeId);
+        if(product == null){
+            throw new RRException("该商品规格信息为空!请完善商品数据");
+        }
+        productStoreRela.setProductId(product.getId());
         if (Dict.orderBizType.item_11.getItem().equals(goodsEntity.getGoodsBizType())) {
             // 添加商品规格
             GoodsSpecificationEntity goodsSpecification = goodsSpecificationDao.queryByGoodsId(goodsEntity.getId());
@@ -252,11 +282,11 @@ public class ProductStoreRelaServiceImpl implements ProductStoreRelaService {
             goodsSpecificationDao.update(goodsSpecification);
 
             // 修改产品
-            ProductEntity product = productDao.queryObjectByGoodsId(String.valueOf(goodsEntity.getId()));
             product.setGoodsSpecificationIds(goodsSpecification.getId().toString());
             product.setGoodsSpecificationNameValue(goodsSpecification.getValue());
             productDao.update(product);
         }
+
         // 修改商品参数
         List<GoodsAttributeEntity> attributeEntityList = productStoreRela.getAttributeEntityList();
         if (attributeEntityList != null && attributeEntityList.size() > 0) {

+ 4 - 1
kmall-admin/src/main/java/com/kmall/admin/service/impl/ThirdMerchantBizServiceImpl.java

@@ -27,7 +27,10 @@ public class ThirdMerchantBizServiceImpl implements ThirdMerchantBizService {
     public ThirdMerchantBizEntity queryObject(Integer thirdMerchSn) {
         return thirdMerchantBizDao.queryObject(thirdMerchSn);
     }
-
+    @Override
+    public ThirdMerchantBizEntity getThirdMerchangByCode(String thirdMerchCode){
+        return thirdMerchantBizDao.getThirdMerchangByCode(thirdMerchCode);
+    }
     @Override
     public List<ThirdMerchantBizEntity> queryList(Map<String, Object> map) {
         return thirdMerchantBizDao.queryList(map);

+ 19 - 0
kmall-admin/src/main/java/com/kmall/admin/utils/XBasicDataSource.java

@@ -0,0 +1,19 @@
+//package com.kmall.admin.utils;
+//
+//import java.sql.DriverManager;
+//import java.sql.SQLException;
+//import org.apache.commons.dbcp.BasicDataSource;
+//
+///**
+// * @author huangyq
+// * @version 1.0
+// * 2019-02-28 16:48
+// */
+//public class XBasicDataSource extends BasicDataSource{
+//    @Override
+//    public synchronized void close() throws SQLException{
+////  System.out.println("......输出数据源Driver的url:"+DriverManager.getDriver(url));
+//        DriverManager.deregisterDriver(DriverManager.getDriver(url));
+//        super.close();
+//    }
+//}

+ 5 - 2
kmall-admin/src/main/resources/mybatis/mapper/GoodsDao.xml

@@ -63,15 +63,17 @@
         <result column="storeMarketPrice" property="storeMarketPrice" />
         <result column="storeRetailPrice" property="storeRetailPrice" />
         <result column="third_party_merch_code" property="thirdPartyMerchCode" />
+        <result column="isStockShare" property="isStockShare" />
     </resultMap>
 
     <select id="queryObject" resultType="com.kmall.admin.entity.GoodsEntity">
         SELECT
             a.*, CASE
-        when g.id > 0 then 2 else 0 end as goodsType
+        when g.id > 0 then 2 else 0 end as goodsType,mb.is_stock_share isStockShare,mb.third_party_merch_code thirdPartyMerchCode
         FROM
             mall_goods a
         LEFT JOIN mall_goods_group g ON g.goods_id = a.id
+        left join third_merchant_biz mb on a.third_party_merch_code = mb.third_party_merch_code and mb.merch_sn=a.merch_sn
         AND g.open_status != 3
         WHERE a.id = #{value}
     </select>
@@ -115,10 +117,11 @@
         select
         mall_goods.*,
         case when mall_goods_group.id > 0 then 2 else 0 end as goodsType,
-        m.merch_name merchName
+        m.merch_name merchName, mb.is_stock_share isStockShare
         from mall_goods
         left join mall_merch m on mall_goods.merch_sn = m.merch_sn
         left join mall_goods_group on mall_goods_group.goods_id = mall_goods.id and mall_goods_group.open_status != 3
+        left join third_merchant_biz mb on mb.third_party_merch_code = mall_goods.third_party_merch_code and mb.merch_sn=mall_goods.merch_sn
         WHERE 1=1
         <!--  数据过滤  -->
         ${filterSql}

+ 16 - 4
kmall-admin/src/main/resources/mybatis/mapper/ProductDao.xml

@@ -26,11 +26,23 @@
 		where id = #{id}
 	</select>
 
-    <select id="queryObjectByGoodsId" resultType="com.kmall.admin.entity.ProductEntity">
+    <select id="queryObjectByGoodsIdAndStoreId" resultType="com.kmall.admin.entity.ProductEntity">
         select
-        *
-        from mall_product
-        where goods_id = #{goodsId}
+            p.id,
+			p.goods_id,
+			p.goods_specification_ids,
+			p.goods_specification_name_value,
+			p.goods_sn,
+			p.goods_number,
+			p.goods_default
+        from mall_product p
+        <if test="storeId != null and storeId != ''">
+          left join mall_product_store_rela r on p.id = r.product_id and p.goods_id = r.goods_id
+        </if>
+        where p.goods_id = #{goodsId}
+        <if test="storeId != null and storeId != ''">
+            and r.store_id = #{storeId}
+        </if>
     </select>
 
     <select id="queryList" resultType="com.kmall.admin.entity.ProductEntity">

+ 15 - 3
kmall-admin/src/main/resources/mybatis/mapper/ProductStoreRelaDao.xml

@@ -36,7 +36,10 @@
         <result column="attribute_category" property="attributeCategory" />
         <result column="brand_id" property="brandId" />
         <result column="freight_id" property="freightId" />
-
+        <result column="goodsNumber" property="goodsNumber" />
+        <result column="thirdPartyMerchCode" property="thirdPartyMerchCode" />
+        <result column="isStockShare" property="isStockShare" />
+        <result column="goodsSellVolume" property="goodsSellVolume" />
     </resultMap>
 
     <select id="queryObject" resultType="com.kmall.admin.entity.ProductStoreRelaEntity">
@@ -99,9 +102,13 @@
             a.category_id,
             a.attribute_category,
             a.brand_id,
-            a.freight_id
+            a.freight_id,
+            b.goods_number goodsNumber,
+            mb.is_stock_share isStockShare,
+            b.sell_volume goodsSellVolume
         from mall_product_store_rela a
         left join mall_goods b on a.goods_id = b.id
+        left join third_merchant_biz mb on b.third_party_merch_code = mb.third_party_merch_code and mb.merch_sn=b.merch_sn
         left join mall_product c on a.product_id = c.id
         LEFT JOIN mall_category cg ON a.category_id = cg.id
         left join mall_store s on a.store_id = s.id
@@ -153,9 +160,13 @@
         a.category_id,
         a.attribute_category,
         a.brand_id,
-        a.freight_id
+        a.freight_id,
+        b.goods_number goodsNumber,
+        b.third_party_merch_code thirdPartyMerchCode,
+        mb.is_stock_share isStockShare
         from mall_product_store_rela a
         left join mall_goods b on a.goods_id = b.id
+        left join third_merchant_biz mb on mb.third_party_merch_code = b.third_party_merch_code and mb.merch_sn=b.merch_sn
         left join mall_merch m on a.merch_sn = m.merch_sn
         left join mall_product c on a.product_id = c.id
         LEFT JOIN mall_category cg ON a.category_id = cg.id
@@ -282,6 +293,7 @@
         select count(a.id)
         from mall_product_store_rela a
         left join mall_goods b on a.goods_id = b.id
+        left join third_merchant_biz mb on mb.third_party_merch_code = b.third_party_merch_code and mb.merch_sn=b.merch_sn
         left join mall_product c on a.product_id = c.id
         LEFT JOIN mall_category cg ON a.category_id = cg.id
         left join mall_store s on a.store_id = s.id

+ 18 - 2
kmall-admin/src/main/resources/mybatis/mapper/ThirdMerchantBizDao.xml

@@ -8,6 +8,8 @@
 		<result property="merchSn" column="merch_sn"/>
         <result property="thirdPartyMerchCode" column="third_party_merch_code"/>
         <result property="thirdPartyMerchName" column="third_party_merch_name"/>
+		<result property="isStockShare" column="is_stock_share"/>
+		<result property="isStoreUserShare" column="is_store_user_share"/>
         <result property="isValid" column="is_valid"/>
         <result property="createrSn" column="creater_sn"/>
         <result property="createTime" column="create_time"/>
@@ -23,6 +25,8 @@
 			`third_party_merch_code`,
 			`third_party_merch_name`,
 			`is_valid`,
+			is_stock_share,
+			is_store_user_share,
 			`creater_sn`,
 			`create_time`,
 			`moder_sn`,
@@ -39,6 +43,8 @@
 		`third_party_merch_code`,
 		`third_party_merch_name`,
 		`is_valid`,
+		is_stock_share,
+		is_store_user_share,
 		`creater_sn`,
 		`create_time`,
 		`moder_sn`,
@@ -55,6 +61,8 @@
 		`third_party_merch_code`,
 		`third_party_merch_name`,
 		`is_valid`,
+		is_stock_share,
+		is_store_user_share,
 		`creater_sn`,
 		`create_time`,
 		`moder_sn`,
@@ -71,6 +79,8 @@
     		`third_party_merch_code`,
     		`third_party_merch_name`,
     		`is_valid`,
+			is_stock_share,
+		is_store_user_share,
     		`creater_sn`,
     		`create_time`,
     		`moder_sn`,
@@ -113,13 +123,15 @@
 			and third_party_merch_code = #{thirdPartyMerchCode}
 		</if>
 	</select>
-	 
+
 	<insert id="save" parameterType="com.kmall.admin.entity.ThirdMerchantBizEntity" useGeneratedKeys="true" keyProperty="thirdMerchSn">
 		insert into third_merchant_biz(
 			`merch_sn`,
 			`third_party_merch_code`,
 			`third_party_merch_name`,
 			`is_valid`,
+			is_stock_share,
+			is_store_user_share,
 			`creater_sn`,
 			`create_time`,
 			`moder_sn`,
@@ -130,13 +142,15 @@
 			#{thirdPartyMerchCode},
 			#{thirdPartyMerchName},
 			#{isValid},
+			#{isStockShare},
+			#{isStoreUserShare},
 			#{createrSn},
 			#{createTime},
 			#{moderSn},
 			#{modTime},
 			#{tstm})
 	</insert>
-	 
+
 	<update id="update" parameterType="com.kmall.admin.entity.ThirdMerchantBizEntity">
 		update third_merchant_biz 
 		<set>
@@ -144,6 +158,8 @@
 			<if test="thirdPartyMerchCode != null">`third_party_merch_code` = #{thirdPartyMerchCode}, </if>
 			<if test="thirdPartyMerchName != null">`third_party_merch_name` = #{thirdPartyMerchName}, </if>
 			<if test="isValid != null">`is_valid` = #{isValid}, </if>
+			<if test="isStockShare != null">`is_stock_share` = #{isStockShare}, </if>
+			<if test="isStoreUserShare != null">`is_store_user_share` = #{isStoreUserShare}, </if>
 			<if test="createrSn != null">`creater_sn` = #{createrSn}, </if>
 			<if test="createTime != null">`create_time` = #{createTime}, </if>
 			<if test="moderSn != null">`moder_sn` = #{moderSn}, </if>

+ 8 - 0
kmall-admin/src/main/resources/spring/spring-jdbc.xml

@@ -50,6 +50,14 @@
                 <ref bean="wall-filter"/>
             </list>
         </property>
+        <!--&lt;!&ndash; 配置间隔多久才进行一次检测,检测需要关闭的空闲连接,单位是毫秒 &ndash;&gt;-->
+        <property name="timeBetweenEvictionRunsMillis" value="60000" />
+        <!-- 配置一个连接在池中最小生存的时间,单位是毫秒 -->
+        <property name="minEvictableIdleTimeMillis" value="300000" />
+        <!-- 建议配置为true,不影响性能,并且保证安全性。申请连接的时候检测,如果空闲时间大于timeBetweenEvictionRunsMillis,执行validationQuery检测连接是否有效 -->
+        <property name="testWhileIdle" value="true" />
+        <!-- 指定每个连接上PSCache的大小   -->
+        <property name="maxPoolPreparedStatementPerConnectionSize" value="20" />
     </bean>
 
     <!-- 慢sql日志 -->

+ 13 - 8
kmall-admin/src/main/webapp/WEB-INF/page/shop/goods.html

@@ -107,10 +107,12 @@
                 #if($shiro.hasPermission("goods:delete"))
                 <i-button type="error" @click="del"><i class="fa fa-trash-o"></i>&nbsp;删除</i-button>
                 #end
+
                 #if($shiro.hasPermission("goods:unSaleBatch"))
                 <i-button type="primary" @click="enSale"><i class="fa fa-hand-o-up"></i>&nbsp;上架</i-button>
                 <i-button type="dashed" @click="unSale"><i class="fa fa-hand-o-down"></i>&nbsp;下架</i-button>
                 #end
+
                 <!--<i-button type="info" @click="goodsExport"><i class="fa fa-plus"></i>&nbsp;商品导入</i-button>-->
                 <!--<i-button type="info" @click="sameGoodsExport"><i class="fa fa-plus"></i>&nbsp;普货商品导入</i-button>-->
 
@@ -160,10 +162,17 @@
                         </i-select>
                     </Form-item>
                 <Form-item label="第三方商户" prop="merchSn">
-                    <i-select v-model="goods.thirdPartyMerchCode" placeholder="第三方商户" label-in-value>
+                    <i-select v-model="goods.thirdPartyMerchCode" placeholder="第三方商户" @on-change="showStockShare" label-in-value>
                         <i-option v-for="thirdMerchant in thirdMerchantBizList" :value="thirdMerchant.thirdPartyMerchCode" :key="thirdMerchant.thirdPartyMerchCode">{{thirdMerchant.thirdPartyMerchName}}</i-option>
                     </i-select>
                 </Form-item>
+                <Form-item label="货品业务类型" prop="goodsBizType" >
+                    <i-select v-model="goods.goodsBizType"  placeholder="货品业务类型"
+                              label-in-value style="width: 268px;" @on-change="changeGoodsBizType">
+                        <i-option v-for="macro in macros" :value="macro.value" :key="macro.id">{{macro.name}}
+                        </i-option>
+                    </i-select>
+                </Form-item>
                     <Form-item label="商品编码" prop="goodsSn">
                         <i-input v-model="goods.goodsSn" placeholder="商品编码"/>
                     </Form-item>
@@ -185,13 +194,6 @@
                     <Form-item label="产品条码" prop="prodBarcode">
                         <i-input v-model="goods.prodBarcode" placeholder="产品条码"/>
                     </Form-item>
-                    <Form-item label="货品业务类型" prop="goodsBizType" >
-                        <i-select v-model="goods.goodsBizType" filterable placeholder="货品业务类型"
-                                  label-in-value style="width: 268px;" @on-change="changeGoodsBizType">
-                            <i-option v-for="macro in macros" :value="macro.value" :key="macro.id">{{macro.name}}
-                            </i-option>
-                        </i-select>
-                    </Form-item>
                 <Form-item label="供应商" prop="supplierId">
                     <i-select v-model="goods.supplierId" placeholder="供应商"
                               label-in-value style="width: 268px;">
@@ -212,6 +214,9 @@
                     <!--<Form-item label="零售价" prop="retailPrice">-->
                         <!--<Input-number :min="0.01" :step="0.01" v-model="goods.retailPrice" placeholder="零售价" style="width: 268px;"/>-->
                     <!--</Form-item>-->
+                    <Form-item label="商品库存" prop="goodsNumber" v-show="isStockShare">
+                        <i-input v-model="goods.goodsNumber" placeholder="商品库存" style="width: 268px;"/>
+                    </Form-item>
                     <Form-item label="商品税率(0.00)" prop="goodsRate">
                         <Input-number :min="0.001" :step="0.001" v-model="goods.goodsRate" placeholder="商品税率" style="width: 268px;"/>
                     </Form-item>

+ 19 - 5
kmall-admin/src/main/webapp/WEB-INF/page/shop/storeProductStock.html

@@ -121,20 +121,34 @@
         <i-form ref="formValidate" :model="productStoreRela" :rules="ruleValidate" :label-width="80">
             <Form-item label="门店" prop="storeId">
                 <i-select v-model="productStoreRela.storeId" placeholder="门店" filterable @on-change="getGoods"
-                          label-in-value>
+                          label-in-value v-show="isOperatorShow" disabled>
+                    <i-option v-for="store in stores" :value="store.id"
+                              :key="store.id">{{store.storeName}}
+                    </i-option>
+                </i-select>
+                <i-select v-model="productStoreRela.storeId" placeholder="门店" filterable @on-change="getGoods"
+                          label-in-value v-show="!isOperatorShow">
                     <i-option v-for="store in stores" :value="store.id"
                               :key="store.id">{{store.storeName}}
                     </i-option>
                 </i-select>
             </Form-item>
             <Form-item label="商品" prop="goodsId">
-                <i-select v-model="productStoreRela.goodsId" filterable @on-change="changeGoods" label-in-value>
+                <i-select v-model="productStoreRela.goodsId" filterable @on-change="changeGoods" label-in-value  v-show="isOperatorShow" disabled>
+                    <i-option v-for="goods in goodss" :value="goods.id" :key="goods.id">{{goods.name}}</i-option>
+                </i-select>
+                <i-select v-model="productStoreRela.goodsId" filterable @on-change="changeGoods" label-in-value  v-show="!isOperatorShow">
                     <i-option v-for="goods in goodss" :value="goods.id" :key="goods.id">{{goods.name}}</i-option>
                 </i-select>
             </Form-item>
-            <Form-item label="库存" prop="stockNum">
+            <div v-show="isStockShare"><span style="margin-left: 80px;color: red;font-size: 12px;">* 请先维护第三方商户门店商户是否共享字段,如字段为是则去修改商品库存,设置为否则可修改门店库存</span></div>
+            <Form-item label="库存" prop="stockNum" v-show="isStockShare"><!--共享-->
                 <Input-number :min="0" :step="1" v-model="productStoreRela.stockNum" placeholder="总库存"
-                              style="width: 268px;"/>
+                              style="width: 268px;" disabled/>
+            </Form-item>
+            <Form-item label="库存" prop="stockNum" v-show="!isStockShare"><!--不共享-->
+                <Input-number :min="0" :step="1" v-model="productStoreRela.stockNum" placeholder="总库存"
+                              style="width: 268px;" />
             </Form-item>
             <Form-item v-if="showInput" label="商品类型" prop="categoryId" style="height: 30px;">
                 <!--<i-input v-model="goods.categoryName" @on-click="categoryTree" icon="eye" readonly="readonly" placeholder="商品类型"/>-->
@@ -166,7 +180,7 @@
                 </i-select>
             </Form-item>
             <Form-item v-if="showInputSpecification" label="规格" prop="specification">
-                <i-input v-model="specification" placeholder="规格" style="width: 268px;"/>
+                <i-input v-model="productStoreRela.specification" placeholder="规格" style="width: 268px;"/>
             </Form-item>
             <Form-item  v-if="showInput" label="零售价" prop="retailPrice">
                 <Input-number :min="0.01" :step="0.01" v-model="productStoreRela.retailPrice" placeholder="零售价格"

+ 20 - 0
kmall-admin/src/main/webapp/WEB-INF/page/shop/thirdmerchantbiz.html

@@ -45,6 +45,26 @@
             <Form-item label="第三方商户名称" prop="thirdPartyMerchName">
                 <i-input v-model="thirdMerchantBiz.thirdPartyMerchName" placeholder="第三方商户名称"/>
             </Form-item>
+            <Form-item label="库存是否共享" prop="isStockShare" v-show="isOperate">
+                <Radio-group v-model="thirdMerchantBiz.isStockShare">
+                    <Radio label="1">
+                        <span>是</span>
+                    </Radio>
+                    <Radio label="0">
+                        <span>否</span>
+                    </Radio>
+                </Radio-group>
+            </Form-item>
+            <Form-item label="门店用户是否共享" prop="isStoreUserShare" v-show="isOperate">
+                <Radio-group v-model="thirdMerchantBiz.isStoreUserShare">
+                    <Radio label="1">
+                        <span>是</span>
+                    </Radio>
+                    <Radio label="0">
+                        <span>否</span>
+                    </Radio>
+                </Radio-group>
+            </Form-item>
             <Form-item label="是否有效" prop="isValid">
                 <Radio-group v-model="thirdMerchantBiz.isValid">
                     <Radio label="1">

+ 1 - 6
kmall-admin/src/main/webapp/WEB-INF/web.xml

@@ -1,3 +1,4 @@
+
 <?xml version="1.0" encoding="UTF-8"?>
 <web-app xmlns="http://xmlns.jcp.org/xml/ns/javaee"
          xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
@@ -24,12 +25,6 @@
         </param-value>
     </context-param>
 
-    <!--<context-param>
-        <param-name>log4jRefreshInterval</param-name>
-        <param-value>600000</param-value>
-
-    </context-param>-->
-
     <!--logback 日志-->
     <context-param>
         <param-name>logbackConfigLocation</param-name>

+ 47 - 1
kmall-admin/src/main/webapp/js/shop/goods.js

@@ -24,6 +24,16 @@ $(function () {
                     return '普通货物';
                 }
             },
+            {label: '库存是否共享', name: 'isStockShare', index: 'isStockShare', width: 80, align: 'center',
+                formatter: function (value) {
+                    if (value == '0') {
+                        return '否';
+                    } else if (value == '1') {
+                        return '是';
+                    }
+                    return '-';
+                }},
+            {label: '商品库存', name: 'goodsNumber', index: 'goodsNumber', width: 80, align: 'center'},
             // {label: '零售价格', name: 'retailPrice', index: 'retail_price', width: 80, align: 'center'},
             // {label: '市场价', name: 'marketPrice', index: 'market_price', width: 80, align: 'center'},
             {
@@ -145,7 +155,11 @@ var vm = new Vue({
         cusNationCodeList: [],
         merchList: [],
         suppliers: [],
-        thirdMerchantBizList: []
+        thirdMerchantBizList: [],
+        isStockShare: false,
+        goodsBizType: '',
+        isOperator: '',
+        share: ''
     },
     methods: {
         delSpeRow: function (index) {
@@ -190,6 +204,7 @@ var vm = new Vue({
         },
         add: function () {
             vm.showList = false;
+            vm.isOperator='add';
             vm.title = "新增";
             vm.uploadList = [];
             vm.goods = {primaryPicUrl: '', listPicUrl: '',videoUrl:'',  categoryId: '', isOnSale: 1, isAppExclusive: 0, isLimited: 0, isHot: 0, categoryName: '', retailPrice: '', marketPrice: '', goodsRate: '', sortOrder: '' };
@@ -212,6 +227,7 @@ var vm = new Vue({
             if (id == null) {
                 return;
             }
+            vm.isOperator='update';
             vm.showList = false;
             vm.title = "修改";
             vm.uploadList = [];
@@ -220,6 +236,13 @@ var vm = new Vue({
             opt.value = vm.goods.categoryId;
             opt.flag = 1;
             vm.getAttributes(opt);*/
+            // var opt = {};
+            // opt.value = vm.goods.thirdPartyMerchCode;
+            // vm.showStockShare(opt);
+            // var opt2 = {};
+            // opt2.value = vm.goods.goodsBizType;
+            // vm.changeGoodsBizType(opt2);
+
             vm.thirdMerchantBizList = [];
             vm.getMacro();
             vm.getCusUnitCodeList();
@@ -395,6 +418,8 @@ var vm = new Vue({
         getInfo: function (id) {
             $.get("../goods/info/" + id, function (r) {
                 vm.goods = r.goods;
+                vm.goodsBizType = r.goods.goodsBizType;
+
                 /*vm.categoryId = r.goods.categoryId;
                 // vm.getCategory();
                 var opt = {};
@@ -467,6 +492,18 @@ var vm = new Vue({
                 }
             });
         },
+        showStockShare:function(opt){
+            var thirdMerchantCode = opt.value;
+            $.get("../thirdmerchantbiz/infoByCode?thirdMerchantCode=" + thirdMerchantCode, function (r) {
+                vm.share = r.thirdMerchantBiz.isStockShare;
+                if(vm.goods.goodsBizType == '00' && r.thirdMerchantBiz.isStockShare == 1){
+                    vm.isStockShare = true;
+                }else{
+                    vm.isStockShare = false;
+                    vm.goods.goodsNumber= '';
+                }
+            });
+        },
         changeGoodsBizType: function(opt) {
             var goodsBizType = opt.value;
             if (vm.goods.goodsBizType == '10' || vm.goods.goodsBizType == '02') {
@@ -474,6 +511,15 @@ var vm = new Vue({
             } else {
                 vm.showInput = true;
             }
+            // console.log(vm.goods.goodsBizType)
+            // console.log(vm.share)
+            if(vm.goods.goodsBizType == '00' && vm.share == 1){
+                vm.isStockShare = true;
+            }else{
+                vm.isStockShare = false;
+                vm.goods.goodsNumber= '';
+            }
+
         },
         handleView(name) {
             this.imgName = name;

+ 37 - 29
kmall-admin/src/main/webapp/js/shop/storeProductStock.js

@@ -24,9 +24,18 @@ $(function () {
             {label: '商品编码', name: 'goodsSn', index: 'goodsSn', width: 80, align: 'center'},
             {label: '名称', name: 'goodsName', index: 'goodsName', width: 160, align: 'left'},
             {label: '产品编码', name: 'productSn', index: 'productSn', width: 80, align: 'center'},
-            {label: '库存', name: 'stockNum', index: 'stockNum', width: 80, align: 'center'},
+            {label: '库存是否共享', name: 'isStockShare', index: 'isStockShare', width: 80, align: 'center',
+                formatter: function (value) {
+                    if (value == '0') {
+                        return '否';
+                    } else if (value == '1') {
+                        return '是';
+                    }
+                    return '-';
+                }},
+            {label: '门店库存', name: 'stockNum', index: 'stockNum', width: 80, align: 'center'},
             {label: '零售价格', name: 'retailPrice', index: 'retailPrice', width: 80, align: 'center'},
-            {label: '市场价', name: 'marketPrice', index: 'marketPrice', width: 80, align: 'center'},
+            // {label: '市场价', name: 'marketPrice', index: 'marketPrice', width: 80, align: 'center'},
             // {label: '库存价格', name: 'stockPrice', index: 'stockPrice', width: 80},
             {
                 label: '销售量',
@@ -143,7 +152,9 @@ var vm = new Vue({
         freights: [],
         storeId: 0,
         specification: '',
-        isOperator: ''
+        isOperator: '',
+        isStockShare: false,
+        isOperatorShow: false
     },
     methods: {
         changeGoods: function (opt) {
@@ -157,30 +168,26 @@ var vm = new Vue({
                     } else {
                         vm.showInputSpecification = false;
                     }
+
+                    $.get("../thirdmerchantbiz/infoByCode?thirdMerchantCode=" + r.goods.thirdPartyMerchCode, function (rr) {
+                        if(rr.thirdMerchantBiz==null){
+                            alert('请先维护第三方商户,门店商户是否共享字段');
+                            vm.isStockShare = true;
+                            return;
+                        }
+                        if(rr.thirdMerchantBiz.isStockShare==null){
+                            alert('请先维护商品信息,第三方商户代码字段');
+                            vm.isStockShare = true;
+                            return;
+                        }
+
+                        if(r.goods.goodsBizType == '00' && rr.thirdMerchantBiz.isStockShare == 1){//共享
+                            vm.isStockShare = true;
+                        }else{
+                            vm.isStockShare = false;
+                        }
+                    });
                 });
-                // $.get("../productstorerela/infoByGoodsId?goodsId=" + goodsId + "&storeId=" + vm.storeId, function (r) {
-                //     vm.productStoreRela = r.productStoreRela;
-                //     vm.showInput = true;
-                //     if (r.productStoreRela.goodsBizType == 11) {
-                //         vm.showInputSpecification = true;
-                //     }else{
-                //         vm.showInputSpecification = false;
-                //     }
-                //
-                //     vm.categoryId = r.productStoreRela.categoryId;
-                //     var opt = {};
-                //     opt.value = vm.productStoreRela.attributeCategory;
-                //     vm.changeCategories(opt);
-                //     // if (r.productStoreRela.attributeEntityList.length > 0) {
-                //     //     vm.attributeEntityList = r.productStoreRela.attributeEntityList;
-                //     // } else {
-                //     //     vm.attributeEntityList = [{'id': '', 'goodsId': '', 'attributeId': '', 'value': '', 'isDelete': 0}];
-                //     // }
-                //     // console.log(r.goods.retailPrice);
-                //     // console.log(r.goods.marketPrice);
-                //     // vm.productStoreRela.retailPrice = r.goods.retailPrice;
-                //     // vm.productStoreRela.marketPrice = r.goods.marketPrice;
-                // });
             }
         },
         changeQueryCategories: function (opt) {
@@ -205,6 +212,7 @@ var vm = new Vue({
             vm.showList = false;
             vm.title = "新增";
             vm.isOperator = 'add';
+            vm.isOperatorShow = false;
             vm.uploadList = [];
             vm.freights = [];
             vm.brands = [];
@@ -222,6 +230,7 @@ var vm = new Vue({
             vm.showList = false;
             vm.title = "修改";
             vm.isOperator = 'update';
+            vm.isOperatorShow = true;
             vm.uploadList = [];
             vm.getInfo(id);
             var opt = {};
@@ -247,8 +256,9 @@ var vm = new Vue({
         },
         saveOrUpdate: function (event) {
             var url = vm.productStoreRela.id == null ? "../productstorerela/save" : "../productstorerela/update";
-            console.log(vm.attributeEntityList);
             vm.productStoreRela.attributeEntityList = vm.attributeEntityList;
+            console.log(vm.productStoreRela);
+            console.log(vm.productStoreRela.specification);
             $.ajax({
                 type: "POST",
                 url: url,
@@ -313,8 +323,6 @@ var vm = new Vue({
                     merchSn = vm.stores[i].merchSn;
             }
             vm.storeId = storeId;
-
-            console.log(vm.isOperator);
             if(vm.isOperator == 'add'){
                 $.get("../goods/queryAll?merchSn=" + merchSn + "&storeId=" +storeId, function (r) {
                     vm.goodss = r.list;

+ 40 - 16
kmall-admin/src/main/webapp/js/shop/thirdmerchantbiz.js

@@ -7,6 +7,25 @@ $(function () {
             {label: '商户编号', name: 'merchSn', index: 'merch_sn', width: 80, align: 'center'},
 			{label: '第三方商户代码', name: 'thirdPartyMerchCode', index: 'third_party_merch_code', width: 80, align: 'center'},
 			{label: '第三方商户名称', name: 'thirdPartyMerchName', index: 'third_party_merch_name', width: 80, align: 'center'},
+            {label: '库存是否共享', name: 'isStockShare', index: 'isStockShare', width: 80, align: 'center',
+                formatter: function (value) {
+                    if (value == '0') {
+                        return '否';
+                    } else if (value == '1') {
+                        return '是';
+                    }
+                    return '';
+                }},
+            {label: '门店用户是否共享', name: 'isStoreUserShare', index: 'isStoreUserShare', width: 80, align: 'center',
+                formatter: function (value) {
+                    if (value == '0') {
+                        return '否';
+                    } else if (value == '1') {
+                        return '是';
+                    }
+                    return '';
+                }},
+
 			{label: '是否有效', name: 'isValid', index: 'is_valid', width: 80, align: 'center',
                 formatter: function (value) {
                     if (value == '0') {
@@ -55,7 +74,7 @@ let vm = new Vue({
 	data: {
         showList: true,
         title: null,
-		thirdMerchantBiz: {isValid: ''},
+		thirdMerchantBiz: {isValid: '', isStockShare:'',isStoreUserShare:''},
 		ruleValidate: {
 			name: [
 				{required: true, message: '名称不能为空', trigger: 'blur'}
@@ -65,6 +84,7 @@ let vm = new Vue({
 		    name: ''
 		},
         merchList: [],
+        isOperate: false
 	},
 	methods: {
 		query: function () {
@@ -74,7 +94,8 @@ let vm = new Vue({
 			vm.showList = false;
 			vm.title = "新增";
             vm.getMerchList();
-			vm.thirdMerchantBiz = {isValid: 0};
+			vm.thirdMerchantBiz = {isValid: 0,isStockShare:0,isStoreUserShare:0};
+			vm.isOperate = true;
 		},
 		update: function (event) {
             let thirdMerchSn = getSelectedRow();
@@ -83,27 +104,30 @@ let vm = new Vue({
 			}
 			vm.showList = false;
             vm.title = "修改";
+            vm.isOperate = false;
             vm.getMerchList();
 
             vm.getInfo(thirdMerchSn)
 		},
 		saveOrUpdate: function (event) {
             let url = vm.thirdMerchantBiz.thirdMerchSn == null ? "../thirdmerchantbiz/save" : "../thirdmerchantbiz/update";
-			$.ajax({
-				type: "POST",
-			    url: url,
-			    contentType: "application/json",
-			    data: JSON.stringify(vm.thirdMerchantBiz),
-                success: function (r) {
-                    if (r.code === 0) {
-                        alert('操作成功', function (index) {
-                            vm.reload();
-                        });
-                    } else {
-                        alert(r.msg);
+            confirm('库存是否共享添加成功后则不可修改!确定添加?', function () {
+                $.ajax({
+                    type: "POST",
+                    url: url,
+                    contentType: "application/json",
+                    data: JSON.stringify(vm.thirdMerchantBiz),
+                    success: function (r) {
+                        if (r.code === 0) {
+                            alert('操作成功', function (index) {
+                                vm.reload();
+                            });
+                        } else {
+                            alert(r.msg);
+                        }
                     }
-                }
-			});
+                });
+            })
 		},
 		del: function (event) {
             let thirdMerchSns = getSelectedRows();