1
0
Prechádzať zdrojové kódy

Merge branch 'master' of lhm/kmall-haikong into master

lhm 3 rokov pred
rodič
commit
be13851838
30 zmenil súbory, kde vykonal 725 pridanie a 109 odobranie
  1. 7 0
      kmall-admin/src/main/java/com/kmall/admin/dao/GoodsDao.java
  2. 4 0
      kmall-admin/src/main/java/com/kmall/admin/dao/ProductStoreRelaDao.java
  3. 18 9
      kmall-admin/src/main/java/com/kmall/admin/dto/StockChangeRecordDto.java
  4. 31 19
      kmall-admin/src/main/java/com/kmall/admin/entity/haikong/StockChangeRecordEntity.java
  5. 4 0
      kmall-admin/src/main/java/com/kmall/admin/haikong/constant/Constants.java
  6. 15 0
      kmall-admin/src/main/java/com/kmall/admin/service/GoodsService.java
  7. 2 0
      kmall-admin/src/main/java/com/kmall/admin/service/MngChangeService.java
  8. 13 0
      kmall-admin/src/main/java/com/kmall/admin/service/ProductStoreRelaService.java
  9. 2 0
      kmall-admin/src/main/java/com/kmall/admin/service/StoreMngChangeService.java
  10. 10 2
      kmall-admin/src/main/java/com/kmall/admin/service/haikong/StockChangeRecordService.java
  11. 79 0
      kmall-admin/src/main/java/com/kmall/admin/service/impl/GoodsServiceImpl.java
  12. 5 0
      kmall-admin/src/main/java/com/kmall/admin/service/impl/MngChangeServiceImpl.java
  13. 9 6
      kmall-admin/src/main/java/com/kmall/admin/service/impl/OrderServiceImpl.java
  14. 80 0
      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/StoreMngChangeServiceImpl.java
  16. 69 7
      kmall-admin/src/main/java/com/kmall/admin/service/impl/haikong/StockChangeRecordServiceImpl.java
  17. 7 6
      kmall-admin/src/main/resources/XmlTemplate/StockChangeRecordDtoList.xml
  18. 37 0
      kmall-admin/src/main/resources/mybatis/mapper/GoodsDao.xml
  19. 27 0
      kmall-admin/src/main/resources/mybatis/mapper/ProductStoreRelaDao.xml
  20. 40 0
      kmall-admin/src/main/resources/mybatis/mapper/StoreMngChangeDao.xml
  21. 28 26
      kmall-admin/src/main/resources/mybatis/mapper/haikong/StockChangeRecordDao.xml
  22. 4 1
      kmall-admin/src/main/webapp/WEB-INF/page/mk/mkactivitiespromotion.html
  23. 34 0
      kmall-admin/src/main/webapp/WEB-INF/page/sale/sale.html
  24. 40 13
      kmall-admin/src/main/webapp/WEB-INF/page/shop/stockchangerecord.html
  25. 75 2
      kmall-admin/src/main/webapp/js/sale/sale.js
  26. 4 0
      kmall-admin/src/main/webapp/js/shop/mngchange.js
  27. 67 16
      kmall-admin/src/main/webapp/js/shop/stockchangerecord.js
  28. 4 0
      kmall-admin/src/main/webapp/js/shop/storemngchange.js
  29. BIN
      kmall-admin/src/main/webapp/statics/file/stock_change_record.xlsx
  30. 5 2
      kmall-common/src/main/java/com/kmall/common/constant/Dict.java

+ 7 - 0
kmall-admin/src/main/java/com/kmall/admin/dao/GoodsDao.java

@@ -3,6 +3,7 @@ package com.kmall.admin.dao;
 import com.kmall.admin.dto.GoodsDetailsDto;
 import com.kmall.admin.dto.GoodsPanoramaDto;
 import com.kmall.admin.entity.GoodsEntity;
+import com.kmall.admin.entity.haikong.StockChangeRecordEntity;
 import com.kmall.admin.haikong.vo.QueryGoodsVO;
 import com.kmall.api.entity.exportpdf.PDFGoodsDto;
 import com.kmall.manager.dao.BaseDao;
@@ -28,6 +29,8 @@ public interface GoodsDao extends BaseDao<GoodsEntity> {
 
     GoodsEntity queryObjectByProdBarcodeAndBizType(@Param("prodBarcode")String prodBarcode, @Param("storeId")Integer storeId);
 
+    GoodsEntity queryObjectByProdBarcodeAndStoreId(@Param("prodBarcode")String prodBarcode, @Param("storeId")Integer storeId);
+
     GoodsEntity queryObjectByProdBarcodeAndStore(@Param("prodBarcode")String prodBarcode, @Param("storeId")Integer storeId);
 
     GoodsDetailsDto queryGoodsDetailsByProdBarcode(@Param("prodBarcode") String prodBarcode, @Param("storeId")String storeId, @Param("sku")String sku);
@@ -131,4 +134,8 @@ public interface GoodsDao extends BaseDao<GoodsEntity> {
      * @return
      */
     int updateStockNumberByProductCodeAndSku(GoodsEntity goodsEntity);
+
+    void updateStockNumberByOutbound(List<StockChangeRecordEntity> outboundList);
+
+    void updateStockNumberByStorage(List<StockChangeRecordEntity> storageList);
 }

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

@@ -4,6 +4,7 @@ import com.kmall.admin.dto.Mall2RulesDto;
 import com.kmall.admin.entity.ProductStoreRelaEntity;
 import com.kmall.admin.entity.StoreEntity;
 import com.kmall.admin.entity.StoreTransferInventoryOrderDetailEntity;
+import com.kmall.admin.entity.haikong.StockChangeRecordEntity;
 import com.kmall.admin.entity.vip.Mall2DetilEntity;
 import org.apache.ibatis.annotations.Param;
 import com.kmall.manager.dao.BaseDao;
@@ -119,4 +120,7 @@ public interface ProductStoreRelaDao extends BaseDao<ProductStoreRelaEntity> {
 
     ProductStoreRelaEntity queryByGoodsIdAndStoreIdHkMall(@Param("storeId") Long storeId, @Param("goodsId") Long goodsId);
 
+    void updateStockNumberByOutbound(List<StockChangeRecordEntity> outboundList);
+
+    void updateStockNumberByStorage(List<StockChangeRecordEntity> storageList);
 }

+ 18 - 9
kmall-admin/src/main/java/com/kmall/admin/dto/StockChangeRecordDto.java

@@ -12,7 +12,8 @@ public class StockChangeRecordDto implements Serializable {
 
     private Integer storeId;
 
-    private Integer warehouseSn;
+    private String merchSn;
+    private String thirdMerchSn;
 
     private String sku;
 
@@ -30,14 +31,6 @@ public class StockChangeRecordDto implements Serializable {
         this.storeId = storeId;
     }
 
-    public Integer getWarehouseSn() {
-        return warehouseSn;
-    }
-
-    public void setWarehouseSn(Integer warehouseSn) {
-        this.warehouseSn = warehouseSn;
-    }
-
     public String getSku() {
         return sku;
     }
@@ -69,4 +62,20 @@ public class StockChangeRecordDto implements Serializable {
     public void setRemark(String remark) {
         this.remark = remark;
     }
+
+    public String getMerchSn() {
+        return merchSn;
+    }
+
+    public void setMerchSn(String merchSn) {
+        this.merchSn = merchSn;
+    }
+
+    public String getThirdMerchSn() {
+        return thirdMerchSn;
+    }
+
+    public void setThirdMerchSn(String thirdMerchSn) {
+        this.thirdMerchSn = thirdMerchSn;
+    }
 }

+ 31 - 19
kmall-admin/src/main/java/com/kmall/admin/entity/haikong/StockChangeRecordEntity.java

@@ -24,16 +24,15 @@ public class StockChangeRecordEntity implements Serializable {
      * 门店id
      */
     private Integer storeId;
-    /**
-     * 仓库编号
-     */
-    private Integer warehouseSn;
+    private String merchSn;
+    private String thirdMerchSn;
+    private String orderSn;
     /**
      * sku
      */
     private String sku;
     /**
-     * 记录类型,0:出库 1:入库
+     * 记录类型,0:出库 1:入库 2:销售出库
      */
     private String type;
     /**
@@ -82,19 +81,6 @@ public class StockChangeRecordEntity implements Serializable {
         return storeId;
     }
     /**
-     * 设置:仓库编号
-     */
-    public void setWarehouseSn(Integer warehouseSn) {
-        this.warehouseSn = warehouseSn;
-    }
-
-    /**
-     * 获取:仓库编号
-     */
-    public Integer getWarehouseSn() {
-        return warehouseSn;
-    }
-    /**
      * 设置:sku
      */
     public void setSku(String sku) {
@@ -173,12 +159,38 @@ public class StockChangeRecordEntity implements Serializable {
         return modifyTime;
     }
 
+    public String getMerchSn() {
+        return merchSn;
+    }
+
+    public void setMerchSn(String merchSn) {
+        this.merchSn = merchSn;
+    }
+
+    public String getThirdMerchSn() {
+        return thirdMerchSn;
+    }
+
+    public void setThirdMerchSn(String thirdMerchSn) {
+        this.thirdMerchSn = thirdMerchSn;
+    }
+
+    public String getOrderSn() {
+        return orderSn;
+    }
+
+    public void setOrderSn(String orderSn) {
+        this.orderSn = orderSn;
+    }
+
     @Override
     public String toString() {
         return "StockChangeRecordEntity{" +
                 "id=" + id +
                 ", storeId=" + storeId +
-                ", warehouseSn=" + warehouseSn +
+                ", merchSn='" + merchSn + '\'' +
+                ", thirdMerchSn='" + thirdMerchSn + '\'' +
+                ", orderSn='" + orderSn + '\'' +
                 ", sku='" + sku + '\'' +
                 ", type='" + type + '\'' +
                 ", number=" + number +

+ 4 - 0
kmall-admin/src/main/java/com/kmall/admin/haikong/constant/Constants.java

@@ -343,6 +343,10 @@ public class Constants {
          * 入库
          */
         item_1("1", "入库"),
+        /**
+         * 销售出库
+         */
+        item_2("2", "销售出库"),
         ;
 
         private final String type;

+ 15 - 0
kmall-admin/src/main/java/com/kmall/admin/service/GoodsService.java

@@ -5,6 +5,7 @@ import com.kmall.admin.dto.GoodsDto;
 import com.kmall.admin.dto.GoodsPanoramaDto;
 import com.kmall.admin.entity.GoodsEntity;
 import com.kmall.admin.entity.TaxErrorRecordEntity;
+import com.kmall.admin.entity.haikong.StockChangeRecordEntity;
 import com.kmall.admin.fromcomm.entity.SysUserEntity;
 import com.kmall.admin.haikong.vo.QueryGoodsVO;
 import com.kmall.api.entity.exportpdf.PDFGoodsDto;
@@ -30,6 +31,8 @@ public interface GoodsService {
     GoodsEntity queryObject(Integer id);
 
     GoodsEntity queryObjectByProdBarcodeAndBizType(String prodBarcode, Integer storeId);
+
+    GoodsEntity queryObjectByProdBarcodeAndStoreId(String prodBarcode, Integer storeId);
     /**
      * 分页查询
      *
@@ -252,4 +255,16 @@ public interface GoodsService {
     int updateStockNumberByProductCodeAndSku(GoodsEntity goodsEntity);
 
     void validateWarehouseStock(GoodsDetailsDto goods, String prodBarcode, String sku, String storeId);
+
+    /**
+     * 出库单更新库存(扣减)
+     * @param outboundList  出库sku
+     */
+    void updateStockNumberByOutbound(List<StockChangeRecordEntity> outboundList);
+
+    /**
+     * 入库单更新库存(增加)
+     * @param storageList   入库sku
+     */
+    void updateStockNumberByStorage(List<StockChangeRecordEntity> storageList);
 }

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

@@ -69,4 +69,6 @@ public interface MngChangeService {
      * @return 删除条数
      */
     int deleteBatch(Integer[] ids);
+
+    void saveBatch(List<MngChangeEntity> changeEntityList);
 }

+ 13 - 0
kmall-admin/src/main/java/com/kmall/admin/service/ProductStoreRelaService.java

@@ -3,6 +3,7 @@ package com.kmall.admin.service;
 import com.kmall.admin.dto.StoreGoodsDto;
 import com.kmall.admin.entity.ProductStoreRelaEntity;
 import com.kmall.admin.entity.StoreTransferInventoryOrderDetailEntity;
+import com.kmall.admin.entity.haikong.StockChangeRecordEntity;
 
 import java.util.List;
 import java.util.Map;
@@ -163,4 +164,16 @@ public interface ProductStoreRelaService {
      * @param productStoreRelaEntity    门店库存实体
      */
     void updateStockNumByStoreIdAndSku(ProductStoreRelaEntity productStoreRelaEntity);
+
+    /**
+     * 出库单更新库存(扣减)
+     * @param outboundList  出库sku
+     */
+    void updateStockNumberByOutbound(List<StockChangeRecordEntity> outboundList);
+
+    /**
+     * 入库单更新库存(增加)
+     * @param storageList   入库sku
+     */
+    void updateStockNumberByStorage(List<StockChangeRecordEntity> storageList);
 }

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

@@ -69,4 +69,6 @@ public interface StoreMngChangeService {
      * @return 删除条数
      */
     int deleteBatch(Integer[] ids);
+
+    void saveBatch(List<StoreMngChangeEntity> mngChangeEntityList);
 }

+ 10 - 2
kmall-admin/src/main/java/com/kmall/admin/service/haikong/StockChangeRecordService.java

@@ -41,7 +41,7 @@ public interface StockChangeRecordService {
     int queryTotal(Map<String, Object> map);
 
     /**
-     * 保存实体
+     * 保存实体,修改库存
      *
      * @param stockChangeRecord 实体
      * @return 保存条数
@@ -49,7 +49,7 @@ public interface StockChangeRecordService {
     int save(StockChangeRecordEntity stockChangeRecord);
 
     /**
-     * 根据主键更新实体
+     * 根据主键更新实体,修改库存
      *
      * @param stockChangeRecord 实体
      * @return 更新条数
@@ -74,5 +74,13 @@ public interface StockChangeRecordService {
 
     void uploadExcel(List<StockChangeRecordDto> stockChangeRecordDtos);
 
+    /**
+     * 导入,需要修改库存
+     */
     void saveBatch(List<StockChangeRecordEntity> stockChangeRecordEntities);
+
+    /**
+     * 订单提交时进行保存,不修改库存
+     */
+    void saveBatchByOrderSubmit(List<StockChangeRecordEntity> stockChangeRecordEntities);
 }

+ 79 - 0
kmall-admin/src/main/java/com/kmall/admin/service/impl/GoodsServiceImpl.java

@@ -10,6 +10,7 @@ import com.kmall.admin.dto.GoodsDetailsDto;
 import com.kmall.admin.dto.GoodsDto;
 import com.kmall.admin.dto.GoodsPanoramaDto;
 import com.kmall.admin.entity.*;
+import com.kmall.admin.entity.haikong.StockChangeRecordEntity;
 import com.kmall.admin.entity.kmall2eccs.KtoEccsEntity;
 import com.kmall.admin.entity.mk.MkActivitiesEntity;
 import com.kmall.admin.entity.shop.ShopErrorPriceRecordEntity;
@@ -131,6 +132,8 @@ public class GoodsServiceImpl implements GoodsService {
     private MkActivitiesHalfPriceService halfPriceService; // 第二份半价
     @Autowired
     private BrandService brandService;
+    @Autowired
+    private MngChangeService mngChangeService;
 
     @Autowired
     private ShopErrorPriceRecordService shopErrorPriceRecordService;
@@ -165,6 +168,12 @@ public class GoodsServiceImpl implements GoodsService {
         GoodsEntity entity = goodsDao.queryObjectByProdBarcodeAndBizType(prodBarcode, storeId);
         return entity;
     }
+
+    @Override
+    public GoodsEntity queryObjectByProdBarcodeAndStoreId(String prodBarcode, Integer storeId) {
+        return goodsDao.queryObjectByProdBarcodeAndStoreId(prodBarcode, storeId);
+    }
+
     @Override
     public List<GoodsEntity> queryList(Map<String, Object> map) {
         return goodsDao.queryList(map);
@@ -2142,4 +2151,74 @@ public class GoodsServiceImpl implements GoodsService {
     public int updateStockNumberByProductCodeAndSku(GoodsEntity goodsEntity) {
         return goodsDao.updateStockNumberByProductCodeAndSku(goodsEntity);
     }
+
+    /**
+     * 出库单更新库存(扣减)
+     *
+     * @param outboundList 出库sku
+     */
+    @Override
+    public void updateStockNumberByOutbound(List<StockChangeRecordEntity> outboundList) {
+
+        List<MngChangeEntity> changeEntityList = outboundList.stream().map(entity -> {
+            MngChangeEntity mngChangeEntity = new MngChangeEntity();
+            SysUserEntity user = ShiroUtils.getUserEntity();
+            Date date = new Date();
+            Integer number = entity.getNumber();
+            GoodsEntity goodsEntity = queryByBarcode(entity.getSku());
+
+            mngChangeEntity.setChangeType(Dict.changeType.item_5.getItem());
+            mngChangeEntity.setGoodsId(goodsEntity.getId().intValue());
+            mngChangeEntity.setChangeNum(number);
+            mngChangeEntity.setOriginalNum(goodsEntity.getGoodsNumber());
+            mngChangeEntity.setValidNum(goodsEntity.getGoodsNumber() - number);
+            mngChangeEntity.setChangeReason(Dict.changeType.item_5.getItemName());
+            mngChangeEntity.setCreateTime(date);
+            mngChangeEntity.setModTime(date);
+            mngChangeEntity.setCreaterSn(user.getUsername());
+            mngChangeEntity.setModerSn(user.getUsername());
+            mngChangeEntity.setIsValid(0);
+            mngChangeEntity.setMerchSn(goodsEntity.getMerchSn());
+            mngChangeEntity.setThirdPartyMerchCode(goodsEntity.getThirdPartyMerchCode());
+
+            return mngChangeEntity;
+        }).collect(Collectors.toList());
+        mngChangeService.saveBatch(changeEntityList);
+        goodsDao.updateStockNumberByOutbound(outboundList);
+    }
+
+    /**
+     * 入库单更新库存(增加)
+     *
+     * @param storageList 入库sku
+     */
+    @Override
+    public void updateStockNumberByStorage(List<StockChangeRecordEntity> storageList) {
+
+        List<MngChangeEntity> changeEntityList = storageList.stream().map(entity -> {
+            MngChangeEntity mngChangeEntity = new MngChangeEntity();
+            SysUserEntity user = ShiroUtils.getUserEntity();
+            Date date = new Date();
+            Integer number = entity.getNumber();
+            GoodsEntity goodsEntity = queryByBarcode(entity.getSku());
+
+            mngChangeEntity.setChangeType(Dict.changeType.item_6.getItem());
+            mngChangeEntity.setGoodsId(goodsEntity.getId().intValue());
+            mngChangeEntity.setChangeNum(number);
+            mngChangeEntity.setOriginalNum(goodsEntity.getGoodsNumber());
+            mngChangeEntity.setValidNum(goodsEntity.getGoodsNumber() + number);
+            mngChangeEntity.setChangeReason(Dict.changeType.item_6.getItemName());
+            mngChangeEntity.setCreateTime(date);
+            mngChangeEntity.setModTime(date);
+            mngChangeEntity.setCreaterSn(user.getUsername());
+            mngChangeEntity.setModerSn(user.getUsername());
+            mngChangeEntity.setIsValid(0);
+            mngChangeEntity.setMerchSn(goodsEntity.getMerchSn());
+            mngChangeEntity.setThirdPartyMerchCode(goodsEntity.getThirdPartyMerchCode());
+
+            return mngChangeEntity;
+        }).collect(Collectors.toList());
+        mngChangeService.saveBatch(changeEntityList);
+        goodsDao.updateStockNumberByStorage(storageList);
+    }
 }

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

@@ -55,4 +55,9 @@ public class MngChangeServiceImpl implements MngChangeService {
     public int deleteBatch(Integer[]ids) {
         return mngChangeDao.deleteBatch(ids);
     }
+
+    @Override
+    public void saveBatch(List<MngChangeEntity> changeEntityList) {
+        mngChangeDao.saveBatch(changeEntityList);
+    }
 }

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

@@ -2215,17 +2215,16 @@ public class OrderServiceImpl implements OrderService {
 
                 StockChangeRecordEntity stockChangeRecordEntity = new StockChangeRecordEntity();
                 stockChangeRecordEntity.setNumber(sellVolume);
-                stockChangeRecordEntity.setWarehouseSn(Integer.parseInt(haiKongProperties.getWareCode()));
+                stockChangeRecordEntity.setMerchSn(user.getMerchSn());
+                stockChangeRecordEntity.setThirdMerchSn(user.getThirdPartyMerchCode());
                 stockChangeRecordEntity.setRemark("销售出库");
                 stockChangeRecordEntity.setSku(queryGoodsVo.getProdBarcode());
                 stockChangeRecordEntity.setStoreId(storeId);
-                stockChangeRecordEntity.setType(Constants.StockChangeType.item_0.getType());
+                stockChangeRecordEntity.setType(Constants.StockChangeType.item_2.getType());
                 stockChangeRecordEntities.add(stockChangeRecordEntity);
 
                 queryGoodsVOList.add(queryGoodsVo);
             });
-
-            stockChangeRecordService.saveBatch(stockChangeRecordEntities);
             // 将在循环中查询数据库改为一次性查询
             goodsEntityList = goodsService.queryGoodsStockByQueryGoodsVoList(queryGoodsVOList);
             goodsEntityMap = goodsEntityList.stream().collect(Collectors.toMap(GoodsEntity::getSku, Function.identity(), (k1, k2) -> k2));
@@ -2330,8 +2329,6 @@ public class OrderServiceImpl implements OrderService {
             listUtils.copyList(goodsEntityList, queryGoodsVOList);
 
             //生成商户订单号
-            SimpleDateFormat format = new SimpleDateFormat("yyyyMMdd");
-//            String orderSn = "ZMHK" + format.format(new Date()) + CommonUtil.generateOrderNumber();
             Snowflake snowflake = IdUtil.createSnowflake(14, 14);
             String orderSn = "8" + snowflake.nextIdStr().substring(6);
             // 检查库存和更新库存
@@ -2546,6 +2543,12 @@ public class OrderServiceImpl implements OrderService {
             // 批量保存订单详情
             orderGoodsService.saveBatchOrderDetail(orderGoodsVoList);
 
+            stockChangeRecordEntities.forEach(stockChangeRecordEntity -> {
+                stockChangeRecordEntity.setOrderSn(orderSn);
+            });
+
+            stockChangeRecordService.saveBatchByOrderSubmit(stockChangeRecordEntities);
+
             //清空预订单商品临时表
             Map orderInfoMap = Maps.newHashMap();
             orderInfoMap.put("orderInfo", order);

+ 80 - 0
kmall-admin/src/main/java/com/kmall/admin/service/impl/ProductStoreRelaServiceImpl.java

@@ -6,10 +6,13 @@ import com.kmall.admin.dao.*;
 import com.kmall.admin.dao.mk.dist.MkDistSellAllocationDao;
 import com.kmall.admin.dto.StoreGoodsDto;
 import com.kmall.admin.entity.*;
+import com.kmall.admin.entity.haikong.StockChangeRecordEntity;
 import com.kmall.admin.entity.mk.dist.MkDistSellAllocationEntity;
 import com.kmall.admin.fromcomm.entity.SysUserEntity;
 import com.kmall.admin.service.BrandService;
+import com.kmall.admin.service.GoodsService;
 import com.kmall.admin.service.ProductStoreRelaService;
+import com.kmall.admin.service.StoreMngChangeService;
 import com.kmall.admin.service.kmall2eccs.KtoEccsService;
 import com.kmall.admin.utils.ShiroUtils;
 import com.kmall.api.util.StockUtil;
@@ -23,6 +26,7 @@ import org.springframework.transaction.annotation.Transactional;
 
 import java.math.BigDecimal;
 import java.util.*;
+import java.util.stream.Collectors;
 
 /**
  * Service实现类
@@ -75,6 +79,12 @@ public class ProductStoreRelaServiceImpl implements ProductStoreRelaService {
     private GoodsBatchDao goodsBatchDao;
 
     @Autowired
+    private StoreMngChangeService storeMngChangeService;
+
+    @Autowired
+    private GoodsService goodsService;
+
+    @Autowired
     private KtoEccsService ktoEccsService;
 
     @Override
@@ -1166,4 +1176,74 @@ public class ProductStoreRelaServiceImpl implements ProductStoreRelaService {
     public void updateStockNumByStoreIdAndSku(ProductStoreRelaEntity productStoreRelaEntity) {
         productStoreRelaDao.updateStockNumByStoreIdAndSku(productStoreRelaEntity);
     }
+
+    /**
+     * 出库单更新库存(扣减)
+     *
+     * @param outboundList 出库sku
+     */
+    @Override
+    public void updateStockNumberByOutbound(List<StockChangeRecordEntity> outboundList) {
+        List<StoreMngChangeEntity> mngChangeEntityList = outboundList.stream().map(entity -> {
+            StoreMngChangeEntity storeMngChangeEntity = new StoreMngChangeEntity();
+            String sku = entity.getSku();
+            Integer number = entity.getNumber();
+            Integer storeId = entity.getStoreId();
+            Date date = new Date();
+            SysUserEntity userEntity = ShiroUtils.getUserEntity();
+            GoodsEntity goodsEntity = goodsService.queryObjectByProdBarcodeAndStoreId(sku, storeId);
+            storeMngChangeEntity.setChangeReason("出库单");
+            storeMngChangeEntity.setChangeType(Dict.changeType.item_5.getItem());
+            storeMngChangeEntity.setStoreChangeNum(number);
+            storeMngChangeEntity.setGoodsId(goodsEntity.getId().intValue());
+            storeMngChangeEntity.setGoodsName(sku);
+            storeMngChangeEntity.setStoreId(storeId);
+            storeMngChangeEntity.setStoreOriginalNum(goodsEntity.getStockNum());
+            storeMngChangeEntity.setStoreName(goodsEntity.getStoreName());
+            storeMngChangeEntity.setStoreValidNum(goodsEntity.getStockNum() - number);
+            storeMngChangeEntity.setIsValid(0);
+            storeMngChangeEntity.setModTime(date);
+            storeMngChangeEntity.setCreateTime(date);
+            storeMngChangeEntity.setCreaterSn(userEntity.getUsername());
+            storeMngChangeEntity.setModerSn(userEntity.getUsername());
+            return storeMngChangeEntity;
+        }).collect(Collectors.toList());
+        storeMngChangeService.saveBatch(mngChangeEntityList);
+        productStoreRelaDao.updateStockNumberByOutbound(outboundList);
+    }
+
+    /**
+     * 入库单更新库存(增加)
+     *
+     * @param storageList 入库sku
+     */
+    @Override
+    public void updateStockNumberByStorage(List<StockChangeRecordEntity> storageList) {
+        List<StoreMngChangeEntity> mngChangeEntityList = storageList.stream().map(entity -> {
+            StoreMngChangeEntity storeMngChangeEntity = new StoreMngChangeEntity();
+            String sku = entity.getSku();
+            Integer number = entity.getNumber();
+            Integer storeId = entity.getStoreId();
+            Date date = new Date();
+            SysUserEntity userEntity = ShiroUtils.getUserEntity();
+            GoodsEntity goodsEntity = goodsService.queryObjectByProdBarcodeAndStoreId(sku, storeId);
+            storeMngChangeEntity.setChangeReason("入库单");
+            storeMngChangeEntity.setChangeType(Dict.changeType.item_6.getItem());
+            storeMngChangeEntity.setStoreChangeNum(number);
+            storeMngChangeEntity.setGoodsId(goodsEntity.getId().intValue());
+            storeMngChangeEntity.setGoodsName(sku);
+            storeMngChangeEntity.setStoreId(storeId);
+            storeMngChangeEntity.setStoreOriginalNum(goodsEntity.getStockNum());
+            storeMngChangeEntity.setStoreName(goodsEntity.getStoreName());
+            storeMngChangeEntity.setStoreValidNum(goodsEntity.getStockNum() + number);
+            storeMngChangeEntity.setIsValid(0);
+            storeMngChangeEntity.setModTime(date);
+            storeMngChangeEntity.setCreateTime(date);
+            storeMngChangeEntity.setCreaterSn(userEntity.getUsername());
+            storeMngChangeEntity.setModerSn(userEntity.getUsername());
+            return storeMngChangeEntity;
+        }).collect(Collectors.toList());
+        storeMngChangeService.saveBatch(mngChangeEntityList);
+        productStoreRelaDao.updateStockNumberByStorage(storageList);
+    }
 }

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

@@ -55,4 +55,9 @@ public class StoreMngChangeServiceImpl implements StoreMngChangeService {
     public int deleteBatch(Integer[]ids) {
         return storeMngChangeDao.deleteBatch(ids);
     }
+
+    @Override
+    public void saveBatch(List<StoreMngChangeEntity> mngChangeEntityList) {
+        storeMngChangeDao.saveBatch(mngChangeEntityList);
+    }
 }

+ 69 - 7
kmall-admin/src/main/java/com/kmall/admin/service/impl/haikong/StockChangeRecordServiceImpl.java

@@ -2,12 +2,14 @@ package com.kmall.admin.service.impl.haikong;
 
 import com.google.common.collect.ImmutableBiMap;
 import com.kmall.admin.dao.haikong.StockChangeRecordDao;
-import com.kmall.admin.dto.ScoreReductionDTO;
 import com.kmall.admin.dto.StockChangeRecordDto;
+import com.kmall.admin.entity.GoodsEntity;
 import com.kmall.admin.entity.haikong.StockChangeRecordEntity;
-import com.kmall.admin.entity.mk.MkActivitiesScoreEntity;
+import com.kmall.admin.haikong.constant.Constants;
+import com.kmall.admin.service.GoodsService;
+import com.kmall.admin.service.ProductStoreRelaService;
 import com.kmall.admin.service.haikong.StockChangeRecordService;
-import com.kmall.admin.service.mk.MkActivitiesScoreService;
+import com.kmall.common.constant.Dict;
 import com.kmall.common.utils.MapBeanUtil;
 import com.kmall.common.utils.R;
 import com.kmall.common.utils.RRException;
@@ -20,7 +22,6 @@ import org.springframework.transaction.annotation.Transactional;
 import org.springframework.util.CollectionUtils;
 
 import java.util.*;
-import java.util.stream.Collectors;
 
 
 /**
@@ -35,6 +36,12 @@ public class StockChangeRecordServiceImpl implements StockChangeRecordService {
     @Autowired
     private StockChangeRecordDao stockChangeRecordDao;
 
+    @Autowired
+    private GoodsService goodsService;
+
+    @Autowired
+    private ProductStoreRelaService productStoreRelaService;
+
     @Override
     public StockChangeRecordEntity queryObject(Integer id) {
         return stockChangeRecordDao.queryObject(id);
@@ -51,10 +58,23 @@ public class StockChangeRecordServiceImpl implements StockChangeRecordService {
     }
 
     @Override
-    public int save(StockChangeRecordEntity stockChangeRecord) {
+    @Transactional(rollbackFor = Exception.class)
+    public synchronized int save(StockChangeRecordEntity stockChangeRecord) {
         Date modifyTime = new Date();
         stockChangeRecord.setModifyTime(modifyTime);
         stockChangeRecord.setCreateTime(modifyTime);
+
+        List<StockChangeRecordEntity> storageList = Collections.singletonList(stockChangeRecord);
+        if (Constants.StockChangeType.item_0.getType().equals(stockChangeRecord.getType())) {
+            // 出库
+            productStoreRelaService.updateStockNumberByOutbound(storageList);
+            goodsService.updateStockNumberByOutbound(storageList);
+        } else if (Constants.StockChangeType.item_1.getType().equals(stockChangeRecord.getType())) {
+            // 入库
+            productStoreRelaService.updateStockNumberByStorage(storageList);
+            goodsService.updateStockNumberByStorage(storageList);
+        }
+
         return stockChangeRecordDao.save(stockChangeRecord);
     }
 
@@ -85,8 +105,9 @@ public class StockChangeRecordServiceImpl implements StockChangeRecordService {
                 // 校验excel传入的数据
                 ImmutableBiMap.Builder builder = new ImmutableBiMap.Builder();
                 builder.put("storeId", "门店编号");
+                builder.put("merchSn", "商户编号");
+                builder.put("thirdMerchSn", "第三方商户编号");
                 builder.put("sku", "商品SKU");
-                builder.put("warehouseSn", "仓库编码");
                 builder.put("type", "出入库类型");
                 builder.put("number", "出入库数量");
 
@@ -109,7 +130,48 @@ public class StockChangeRecordServiceImpl implements StockChangeRecordService {
     }
 
     @Override
-    public void saveBatch(List<StockChangeRecordEntity> stockChangeRecordEntities) {
+    @Transactional(rollbackFor = Exception.class)
+    public synchronized void saveBatch(List<StockChangeRecordEntity> stockChangeRecordEntities) {
+
+        Map<String, List<StockChangeRecordEntity>> stringListHashMap = new HashMap<>();
+
+        stockChangeRecordEntities.forEach(entity -> {
+            String type = entity.getType();
+            if (stringListHashMap.containsKey(type)) {
+                List<StockChangeRecordEntity> entities = stringListHashMap.get(type);
+                entities.add(entity);
+                stringListHashMap.put(type, entities);
+            } else {
+                ArrayList<StockChangeRecordEntity> entities = new ArrayList<>();
+                entities.add(entity);
+                stringListHashMap.put(type, entities);
+            }
+        });
+
+        // 出库和入库,需要修改库存
+        // 出库集合,减库存
+        List<StockChangeRecordEntity> outboundList = stringListHashMap.get(Constants.StockChangeType.item_0.getType());
+        if (!CollectionUtils.isEmpty(outboundList)) {
+            productStoreRelaService.updateStockNumberByOutbound(outboundList);
+            goodsService.updateStockNumberByOutbound(outboundList);
+        }
+        // 入库集合,加库存
+        List<StockChangeRecordEntity> storageList = stringListHashMap.get(Constants.StockChangeType.item_1.getType());
+        if (!CollectionUtils.isEmpty(storageList)) {
+            productStoreRelaService.updateStockNumberByStorage(storageList);
+            goodsService.updateStockNumberByStorage(storageList);
+        }
+
+        stockChangeRecordDao.saveBatch(stockChangeRecordEntities);
+    }
+
+    /**
+     * 订单提交时进行保存,不修改库存
+     *
+     */
+    @Override
+    public void saveBatchByOrderSubmit(List<StockChangeRecordEntity> stockChangeRecordEntities) {
         stockChangeRecordDao.saveBatch(stockChangeRecordEntities);
     }
+
 }

+ 7 - 6
kmall-admin/src/main/resources/XmlTemplate/StockChangeRecordDtoList.xml

@@ -5,12 +5,13 @@
         <loop startRow="1" endRow="1" items="StockChangeRecordDtoList" var="StockChangeRecordDto"
               varType="com.kmall.admin.dto.StockChangeRecordDto">
             <section startRow="1" endRow="1">
-                <mapping row="1" col="0">StockChangeRecordDto.storeId</mapping>
-                <mapping row="1" col="1">StockChangeRecordDto.warehouseSn</mapping>
-                <mapping row="1" col="2">StockChangeRecordDto.sku</mapping>
-                <mapping row="1" col="3">StockChangeRecordDto.type</mapping>
-                <mapping row="1" col="4">StockChangeRecordDto.number</mapping>
-                <mapping row="1" col="5">StockChangeRecordDto.remark</mapping>
+                <mapping row="1" col="0">StockChangeRecordDto.merchSn</mapping>
+                <mapping row="1" col="1">StockChangeRecordDto.thirdMerchSn</mapping>
+                <mapping row="1" col="2">StockChangeRecordDto.storeId</mapping>
+                <mapping row="1" col="3">StockChangeRecordDto.sku</mapping>
+                <mapping row="1" col="4">StockChangeRecordDto.type</mapping>
+                <mapping row="1" col="5">StockChangeRecordDto.number</mapping>
+                <mapping row="1" col="6">StockChangeRecordDto.remark</mapping>
             </section>
             <loopbreakcondition>
                 <rowcheck offset="0">

+ 37 - 0
kmall-admin/src/main/resources/mybatis/mapper/GoodsDao.xml

@@ -221,6 +221,17 @@
         where a.is_delete=0 and a.prod_barcode = #{prodBarcode} and a.goods_biz_type = 11 and r.store_id = #{storeId}
     </select>
 
+    <select id="queryObjectByProdBarcodeAndStoreId" resultType="com.kmall.admin.entity.GoodsEntity">
+        SELECT
+            a.id,a.sku,a.goods_sn,a.name,a.list_pic_url,a.prod_barcode,r.market_price storeMarketPrice,r.retail_price storeRetailPrice ,r.stock_num,s.store_name,r.product_id,s.id 'storeId',
+            a.hs_code as hsCode , a.legal_unit1_qty as legalUnit1Qty , a.legal_unit2_qty as legalUnit2Qty,a.ciq_prod_model as ciqProdModel,a.to_be_restored
+        FROM
+            mall_goods a
+        LEFT JOIN mall_product_store_rela r ON r.goods_id = a.id
+        inner join mall_store s on r.store_id=s.id
+        where a.is_delete=0 and a.prod_barcode = #{prodBarcode} and r.store_id = #{storeId}
+    </select>
+
 
     <select id="queryObjectByProdBarcodeAndStore" resultType="com.kmall.admin.entity.GoodsEntity">
          SELECT
@@ -1152,6 +1163,32 @@
         where
         prod_barcode = #{prodBarcode} and sku = #{sku}
     </update>
+    <update id="updateStockNumberByOutbound">
+        update mall_goods
+        <trim prefix="set" suffixOverrides=",">
+            goods_number =
+            <foreach collection="list" item="item" open="case " close=" end,">
+                when sku = #{item.sku} then goods_number - #{item.number}
+            </foreach>
+        </trim>
+        where
+        <foreach collection="list" item="item" open="(" separator=") or (" close=")">
+            sku = #{item.sku}
+        </foreach>
+    </update>
+    <update id="updateStockNumberByStorage">
+        update mall_goods
+        <trim prefix="set" suffixOverrides=",">
+            goods_number =
+            <foreach collection="list" item="item" open="case " close=" end,">
+                when sku = #{item.sku} then goods_number + #{item.number}
+            </foreach>
+        </trim>
+        where
+        <foreach collection="list" item="item" open="(" separator=") or (" close=")">
+            sku = #{item.sku}
+        </foreach>
+    </update>
 
     <select id="syncOmsHsCodeGoode" resultType="java.lang.String">
         select sku from mall_goods where id in

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

@@ -976,6 +976,33 @@
         </foreach>
     </update>
 
+    <update id="updateStockNumberByOutbound">
+        update mall_product_store_rela
+        <trim prefix="set" suffixOverrides=",">
+            stock_num =
+            <foreach collection="list" item="item" open="case " close=" end,">
+                when sku = #{item.sku} and store_id = #{item.storeId} then stock_num - #{item.number}
+            </foreach>
+        </trim>
+        where
+        <foreach collection="list" item="item" open="(" separator=") or (" close=")">
+            sku = #{item.sku} and store_id = #{item.storeId}
+        </foreach>
+    </update>
+    <update id="updateStockNumberByStorage">
+        update mall_product_store_rela
+        <trim prefix="set" suffixOverrides=",">
+            stock_num =
+            <foreach collection="list" item="item" open="case " close=" end,">
+                when sku = #{item.sku} and store_id = #{item.storeId} then stock_num + #{item.number}
+            </foreach>
+        </trim>
+        where
+        <foreach collection="list" item="item" open="(" separator=") or (" close=")">
+            sku = #{item.sku} and store_id = #{item.storeId}
+        </foreach>
+    </update>
+
 
     <select id="queryByGoodsIdAndStoreIdHkMall" resultType="com.kmall.admin.entity.ProductStoreRelaEntity">
         select

+ 40 - 0
kmall-admin/src/main/resources/mybatis/mapper/StoreMngChangeDao.xml

@@ -172,6 +172,46 @@
 			#{orderSn})
 	</insert>
 
+	<insert id="saveBatch" parameterType="com.kmall.admin.entity.StoreMngChangeEntity">
+		insert into mall_store_mng_change(
+			`store_change_num`,
+			`store_original_num`,
+			`store_valid_num`,
+			`merch_sn`,
+			`store_id`,
+			`goods_id`,
+			`is_valid`,
+			`change_type`,
+			`change_reason`,
+			`creater_sn`,
+			`create_time`,
+			`moder_sn`,
+			`mod_time`,
+			`tstm`,
+			order_sn)
+		values
+		<foreach collection="list" item="item" separator=",">
+			(
+				#{item.storeChangeNum},
+				#{item.storeOriginalNum},
+				#{item.storeValidNum},
+				#{item.merchSn},
+				#{item.storeId},
+				#{item.goodsId},
+				#{item.isValid},
+				#{item.changeType},
+				#{item.changeReason},
+				#{item.createrSn},
+				#{item.createTime},
+				#{item.moderSn},
+				#{item.modTime},
+				#{item.tstm},
+				#{item.orderSn}
+			)
+		</foreach>
+	</insert>
+
+
 	<update id="update" parameterType="com.kmall.admin.entity.StoreMngChangeEntity">
 		update mall_store_mng_change
 		<set>

+ 28 - 26
kmall-admin/src/main/resources/mybatis/mapper/haikong/StockChangeRecordDao.xml

@@ -5,46 +5,38 @@
 
     <resultMap type="com.kmall.admin.entity.haikong.StockChangeRecordEntity" id="stockChangeRecordMap">
         <result property="id" column="id"/>
+        <result property="merchSn" column="merch_sn"/>
+        <result property="thirdMerchSn" column="third_merch_sn"/>
         <result property="storeId" column="store_id"/>
-        <result property="warehouseSn" column="warehouse_sn"/>
         <result property="sku" column="sku"/>
         <result property="type" column="type"/>
         <result property="number" column="number"/>
         <result property="remark" column="remark"/>
+        <result property="orderSn" column="order_sn"/>
         <result property="createTime" column="create_time"/>
         <result property="modifyTime" column="modify_time"/>
     </resultMap>
 
 	<select id="queryObject" resultMap="stockChangeRecordMap">
 		select
-			`id`,
-			`store_id`,
-			`warehouse_sn`,
-			`sku`,
-			`type`,
-			`number`,
-			`remark`,
-			`create_time`,
-			`modify_time`
+			*
 		from mall_stock_change_record
 		where id = #{id}
 	</select>
 
 	<select id="queryList" resultMap="stockChangeRecordMap">
 		select
-    		`id`,
-    		`store_id`,
-    		`warehouse_sn`,
-    		`sku`,
-    		`type`,
-    		`number`,
-    		`remark`,
-    		`create_time`,
-    		`modify_time`
+    		*
 		from mall_stock_change_record
 		WHERE 1=1
-		<if test="name != null and name.trim() != ''">
-			AND name LIKE concat('%',#{name},'%')
+		<if test="type != null and type.trim() != ''">
+			AND `type` LIKE concat('%',#{type},'%')
+		</if>
+		<if test="sku != null and sku.trim() != ''">
+			AND `sku` LIKE concat('%',#{sku},'%')
+		</if>
+		<if test="storeId != null and storeId.trim() != ''">
+			AND `store_id` LIKE concat('%',#{storeId},'%')
 		</if>
         <choose>
             <when test="sidx != null and sidx.trim() != ''">
@@ -69,8 +61,10 @@
 	 
 	<insert id="save" parameterType="com.kmall.admin.entity.haikong.StockChangeRecordEntity" useGeneratedKeys="true" keyProperty="id">
 		insert into mall_stock_change_record(
+			`merch_sn`,
+			`third_merch_sn`,
+			`order_sn`,
 			`store_id`,
-			`warehouse_sn`,
 			`sku`,
 			`type`,
 			`number`,
@@ -78,8 +72,10 @@
 			`create_time`,
 			`modify_time`)
 		values(
+			#{merchSn},
+			#{thirdMerchSn},
+			#{orderSn},
 			#{storeId},
-			#{warehouseSn},
 			#{sku},
 			#{type},
 			#{number},
@@ -92,7 +88,9 @@
 		insert into mall_stock_change_record
 		(
 			`store_id`,
-			`warehouse_sn`,
+			`merch_sn`,
+			`third_merch_sn`,
+			`order_sn`,
 			`sku`,
 			`type`,
 			`number`,
@@ -104,7 +102,9 @@
 		<foreach collection="list" item="item" separator=",">
 			(
 				#{item.storeId},
-				#{item.warehouseSn},
+				#{item.merchSn},
+				#{item.thirdMerchSn},
+				#{item.orderSn},
 				#{item.sku},
 				#{item.type},
 				#{item.number},
@@ -119,7 +119,9 @@
 		update mall_stock_change_record 
 		<set>
 			<if test="storeId != null">`store_id` = #{storeId}, </if>
-			<if test="warehouseSn != null">`warehouse_sn` = #{warehouseSn}, </if>
+			<if test="merchSn != null">`merch_sn` = #{merchSn}, </if>
+			<if test="thirdMerchSn != null">`third_merch_sn` = #{thirdMerchSn}, </if>
+			<if test="orderSn != null">`order_sn` = #{orderSn}, </if>
 			<if test="sku != null">`sku` = #{sku}, </if>
 			<if test="type != null">`type` = #{type}, </if>
 			<if test="number != null">`number` = #{number}, </if>

+ 4 - 1
kmall-admin/src/main/webapp/WEB-INF/page/mk/mkactivitiespromotion.html

@@ -56,7 +56,10 @@
                 <i-input v-model="mkActivitiesPromotion.productBrand" placeholder="商品品牌"/>
             </Form-item>
             <Form-item label="是否参与积分抵扣" prop="rejectScore">
-                <i-input v-model="mkActivitiesPromotion.rejectScore" placeholder="是否参与积分抵扣,0:参与,1:不参与"/>
+                <i-select v-model="mkActivitiesPromotion.rejectScore" placeholder="是否参与积分抵扣,0:参与,1:不参与">
+                    <i-option value="0">参与</i-option>
+                    <i-option value="1">不参与</i-option>
+                </i-select>
             </Form-item>
             <Form-item label="商品系列" prop="productSeries">
                 <i-input v-model="mkActivitiesPromotion.productSeries" placeholder="商品系列"/>

+ 34 - 0
kmall-admin/src/main/webapp/WEB-INF/page/sale/sale.html

@@ -125,6 +125,7 @@
                                     <span style="margin-right: 40px">&nbsp; 门店:<b>{{storeName}}</b></span>
                                 </li>
                                 <li><span style="margin-right: 35px"><i class="fa fa-user-circle" ></i> &nbsp;收银员:<b>{{sysUserInfo.username}}</b></span></li>
+                                <li><a href="javascript:;" @click="updatePasswordOpen"><i class="fa fa-lock"></i> &nbsp;修改密码</a></li>
                                 <li><a @click="logout" style="font-size: 1em"><i class="fa fa fa-sign-out"></i> 退出</a></li>
                             </ul>
                         </Row>
@@ -304,6 +305,39 @@
                             </div>
                         </div>
 
+                        <div class="modal fade" id="updatePasswordDialog"  role="dialog" aria-hidden="true">
+                            <div class="modal-dialog">
+                                <div class="modal-content">
+                                    <div class="modal-header">
+                                        <button type="button" class="close" data-dismiss="modal" @click="closeUpdatePasswordDialog" aria-label="Close"><span aria-hidden="true">&times;</span></button>
+                                        <h4 class="modal-title" id="updatePasswordLabel">修改密码</h4>
+                                    </div>
+                                    <div class="modal-body">
+                                        <div>
+                                            <label class="control-label">账号:</label>
+                                            <span class="label label-success" style="vertical-align: center;">{{sysUserInfo.username}}</span>
+                                        </div>
+                                        <div style="margin-top: 30px">
+                                            <label class="control-label" for="oldPassword">原密码:</label>
+                                            <input type="password" class="form-control" v-model="oldPassword" ref="oldPassword" size="40%" id="oldPassword" />
+                                        </div>
+                                        <div style="margin-top: 30px">
+                                            <label class="control-label" for="newPassword">新密码:</label>
+                                            <input type="text" class="form-control" v-model="newPassword" ref="newPassword" size="40%" id="newPassword" />
+                                        </div>
+<!--                                        <div style="margin-top: 30px">-->
+<!--                                            <label class="control-label" for="newPassword2">再次输入新密码:</label>-->
+<!--                                            <input type="text" class="form-control" v-model="newPassword2" ref="newPassword2" size="40%" id="newPassword2" />-->
+<!--                                        </div>-->
+                                    </div>
+                                    <div class="modal-footer">
+                                        <button type="button" class="btn btn-default" data-dismiss="modal" @click="closeUpdatePasswordDialog" >关闭</button>
+                                        <button type="button" class="btn btn-primary" @click="updatePassword">修改</button>
+                                    </div>
+                                </div>
+                            </div>
+                        </div>
+
                         <div class="modal fade" id="calculateOrderPriceDialog"  role="dialog" aria-hidden="true">
                             <div class="modal-dialog">
                                 <div class="modal-content">

+ 40 - 13
kmall-admin/src/main/webapp/WEB-INF/page/shop/stockchangerecord.html

@@ -9,8 +9,22 @@
 	<div v-show="showList">
         <Row :gutter="16">
             <div class="search-group">
-                <i-col span="4">
-                    <i-input v-model="q.storeId" @on-enter="query" placeholder="门店id"/>
+                <i-col span="5">
+                    <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>
+                <i-col span="3">
+                    <i-input v-model="q.sku" @on-enter="query" placeholder="sku"/>
+                </i-col>
+                <i-col span="3">
+                    <i-select v-model="q.type" placeholder="出入库类型"
+                              label-in-value>
+                        <i-option v-for="macro in macros" :value="macro.value" :key="macro.id">{{macro.name}}
+                        </i-option>
+                    </i-select>
                 </i-col>
                 <i-button @click="query">查询</i-button>
                 <i-button @click="reloadSearch">重置</i-button>
@@ -38,17 +52,30 @@
     <Card v-show="!showList">
         <p slot="title">{{title}}</p>
 		<i-form ref="formValidate" :model="stockChangeRecord" :rules="ruleValidate" :label-width="80">
-            <Form-item label="门店id" prop="storeId">
-                <i-input v-model="stockChangeRecord.storeId" placeholder="门店id"/>
+            <Form-item label="商户" prop="merchSn">
+                <i-select v-model="stockChangeRecord.merchSn" filterable placeholder="商户" @on-change="changeMerch" label-in-value>
+                    <i-option v-for="merch in merchList" :value="merch.merchSn" :key="merch.merchSn">{{merch.merchName}}</i-option>
+                </i-select>
             </Form-item>
-            <Form-item label="仓库编号" prop="warehouseSn">
-                <i-input v-model="stockChangeRecord.warehouseSn" placeholder="仓库编号"/>
+            <Form-item label="第三方商户" prop="thirdMerchSn">
+                <i-select v-model="stockChangeRecord.thirdMerchSn" filterable placeholder="第三方商户" @on-change="changeThirdMerchantBiz" label-in-value>
+                    <i-option v-for="thirdMerchant in thirdMerchantBizList" :value="thirdMerchant.thirdPartyMerchCode"
+                              :key="thirdMerchant.thirdPartyMerchCode">{{thirdMerchant.thirdPartyMerchName}}</i-option>
+                </i-select>
+            </Form-item>
+            <Form-item label="门店id" prop="storeId">
+                <i-select v-model="stockChangeRecord.storeId" filterable placeholder="活动门店" label-in-value>
+                    <i-option v-for="store in storeList" :value="store.id" :key="store.id">{{store.storeName}}</i-option>
+                </i-select>
             </Form-item>
             <Form-item label="sku" prop="sku">
                 <i-input v-model="stockChangeRecord.sku" placeholder="sku"/>
             </Form-item>
             <Form-item label="类型" prop="type">
-                <i-input v-model="stockChangeRecord.type" placeholder="记录类型,0:出库 1:入库"/>
+                <i-select v-model="stockChangeRecord.type" placeholder="记录类型,0:出库 1:入库">
+                    <i-option value="0">出库</i-option>
+                    <i-option value="1">入库</i-option>
+                </i-select>
             </Form-item>
             <Form-item label="数量" prop="number">
                 <i-input v-model="stockChangeRecord.number" placeholder="出库或入库数量"/>
@@ -56,12 +83,12 @@
             <Form-item label="备注" prop="remark">
                 <i-input v-model="stockChangeRecord.remark" placeholder="备注"/>
             </Form-item>
-            <Form-item label="创建时间" prop="createTime">
-                <i-input v-model="stockChangeRecord.createTime" placeholder=""/>
-            </Form-item>
-            <Form-item label="修改时间" prop="modifyTime">
-                <i-input v-model="stockChangeRecord.modifyTime" placeholder=""/>
-            </Form-item>
+<!--            <Form-item label="创建时间" prop="createTime">-->
+<!--                <i-input v-model="stockChangeRecord.createTime" placeholder=""/>-->
+<!--            </Form-item>-->
+<!--            <Form-item label="修改时间" prop="modifyTime">-->
+<!--                <i-input v-model="stockChangeRecord.modifyTime" placeholder=""/>-->
+<!--            </Form-item>-->
             <Form-item>
                 <i-button type="primary" @click="handleSubmit('formValidate')">提交</i-button>
                 <i-button type="warning" @click="reload" style="margin-left: 8px"/>返回</i-button>

+ 75 - 2
kmall-admin/src/main/webapp/js/sale/sale.js

@@ -624,7 +624,12 @@ let vm = new Vue({
         // 是否点击了计算活动价格
         calActivityFlag: false,
         // 是否适用积分进行抵扣
-        switch1: true
+        switch1: true,
+        // 旧密码
+        oldPassword: '',
+        // 新密码
+        newPassword: '',
+        newPassword2: ''
     },
     watch: {
         prodBarcode (){
@@ -1440,7 +1445,75 @@ let vm = new Vue({
                 }
             });
 
-        }
+        },
+        updatePasswordOpen : function () {
+            vm.oldPassword = '';
+            vm.newPassword = '';
+            vm.newPassword2 = '';
+            $("#updatePasswordDialog").modal('show');
+        },
+        closeUpdatePasswordDialog : function () {
+            vm.oldPassword = '';
+            vm.newPassword = '';
+            vm.newPassword2 = '';
+            $("#updatePasswordDialog").modal('hide');
+        },
+        updatePassword: function () {
+
+            let oldPassword = vm.oldPassword;
+            let newPassword = vm.newPassword;
+            // let newPassword2 = vm.newPassword2;
+
+            if (oldPassword === 'null' || oldPassword === null || oldPassword === '' || oldPassword === 'undefined') {
+                alert("原密码不能为空!");
+                return;
+            }
+
+            if (newPassword === 'null' || newPassword === null || newPassword === '' || newPassword === 'undefined') {
+                alert("新密码不能为空!");
+                return;
+            }
+            // if (newPassword2 === 'null' || newPassword2 === null || newPassword2 === '' || newPassword2 === 'undefined') {
+            //     alert("第二次输入的新密码不能为空!");
+            //     return;
+            // }
+
+            // if (newPassword2 !== newPassword) {
+            //     alert("新密码不一致!");
+            //     return;
+            // }
+
+            // if (newPassword === oldPassword && oldPassword === newPassword2) {
+            //     alert("输入的密码相同!");
+            //     return;
+            // }
+            if (newPassword === oldPassword) {
+                alert("输入的密码相同!");
+                return;
+            }
+
+            if (newPassword.length < 6) {
+                alert("新密码必须大于6位!");
+                return;
+            }
+
+            var data = "password=" + oldPassword + "&newPassword=" + newPassword;
+            $.ajax({
+                type: "POST",
+                url: "../sys/user/password",
+                data: data,
+                dataType: "json",
+                success: function (result) {
+                    if (result.code == 0) {
+                        alert("修改成功!", function () {
+                            location.reload();
+                        });
+                    } else {
+                        alert(result.msg);
+                    }
+                }
+            });
+        },
 
 
     }

+ 4 - 0
kmall-admin/src/main/webapp/js/shop/mngchange.js

@@ -16,6 +16,10 @@ $(function () {
                         return '更新库存增加';
                     } else if (value == '4') {
                         return '更新库存减少';
+                    } else if (value == '5') {
+                        return '出库单';
+                    } else if (value == '6') {
+                        return '入库单';
                     }
                     return '-';
                 }

+ 67 - 16
kmall-admin/src/main/webapp/js/shop/stockchangerecord.js

@@ -4,24 +4,25 @@ $(function () {
         datatype: "json",
         colModel: [
 			{label: 'id', name: 'id', index: 'id', key: true, hidden: true},
-			{label: '门店id', name: 'storeId', index: 'store_id', width: 80},
-			{label: '仓库编号', name: 'warehouseSn', index: 'warehouse_sn', width: 80},
-			{label: 'sku', name: 'sku', index: 'sku', width: 80},
-			{label: '类型', name: 'type', index: 'type', width: 80, formatter:function (value) {
+			{label: '门店id', name: 'storeId', index: 'store_id', width: 40, align: 'center'},
+			{label: 'sku', name: 'sku', index: 'sku', width: 60, align: 'center'},
+			{label: '类型', name: 'type', index: 'type', width: 40, align: 'center', formatter:function (value) {
 				if (value === '0') {
 					return '出库';
 				} else {
 					return '入库';
 				}
 			}},
-			{label: '数量', name: 'number', index: 'number', width: 80},
-			{label: '备注', name: 'remark', index: 'remark', width: 80},
-			{label: '创建时间', name: 'createTime', index: 'create_time', width: 80, formatter:function (value) {
+			{label: '数量', name: 'number', index: 'number', width: 30, align: 'center'},
+			{label: '备注', name: 'remark', index: 'remark', width: 120, align: 'center'},
+			{label: '创建时间', name: 'createTime', index: 'create_time', width: 140, align: 'center', formatter:function (value) {
 				return new Date(value);
 			}},
-			{label: '修改时间', name: 'modifyTime', index: 'modify_time', width: 80, formatter:function (value) {
+			{label: '修改时间', name: 'modifyTime', index: 'modify_time', width: 140, align: 'center', formatter:function (value) {
 				return new Date(value);
-			}}],
+			}},
+			{label: '订单编号', name: 'orderSn', index: 'order_sn', width: 60, align: 'center'}
+			],
 		viewrecords: true,
         height: 550,
         rowNum: 10,
@@ -44,7 +45,13 @@ $(function () {
         },
         gridComplete: function () {
             $("#jqGrid").closest(".ui-jqgrid-bdiv").css({"overflow-x": "hidden"});
-        }
+        },
+        changeThirdMerchantBiz: function (opt) {
+			var value = opt.value;
+			$.get("../store/getStoresByThirdMerch?thirdPartyMerchCode=" + value, function (r) {
+				vm.storeList = r.list;
+			});
+		}
     });
 });
 
@@ -62,7 +69,12 @@ let vm = new Vue({
 		q: {
 		    name: ''
 		},
-		uploadData:[]
+		merchList: {},//商户
+		thirdMerchantBizList: {},//第三方商户
+		storeList: {},//门店
+		uploadData:[],
+		stores: [],
+		macros: []
 	},
 	methods: {
 		query: function () {
@@ -72,6 +84,7 @@ let vm = new Vue({
 			vm.showList = false;
 			vm.title = "新增";
 			vm.stockChangeRecord = {};
+			vm.getMerchList();
 		},
 		update: function (event) {
             let id = getSelectedRow();
@@ -80,16 +93,20 @@ let vm = new Vue({
 			}
 			vm.showList = false;
             vm.title = "修改";
+			vm.getMerchList();
 
-            vm.getInfo(id)
+            vm.getInfo(id);
 		},
 		saveOrUpdate: function (event) {
             let url = vm.stockChangeRecord.id == null ? "../stockchangerecord/save" : "../stockchangerecord/update";
-			$.ajax({
+			let s = JSON.stringify(vm.stockChangeRecord);
+			console.log("请求参数===> " + s);
+
+            $.ajax({
 				type: "POST",
 			    url: url,
 			    contentType: "application/json",
-			    data: JSON.stringify(vm.stockChangeRecord),
+			    data: s,
                 success: function (r) {
                     if (r.code === 0) {
                         alert('操作成功', function (index) {
@@ -140,7 +157,11 @@ let vm = new Vue({
 			vm.showList = true;
             let page = $("#jqGrid").jqGrid('getGridParam', 'page');
 			$("#jqGrid").jqGrid('setGridParam', {
-                postData: {'name': vm.q.name},
+                postData: {
+                	'storeId': vm.q.storeId,
+					'type': vm.q.type,
+					'sku': vm.q.sku
+				},
                 page: page
             }).trigger("reloadGrid");
             vm.handleReset('formValidate');
@@ -182,6 +203,36 @@ let vm = new Vue({
 			});
 			return promise; //通过返回一个promis对象解决
 
-		}
+		},
+		getMerchList: function() {
+			$.get("../merch/queryAll", function (r) {
+				vm.merchList = r.list;
+			});
+		},
+		changeMerch: function(opt) {
+			var value = opt.value;
+			vm.getThirdMerchantBizList(value);
+		},
+		getThirdMerchantBizList: function(merchSn) {
+			$.get("../thirdmerchantbiz/queryAll?merchSn=" + merchSn, function (r) {
+				vm.thirdMerchantBizList = r.list;
+			});
+		},
+		changeThirdMerchantBiz: function (opt) {
+			var value = opt.value;
+			$.get("../store/getStoresByThirdMerch?thirdPartyMerchCode=" + value, function (r) {
+				vm.storeList = r.list;
+			});
+		},
+	},
+	mounted() {
+		$.get("../store/queryAll", function (r) {
+			vm.stores = r.list;
+		});
+
+		$.get("../sys/macro/queryMacrosByValue?value=stockChangeType", function (r) {
+			vm.macros = r.list;
+		});
+
 	}
 });

+ 4 - 0
kmall-admin/src/main/webapp/js/shop/storemngchange.js

@@ -16,6 +16,10 @@ $(function () {
                         return '更新库存增加';
                     } else if (value == '4') {
                         return '更新库存减少';
+                    } else if (value == '5') {
+                        return '出库单';
+                    } else if (value == '6') {
+                        return '入库单';
                     }
                     return '-';
                 }

BIN
kmall-admin/src/main/webapp/statics/file/stock_change_record.xlsx


+ 5 - 2
kmall-common/src/main/java/com/kmall/common/constant/Dict.java

@@ -953,14 +953,17 @@ public class Dict {
     }
 
     /**
-     * 变动类型 0:还原 1:扣减 2:新增调整 3:更新调整增加 4:更新调整减少
+     * 变动类型 0:还原 1:扣减 2:新增调整 3:更新调整增加 4:更新调整减少 5:出库单 6:入库单
      */
     public enum changeType {
         item_0("0", "还原"),
         item_1("1", "扣减"),
         item_2("2", "新增调整"),
         item_3("3", "更新调整增加"),
-        item_4("4", "更新调整减少");
+        item_4("4", "更新调整减少"),
+        item_5("5", "出库单"),
+        item_6("6", "入库单"),
+        ;
 
         private String item;
         private String itemName;