Browse Source

Merge branch 'master' of http://git.ds-bay.com/project/kmall-pt

anyx2918 5 years ago
parent
commit
bc786326bc
100 changed files with 1736 additions and 477 deletions
  1. 12 3
      kmall-admin/src/main/java/com/kmall/admin/controller/OrderController.java
  2. 14 0
      kmall-admin/src/main/java/com/kmall/admin/controller/OrderRefundController.java
  3. 3 2
      kmall-admin/src/main/java/com/kmall/admin/controller/ProductStoreRelaController.java
  4. 6 0
      kmall-admin/src/main/java/com/kmall/admin/controller/SysOssController.java
  5. 2 0
      kmall-admin/src/main/java/com/kmall/admin/controller/mk/store/MkStoreCampMinusGoodsController.java
  6. 23 0
      kmall-admin/src/main/java/com/kmall/admin/dao/MerchUserDao.java
  7. 6 0
      kmall-admin/src/main/java/com/kmall/admin/dao/ProductStoreRelaDao.java
  8. 13 0
      kmall-admin/src/main/java/com/kmall/admin/entity/GoodsEntity.java
  9. 181 0
      kmall-admin/src/main/java/com/kmall/admin/entity/MerchUserEntity.java
  10. 0 10
      kmall-admin/src/main/java/com/kmall/admin/entity/StoreEntity.java
  11. 2 0
      kmall-admin/src/main/java/com/kmall/admin/service/ShippingService.java
  12. 66 53
      kmall-admin/src/main/java/com/kmall/admin/service/impl/GoodsServiceImpl.java
  13. 31 7
      kmall-admin/src/main/java/com/kmall/admin/service/impl/OrderServiceImpl.java
  14. 9 6
      kmall-admin/src/main/java/com/kmall/admin/service/impl/ProductStoreRelaServiceImpl.java
  15. 5 0
      kmall-admin/src/main/java/com/kmall/admin/service/impl/ShippingServiceImpl.java
  16. 6 2
      kmall-admin/src/main/resources/mybatis/mapper/GoodsDao.xml
  17. 164 0
      kmall-admin/src/main/resources/mybatis/mapper/MerchUserDao.xml
  18. 17 11
      kmall-admin/src/main/resources/mybatis/mapper/OrderRefundDao.xml
  19. 8 0
      kmall-admin/src/main/resources/mybatis/mapper/ProductStoreRelaDao.xml
  20. 3 7
      kmall-admin/src/main/resources/mybatis/mapper/StoreDao.xml
  21. 0 2
      kmall-admin/src/main/resources/mybatis/mapper/mk/store/MkStoreCampMinusGoodsDao.xml
  22. 6 1
      kmall-admin/src/main/webapp/WEB-INF/page/mk/mkstorecampminus.html
  23. 12 2
      kmall-admin/src/main/webapp/WEB-INF/page/mk/mkstoreticketdiscount.html
  24. 2 2
      kmall-admin/src/main/webapp/WEB-INF/page/shop/ad.html
  25. 8 8
      kmall-admin/src/main/webapp/WEB-INF/page/shop/brand.html
  26. 4 4
      kmall-admin/src/main/webapp/WEB-INF/page/shop/category.html
  27. 8 8
      kmall-admin/src/main/webapp/WEB-INF/page/shop/goods.html
  28. 2 2
      kmall-admin/src/main/webapp/WEB-INF/page/shop/goodsgroup.html
  29. 1 1
      kmall-admin/src/main/webapp/WEB-INF/page/shop/goodsspecification.html
  30. 6 6
      kmall-admin/src/main/webapp/WEB-INF/page/shop/order.html
  31. 5 5
      kmall-admin/src/main/webapp/WEB-INF/page/shop/storeProductStock.html
  32. 8 1
      kmall-admin/src/main/webapp/WEB-INF/page/shop/storemngchange.html
  33. 8 3
      kmall-admin/src/main/webapp/WEB-INF/page/shop/topic.html
  34. 1 1
      kmall-admin/src/main/webapp/WEB-INF/page/shop/topiccategory.html
  35. 42 5
      kmall-admin/src/main/webapp/WEB-INF/page/sys/main.html
  36. 1 1
      kmall-admin/src/main/webapp/js/mk/mkdisthier2.js
  37. 3 3
      kmall-admin/src/main/webapp/js/mk/mkstorecampminus.js
  38. 1 1
      kmall-admin/src/main/webapp/js/mk/mkstoreticketdiscount.js
  39. 1 1
      kmall-admin/src/main/webapp/js/shop/ad.js
  40. 1 1
      kmall-admin/src/main/webapp/js/shop/brand.js
  41. 1 1
      kmall-admin/src/main/webapp/js/shop/category.js
  42. 8 2
      kmall-admin/src/main/webapp/js/shop/goods.js
  43. 1 1
      kmall-admin/src/main/webapp/js/shop/goodsgroup.js
  44. 1 1
      kmall-admin/src/main/webapp/js/shop/goodsspecification.js
  45. 7 0
      kmall-admin/src/main/webapp/js/shop/order.js
  46. 10 1
      kmall-admin/src/main/webapp/js/shop/orderrefund.js
  47. 0 36
      kmall-admin/src/main/webapp/js/shop/storeProductStock.js
  48. 16 5
      kmall-admin/src/main/webapp/js/shop/storemngchange.js
  49. 1 1
      kmall-admin/src/main/webapp/js/shop/topic.js
  50. 1 1
      kmall-admin/src/main/webapp/js/shop/topiccategory.js
  51. 10 1
      kmall-admin/src/main/webapp/js/statis/mkstoretopicstat.js
  52. 13 6
      kmall-api/src/main/java/com/kmall/api/api/ApiAuthController.java
  53. 16 6
      kmall-api/src/main/java/com/kmall/api/api/ApiCartController.java
  54. 0 1
      kmall-api/src/main/java/com/kmall/api/api/ApiOrderController.java
  55. 12 3
      kmall-api/src/main/java/com/kmall/api/api/ApiStoreCampMinusController.java
  56. 11 3
      kmall-api/src/main/java/com/kmall/api/api/ApiStoreTicketDiscountController.java
  57. 2 0
      kmall-api/src/main/java/com/kmall/api/dao/ApiGoodsMapper.java
  58. 2 0
      kmall-api/src/main/java/com/kmall/api/dao/ApiMerchUserMapper.java
  59. 0 2
      kmall-api/src/main/java/com/kmall/api/dao/ApiStoreMapper.java
  60. 11 0
      kmall-api/src/main/java/com/kmall/api/dto/CampMinusDto.java
  61. 18 0
      kmall-api/src/main/java/com/kmall/api/dto/CheckOutDto.java
  62. 19 0
      kmall-api/src/main/java/com/kmall/api/dto/UserCouponDto.java
  63. 53 0
      kmall-api/src/main/java/com/kmall/api/entity/CartVo.java
  64. 13 0
      kmall-api/src/main/java/com/kmall/api/entity/GoodsVo.java
  65. 10 0
      kmall-api/src/main/java/com/kmall/api/entity/MerchUserVo.java
  66. 30 0
      kmall-api/src/main/java/com/kmall/api/entity/OrderGoodsVo.java
  67. 20 0
      kmall-api/src/main/java/com/kmall/api/entity/OrderVo.java
  68. 10 0
      kmall-api/src/main/java/com/kmall/api/entity/ThirdMerchantBizVo.java
  69. 11 0
      kmall-api/src/main/java/com/kmall/api/entity/UserCouponVo.java
  70. 4 3
      kmall-api/src/main/java/com/kmall/api/entity/mk/MkStoreCampMinusVo.java
  71. 166 29
      kmall-api/src/main/java/com/kmall/api/service/ApiCartService.java
  72. 1 0
      kmall-api/src/main/java/com/kmall/api/service/ApiGoodsService.java
  73. 3 0
      kmall-api/src/main/java/com/kmall/api/service/ApiMerchUserService.java
  74. 160 53
      kmall-api/src/main/java/com/kmall/api/service/ApiOrderService.java
  75. 0 3
      kmall-api/src/main/java/com/kmall/api/service/ApiStoreService.java
  76. 1 0
      kmall-api/src/main/java/com/kmall/api/service/ApiUserCouponService.java
  77. 37 26
      kmall-api/src/main/java/com/kmall/api/service/mk/ApiMkStoreCampMinusService.java
  78. 20 16
      kmall-api/src/main/java/com/kmall/api/service/mk/ApiMkStorePromStatService.java
  79. 21 0
      kmall-api/src/main/java/com/kmall/api/service/mk/ApiMkStoreTicketDiscountService.java
  80. 14 50
      kmall-api/src/main/resources/mybatis/mapper/ApiCartMapper.xml
  81. 2 5
      kmall-api/src/main/resources/mybatis/mapper/ApiFootprintMapper.xml
  82. 12 5
      kmall-api/src/main/resources/mybatis/mapper/ApiGoodsMapper.xml
  83. 17 2
      kmall-api/src/main/resources/mybatis/mapper/ApiMerchUserMapper.xml
  84. 9 3
      kmall-api/src/main/resources/mybatis/mapper/ApiOrderGoodsMapper.xml
  85. 3 1
      kmall-api/src/main/resources/mybatis/mapper/ApiOrderMapper.xml
  86. 1 12
      kmall-api/src/main/resources/mybatis/mapper/ApiStoreMapper.xml
  87. 9 3
      kmall-api/src/main/resources/mybatis/mapper/mk/ApiMkStoreCampMinusMapper.xml
  88. 6 1
      kmall-common/pom.xml
  89. 33 0
      kmall-common/src/main/java/com/kmall/common/constant/Dict.java
  90. 1 1
      kmall-common/src/main/java/com/kmall/common/fileserver/util/FileManager.java
  91. 3 1
      kmall-common/src/main/java/com/kmall/common/utils/DateUtils.java
  92. 1 1
      kmall-common/src/main/java/com/kmall/common/utils/JacksonStringUnicodeSerializer.java
  93. 61 0
      kmall-common/src/main/java/com/kmall/common/utils/file/FileUploadUtil.java
  94. 1 1
      kmall-gen/src/main/resources/template/list.js.vm
  95. 6 0
      kmall-schedule/src/main/java/com/kmall/schedule/dao/QzOrderMapper.java
  96. 28 17
      kmall-schedule/src/main/java/com/kmall/schedule/quartz/OrderTask.java
  97. 91 4
      kmall-schedule/src/main/java/com/kmall/schedule/service/QzOrderService.java
  98. 20 4
      kmall-schedule/src/main/resources/mybatis/mapper/QzOrderMapper.xml
  99. 2 1
      wx-mall/app.json
  100. 5 5
      wx-mall/app.wxss

+ 12 - 3
kmall-admin/src/main/java/com/kmall/admin/controller/OrderController.java

@@ -65,6 +65,8 @@ public class OrderController {
     private PinganResponseService pinganResponseService;
     @Autowired
     private ExcelUtil excelUtil;
+    @Autowired
+    private ShippingService shippingService;
 
     /**
      * 列表
@@ -421,8 +423,8 @@ public class OrderController {
                 orderRefundService.update(orderRefund);//退款记录
             }
             OrderExceptionRecordEntity mallOrderExceptionRecord = new OrderExceptionRecordEntity();
-            mallOrderExceptionRecord.setUserId(Integer.parseInt(orderInfo.getUserId() + ""));
             mallOrderExceptionRecord.setOrderSn(orderInfo.getOrderSn());
+            mallOrderExceptionRecord.setUserId(Integer.parseInt(orderInfo.getUserId() + ""));
             mallOrderExceptionRecord.setExceptionStatus(Dict.exceptionStatus.item_03.getItem());
             mallOrderExceptionRecord.setExceptionContent("退款失败" + result.getErr_code_des());
             mallOrderExceptionRecord.setCreateTime(new Date());
@@ -447,8 +449,8 @@ public class OrderController {
             OrderRefundEntity mallOrderRefund = orderRefundService.queryObjectByOrderId(orderInfo.getId());
             OrderRefundEntity orderRefund = new OrderRefundEntity();
             orderRefund.setRefundType(Integer.parseInt(Dict.RefundType.item_1.getItem()));
-            orderRefund.setRefundMoney(BigDecimal.valueOf(orderInfo.getActualPrice().doubleValue()));
             orderRefund.setRefundStatus(Integer.parseInt(Dict.RefundStatus.item_4.getItem()));
+            orderRefund.setRefundMoney(BigDecimal.valueOf(orderInfo.getActualPrice().doubleValue()));
 //            orderRefund.setOutRefundNo(result.getOut_refund_no());
             orderRefund.setModTime(new Date());
             if (mallOrderRefund != null) {
@@ -759,8 +761,15 @@ public class OrderController {
             if(orderInfo.getShippingStatus() == Integer.parseInt(Dict.shippingStatus.item_1.getItem())) {
                 OrderEntity order = new OrderEntity();
                 order.setId(orderInfo.getId());
-                order.setShippingName(orderEntity.getShippingName());
                 order.setShippingCode(orderEntity.getShippingCode());
+                Map map = new HashMap();
+                map.put("code", orderEntity.getShippingCode());
+                ShippingEntity shippingEntity = shippingService.queryObjectByCode(orderEntity.getShippingCode());
+                if(shippingEntity != null) {
+                    order.setShippingName(shippingEntity.getName());
+                }else{
+                    throw new RRException("此订单修改的快递公司信息不存在!不能操作");
+                }
                 order.setShippingNo(orderEntity.getShippingNo());
                 order.setModerSn(ShiroUtils.getUserEntity().getUsername());
                 order.setModTime(new Date());

+ 14 - 0
kmall-admin/src/main/java/com/kmall/admin/controller/OrderRefundController.java

@@ -40,6 +40,8 @@ public class OrderRefundController {
     @ResponseBody
     public R list(@RequestParam Map<String, Object> params) {
         ParamUtils.setQueryPowerByRoleType(params, "storeId", "merchSn", "thirdPartyMerchCode");
+        params.put("sidx", "mod_time");
+        params.put("order", "desc");
         //查询列表数据
         Query query = new Query(params);
 
@@ -59,6 +61,18 @@ public class OrderRefundController {
     }
 
     /**
+     * 总计
+     */
+    @RequestMapping("/queryTotal")
+    @ResponseBody
+    public R queryTotal(@RequestParam Map<String, Object> params) {
+        ParamUtils.setQueryPowerByRoleType(params, "storeId", "merchSn", "thirdPartyMerchCode");
+        int total = orderRefundService.queryTotal(params);
+
+        return R.ok().put("sum", total);
+    }
+
+    /**
      * 查看信息
      */
     @RequestMapping("/info/{id}")

+ 3 - 2
kmall-admin/src/main/java/com/kmall/admin/controller/ProductStoreRelaController.java

@@ -52,7 +52,8 @@ public class ProductStoreRelaController {
         Query query = new Query(params);
 
         List<ProductStoreRelaEntity> productStoreRelaList = productStoreRelaService.queryList(query);
-        /*for (ProductStoreRelaEntity pro: productStoreRelaList) {
+        //共享库存以商品总库存为准
+        for (ProductStoreRelaEntity pro: productStoreRelaList) {
             if(org.apache.commons.lang3.StringUtils.isNotEmpty(pro.getIsStockShare())) {
                 if(org.apache.commons.lang3.StringUtils.isNotEmpty(pro.getGoodsBizType())) {
                     if (pro.getGoodsBizType().equalsIgnoreCase(Dict.orderBizType.item_00.getItem())) {
@@ -62,7 +63,7 @@ public class ProductStoreRelaController {
                     }
                 }
             }
-        }*/
+        }
         int total = productStoreRelaService.queryTotal(query);
 
         PageUtils pageUtil = new PageUtils(productStoreRelaList, total, query.getLimit(), query.getPage());

+ 6 - 0
kmall-admin/src/main/java/com/kmall/admin/controller/SysOssController.java

@@ -109,6 +109,12 @@ public class SysOssController {
         }
 //        String name = file.getOriginalFilename();
 //        Thumbnails.of(name).size(200, 200).keepAspectRatio(false).allowOverwrite(true).toFile(name);
+        int AllowImgFileSize=0; //允许上传图片文件的大小 0为无限制 单位:KB
+        Long size = file.getSize();
+        int ImgFileSize=Math.round(size/1024*100)/100;//取得图片文件的大小
+        if(ImgFileSize > 200){
+            throw new RRException("上传图片,不能超过 300k");
+        }
         //上传文件
         String url = FileManager.upload(file);
 

+ 2 - 0
kmall-admin/src/main/java/com/kmall/admin/controller/mk/store/MkStoreCampMinusGoodsController.java

@@ -5,6 +5,7 @@ import java.util.Map;
 
 import com.kmall.admin.entity.mk.store.MkStoreCampMinusGoodsEntity;
 import com.kmall.admin.service.mk.store.MkStoreCampMinusGoodsService;
+import com.kmall.admin.utils.ParamUtils;
 import com.kmall.common.utils.PageUtils;
 import com.kmall.common.utils.Query;
 import com.kmall.common.utils.R;
@@ -46,6 +47,7 @@ public class MkStoreCampMinusGoodsController {
     @ResponseBody
     public R queryCampMinusGoodsByIdList(@RequestParam Map<String, Object> params) {
         //查询列表数据
+        ParamUtils.setName(params, "goodsName");
         Query query = new Query(params);
         List<MkStoreCampMinusGoodsEntity> mkStoreCampMinusGoodsList = mkStoreCampMinusGoodsService.queryCampMinusGoodsByIdList(query);
         int total = mkStoreCampMinusGoodsService.queryCampMinusGoodsByIdTotal(query);

+ 23 - 0
kmall-admin/src/main/java/com/kmall/admin/dao/MerchUserDao.java

@@ -0,0 +1,23 @@
+package com.kmall.admin.dao;
+
+
+import com.kmall.admin.entity.MerchUserEntity;
+import com.kmall.manager.dao.BaseDao;
+import org.apache.ibatis.annotations.Param;
+
+import java.util.List;
+
+/**
+ * Dao
+ *
+ * @author huangyq
+ * @email admin@qhdswl.com
+ * @date 2018-12-05 14:34:32
+ */
+public interface MerchUserDao extends BaseDao<MerchUserEntity> {
+    MerchUserEntity queryObjectByStoreId(@Param("storeId") Long storeId, @Param("userId") Long userId);
+
+    List<MerchUserEntity> queryMerchUserByLoadGoods(@Param("storeId") Long storeId);
+
+    Integer updateStoreLoadGoodsById(MerchUserEntity merchUserEntity);
+}

+ 6 - 0
kmall-admin/src/main/java/com/kmall/admin/dao/ProductStoreRelaDao.java

@@ -63,4 +63,10 @@ public interface ProductStoreRelaDao extends BaseDao<ProductStoreRelaEntity> {
      * @return 总数
      */
     int queryGoodsRealListByTopicIdTotal(Map<String, Object> map);
+
+    /**
+     * 共享库存商品库存变化,修改该商品的所有库存信息
+     * @param productStoreRelaEntity
+     */
+    void updateStockNumByGoodsId(ProductStoreRelaEntity productStoreRelaEntity);
 }

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

@@ -192,6 +192,19 @@ public class GoodsEntity implements Serializable {
     private String goodsIsStockShare;
     private String isStockShareBySuppler;
 
+    /**
+     * 商品库存数量变化后是否已共享,0:否,1:是(下单、退款、取消订单触发)
+     */
+    private String isGoodsShareStock;
+
+    public String getIsGoodsShareStock() {
+        return isGoodsShareStock;
+    }
+
+    public void setIsGoodsShareStock(String isGoodsShareStock) {
+        this.isGoodsShareStock = isGoodsShareStock;
+    }
+
     public String getIsSupplierGoods() {
         return isSupplierGoods;
     }

+ 181 - 0
kmall-admin/src/main/java/com/kmall/admin/entity/MerchUserEntity.java

@@ -0,0 +1,181 @@
+package com.kmall.admin.entity;
+
+import java.io.Serializable;
+import java.util.Date;
+
+/**
+ * 实体
+ * 表名 mall_merch_user
+ *
+ * @author huangyq
+ * @email admin@qhdswl.com
+ * @date 2018-12-05 14:34:32
+ */
+public class MerchUserEntity implements Serializable {
+    private static final long serialVersionUID = 1L;
+
+    /**
+     * 主键
+     */
+    private Integer id;
+    /**
+     * 商户编号
+     */
+    private String merchSn;
+    /**
+     * 门店编号
+     */
+    private Integer storeId;
+    /**
+     * 用户编号
+     */
+    private Integer userId;
+    /**
+     * 创建人编号
+     */
+    private String createrSn;
+    /**
+     * 创建时间
+     */
+    private Date createTime;
+    /**
+     * 修改人编号
+     */
+    private String moderSn;
+    /**
+     * 修改时间
+     */
+    private Date modTime;
+    /**
+     * 时间戳
+     */
+    private Date tstm;
+
+    private String isLoadGoods;
+
+    public String getIsLoadGoods() {
+        return isLoadGoods;
+    }
+
+    public void setIsLoadGoods(String isLoadGoods) {
+        this.isLoadGoods = isLoadGoods;
+    }
+
+    /**
+     * 设置:主键
+     */
+    public void setId(Integer id) {
+        this.id = id;
+    }
+
+    /**
+     * 获取:主键
+     */
+    public Integer getId() {
+        return id;
+    }
+    /**
+     * 设置:商户编号
+     */
+    public void setMerchSn(String merchSn) {
+        this.merchSn = merchSn;
+    }
+
+    /**
+     * 获取:商户编号
+     */
+    public String getMerchSn() {
+        return merchSn;
+    }
+    /**
+     * 设置:门店编号
+     */
+    public void setStoreId(Integer storeId) {
+        this.storeId = storeId;
+    }
+
+    /**
+     * 获取:门店编号
+     */
+    public Integer getStoreId() {
+        return storeId;
+    }
+    /**
+     * 设置:用户编号
+     */
+    public void setUserId(Integer userId) {
+        this.userId = userId;
+    }
+
+    /**
+     * 获取:用户编号
+     */
+    public Integer getUserId() {
+        return userId;
+    }
+    /**
+     * 设置:创建人编号
+     */
+    public void setCreaterSn(String createrSn) {
+        this.createrSn = createrSn;
+    }
+
+    /**
+     * 获取:创建人编号
+     */
+    public String getCreaterSn() {
+        return createrSn;
+    }
+    /**
+     * 设置:创建时间
+     */
+    public void setCreateTime(Date createTime) {
+        this.createTime = createTime;
+    }
+
+    /**
+     * 获取:创建时间
+     */
+    public Date getCreateTime() {
+        return createTime;
+    }
+    /**
+     * 设置:修改人编号
+     */
+    public void setModerSn(String moderSn) {
+        this.moderSn = moderSn;
+    }
+
+    /**
+     * 获取:修改人编号
+     */
+    public String getModerSn() {
+        return moderSn;
+    }
+    /**
+     * 设置:修改时间
+     */
+    public void setModTime(Date modTime) {
+        this.modTime = modTime;
+    }
+
+    /**
+     * 获取:修改时间
+     */
+    public Date getModTime() {
+        return modTime;
+    }
+    /**
+     * 设置:时间戳
+     */
+    public void setTstm(Date tstm) {
+        this.tstm = tstm;
+    }
+
+    /**
+     * 获取:时间戳
+     */
+    public Date getTstm() {
+        return tstm;
+    }
+}

+ 0 - 10
kmall-admin/src/main/java/com/kmall/admin/entity/StoreEntity.java

@@ -82,16 +82,6 @@ public class StoreEntity implements Serializable {
 
     private String isValid;
 
-    private String isLoadGoods;
-
-    public String getIsLoadGoods() {
-        return isLoadGoods;
-    }
-
-    public void setIsLoadGoods(String isLoadGoods) {
-        this.isLoadGoods = isLoadGoods;
-    }
-
     public String getIsValid() {
         return isValid;
     }

+ 2 - 0
kmall-admin/src/main/java/com/kmall/admin/service/ShippingService.java

@@ -22,6 +22,8 @@ public interface ShippingService {
      */
     ShippingEntity queryObject(Integer id);
 
+    ShippingEntity queryObjectByCode(String code);
+
     /**
      * 分页查询
      *

+ 66 - 53
kmall-admin/src/main/java/com/kmall/admin/service/impl/GoodsServiceImpl.java

@@ -56,6 +56,10 @@ public class GoodsServiceImpl implements GoodsService {
     private ThirdMerchantBizDao thirdMerchantBizDao;
     @Autowired
     private MngChangeDao mngChangeDao;
+    @Autowired
+    private MerchUserDao merchUserDao;
+    @Autowired
+    private StoreMngChangeDao storeMngChangeDao;
 
     @Override
     public GoodsEntity queryObject(Integer id) {
@@ -335,20 +339,6 @@ public class GoodsServiceImpl implements GoodsService {
         if (galleryEntityList == null || galleryEntityList.size() <= 0) {
             throw new RRException("至少保留一张商品轮播图!");
         }
-        List<ProductStoreRelaEntity> proStoreList = productStoreRelaDao.queryByGoodsId(goodsEntity.getId());
-        Long[] storeIds = new Long[proStoreList.size()];
-        if(goodsEntity.getIsStockShare().equalsIgnoreCase(Dict.isStockShare.item_0.getItem())) {
-            Integer goodsNumber = goods.getGoodsNumber();//商品总库存
-            Integer storeTotalGoodsNumber = 0;//商品分配库存
-            for (int i = 0; i < proStoreList.size(); i++) {
-                ProductStoreRelaEntity relaEntity = proStoreList.get(i);
-                storeTotalGoodsNumber = storeTotalGoodsNumber + relaEntity.getStockNum();
-                storeIds[i] = relaEntity.getStoreId();
-            }
-            if (goodsNumber < storeTotalGoodsNumber) {
-                throw new RRException("该商品已在各门店分配库存" + storeTotalGoodsNumber + ",当前商品总库存不能小于分配库存总额!请先修改门店库存!");
-            }
-        }
 
         List<GoodsEntity> prodbarGoodsList = goodsDao.queryObjectByProdBarcode(goods.getProdBarcode(),goods.getMerchSn(),goods.getId());
         if(prodbarGoodsList != null && prodbarGoodsList.size() > 0){
@@ -412,40 +402,62 @@ public class GoodsServiceImpl implements GoodsService {
         goodsDao.update(goods);
 
         // 保税商品修改各个门店商品价格
-        List<ProductStoreRelaEntity> productStoreRelaEntityList = productStoreRelaDao.queryByGoodsId(goods.getId());
+        List<ProductStoreRelaEntity> productStoreRelaEntityList = productStoreRelaDao.queryByGoodsId(goodsEntity.getId());
+        Long[] storeIds = new Long[productStoreRelaEntityList.size()];
+        Integer goodsNumber = goods.getGoodsNumber();//商品总库存
+        Integer storeTotalGoodsNumber = 0;//商品分配库存
         if (productStoreRelaEntityList != null && productStoreRelaEntityList.size() > 0) {
-            for (ProductStoreRelaEntity productStoreRela : productStoreRelaEntityList) {
+            for (int i = 0; i < productStoreRelaEntityList.size(); i++) {
                 //修改该商品的所属商户信息,如在该商户门店中有该上架的商品信息,则提示该商品不能修改
-                /*if(org.apache.commons.lang3.StringUtils.isNotEmpty(productStoreRela.getMerchSn()) && productStoreRela.getMerchSn().equalsIgnoreCase(goods.getMerchSn())
-                        && goods.getIsOnSale() == Integer.parseInt(Dict.isOnSale.item_1.getItem())) {
-                    if (goods.getRetailPrice() != null) {
-                        productStoreRela.setRetailPrice(goods.getRetailPrice());
-                    }
-                    if (goods.getMarketPrice() != null) {
-                        productStoreRela.setMarketPrice(goods.getMarketPrice());
-                    }
-                    productStoreRelaDao.update(productStoreRela);
-                }else {
-                    if (goods.getIsOnSale() == Integer.parseInt(Dict.isOnSale.item_0.getItem())) {
-                        if (goods.getRetailPrice() != null) {
-                            productStoreRela.setRetailPrice(goods.getRetailPrice());
-                        }
-                        if (goods.getMarketPrice() != null) {
-                            productStoreRela.setMarketPrice(goods.getMarketPrice());
-                        }
-                        productStoreRela.setMerchSn("");
-                        productStoreRelaDao.update(productStoreRela);
-                    } else {
-                        throw new RRException("商品编码为【" + goods.getGoodsSn() + "】的商品已上架在商户编号为【" + productStoreRela.getMerchSn() + "】的门店中,可先将该商品下架后再进行修改!");
-                    }
-                }*/
-                if(org.apache.commons.lang3.StringUtils.isNotEmpty(productStoreRela.getMerchSn()) && productStoreRela.getMerchSn().equalsIgnoreCase(goods.getMerchSn())
+                ProductStoreRelaEntity relaEntity = productStoreRelaEntityList.get(i);
+                if(org.apache.commons.lang3.StringUtils.isNotEmpty(relaEntity.getMerchSn()) && relaEntity.getMerchSn().equalsIgnoreCase(goods.getMerchSn())
                         && goods.getIsOnSale() == Integer.parseInt(Dict.isOnSale.item_1.getItem())) {
                 }else {
                     if (goods.getIsOnSale() != Integer.parseInt(Dict.isOnSale.item_0.getItem())) {
-                        throw new RRException("商品编码为【" + goods.getGoodsSn() + "】的商品已上架在商户编号为【" + productStoreRela.getMerchSn() + "】的门店中,可先将该商品下架后再进行修改!");
+                        throw new RRException("商品编码为【" + goods.getGoodsSn() + "】的商品已上架在商户编号为【" + relaEntity.getMerchSn() + "】的门店中,可先将该商品下架后再进行修改!");
                     }
                 }
+                storeTotalGoodsNumber = storeTotalGoodsNumber + relaEntity.getStockNum();
+                storeIds[i] = relaEntity.getStoreId();
+            }
+        }
+        if(goodsEntity.getIsStockShare().equalsIgnoreCase(Dict.isStockShare.item_0.getItem())) {
+            if (goodsNumber < storeTotalGoodsNumber) {
+                throw new RRException("该商品已在各门店分配库存" + storeTotalGoodsNumber + ",当前商品总库存不能小于分配库存总额!请先修改门店库存!");
+            }
+        }else{
+            //共享库存商品库存变化,修改该商品的所有库存信息
+            ProductStoreRelaEntity productStoreRelaEntity = new ProductStoreRelaEntity();
+            productStoreRelaEntity.setStockNum(goodsNumber);
+            productStoreRelaEntity.setGoodsId(goods.getId());
+            productStoreRelaDao.updateStockNumByGoodsId(productStoreRelaEntity);
+
+            for (int i = 0; i < productStoreRelaEntityList.size(); i++) {
+                ProductStoreRelaEntity relaEntity = productStoreRelaEntityList.get(i);
+                //新增库存操作记录
+                StoreMngChangeEntity storeMngChangeEntity = new StoreMngChangeEntity();
+                storeMngChangeEntity.setChangeReason("共享库存变更,更新门店商品库存");
+                storeMngChangeEntity.setGoodsId(Integer.parseInt(String.valueOf(relaEntity.getGoodsId())));
+                storeMngChangeEntity.setStoreId(Integer.parseInt(String.valueOf(relaEntity.getStoreId())));
+                storeMngChangeEntity.setMerchSn(goods.getMerchSn());
+                storeMngChangeEntity.setCreateTime(new Date());
+                storeMngChangeEntity.setModTime(new Date());
+                storeMngChangeEntity.setCreaterSn(user.getUsername());
+                storeMngChangeEntity.setModerSn(user.getUsername());
+                storeMngChangeEntity.setIsValid(0);
+                Integer orginalNum = relaEntity.getStockNum()==null?0:relaEntity.getStockNum();//原有库存
+                if(goodsNumber != orginalNum) {
+                    if (orginalNum > goodsNumber) {
+                        storeMngChangeEntity.setChangeType(Dict.changeType.item_4.getItem());
+                        storeMngChangeEntity.setStoreChangeNum(orginalNum - goodsNumber);//变化数
+                    } else {
+                        storeMngChangeEntity.setChangeType(Dict.changeType.item_3.getItem());
+                        storeMngChangeEntity.setStoreChangeNum(goodsNumber - orginalNum);//变化数
+                    }
+                    storeMngChangeEntity.setStoreOriginalNum(orginalNum);//原库存数
+                    storeMngChangeEntity.setStoreValidNum(goodsNumber);//可用数
+                    storeMngChangeDao.save(storeMngChangeEntity);
+                }
             }
         }
 
@@ -525,6 +537,12 @@ public class GoodsServiceImpl implements GoodsService {
                 goodsSpecificationDao.save(goodsSpecification);
             }
 
+            //更新门店商品是否有修改字段
+            if(storeIds.length > 0){
+                for(int i=0;i<storeIds.length;i++){
+                    updateLoadGoodsByStoreId(storeIds[i], user);
+                }
+            }
             if(product == null){
                 product = new ProductEntity();
                 product.setGoodsSn(goods.getGoodsSn());
@@ -540,12 +558,6 @@ public class GoodsServiceImpl implements GoodsService {
                 return productDao.update(product);
             }
         }
-        //更新门店商品是否有修改字段
-        if(storeIds.length > 0){
-            for(int i=0;i<storeIds.length;i++){
-                updateLoadGoodsByStoreId(storeIds[i], user);
-            }
-        }
         return 1;
     }
 
@@ -555,12 +567,13 @@ public class GoodsServiceImpl implements GoodsService {
      * @param user
      */
     private void updateLoadGoodsByStoreId(Long storeId, SysUserEntity user){
-        StoreEntity storeEntity = new StoreEntity();
-        storeEntity.setIsLoadGoods("1");
-        storeEntity.setModerSn(user.getUsername());
-        storeEntity.setModTime(new Date());
-        storeEntity.setId(storeId);
-        storeDao.update(storeEntity);
+        List<MerchUserEntity> list = merchUserDao.queryMerchUserByLoadGoods(storeId);
+        for(MerchUserEntity entity : list) {
+            entity.setIsLoadGoods("1");
+            entity.setModerSn(user.getUsername());
+            entity.setStoreId(Integer.valueOf(String.valueOf(storeId)));
+            merchUserDao.updateStoreLoadGoodsById(entity);
+        }
     }
 
     @Override

+ 31 - 7
kmall-admin/src/main/java/com/kmall/admin/service/impl/OrderServiceImpl.java

@@ -428,7 +428,7 @@ public class OrderServiceImpl implements OrderService {
     }
 
     private void updateStock(OrderEntity order, String changeReason){
-        Map<String, Object> map = new HashMap<String, Object>();
+        Map<String, Object> map = new HashMap();
         SysUserEntity user = ShiroUtils.getUserEntity();
         map.put("orderId", order.getId());
         List<OrderGoodsEntity> orderGoodsVoList = orderGoodsDao.queryList(map);
@@ -444,22 +444,46 @@ public class OrderServiceImpl implements OrderService {
             }
 
             Integer stockNum = 0;
-            // TODO: 2019/3/5  普通商品不受共享库存影响,直接取门店配置库存
-            if (null != storeRelaEntity.getStockNum()) {
-                stockNum = storeRelaEntity.getStockNum();
-                //还原门店库存
-                resetStoreGoodsStock(stockNum, storeRelaEntity, orderGoodsEntity, sellVolume, changeReason, user);
-            }
             GoodsEntity goodsEntity = goodsDao.queryObject(orderGoodsEntity.getGoodsId());
             if(goodsEntity != null){
                 stockNum = goodsEntity.getGoodsNumber();
                 //还原商户商品库存
                 resetGoodsStock(stockNum, storeRelaEntity, orderGoodsEntity, sellVolume, changeReason, user);
             }
+            if (null != storeRelaEntity.getStockNum()) {
+                stockNum = storeRelaEntity.getStockNum();
+                //普通商品不受共享库存影响,直接取门店配置库存
+                //该商品所属第三方商户不是共享库存
+                if(goodsEntity.getIsStockShare().equalsIgnoreCase(Dict.isStockShare.item_0.getItem())) {
+                    resetStoreGoodsStock(stockNum, storeRelaEntity, orderGoodsEntity, sellVolume, changeReason, user);//还原门店库存
+                }else{
+                    //该商品所属第三方商户是共享库存,但商品业务类型不是00保税备货
+                    if(!goodsEntity.getGoodsBizType().equalsIgnoreCase(Dict.orderBizType.item_00.getItem())){
+                        resetStoreGoodsStock(stockNum, storeRelaEntity, orderGoodsEntity, sellVolume, changeReason, user);//还原门店库存
+                    }
+                }
+            }
+            //该商品所属第三方商户为共享库存,且是保税备货商品,取消订单时改变
+            updateGoodsByIsShareStock(goodsEntity);
         }
     }
 
     /**
+     * 更新商品库存数量变化后是否已共享为0“未共享”
+     * @param goodsInfo
+     */
+    private void updateGoodsByIsShareStock(GoodsEntity goodsInfo){
+        //该商品所属第三方商户为共享库存,且是保税备货商品
+        if(goodsInfo.getIsStockShare().equalsIgnoreCase(Dict.isStockShare.item_1.getItem())
+                && goodsInfo.getGoodsBizType().equalsIgnoreCase(Dict.orderBizType.item_00.getItem())) {
+            GoodsEntity goodsVo = new GoodsEntity();
+            goodsVo.setId(goodsInfo.getId());
+            //商品库存数量变化后是否已共享,0:否,1:是(下单、退款、取消订单触发)
+            goodsVo.setIsGoodsShareStock(Dict.isGoodsShareStock.item_0.getItem());
+            goodsDao.update(goodsVo);
+        }
+    }
+    /**
      * 还原商品总库存
      * @param stockNum
      * @param storeRelaEntity

+ 9 - 6
kmall-admin/src/main/java/com/kmall/admin/service/impl/ProductStoreRelaServiceImpl.java

@@ -59,6 +59,8 @@ public class ProductStoreRelaServiceImpl implements ProductStoreRelaService {
     private MkDistSellAllocationDao mkDistSellAllocationDao;
     @Autowired
     private StoreDao storeDao;
+    @Autowired
+    private MerchUserDao merchUserDao;
 
     @Override
     public ProductStoreRelaEntity queryObject(Integer id) {
@@ -454,12 +456,13 @@ public class ProductStoreRelaServiceImpl implements ProductStoreRelaService {
      * @param user
      */
     private void updateLoadGoodsByStoreId(String storeId, SysUserEntity user){
-        StoreEntity storeEntity = new StoreEntity();
-        storeEntity.setIsLoadGoods("1");
-        storeEntity.setModerSn(user.getUsername());
-        storeEntity.setModTime(new Date());
-        storeEntity.setId(Long.valueOf(storeId));
-        storeDao.update(storeEntity);
+        List<MerchUserEntity> list = merchUserDao.queryMerchUserByLoadGoods(Long.valueOf(storeId));
+        for(MerchUserEntity entity : list) {
+            entity.setIsLoadGoods("1");
+            entity.setStoreId(Integer.valueOf(String.valueOf(storeId)));
+            entity.setModerSn(user.getUsername());
+            merchUserDao.updateStoreLoadGoodsById(entity);
+        }
     }
 
     /**

+ 5 - 0
kmall-admin/src/main/java/com/kmall/admin/service/impl/ShippingServiceImpl.java

@@ -27,6 +27,11 @@ public class ShippingServiceImpl implements ShippingService {
     }
 
     @Override
+    public ShippingEntity queryObjectByCode(String code) {
+        return shippingDao.queryObjectByCode(code);
+    }
+
+    @Override
     public List<ShippingEntity> queryList(Map<String, Object> map) {
         return shippingDao.queryList(map);
     }

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

@@ -66,6 +66,7 @@
         <result column="isStockShare" property="isStockShare" />
         <result column="gross_weight" property="grossWeight" />
         <result column="net_weight" property="netWeight" />
+        <result property="isGoodsShareStock" column="is_goods_share_stock"/>
 
     </resultMap>
 
@@ -150,7 +151,7 @@
         a.id,a.sku,a.goods_sn,a.name,a.list_pic_url,a.prod_barcode
         FROM
         mall_goods a
-        where a.prod_barcode = #{prodBarcode}
+        where a.prod_barcode = #{prodBarcode} and a.is_delete = 0
         <if test="goodsId != null and goodsId != ''">
             AND a.id != #{goodsId}
         </if>
@@ -386,6 +387,7 @@
 			`is_app_exclusive`,
             `gross_weight`,
             `net_weight`,
+            is_goods_share_stock,
 			`is_limited`,
 			`is_hot`,
 			`creater_sn`,
@@ -433,6 +435,7 @@
 			#{isAppExclusive},
             #{grossWeight},
             #{netWeight},
+            #{isGoodsShareStock},
 			#{isLimited},
 			#{isHot},
 			#{createrSn},
@@ -484,6 +487,7 @@
             <if test="isAppExclusive != null">`is_app_exclusive` = #{isAppExclusive}, </if>
             <if test="grossWeight != null">`gross_weight` = #{grossWeight}, </if>
             <if test="netWeight != null">`net_weight` = #{netWeight}, </if>
+            <if test="isGoodsShareStock != null">`is_goods_share_stock` = #{isGoodsShareStock}, </if>
             <if test="isLimited != null">`is_limited` = #{isLimited}, </if>
             <if test="isHot != null">`is_hot` = #{isHot}, </if>
             <if test="createrSn != null">`creater_sn` = #{createrSn}, </if>
@@ -509,4 +513,4 @@
     <select id="queryMaxId" resultType="java.lang.Long" parameterType="map">
         SELECT MAX(id) FROM mall_goods
     </select>
-</mapper>
+</mapper>

+ 164 - 0
kmall-admin/src/main/resources/mybatis/mapper/MerchUserDao.xml

@@ -0,0 +1,164 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
+
+<mapper namespace="com.kmall.admin.dao.MerchUserDao">
+
+    <resultMap type="com.kmall.admin.entity.MerchUserEntity" id="merchUserMap">
+        <result property="id" column="id"/>
+        <result property="merchSn" column="merch_sn"/>
+        <result property="storeId" column="store_id"/>
+        <result property="userId" column="user_id"/>
+        <result property="createrSn" column="creater_sn"/>
+        <result property="createTime" column="create_time"/>
+        <result property="moderSn" column="moder_sn"/>
+        <result property="modTime" column="mod_time"/>
+        <result property="tstm" column="tstm"/>
+		<result property="isLoadGoods" column="is_load_goods"/>
+    </resultMap>
+
+	<select id="queryObject" resultType="com.kmall.admin.entity.MerchUserEntity">
+		select
+			`id`,
+			`merch_sn`,
+			`store_id`,
+			`user_id`,
+			`creater_sn`,
+			`create_time`,
+			`moder_sn`,
+			`mod_time`,
+			is_load_goods,
+			`tstm`
+		from mall_merch_user
+		where id = #{id}
+	</select>
+
+	<select id="queryObjectByStoreId" resultType="com.kmall.admin.entity.MerchUserEntity">
+		select
+		`id`,
+		`merch_sn`,
+		`store_id`,
+		`user_id`,
+		`creater_sn`,
+		`create_time`,
+		`moder_sn`,
+		`mod_time`,
+		is_load_goods,
+		`tstm`
+		from mall_merch_user
+		where store_id = #{storeId} and user_id = #{userId}
+	</select>
+
+	<select id="queryMerchUserByLoadGoods" resultType="com.kmall.admin.entity.MerchUserEntity">
+		select
+		`id`,
+		`merch_sn`,
+		`store_id`,
+		`user_id`,
+		`creater_sn`,
+		`create_time`,
+		`moder_sn`,
+		`mod_time`,
+		is_load_goods,
+		`tstm`
+		from mall_merch_user
+		where store_id = #{storeId} and is_load_goods = 0
+	</select>
+
+	<select id="queryList" resultType="com.kmall.admin.entity.MerchUserEntity">
+		select
+    		`id`,
+    		`merch_sn`,
+    		`store_id`,
+    		`user_id`,
+    		`creater_sn`,
+    		`create_time`,
+    		`moder_sn`,
+    		`mod_time`,
+			is_load_goods,
+    		`tstm`
+		from mall_merch_user
+		WHERE 1=1
+		<if test="name != null and name.trim() != ''">
+			AND name LIKE concat('%',#{name},'%')
+		</if>
+        <choose>
+            <when test="sidx != null and sidx.trim() != ''">
+                order by ${sidx} ${order}
+            </when>
+			<otherwise>
+                order by id desc
+			</otherwise>
+        </choose>
+		<if test="offset != null and limit != null">
+			limit #{offset}, #{limit}
+		</if>
+	</select>
+	
+ 	<select id="queryTotal" resultType="int">
+		select count(*) from mall_merch_user
+		WHERE 1=1
+        <if test="name != null and name.trim() != ''">
+            AND name LIKE concat('%',#{name},'%')
+        </if>
+	</select>
+	 
+	<insert id="save" parameterType="com.kmall.admin.entity.MerchUserEntity" useGeneratedKeys="true" keyProperty="id">
+		insert into mall_merch_user(
+			`merch_sn`,
+			`store_id`,
+			`user_id`,
+			is_load_goods,
+			`creater_sn`,
+			`create_time`,
+			`moder_sn`,
+			`mod_time`,
+			`tstm`)
+		values(
+			#{merchSn},
+			#{storeId},
+			#{userId},
+			#{isLoadGoods},
+			#{createrSn},
+			#{createTime},
+			#{moderSn},
+			#{modTime},
+			#{tstm})
+	</insert>
+	 
+	<update id="update" parameterType="com.kmall.admin.entity.MerchUserEntity">
+		update mall_merch_user 
+		<set>
+			<if test="merchSn != null">`merch_sn` = #{merchSn}, </if>
+			<if test="storeId != null">`store_id` = #{storeId}, </if>
+			<if test="userId != null">`user_id` = #{userId}, </if>
+			<if test="isLoadGoods != null">`is_load_goods` = #{isLoadGoods}, </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>
+			<if test="modTime != null">`mod_time` = #{modTime}, </if>
+			<if test="tstm != null">`tstm` = #{tstm}</if>
+		</set>
+		where id = #{id}
+	</update>
+	
+	<delete id="delete">
+		delete from mall_merch_user where id = #{value}
+	</delete>
+	
+	<delete id="deleteBatch">
+		delete from mall_merch_user where id in 
+		<foreach item="id" collection="array" open="(" separator="," close=")">
+			#{id}
+		</foreach>
+	</delete>
+
+	<update id="updateStoreLoadGoodsById" parameterType="com.kmall.api.entity.StoreVo">
+		update mall_merch_user
+		<set>
+			<if test="isLoadGoods != null">`is_load_goods` = #{isLoadGoods}, </if>
+			mod_time = now(),
+			<if test="moderSn != null">`moder_sn` = #{moderSn}, </if>
+		</set>
+		where store_id = #{storeId}
+	</update>
+</mapper>

+ 17 - 11
kmall-admin/src/main/resources/mybatis/mapper/OrderRefundDao.xml

@@ -108,22 +108,22 @@
         <if test="thirdPartyMerchCode != null and thirdPartyMerchCode.trim() != ''">
             AND s.third_party_merch_code = #{thirdPartyMerchCode}
         </if>
-        <if test="orderId != null">
-            AND o.id = #{orderId}
-        </if>
         <if test="storeId != null and storeId != ''">
             AND o.store_id = #{storeId}
         </if>
         <if test="merchSn != null and merchSn.trim() != ''">
             AND o.merch_sn = #{merchSn}
         </if>
-        <if test="shippingStatus != null and shippingStatus.trim() != ''">
+        <if test="orderId != null">
+            AND o.id = #{orderId}
+        </if>
+        <if test="shippingStatus != null and shippingStatus != ''">
             AND o.shipping_status = #{shippingStatus}
         </if>
-        <if test="payStatus != null and payStatus.trim() != ''">
+        <if test="payStatus != null and payStatus != ''">
             AND o.pay_status = #{payStatus}
         </if>
-        <if test="orderStatus != null and orderStatus.trim() != ''">
+        <if test="orderStatus != null and orderStatus != ''">
             AND o.order_status = #{orderStatus}
         </if>
         <if test="noCancelStatus != null and noCancelStatus == 'true'">
@@ -132,9 +132,12 @@
         <if test="refundStatus != null">
             AND r.refund_status = #{refundStatus}
         </if>
-        <if test="orderType != null and orderType.trim() != ''">
+        <if test="orderType != null and orderType != ''">
             AND o.order_type = #{orderType}
         </if>
+        <if test="isOnfflineOrder != null and isOnfflineOrder != ''">
+            AND o.is_onffline_order = #{isOnfflineOrder}
+        </if>
         <choose>
             <when test="sidx != null and sidx.trim() != ''">
                 order by ${sidx} ${order}
@@ -173,13 +176,13 @@
         <if test="orderId != null">
             AND o.id = #{orderId}
         </if>
-        <if test="shippingStatus != null and shippingStatus.trim() != ''">
+        <if test="shippingStatus != null and shippingStatus != ''">
             AND o.shipping_status = #{shippingStatus}
         </if>
-        <if test="payStatus != null and payStatus.trim() != ''">
+        <if test="payStatus != null and payStatus != ''">
             AND o.pay_status = #{payStatus}
         </if>
-        <if test="orderStatus != null and orderStatus.trim() != ''">
+        <if test="orderStatus != null and orderStatus != ''">
             AND o.order_status = #{orderStatus}
         </if>
         <if test="noCancelStatus != null and noCancelStatus == 'true'">
@@ -188,9 +191,12 @@
         <if test="refundStatus != null">
             AND r.refund_status = #{refundStatus}
         </if>
-        <if test="orderType != null and orderType.trim() != ''">
+        <if test="orderType != null and orderType != ''">
             AND o.order_type = #{orderType}
         </if>
+        <if test="isOnfflineOrder != null and isOnfflineOrder != ''">
+            AND o.is_onffline_order = #{isOnfflineOrder}
+        </if>
     </select>
 
     <insert id="save" parameterType="com.kmall.admin.entity.OrderRefundEntity" useGeneratedKeys="true" keyProperty="id">

+ 8 - 0
kmall-admin/src/main/resources/mybatis/mapper/ProductStoreRelaDao.xml

@@ -671,4 +671,12 @@
         </if>
     </select>
 
+    <update id="updateStockNumByGoodsId" parameterType="com.kmall.admin.entity.ProductStoreRelaEntity">
+        update mall_product_store_rela a
+        <set>
+            <if test="stockNum != null">a.`stock_num` = #{stockNum},</if>
+        </set>
+        where a.goods_id = #{goodsId}
+    </update>
+
 </mapper>

+ 3 - 7
kmall-admin/src/main/resources/mybatis/mapper/StoreDao.xml

@@ -27,7 +27,6 @@
 		<result property="thirdPartyMerchName" column="third_party_merch_name"/>
 		<result property="exprAgreementType" column="expr_agreement_type"/>
 		<result property="isValid" column="is_valid"/>
-		<result property="isLoadGoods" column="is_load_goods"/>
 
     </resultMap>
 
@@ -44,7 +43,7 @@
 			`county_name`,
 			`latitude`,
 			`longitude`,
-			`cover_radius`,expr_agreement_type,is_load_goods,
+			`cover_radius`,expr_agreement_type,
 			`remark`,merch_sn, merch_name, creater_sn, create_time,third_party_merch_code,third_party_merch_name,
 		moder_sn, mod_time, tstm,is_valid
 		from mall_store
@@ -64,7 +63,7 @@
 		`county_name`,
 		`latitude`,
 		`longitude`,
-		`cover_radius`,expr_agreement_type,is_load_goods,
+		`cover_radius`,expr_agreement_type,
 		`remark`,merch_sn, merch_name, creater_sn, create_time,third_party_merch_code,third_party_merch_name,
     moder_sn, mod_time, tstm,is_valid
 		from mall_store
@@ -104,7 +103,7 @@
 		s.`county_name`,
 		s.`latitude`,
 		s.`longitude`,
-		s.`cover_radius`,s.is_load_goods,
+		s.`cover_radius`,
 		s.`remark`,s.merch_sn, s.merch_name, s.creater_sn, s.create_time,s.third_party_merch_code,t.third_party_merch_name,s.expr_agreement_type,
 		s.moder_sn, s.mod_time, s.tstm,s.is_valid
 		from mall_store s left join third_merchant_biz t on s.third_party_merch_code = t.third_party_merch_code
@@ -180,7 +179,6 @@
 			`longitude`,
 			`cover_radius`,
 			is_valid,
-			is_load_goods,
 			`remark`,
 			third_party_merch_code,
 			third_party_merch_name,
@@ -203,7 +201,6 @@
 			#{longitude},
 			#{coverRadius},
 			#{isValid},
-			#{isLoadGoods},
 			#{remark},
 			#{thirdPartyMerchCode},
 			#{thirdPartyMerchName},
@@ -230,7 +227,6 @@
 			<if test="longitude != null">`longitude` = #{longitude}, </if>
 			<if test="coverRadius != null">`cover_radius` = #{coverRadius}, </if>
 			<if test="isValid != null">`is_valid` = #{isValid}, </if>
-			<if test="isLoadGoods != null">`is_load_goods` = #{isLoadGoods}, </if>
 			<if test="remark != null">`remark` = #{remark},</if>
 			<if test="createrSn != null" >creater_sn = #{createrSn},</if>
 			<if test="createTime != null" >create_time = #{createTime},</if>

+ 0 - 2
kmall-admin/src/main/resources/mybatis/mapper/mk/store/MkStoreCampMinusGoodsDao.xml

@@ -151,7 +151,6 @@
 			LEFT JOIN mall_product_store_rela r ON m.store_rela_id = r.id
 			LEFT JOIN mall_store s ON r.store_id = s.id
 			LEFT JOIN mall_goods g ON r.goods_id = g.id
-			AND s.third_party_merch_code = g.third_party_merch_code
 		WHERE 1=1
 		<if test="goodsName != null and goodsName.trim() != ''">
 			AND g.NAME LIKE concat('%',#{goodsName},'%')
@@ -171,7 +170,6 @@
 		LEFT JOIN mall_product_store_rela r ON m.store_rela_id = r.id
 		LEFT JOIN mall_store s ON r.store_id = s.id
 		LEFT JOIN mall_goods g ON r.goods_id = g.id
-		AND s.third_party_merch_code = g.third_party_merch_code
 		WHERE 1=1
 		<if test="goodsName != null and goodsName.trim() != ''">
 			AND g.NAME LIKE concat('%',#{goodsName},'%')

+ 6 - 1
kmall-admin/src/main/webapp/WEB-INF/page/mk/mkstorecampminus.html

@@ -518,7 +518,7 @@
                         <i-col span="3">
                             <Form-item :label-width="1">
                                 <Upload style="width: 300px;" action="../sys/oss/upload" :format="['jpg','jpeg','png']"
-                                        max-size="2048"
+                                        max-size="100"
                                         :on-success="handleSuccessAdvImgUrl" :on-format-error="handleFormatError"
                                         :show-upload-list="false"
                                         :on-exceeded-size="handleMaxSize">
@@ -532,6 +532,11 @@
                             </Form-item>
                         </i-col>
                     </Row>
+                    <Row>
+                        <i-col span="16" style="margin-top: -30px;">
+                            <span style="margin-left: 140px;color: red;font-size: 12px;">* 尺寸建议410*110像素以内,大小100K以下</span>
+                        </i-col>
+                    </Row>
                     <Form-item label="活动说明" prop="advDesc">
                         <i-input type="textarea" :rows="3" v-model="mkStoreCampMinus.advDesc" placeholder="活动说明" style="width: 400px"></i-input>
                     </Form-item>

+ 12 - 2
kmall-admin/src/main/webapp/WEB-INF/page/mk/mkstoreticketdiscount.html

@@ -402,7 +402,7 @@
                         <i-col span="3">
                             <Form-item :label-width="1">
                                 <Upload style="width: 300px;" action="../sys/oss/upload" :format="['jpg','jpeg','png']"
-                                        max-size="2048"
+                                        max-size="100"
                                         :on-success="handleSuccessAdvImgUrl" :on-format-error="handleFormatError"
                                         :show-upload-list="false"
                                         :on-exceeded-size="handleMaxSize">
@@ -417,6 +417,11 @@
                         </i-col>
                     </Row>
                     <Row>
+                        <i-col span="16" style="margin-top: -30px;">
+                            <span style="margin-left: 100px;color: red;font-size: 12px;">* 尺寸建议410*110像素以内,大小100K以下</span>
+                        </i-col>
+                    </Row>
+                    <Row>
                         <i-col span="16">
                             <Form-item label="门店logo图url" prop="storeLogoUrl">
                                 <i-input v-model="mkStoreTicketDiscount.storeLogoUrl" placeholder="门店logo图url" readonly/>
@@ -425,7 +430,7 @@
                         <i-col span="3">
                             <Form-item :label-width="1">
                                 <Upload style="width: 300px;" action="../sys/oss/upload" :format="['jpg','jpeg','png']"
-                                        max-size="2048"
+                                        max-size="100"
                                         :on-success="handleSuccessStoreLogoUrl" :on-format-error="handleFormatError"
                                         :show-upload-list="false"
                                         :on-exceeded-size="handleMaxSize">
@@ -439,6 +444,11 @@
                             </Form-item>
                         </i-col>
                     </Row>
+                    <Row>
+                        <i-col span="16" style="margin-top: -30px;">
+                            <span style="margin-left: 140px;color: red;font-size: 12px;">* 尺寸建议410*110像素以内,大小100K以下</span>
+                        </i-col>
+                    </Row>
                     <Form-item label="图片是否展示在广告栏" prop="isStoreShow">
                         <Radio-group v-model="mkStoreTicketDiscount.isStoreShow">
                             <Radio label="0">

+ 2 - 2
kmall-admin/src/main/webapp/WEB-INF/page/shop/ad.html

@@ -65,7 +65,7 @@
                 <i-col span="4">
                     <Form-item :label-width="1">
                         <Upload style="width: 300px;" action="../sys/oss/upload" :format="['jpg','jpeg','png']"
-                                max-size="2048"
+                                max-size="100"
                                 :on-success="handleSuccess" :on-format-error="handleFormatError"
                                 :show-upload-list="false"
                                 :on-exceeded-size="handleMaxSize">
@@ -81,7 +81,7 @@
             </Row>
             <Row>
                 <i-col span="16" style="margin-top: -20px;">
-                    <span style="margin-left: 80px;color: red;font-size: 12px;">尺寸建议750*400像素以内,大小2M以下</span>
+                    <span style="margin-left: 80px;color: red;font-size: 12px;">尺寸建议750*400像素以内,大小100K以下</span>
                 </i-col>
             </Row>
             <Form-item label="内容" prop="content">

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

@@ -62,7 +62,7 @@
                 <i-col span="4">
                     <Form-item :label-width="1">
                         <Upload style="width: 300px;" action="../sys/oss/upload" :format="['jpg','jpeg','png']"
-                                max-size="2048"
+                                max-size="100"
                                 :on-success="handleSuccessListPicUrl" :on-format-error="handleFormatError"
                                 :show-upload-list="false"
                                 :on-exceeded-size="handleMaxSize">
@@ -78,7 +78,7 @@
             </Row>
             <Row>
                 <i-col span="16" style="margin-top: -30px;">
-                    <span style="margin-left: 100px;color: red;font-size: 12px;">* 图片尺寸建议760*484像素以内,大小2M以下</span>
+                    <span style="margin-left: 100px;color: red;font-size: 12px;">* 图片尺寸建议760*484像素以内,大小100k以下</span>
                 </i-col>
             </Row>
             <Form-item label="描述" prop="simpleDesc">
@@ -93,7 +93,7 @@
                 <i-col span="4">
                     <Form-item :label-width="1">
                         <Upload style="width: 300px;" action="../sys/oss/upload" :format="['jpg','jpeg','png']"
-                                max-size="2048"
+                                max-size="100"
                                 :on-success="handleSuccessPicUrl" :on-format-error="handleFormatError"
                                 :show-upload-list="false"
                                 :on-exceeded-size="handleMaxSize">
@@ -109,7 +109,7 @@
             </Row>
             <Row>
                 <i-col span="16" style="margin-top: -30px;">
-                    <span style="margin-left: 100px;color: red;font-size: 12px;">* 图片尺寸建议760*484像素以内,大小2M以下</span>
+                    <span style="margin-left: 100px;color: red;font-size: 12px;">* 图片尺寸建议760*484像素以内,大小100k以下</span>
                 </i-col>
             </Row>
             <Form-item label="排序" prop="sortOrder">
@@ -137,7 +137,7 @@
                 <i-col span="4">
                     <Form-item :label-width="1">
                         <Upload style="width: 300px;" action="../sys/oss/upload" :format="['jpg','jpeg','png']"
-                                max-size="2048"
+                                max-size="100"
                                 :on-success="handleSuccessAppListPicUrl" :on-format-error="handleFormatError"
                                 :show-upload-list="false"
                                 :on-exceeded-size="handleMaxSize">
@@ -153,7 +153,7 @@
             </Row>
             <Row>
                 <i-col span="16" style="margin-top: -30px;">
-                    <span style="margin-left: 100px;color: red;font-size: 12px;">* app显示图片尺寸建议760*484像素以内,大小2M以下</span>
+                    <span style="margin-left: 100px;color: red;font-size: 12px;">* app显示图片尺寸建议760*484像素以内,大小100k以下</span>
                 </i-col>
             </Row>
             <Form-item label="新品牌" prop="isNew">
@@ -175,7 +175,7 @@
                 <i-col span="4">
                     <Form-item :label-width="1">
                         <Upload style="width: 300px;" action="../sys/oss/upload" :format="['jpg','jpeg','png']"
-                                max-size="2048"
+                                max-size="100"
                                 :on-success="handleSuccessNewPicUrl" :on-format-error="handleFormatError"
                                 :show-upload-list="false"
                                 :on-exceeded-size="handleMaxSize">
@@ -191,7 +191,7 @@
             </Row>
             <Row>
                 <i-col span="16" style="margin-top: -30px;">
-                    <span style="margin-left: 100px;color: red;font-size: 12px;">* 新品牌图片尺寸建议760*484像素以内,大小2M以下</span>
+                    <span style="margin-left: 100px;color: red;font-size: 12px;">* 新品牌图片尺寸建议760*484像素以内,大小100k以下</span>
                 </i-col>
             </Row>
             <Form-item label="新品牌排序" prop="newSortOrder">

+ 4 - 4
kmall-admin/src/main/webapp/WEB-INF/page/shop/category.html

@@ -133,7 +133,7 @@
                 <i-col span="4">
                     <Form-item :label-width="1">
                         <Upload style="width: 300px;" action="../sys/oss/upload" :format="['jpg','jpeg','png']"
-                                max-size="2048"
+                                max-size="100"
                                 :on-success="handleSuccessIconUrl" :on-format-error="handleFormatError"
                                 :show-upload-list="false"
                                 :on-exceeded-size="handleMaxSize">
@@ -149,7 +149,7 @@
             </Row>
             <Row>
                 <i-col span="16" style="margin-top: -30px;">
-                    <span style="margin-left: 100px;color: red;font-size: 12px;">* 尺寸建议90*90像素以内,大小2M以下</span>
+                    <span style="margin-left: 100px;color: red;font-size: 12px;">* 尺寸建议90*90像素以内,大小100K以下</span>
                 </i-col>
             </Row>
             <!--<Row>-->
@@ -189,7 +189,7 @@
                 <i-col span="4">
                     <Form-item :label-width="1">
                         <Upload style="width: 300px;" action="../sys/oss/upload" :format="['jpg','jpeg','png']"
-                                max-size="2048"
+                                max-size="100"
                                 :on-success="handleSuccessWapBannerUrl" :on-format-error="handleFormatError"
                                 :show-upload-list="false"
                                 :on-exceeded-size="handleMaxSize">
@@ -205,7 +205,7 @@
             </Row>
             <Row>
                 <i-col span="16" style="margin-top: -30px;">
-                    <span style="margin-left: 100px;color: red;font-size: 12px;">* 一级分类图片尺寸建议720*246像素以内,二级分类图片尺寸建议250*250像素以内,大小2M以下</span>
+                    <span style="margin-left: 100px;color: red;font-size: 12px;">* 一级分类图片尺寸建议720*246像素以内,二级分类图片尺寸建议250*250像素以内,大小100K以下</span>
                 </i-col>
             </Row>
             <!--<Form-item label="类型" prop="type">-->

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

@@ -243,7 +243,7 @@
                         <i-col span="4">
                             <Form-item :label-width="1">
                                 <Upload style="width: 300px;" action="../sys/oss/upload" :format="['jpg','jpeg','png']"
-                                        max-size="2048"
+                                        max-size="100"
                                         :on-success="handleSuccessPicUrl" :on-format-error="handleFormatError"
                                         :show-upload-list="false"
                                         :on-exceeded-size="handleMaxSize">
@@ -259,7 +259,7 @@
                     </Row>
                     <Row>
                         <i-col span="16" style="margin-top: -30px;">
-                            <span style="margin-left: 140px;color: red;font-size: 12px;">* 尺寸建议200x200(正方形模式)像素以内,大小2M以下</span>
+                            <span style="margin-left: 140px;color: red;font-size: 12px;">* 尺寸建议200x200(正方形模式)像素以内,大小100k以内</span>
                         </i-col>
                     </Row>
                     <Row>
@@ -271,7 +271,7 @@
                         <i-col span="4">
                             <Form-item :label-width="1">
                                 <Upload style="width: 300px;" action="../sys/oss/upload" :format="['jpg','jpeg','png']"
-                                        max-size="2048"
+                                        max-size="100"
                                         :on-success="handleSuccessListPicUrl" :on-format-error="handleFormatError"
                                         :show-upload-list="false"
                                         :on-exceeded-size="handleMaxSize">
@@ -287,7 +287,7 @@
                     </Row>
                     <Row>
                         <i-col span="16" style="margin-top: -30px;">
-                            <span style="margin-left: 140px;color: red;font-size: 12px;">* 尺寸建议200x200(正方形模式)像素以内,大小2M以下</span>
+                            <span style="margin-left: 140px;color: red;font-size: 12px;">* 尺寸建议200x200(正方形模式)像素以内,大小100k以内</span>
                         </i-col>
                     </Row>
                 <Row>
@@ -299,7 +299,7 @@
                     <i-col span="4">
                         <Form-item :label-width="1">
                             <Upload style="width: 300px;" action="../sys/oss/upload" :format="['mp4']"
-                                    max-size="2048"
+                                    max-size="1024"
                                     :on-success="handleSuccessListVideoUrl" :on-format-error="handleVideoFormatError"
                                     :show-upload-list="false"
                                     :on-exceeded-size="handleVideoMaxSize">
@@ -315,7 +315,7 @@
                 </Row>
                 <Row>
                     <i-col span="16" style="margin-top: -30px;">
-                            <span style="margin-left: 140px;color: red;font-size: 12px;">* 视频不能超过2M,视频时限20秒内,支持mp4视频格式</span>
+                            <span style="margin-left: 140px;color: red;font-size: 12px;">* 视频不能超过1M,视频时限20秒内,支持mp4视频格式</span>
                     </i-col>
                 </Row>
                 <!--</i-form>-->
@@ -413,7 +413,7 @@
                             :default-file-list="uploadList"
                             :on-success="handleSuccess"
                             :format="['jpg','jpeg','png']"
-                            :max-size="2048"
+                            :max-size="100"
                             :on-format-error="handleFormatError"
                             :on-exceeded-size="handleMaxSize"
                             :before-upload="handleBeforeUpload"
@@ -428,7 +428,7 @@
                     <Modal title="查看图片" v-model="visible">
                         <img :src="imgName" v-if="visible" style="width: 100%"/>
                     </Modal>
-                    <span style="color: red;font-size: 12px;">* 商品详情轮播图,尺寸建议750x750(正方形模式)像素以内,大小2M以下</span>
+                    <span style="color: red;font-size: 12px;">* 商品详情轮播图,尺寸建议750x750(正方形模式)像素以内,大小100k以内</span>
                 </template>
                 <div id="goodsDesc"></div>
             </Tab-Pane>

+ 2 - 2
kmall-admin/src/main/webapp/WEB-INF/page/shop/goodsgroup.html

@@ -55,7 +55,7 @@
                 <i-col span="4">
                     <Form-item :label-width="1">
                         <Upload style="width: 300px;" action="../sys/oss/upload" :format="['jpg','jpeg','png']"
-                                max-size="2048"
+                                max-size="100"
                                 :on-success="handleSuccess" :on-format-error="handleFormatError"
                                 :show-upload-list="false"
                                 :on-exceeded-size="handleMaxSize">
@@ -78,7 +78,7 @@
                 <i-col span="4">
                     <Form-item :label-width="1">
                         <Upload style="width: 300px;" action="../sys/oss/upload" :format="['jpg','jpeg','png']"
-                                max-size="2048"
+                                max-size="100"
                                 :on-success="handleAbbrSuccess" :on-format-error="handleFormatError"
                                 :show-upload-list="false"
                                 :on-exceeded-size="handleMaxSize">

+ 1 - 1
kmall-admin/src/main/webapp/WEB-INF/page/shop/goodsspecification.html

@@ -57,7 +57,7 @@
                 <i-col span="4">
                     <Form-item :label-width="1">
                         <Upload style="width: 300px;" action="../sys/oss/upload" :format="['jpg','jpeg','png']"
-                                max-size="2048"
+                                max-size="100"
                                 :on-success="handleSuccess" :on-format-error="handleFormatError"
                                 :show-upload-list="false"
                                 :on-exceeded-size="handleMaxSize">

+ 6 - 6
kmall-admin/src/main/webapp/WEB-INF/page/shop/order.html

@@ -117,11 +117,11 @@
             <Form-item label="订单号" prop="orderSn">
                 <i-input v-model="order.orderSn" placeholder="订单号" readonly="readonly"/>
             </Form-item>
-            <Form-item label="快递公司名称" prop="shippingName">
-                <i-input v-model="order.shippingName" placeholder="快递公司"/>
-            </Form-item>
-            <Form-item label="快递简写" prop="shippingCode">
-                <i-input v-model="order.shippingCode" placeholder="快递简写"/>
+            <Form-item label="快递公司" prop="shippingCode">
+                <i-select v-model="order.shippingCode" placeholder="快递公司" filterable label-in-value>
+                    <i-option v-for="shipping in shippingList" :value="shipping.code"
+                              :key="shipping.code">{{shipping.name}}</i-option>
+                </i-select>
             </Form-item>
             <Form-item label="配送单号" prop="shippingNo">
                 <i-input v-model="order.shippingNo" placeholder="快递单号"/>
@@ -391,7 +391,7 @@
                         <i-input v-model="order.consignee" readonly/>
                     </Form-item>
                     <Form-item label="收货地址" prop="address">
-                        <i-input v-model="order.address" readonly/>
+                        {{order.province}}{{order.city}}{{order.district}}{{order.address}}
                     </Form-item>
                     <Form-item label="联系电话" prop="mobile">
                         <i-input v-model="order.mobile" readonly/>

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

@@ -52,15 +52,15 @@
         <Row :gutter="16">
             <div class="search-group">
                 <i-col span="3">
-                    <i-select v-model="q.storeId" placeholder="门店" filterable label-in-value>
-                        <i-option v-for="store in stores" :value="store.id"
-                                  :key="store.id">{{store.storeName}}
+                    <i-select v-model="q.thirdPartyMerchCode" placeholder="所属三方商户" filterable >
+                        <i-option v-for="thirdMerchant in thirdMerchantBizShowList" :value="thirdMerchant.thirdPartyMerchCode" :key="thirdMerchant.thirdPartyMerchCode">{{thirdMerchant.thirdPartyMerchName}}
                         </i-option>
                     </i-select>
                 </i-col>
                 <i-col span="3">
-                    <i-select v-model="q.thirdPartyMerchCode" placeholder="所属三方商户" filterable >
-                        <i-option v-for="thirdMerchant in thirdMerchantBizShowList" :value="thirdMerchant.thirdPartyMerchCode" :key="thirdMerchant.thirdPartyMerchCode">{{thirdMerchant.thirdPartyMerchName}}
+                    <i-select v-model="q.storeId" placeholder="门店" filterable label-in-value>
+                        <i-option v-for="store in stores" :value="store.id"
+                                  :key="store.id">{{store.storeName}}
                         </i-option>
                     </i-select>
                 </i-col>

+ 8 - 1
kmall-admin/src/main/webapp/WEB-INF/page/shop/storemngchange.html

@@ -9,9 +9,16 @@
 	<div v-show="showList">
         <Row :gutter="16">
             <div class="search-group">
+                <i-col span="3">
+                    <i-select v-model="q.storeId" placeholder="门店" filterable label-in-value @on-change="changeGoods">
+                        <i-option v-for="store in stores" :value="store.id"
+                                  :key="store.id">{{store.storeName}}
+                        </i-option>
+                    </i-select>
+                </i-col>
                 <i-col span="4">
                     <i-select v-model="q.goodsId" filterable placeholder="商品" label-in-value>
-                        <i-option v-for="goods in goodss" :value="goods.id" :key="goods.id">{{goods.name}}</i-option>
+                        <i-option v-for="goods in goodss" :value="goods.goodsId" :key="goods.goodsId">{{goods.goodsName}}</i-option>
                     </i-select>
                 </i-col>
                 <i-col span="4">

+ 8 - 3
kmall-admin/src/main/webapp/WEB-INF/page/shop/topic.html

@@ -49,7 +49,7 @@
                 <i-col span="4">
                     <Form-item :label-width="1">
                         <Upload style="width: 300px;" action="../sys/oss/upload" :format="['jpg','jpeg','png']"
-                                max-size="2048"
+                                max-size="100"
                                 :on-success="handleSuccessAvatar" :on-format-error="handleFormatError"
                                 :show-upload-list="false"
                                 :on-exceeded-size="handleMaxSize">
@@ -64,6 +64,11 @@
                 </i-col>
             </Row>
             <Row>
+                <i-col span="16" style="margin-top: -30px;">
+                    <span style="margin-left: 100px;color: red;font-size: 12px;">* 尺寸建议410*110像素以内,大小100K以下</span>
+                </i-col>
+            </Row>
+            <Row>
                 <i-col span="16">
                     <Form-item label="活动条例图片" prop="itemPicUrl">
                         <i-input v-model="topic.itemPicUrl" placeholder="活动条例图片" readonly/>
@@ -72,7 +77,7 @@
                 <i-col span="4">
                     <Form-item :label-width="1">
                         <Upload style="width: 300px;" action="../sys/oss/upload" :format="['jpg','jpeg','png']"
-                                max-size="2048"
+                                max-size="100"
                                 :on-success="handleSuccessItemPicUrl" :on-format-error="handleFormatError"
                                 :show-upload-list="false"
                                 :on-exceeded-size="handleMaxSize">
@@ -107,7 +112,7 @@
                 <i-col span="4">
                     <Form-item :label-width="1">
                         <Upload style="width: 300px;" action="../sys/oss/upload" :format="['jpg','jpeg','png']"
-                                max-size="2048"
+                                max-size="100"
                                 :on-success="handleSuccessScenePicUrl" :on-format-error="handleFormatError"
                                 :show-upload-list="false"
                                 :on-exceeded-size="handleMaxSize">

+ 1 - 1
kmall-admin/src/main/webapp/WEB-INF/page/shop/topiccategory.html

@@ -45,7 +45,7 @@
                 <i-col span="4">
                     <Form-item :label-width="1">
                         <Upload style="width: 300px;" action="../sys/oss/upload" :format="['jpg','jpeg','png']"
-                                max-size="2048"
+                                max-size="100"
                                 :on-success="handleSuccess" :on-format-error="handleFormatError"
                                 :show-upload-list="false"
                                 :on-exceeded-size="handleMaxSize">

+ 42 - 5
kmall-admin/src/main/webapp/WEB-INF/page/sys/main.html

@@ -63,12 +63,12 @@
             <div class="small-box bg-fuchsia">
                 <div class="inner">
                     <h3>{{thcOrderSum}}</h3>
-                    <p>退货</p>
+                    <p>申请退款订单</p>
                 </div>
                 <div class="icon">
                     <i class="fa fa-shopping-bag"></i>
                 </div>
-                <a onclick="vm.toOrderByShipStatus(4)" class="small-box-footer">详情 <i
+                <a onclick="vm.toOrderByRefundStatus(1)" class="small-box-footer">详情 <i
                         class="fa fa-arrow-circle-right"></i></a>
             </div>
         </div>
@@ -161,7 +161,7 @@
             yfOrderSum: 0,//已发货
             yfkOrderSum: 0,//待付款
             ywcOrderSum: 0,//已完成
-            thcOrderSum: 0,//退
+            thcOrderSum: 0,//退
             userSum: 0,//所有会员数
             goodsSum: 0,//所有商品数
             yfkOrderUserSum: 0,//已付款订单会员数
@@ -201,7 +201,7 @@
                         iview.Message.error('没有数据!');
                         return;
                     }
-                } else if (shippingStatus == 4) {//退
+                } else if (shippingStatus == 4) {//退
                     if (vm.thcOrderSum == 0) {
                         iview.Message.error('没有数据!');
                         return;
@@ -215,6 +215,19 @@
                     content: url
                 });
             },
+            toOrderByRefundStatus: function (refundStatus) {
+                let url = '../shop/orderrefund.html?refundStatus=' + refundStatus;
+                if (vm.thcOrderSum == 0) {
+                    iview.Message.error('没有数据!');
+                    return;
+                }
+                openWindow({
+                    top: true,
+                    type: 2,
+                    title: '订单申请维权信息',
+                    content: url
+                });
+            },
             toOrderByPayStatus: function (payStatus) {
                 if (vm.yfkOrderSum == 0) {
                     iview.Message.error('没有数据!');
@@ -294,8 +307,32 @@
             $.getJSON("../order/queryTotal?isOnfiilineOrder=0&orderStatus=402", function (r) {
                 vue.ywcOrderSum = r.sum;
             });
-            $.getJSON("../order/queryTotal?isOnfiilineOrder=0&shippingStatus=4", function (r) {
+//            $.getJSON("../orderrefund/queryTotal?isOnfflineOrder=0&refundStatus=1", function (r) {
+//                console.log(r.sum)
+//                vue.thcOrderSum = r.sum;
+//            });
+            $.get("../orderrefund/queryTotal?isOnfflineOrder=0&refundStatus=1", function (r) {
                 vue.thcOrderSum = r.sum;
+                if (r.sum > 0) {
+                    iview.Notice.info({
+                        title: '您有退款申请订单',
+                        desc: '<a onclick="vm.toOrderByRefundStatus(1)" class="small-box-footer">查看</a>',
+                        duration: 0
+                    });
+                    let iN = new iNotify({
+                        effect: 'flash',
+                        interval: 500,
+                        message: "申请退款订单",
+                        audio: {
+                            file: ['../statics/audio/dforder.mp3']
+                        },
+                        notification: {
+                            title: "通知!",
+                            body: '您有退款申请订单'
+                        }
+                    });
+                    iN.setTitle(true).player();
+                }
             });
             $.getJSON("../order/getUserOrderInfo?type=yfkOrderUserSum", function (r) {
                 vue.yfkOrderUserSum = r.result;

+ 1 - 1
kmall-admin/src/main/webapp/js/mk/mkdisthier2.js

@@ -36,7 +36,7 @@ $(function () {
                     return transDate(value, 'yyyy-MM-dd hh:mm:ss');
                 }}],
 		viewrecords: true,
-        height: 385,
+        height: 550,
         rowNum: 10,
         rowList: [10, 30, 50],
         rownumbers: true,

+ 3 - 3
kmall-admin/src/main/webapp/js/mk/mkstorecampminus.js

@@ -374,7 +374,7 @@ let vm = new Vue({
             vm.isShowGoods = false;//为false则可以添加商品
             vm.showStoreGoodsList = true;
 
-            vm.reloadOrder();
+            vm.reloadOrderSearch();
         },
         queryOrder: function () {
             vm.reloadOrder();
@@ -589,7 +589,7 @@ let vm = new Vue({
                 return;
             }
             $.get("../productstorerela/queryGoodsRealListByTopicId?storeId=" + storeId +"&goodsName="+vm.s.goodsName+"&applyType="+vm.applyType+"&goodsBizType="+goodsBizType
-                +"&storeTopicId="+vm.storeTopicId+"&page="+1+"&limit="+vm.limit, function (r) {
+                +"&storeTopicId="+vm.storeTopicId+"&page="+vm.currentPage+"&limit="+vm.limit, function (r) {
                 if(r.code == 0){
                     vm.goodsList = r.page.list;
                     vm.totalPage = r.page.totalPage;
@@ -958,7 +958,7 @@ let vm = new Vue({
         handleMaxSize: function (file) {
             this.$Notice.warning({
                 title: '超出文件大小限制',
-                desc: '文件 ' + file.name + ' 太大,不能超过 2M。'
+                desc: '文件 ' + file.name + ' 太大,不能超过 100K。'
             });
         },
         eyeImageAdvImgUrl: function () {

+ 1 - 1
kmall-admin/src/main/webapp/js/mk/mkstoreticketdiscount.js

@@ -1025,7 +1025,7 @@ let vm = new Vue({
         handleMaxSize: function (file) {
             this.$Notice.warning({
                 title: '超出文件大小限制',
-                desc: '文件 ' + file.name + ' 太大,不能超过 2M。'
+                desc: '文件 ' + file.name + ' 太大,不能超过 100K。'
             });
         },
         eyeImageAdvImgUrl: function () {

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

@@ -180,7 +180,7 @@ var vm = new Vue({
         handleMaxSize: function (file) {
             this.$Notice.warning({
                 title: '超出文件大小限制',
-                desc: '文件 ' + file.name + ' 太大,不能超过 2M。'
+                desc: '文件 ' + file.name + ' 太大,不能超过 100K。'
             });
         },
         handleSubmit: function (name) {

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

@@ -232,7 +232,7 @@ var vm = new Vue({
         handleMaxSize: function (file) {
             this.$Notice.warning({
                 title: '超出文件大小限制',
-                desc: '文件 ' + file.name + ' 太大,不能超过 2M。'
+                desc: '文件 ' + file.name + ' 太大,不能超过 100k。'
             });
         },
         eyeImageListPicUrl: function () {

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

@@ -230,7 +230,7 @@ var vm = new Vue({
         handleMaxSize: function (file) {
             this.$Notice.warning({
                 title: '超出文件大小限制',
-                desc: '文件 ' + file.name + ' 太大,不能超过 2M。'
+                desc: '文件 ' + file.name + ' 太大,不能超过 100K。'
             });
         },
         handleSuccessBannerUrl: function (res, file) {

+ 8 - 2
kmall-admin/src/main/webapp/js/shop/goods.js

@@ -626,7 +626,13 @@ var vm = new Vue({
         handleMaxSize: function (file) {
             this.$Notice.warning({
                 title: '超出文件大小限制',
-                desc: '文件 ' + file.name + ' 太大,不能超过 2M。'
+                desc: '文件 ' + file.name + ' 太大,不能超过 100k。'
+            });
+        },
+        handleMaxSizeByInfo: function (file) {
+            this.$Notice.warning({
+                title: '超出文件大小限制',
+                desc: '文件 ' + file.name + ' 太大,不能超过 300k。'
             });
         },
         handleReset: function (name) {
@@ -662,7 +668,7 @@ var vm = new Vue({
         handleVideoMaxSize: function (file) {
             this.$Notice.warning({
                 title: '超出文件大小限制',
-                desc: '文件 ' + file.name + ' 太大,不能超过 2M。'
+                desc: '文件 ' + file.name + ' 太大,不能超过 1M。'
             });
         },
         handleSuccessListVideoUrl: function (res, file) {

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

@@ -205,7 +205,7 @@ let vm = new Vue({
         handleMaxSize: function (file) {
             this.$Notice.warning({
                 title: '超出文件大小限制',
-                desc: '文件 ' + file.name + ' 太大,不能超过 2M。'
+                desc: '文件 ' + file.name + ' 太大,不能超过 100K。'
             });
         },
         handleSuccess: function (res, file) {

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

@@ -158,7 +158,7 @@ var vm = new Vue({
         handleMaxSize: function (file) {
             this.$Notice.warning({
                 title: '超出文件大小限制',
-                desc: '文件 ' + file.name + ' 太大,不能超过 2M。'
+                desc: '文件 ' + file.name + ' 太大,不能超过 100K。'
             });
         },
         handleSuccess: function (res, file) {

+ 7 - 0
kmall-admin/src/main/webapp/js/shop/order.js

@@ -249,11 +249,17 @@ let vm = new Vue({
         orderBizTypeList:[],
         thirdMerchantBizList:[],
         supplierThirdMerchantBizList:[],
+        shippingList: []
     },
     methods: {
         query: function () {
             vm.reload(1);
         },
+        getShipping: function () {
+            $.get("../shipping/queryAll", function (r) {
+                vm.shippingList = r.list;
+            });
+        },
         getMacro: function () {
             $.get("../sys/macro/queryMacrosByValue?value=goodsBizType", function (r) {
                 vm.macros = r.list;
@@ -297,6 +303,7 @@ let vm = new Vue({
                     vm.order = r.order;
                     vm.showDiv = 8;
                     vm.title = "修改快递信息";
+                    vm.getShipping();
                 }
             });
         },

+ 10 - 1
kmall-admin/src/main/webapp/js/shop/orderrefund.js

@@ -1,6 +1,15 @@
 $(function () {
+    let refundStatus = getQueryString("refundStatus");
+    let isOnfflineOrder = getQueryString("isOnfflineOrder");
+    let url = '../orderrefund/list?1';
+    if (refundStatus) {
+        url += '&refundStatus=' + refundStatus;
+    }
+    if (isOnfflineOrder) {
+        url += '&isOnfflineOrder=' + isOnfflineOrder;
+    }
     $("#jqGrid").jqGrid({
-        url: '../orderrefund/list',
+        url: url,
         datatype: "json",
         colModel: [
 			{label: 'id', name: 'id', index: 'id', key: true, hidden: true},

+ 0 - 36
kmall-admin/src/main/webapp/js/shop/storeProductStock.js

@@ -588,47 +588,11 @@ var vm = new Vue({
         uploadExcelError: function () {
             alert('上传出现异常');
         },
-        handleView(name) {
-            this.imgName = name;
-            this.visible = true;
-        },
-        handleRemove(file) {
-            // 从 upload 实例删除数据
-            const fileList = this.uploadList;
-            this.uploadList.splice(fileList.indexOf(file), 1);
-        },
-        handleSuccess(res, file) {
-            // 因为上传过程为实例,这里模拟添加 url
-            file.imgUrl = res.url;
-            file.name = res.url;
-            vm.uploadList.add(file);
-        },
-        handleBeforeUpload() {
-            const check = this.uploadList.length < 5;
-            if (!check) {
-                this.$Notice.warning({
-                    title: '最多只能上传 5 张图片。'
-                });
-            }
-            return check;
-        },
         handleSubmit: function (name) {
             handleSubmitValidate(this, name, function () {
                 vm.saveOrUpdate()
             });
         },
-        handleFormatError: function (file) {
-            this.$Notice.warning({
-                title: '文件格式不正确',
-                desc: '文件 ' + file.name + ' 格式不正确,请上传 jpg 或 png 格式的图片。'
-            });
-        },
-        handleMaxSize: function (file) {
-            this.$Notice.warning({
-                title: '超出文件大小限制',
-                desc: '文件 ' + file.name + ' 太大,不能超过 2M。'
-            });
-        },
         handleReset: function (name) {
             handleResetForm(this, name);
         },

+ 16 - 5
kmall-admin/src/main/webapp/js/shop/storemngchange.js

@@ -84,9 +84,11 @@ let vm = new Vue({
 		},
 		q: {
             goodsId: '',
-            changeType: ''
+            changeType: '',
+            storeId: ''
 		},
         goodss: [],
+        stores: [],
         macros: []
 	},
 	methods: {
@@ -155,10 +157,19 @@ let vm = new Vue({
                 vm.storeMngChange = r.storeMngChange;
             });
 		},
+        changeGoods:function (opt) {
+		    var storeId = opt.value;
+		    if(storeId){
+                $.get("../productstorerela/queryAll?storeId=" + storeId, function (r) {
+                    vm.goodss = r.list;
+                });
+            }
+        },
         reloadSearch: function() {
             vm.q = {
                 goodsId: '',
-                changeType: ''
+                changeType: '',
+                storeId: ''
             }
             vm.reload();
 		},
@@ -166,7 +177,7 @@ let vm = new Vue({
 			vm.showList = true;
             let page = $("#jqGrid").jqGrid('getGridParam', 'page');
 			$("#jqGrid").jqGrid('setGridParam', {
-                postData: {'goodsId': vm.q.goodsId,'changeType': vm.q.changeType},
+                postData: {'goodsId': vm.q.goodsId,'changeType': vm.q.changeType,'storeId':vm.q.storeId},
                 page: page
             }).trigger("reloadGrid");
             vm.handleReset('formValidate');
@@ -185,8 +196,8 @@ let vm = new Vue({
         /*$.get("../category/getCategorySelect", function (r) {
             vm.queryCategories = r.list;
         });*/
-        $.get("../goods/queryAll", function (r) {
-            vm.goodss = r.list;
+        $.get("../store/queryAll", function (r) {
+            vm.stores = r.list;
         });
 
         $.get("../sys/macro/queryMacrosByValue?value=changeType", function (r) {

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

@@ -178,7 +178,7 @@ var vm = new Vue({
         handleMaxSize: function (file) {
             this.$Notice.warning({
                 title: '超出文件大小限制',
-                desc: '文件 ' + file.name + ' 太大,不能超过 2M。'
+                desc: '文件 ' + file.name + ' 太大,不能超过 100K。'
             });
         },
         eyeImageAvatar: function () {

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

@@ -141,7 +141,7 @@ var vm = new Vue({
         handleMaxSize: function (file) {
             this.$Notice.warning({
                 title: '超出文件大小限制',
-                desc: '文件 ' + file.name + ' 太大,不能超过 2M。'
+                desc: '文件 ' + file.name + ' 太大,不能超过 100K。'
             });
         },
         eyeImage: function () {

+ 10 - 1
kmall-admin/src/main/webapp/js/statis/mkstoretopicstat.js

@@ -198,7 +198,16 @@ $(function () {
                     colModel : [
                         {label: '商品',name : "goodsName",index : "goodsName",  width : 130, align : "center"},
                         {label: '数量',name : "number",index : "number",width : 70, align : "center"},
-                        {label: '商品价格', name: 'retailPrice', index: 'retail_price', width: 80, align: 'center'}
+                        {label: '商品价格', name: 'retailPrice', index: 'retail_price', width: 80, align: 'center'},
+                        {label: '优惠使用', name: 'storeTopicId', index: 'store_topic_id', width: 80, align: 'center',
+                            formatter: function (value, col, row) {
+                                if (value == null || value == '') {
+                                    return '<span style="color: #cccccc">未使用</span>';
+                                }else{
+                                    return '<span style="color: red">'+value+'</span>';
+                                }
+                                return value;
+                            }},
                     ],
                     sortname : 'num',
                     sortorder : "asc",

+ 13 - 6
kmall-api/src/main/java/com/kmall/api/api/ApiAuthController.java

@@ -158,10 +158,11 @@ public class ApiAuthController extends ApiBaseAction {
     @GetMapping("updateStoreLoadGoodsById")
     @IgnoreAuth
     public Object updateStoreLoadGoodsById(@RequestParam String storeId) {
-        StoreVo storeVo = new StoreVo();
-        storeVo.setId(Long.valueOf(storeId));
-        storeVo.setIsLoadGoods("0");//门店商品是否修改字段更新为否
-        apiStoreService.updateStoreLoadGoodsById(storeVo);
+        MerchUserVo merchUserVo = new MerchUserVo();
+        merchUserVo.setStoreId(Integer.valueOf(storeId));
+        merchUserVo.setUserId(Integer.parseInt(String.valueOf(getUserId())));
+        merchUserVo.setIsLoadGoods("0");//门店商品是否修改字段更新为否
+        apiMerchUserService.updateStoreLoadGoodsById(merchUserVo);
         return toResponsSuccess("成功");
     }
 
@@ -204,25 +205,31 @@ public class ApiAuthController extends ApiBaseAction {
         Long storeId = jsonParam.getLong("storeId");
         Long userId = jsonParam.getLong("userId");
         String merchSn = (String)jsonParam.get("merchSn");
-        Date nowTime = new Date();
+//        Date nowTime = new Date();
         UserVo userVo = userService.queryObject(userId);
+        String isLoadGoods = "";
         if (null != userVo) {
             MerchUserVo merchUser = apiMerchUserService.queryObjectByStoreId(storeId,userId);
             MerchUserVo merchUserVo = new MerchUserVo();
             merchUserVo.setStoreId(Integer.parseInt(String.valueOf(storeId)));
             merchUserVo.setMerchSn(merchSn);
             merchUserVo.setUserId(Integer.parseInt(String.valueOf(userId)));
-            if(merchUser != null) {;
+            if(merchUser != null) {
+                isLoadGoods = merchUser.getIsLoadGoods();
                 merchUserVo.setModTime(new Date());
                 merchUserVo.setId(merchUser.getId());
                 apiMerchUserService.update(merchUserVo);
             }else{
                 merchUserVo.setCreateTime(new Date());
                 merchUserVo.setModTime(new Date());
+                merchUserVo.setIsLoadGoods("0");
                 apiMerchUserService.save(merchUserVo);
             }
         }
         ThirdMerchantBizVo thirdMerchantBizVo = apiThirdMerchantBizService.queryDataByStoreId(storeId);
+        if(thirdMerchantBizVo != null){
+            thirdMerchantBizVo.setIsLoadGoods(isLoadGoods);
+        }
         return toResponsSuccess(thirdMerchantBizVo);
     }
 }

+ 16 - 6
kmall-api/src/main/java/com/kmall/api/api/ApiCartController.java

@@ -15,6 +15,7 @@ import com.kmall.api.entity.*;
 import com.kmall.api.service.*;
 import com.kmall.api.util.ApiBaseAction;
 import com.kmall.common.utils.MapUtils;
+import com.kmall.common.utils.RRException;
 import com.qiniu.util.StringUtils;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.web.bind.annotation.GetMapping;
@@ -64,9 +65,9 @@ public class ApiCartController extends ApiBaseAction {
      * 获取购物车中的数据
      */
     @GetMapping("getCartMoney")
-    public Object getCartMoney(@LoginUser UserVo loginUser, String checkCart) {
+    public Object getCartMoney(@LoginUser UserVo loginUser, CheckOutDto checkOutDto) {
         Long storeId = getStoreId();
-        Map<String, Object> resultObj = cartService.getCartMoney(loginUser,checkCart,storeId);
+        Map<String, Object> resultObj = cartService.getCartMoney(loginUser, checkOutDto, storeId);
         return resultObj;
     }
 
@@ -84,7 +85,6 @@ public class ApiCartController extends ApiBaseAction {
         param.put("store_id", storeId);
         param.put("merchSn", getMerchSn());
         param.put("checkCart", checkCart);
-//        param.putAll(setIsStockShare(storeId));
         param.put("isStockShare", StockUtil.getIsStockShareByStore(storeId,apiStoreService,apiThirdMerchantBizService));
         List<CartVo> cartList = cartService.queryList(param);
         List<CartVo> validCartList = cartService.queryValidCartList(param);
@@ -277,7 +277,9 @@ public class ApiCartController extends ApiBaseAction {
         //判断商品是否可以购买
         GoodsVo goodsInfo = goodsService.queryObjectByStoreId(goodsId, getStoreId());
         if (null == goodsInfo || goodsInfo.getIs_delete() == 1 || goodsInfo.getIs_on_sale() == 0) {
+            logger.error("商品已下架" );
             return toResponsFail("商品已下架");
+//            throw new RRException("商品已下架");
         }
         Long storeId = getStoreId();
         //取得规格的信息,判断规格库存
@@ -290,7 +292,9 @@ public class ApiCartController extends ApiBaseAction {
         }*/
         ProductVo productInfo = productService.queryByStoreId(productId, storeId);
         if (null == productInfo) {
+            logger.error("商品已下架" );
             return toResponsFail("商品已下架");
+//            throw new RRException("商品已下架");
         }
         //// TODO: 2019/3/5  普通商品不受共享库存影响,直接取门店配置库存
         Integer stockNum = StockUtil.setStockNumByGoodsVo(goodsInfo);
@@ -308,7 +312,9 @@ public class ApiCartController extends ApiBaseAction {
             }
         }*/
         if(stockNum == null || number > stockNum || stockNum <= 0){
+            logger.error("该商品库存不足" );
             return toResponsFail("该商品库存不足");
+//            throw new RRException("该商品库存不足");
         }
         if (null == productInfo.getRetail_price()) {
             productInfo.setRetail_price(goodsInfo.getRetail_price());
@@ -348,6 +354,7 @@ public class ApiCartController extends ApiBaseAction {
             cartService.save(cartInfo);
         } else {
             if(number + cartInfo.getNumber() > stockNum){
+                logger.error("商品选购数量(含购物车已加购数量)已超过库存" );
                 return toResponsFail("商品选购数量(含购物车已加购数量)已超过库存");
             }
             cartInfo.setNumber(cartInfo.getNumber() + number);
@@ -411,7 +418,9 @@ public class ApiCartController extends ApiBaseAction {
             //判断商品是否可以购买
             ProductVo productInfo = productService.queryByStoreId(goodsVo.getProduct_id(), storeId);
             if (null == productInfo) {
-                return toResponsFail("商品已下架");
+                logger.error("商品已下架" );
+                throw new RRException("商品已下架");
+//                return toResponsFail("商品已下架");
             }
             GoodsVo goodsInfo = goodsService.queryObjectByStoreId(goodsVo.getGoods_id(), getStoreId());
             if (null == goodsInfo || goodsInfo.getIs_delete() == 1 || goodsInfo.getIs_on_sale() == 0) {
@@ -691,10 +700,10 @@ public class ApiCartController extends ApiBaseAction {
         JSONObject jsonParam = getJsonRequest();
 
         CheckOutDto checkOutDto = JSONObject.parseObject(jsonParam.toString(), CheckOutDto.class);
-        //获取要购买的商品
-        Map<String, Object> cartData = (Map<String, Object>)this.getCartMoney(loginUser,checkOutDto.getCheckCart());
         checkOutDto.setLoginUser(loginUser);
         checkOutDto.setStoreId(getStoreId());
+        //获取要购买的商品
+        Map<String, Object> cartData = (Map<String, Object>)this.getCartMoney(loginUser,checkOutDto);
         checkOutDto.setCartData(cartData);
 
         Map<String, Object> resultObj = cartService.getCheckOut(checkOutDto);
@@ -778,6 +787,7 @@ public class ApiCartController extends ApiBaseAction {
             param.put("user_id", getUserId());
             Long storeId = getStoreId();
             param.put("store_id", storeId);
+            param.put("checkCart", checkCart);
             List<CartVo> list = cartService.queryValidCartList(param);
             for (CartVo cart: list) {
                 cartService.delete(cart.getId());

+ 0 - 1
kmall-api/src/main/java/com/kmall/api/api/ApiOrderController.java

@@ -86,7 +86,6 @@ public class ApiOrderController extends ApiBaseAction {
         params.put("limit", size);
         params.put("sidx", "add_time");
         params.put("order", "desc");
-        params.put("size", "desc");
         if(order_status != null) {
             if (order_status == Integer.parseInt(Dict.orderStatus.item_401.getItem())) {
                 params.put("pay_status", Dict.payStatus.item_4.getItem());

+ 12 - 3
kmall-api/src/main/java/com/kmall/api/api/ApiStoreCampMinusController.java

@@ -2,6 +2,7 @@ package com.kmall.api.api;
 
 import com.kmall.api.annotation.LoginUser;
 import com.kmall.api.dto.CampMinusDto;
+import com.kmall.api.dto.CheckOutDto;
 import com.kmall.api.dto.UserCouponDto;
 import com.kmall.api.entity.CartVo;
 import com.kmall.api.entity.UserCouponVo;
@@ -76,7 +77,7 @@ public class ApiStoreCampMinusController extends ApiBaseAction {
     public Object getStoreCampMinusByGoodsIdList(@LoginUser UserVo loginUser, Integer storeId, Integer goodsId,
                                            @RequestParam(value = "page", defaultValue = "1") Integer page,
                                            @RequestParam(value = "size", defaultValue = "10") Integer size) {
-        List<MkStoreCampMinusVo> campMinusVoList = apiMkStoreCampMinusService.queryStoreCampMinusByGoodsId(storeId, getUserId(), goodsId);
+        List<MkStoreCampMinusVo> campMinusVoList = apiMkStoreCampMinusService.queryStoreCampMinusByGoodsId(storeId, null, goodsId);
         List<MkStoreCampMinusVo> resultCampMinusList = new ArrayList<>();
         if(size <= campMinusVoList.size()) {
             for (int i = 0; i < size; i++) {
@@ -96,9 +97,17 @@ public class ApiStoreCampMinusController extends ApiBaseAction {
      * 确认订单页,查看订单商品所支持的满减满折列表
      */
     @GetMapping("getCampminusByCheckCartList")
-    public Object getCampminusByCheckCartList(@LoginUser UserVo loginUser, Integer storeId, String checkCart, String bizType) {
+    public Object getCampminusByCheckCartList(@LoginUser UserVo loginUser, Integer storeId, String checkCart, String bizType, Long goodsId, Integer number) {
+        CheckOutDto checkOutDto = new CheckOutDto();
+        checkOutDto.setCheckCart(checkCart);
+        //商品id不为空,则提交订单是从商品详情页立即购买过来的
+        if(goodsId != null){
+            checkOutDto.setGoodsId(goodsId);
+            checkOutDto.setNumber(number);
+        }
+        checkOutDto.setLoginUser(loginUser);
         //获取要购买的商品
-        Map<String, Object> cartData = apiCartService.getCartMoney(loginUser, checkCart, Long.valueOf(storeId));
+        Map<String, Object> cartData = apiCartService.getCartMoney(loginUser, checkOutDto, Long.valueOf(storeId));
 
         List<CartVo> checkedGoodsList = new ArrayList();
         List<CartVo> cartGoodsList = (List<CartVo>) cartData.get("cartList");

+ 11 - 3
kmall-api/src/main/java/com/kmall/api/api/ApiStoreTicketDiscountController.java

@@ -2,6 +2,7 @@ package com.kmall.api.api;
 
 import com.google.common.collect.Maps;
 import com.kmall.api.annotation.LoginUser;
+import com.kmall.api.dto.CheckOutDto;
 import com.kmall.api.dto.UserCouponDto;
 import com.kmall.api.entity.*;
 import com.kmall.api.entity.mk.MkStoreTicketDiscountVo;
@@ -158,10 +159,17 @@ public class ApiStoreTicketDiscountController  extends ApiBaseAction {
      * 查看当前用户已领取的且订单商品所支持的优惠券列表
      */
     @GetMapping("getDiscountByCheckCartList")
-    public Object getDiscountByCheckCartList(@LoginUser UserVo loginUser, Integer storeId, String checkCart,String bizType) {
-
+    public Object getDiscountByCheckCartList(@LoginUser UserVo loginUser, Integer storeId, String checkCart,String bizType, Long goodsId, Integer number) {
+        CheckOutDto checkOutDto = new CheckOutDto();
+        checkOutDto.setCheckCart(checkCart);
+        //商品id不为空,则提交订单是从商品详情页立即购买过来的
+        if(goodsId != null){
+            checkOutDto.setGoodsId(goodsId);
+            checkOutDto.setNumber(number);
+        }
+        checkOutDto.setLoginUser(loginUser);
         //获取要购买的商品
-        Map<String, Object> cartData = apiCartService.getCartMoney(loginUser, checkCart, Long.valueOf(storeId));
+        Map<String, Object> cartData = apiCartService.getCartMoney(loginUser, checkOutDto, Long.valueOf(storeId));
 
         List<CartVo> checkedGoodsList = new ArrayList();
         List<CartVo> cartGoodsList = (List<CartVo>) cartData.get("cartList");

+ 2 - 0
kmall-api/src/main/java/com/kmall/api/dao/ApiGoodsMapper.java

@@ -30,4 +30,6 @@ public interface ApiGoodsMapper extends BaseDao<GoodsVo> {
     void updateGoodsStock(GoodsVo goodsVo);
 
     Integer selectCountByCatalogProductList(Map<String, Object> params);
+
+    void updateByGoodsShareStock(GoodsVo goodsVo);
 }

+ 2 - 0
kmall-api/src/main/java/com/kmall/api/dao/ApiMerchUserMapper.java

@@ -14,4 +14,6 @@ import org.apache.ibatis.annotations.Param;
  */
 public interface ApiMerchUserMapper extends BaseDao<MerchUserVo> {
     MerchUserVo queryObjectByStoreId(@Param("storeId") Long storeId, @Param("userId")Long userId);
+
+    Integer updateStoreLoadGoodsById(MerchUserVo merchUserVo);
 }

+ 0 - 2
kmall-api/src/main/java/com/kmall/api/dao/ApiStoreMapper.java

@@ -18,6 +18,4 @@ import java.util.Map;
 @Service
 public interface ApiStoreMapper extends BaseDao<StoreVo> {
     List<StoreVo> queryNearbyList(Map param);
-
-    Integer updateStoreLoadGoodsById(StoreVo storeVo);
 }

+ 11 - 0
kmall-api/src/main/java/com/kmall/api/dto/CampMinusDto.java

@@ -1,6 +1,7 @@
 package com.kmall.api.dto;
 
 import java.math.BigDecimal;
+import java.util.List;
 
 /**
  * @author huangyq
@@ -20,6 +21,16 @@ public class CampMinusDto {
 
     private Integer storeTopicId;
 
+    private List<Integer> goodsIds;
+
+    public List<Integer> getGoodsIds() {
+        return goodsIds;
+    }
+
+    public void setGoodsIds(List<Integer> goodsIds) {
+        this.goodsIds = goodsIds;
+    }
+
     public String getCampMinusType() {
         return campMinusType;
     }

+ 18 - 0
kmall-api/src/main/java/com/kmall/api/dto/CheckOutDto.java

@@ -24,6 +24,24 @@ public class CheckOutDto {
     private Integer campId10;
     private Integer campId11;
     private Integer isLoadStatus;
+    private Long goodsId;
+    private Integer number;
+
+    public Integer getNumber() {
+        return number;
+    }
+
+    public void setNumber(Integer number) {
+        this.number = number;
+    }
+
+    public Long getGoodsId() {
+        return goodsId;
+    }
+
+    public void setGoodsId(Long goodsId) {
+        this.goodsId = goodsId;
+    }
 
     public Integer getIsLoadStatus() {
         return isLoadStatus;

+ 19 - 0
kmall-api/src/main/java/com/kmall/api/dto/UserCouponDto.java

@@ -17,6 +17,25 @@ public class UserCouponDto {
     private BigDecimal goodsTotalPrice;
     private List<CartVo> cartGoodsList;
 
+    private Integer campId;
+    private Integer tickDiscId;
+
+    public Integer getTickDiscId() {
+        return tickDiscId;
+    }
+
+    public void setTickDiscId(Integer tickDiscId) {
+        this.tickDiscId = tickDiscId;
+    }
+
+    public Integer getCampId() {
+        return campId;
+    }
+
+    public void setCampId(Integer campId) {
+        this.campId = campId;
+    }
+
     public Long getStoreId() {
         return storeId;
     }

+ 53 - 0
kmall-api/src/main/java/com/kmall/api/entity/CartVo.java

@@ -3,6 +3,7 @@ package com.kmall.api.entity;
 import java.io.Serializable;
 import java.math.BigDecimal;
 import java.util.Date;
+import java.util.List;
 
 
 /**
@@ -81,6 +82,58 @@ public class CartVo implements Serializable {
      */
     private String isSupplierGoods;
 
+    //指定商品参与、全部商品参与的满减活动
+    private String campName;
+
+    //指定商品不参与的满减活动
+    private String campNameByNotGoods;
+
+    private List<String> campNameList;
+
+    private String isCamp;
+
+    private String isDiscount;
+
+    public String getIsDiscount() {
+        return isDiscount;
+    }
+
+    public void setIsDiscount(String isDiscount) {
+        this.isDiscount = isDiscount;
+    }
+
+    public String getIsCamp() {
+        return isCamp;
+    }
+
+    public void setIsCamp(String isCamp) {
+        this.isCamp = isCamp;
+    }
+
+    public List<String> getCampNameList() {
+        return campNameList;
+    }
+
+    public void setCampNameList(List<String> campNameList) {
+        this.campNameList = campNameList;
+    }
+
+    public String getCampName() {
+        return campName;
+    }
+
+    public void setCampName(String campName) {
+        this.campName = campName;
+    }
+
+    public String getCampNameByNotGoods() {
+        return campNameByNotGoods;
+    }
+
+    public void setCampNameByNotGoods(String campNameByNotGoods) {
+        this.campNameByNotGoods = campNameByNotGoods;
+    }
+
     public String getSupplierThirdMerchCode() {
         return supplierThirdMerchCode;
     }

+ 13 - 0
kmall-api/src/main/java/com/kmall/api/entity/GoodsVo.java

@@ -127,6 +127,19 @@ public class GoodsVo implements Serializable {
      */
     private String isSupplierGoods;
 
+    /**
+     * 商品库存数量变化后是否已共享,0:否,1:是(下单、退款、取消订单触发)
+     */
+    private String isGoodsShareStock;
+
+    public String getIsGoodsShareStock() {
+        return isGoodsShareStock;
+    }
+
+    public void setIsGoodsShareStock(String isGoodsShareStock) {
+        this.isGoodsShareStock = isGoodsShareStock;
+    }
+
     public String getIsSupplierGoods() {
         return isSupplierGoods;
     }

+ 10 - 0
kmall-api/src/main/java/com/kmall/api/entity/MerchUserVo.java

@@ -51,6 +51,16 @@ public class MerchUserVo implements Serializable {
      */
     private Date tstm;
 
+    private String isLoadGoods;
+
+    public String getIsLoadGoods() {
+        return isLoadGoods;
+    }
+
+    public void setIsLoadGoods(String isLoadGoods) {
+        this.isLoadGoods = isLoadGoods;
+    }
+
     /**
      * 设置:主键
      */

+ 30 - 0
kmall-api/src/main/java/com/kmall/api/entity/OrderGoodsVo.java

@@ -62,6 +62,36 @@ public class OrderGoodsVo implements Serializable {
 
     private String merchSn;
 
+    private Integer storeTopicId;
+
+    private Integer campTopicId;
+
+    private Integer distcountTopicId;
+
+    public Integer getCampTopicId() {
+        return campTopicId;
+    }
+
+    public void setCampTopicId(Integer campTopicId) {
+        this.campTopicId = campTopicId;
+    }
+
+    public Integer getDistcountTopicId() {
+        return distcountTopicId;
+    }
+
+    public void setDistcountTopicId(Integer distcountTopicId) {
+        this.distcountTopicId = distcountTopicId;
+    }
+
+    public Integer getStoreTopicId() {
+        return storeTopicId;
+    }
+
+    public void setStoreTopicId(Integer storeTopicId) {
+        this.storeTopicId = storeTopicId;
+    }
+
     public String getMerchSn() {
         return merchSn;
     }

+ 20 - 0
kmall-api/src/main/java/com/kmall/api/entity/OrderVo.java

@@ -205,6 +205,26 @@ public class OrderVo implements Serializable {
 
     private String campName;
 
+    private String applyType;
+
+    private String discountApplyType;
+
+    public String getDiscountApplyType() {
+        return discountApplyType;
+    }
+
+    public void setDiscountApplyType(String discountApplyType) {
+        this.discountApplyType = discountApplyType;
+    }
+
+    public String getApplyType() {
+        return applyType;
+    }
+
+    public void setApplyType(String applyType) {
+        this.applyType = applyType;
+    }
+
     public Integer getCampMinusId() {
         return campMinusId;
     }

+ 10 - 0
kmall-api/src/main/java/com/kmall/api/entity/ThirdMerchantBizVo.java

@@ -61,6 +61,16 @@ public class ThirdMerchantBizVo implements Serializable {
 
     private String isMapShow;
 
+    private String isLoadGoods;
+
+    public String getIsLoadGoods() {
+        return isLoadGoods;
+    }
+
+    public void setIsLoadGoods(String isLoadGoods) {
+        this.isLoadGoods = isLoadGoods;
+    }
+
     public String getIsMapShow() {
         return isMapShow;
     }

+ 11 - 0
kmall-api/src/main/java/com/kmall/api/entity/UserCouponVo.java

@@ -5,6 +5,7 @@ import com.fasterxml.jackson.annotation.JsonFormat;
 import java.io.Serializable;
 import java.math.BigDecimal;
 import java.util.Date;
+import java.util.List;
 
 
 /**
@@ -79,6 +80,16 @@ public class UserCouponVo implements Serializable {
     @JsonFormat(pattern = "yyyy.MM.dd")
     private Date validTime;
 
+    private List<Integer> goodsList;
+
+    public List<Integer> getGoodsList() {
+        return goodsList;
+    }
+
+    public void setGoodsList(List<Integer> goodsList) {
+        this.goodsList = goodsList;
+    }
+
     public Date getValidTime() {
         return validTime;
     }

+ 4 - 3
kmall-api/src/main/java/com/kmall/api/entity/mk/MkStoreCampMinusVo.java

@@ -5,6 +5,7 @@ import com.kmall.common.constant.Dict;
 import java.io.Serializable;
 import java.math.BigDecimal;
 import java.util.Date;
+import java.util.List;
 
 /**
  * 门店满减活动实体
@@ -114,7 +115,7 @@ public class MkStoreCampMinusVo implements Serializable {
 
     private Integer goodsId;
 
-    private Integer[] goodsIds;
+    private List<Integer> goodsIds;
 
     public Integer getGoodsId() {
         return goodsId;
@@ -124,11 +125,11 @@ public class MkStoreCampMinusVo implements Serializable {
         this.goodsId = goodsId;
     }
 
-    public Integer[] getGoodsIds() {
+    public List<Integer> getGoodsIds() {
         return goodsIds;
     }
 
-    public void setGoodsIds(Integer[] goodsIds) {
+    public void setGoodsIds(List<Integer> goodsIds) {
         this.goodsIds = goodsIds;
     }
 

+ 166 - 29
kmall-api/src/main/java/com/kmall/api/service/ApiCartService.java

@@ -13,6 +13,7 @@ import com.kmall.common.constant.Dict;
 import com.kmall.common.utils.Constant;
 import com.kmall.common.utils.MapUtils;
 import com.kmall.common.utils.RRException;
+import com.kmall.common.utils.StringUtils;
 import org.apache.commons.logging.Log;
 import org.apache.commons.logging.LogFactory;
 import org.springframework.beans.factory.annotation.Autowired;
@@ -200,17 +201,11 @@ public class ApiCartService {
         return cartDao.queryCartByGoodsBizType(goodsBizType);
     }
 
-    public Map<String, Object> getCartMoney(UserVo loginUser, String checkCart, Long storeId){
+    public Map<String, Object> getCartMoney(UserVo loginUser, CheckOutDto checkOutDto, Long storeId){
         Map<String, Object> resultObj = Maps.newHashMap();
-        //查询列表数据
-        Map param = Maps.newHashMap();
-        param.put("user_id", loginUser.getId());
-        param.put("store_id", storeId);
-        param.put("checkCart",checkCart);
-        param.put("checked", "1");
-        param.putAll(setIsStockShare(storeId));
-        List<CartVo> cartList = cartDao.queryList(param);
-        //获取购物车统计信息
+        Long goodsId = checkOutDto.getGoodsId();
+        Integer number = checkOutDto.getNumber();
+        String checkCart = checkOutDto.getCheckCart();
         Integer goodsCount = 0;
         BigDecimal goodsAmount = new BigDecimal(0.00);
         Integer checkedGoodsCount = 0;
@@ -219,6 +214,45 @@ public class ApiCartService {
         BigDecimal checkedGoodsAmount02 = new BigDecimal(0.00);
         BigDecimal checkedGoodsAmount10 = new BigDecimal(0.00);
         BigDecimal checkedGoodsAmount11 = new BigDecimal(0.00);
+        List<CartVo> cartList = new ArrayList<>();
+        //商品id不为空,则提交订单是从商品详情页立即购买过来的
+        if(goodsId != null){
+            GoodsVo goodsVo = apiGoodsMapper.queryObjectByStoreId(goodsId, storeId);
+            if(goodsVo != null){
+                if(goodsVo.getGoods_number() == 0){
+                    logger.error("商品库存不足" );
+                    throw new RRException("商品库存不足");
+                }
+                CartVo vo = new CartVo();
+                vo.setGoodsBizType(goodsVo.getGoodsBizType());
+                vo.setGoods_id(goodsVo.getId());
+                vo.setNumber(number);
+                vo.setUser_id(checkOutDto.getLoginUser().getId());
+                vo.setSku(goodsVo.getSku());
+                vo.setGoods_sn(goodsVo.getGoods_sn());
+                vo.setGoods_name(goodsVo.getName());
+                vo.setRetail_price(goodsVo.getRetail_price());
+                vo.setStore_id(Long.valueOf(goodsVo.getStoreId()));
+                vo.setChecked(1);
+                vo.setList_pic_url(goodsVo.getList_pic_url());
+                vo.setProduct_id(Long.valueOf(goodsVo.getProduct_id()));
+                vo.setMarket_price(goodsVo.getMarket_price());
+                cartList.add(vo);
+            }else {
+                logger.error("商品信息不存在" );
+                throw new RRException("商品信息不存在");
+            }
+        }else{
+            //查询列表数据
+            Map param = Maps.newHashMap();
+            param.put("user_id", loginUser.getId());
+            param.put("store_id", storeId);
+            param.put("checkCart",checkCart);
+            param.put("checked", "1");
+            param.putAll(setIsStockShare(storeId));
+            cartList = cartDao.queryList(param);
+        }
+        //获取购物车统计信息
         for (CartVo cartItem : cartList) {
             goodsCount += cartItem.getNumber();
             goodsAmount = goodsAmount.add(cartItem.getRetail_price().multiply(new BigDecimal(cartItem.getNumber())));
@@ -279,14 +313,27 @@ public class ApiCartService {
      * @param actualPrice
      * @return
      */
-    public BigDecimal mathActualPrice(UserCouponVo checkedCoupon, BigDecimal actualPrice){
+    public BigDecimal mathActualPrice(UserCouponVo checkedCoupon, BigDecimal actualPrice,List<CartVo> checkedGoodsList){
+        BigDecimal actualPrice2 = Constant.ZERO;
+        BigDecimal actualPrice3 = Constant.ZERO;
         if(checkedCoupon != null){
             if (checkedCoupon.getTickDiscType().equalsIgnoreCase(Dict.tickDiscType.item_00.getItem())) {
                 actualPrice = actualPrice.subtract(checkedCoupon.getTypeMoney());
             }
             if (checkedCoupon.getTickDiscType().equalsIgnoreCase(Dict.tickDiscType.item_01.getItem())) {
+                for(int i = 0; i < checkedGoodsList.size(); i++){
+                    CartVo cartVo = checkedGoodsList.get(i);
+                    List<Integer> goodsIds = checkedCoupon.getGoodsList();
+                    for(int j=0;j<goodsIds.size();j++){
+                        if(cartVo.getGoods_id().compareTo(Long.valueOf(goodsIds.get(j)))==0){
+                            actualPrice2 = actualPrice2.add(cartVo.getRetail_price().multiply(BigDecimal.valueOf(cartVo.getNumber())));
+                        }else{
+                            actualPrice3 = actualPrice3.add(cartVo.getRetail_price().multiply(BigDecimal.valueOf(cartVo.getNumber())));
+                        }
+                    }
+                }
                 //实付金额*(优惠券折扣*0.1) = 折扣后的实付金额
-                actualPrice = actualPrice.multiply(checkedCoupon.getTypeMoney().multiply(new BigDecimal(0.1))).setScale(2, BigDecimal.ROUND_HALF_UP);//满多少打几折
+                actualPrice = actualPrice3.add(actualPrice2.multiply(checkedCoupon.getTypeMoney().multiply(new BigDecimal(0.1))).setScale(2, BigDecimal.ROUND_HALF_UP));//满多少打几折
             }
         }
         return actualPrice;
@@ -298,14 +345,27 @@ public class ApiCartService {
      * @param actualPrice
      * @return
      */
-    public BigDecimal mathActualPriceByCamp(CampMinusDto checkedCampMinus, BigDecimal actualPrice){
+    public BigDecimal mathActualPriceByCamp(CampMinusDto checkedCampMinus, BigDecimal actualPrice,List<CartVo> checkedGoodsList){
+        BigDecimal actualPrice2 = Constant.ZERO;
+        BigDecimal actualPrice3 = Constant.ZERO;
         if(checkedCampMinus != null){
             if (checkedCampMinus.getCampMinusType().equalsIgnoreCase(Dict.campMinusType.item_00.getItem()) || checkedCampMinus.getCampMinusType().equalsIgnoreCase(Dict.campMinusType.item_01.getItem())) {
                 actualPrice = actualPrice.subtract(checkedCampMinus.getMoney());
             }
             if (checkedCampMinus.getCampMinusType().equalsIgnoreCase(Dict.campMinusType.item_10.getItem()) || checkedCampMinus.getCampMinusType().equalsIgnoreCase(Dict.campMinusType.item_11.getItem())) {
+                for(int i = 0; i < checkedGoodsList.size(); i++){
+                    CartVo cartVo = checkedGoodsList.get(i);
+                    List<Integer> goodsIds = checkedCampMinus.getGoodsIds();
+                    for(int j=0;j<goodsIds.size();j++){
+                        if(cartVo.getGoods_id().compareTo(Long.valueOf(goodsIds.get(j)))==0){
+                            actualPrice2 = actualPrice2.add(cartVo.getRetail_price().multiply(BigDecimal.valueOf(cartVo.getNumber())));
+                        }else{
+                            actualPrice3 = actualPrice3.add(cartVo.getRetail_price().multiply(BigDecimal.valueOf(cartVo.getNumber())));
+                        }
+                    }
+                }
                 //实付金额*(满减满折折扣*0.1) = 折扣后的实付金额
-                actualPrice = actualPrice.multiply(checkedCampMinus.getMoney().multiply(new BigDecimal(0.1))).setScale(2, BigDecimal.ROUND_HALF_UP);//满多少打几折
+                actualPrice = actualPrice3.add(actualPrice2.multiply(checkedCampMinus.getMoney().multiply(new BigDecimal(0.1))).setScale(2, BigDecimal.ROUND_HALF_UP));//满多少打几折
             }
         }
         return actualPrice;
@@ -434,6 +494,12 @@ public class ApiCartService {
             userCouponDto00.setGoodsTotalPrice(goodsTotalPrice00);
             userCouponDto00.setCartGoodsList(cartGoodsList);
             userCouponDto00.setBizType(Dict.orderBizType.item_00.getItem());
+            if(campId00 != null && campId00 != 0){
+                userCouponDto00.setCampId(campId00);
+            }
+            if(tickDiscId00 != null && tickDiscId00 != 0){
+                userCouponDto00.setTickDiscId(Integer.parseInt(String.valueOf(tickDiscId00)));
+            }
             couponList00 = apiUserCouponService.matchUserCouponList(userCouponDto00);
             campList00 = apiMkStoreCampMinusService.matchUserCampMinusList(userCouponDto00);
         }
@@ -444,6 +510,12 @@ public class ApiCartService {
             userCouponDto02.setGoodsTotalPrice(goodsTotalPrice02);
             userCouponDto02.setCartGoodsList(cartGoodsList);
             userCouponDto02.setBizType(Dict.orderBizType.item_02.getItem());
+            if(campId02 != null && campId02 != 0){
+                userCouponDto02.setCampId(campId02);
+            }
+            if(tickDiscId02 != null && tickDiscId02 != 0){
+                userCouponDto02.setTickDiscId(Integer.parseInt(String.valueOf(tickDiscId02)));
+            }
             couponList02 = apiUserCouponService.matchUserCouponList(userCouponDto02);
             campList02 = apiMkStoreCampMinusService.matchUserCampMinusList(userCouponDto02);
         }
@@ -454,6 +526,12 @@ public class ApiCartService {
             userCouponDto10.setGoodsTotalPrice(goodsTotalPrice10);
             userCouponDto10.setCartGoodsList(cartGoodsList);
             userCouponDto10.setBizType(Dict.orderBizType.item_10.getItem());
+            if(campId10 != null && campId10 != 0){
+                userCouponDto10.setCampId(campId10);
+            }
+            if(tickDiscId10 != null && tickDiscId10 != 0){
+                userCouponDto10.setTickDiscId(Integer.parseInt(String.valueOf(tickDiscId10)));
+            }
             couponList10 = apiUserCouponService.matchUserCouponList(userCouponDto10);
             campList10 = apiMkStoreCampMinusService.matchUserCampMinusList(userCouponDto10);
         }
@@ -464,6 +542,12 @@ public class ApiCartService {
             userCouponDto11.setGoodsTotalPrice(goodsTotalPrice11);
             userCouponDto11.setCartGoodsList(cartGoodsList);
             userCouponDto11.setBizType(Dict.orderBizType.item_11.getItem());
+            if(campId11 != null && campId11 != 0){
+                userCouponDto11.setCampId(campId11);
+            }
+            if(tickDiscId11 != null && tickDiscId11 != 0){
+                userCouponDto11.setTickDiscId(Integer.parseInt(String.valueOf(tickDiscId11)));
+            }
             couponList11 = apiUserCouponService.matchUserCouponList(userCouponDto11);
             campList11 = apiMkStoreCampMinusService.matchUserCampMinusList(userCouponDto11);
         }
@@ -483,15 +567,15 @@ public class ApiCartService {
         BigDecimal actualPrice10 = goodsTotalPrice10;
         BigDecimal actualPrice11 = goodsTotalPrice11;
 
-        Map campMinusMap00 = checkedCampMinus(campList00, campMinusDto00, actualPrice00, campId00, isLoadStatus);
-        Map campMinusMap02 = checkedCampMinus(campList02, campMinusDto02, actualPrice02, campId02, isLoadStatus);
-        Map campMinusMap10 = checkedCampMinus(campList10, campMinusDto10, actualPrice10, campId10, isLoadStatus);
-        Map campMinusMap11 = checkedCampMinus(campList11, campMinusDto11, actualPrice11, campId11, isLoadStatus);
+        Map campMinusMap00 = checkedCampMinus(campList00, checkedGoodsList, actualPrice00, campId00, isLoadStatus);
+        Map campMinusMap02 = checkedCampMinus(campList02, checkedGoodsList, actualPrice02, campId02, isLoadStatus);
+        Map campMinusMap10 = checkedCampMinus(campList10, checkedGoodsList, actualPrice10, campId10, isLoadStatus);
+        Map campMinusMap11 = checkedCampMinus(campList11, checkedGoodsList, actualPrice11, campId11, isLoadStatus);
 
-        Map couponMap00 = checkedCoupon(couponList00, checkedCoupon00, tickDiscId00, campMinusMap00, isLoadStatus);
-        Map couponMap02 = checkedCoupon(couponList02, checkedCoupon02, tickDiscId02, campMinusMap02, isLoadStatus);
-        Map couponMap10 = checkedCoupon(couponList10, checkedCoupon10, tickDiscId10, campMinusMap10, isLoadStatus);
-        Map couponMap11 = checkedCoupon(couponList11, checkedCoupon11, tickDiscId11, campMinusMap11, isLoadStatus);
+        Map couponMap00 = checkedCoupon(couponList00, checkedGoodsList, tickDiscId00, campMinusMap00, isLoadStatus);
+        Map couponMap02 = checkedCoupon(couponList02, checkedGoodsList, tickDiscId02, campMinusMap02, isLoadStatus);
+        Map couponMap10 = checkedCoupon(couponList10, checkedGoodsList, tickDiscId10, campMinusMap10, isLoadStatus);
+        Map couponMap11 = checkedCoupon(couponList11, checkedGoodsList, tickDiscId11, campMinusMap11, isLoadStatus);
 
         campMinusDto00 = getCampMinusByMap(campMinusMap00);
         campMinusDto02 = getCampMinusByMap(campMinusMap02);
@@ -516,6 +600,57 @@ public class ApiCartService {
 
         BigDecimal actualPrice = actualPrice00.add(actualPrice02).add(actualPrice10).add(actualPrice11);  //实付金额:商品销售价*数量-优惠金额+运费的总和
 
+        for(CartVo cartVo: checkedGoodsList){
+            List<Integer> goodsList = null;
+            List<Integer> goodsDiscountList = null;
+            if(cartVo.getGoodsBizType().equalsIgnoreCase(Dict.orderBizType.item_00.getItem())){
+                if(campMinusDto00 != null) {
+                    goodsList = campMinusDto00.getGoodsIds();
+                }
+                if(checkedCoupon00 != null) {
+                    goodsDiscountList = checkedCoupon00.getGoodsList();
+                }
+            }
+            if(cartVo.getGoodsBizType().equalsIgnoreCase(Dict.orderBizType.item_02.getItem())){
+                if(campMinusDto02 != null) {
+                    goodsList = campMinusDto02.getGoodsIds();
+                }
+                if(checkedCoupon02 != null) {
+                    goodsDiscountList = checkedCoupon02.getGoodsList();
+                }
+            }
+            if(cartVo.getGoodsBizType().equalsIgnoreCase(Dict.orderBizType.item_10.getItem())){
+                if(campMinusDto10 != null) {
+                    goodsList = campMinusDto10.getGoodsIds();
+                }
+                if(checkedCoupon10 != null) {
+                    goodsDiscountList = checkedCoupon10.getGoodsList();
+                }
+            }
+            if(cartVo.getGoodsBizType().equalsIgnoreCase(Dict.orderBizType.item_11.getItem())){
+                if(campMinusDto11 != null) {
+                    goodsList = campMinusDto11.getGoodsIds();
+                }
+                if(checkedCoupon11 != null) {
+                    goodsDiscountList = checkedCoupon11.getGoodsList();
+                }
+            }
+            if(goodsList != null) {
+                for (Integer goodsId : goodsList) {
+                    if (cartVo.getGoods_id().compareTo(Long.valueOf(goodsId)) == 0) {
+                        cartVo.setIsCamp("true");
+                    }
+                }
+            }
+            if(goodsDiscountList != null) {
+                for (Integer goodsId : goodsDiscountList) {
+                    if (cartVo.getGoods_id().compareTo(Long.valueOf(goodsId)) == 0) {
+                        cartVo.setIsDiscount("true");
+                    }
+                }
+            }
+        }
+
         resultObj.put("freightPrice00", freightPrice00);
         resultObj.put("freightPrice02", freightPrice02);
         resultObj.put("freightPrice10", freightPrice10);
@@ -569,19 +704,20 @@ public class ApiCartService {
     /**
      * 选择满减满折
      * @param campList
-     * @param campMinusDto
+     * @param checkedGoodsList
      * @param actualPrice
      * @param campId
      * @param isLoadStatus 0则为进入页面加载优惠信息,默认选择最高层级促销活动,1为选择促销活动后加载优惠信息,2为选择优惠券时触发,优惠券不能与促销活动同时使用
      */
-    private Map checkedCampMinus(List<CampMinusDto> campList, CampMinusDto campMinusDto, BigDecimal actualPrice, Integer campId, Integer isLoadStatus){
+    private Map checkedCampMinus(List<CampMinusDto> campList, List<CartVo> checkedGoodsList, BigDecimal actualPrice, Integer campId, Integer isLoadStatus){
         Map campMap = new HashMap();
+        CampMinusDto campMinusDto = null;
         if(campList != null && campList.size() > 0 && isLoadStatus != null){
             if(isLoadStatus == 0){ //0则为进入页面加载优惠信息,默认选择最高层级促销活动
                 campMinusDto = campList.get(0);
                 if(campMinusDto.getCampMinusId().compareTo(0) > 0){
                     //商品销售价*数量-优惠金额
-                    actualPrice = mathActualPriceByCamp(campMinusDto, actualPrice);
+                    actualPrice = mathActualPriceByCamp(campMinusDto, actualPrice, checkedGoodsList);
                     campMap.put("actualPrice", actualPrice);
                     campMap.put("isCamp", true);//满减活动是否满足该次订单
                 }else{
@@ -600,7 +736,7 @@ public class ApiCartService {
                             if (campId.compareTo(dto.getCampMinusId()) == 0) {
                                 campMinusDto = dto;
                                 //商品销售价*数量-优惠金额
-                                actualPrice = mathActualPriceByCamp(campMinusDto, actualPrice);
+                                actualPrice = mathActualPriceByCamp(campMinusDto, actualPrice, checkedGoodsList);
                                 campMap.put("actualPrice", actualPrice);
                                 campMap.put("isCamp", true);
                                 campMap.put("campMinusDto", campMinusDto);
@@ -625,15 +761,16 @@ public class ApiCartService {
     /**
      * 选择优惠券
      * @param couponList
-     * @param checkedCoupon
+     * @param checkedGoodsList
      * @param tickDiscId
      * @param campMinusMap
      * @param isLoadStatus 0则为进入页面加载优惠信息,默认选择最高层级促销活动,1为选择促销活动后加载优惠信息,2为选择优惠券时触发,优惠券不能与促销活动同时使用
      */
-    private Map checkedCoupon(List<UserCouponVo> couponList, UserCouponVo checkedCoupon, Long tickDiscId, Map campMinusMap, Integer isLoadStatus){
+    private Map checkedCoupon(List<UserCouponVo> couponList, List<CartVo> checkedGoodsList, Long tickDiscId, Map campMinusMap, Integer isLoadStatus){
         BigDecimal actualPrice = MapUtils.getBigDecimal("actualPrice", campMinusMap);
         Boolean isCamp = (Boolean)campMinusMap.get("isCamp");
         Map couponMap = new HashMap();
+        UserCouponVo checkedCoupon = null;
         //满减活动不与优惠券同时使用,当isCamp为false时可使用优惠券
         if(isCamp == false) {
             if (null != couponList && couponList.size() > 0) {
@@ -652,7 +789,7 @@ public class ApiCartService {
                             if (null != tickDiscId && tickDiscId.equals(userCouponVo.getId())) {
                                 checkedCoupon = userCouponVo;
                                 //商品销售价*数量-优惠金额
-                                actualPrice = mathActualPrice(checkedCoupon, actualPrice);
+                                actualPrice = mathActualPrice(checkedCoupon, actualPrice, checkedGoodsList);
                                 couponMap.put("actualPrice", actualPrice);
                                 couponMap.put("checkedCoupon", checkedCoupon);
                             }

+ 1 - 0
kmall-api/src/main/java/com/kmall/api/service/ApiGoodsService.java

@@ -244,6 +244,7 @@ public class ApiGoodsService {
                 }
             }
         }
+        info.setStock_num(stockNum);
         resultObj.put("info", info);
 
         resultObj.put("attribute", attribute);

+ 3 - 0
kmall-api/src/main/java/com/kmall/api/service/ApiMerchUserService.java

@@ -51,4 +51,7 @@ public class ApiMerchUserService {
     public MerchUserVo queryObjectByStoreId(Long storeId,Long userId){
         return apiMerchUserMapper.queryObjectByStoreId(storeId,userId);
     }
+    public int updateStoreLoadGoodsById(MerchUserVo merchUserVo){
+        return apiMerchUserMapper.updateStoreLoadGoodsById(merchUserVo);
+    }
 }

+ 160 - 53
kmall-api/src/main/java/com/kmall/api/service/ApiOrderService.java

@@ -4,10 +4,13 @@ import com.alibaba.fastjson.JSON;
 import com.alibaba.fastjson.JSONObject;
 import com.google.common.collect.Maps;
 import com.kmall.api.dao.mk.ApiMkStoreCampMinusMapper;
+import com.kmall.api.dao.mk.ApiMkStorePromMapper;
 import com.kmall.api.dao.mk.ApiMkStoreTicketDiscountMapper;
 import com.kmall.api.dto.CampMinusDto;
 import com.kmall.api.dto.CheckOutDto;
 import com.kmall.api.entity.mk.MkStoreCampMinusVo;
+import com.kmall.api.entity.mk.MkStorePromStatVo;
+import com.kmall.api.entity.mk.MkStorePromVo;
 import com.kmall.api.entity.mk.MkStoreTicketDiscountVo;
 import com.kmall.api.fromcomm.entity.FormIdsEntity;
 import com.kmall.api.service.mk.ApiMkStorePromStatService;
@@ -74,6 +77,8 @@ public class ApiOrderService {
     @Autowired
     private ApiStoreMngChangeMapper apiStoreMngChangeMapper;
     @Autowired
+    private ApiMkStorePromMapper apiMkStorePromMapper;
+    @Autowired
     private ApiMkStorePromStatService apiMkStorePromStatService;
     @Autowired
     private ApiMkStoreTicketDiscountMapper apiMkStoreTicketDiscountMapper;
@@ -130,13 +135,22 @@ public class ApiOrderService {
             if (null == goodsInfo || goodsInfo.getIs_delete() == 1 || goodsInfo.getIs_on_sale() == 0) {
                 throw new RRException("订单提交失败:商品不存在");
             }
+            //普通、门店商品不受共享库存影响,直接取门店配置库存
 //            Integer stockNum = StockUtil.setStockNumByGoodsVo(goodsInfo);
-//            String isStockShare = StockUtil.getIsStockShareByGoodsVo(goodsInfo);
-            // TODO: 2019/3/5  普通商品不受共享库存影响,直接取门店配置库存
-            //还原门店库存
-            resetStoreGoodsStock(goodsInfo.getStockNum(), productInfo, goodsInfo, orderGoodsVo, userName);
-            //还原商户商品库存
+            String isStockShare = StockUtil.getIsStockShareByGoodsVo(goodsInfo);
+            //还原商户商品总库存
             resetGoodsStock(goodsInfo.getGoods_number(), productInfo, goodsInfo, orderGoodsVo, userName);
+            //该商品所属第三方商户不是共享库存
+            if(isStockShare.equalsIgnoreCase(Dict.isStockShare.item_0.getItem())) {
+                resetStoreGoodsStock(goodsInfo.getStockNum(), productInfo, goodsInfo, orderGoodsVo, userName);//还原门店库存
+            }else{
+                //该商品所属第三方商户是共享库存,但商品业务类型不是00保税备货
+                if(!goodsInfo.getGoodsBizType().equalsIgnoreCase(Dict.orderBizType.item_00.getItem())){
+                    resetStoreGoodsStock(goodsInfo.getStockNum(), productInfo, goodsInfo, orderGoodsVo, userName);//还原门店库存
+                }
+            }
+            //该商品所属第三方商户为共享库存,且是保税备货商品,取消订单时改变
+            updateGoodsByIsShareStock(isStockShare, goodsInfo);
         }
         update(order);
         // 判断是否有优惠券
@@ -262,6 +276,8 @@ public class ApiOrderService {
         Integer campId10 = jsonParam.getInteger("campId10");//促销id
         Integer campId11 = jsonParam.getInteger("campId11");//促销id
         Integer isLoadStatus = jsonParam.getInteger("isLoadStatus");
+        Integer number = jsonParam.getInteger("number");
+        Long goodsId = jsonParam.getLong("goodsId");
         UserVo user = apiUserMapper.queryObjectByIdNoAndName(idNo, userName);
         UserVo userVo = new UserVo();
         userVo.setId(loginUser.getId());
@@ -290,27 +306,13 @@ public class ApiOrderService {
             resultObj.put("errmsg", vo.getRespMessage());
             return resultObj;
         }
-
-        //获取要购买的商品
-        Map<String, Object> cartData = cartService.getCartMoney(loginUser,checkCart,storeId);
-        List<CartVo> checkedGoodsList = (List<CartVo>) cartData.get("cartList");
-//        Map param = Maps.newHashMap();
-//        param.put("user_id", loginUser.getId());
-//        param.put("store_id", storeId);
-//        param.put("checked", 1);
-//        param.put("checkCart", checkCart);
-//        List<CartVo> checkedGoodsList = apiCartMapper.queryList(param);
-        if (null == checkedGoodsList) {
-            resultObj.put("errno", 400);
-            resultObj.put("errmsg", "请选择商品");
-            logger.error("请选择商品");
-            return resultObj;
-        }
-        // 检查库存和更新库存
-        checkStock(checkedGoodsList, storeId, userName);
-
         CheckOutDto checkOutDto = new CheckOutDto();
         checkOutDto.setCheckCart(checkCart);
+        //商品id不为空,则提交订单是从商品详情页立即购买过来的
+        if(goodsId != null){
+            checkOutDto.setGoodsId(goodsId);
+            checkOutDto.setNumber(number);
+        }
         checkOutDto.setLoginUser(loginUser);
         if(tickDiscId00 != null){
             checkOutDto.setTickDiscId00(Long.valueOf(tickDiscId00));
@@ -338,6 +340,22 @@ public class ApiOrderService {
         }
         checkOutDto.setIsLoadStatus(isLoadStatus);
         checkOutDto.setStoreId(storeId);
+        //获取要购买的商品
+        Map<String, Object> cartData = cartService.getCartMoney(loginUser, checkOutDto, storeId);
+        List<CartVo> checkedGoodsList = (List<CartVo>) cartData.get("cartList");
+//        Map param = Maps.newHashMap();
+//        param.put("user_id", loginUser.getId());
+//        param.put("store_id", storeId);
+//        param.put("checked", 1);
+//        param.put("checkCart", checkCart);
+//        List<CartVo> checkedGoodsList = apiCartMapper.queryList(param);
+        if (null == checkedGoodsList) {
+            resultObj.put("errno", 400);
+            resultObj.put("errmsg", "请选择商品");
+            logger.error("请选择商品");
+            return resultObj;
+        }
+
         checkOutDto.setCartData(cartData);
         Map<String, Object> cartResultObj = cartService.getCheckOut(checkOutDto);
 
@@ -346,6 +364,8 @@ public class ApiOrderService {
         Boolean isBizType10 =  (Boolean) cartResultObj.get("isBizType10");
         Boolean isBizType11 =  (Boolean) cartResultObj.get("isBizType11");
 
+        // 检查库存和更新库存
+        checkStock(checkedGoodsList, storeId, userName);
 
         List<OrderVo> orderInfoList = new ArrayList();
         String merchOrderSn = "EMATO" + CommonUtil.generateOrderNumber();
@@ -406,20 +426,34 @@ public class ApiOrderService {
                             logger.error("订单提交失败:商品不存在");
                             throw new RRException("订单提交失败:商品不存在");
                         }
-                        OrderGoodsVo orderGoodsVo = setOrderGoodsVo(orderInfo, goodsItem, goodsVo);
+                        OrderGoodsVo orderGoodsVo = setOrderGoodsVo(orderInfo, cartResultObj, goodsItem, goodsVo);
                         apiOrderGoodsMapper.save(orderGoodsVo);
-
-                        Integer cartId = Integer.parseInt(String.valueOf(goodsItem.getId()));
-                        //更新渠道追踪统计下单量数据
-                        apiMkStorePromStatService.updateMkStorePromStat(orderGoodsVo, orderInfo, loginUser, cartId);
+                        //购物车id为空,则提交订单是从商品详情页立即购买过来的
+                        if(goodsItem.getId() == null){
+                            MkStorePromVo mkStorePromVo = apiMkStorePromMapper.queryObjectByGoodsIdAndStoreId(Integer.parseInt(String.valueOf(goodsItem.getGoods_id())),
+                                    Integer.parseInt(String.valueOf(storeId)));
+                            if(mkStorePromVo != null){
+                                MkStorePromStatVo statVo = apiMkStorePromStatService.queryObjectByPromId(mkStorePromVo.getPromId());
+                                if(statVo != null){
+                                    apiMkStorePromStatService.updateStorePromStat(orderGoodsVo, orderInfo, loginUser, statVo);
+                                }
+                            }
+                        }else {
+                            Integer cartId = Integer.parseInt(String.valueOf(goodsItem.getId()));
+                            //更新渠道追踪统计下单量数据
+                            apiMkStorePromStatService.updateMkStorePromStat(orderGoodsVo, orderInfo, loginUser, cartId);
+                        }
                     }
                 }
-                //记录优惠券活动营销统计下单量数据
-                apiMkStoreTopicStatService.saveTicketTopicStatBySubmitData(orderInfo.getCoupon_id());
-
-                //记录促销满减活动营销统计下单量数据
-                apiMkStoreTopicStatService.saveCampTopicStatBySubmitData(orderInfo.getActivity_id(), orderInfo.getCampMinusId());
+                if(orderInfo.getCoupon_id() != 0 && orderInfo.getCoupon_id()!= null) {
+                    //记录优惠券活动营销统计下单量数据
+                    apiMkStoreTopicStatService.saveTicketTopicStatBySubmitData(orderInfo.getCoupon_id());
+                }
 
+                if(orderInfo.getCampMinusId() != 0 && orderInfo.getCampMinusId()!= null) {
+                    //记录促销满减活动营销统计下单量数据
+                    apiMkStoreTopicStatService.saveCampTopicStatBySubmitData(orderInfo.getActivity_id(), orderInfo.getCampMinusId());
+                }
                 OrderProcessRecordEntity entity = new OrderProcessRecordEntity();
                 entity.setOrderSn(orderInfo.getOrder_sn());
                 entity.setUserId(Integer.valueOf(loginUser.getId()+""));
@@ -432,8 +466,12 @@ public class ApiOrderService {
 
             orderProcessRecordMapper.saveBatch(processRecordEntityList);//新增订单流转信息
 
-            //清空已购买的商品
-            apiCartMapper.deleteByCart(loginUser.getId(), storeId, 1, checkCart);
+
+            //商品id不为空,则提交订单是从商品详情页立即购买过来的
+            if(goodsId == null) {
+                //清空已购买的商品
+                apiCartMapper.deleteByCart(loginUser.getId(), storeId, 1, checkCart);
+            }
 
             if (apiOrderMapper.queryCountByMerchOrderSn(merchOrderSn) > 1) {//不止一笔订单则为拆单订单
                 OrderVo orderVo = new OrderVo();
@@ -537,7 +575,7 @@ public class ApiOrderService {
         mngChangeVo.setChangeType(Dict.changeType.item_1.getItem());
         mngChangeVo.setChangeNum(goodsItem.getNumber());//变化数
         mngChangeVo.setOriginalNum(goodsVo.getGoods_number());//原库存数
-        mngChangeVo.setValidNum(goodsVo.getGoods_number() - goodsItem.getNumber());//可用数
+        mngChangeVo.setValidNum(goodsVo.getGoods_number());//可用数
         mngChangeVo.setCreateTime(new Date());
         mngChangeVo.setModTime(new Date());
         mngChangeVo.setCreaterSn("小程序用户"+userName);
@@ -563,7 +601,6 @@ public class ApiOrderService {
         //修改门店商品销量
         productInfo.setSell_volume(productInfo.getSell_volume() + goodsItem.getNumber());
         productInfo.setGoods_id(goodsVo.getId());
-//        productVos.add(productInfo);
         apiProductMapper.updateStockNum(productInfo);
         
         StoreMngChangeVo storeMngChangeVo = new StoreMngChangeVo();
@@ -574,7 +611,7 @@ public class ApiOrderService {
         storeMngChangeVo.setMerchSn(goodsVo.getMerchSn());
         storeMngChangeVo.setStoreChangeNum(goodsItem.getNumber());
         storeMngChangeVo.setStoreOriginalNum(stockNum);
-        storeMngChangeVo.setStoreValidNum(stockNum - goodsItem.getNumber());
+        storeMngChangeVo.setStoreValidNum(productInfo.getStock_num());
         storeMngChangeVo.setCreateTime(new Date());
         storeMngChangeVo.setModTime(new Date());
         storeMngChangeVo.setCreaterSn("小程序用户"+userName);
@@ -584,6 +621,23 @@ public class ApiOrderService {
     }
 
     /**
+     * 更新商品库存数量变化后是否已共享为0“未共享”
+     * @param isStockShare
+     * @param goodsInfo
+     */
+    private void updateGoodsByIsShareStock(String isStockShare, GoodsVo goodsInfo){
+        //该商品为共享库存,且是保税备货商品
+        if(isStockShare.equalsIgnoreCase(Dict.isStockShare.item_1.getItem())
+                && goodsInfo.getGoodsBizType().equalsIgnoreCase(Dict.orderBizType.item_00.getItem())) {
+            GoodsVo goodsVo = new GoodsVo();
+            goodsVo.setId(goodsInfo.getId());
+            //商品库存数量变化后是否已共享,0:否,1:是(下单、退款、取消订单触发)
+            goodsVo.setIsGoodsShareStock(Dict.isGoodsShareStock.item_0.getItem());
+            apiGoodsMapper.updateByGoodsShareStock(goodsVo);
+        }
+    }
+
+    /**
      * 检查库存和更新库存
      * @param checkedGoodsList
      * @param storeId
@@ -604,19 +658,9 @@ public class ApiOrderService {
                     logger.error("订单提交失败:商品已下架");
                     throw new RRException("订单提交失败:商品已下架");
                 }
-//                String isStockShare = StockUtil.getIsStockShareByGoodsVo(goodsInfo);
+                String isStockShare = StockUtil.getIsStockShareByGoodsVo(goodsInfo);
                 // TODO: 2019/3/5  普通商品不受共享库存影响,直接取门店配置库存
                 stockNum = StockUtil.setStockNumByGoodsVo(goodsInfo);
-                /*if(goodsInfo.getGoodsBizType().equalsIgnoreCase(Dict.orderBizType.item_00.getItem())){
-                    if (goodsInfo.getIsStockShare().equalsIgnoreCase(Dict.isStockShare.item_1.getItem())) {
-                        stockNum = goodsInfo.getGoods_number();
-                    }
-                    if (goodsInfo.getIsStockShare().equalsIgnoreCase(Dict.isStockShare.item_0.getItem())) {
-                        stockNum = productInfo.getStock_num();
-                    }
-                }else {
-                    stockNum = productInfo.getStock_num();
-                }*/
                 if (null == stockNum || stockNum < goodsItem.getNumber() || stockNum <= 0) {
                     logger.error("订单提交失败:库存不足,仅剩余" + stockNum);
                     throw new RRException("订单提交失败:库存不足,仅剩余" + stockNum);
@@ -624,8 +668,17 @@ public class ApiOrderService {
                     productInfo.setStore_id(storeId);
                     //扣减商户商品总库存
                     updateGoodsStock(goodsInfo, goodsItem, userName);
-                    //扣减门店库存
-                    updateStock(productInfo,goodsInfo,stockNum,goodsItem,storeId,userName);
+                    //该商品所属第三方商户不是共享库存
+                    if(isStockShare.equalsIgnoreCase(Dict.isStockShare.item_0.getItem())) {
+                        updateStock(productInfo, goodsInfo, stockNum, goodsItem, storeId, userName);//扣减门店库存
+                    }else{
+                        //该商品所属第三方商户是共享库存,但商品业务类型不是00保税备货
+                        if(!goodsInfo.getGoodsBizType().equalsIgnoreCase(Dict.orderBizType.item_00.getItem())){
+                            updateStock(productInfo, goodsInfo, stockNum, goodsItem, storeId, userName);//扣减门店库存
+                        }
+                    }
+                    //该商品所属第三方商户为共享库存,且是保税备货商品,下单时改变
+                    updateGoodsByIsShareStock(isStockShare, goodsInfo);
                 }
             }
         }
@@ -874,7 +927,7 @@ public class ApiOrderService {
         return orderInfo;
     }
 
-    public OrderGoodsVo setOrderGoodsVo(OrderVo orderInfo,CartVo goodsItem,GoodsVo goodsVo){
+    public OrderGoodsVo setOrderGoodsVo(OrderVo orderInfo,Map<String, Object> cartResultObj,CartVo goodsItem,GoodsVo goodsVo){
         OrderGoodsVo orderGoodsVo = new OrderGoodsVo();
         orderGoodsVo.setOrder_id(orderInfo.getId());
         orderGoodsVo.setGoods_id(goodsItem.getGoods_id());
@@ -890,7 +943,61 @@ public class ApiOrderService {
         orderGoodsVo.setOrderBizType(goodsItem.getGoodsBizType());
         orderGoodsVo.setCreateTime(new Date());
         orderGoodsVo.setModTime(new Date());
+        CampMinusDto campMinusDto = new CampMinusDto();
+        UserCouponVo userCouponVo = new UserCouponVo();
+        CampMinusDto campMinusDto00 = (CampMinusDto)cartResultObj.get("campMinusDto00");
+        CampMinusDto campMinusDto02 = (CampMinusDto)cartResultObj.get("campMinusDto02");
+        CampMinusDto campMinusDto10 = (CampMinusDto)cartResultObj.get("campMinusDto10");
+        CampMinusDto campMinusDto11 = (CampMinusDto)cartResultObj.get("campMinusDto11");
+        UserCouponVo checkedCoupon00 = (UserCouponVo)cartResultObj.get("checkedCoupon00");
+        UserCouponVo checkedCoupon02 = (UserCouponVo)cartResultObj.get("checkedCoupon02");
+        UserCouponVo checkedCoupon10 = (UserCouponVo)cartResultObj.get("checkedCoupon10");
+        UserCouponVo checkedCoupon11 = (UserCouponVo)cartResultObj.get("checkedCoupon11");
+        if(goodsVo.getGoodsBizType().equalsIgnoreCase(Dict.orderBizType.item_00.getItem())){
+            if(campMinusDto00 != null){
+                campMinusDto = campMinusDto00;
+                userCouponVo = checkedCoupon00;
+            }
+        }
+        if(goodsVo.getGoodsBizType().equalsIgnoreCase(Dict.orderBizType.item_02.getItem())){
+            if(campMinusDto02 != null){
+                campMinusDto = campMinusDto02;
+                userCouponVo = checkedCoupon02;
+            }
+        }
+        if(goodsVo.getGoodsBizType().equalsIgnoreCase(Dict.orderBizType.item_10.getItem())){
+            if(campMinusDto10 != null){
+                campMinusDto = campMinusDto10;
+                userCouponVo = checkedCoupon10;
+            }
+        }
+        if(goodsVo.getGoodsBizType().equalsIgnoreCase(Dict.orderBizType.item_11.getItem())){
+            if(campMinusDto11 != null){
+                campMinusDto = campMinusDto11;
+                userCouponVo = checkedCoupon11;
+            }
+        }
 
+        if(campMinusDto != null){
+            List<Integer> goodsList = campMinusDto.getGoodsIds();
+            if(goodsList != null) {
+                for (Integer goodsId : goodsList) {
+                    if (goodsId == Integer.parseInt(String.valueOf(goodsVo.getId()))) {
+                        orderGoodsVo.setStoreTopicId(Integer.parseInt(String.valueOf(orderInfo.getActivity_id())));
+                    }
+                }
+            }
+        }
+        if(userCouponVo != null){
+            List<Integer> goodsList = userCouponVo.getGoodsList();
+            if(goodsList != null) {
+                for (Integer goodsId : goodsList) {
+                    if (goodsId == Integer.parseInt(String.valueOf(goodsVo.getId()))) {
+                        orderGoodsVo.setStoreTopicId(Integer.parseInt(String.valueOf(orderInfo.getActivity_id())));
+                    }
+                }
+            }
+        }
         orderGoodsVo.setGoodsRate(goodsVo.getGoodsRate());
 
         BigDecimal number = new BigDecimal(Long.valueOf(goodsItem.getNumber()));

+ 0 - 3
kmall-api/src/main/java/com/kmall/api/service/ApiStoreService.java

@@ -36,7 +36,4 @@ public class ApiStoreService {
         return apiStoreMapper.queryNearbyList(map);
     }
 
-    public int updateStoreLoadGoodsById(StoreVo storeVo){
-        return apiStoreMapper.updateStoreLoadGoodsById(storeVo);
-    }
 }

+ 1 - 0
kmall-api/src/main/java/com/kmall/api/service/ApiUserCouponService.java

@@ -209,6 +209,7 @@ public class ApiUserCouponService {
         userCouponVo.setId(Long.valueOf(discountVo.getTickDiscId()));
         userCouponVo.setSelectTicket(false);
         userCouponVo.setGoodsBizType(discountVo.getGoodsBizType());
+        userCouponVo.setGoodsList(discountVo.getGoodsList());
         return userCouponVo;
     }
 

+ 37 - 26
kmall-api/src/main/java/com/kmall/api/service/mk/ApiMkStoreCampMinusService.java

@@ -77,11 +77,11 @@ public class ApiMkStoreCampMinusService {
     /**
      * 查询详情页商品所支持的优惠券
      * @param storeId
-     * @param userId
+     * @param campId
      * @param goodsId
      * @return
      */
-    public List<MkStoreCampMinusVo> queryStoreCampMinusByGoodsId(Integer storeId, long userId, Integer goodsId){
+    public List<MkStoreCampMinusVo> queryStoreCampMinusByGoodsId(Integer storeId, Integer campId, Integer goodsId){
         GoodsVo goodsVo = apiGoodsMapper.queryObjectByStoreId(Long.valueOf(goodsId),Long.valueOf(storeId));
         if(goodsVo == null){
             logger.error("商品信息不能为空");
@@ -92,17 +92,38 @@ public class ApiMkStoreCampMinusService {
         discountMap.put("storeId", storeId);
         discountMap.put("goodsBizType", goodsVo.getGoodsBizType());
         discountMap.put("isPast", "0");//进行中
+        if(campId != null){
+            discountMap.put("campId", campId);
+        }
         //详情页根据门店id、用户id、业务类型获取当前门店所有的未过期的满减满折信息
         List<MkStoreCampMinusVo> mkStoreTicketDiscountList = mkStoreCampMinusMapper.getCampMinusByStoreIdList(discountMap);
         List<MkStoreCampMinusVo> campMinusVos = new ArrayList<>();
+        StringBuffer goodsIdStr = new StringBuffer();
         for (MkStoreCampMinusVo campMinusVo : mkStoreTicketDiscountList) {
             //查询商品是否满足该满减满折
             Integer total = queryCampMinusGoodsTotal(storeId, goodsId, campMinusVo);
             campMinusVo.setGoodsId(goodsId);
             if(total > 0){
+                goodsIdStr.append(goodsId+",");
                 campMinusVos.add(campMinusVo);
             }
         }
+        if(goodsIdStr != null && !goodsIdStr.toString().equalsIgnoreCase("")) {
+            String[] gid = goodsIdStr.toString().split(",");
+            Integer[] goodsIds =  new Integer[gid.length];
+            for(int i=0;i < gid.length;i++){
+                goodsIds[i] = Integer.parseInt(gid[i]);
+            }
+            List goodsList = new ArrayList();
+            for (Integer goods : goodsIds) {
+                if (!goodsList.contains(goods)) {
+                    goodsList.add(goods);
+                }
+            }
+            for (MkStoreCampMinusVo vo : campMinusVos) {
+                vo.setGoodsIds(goodsList);
+            }
+        }
         return campMinusVos;
     }
     /**
@@ -370,10 +391,13 @@ public class ApiMkStoreCampMinusService {
      */
     private Integer getPieceByGoodsId(List<CartVo> cartGoodsList, MkStoreCampMinusVo minusVo){
         Integer total = 0;
+        List<Integer> goodsList = minusVo.getGoodsIds();
         for (CartVo vo: cartGoodsList) {
-            if(minusVo.getGoodsId().compareTo(vo.getGoods_id().intValue()) == 0
-                    && minusVo.getStoreId().compareTo(vo.getStore_id().intValue()) == 0 && minusVo.getGoodsBizType().equalsIgnoreCase(vo.getGoodsBizType())){
-                total = total + vo.getNumber();
+            for(Integer goodsId:goodsList){
+                if (goodsId.compareTo(vo.getGoods_id().intValue()) == 0
+                        && minusVo.getStoreId().compareTo(vo.getStore_id().intValue()) == 0 && minusVo.getGoodsBizType().equalsIgnoreCase(vo.getGoodsBizType())) {
+                    total = total + vo.getNumber();
+                }
             }
         }
         return total;
@@ -387,11 +411,10 @@ public class ApiMkStoreCampMinusService {
      */
     private BigDecimal getTotalByGoodsId(List<CartVo> cartGoodsList, MkStoreCampMinusVo minusVo){
         BigDecimal total = new BigDecimal(0);
-        Integer goodsId[] = minusVo.getGoodsIds();
-        for(int i = 0; i<goodsId.length;i++) {
+        List<Integer> goodsId = minusVo.getGoodsIds();
+        for(int i = 0; i<goodsId.size();i++) {
             for (CartVo vo:cartGoodsList) {
-//            CartVo vo = cartGoodsList.get(i);
-                if (goodsId[i].compareTo(vo.getGoods_id().intValue()) == 0 && minusVo.getStoreId().compareTo(vo.getStore_id().intValue()) == 0 && minusVo.getGoodsBizType().equalsIgnoreCase(vo.getGoodsBizType())) {
+                if (goodsId.get(i).compareTo(vo.getGoods_id().intValue()) == 0 && minusVo.getStoreId().compareTo(vo.getStore_id().intValue()) == 0 && minusVo.getGoodsBizType().equalsIgnoreCase(vo.getGoodsBizType())) {
                     total = total.add(vo.getRetail_price().multiply(BigDecimal.valueOf(vo.getNumber())));
                 }
             }
@@ -420,6 +443,7 @@ public class ApiMkStoreCampMinusService {
         campMinusDto.setMoney(money);
         campMinusDto.setCampMinusId(minusVo.getCampMinusId());
         campMinusDto.setGoodsBizType(minusVo.getGoodsBizType());
+        campMinusDto.setGoodsIds(minusVo.getGoodsIds());
         return campMinusDto;
     }
     /**
@@ -432,27 +456,14 @@ public class ApiMkStoreCampMinusService {
         long userId= userCouponDto.getUserId();
         List<CartVo> cartList = userCouponDto.getCartGoodsList();
         String bizType = userCouponDto.getBizType();
+        Integer campId = userCouponDto.getCampId();
         List<MkStoreCampMinusVo> mkStoreCampMinusList = new ArrayList<>();
-        Integer count = 0;
-        List<CartVo> cartBizList = new ArrayList<>();
-        for(CartVo cartVo: cartList){
+        for(int i=0;i<cartList.size();i++){
+            CartVo cartVo = cartList.get(i);
             if(bizType.equalsIgnoreCase(cartVo.getGoodsBizType())) {
-                count++;
-                cartBizList.add(cartVo);
+                mkStoreCampMinusList.addAll(queryStoreCampMinusByGoodsId(storeId, campId, Integer.parseInt(String.valueOf(cartVo.getGoods_id()))));
             }
         }
-        Integer[] goodsIds = new Integer[count];
-        for(int i=0;i<cartBizList.size();i++){
-            CartVo cartVo = cartBizList.get(i);
-            if(bizType.equalsIgnoreCase(cartVo.getGoodsBizType())) {
-                Integer goodsId = Integer.parseInt(String.valueOf(cartVo.getGoods_id()));
-                mkStoreCampMinusList = queryStoreCampMinusByGoodsId(storeId, userId, goodsId);
-                goodsIds[i] = goodsId;
-            }
-        }
-        for(MkStoreCampMinusVo vo : mkStoreCampMinusList){
-            vo.setGoodsIds(goodsIds);
-        }
         Map map = new HashMap();
         map.put("mkStoreCampMinusList", mkStoreCampMinusList);
         return map;

+ 20 - 16
kmall-api/src/main/java/com/kmall/api/service/mk/ApiMkStorePromStatService.java

@@ -69,22 +69,26 @@ public class ApiMkStorePromStatService {
         Integer goodsId = Integer.parseInt(String.valueOf(orderGoodsVo.getGoods_id()));
         MkStorePromStatVo statVo = mkStorePromStatMapper.queryStatDataByCartIdAndGoodsId(cartId, goodsId);
         if(statVo != null){
-            MkStorePromOrderRealVo orderRealVo = new MkStorePromOrderRealVo();
-            orderRealVo.setOrderId(Integer.parseInt(String.valueOf(orderInfo.getId())));
-            orderRealVo.setOrderGoodsId(Integer.parseInt(String.valueOf(orderGoodsVo.getId())));
-            orderRealVo.setModTime(new Date());
-            orderRealVo.setPromOrderRealId(statVo.getPromOrderRealId());
-            orderRealVo.setUserId(Integer.parseInt(String.valueOf(loginUser.getId())));
-            apiMkStorePromOrderRealService.update(orderRealVo);
-
-            MkStorePromStatVo mkStorePromStatVo = new MkStorePromStatVo();
-            //获取推广订单关联表中根据推广id查询下单人数
-            Integer submitNum = apiMkStorePromOrderRealService.querySubmitNumByPromId(statVo.getPromId());
-            Integer submitOrdNum = apiMkStorePromOrderRealService.querySubmitOrderNumByPromId(statVo.getPromId());
-            mkStorePromStatVo.setSubmitNum(submitNum == null ? 0 : submitNum);//下单人数
-            mkStorePromStatVo.setSubmitOrderNum(submitOrdNum);//下单单数
-            mkStorePromStatVo.setPromStatId(statVo.getPromStatId());
-            mkStorePromStatMapper.update(mkStorePromStatVo);
+            updateStorePromStat(orderGoodsVo, orderInfo, loginUser, statVo);
         }
     }
+
+    public void updateStorePromStat(OrderGoodsVo orderGoodsVo, OrderVo orderInfo, UserVo loginUser, MkStorePromStatVo statVo){
+        MkStorePromOrderRealVo orderRealVo = new MkStorePromOrderRealVo();
+        orderRealVo.setOrderId(Integer.parseInt(String.valueOf(orderInfo.getId())));
+        orderRealVo.setOrderGoodsId(Integer.parseInt(String.valueOf(orderGoodsVo.getId())));
+        orderRealVo.setModTime(new Date());
+        orderRealVo.setPromOrderRealId(statVo.getPromOrderRealId());
+        orderRealVo.setUserId(Integer.parseInt(String.valueOf(loginUser.getId())));
+        apiMkStorePromOrderRealService.update(orderRealVo);
+
+        MkStorePromStatVo mkStorePromStatVo = new MkStorePromStatVo();
+        //获取推广订单关联表中根据推广id查询下单人数
+        Integer submitNum = apiMkStorePromOrderRealService.querySubmitNumByPromId(statVo.getPromId());
+        Integer submitOrdNum = apiMkStorePromOrderRealService.querySubmitOrderNumByPromId(statVo.getPromId());
+        mkStorePromStatVo.setSubmitNum(submitNum == null ? 0 : submitNum);//下单人数
+        mkStorePromStatVo.setSubmitOrderNum(submitOrdNum);//下单单数
+        mkStorePromStatVo.setPromStatId(statVo.getPromStatId());
+        mkStorePromStatMapper.update(mkStorePromStatVo);
+    }
 }

+ 21 - 0
kmall-api/src/main/java/com/kmall/api/service/mk/ApiMkStoreTicketDiscountService.java

@@ -129,6 +129,7 @@ public class ApiMkStoreTicketDiscountService {
         List<CartVo> cartList = userCouponDto.getCartGoodsList();
         String bizType = userCouponDto.getBizType();
         List<MkStoreTicketDiscountVo> discountVoList = new ArrayList<>();
+        StringBuffer goodsIdStr = new StringBuffer();
         for(CartVo cartVo: cartList){
             if(bizType.equalsIgnoreCase(cartVo.getGoodsBizType())) {
                 Integer goodsId = Integer.parseInt(String.valueOf(cartVo.getGoods_id()));
@@ -143,6 +144,9 @@ public class ApiMkStoreTicketDiscountService {
                 discountMap.put("userId", userId);
                 discountMap.put("goodsBizType", goodsVo.getGoodsBizType());
                 discountMap.put("isPast", "0");//未过期
+                if(userCouponDto.getTickDiscId() != null){
+                    discountMap.put("tickDiscId", userCouponDto.getTickDiscId());
+                }
                 List<MkStoreTicketDiscountVo> mkStoreTicketDiscountList = new ArrayList<>();
                 if (StringUtils.isNotEmpty(isUsed)) {
                     discountMap.put("isUsed", isUsed);
@@ -156,11 +160,28 @@ public class ApiMkStoreTicketDiscountService {
                     Integer total = queryDiscountGoodsTotal(storeId, goodsId, discountEntity);
                     discountEntity.setGoodsId(goodsId);
                     if (total > 0) {
+                        goodsIdStr.append(goodsId+",");
                         discountVoList.add(discountEntity);
                     }
                 }
             }
         }
+        if(goodsIdStr != null && !goodsIdStr.toString().equalsIgnoreCase("")) {
+            String[] gid = goodsIdStr.toString().split(",");
+            Integer[] goodsIds =  new Integer[gid.length];
+            for(int i=0;i < gid.length;i++){
+                goodsIds[i] = Integer.parseInt(gid[i]);
+            }
+            List goodsList = new ArrayList();
+            for (Integer goods : goodsIds) {
+                if (!goodsList.contains(goods)) {
+                    goodsList.add(goods);
+                }
+            }
+            for (MkStoreTicketDiscountVo vo : discountVoList) {
+                vo.setGoodsList(goodsList);
+            }
+        }
         Map map = new HashMap();
         map.put("discountVoList", discountVoList);
         return map;

+ 14 - 50
kmall-api/src/main/resources/mybatis/mapper/ApiCartMapper.xml

@@ -51,6 +51,8 @@
 
     <select id="queryList" resultMap="cartMap">
         SELECT
+        m.camp_name 'campName',
+        ( SELECT camp_name FROM mk_store_camp_minus WHERE camp_minus_id IN ( SELECT camp_minus_id FROM mk_store_camp_minus_goods WHERE apply_type = 02 AND store_rela_id != psr.id ) ) 'campNameByNotGoods',
         mb.third_party_merch_code,
         mb.is_stock_share isStockShare,
         mb.is_supplier_goods 'isSupplierGoods',
@@ -74,24 +76,11 @@
         LEFT JOIN mall_store s ON s.id = psr.store_id
         LEFT JOIN third_merchant_biz mb ON s.third_party_merch_code = mb.third_party_merch_code
         LEFT JOIN third_merchant_biz mb2 ON b.third_party_merch_code = mb2.third_party_merch_code
-        where 1 = 1  and b.is_delete = 0 and b.is_on_sale = 1 and psr.stock_num > 0
-        <!--<if test="checkCart == null">
-            <if test="isStockShare == 1 and goodsBizType == 00">
-                and b.goods_number > 0
-            </if>
-            <if test="isStockShare == 1 and goodsBizType != 00">
-                and psr.stock_num > 0
-            </if>
-            <if test="isStockShare == 0">
-                and psr.stock_num > 0
-            </if>
-        </if>-->
-        <!--<if test="isStockShare == 1 and (checkCart != null and checkCart != '11')">-->
-            <!--and b.goods_number > 0-->
-        <!--</if>-->
-        <!--<if test="isStockShare == 0 and (checkCart != null and checkCart != '11')">-->
-            <!--and psr.stock_num > 0-->
-        <!--</if>-->
+        LEFT JOIN mk_store_camp_minus_goods g ON g.store_rela_id = psr.id
+        AND apply_type != '02'
+        LEFT JOIN mk_store_camp_minus m ON m.camp_minus_id = g.camp_minus_id
+        where 1 = 1  and b.is_delete = 0 and b.is_on_sale = 1 and b.goods_number > 0
+        and psr.stock_num > 0
         <if test="checkCart != null and checkCart == '11'">
             and b.goods_biz_type = '11'
         </if>
@@ -147,22 +136,10 @@
         LEFT JOIN mall_store s ON s.id = psr.store_id
         LEFT JOIN third_merchant_biz mb ON s.third_party_merch_code = mb.third_party_merch_code
         LEFT JOIN third_merchant_biz mb2 ON b.third_party_merch_code = mb2.third_party_merch_code
-        where 1 = 1
-        <!--<if test="isStockShare == 1 and checkCart != null and checkCart != '11'">-->
-        <!--and (b.goods_number = 0 or b.is_on_sale = 0)-->
-        <!--</if>-->
-        <!--<if test="isStockShare == 0 and checkCart != null and checkCart != '11'">-->
-        <!--and (psr.stock_num = 0 or b.is_on_sale = 0)-->
-        <!--</if>-->
+        where 1 = 1 and (b.goods_number = 0 or psr.stock_num = 0 or b.is_on_sale = 0)
         <if test="checkCart != null and checkCart != '11'">
             and b.goods_biz_type != '11'
         </if>
-        <if test="checkCart != null and checkCart != '11'">
-            and (psr.stock_num = 0 or b.is_on_sale = 0)
-        </if>
-        <if test="checkCart != null and checkCart == '11'">
-            and (psr.stock_num = 0 or b.is_on_sale = 0)
-        </if>
         <if test="checkCart != null and checkCart == '11'">
             and b.goods_biz_type = '11'
         </if>
@@ -209,26 +186,13 @@
         LEFT JOIN mall_store s ON s.id = psr.store_id
         LEFT JOIN third_merchant_biz mb ON s.third_party_merch_code = mb.third_party_merch_code
         LEFT JOIN third_merchant_biz mb2 ON b.third_party_merch_code = mb2.third_party_merch_code
-        where 1 = 1  and b.is_delete = 0 and b.is_on_sale = 1
-        <if test="checkCart == null">
-            <if test="isStockShare == 1 and goodsBizType == 00">
-                and b.goods_number > 0
-            </if>
-            <if test="isStockShare == 1 and goodsBizType != 00">
-                and psr.stock_num > 0
-            </if>
-            <if test="isStockShare == 0">
-                and psr.stock_num > 0
-            </if>
-        </if>
-        <!--<if test="isStockShare == 1 and (checkCart != null and checkCart != '11')">-->
-        <!--and b.goods_number > 0-->
-        <!--</if>-->
-        <!--<if test="isStockShare == 0 and (checkCart != null and checkCart != '11')">-->
-        <!--and psr.stock_num > 0-->
-        <!--</if>-->
+        LEFT JOIN mk_store_camp_minus_goods g ON g.store_rela_id = psr.id
+        AND apply_type != '02'
+        LEFT JOIN mk_store_camp_minus m ON m.camp_minus_id = g.camp_minus_id
+        where 1 = 1  and b.is_delete = 0 and b.is_on_sale = 1 and b.goods_number > 0
+        and psr.stock_num > 0
         <if test="checkCart != null and checkCart == '11'">
-            and psr.stock_num > 0 and b.goods_biz_type = '11'
+            and b.goods_biz_type = '11'
         </if>
         <if test="checkCart != null and checkCart != '11'">
             and b.goods_biz_type != '11'

+ 2 - 5
kmall-api/src/main/resources/mybatis/mapper/ApiFootprintMapper.xml

@@ -35,12 +35,9 @@
         left join mall_goods g on f.goods_id = g.id
         LEFT JOIN mall_product_store_rela psr ON psr.goods_id = g.id and g.merch_sn = psr.merch_sn
         <where>
-            1=1 and g.is_delete = 0 and g.is_on_sale = 1
+            1=1 and g.is_delete = 0 and g.is_on_sale = 1 and g.goods_number > 0
             <if test="bizType == true">
-                <if test="isStockShare == 1 and (checkCart != null and checkCart == '00')">
-                    and g.goods_number > 0
-                </if>
-                <if test="isStockShare == 0 and (checkCart != null and checkCart == '00')">
+                <if test="isStockShare == 0">
                     and psr.stock_num > 0
                 </if>
                 <if test="checkCart != null and checkCart == '11'">

+ 12 - 5
kmall-api/src/main/resources/mybatis/mapper/ApiGoodsMapper.xml

@@ -52,6 +52,7 @@
         <result column="third_party_merch_code" property="thirdPartyMerchCode" />
         <result column="isStockShare" property="isStockShare" />
         <result property="goods_sell_volume" column="goods_sell_volume"/>
+        <result property="isGoodsShareStock" column="is_goods_share_stock"/>
 
     </resultMap>
 
@@ -139,7 +140,7 @@
         mb.is_stock_share isStockShare,
         mb.is_supplier_goods 'isSupplierGoods',
         mb2.third_party_merch_code 'supplierThirdMerchCode',
-        mb2.is_stock_share 'isStockShareBySuppler'
+        mb2.is_stock_share 'isStockShareBySuppler',psr1.product_id
         from mall_goods a left join mall_merch m on a.merch_sn = m.merch_sn
         LEFT JOIN mall_product_store_rela psr1 ON a.id = psr1.goods_id and a.merch_sn = psr1.merch_sn
         LEFT JOIN mall_store s ON s.id = psr1.store_id
@@ -245,10 +246,7 @@
         LEFT JOIN third_merchant_biz mb ON s.third_party_merch_code = mb.third_party_merch_code AND mb.merch_sn = s.merch_sn
         LEFT JOIN mall_product b ON b.id = psr1.product_id
         LEFT JOIN mall_category c ON psr1.category_id = c.id
-        where 1 = 1
-        <if test="isStockShare == 1">
-            and (a.goods_number > 0  or psr1.stock_num > 0 )
-        </if>
+        where 1 = 1 and a.goods_number > 0
         <if test="isStockShare == 0">
             and psr1.stock_num > 0
         </if>
@@ -502,4 +500,13 @@
         </set>
         where a.id = #{id}
     </update>
+
+
+    <update id="updateByGoodsShareStock" parameterType="com.kmall.api.entity.GoodsVo">
+        update mall_goods
+        <set>
+            <if test="isGoodsShareStock != null">`is_goods_share_stock` = #{isGoodsShareStock} </if>
+        </set>
+        where id = #{id}
+    </update>
 </mapper>

+ 17 - 2
kmall-api/src/main/resources/mybatis/mapper/ApiMerchUserMapper.xml

@@ -13,6 +13,7 @@
         <result property="moderSn" column="moder_sn"/>
         <result property="modTime" column="mod_time"/>
         <result property="tstm" column="tstm"/>
+		<result property="isLoadGoods" column="is_load_goods"/>
     </resultMap>
 
 	<select id="queryObject" resultType="com.kmall.api.entity.MerchUserVo">
@@ -25,12 +26,13 @@
 			`create_time`,
 			`moder_sn`,
 			`mod_time`,
+			is_load_goods,
 			`tstm`
 		from mall_merch_user
 		where id = #{id}
 	</select>
 
-	<select id="queryObjectByStoreId" resultType="com.kmall.api.entity.MerchUserVo">
+	<select id="queryObjectByStoreId" resultMap="merchUserMap">
 		select
 		`id`,
 		`merch_sn`,
@@ -40,12 +42,13 @@
 		`create_time`,
 		`moder_sn`,
 		`mod_time`,
+		is_load_goods,
 		`tstm`
 		from mall_merch_user
 		where store_id = #{storeId} and user_id = #{userId}
 	</select>
 
-	<select id="queryList" resultType="com.kmall.api.entity.MerchUserVo">
+	<select id="queryList" resultMap="merchUserMap">
 		select
     		`id`,
     		`merch_sn`,
@@ -55,6 +58,7 @@
     		`create_time`,
     		`moder_sn`,
     		`mod_time`,
+			is_load_goods,
     		`tstm`
 		from mall_merch_user
 		WHERE 1=1
@@ -87,6 +91,7 @@
 			`merch_sn`,
 			`store_id`,
 			`user_id`,
+			is_load_goods,
 			`creater_sn`,
 			`create_time`,
 			`moder_sn`,
@@ -96,6 +101,7 @@
 			#{merchSn},
 			#{storeId},
 			#{userId},
+			#{isLoadGoods},
 			#{createrSn},
 			#{createTime},
 			#{moderSn},
@@ -109,6 +115,7 @@
 			<if test="merchSn != null">`merch_sn` = #{merchSn}, </if>
 			<if test="storeId != null">`store_id` = #{storeId}, </if>
 			<if test="userId != null">`user_id` = #{userId}, </if>
+			<if test="isLoadGoods != null">`is_load_goods` = #{isLoadGoods}, </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>
@@ -128,5 +135,13 @@
 			#{id}
 		</foreach>
 	</delete>
+	<update id="updateStoreLoadGoodsById" parameterType="com.kmall.api.entity.StoreVo">
+		update mall_merch_user
+		<set>
+			<if test="isLoadGoods != null">`is_load_goods` = #{isLoadGoods}, </if>
+			mod_time = now()
+		</set>
+		where store_id = #{storeId} and user_id = #{userId}
+	</update>
 
 </mapper>

+ 9 - 3
kmall-api/src/main/resources/mybatis/mapper/ApiOrderGoodsMapper.xml

@@ -28,14 +28,17 @@
         <result property="goodsRate" column="goods_rate"/>
         <result property="settlePrice" column="settle_price"/>
         <result property="merchSn" column="merch_sn"/>
+        <result property="storeTopicId" column="store_topic_id"/>
     </resultMap>
 
     <select id="queryObject" resultMap="orderGoodsMap">
-		select * from mall_order_goods where id = #{value}
+		select g.* from mall_order_goods gwhere g.id = #{value}
 	</select>
 
     <select id="queryList" resultMap="orderGoodsMap">
-        select g.*,o.merch_sn from mall_order_goods g left join mall_order o on o.id = g.order_id
+        select g.*,o.merch_sn,m.store_topic_id 'campTopicId',t.store_topic_id 'distcountTopicId' from mall_order_goods g left join mall_order o on o.id = g.order_id
+        left join mk_store_camp_minus m on g.store_topic_id = m.store_topic_id
+        left join mk_store_ticket_discount t on g.store_topic_id = t.store_topic_id
         <where>
             <if test="order_id != null and order_id != ''">
                 and order_id = #{order_id}
@@ -74,6 +77,7 @@
 			`goods_specification_ids`,
 			`list_pic_url`,
             is_dist_sell_scan,
+            store_topic_id,
             <if test="goodsRate != null" >
                 goods_rate,
             </if>
@@ -102,7 +106,7 @@
 		)
 		values
 		(
-		#{order_id},
+		    #{order_id},
 			#{goods_id},
 			#{goods_name},
 			#{goods_sn},
@@ -115,6 +119,7 @@
 			#{goods_specification_ids},
 			#{list_pic_url},
             0,
+            #{storeTopicId},
         <if test="goodsRate != null" >
             #{goodsRate},
         </if>
@@ -163,6 +168,7 @@
 
             <if test="goodsRate != null">`goods_rate` = #{goodsRate},</if>
             <if test="settlePrice != null">`settle_price` = #{settlePrice},</if>
+            <if test="storeTopicId != null">`store_topic_id` = #{storeTopicId},</if>
 
             <if test="sku != null" >
                 sku = #{sku,jdbcType=VARCHAR},

+ 3 - 1
kmall-api/src/main/resources/mybatis/mapper/ApiOrderMapper.xml

@@ -82,9 +82,11 @@
     </resultMap>
 
     <select id="queryObject" resultMap="orderMap">
-		select a.*,b.latitude,b.longitude
+		select a.*,b.latitude,b.longitude,m.apply_type 'applyType',t.apply_type 'discountApplyType'
 		from mall_order a
 		left join mall_address b on a.address_id = b.id
+		left join mk_store_camp_minus m on a.activity_id = m.store_topic_id
+		left join mk_store_ticket_discount t on a.activity_id = t.store_topic_id
 		where a.id = #{value}
 	</select>
 

+ 1 - 12
kmall-api/src/main/resources/mybatis/mapper/ApiStoreMapper.xml

@@ -37,7 +37,6 @@
 			`latitude`,
 			`longitude`,
 			`cover_radius`,
-			is_load_goods,
 			`remark`,
 			merch_sn,
 			merch_name,
@@ -64,8 +63,7 @@
         merch_sn,
         merch_name,
         third_party_merch_code,
-        third_party_merch_name,
-        is_load_goods
+        third_party_merch_name
         from mall_store
         WHERE 1=1  and is_valid = 0
         <if test="province_name != null and province_name.trim() != ''">
@@ -165,7 +163,6 @@
             *pow(sin((a.longitude*pi()/180-#{longitude}*pi()/180)/2),2)))*1000) as distance,
         merch_sn,
         merch_name,
-        is_load_goods,
         third_party_merch_code,
         third_party_merch_name
         from mall_store a
@@ -189,13 +186,5 @@
         order by distance asc
         limit 0, 10
     </select>
-    <update id="updateStoreLoadGoodsById" parameterType="com.kmall.api.entity.StoreVo">
-        update mall_store
-        <set>
-            <if test="isLoadGoods != null">`is_load_goods` = #{isLoadGoods}, </if>
-            mod_time = now()
-        </set>
-        where id = #{id}
-    </update>
 
 </mapper>

+ 9 - 3
kmall-api/src/main/resources/mybatis/mapper/mk/ApiMkStoreCampMinusMapper.xml

@@ -81,9 +81,12 @@
 		`tstm`,
 		`goods_biz_type`
 		from mk_store_camp_minus
-		WHERE 1=1
-		<if test="name != null and name.trim() != ''">
-			AND name LIKE concat('%',#{name},'%')
+		WHERE 1=1 and is_past = 0 AND is_valid = 0
+		<if test="storeId != null and storeId != ''">
+			AND store_id = #{storeId}
+		</if>
+		<if test="applyType != null and applyType != ''">
+			AND apply_type = #{applyType}
 		</if>
 		<choose>
 			<when test="sidx != null and sidx.trim() != ''">
@@ -135,6 +138,9 @@
 		<if test="storeId != '' and storeId != null">
 			AND m.store_id = #{storeId}
 		</if>
+		<if test="campId != '' and campId != null">
+			AND m.camp_minus_id = #{campId}
+		</if>
 		<if test="goodsBizType != '' and goodsBizType != null">
 			AND m.goods_biz_type = #{goodsBizType}
 		</if>

+ 6 - 1
kmall-common/pom.xml

@@ -18,7 +18,7 @@
         <qiniu-version>[7.2.0, 7.2.99]</qiniu-version>
         <aliyun-oss-version>2.5.0</aliyun-oss-version>
         <qcloud-cos-version>4.4</qcloud-cos-version>
-        <jackson.version>2.5.0</jackson.version>
+        <jackson.version>2.5.1</jackson.version>
         <jackson.core.version>2.7.3</jackson.core.version>
         <poi.version>3.15</poi.version>
         <poi.ooxml.version>3.15</poi.ooxml.version>
@@ -71,6 +71,11 @@
             <artifactId>jackson-databind</artifactId>
             <version>${jackson.version}</version>
         </dependency>
+        <!--<dependency>-->
+            <!--<groupId>com.fasterxml.jackson.dataformat</groupId>-->
+            <!--<artifactId>jackson-dataformat-xml</artifactId>-->
+            <!--<version>2.8.10</version>-->
+        <!--</dependency>-->
 
         <dependency>
             <groupId>dom4j</groupId>

+ 33 - 0
kmall-common/src/main/java/com/kmall/common/constant/Dict.java

@@ -1463,4 +1463,37 @@ public class Dict {
             this.itemName = itemName;
         }
     }
+
+    /**
+     * 商品库存数量变化后是否已共享,0:否,1:是(下单、退款、取消订单触发)
+     */
+    public enum isGoodsShareStock {
+        item_0("0", "否"),
+        item_1("1", "是");
+
+        private String item;
+        private String itemName;
+
+        isGoodsShareStock(String item, String itemName) {
+            this.item = item;
+            this.itemName = itemName;
+        }
+
+        public String getItem() {
+            return item;
+        }
+
+        public void setItem(String item) {
+            this.item = item;
+        }
+
+        public String getItemName() {
+            return itemName;
+        }
+
+        public void setItemName(String itemName) {
+            this.itemName = itemName;
+        }
+    }
+
 }

+ 1 - 1
kmall-common/src/main/java/com/kmall/common/fileserver/util/FileManager.java

@@ -57,7 +57,7 @@ public class FileManager implements Serializable {
      * <strong>方法概要: 文件上传</strong> <br>
      * <strong>创建时间: 2016-9-26 上午10:26:11</strong> <br>
      *
-     * @param FastDFSFile file
+     * @param attach file
      * @return fileAbsolutePath
      * @author Wang Liang
      */

+ 3 - 1
kmall-common/src/main/java/com/kmall/common/utils/DateUtils.java

@@ -201,7 +201,7 @@ public class DateUtils {
     }
 
     /**
-     * true为开始时间小于结束时间,false为开始时间大于结束时间
+     * true为开始时间小于或等于结束时间,false为开始时间大于结束时间
      * @param startDate
      * @param endDate
      * @return
@@ -238,6 +238,8 @@ public class DateUtils {
 //        System.out.println(DateUtils.getDateFormat(str));
 //        System.out.println(DateUtils.addDay(2));
 
+        System.out.println(DateUtils.compareDate(new Date(), new Date()));
         System.out.println(new BigDecimal("11").compareTo(new BigDecimal("11")));
+        System.out.println(BigDecimal.valueOf(Double.valueOf("0.112")));
     }
 }

+ 1 - 1
kmall-common/src/main/java/com/kmall/common/utils/JacksonStringUnicodeSerializer.java

@@ -45,7 +45,7 @@ public class JacksonStringUnicodeSerializer extends JsonSerializer<String> {
 	        gen.writeRaw(',');
 	        break;
 	      case JsonWriteContext.STATUS_EXPECT_NAME:
-	        throw new JsonParseException(null, "Can not write string value here");
+	        throw new JsonParseException("Can not write string value here", null);
 	    }
 	    gen.writeRaw('"');//写入JSON中字符串的开头引号
 	    for (char c : str.toCharArray()) {

+ 61 - 0
kmall-common/src/main/java/com/kmall/common/utils/file/FileUploadUtil.java

@@ -14,6 +14,12 @@ import org.apache.http.protocol.HTTP;
 import org.springframework.web.multipart.MultipartFile;
 import org.springframework.web.multipart.commons.CommonsMultipartFile;
 
+import javax.imageio.IIOImage;
+import javax.imageio.ImageIO;
+import javax.imageio.ImageWriteParam;
+import javax.imageio.ImageWriter;
+import java.awt.image.BufferedImage;
+import java.awt.image.ColorModel;
 import java.io.*;
 import java.nio.file.Files;
 
@@ -73,6 +79,7 @@ public class FileUploadUtil {
                 IOUtils.copy(input, os);
                 MultipartFile multipartFile = new CommonsMultipartFile(fileItem);
                 String url = FileManager.upload(multipartFile);
+//                compressPic(url, url);
                 return url;
             }
         }catch (Exception e){
@@ -80,7 +87,61 @@ public class FileUploadUtil {
         }
         return "";
     }
+    public static boolean compressPic(String srcFilePath, String descFilePath) throws IOException {
+        File file = null;
+        BufferedImage src = null;
+        FileOutputStream out = null;
+        ImageWriter imgWrier;
+        ImageWriteParam imgWriteParams;
 
+        // 指定写图片的方式为 jpg
+        imgWrier = ImageIO.getImageWritersByFormatName("jpg").next();
+        imgWriteParams = new javax.imageio.plugins.jpeg.JPEGImageWriteParam(
+                null);
+        // 要使用压缩,必须指定压缩方式为MODE_EXPLICIT
+        imgWriteParams.setCompressionMode(imgWriteParams.MODE_EXPLICIT);
+        // 这里指定压缩的程度,参数qality是取值0~1范围内,
+        imgWriteParams.setCompressionQuality((float)1);
+        imgWriteParams.setProgressiveMode(imgWriteParams.MODE_DISABLED);
+        ColorModel colorModel = ImageIO.read(new File(srcFilePath)).getColorModel();// ColorModel.getRGBdefault();
+        // 指定压缩时使用的色彩模式
+//        imgWriteParams.setDestinationType(new javax.imageio.ImageTypeSpecifier(
+//                colorModel, colorModel.createCompatibleSampleModel(16, 16)));
+        imgWriteParams.setDestinationType(new javax.imageio.ImageTypeSpecifier(
+                colorModel, colorModel.createCompatibleSampleModel(16, 16)));
+
+        try {
+            if (isBlank(srcFilePath)) {
+                return false;
+            } else {
+                file = new File(srcFilePath);
+                System.out.println(file.length());
+                src = ImageIO.read(file);
+                out = new FileOutputStream(descFilePath);
+
+                imgWrier.reset();
+                // 必须先指定 out值,才能调用write方法, ImageOutputStream可以通过任何
+                // OutputStream构造
+                imgWrier.setOutput(ImageIO.createImageOutputStream(out));
+                // 调用write方法,就可以向输入流写图片
+                imgWrier.write(null, new IIOImage(src, null, null),
+                        imgWriteParams);
+                out.flush();
+                out.close();
+            }
+        } catch (Exception e) {
+            e.printStackTrace();
+            return false;
+        }
+        return true;
+    }
+
+    public static boolean isBlank(String string) {
+        if (string == null || string.length() == 0 || string.trim().equals("")) {
+            return true;
+        }
+        return false;
+    }
 
     private static void deleteFile(File dirFile){
         if(dirFile.exists()){

+ 1 - 1
kmall-gen/src/main/resources/template/list.js.vm

@@ -11,7 +11,7 @@ $(function () {
 #end#end#end
 ],
 		viewrecords: true,
-        height: 385,
+        height: 550,
         rowNum: 10,
         rowList: [10, 30, 50],
         rownumbers: true,

+ 6 - 0
kmall-schedule/src/main/java/com/kmall/schedule/dao/QzOrderMapper.java

@@ -94,4 +94,10 @@ public interface QzOrderMapper {
     List<Map> queryOrderIdByOrderGoodsList();
 
     Map queryOrderCountByIdAndPayStatus(@Param("storeRelaId") Integer storeRelaId);
+
+    List<Map> queryGoodsListByIsShareStock();
+
+    List<Map> queryStoreRelaListByGoodsId(@Param("goodsId") Integer goodsId);
+
+    void updateByGoodsShareStock(Map map);
 }

+ 28 - 17
kmall-schedule/src/main/java/com/kmall/schedule/quartz/OrderTask.java

@@ -48,7 +48,7 @@ public class OrderTask {
      * 方法描述:更新过期未支付订单
      * 二分钟更新未付款订单
      */
-    @Scheduled(fixedRate = 1000 * 60 * 2)
+//    @Scheduled(fixedRate = 1000 * 60 * 2)
     public void unpayPastUpdate() {
         logger.info(">>>>>>>>>>>>>>>>>>>>unpayPastUpdate is start ");
         qzOrderService.unpayPastUpdate();
@@ -59,7 +59,7 @@ public class OrderTask {
      * 方法描述:查询已申请退款订单以及退款中订单,查询微信退款更新订单状态
      * 二分钟更新订单
      */
-    @Scheduled(fixedRate = 1000 * 60 * 1)
+//    @Scheduled(fixedRate = 1000 * 60 * 1)
     public void refundUpdate() {
         logger.info(">>>>>>>>>>>>>>>>>>>>refundUpdate is start ");
         qzOrderService.refundUpdate();
@@ -70,7 +70,7 @@ public class OrderTask {
      * 方法描述:查询支付中的订单以及小程序更新支付信息异常订单,查询微信订单信息更新订单状态
      * 二分钟更新订单
      */
-    @Scheduled(fixedRate = 1000 * 60 * 1)
+//    @Scheduled(fixedRate = 1000 * 60 * 1)
     public void orderQueryUpdate() {
         logger.info(">>>>>>>>>>>>>>>>>>>>orderQueryUpdate is start ");
         qzOrderService.orderQueryUpdate();
@@ -81,7 +81,7 @@ public class OrderTask {
      * 方法描述:查询支付中的订单以及小程序更新支付信息异常订单,查询平安订单信息更新订单状态
      * 二分钟更新订单
      */
-    @Scheduled(fixedRate = 1000 * 60 * 1)
+//    @Scheduled(fixedRate = 1000 * 60 * 1)
     public void pinganOrderQueryUpdate() {
         logger.info(">>>>>>>>>>>>>>>>>>>>pinganOrderQueryUpdate is start ");
         qzOrderService.pinganOrderQueryUpdate();
@@ -91,7 +91,7 @@ public class OrderTask {
     /**
      * 方法描述:商品发货后7天自动确认收货
      */
-    @Scheduled(fixedRate = 1000 * 60 * 1)
+//    @Scheduled(fixedRate = 1000 * 60 * 1)
     public void shipmentOrderAutoTakeGoods() {
         logger.info(">>>>>>>>>>>>>>>>>>>>shipmentOrderAutoTakeGoods is start ");
         qzOrderService.shipmentOrderAutoTakeGoods();
@@ -101,7 +101,7 @@ public class OrderTask {
     /**
      * 方法描述:确认收货后30天自动确认好评
      */
-    @Scheduled(fixedRate = 1000 * 60 * 1)
+//    @Scheduled(fixedRate = 1000 * 60 * 1)
     public void receiptOrderAutoComment() {
         logger.info(">>>>>>>>>>>>>>>>>>>>receiptOrderAutoComment is start ");
         qzOrderService.receiptOrderAutoComment();
@@ -112,7 +112,7 @@ public class OrderTask {
      * 方法描述:返回海关所需获取的支付相关实时数据
      * 五分钟更新未付款订单
      */
-    @Scheduled(fixedRate = 1000 * 60 * 5)
+//    @Scheduled(fixedRate = 1000 * 60 * 5)
     public void realTimeDataUp() {
         logger.info(">>>>>>>>>>>>>>>>>>>>realTimeDataUp is start ");
         qzOrderService.realTimeDataUp();
@@ -123,7 +123,7 @@ public class OrderTask {
      * 方法描述:用户确认收货后,记录商品分销购买记录
      * 1分钟更新
      */
-    @Scheduled(fixedRate = 1000 * 60 * 1)
+//    @Scheduled(fixedRate = 1000 * 60 * 1)
     public void receiptOrderSaveDistSellStatis() {
         logger.info(">>>>>>>>>>>>>>>>>>>>receiptOrderSaveDistSellStatis is start ");
         qzOrderService.receiptOrderSaveDistSellStatis();
@@ -133,7 +133,7 @@ public class OrderTask {
      * 方法描述:查询渠道推广有效开始时间是否过期,过期则修改结束状态为已结束
      * 1分钟更新
      */
-    @Scheduled(fixedRate = 1000 * 60 * 1)
+//    @Scheduled(fixedRate = 1000 * 60 * 1)
     public void updateQueryStoreProm() {
         logger.info(">>>>>>>>>>>>>>>>>>>>updateQueryStoreProm is start ");
         qzStorePromService.updateQueryStoreProm();
@@ -143,7 +143,7 @@ public class OrderTask {
      * 方法描述:支付成功且是渠道推广订单统计支付数据
      * 1分钟更新
      */
-    @Scheduled(fixedRate = 1000 * 60 * 1)
+//    @Scheduled(fixedRate = 1000 * 60 * 1)
     public void updatePromStatByPaySuccess() {
         logger.info(">>>>>>>>>>>>>>>>>>>>updatePromStatByPaySuccess is start ");
         qzStorePromService.updatePromStatByPaySuccess();
@@ -153,7 +153,7 @@ public class OrderTask {
      * 方法描述:退款成功且是渠道推广订单统计支付数据
      * 1分钟更新
      */
-    @Scheduled(fixedRate = 1000 * 60 * 1)
+//    @Scheduled(fixedRate = 1000 * 60 * 1)
     public void updatePromStatByRefundSuccess() {
         logger.info(">>>>>>>>>>>>>>>>>>>>updatePromStatByRefundSuccess is start ");
         qzStorePromService.updatePromStatByRefundSuccess();
@@ -163,7 +163,7 @@ public class OrderTask {
      * 方法描述:查询优惠券有效时间是否过期,修改过期优惠券数据结束状态为无效,修改过期用户优惠券状态为无效
      * 1分钟更新
      */
-    @Scheduled(fixedRate = 1000 * 60 * 1)
+//    @Scheduled(fixedRate = 1000 * 60 * 1)
     public void updateQueryTicketDiscount() {
         logger.info(">>>>>>>>>>>>>>>>>>>>updateQueryTicketDiscount is start ");
         qzStoreTicketDiscountService.updateQueryTicketDiscount();
@@ -174,7 +174,7 @@ public class OrderTask {
      * 方法描述:支付成功且是门店优惠券活动订单统计支付数据
      * 1分钟更新
      */
-    @Scheduled(fixedRate = 1000 * 60 * 1)
+//    @Scheduled(fixedRate = 1000 * 60 * 1)
     public void updateTopicStatByPaySuccess() {
         logger.info(">>>>>>>>>>>>>>>>>>>>updateTopicStatByPaySuccess is start ");
         qzStoreTopicStatisService.updateTopicStatByPaySuccess();
@@ -185,7 +185,7 @@ public class OrderTask {
      * 方法描述:退款成功且是门店优惠券活动订单统计支付数据
      * 1分钟更新
      */
-    @Scheduled(fixedRate = 1000 * 60 * 1)
+//    @Scheduled(fixedRate = 1000 * 60 * 1)
     public void updateTopicStatByRefundSuccess() {
         logger.info(">>>>>>>>>>>>>>>>>>>>updateTopicStatByRefundSuccess is start ");
         qzStoreTopicStatisService.updateTopicStatByRefundSuccess();
@@ -196,7 +196,7 @@ public class OrderTask {
      * 方法描述:修改过期满减满折数据结束状态为无效,修改未开始且开始时间已小于或等于当前时间的满减满折结束状态为进行中
      * 1分钟更新
      */
-    @Scheduled(fixedRate = 1000 * 60 * 1)
+//    @Scheduled(fixedRate = 1000 * 60 * 1)
     public void updateQueryStoreCampMinus() {
         logger.info(">>>>>>>>>>>>>>>>>>>>updateQueryStoreCampMinus is start ");
         qzStoreCampMinusService.updateQueryStoreCampMinus();
@@ -207,7 +207,7 @@ public class OrderTask {
      * 方法描述:支付成功且是门店促销满减活动订单统计支付数据
      * 1分钟更新
      */
-    @Scheduled(fixedRate = 1000 * 60 * 1)
+//    @Scheduled(fixedRate = 1000 * 60 * 1)
     public void updateCampTopicStatByPaySuccess() {
         logger.info(">>>>>>>>>>>>>>>>>>>>updateCampTopicStatByPaySuccess is start ");
         qzStoreTopicStatisService.updateCampTopicStatByPaySuccess();
@@ -218,7 +218,7 @@ public class OrderTask {
      * 方法描述:退款成功且是门店促销满减活动订单统计支付数据
      * 1分钟更新
      */
-    @Scheduled(fixedRate = 1000 * 60 * 1)
+//    @Scheduled(fixedRate = 1000 * 60 * 1)
     public void updateCampTopicStatByRefundSuccess() {
         logger.info(">>>>>>>>>>>>>>>>>>>>updateCampTopicStatByRefundSuccess is start ");
         qzStoreTopicStatisService.updateCampTopicStatByRefundSuccess();
@@ -231,4 +231,15 @@ public class OrderTask {
         qzOrderService.updateSellVolume();
         logger.info(">>>>>>>>>>>>>>>>>>>>updateSellVolume is end ");
     }*/
+
+    /**
+     * 查询商品库存数量变化后未共享的商品数据,批量修改该商品的门店商品库存信息
+     * 10秒执行一次
+     */
+//    @Scheduled(cron = "0/10 * * * * ?")
+    public void updateProductStoreByGoodsShareStock() {
+        logger.info(">>>>>>>>>>>>>>>>>>>>updateProductStoreByGoodsShareStock is start ");
+        qzOrderService.updateProductStoreByGoodsShareStock();
+        logger.info(">>>>>>>>>>>>>>>>>>>>updateProductStoreByGoodsShareStock is end ");
+    }
 }

+ 91 - 4
kmall-schedule/src/main/java/com/kmall/schedule/service/QzOrderService.java

@@ -301,7 +301,7 @@ public class QzOrderService {
                             refundRaram.put("wechat_refund_status_des", "退款成功");
                             orderRaram.put("payStatus", Dict.payStatus.item_4.getItem());
                             //退款成功释放库存、释放优惠券、释放促销满减
-                             restStockNum(map,"定时任务更新退款成功订单");//库存还原
+                            restStockNum(map,"定时任务更新退款成功订单");//库存还原
                             restUserCoupon(map);// 判断是否使用优惠券,修改为可使用
                             restUserCamp(map);// 判断是否使用促销满减活动,修改为可使用
                         } else if (result.getRefund_status().equalsIgnoreCase("REFUNDCLOSE")) {
@@ -587,7 +587,7 @@ public class QzOrderService {
                         wxOrderQuery(map);
                     }
                 }else{
-                    logger.info(">>>>>>>>>>>>>>>>>>>>refundUpdate 订单编号【"+orderId+"】的支付方式不能为空! ");
+                    logger.info(">>>>>>>>>>>>>>>>>>>>orderQueryUpdate 订单编号【"+orderId+"】的支付方式不能为空! ");
                 }
             }
         } else {
@@ -1240,10 +1240,70 @@ public class QzOrderService {
     }
 
     /**
+     * 查询商品库存数量变化后未共享的商品数据,批量修改该商品的门店商品库存信息
+     */
+    public void updateProductStoreByGoodsShareStock(){
+        logger.info(">>>>>>>>>>>>>>>>>>>>updateProductStoreByGoodsShareStock is start ");
+        logger.info(">>>>>>>>>>>>>>>>>>>>查询商品库存数量变化后未共享的商品数据,批量修改该商品的门店商品库存信息 ");
+
+        // 查询商品库存数量变化后未共享的商品数据
+        List<Map> goodsList = qzOrderMapper.queryGoodsListByIsShareStock();
+        if (null != goodsList && goodsList.size() > 0) {
+            for (Map map : goodsList) {
+                Integer goodsId = MapUtils.getInteger("goodsId", map);
+                Integer goodsNumber = MapUtils.getInteger("goodsNumber", map);
+                String merchSn = MapUtils.getString("merchSn", map);
+
+                List<Map> storeRelaList = qzOrderMapper.queryStoreRelaListByGoodsId(goodsId);
+                for (Map storeRelaMap : storeRelaList) {
+                    Integer storeRelaId = MapUtils.getInteger("storeRelaId", storeRelaMap);
+                    Integer storeId = MapUtils.getInteger("storeId", storeRelaMap);
+                    Integer stockNum = MapUtils.getInteger("stockNum", storeRelaMap);//原有库存
+                    Map param = Maps.newHashMap();
+                    param.put("id", storeRelaId);
+                    param.put("stock_num", goodsNumber);
+                    qzOrderMapper.updateStockNum(param);//修改该商品的门店商品库存信息
+
+                    StoreMngChangeJobEntity storeMngChangeJobEntity = new StoreMngChangeJobEntity();
+                    storeMngChangeJobEntity.setChangeReason("共享库存变更,门店商品库存同步更新");
+                    storeMngChangeJobEntity.setGoodsId(goodsId);
+                    storeMngChangeJobEntity.setStoreId(storeId);
+                    storeMngChangeJobEntity.setMerchSn(merchSn);
+                    storeMngChangeJobEntity.setCreateTime(new Date());
+                    storeMngChangeJobEntity.setModTime(new Date());
+                    storeMngChangeJobEntity.setCreaterSn("定时任务");
+                    storeMngChangeJobEntity.setModerSn("定时任务");
+                    storeMngChangeJobEntity.setIsValid(0);
+                    if(goodsNumber != stockNum) {
+                        if (stockNum > goodsNumber) {
+                            storeMngChangeJobEntity.setStoreChangeNum(stockNum - goodsNumber);//变化数
+                            storeMngChangeJobEntity.setChangeType(Dict.changeType.item_4.getItem());
+                        } else {
+                            storeMngChangeJobEntity.setChangeType(Dict.changeType.item_3.getItem());
+                            storeMngChangeJobEntity.setStoreChangeNum(goodsNumber - stockNum);//变化数
+                        }
+                        storeMngChangeJobEntity.setStoreOriginalNum(stockNum);//原库存数
+                        storeMngChangeJobEntity.setStoreValidNum(goodsNumber);//可用数
+                        qzOrderMapper.saveStoreMngChange(storeMngChangeJobEntity);
+                    }
+                }
+                Map goodsMap = new HashMap();
+                goodsMap.put("goodsId", goodsId);
+                //商品库存数量变化后是否已共享,0:否,1:是(下单、退款、取消订单触发)
+                goodsMap.put("isGoodsShareStock", Dict.isGoodsShareStock.item_1.getItem());
+                qzOrderMapper.updateByGoodsShareStock(goodsMap);
+            }
+        }else{
+            logger.info(">>>>>>>>>>>>>>>>>>>>未查到商品库存数量变化后未共享的商品数据");
+        }
+        logger.info(">>>>>>>>>>>>>>>>>>>>updateProductStoreByGoodsShareStock is end ");
+
+    }
+
+    /**
      * 查询订单中支付成功的订单详情,更新详情中商品的销量信息
      */
     public void updateSellVolume(){
-
         logger.info(">>>>>>>>>>>>>>>>>>>>updateSellVolume is start ");
         logger.info(">>>>>>>>>>>>>>>>>>>>查询订单中支付成功的订单详情,更新详情中商品的销量信息 ");
 
@@ -1303,7 +1363,19 @@ public class QzOrderService {
     private void restStockNum(Map map, String changeReason){
         String isStockShare = getIsStockShareByGoodsVo(map);
         resetGoodsStockNum(map, changeReason);
-        resetStoreStockNumAndSellVolume(map, changeReason);
+        String goodsBizType = MapUtils.getString("goods_biz_type", map);
+        Integer goodsId = MapUtils.getInteger("goods_id", map);
+        //该商品所属第三方商户不是共享库存
+        if(isStockShare.equalsIgnoreCase(Dict.isStockShare.item_0.getItem())) {
+            resetStoreStockNumAndSellVolume(map, changeReason);//还原门店商品库存
+        }else{
+            //该商品所属第三方商户是共享库存,但商品业务类型不是00保税备货
+            if(!goodsBizType.equalsIgnoreCase(Dict.orderBizType.item_00.getItem())){
+                resetStoreStockNumAndSellVolume(map, changeReason);//还原门店商品库存
+            }
+        }
+        //该商品所属第三方商户为共享库存,且是保税备货商品,取消订单时改变
+        updateGoodsByIsShareStock(isStockShare, goodsBizType, goodsId);
     }
 
     /**
@@ -1377,6 +1449,21 @@ public class QzOrderService {
         storeMngChangeJobEntity.setIsValid(0);
         qzOrderMapper.saveStoreMngChange(storeMngChangeJobEntity);
     }
+    /**
+     * 更新商品库存数量变化后是否已共享为0“未共享”
+     * @param isStockShare
+     */
+    private void updateGoodsByIsShareStock(String isStockShare, String goodsBizType, Integer goodsId){
+        //该商品所属第三方商户为共享库存,且是保税备货商品
+        if(isStockShare.equalsIgnoreCase(Dict.isStockShare.item_1.getItem())
+                && goodsBizType.equalsIgnoreCase(Dict.orderBizType.item_00.getItem())) {
+            Map goodsMap = new HashMap();
+            goodsMap.put("goodsId", goodsId);
+            //商品库存数量变化后是否已共享,0:否,1:是(下单、退款、取消订单触发)
+            goodsMap.put("isGoodsShareStock", Dict.isGoodsShareStock.item_0.getItem());
+            qzOrderMapper.updateByGoodsShareStock(goodsMap);
+        }
+    }
 
     private String getIsStockShareByGoodsVo(Map map){
         String isStockShare = "";

+ 20 - 4
kmall-schedule/src/main/resources/mybatis/mapper/QzOrderMapper.xml

@@ -34,7 +34,7 @@
         g.sell_volume 'goods_sell_volume',
         c.sell_volume 'store_sell_volume',
         a.id 'orderId',
-        mb.is_stock_share,
+        mb.is_stock_share 'isStockShare',
         mb.third_party_merch_code,
         mb.is_supplier_goods 'isSupplierGoods',
         mb2.third_party_merch_code 'supplierThirdMerchCode',
@@ -173,7 +173,7 @@
         g.goods_biz_type,
         g.sell_volume 'goods_sell_volume',
         c.sell_volume 'store_sell_volume',
-        mb.is_stock_share,
+        mb.is_stock_share 'isStockShare',
         mb.third_party_merch_code,
         mb.is_supplier_goods 'isSupplierGoods',
         mb2.third_party_merch_code 'supplierThirdMerchCode',
@@ -216,7 +216,7 @@
         mb.third_party_merch_code,
         g.sell_volume 'goods_sell_volume',
         c.sell_volume 'store_sell_volume',
-        mb.is_stock_share,
+        mb.is_stock_share 'isStockShare',
         mb.third_party_merch_code,
         mb.is_supplier_goods 'isSupplierGoods',
         mb2.third_party_merch_code 'supplierThirdMerchCode',
@@ -263,7 +263,7 @@
         mb.third_party_merch_code,
         g.sell_volume 'goods_sell_volume',
         c.sell_volume 'store_sell_volume',
-        mb.is_stock_share,
+        mb.is_stock_share 'isStockShare',
         mb.third_party_merch_code,
         mb.is_supplier_goods 'isSupplierGoods',
         mb2.third_party_merch_code 'supplierThirdMerchCode',
@@ -572,4 +572,20 @@
             AND p.goods_id = gs.id where o.pay_status = 2
             AND is_onffline_order = 0 and p.id= #{storeRelaId}
     </select>
+
+    <select id="queryGoodsListByIsShareStock" resultType="map">
+        SELECT g.id 'goodsId',g.goods_number 'goodsNumber',g.merch_sn 'merchSn' FROM mall_goods g where g.is_goods_share_stock = 0
+    </select>
+
+    <select id="queryStoreRelaListByGoodsId" resultType="map">
+        SELECT p.id 'storeRelaId',p.stock_num 'stockNum',p.store_id 'storeId' FROM mall_product_store_rela p where p.goods_id = #{goodsId}
+    </select>
+
+    <update id="updateByGoodsShareStock" parameterType="map">
+        update mall_goods
+        <set>
+            is_goods_share_stock = #{isGoodsShareStock}
+        </set>
+        where id = #{goodsId}
+    </update>
 </mapper>

+ 2 - 1
wx-mall/app.json

@@ -54,7 +54,8 @@
     "pages/ucenter/ticketDiscountGoods/ticketDiscountGoods",
     "pages/ucenter/couponDetail/couponDetail",
     "pages/ucenter/couponTickInfo/couponTickInfo",
-    "pages/ucenter/campMinus/campMinus"
+    "pages/ucenter/campMinus/campMinus",
+    "pages/categoryBrand/categoryBrand"
     
   ],
   "window": {

+ 5 - 5
wx-mall/app.wxss

@@ -77,10 +77,10 @@ view, text {
 }
 
 .list-cell {
-  padding: 10px 15px;
+  padding: 7px 15px;
   position: relative;
   display: flex;
-  align-items: center;
+  /* align-items: center; */
 }
 
 .list-cell:first-of-type::before {
@@ -202,13 +202,13 @@ view, text {
 
 .cart-panel {
   display: flex;
-  height: 80rpx;
+  height: 70rpx;
   width: 700rpx;
-  line-height: 80rpx;
+  line-height: 70rpx;
   border-radius: 40rpx;
   background-color: #4d4d4e;
   position: fixed;
-  bottom: 8rpx;
+  bottom: 1rpx;
   z-index: 499;
   left: 50%;
   margin-left: -350rpx;

Some files were not shown because too many files changed in this diff