Ver código fonte

1.修改税单异常的bug
2.新增对比倒算税率逻辑
3.新增对比倒算税率异常表

zcb 4 anos atrás
pai
commit
c8c9276af7
46 arquivos alterados com 1598 adições e 60 exclusões
  1. 16 2
      kmall-admin/src/main/java/com/kmall/admin/controller/GoodsController.java
  2. 13 0
      kmall-admin/src/main/java/com/kmall/admin/controller/compared/OrderComparedErrorController.java
  3. 12 1
      kmall-admin/src/main/java/com/kmall/admin/controller/compared/TaxInfoController.java
  4. 102 0
      kmall-admin/src/main/java/com/kmall/admin/controller/shop/ShopErrorPriceRecordController.java
  5. 7 0
      kmall-admin/src/main/java/com/kmall/admin/dao/GoodsDao.java
  6. 5 0
      kmall-admin/src/main/java/com/kmall/admin/dao/MkActivitiesPromotionDao.java
  7. 6 0
      kmall-admin/src/main/java/com/kmall/admin/dao/MkDailyActivitiesDao.java
  8. 2 0
      kmall-admin/src/main/java/com/kmall/admin/dao/compared/TaxInfoDao.java
  9. 2 0
      kmall-admin/src/main/java/com/kmall/admin/dao/mk/MkActivitiesDao.java
  10. 16 0
      kmall-admin/src/main/java/com/kmall/admin/dao/shop/ShopErrorPriceRecordDao.java
  11. 10 0
      kmall-admin/src/main/java/com/kmall/admin/dto/GoodsDetailsDto.java
  12. 300 0
      kmall-admin/src/main/java/com/kmall/admin/entity/shop/ShopErrorPriceRecordEntity.java
  13. 3 0
      kmall-admin/src/main/java/com/kmall/admin/service/GoodsService.java
  14. 10 0
      kmall-admin/src/main/java/com/kmall/admin/service/MkActivitiesPromotionService.java
  15. 10 0
      kmall-admin/src/main/java/com/kmall/admin/service/MkDailyActivitiesService.java
  16. 5 0
      kmall-admin/src/main/java/com/kmall/admin/service/compared/TaxInfoService.java
  17. 143 3
      kmall-admin/src/main/java/com/kmall/admin/service/impl/GoodsServiceImpl.java
  18. 14 0
      kmall-admin/src/main/java/com/kmall/admin/service/impl/MkActivitiesPromotionServiceImpl.java
  19. 14 0
      kmall-admin/src/main/java/com/kmall/admin/service/impl/MkDailyActivitiesServiceImpl.java
  20. 7 2
      kmall-admin/src/main/java/com/kmall/admin/service/impl/OrderRefundServiceImpl.java
  21. 15 6
      kmall-admin/src/main/java/com/kmall/admin/service/impl/OrderServiceImpl.java
  22. 8 0
      kmall-admin/src/main/java/com/kmall/admin/service/impl/compared/TaxInfoServiceImpl.java
  23. 5 0
      kmall-admin/src/main/java/com/kmall/admin/service/impl/mk/MkActivitiesServiceImpl.java
  24. 69 0
      kmall-admin/src/main/java/com/kmall/admin/service/impl/shop/ShopErrorPriceRecordServiceImpl.java
  25. 2 0
      kmall-admin/src/main/java/com/kmall/admin/service/mk/MkActivitiesService.java
  26. 79 0
      kmall-admin/src/main/java/com/kmall/admin/service/shop/ShopErrorPriceRecordService.java
  27. 55 21
      kmall-admin/src/main/java/com/kmall/admin/utils/CalculateTax.java
  28. 19 1
      kmall-admin/src/main/resources/mybatis/mapper/GoodsDao.xml
  29. 27 0
      kmall-admin/src/main/resources/mybatis/mapper/MkActivitiesPromotionDao.xml
  30. 29 0
      kmall-admin/src/main/resources/mybatis/mapper/MkDailyActivitiesDao.xml
  31. 1 1
      kmall-admin/src/main/resources/mybatis/mapper/ProductStoreRelaDao.xml
  32. 1 8
      kmall-admin/src/main/resources/mybatis/mapper/compared/TaxComparedErrorDao.xml
  33. 23 3
      kmall-admin/src/main/resources/mybatis/mapper/compared/TaxInfoDao.xml
  34. 25 0
      kmall-admin/src/main/resources/mybatis/mapper/mk/MkActivitiesDao.xml
  35. 201 0
      kmall-admin/src/main/resources/mybatis/mapper/shop/ShopErrorPriceRecordDao.xml
  36. 1 0
      kmall-admin/src/main/webapp/WEB-INF/page/compared/taxcomparederror.html
  37. 1 0
      kmall-admin/src/main/webapp/WEB-INF/page/compared/taxinfo.html
  38. 1 0
      kmall-admin/src/main/webapp/WEB-INF/page/shop/goods.html
  39. 93 0
      kmall-admin/src/main/webapp/WEB-INF/page/shop/shoperrorpricerecord.html
  40. 8 4
      kmall-admin/src/main/webapp/js/compared/payorderinfo.js
  41. 12 0
      kmall-admin/src/main/webapp/js/compared/taxcomparederror.js
  42. 28 5
      kmall-admin/src/main/webapp/js/compared/taxinfo.js
  43. 3 3
      kmall-admin/src/main/webapp/js/sale/sale.js
  44. 18 0
      kmall-admin/src/main/webapp/js/shop/goods.js
  45. 170 0
      kmall-admin/src/main/webapp/js/shop/shoperrorpricerecord.js
  46. 7 0
      kmall-admin/src/main/webapp/js/shop/storeProductStock.js

+ 16 - 2
kmall-admin/src/main/java/com/kmall/admin/controller/GoodsController.java

@@ -722,9 +722,23 @@ public class GoodsController {
     }
 
 
+    /**
+     * 校验系统中的商品价格是否有问题
+     * @return
+     */
+    @RequestMapping("/checkGoodsPrice")
+    public R checkGoodsPrice(){
+        SysUserEntity user = ShiroUtils.getUserEntity();
+        // 先同步海关商品编码,再同步税率
+        try {
+            goodsService.checkGoodsPrice(user);
+        }catch (Exception e){
+            e.printStackTrace();
 
-
-
+            return R.error("校验失败,请联系管理员");
+        }
+        return R.ok("校验成功");
+    }
 
 
 

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

@@ -5,6 +5,7 @@ import java.util.Map;
 
 import com.kmall.admin.entity.compared.OrderComparedErrorEntity;
 import com.kmall.admin.service.compared.OrderComparedErrorService;
+import com.kmall.admin.utils.ParamUtils;
 import com.kmall.common.utils.DateUtils;
 import com.kmall.common.utils.PageUtils;
 import com.kmall.common.utils.Query;
@@ -38,6 +39,18 @@ public class OrderComparedErrorController {
     @ResponseBody
     public R list(@RequestParam Map<String, Object> params) {
         //查询列表数据
+        params = ParamUtils.setTimeMap(params);
+        String createTime = (String) params.get("createTime");
+        if(org.apache.commons.lang.StringUtils.isNotEmpty(createTime)) {
+            try {
+                createTime = new String(createTime.getBytes(ISO), UTF);
+            } catch (Exception e) {
+                e.printStackTrace();
+            }
+            createTime = DateUtils.getDate(createTime);
+            params.put("createTime",createTime);
+        }
+        //查询列表数据
         Query query = new Query(params);
 
         List<OrderComparedErrorEntity> orderComparedErrorList = orderComparedErrorService.queryList(query);

+ 12 - 1
kmall-admin/src/main/java/com/kmall/admin/controller/compared/TaxInfoController.java

@@ -43,7 +43,7 @@ public class TaxInfoController {
     @RequestMapping("/list")
     @ResponseBody
     public R list(@RequestParam Map<String, Object> params) {
-        params.put("compared","0");
+//        params.put("compared","0");
         //查询列表数据
         Query query = new Query(params);
 
@@ -100,6 +100,17 @@ public class TaxInfoController {
     }
 
     /**
+     * 删除
+     */
+    @RequestMapping("/deleteAll")
+    @ResponseBody
+    public R deleteAll() {
+        taxInfoService.deleteAll();
+
+        return R.ok();
+    }
+
+    /**
      * 查看所有列表
      */
     @RequestMapping("/queryAll")

+ 102 - 0
kmall-admin/src/main/java/com/kmall/admin/controller/shop/ShopErrorPriceRecordController.java

@@ -0,0 +1,102 @@
+package com.kmall.admin.controller.shop;
+
+import java.util.List;
+import java.util.Map;
+
+import com.kmall.admin.entity.shop.ShopErrorPriceRecordEntity;
+import com.kmall.admin.service.shop.ShopErrorPriceRecordService;
+import com.kmall.common.utils.PageUtils;
+import com.kmall.common.utils.Query;
+import com.kmall.common.utils.R;
+import org.apache.shiro.authz.annotation.RequiresPermissions;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.stereotype.Controller;
+import org.springframework.web.bind.annotation.*;
+
+
+/**
+ * 门店价格异常记录表Controller
+ *
+ * @author emato
+ * @email admin@qhdswl.com
+ * @date 2021-01-19 16:03:52
+ */
+@Controller
+@RequestMapping("shoperrorpricerecord")
+public class ShopErrorPriceRecordController {
+    @Autowired
+    private ShopErrorPriceRecordService shopErrorPriceRecordService;
+
+    /**
+     * 查看列表
+     */
+    @RequestMapping("/list")
+    @ResponseBody
+    public R list(@RequestParam Map<String, Object> params) {
+        //查询列表数据
+        Query query = new Query(params);
+
+        List<ShopErrorPriceRecordEntity> shopErrorPriceRecordList = shopErrorPriceRecordService.queryList(query);
+        int total = shopErrorPriceRecordService.queryTotal(query);
+
+        PageUtils pageUtil = new PageUtils(shopErrorPriceRecordList, total, query.getLimit(), query.getPage());
+
+        return R.ok().put("page", pageUtil);
+    }
+
+    /**
+     * 查看信息
+     */
+    @RequestMapping("/info/{mseprId}")
+    @ResponseBody
+    public R info(@PathVariable("mseprId") Integer mseprId) {
+        ShopErrorPriceRecordEntity shopErrorPriceRecord = shopErrorPriceRecordService.queryObject(mseprId);
+
+        return R.ok().put("shopErrorPriceRecord", shopErrorPriceRecord);
+    }
+
+    /**
+     * 保存
+     */
+    @RequestMapping("/save")
+    @ResponseBody
+    public R save(@RequestBody ShopErrorPriceRecordEntity shopErrorPriceRecord) {
+        shopErrorPriceRecordService.save(shopErrorPriceRecord);
+
+        return R.ok();
+    }
+
+    /**
+     * 修改
+     */
+    @RequestMapping("/update")
+    @ResponseBody
+    public R update(@RequestBody ShopErrorPriceRecordEntity shopErrorPriceRecord) {
+        shopErrorPriceRecordService.update(shopErrorPriceRecord);
+
+        return R.ok();
+    }
+
+    /**
+     * 删除
+     */
+    @RequestMapping("/delete")
+    @ResponseBody
+    public R delete(@RequestBody Integer[]mseprIds) {
+        shopErrorPriceRecordService.deleteBatch(mseprIds);
+
+        return R.ok();
+    }
+
+    /**
+     * 查看所有列表
+     */
+    @RequestMapping("/queryAll")
+    @ResponseBody
+    public R queryAll(@RequestParam Map<String, Object> params) {
+
+        List<ShopErrorPriceRecordEntity> list = shopErrorPriceRecordService.queryList(params);
+
+        return R.ok().put("list", list);
+    }
+}

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

@@ -10,6 +10,7 @@ import org.apache.ibatis.annotations.Param;
 
 import java.util.List;
 import java.util.Map;
+import java.util.Set;
 
 /**
  * Dao
@@ -75,4 +76,10 @@ public interface GoodsDao extends BaseDao<GoodsEntity> {
 
     GoodsEntity queryByBarcodeAndSku(@Param("prodBarcode") String prodBarcode, @Param("goodsSn") String goodsSn);
 
+    /**
+     * 查询所有特殊化妆品的商品
+     * @param hdCodeSet
+     * @return
+     */
+    List<GoodsEntity> querySpecialCosmetics(@Param("hdCodeSet") Set<String> hdCodeSet);
 }

+ 5 - 0
kmall-admin/src/main/java/com/kmall/admin/dao/MkActivitiesPromotionDao.java

@@ -22,4 +22,9 @@ public interface MkActivitiesPromotionDao extends BaseDao<MkActivitiesPromotionE
      */
     MkActivitiesPromotionEntity queryByBarCode(@Param("mkaId") String mkaId,
                                                @Param("prodBarcode") String prodBarcode);
+
+    MkActivitiesPromotionEntity queryByDateAndBarcode(@Param("storeId") String storeId,
+                                                      @Param("currentTime") String currentTime,
+                                                      @Param("topic") String topic,
+                                                      @Param("prodBarcode") String prodBarcode);
 }

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

@@ -22,4 +22,10 @@ public interface MkDailyActivitiesDao extends BaseDao<MkDailyActivitiesEntity> {
      */
     MkDailyActivitiesEntity queryByBarCode(@Param("mkaId") String mkaId,
                                            @Param("prodBarcode") String prodBarcode);
+
+    MkDailyActivitiesEntity queryByDateAndBarcode(@Param("storeId") String storeId,
+                                                  @Param("currentTime") String currentTime,
+                                                  @Param("topic") String topic,
+                                                  @Param("prodBarcode") String prodBarcode);
+
 }

+ 2 - 0
kmall-admin/src/main/java/com/kmall/admin/dao/compared/TaxInfoDao.java

@@ -16,4 +16,6 @@ import java.util.List;
 public interface TaxInfoDao extends BaseDao<TaxInfoEntity> {
 
     void updateBatch(List<TaxInfoEntity> taxInfoEntities);
+
+    void deleteAll();
 }

+ 2 - 0
kmall-admin/src/main/java/com/kmall/admin/dao/mk/MkActivitiesDao.java

@@ -22,4 +22,6 @@ public interface MkActivitiesDao extends BaseDao<MkActivitiesEntity> {
      * @return
      */
     List<MkActivitiesEntity> queryByNow(@Param("storeId") String storeId, @Param("currentTime") String currentTime);
+
+    List<MkActivitiesEntity> queryByTopic(@Param("storeId") String storeId, @Param("currentTime")String currentTime, @Param("topic") String topic);
 }

+ 16 - 0
kmall-admin/src/main/java/com/kmall/admin/dao/shop/ShopErrorPriceRecordDao.java

@@ -0,0 +1,16 @@
+package com.kmall.admin.dao.shop;
+
+
+import com.kmall.admin.entity.shop.ShopErrorPriceRecordEntity;
+import com.kmall.manager.dao.BaseDao;
+
+/**
+ * 门店价格异常记录表Dao
+ *
+ * @author emato
+ * @email admin@qhdswl.com
+ * @date 2021-01-19 16:03:52
+ */
+public interface ShopErrorPriceRecordDao extends BaseDao<ShopErrorPriceRecordEntity> {
+
+}

+ 10 - 0
kmall-admin/src/main/java/com/kmall/admin/dto/GoodsDetailsDto.java

@@ -54,6 +54,16 @@ public class GoodsDetailsDto {
 
     private String ciqProdModel;
 
+    private String storeId;
+
+    public String getStoreId() {
+        return storeId;
+    }
+
+    public void setStoreId(String storeId) {
+        this.storeId = storeId;
+    }
+
     public String getStockNum() {
         return stockNum;
     }

+ 300 - 0
kmall-admin/src/main/java/com/kmall/admin/entity/shop/ShopErrorPriceRecordEntity.java

@@ -0,0 +1,300 @@
+package com.kmall.admin.entity.shop;
+
+import java.io.Serializable;
+import java.util.Date;
+
+/**
+ * 门店价格异常记录表实体
+ * 表名 mall_shop_error_price_record
+ *
+ * @author emato
+ * @email admin@qhdswl.com
+ * @date 2021-01-19 16:03:52
+ */
+public class ShopErrorPriceRecordEntity implements Serializable {
+    private static final long serialVersionUID = 1L;
+
+    /**
+     * 异常记录id
+     */
+    private Integer mseprId;
+    /**
+     * 商户编码
+     */
+    private String merchSn;
+    /**
+     * 第三方商户
+     */
+    private String thirdMerchSn;
+    /**
+     * 门店编码
+     */
+    private String shopSn;
+    /**
+     * 条码
+     */
+    private String barcode;
+    /**
+     * sku
+     */
+    private String sku;
+    /**
+     * 当前价格
+     */
+    private String currentPrice;
+    /**
+     * 价格来源
+     */
+    private Integer priceType;
+    /**
+     * 建议价格
+     */
+    private String suggestedPrice;
+    /**
+     * 校验时间
+     */
+    private Date checkTime;
+    /**
+     * 校验人
+     */
+    private String verifier;
+    /**
+     * 创建人编号
+     */
+    private String createrSn;
+    /**
+     * 创建时间,yyyy-MM-dd HH:mm:ss
+     */
+    private Date createTime;
+    /**
+     * 修改人编号
+     */
+    private String moderSn;
+    /**
+     * 修改时间,yyyy-MM-dd HH:mm:ss
+     */
+    private Date modTime;
+    /**
+     * 时间戳
+     */
+    private Date tstm;
+
+    private String shopName;
+
+    /**
+     * 设置:异常记录id
+     */
+    public void setMseprId(Integer mseprId) {
+        this.mseprId = mseprId;
+    }
+
+    /**
+     * 获取:异常记录id
+     */
+    public Integer getMseprId() {
+        return mseprId;
+    }
+    /**
+     * 设置:商户编码
+     */
+    public void setMerchSn(String merchSn) {
+        this.merchSn = merchSn;
+    }
+
+    /**
+     * 获取:商户编码
+     */
+    public String getMerchSn() {
+        return merchSn;
+    }
+    /**
+     * 设置:第三方商户
+     */
+    public void setThirdMerchSn(String thirdMerchSn) {
+        this.thirdMerchSn = thirdMerchSn;
+    }
+
+    /**
+     * 获取:第三方商户
+     */
+    public String getThirdMerchSn() {
+        return thirdMerchSn;
+    }
+    /**
+     * 设置:门店编码
+     */
+    public void setShopSn(String shopSn) {
+        this.shopSn = shopSn;
+    }
+
+    /**
+     * 获取:门店编码
+     */
+    public String getShopSn() {
+        return shopSn;
+    }
+    /**
+     * 设置:条码
+     */
+    public void setBarcode(String barcode) {
+        this.barcode = barcode;
+    }
+
+    /**
+     * 获取:条码
+     */
+    public String getBarcode() {
+        return barcode;
+    }
+    /**
+     * 设置:sku
+     */
+    public void setSku(String sku) {
+        this.sku = sku;
+    }
+
+    /**
+     * 获取:sku
+     */
+    public String getSku() {
+        return sku;
+    }
+    /**
+     * 设置:当前价格
+     */
+    public void setCurrentPrice(String currentPrice) {
+        this.currentPrice = currentPrice;
+    }
+
+    /**
+     * 获取:当前价格
+     */
+    public String getCurrentPrice() {
+        return currentPrice;
+    }
+    /**
+     * 设置:价格来源
+     */
+    public void setPriceType(Integer priceType) {
+        this.priceType = priceType;
+    }
+
+    /**
+     * 获取:价格来源
+     */
+    public Integer getPriceType() {
+        return priceType;
+    }
+    /**
+     * 设置:建议价格
+     */
+    public void setSuggestedPrice(String suggestedPrice) {
+        this.suggestedPrice = suggestedPrice;
+    }
+
+    /**
+     * 获取:建议价格
+     */
+    public String getSuggestedPrice() {
+        return suggestedPrice;
+    }
+    /**
+     * 设置:校验时间
+     */
+    public void setCheckTime(Date checkTime) {
+        this.checkTime = checkTime;
+    }
+
+    /**
+     * 获取:校验时间
+     */
+    public Date getCheckTime() {
+        return checkTime;
+    }
+    /**
+     * 设置:校验人
+     */
+    public void setVerifier(String verifier) {
+        this.verifier = verifier;
+    }
+
+    /**
+     * 获取:校验人
+     */
+    public String getVerifier() {
+        return verifier;
+    }
+    /**
+     * 设置:创建人编号
+     */
+    public void setCreaterSn(String createrSn) {
+        this.createrSn = createrSn;
+    }
+
+    /**
+     * 获取:创建人编号
+     */
+    public String getCreaterSn() {
+        return createrSn;
+    }
+    /**
+     * 设置:创建时间,yyyy-MM-dd HH:mm:ss
+     */
+    public void setCreateTime(Date createTime) {
+        this.createTime = createTime;
+    }
+
+    /**
+     * 获取:创建时间,yyyy-MM-dd HH:mm:ss
+     */
+    public Date getCreateTime() {
+        return createTime;
+    }
+    /**
+     * 设置:修改人编号
+     */
+    public void setModerSn(String moderSn) {
+        this.moderSn = moderSn;
+    }
+
+    /**
+     * 获取:修改人编号
+     */
+    public String getModerSn() {
+        return moderSn;
+    }
+    /**
+     * 设置:修改时间,yyyy-MM-dd HH:mm:ss
+     */
+    public void setModTime(Date modTime) {
+        this.modTime = modTime;
+    }
+
+    /**
+     * 获取:修改时间,yyyy-MM-dd HH:mm:ss
+     */
+    public Date getModTime() {
+        return modTime;
+    }
+    /**
+     * 设置:时间戳
+     */
+    public void setTstm(Date tstm) {
+        this.tstm = tstm;
+    }
+
+    /**
+     * 获取:时间戳
+     */
+    public Date getTstm() {
+        return tstm;
+    }
+
+    public String getShopName() {
+        return shopName;
+    }
+
+    public void setShopName(String shopName) {
+        this.shopName = shopName;
+    }
+}

+ 3 - 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.fromcomm.entity.SysUserEntity;
 import com.kmall.api.entity.exportpdf.PDFGoodsDto;
 
 import java.util.List;
@@ -204,4 +205,6 @@ public interface GoodsService {
     void insertTaxErrorRecord(TaxErrorRecordEntity taxErrorRecordEntity);
 
     void updateByEntity(GoodsEntity updateGoods);
+
+    void checkGoodsPrice(SysUserEntity user);
 }

+ 10 - 0
kmall-admin/src/main/java/com/kmall/admin/service/MkActivitiesPromotionService.java

@@ -86,4 +86,14 @@ public interface MkActivitiesPromotionService {
      * @return
      */
     MkActivitiesPromotionEntity queryByBarCode(String mkaId, String prodBarcode);
+
+    /**
+     * 根据条码,门店,当前时间查询
+     * @param storeId
+     * @param format
+     * @param lscx
+     * @param prodBarcode
+     * @return
+     */
+    MkActivitiesPromotionEntity queryByDateAndBarcode(String storeId, String format, String lscx, String prodBarcode);
 }

+ 10 - 0
kmall-admin/src/main/java/com/kmall/admin/service/MkDailyActivitiesService.java

@@ -87,4 +87,14 @@ public interface MkDailyActivitiesService {
      * @return
      */
     MkDailyActivitiesEntity queryByBarCode(String mkaId, String prodBarcode);
+
+    /**
+     * 根据条码,门店,当前时间查询
+     * @param storeId
+     * @param format
+     * @param rchd
+     * @param prodBarcode
+     * @return
+     */
+    MkDailyActivitiesEntity queryByDateAndBarcode(String storeId, String format, String rchd, String prodBarcode);
 }

+ 5 - 0
kmall-admin/src/main/java/com/kmall/admin/service/compared/TaxInfoService.java

@@ -80,4 +80,9 @@ public interface TaxInfoService {
     boolean uploadExcel(List<TaxOrderDto> taxOrderDtoList);
 
     void updateBatch(List<TaxInfoEntity> taxInfoEntities);
+
+    /**
+     * 逻辑删除全部数据
+     */
+    void deleteAll();
 }

+ 143 - 3
kmall-admin/src/main/java/com/kmall/admin/service/impl/GoodsServiceImpl.java

@@ -1,7 +1,6 @@
 package com.kmall.admin.service.impl;
 
 import cn.hutool.http.HttpUtil;
-import com.alibaba.druid.support.json.JSONUtils;
 import com.alibaba.fastjson.JSON;
 import com.google.common.collect.ImmutableBiMap;
 import com.google.common.collect.Maps;
@@ -11,10 +10,12 @@ import com.kmall.admin.dto.GoodsDto;
 import com.kmall.admin.dto.GoodsPanoramaDto;
 import com.kmall.admin.entity.*;
 import com.kmall.admin.entity.mk.MkActivitiesEntity;
+import com.kmall.admin.entity.shop.ShopErrorPriceRecordEntity;
 import com.kmall.admin.service.*;
 import com.kmall.admin.service.mk.MkActivitiesService;
 import com.kmall.admin.service.mk.MkActivityFormService;
 import com.kmall.admin.service.GoodsService;
+import com.kmall.admin.service.shop.ShopErrorPriceRecordService;
 import com.kmall.admin.utils.CalculateTax;
 import com.kmall.admin.utils.GoodsUtils;
 import com.kmall.admin.utils.ShiroUtils;
@@ -22,8 +23,6 @@ import com.kmall.api.entity.exportpdf.PDFGoodsDto;
 import com.kmall.common.constant.Dict;
 import com.kmall.admin.fromcomm.entity.SysUserEntity;
 import com.kmall.common.utils.*;
-import com.kmall.common.utils.print.ticket.item.Goods;
-import org.apache.poi.util.StringUtil;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.stereotype.Service;
 import org.springframework.transaction.annotation.Transactional;
@@ -110,6 +109,8 @@ public class GoodsServiceImpl implements GoodsService {
     @Autowired
     private BrandService brandService;
 
+    @Autowired
+    private ShopErrorPriceRecordService shopErrorPriceRecordService;
 
     @Override
     public GoodsEntity queryObject(Integer id) {
@@ -1903,5 +1904,144 @@ public class GoodsServiceImpl implements GoodsService {
         goodsDao.update(updateGoods);
     }
 
+    @Override
+    public void checkGoodsPrice(SysUserEntity user) {
+
+
+        Map<String, BigDecimal> hsCodeMap = CalculateTax.hsCodeMap;
+        Set<String> hdCodeSet = hsCodeMap.keySet();
+
+        List<Map<String,String>> errorPriceSkuList = new LinkedList<>();
+
+        // 保存各种异常价格对象集合
+        List<ShopErrorPriceRecordEntity> shopErrorPriceRecordEntities = new LinkedList<>();
+
+
+        // 查询所有特殊化妆品的商品
+        List<GoodsEntity> queryGoodsDetails = goodsDao.querySpecialCosmetics(hdCodeSet);
+        for (GoodsEntity goodsEntity : queryGoodsDetails) {
+            calculateShopPrice(user,goodsEntity,errorPriceSkuList,shopErrorPriceRecordEntities);
+            calculateDailyPrice(user,goodsEntity,errorPriceSkuList,shopErrorPriceRecordEntities);
+            calculeatePromotion(user,goodsEntity,errorPriceSkuList,shopErrorPriceRecordEntities);
+        }
+
+        if(shopErrorPriceRecordEntities.size() != 0){
+            shopErrorPriceRecordService.saveBatch(shopErrorPriceRecordEntities);
+        }
+
+
+    }
+
+    private void calculeatePromotion(SysUserEntity user, GoodsEntity goods, List<Map<String, String>> errorPriceSkuList, List<ShopErrorPriceRecordEntity> shopErrorPriceRecordEntities) {
+        String prodBarcode = goods.getProdBarcode();
+        String storeId = goods.getStoreId()+"";
+        SimpleDateFormat format = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
+        /**
+         * 2.查询当前时间,该门店是否有活动,如果有活动,查询开启了哪些营销方式
+         * 参数: 当前时间  门店id
+         */
+        MkActivitiesPromotionEntity promotionEntity = promotionService.queryByDateAndBarcode(storeId,format.format(new Date()),"lscx",prodBarcode);
+
+
+        // 如果该商品存在临时促销,直接替换活动价格
+        if(promotionEntity == null){
+            return ;
+        }
+        goods.setActualPaymentAmount(promotionEntity.getActivityPrice());
+        goods.setRetailPrice(promotionEntity.getActivityPrice());
+        goods.setActivity("临时促销");
+        try {
+            CalculateTax.calculateFinalTax(goods,goods.getActualPaymentAmount(),this).setScale(3,RoundingMode.HALF_UP);
+        } catch (Exception e) {
+            ShopErrorPriceRecordEntity shopErrorPriceRecordEntity = new ShopErrorPriceRecordEntity();
+            shopErrorPriceRecordEntity.setMerchSn(goods.getMerchSn());
+            shopErrorPriceRecordEntity.setThirdMerchSn(goods.getThirdPartyMerchCode());
+            shopErrorPriceRecordEntity.setShopSn(goods.getStoreId()+"");
+            shopErrorPriceRecordEntity.setPriceType(3); // 3 是临时促销
+            shopErrorPriceRecordEntity.setSku(goods.getSku());
+            shopErrorPriceRecordEntity.setBarcode(goods.getProdBarcode());
+            shopErrorPriceRecordEntity.setVerifier(user.getUserId()+"");
+            shopErrorPriceRecordEntity.setCheckTime(new Date());
+            shopErrorPriceRecordEntity.setCreaterSn(user.getUserId()+"");
+            shopErrorPriceRecordEntity.setCreateTime(new Date());
+            shopErrorPriceRecordEntity.setCurrentPrice(goods.getActualPaymentAmount().toString());
+            shopErrorPriceRecordEntity.setSuggestedPrice(e.getMessage());
+            shopErrorPriceRecordEntities.add(shopErrorPriceRecordEntity);
+        }
+
+    }
+
+    private void calculateDailyPrice(SysUserEntity user, GoodsEntity goods, List<Map<String, String>> errorPriceSkuList, List<ShopErrorPriceRecordEntity> shopErrorPriceRecordEntities) {
+        String prodBarcode = goods.getProdBarcode();
+        String storeId = goods.getStoreId()+"";
+        /**
+         * 2.查询当前时间,该门店是否有活动,如果有活动,查询开启了哪些营销方式
+         * 参数: 当前时间  门店id
+         */
+        SimpleDateFormat format = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
+
+        /**
+         * 日常活动跟着条形码走,优先级比临时促销低,但是高于正常价格
+         */
+        MkDailyActivitiesEntity dailyActivitiesEntity = dailyActivitiesService.queryByDateAndBarcode(storeId,format.format(new Date()),"rchd",prodBarcode);
+        if(dailyActivitiesEntity == null){
+            return ;
+        }
+        goods.setActualPaymentAmount(dailyActivitiesEntity.getActivityPrice());
+        goods.setRetailPrice(dailyActivitiesEntity.getActivityPrice());
+        goods.setActivity("日常活动");
+        // 计算税费
+        try {
+            CalculateTax.calculateFinalTax(goods,goods.getActualPaymentAmount(),this).setScale(3,RoundingMode.HALF_UP);
+        } catch (Exception e) {
+            // 记录有异常的sku
+            ShopErrorPriceRecordEntity shopErrorPriceRecordEntity = new ShopErrorPriceRecordEntity();
+            shopErrorPriceRecordEntity.setMerchSn(goods.getMerchSn());
+            shopErrorPriceRecordEntity.setThirdMerchSn(goods.getThirdPartyMerchCode());
+            shopErrorPriceRecordEntity.setShopSn(goods.getStoreId()+"");
+            shopErrorPriceRecordEntity.setPriceType(2); // 2 是日常活动
+            shopErrorPriceRecordEntity.setSku(goods.getSku());
+            shopErrorPriceRecordEntity.setBarcode(goods.getProdBarcode());
+            shopErrorPriceRecordEntity.setVerifier(user.getUserId()+"");
+            shopErrorPriceRecordEntity.setCheckTime(new Date());
+            shopErrorPriceRecordEntity.setCreaterSn(user.getUserId()+"");
+            shopErrorPriceRecordEntity.setCreateTime(new Date());
+            shopErrorPriceRecordEntity.setCurrentPrice(goods.getActualPaymentAmount().toString());
+            shopErrorPriceRecordEntity.setSuggestedPrice(e.getMessage());
+            shopErrorPriceRecordEntities.add(shopErrorPriceRecordEntity);
+        }
+
+    }
+
+    private void calculateShopPrice(SysUserEntity user, GoodsEntity goods, List<Map<String, String>> errorPriceSkuList, List<ShopErrorPriceRecordEntity> shopErrorPriceRecordEntities) {
+
+
+        goods.setDiscountedPrice(new BigDecimal(0));
+        BigDecimal retailPrice = goods.getRetailPrice();
+        goods.setActualPaymentAmount(retailPrice.setScale(2,RoundingMode.HALF_UP));
+
+        // 计算税费
+        try {
+            CalculateTax.calculateFinalTax(goods,goods.getActualPaymentAmount(),this).setScale(3,RoundingMode.HALF_UP);
+        } catch (Exception e) {
+            // 记录有异常的sku
+            ShopErrorPriceRecordEntity shopErrorPriceRecordEntity = new ShopErrorPriceRecordEntity();
+            shopErrorPriceRecordEntity.setMerchSn(goods.getMerchSn());
+            shopErrorPriceRecordEntity.setThirdMerchSn(goods.getThirdPartyMerchCode());
+            shopErrorPriceRecordEntity.setShopSn(goods.getStoreId()+"");
+            shopErrorPriceRecordEntity.setPriceType(1); // 1 门店商品价格
+            shopErrorPriceRecordEntity.setSku(goods.getSku());
+            shopErrorPriceRecordEntity.setBarcode(goods.getProdBarcode());
+            shopErrorPriceRecordEntity.setVerifier(user.getUserId()+"");
+            shopErrorPriceRecordEntity.setCheckTime(new Date());
+            shopErrorPriceRecordEntity.setCreaterSn(user.getUserId()+"");
+            shopErrorPriceRecordEntity.setCreateTime(new Date());
+            shopErrorPriceRecordEntity.setCurrentPrice(goods.getActualPaymentAmount().toString());
+            shopErrorPriceRecordEntity.setSuggestedPrice(e.getMessage());
+            shopErrorPriceRecordEntities.add(shopErrorPriceRecordEntity);
+        }
+
+    }
+
 
 }

+ 14 - 0
kmall-admin/src/main/java/com/kmall/admin/service/impl/MkActivitiesPromotionServiceImpl.java

@@ -130,4 +130,18 @@ public class MkActivitiesPromotionServiceImpl implements MkActivitiesPromotionSe
     public MkActivitiesPromotionEntity queryByBarCode(String mkaId, String prodBarcode) {
         return mkActivitiesPromotionDao.queryByBarCode(mkaId,prodBarcode);
     }
+
+    /**
+     * 根据条码,门店,当前时间查询
+     *
+     * @param storeId
+     * @param format
+     * @param lscx
+     * @param prodBarcode
+     * @return
+     */
+    @Override
+    public MkActivitiesPromotionEntity queryByDateAndBarcode(String storeId, String format, String lscx, String prodBarcode) {
+        return mkActivitiesPromotionDao.queryByDateAndBarcode(storeId,format,lscx,prodBarcode);
+    }
 }

+ 14 - 0
kmall-admin/src/main/java/com/kmall/admin/service/impl/MkDailyActivitiesServiceImpl.java

@@ -131,4 +131,18 @@ public class MkDailyActivitiesServiceImpl implements MkDailyActivitiesService {
     public MkDailyActivitiesEntity queryByBarCode(String mkaId, String prodBarcode) {
         return mkDailyActivitiesDao.queryByBarCode(mkaId,prodBarcode);
     }
+
+    /**
+     * 根据条码,门店,当前时间查询
+     *
+     * @param storeId
+     * @param format
+     * @param topic
+     * @param prodBarcode
+     * @return
+     */
+    @Override
+    public MkDailyActivitiesEntity queryByDateAndBarcode(String storeId, String format, String topic, String prodBarcode) {
+        return mkDailyActivitiesDao.queryByDateAndBarcode(storeId,format,topic,prodBarcode);
+    }
 }

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

@@ -52,12 +52,17 @@ public class OrderRefundServiceImpl implements OrderRefundService {
     @Override
     public int update(OrderRefundEntity orderRefund) {
         SysUserEntity user = ShiroUtils.getUserEntity();
+        String username = "system";
+        if(user != null){
+            username =  user.getUsername();
+
+        }
         if (StringUtils.isNotEmpty(orderRefund.getApprovalRemark())) {
             orderRefund.setApprovalTime(new Date());
-            orderRefund.setApprover(user.getUsername());
+            orderRefund.setApprover(username);
             orderRefund.setRefundStatus(3);
         }
-        orderRefund.setModerSn(user.getUsername());
+        orderRefund.setModerSn(username);
         orderRefund.setModTime(new Date());
         return orderRefundDao.update(orderRefund);
     }

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

@@ -831,6 +831,10 @@ public class OrderServiceImpl implements OrderService {
 
 //            storeRelaEntity.setSellVolume(Integer.parseInt(sellVolume.toString()));
 //            productStoreRelaDao.update(storeRelaEntity);
+            String username = "system";
+            if(user != null){
+                username = user.getUsername();
+            }
 
             MngChangeEntity mngChangeEntity = new MngChangeEntity();
             mngChangeEntity.setGoodsId(Integer.parseInt(String.valueOf(goodsEntity.getId())));
@@ -842,8 +846,8 @@ public class OrderServiceImpl implements OrderService {
             mngChangeEntity.setValidNum(stockNum + orderGoodsEntity.getNumber());//可用数
             mngChangeEntity.setCreateTime(new Date());
             mngChangeEntity.setModTime(new Date());
-            mngChangeEntity.setCreaterSn(user.getUsername());
-            mngChangeEntity.setModerSn(user.getUsername());
+            mngChangeEntity.setCreaterSn(username);
+            mngChangeEntity.setModerSn(username);
             mngChangeEntity.setIsValid(0);
             mngChangeEntity.setMerchSn(goodsEntity.getMerchSn());
             mngChangeDao.save(mngChangeEntity);
@@ -869,6 +873,11 @@ public class OrderServiceImpl implements OrderService {
         }
         productStoreRelaDao.update(storeRelaEntity);
 
+
+        String username = "system";
+        if(user != null){
+            username = user.getUsername();
+        }
         StoreMngChangeEntity storeMngChangeEntity = new StoreMngChangeEntity();
         storeMngChangeEntity.setChangeType(Dict.changeType.item_0.getItem());
         storeMngChangeEntity.setChangeReason(changeReason);
@@ -880,8 +889,8 @@ public class OrderServiceImpl implements OrderService {
         storeMngChangeEntity.setStoreValidNum(stockNum + orderGoodsEntity.getNumber());
         storeMngChangeEntity.setCreateTime(new Date());
         storeMngChangeEntity.setModTime(new Date());
-        storeMngChangeEntity.setCreaterSn(user.getUsername());
-        storeMngChangeEntity.setModerSn(user.getUsername());
+        storeMngChangeEntity.setCreaterSn(username);
+        storeMngChangeEntity.setModerSn(username);
         storeMngChangeEntity.setIsValid(0);
         storeMngChangeDao.save(storeMngChangeEntity);
     }
@@ -2749,8 +2758,8 @@ public class OrderServiceImpl implements OrderService {
     private boolean arrivedOms(String orderSn) {
 
         Map<String, String> sParaTemp = new TreeMap<String, String>();
-        sParaTemp.put("data","ZWCW2020122749351849");
-//        sParaTemp.put("data",orderSn);
+//        sParaTemp.put("data","ZWCW2020122749351849");
+        sParaTemp.put("data",orderSn);
         sParaTemp.put("merchId",omsMerchProperties.getMerchSn());
         String timestamp = String.valueOf(System.currentTimeMillis()/1000);
         sParaTemp.put("timestamp", timestamp);

+ 8 - 0
kmall-admin/src/main/java/com/kmall/admin/service/impl/compared/TaxInfoServiceImpl.java

@@ -109,4 +109,12 @@ public class TaxInfoServiceImpl implements TaxInfoService {
     public void updateBatch(List<TaxInfoEntity> taxInfoEntities) {
         taxInfoDao.updateBatch(taxInfoEntities);
     }
+
+    /**
+     * 逻辑删除全部数据
+     */
+    @Override
+    public void deleteAll() {
+        taxInfoDao.deleteAll();
+    }
 }

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

@@ -114,4 +114,9 @@ public class MkActivitiesServiceImpl implements MkActivitiesService {
     public List<MkActivitiesEntity> queryByNow(String storeId, String currentTime) {
         return mkActivitiesDao.queryByNow(storeId,currentTime);
     }
+
+    @Override
+    public List<MkActivitiesEntity> queryByTopic(String storeId, String currentTime, String topic) {
+        return mkActivitiesDao.queryByTopic(storeId,currentTime,topic);
+    }
 }

+ 69 - 0
kmall-admin/src/main/java/com/kmall/admin/service/impl/shop/ShopErrorPriceRecordServiceImpl.java

@@ -0,0 +1,69 @@
+package com.kmall.admin.service.impl.shop;
+
+import com.kmall.admin.dao.shop.ShopErrorPriceRecordDao;
+import com.kmall.admin.entity.shop.ShopErrorPriceRecordEntity;
+import com.kmall.admin.service.shop.ShopErrorPriceRecordService;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.stereotype.Service;
+
+import java.util.List;
+import java.util.Map;
+
+
+/**
+ * 门店价格异常记录表Service实现类
+ *
+ * @author emato
+ * @email admin@qhdswl.com
+ * @date 2021-01-19 16:03:52
+ */
+@Service("shopErrorPriceRecordService")
+public class ShopErrorPriceRecordServiceImpl implements ShopErrorPriceRecordService {
+    @Autowired
+    private ShopErrorPriceRecordDao shopErrorPriceRecordDao;
+
+    @Override
+    public ShopErrorPriceRecordEntity queryObject(Integer mseprId) {
+        return shopErrorPriceRecordDao.queryObject(mseprId);
+    }
+
+    @Override
+    public List<ShopErrorPriceRecordEntity> queryList(Map<String, Object> map) {
+        return shopErrorPriceRecordDao.queryList(map);
+    }
+
+    @Override
+    public int queryTotal(Map<String, Object> map) {
+        return shopErrorPriceRecordDao.queryTotal(map);
+    }
+
+    @Override
+    public int save(ShopErrorPriceRecordEntity shopErrorPriceRecord) {
+        return shopErrorPriceRecordDao.save(shopErrorPriceRecord);
+    }
+
+    @Override
+    public int update(ShopErrorPriceRecordEntity shopErrorPriceRecord) {
+        return shopErrorPriceRecordDao.update(shopErrorPriceRecord);
+    }
+
+    @Override
+    public int delete(Integer mseprId) {
+        return shopErrorPriceRecordDao.delete(mseprId);
+    }
+
+    @Override
+    public int deleteBatch(Integer[]mseprIds) {
+        return shopErrorPriceRecordDao.deleteBatch(mseprIds);
+    }
+
+    /**
+     * 批量插入
+     *
+     * @param shopErrorPriceRecordEntities
+     */
+    @Override
+    public void saveBatch(List<ShopErrorPriceRecordEntity> shopErrorPriceRecordEntities) {
+        shopErrorPriceRecordDao.saveBatch(shopErrorPriceRecordEntities);
+    }
+}

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

@@ -78,4 +78,6 @@ public interface MkActivitiesService {
      * @return
      */
     List<MkActivitiesEntity> queryByNow(String storeId, String currentTime);
+
+    List<MkActivitiesEntity> queryByTopic(String storeId, String format, String topic);
 }

+ 79 - 0
kmall-admin/src/main/java/com/kmall/admin/service/shop/ShopErrorPriceRecordService.java

@@ -0,0 +1,79 @@
+package com.kmall.admin.service.shop;
+
+
+import com.kmall.admin.entity.shop.ShopErrorPriceRecordEntity;
+
+import java.util.List;
+import java.util.Map;
+
+/**
+ * 门店价格异常记录表Service接口
+ *
+ * @author emato
+ * @email admin@qhdswl.com
+ * @date 2021-01-19 16:03:52
+ */
+public interface ShopErrorPriceRecordService {
+
+    /**
+     * 根据主键查询实体
+     *
+     * @param mseprId 主键
+     * @return 实体
+     */
+    ShopErrorPriceRecordEntity queryObject(Integer mseprId);
+
+    /**
+     * 分页查询
+     *
+     * @param map 参数
+     * @return list
+     */
+    List<ShopErrorPriceRecordEntity> queryList(Map<String, Object> map);
+
+    /**
+     * 分页统计总数
+     *
+     * @param map 参数
+     * @return 总数
+     */
+    int queryTotal(Map<String, Object> map);
+
+    /**
+     * 保存实体
+     *
+     * @param shopErrorPriceRecord 实体
+     * @return 保存条数
+     */
+    int save(ShopErrorPriceRecordEntity shopErrorPriceRecord);
+
+    /**
+     * 根据主键更新实体
+     *
+     * @param shopErrorPriceRecord 实体
+     * @return 更新条数
+     */
+    int update(ShopErrorPriceRecordEntity shopErrorPriceRecord);
+
+    /**
+     * 根据主键删除
+     *
+     * @param mseprId
+     * @return 删除条数
+     */
+    int delete(Integer mseprId);
+
+    /**
+     * 根据主键批量删除
+     *
+     * @param mseprIds
+     * @return 删除条数
+     */
+    int deleteBatch(Integer[]mseprIds);
+
+    /**
+     * 批量插入
+     * @param shopErrorPriceRecordEntities
+     */
+    void saveBatch(List<ShopErrorPriceRecordEntity> shopErrorPriceRecordEntities);
+}

+ 55 - 21
kmall-admin/src/main/java/com/kmall/admin/utils/CalculateTax.java

@@ -1,10 +1,6 @@
 package com.kmall.admin.utils;
 
 
-import com.kmall.admin.dao.GoodsDao;
-import com.kmall.admin.dao.TaxErrorRecordDao;
-import com.kmall.admin.dto.GoodsDetailsDto;
-import com.kmall.admin.dto.GoodsDto;
 import com.kmall.admin.entity.GoodsEntity;
 import com.kmall.admin.entity.TaxErrorRecordEntity;
 import com.kmall.admin.service.GoodsService;
@@ -16,8 +12,6 @@ import org.slf4j.LoggerFactory;
 import java.math.BigDecimal;
 import java.math.RoundingMode;
 import java.util.*;
-import java.util.regex.Matcher;
-import java.util.regex.Pattern;
 
 /**
  * xwh
@@ -28,7 +22,7 @@ public class CalculateTax {
 
     private static List<String> hsCodeList = new ArrayList<>();
 
-    private static Map<String,BigDecimal> hsCodeMap = new HashMap<String,BigDecimal>();
+    public static Map<String,BigDecimal> hsCodeMap = new HashMap<>();
 
     private static BigDecimal consumerGoodsRate = new BigDecimal("0.2306");
     private static BigDecimal noConsumerGoodsRate = new BigDecimal("0.091");
@@ -283,16 +277,18 @@ public class CalculateTax {
                             if (gramOrMlUnitPrice.compareTo(cosmThresholdValue) >= 0) {
 
 
-                                GoodsEntity updateGoods = new GoodsEntity();
-                                updateGoods.setGoodsRate(consumerGoodsRate);
-                                updateGoods.setId(goods.getId());
-                                goodsService.updateByEntity(updateGoods);
+//                                GoodsEntity updateGoods = new GoodsEntity();
+//                                updateGoods.setGoodsRate(consumerGoodsRate);
+//                                updateGoods.setId(goods.getId());
+//                                goodsService.updateByEntity(updateGoods);
                                 // 如果用23.06去计算,还是大于阈值,那就是用23.06去计税
                                 return getTax(retailPrice, consumerGoodsRate);
                             }else{
-                                // TODO 这块需要报错
-                                BigDecimal tax = getFinalTax(goods, retailPrice, goodsService, cusGoodsName, qty1, qty2);
-                                return tax;
+                                throwPriceException(goods, retailPrice, cosmThresholdValue, cusGoodsName, qty1, qty2);
+//                                throw new RuntimeException("商品价格有误!");
+                                // 这块需要报错
+//                                BigDecimal tax = getFinalTax(goods, retailPrice, goodsService, cusGoodsName, qty1, qty2);
+//                                return tax;
                             }
                         }
 
@@ -306,16 +302,17 @@ public class CalculateTax {
                             // 如果不是,重新用0.091计算一次
                             gramOrMlUnitPrice = getUnitPrice(retailPrice, noConsumerGoodsRate, cusGoodsName, qty1, qty2);
                             if (gramOrMlUnitPrice.compareTo(cosmThresholdValue) >= 0) {
+                                throwPriceException(goods, retailPrice, cosmThresholdValue, cusGoodsName, qty1, qty2);
 //                                throw new RuntimeException("商品价格有误!");
-                                // TODO 这块需要报错
-                                BigDecimal tax = getFinalTax(goods, retailPrice, goodsService, cusGoodsName, qty1, qty2);
-                                return tax;
+                                // 这块需要报错
+//                                BigDecimal tax = getFinalTax(goods, retailPrice, goodsService, cusGoodsName, qty1, qty2);
+//                                return tax;
 
                             }else{
-                                GoodsEntity updateGoods = new GoodsEntity();
-                                updateGoods.setGoodsRate(noConsumerGoodsRate);
-                                updateGoods.setId(goods.getId());
-                                goodsService.updateByEntity(updateGoods);
+//                                GoodsEntity updateGoods = new GoodsEntity();
+//                                updateGoods.setGoodsRate(noConsumerGoodsRate);
+//                                updateGoods.setId(goods.getId());
+//                                goodsService.updateByEntity(updateGoods);
                                 return getTax(retailPrice, noConsumerGoodsRate);
                             }
 
@@ -356,6 +353,43 @@ public class CalculateTax {
         }
     }
 
+    /**
+     * 计算商品的最大值跟最小值
+     * @param goods
+     * @param retailPrice
+     * @param cosmThresholdValue
+     * @param cusGoodsName
+     * @param qty1
+     * @param qty2
+     */
+    private static void throwPriceException(GoodsEntity goods, BigDecimal retailPrice, BigDecimal cosmThresholdValue, String cusGoodsName, BigDecimal qty1, BigDecimal qty2) {
+
+        BigDecimal maxPrice = null;
+        BigDecimal minPrice = null;
+        BigDecimal goodsRate = goods.getGoodsRate();
+        // 根据税后价计算出税前价
+        BigDecimal productUnitPrice = retailPrice
+                .divide(new BigDecimal(1).add(goodsRate),10, RoundingMode.HALF_DOWN) ; // TODO 需要得到公式计算出税前价
+
+        if (StringUtils.isNotBlank(cusGoodsName) && (cusGoodsName.contains("“片”") || cusGoodsName.contains("“张”") || cusGoodsName.contains("片") || cusGoodsName.contains("张"))) {
+            //片、张的单价
+            if (qty2 != null) {
+
+                // 计算最高价格  法二 * 阈值 * (1+税率)
+                maxPrice = qty2.multiply(cosmThresholdValue).multiply(new BigDecimal(1).add(consumerGoodsRate)).setScale(2,RoundingMode.HALF_UP);
+                minPrice = qty2.multiply(cosmThresholdValue).multiply(new BigDecimal(1).add(noConsumerGoodsRate)).setScale(2,RoundingMode.HALF_UP);
+            }
+        } else {
+            //毫升、克的单价
+            if (qty1 != null) {
+                BigDecimal gramOrMl = qty1.multiply(new BigDecimal(1000));
+//                unit1Price = productUnitPrice.divide(gramOrMl, 5, BigDecimal.ROUND_HALF_UP);
+                maxPrice = gramOrMl.multiply(cosmThresholdValue).multiply(new BigDecimal(1).add(consumerGoodsRate)).setScale(2,RoundingMode.HALF_UP);
+                minPrice = gramOrMl.multiply(cosmThresholdValue).multiply(new BigDecimal(1).add(noConsumerGoodsRate)).setScale(2,RoundingMode.HALF_UP);
+            }
+        }
+        throw new RuntimeException("商品:"+goods.getSku()+" 价格有误!价格应调整为大于"+maxPrice+"元或小于"+minPrice+"元。");
+    }
 
 
     private static BigDecimal getFinalTax(GoodsEntity goods, BigDecimal retailPrice, GoodsService goodsService, String cusGoodsName, BigDecimal qty1, BigDecimal qty2) {

+ 19 - 1
kmall-admin/src/main/resources/mybatis/mapper/GoodsDao.xml

@@ -658,7 +658,7 @@
             <if test="valueAddedTaxRate != null">`value_added_tax_rate` = #{valueAddedTaxRate},</if>
             <if test="legalUnit1Qty != null">`legal_unit1_qty` = #{legalUnit1Qty},</if>
             <if test="legalUnit2Qty != null">`legal_unit2_qty` = #{legalUnit2Qty},</if>
-            <if test="cosmThresholdValue != null">`cosm_threshold_value` = #{cosmThresholdValue}</if>
+            <if test="cosmThresholdValue != null">`cosm_threshold_value` = #{cosmThresholdValue},</if>
             <if test="toBeRestored != null">`to_be_restored` = #{toBeRestored}</if>
         </set>
         where id = #{id}
@@ -834,4 +834,22 @@
         goods_sn = #{goodsSn} and prod_barcode = #{prodBarcode}
     </select>
 
+
+    <select id="querySpecialCosmetics" resultType="com.kmall.admin.entity.GoodsEntity">
+        SELECT distinct
+            a.*,
+            m.retail_price as retailPrice,
+            m.stock_num as stockNum,
+            m.store_id as storeId
+        FROM
+            mall_goods a
+        left join mall_product_store_rela m on m.goods_id = a.id
+        <where>
+            a.cus_rec_code in
+            <foreach collection="hdCodeSet" item="item" open="(" close=")" separator=",">
+                #{item}
+            </foreach>
+        </where>
+    </select>
+
 </mapper>

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

@@ -177,4 +177,31 @@
 		and barcode = #{prodBarcode}
 	</select>
 
+	<select id="queryByDateAndBarcode" resultType="com.kmall.admin.entity.MkActivitiesPromotionEntity">
+		select
+			pro.map_id,
+			pro.product_name,
+			pro.activity_price,
+			pro.shop_sn,
+			pro.goods_sn,
+			pro.barcode,
+			pro.product_brand,
+			pro.product_series,
+			pro.mka_id,
+			pro.deadline,
+			pro.create_time,
+			pro.creater_sn,
+			pro.moder_sn,
+			pro.update_time
+		from mk_activities_promotion pro,
+		mk_activities activity
+		where pro.mka_id = activity.mka_id
+		and pro.barcode = #{prodBarcode}
+		and activity.mka_start_time &lt; #{currentTime}
+		and activity.mkd_end_time &gt; #{currentTime}
+		and activity.mka_topic = #{topic}
+		and activity.mka_status = 1
+		and activity.mka_store_id = #{storeId}
+	</select>
+
 </mapper>

+ 29 - 0
kmall-admin/src/main/resources/mybatis/mapper/MkDailyActivitiesDao.xml

@@ -185,4 +185,33 @@
 		and barcode = #{prodBarcode}
 	</select>
 
+	<select id="queryByDateAndBarcode" resultType="com.kmall.admin.entity.MkDailyActivitiesEntity">
+		select
+			daily.mda_id,
+			daily.product_name,
+			daily.daily_price,
+			daily.activity_price,
+			daily.shop_sn,
+			daily.goods_sn,
+			daily.barcode,
+			daily.product_brand,
+			daily.product_series,
+			daily.mka_id,
+			daily.create_time,
+			daily.creater_sn,
+			daily.moder_sn,
+			daily.update_time,
+			daily.deadline
+		from mk_daily_activities daily,
+		mk_activities activity
+		where daily.mka_id = activity.mka_id
+		and daily.barcode = #{prodBarcode}
+		and activity.mka_start_time &lt; #{currentTime}
+		and activity.mkd_end_time &gt; #{currentTime}
+		and activity.mka_topic = #{topic}
+		and activity.mka_status = 1
+		and activity.mka_store_id = #{storeId}
+	</select>
+
+
 </mapper>

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

@@ -571,7 +571,7 @@
                 bottom_line_price = #{bottomLinePrice,jdbcType=VARCHAR},
             </if>
             <if test="lastSaleTime != null" >
-                last_sale_time = #{lastSaleTime,jdbcType=TIMESTAMP}
+                last_sale_time = #{lastSaleTime,jdbcType=TIMESTAMP},
             </if>
             <if test="toBeRestored != null" >
                 to_be_restored = #{toBeRestored,jdbcType=VARCHAR}

+ 1 - 8
kmall-admin/src/main/resources/mybatis/mapper/compared/TaxComparedErrorDao.xml

@@ -34,14 +34,7 @@
 		<if test="createTime != null and createTime.trim() != ''">
 			AND DATE_FORMAT(create_time,'%Y-%m-%d') = #{createTime}
 		</if>
-        <choose>
-            <when test="sidx != null and sidx.trim() != ''">
-                order by ${sidx} ${order}
-            </when>
-			<otherwise>
-                order by mtce_id desc
-			</otherwise>
-        </choose>
+		order by create_time desc
 		<if test="offset != null and limit != null">
 			limit #{offset}, #{limit}
 		</if>

+ 23 - 3
kmall-admin/src/main/resources/mybatis/mapper/compared/TaxInfoDao.xml

@@ -40,20 +40,36 @@
     		`compared_time`
 		from mall_tax_info
 		WHERE 1=1
+		and compared != 2
 		<if test="compared != null and compared.trim() != ''">
 			and compared = #{compared}
 		</if>
 		<if test="merchOrderSn != null and merchOrderSn.trim() != ''">
 			AND merch_order_sn LIKE concat('%',#{merchOrderSn},'%')
 		</if>
+		<choose>
+			<when test="sidx != null and sidx.trim() != ''">
+				order by ${sidx} ${order}
+			</when>
+			<otherwise>
+				order by mti_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_tax_info
 		WHERE 1=1
-        <if test="merchOrderSn != null and merchOrderSn.trim() != ''">
-            AND merch_order_sn LIKE concat('%',#{merchOrderSn},'%')
-        </if>
+		and compared != 2
+		<if test="compared != null and compared.trim() != ''">
+			and compared = #{compared}
+		</if>
+		<if test="merchOrderSn != null and merchOrderSn.trim() != ''">
+			AND merch_order_sn LIKE concat('%',#{merchOrderSn},'%')
+		</if>
 	</select>
 
 	<insert id="save" parameterType="com.kmall.admin.entity.compared.TaxInfoEntity" useGeneratedKeys="true" keyProperty="mtiId">
@@ -138,4 +154,8 @@
 		</foreach>
 	</update>
 
+	<update id="deleteAll">
+		update mall_tax_info set compared = 2;
+	</update>
+
 </mapper>

+ 25 - 0
kmall-admin/src/main/resources/mybatis/mapper/mk/MkActivitiesDao.xml

@@ -165,4 +165,29 @@
 			and mkd_end_time &gt; #{currentTime}
 			and mka_status = 1
 	</select>
+
+	<select id="queryByTopic" resultType="com.kmall.admin.entity.mk.MkActivitiesEntity">
+		select
+			mka_id,
+			mka_topic,
+			merch_sn,
+			third_merch_sn,
+			mka_store_id,
+			mka_status,
+			mka_start_time,
+			mkd_end_time,
+			mka_end_early,
+			mkd_end_early_time,
+			create_time,
+			creater_sn,
+			update_time,
+			moder_sn
+		from mk_activities
+		where
+			mka_store_id = #{storeId}
+			and mka_start_time &lt; #{currentTime}
+			and mkd_end_time &gt; #{currentTime}
+			and mka_topic = #{topic}
+			and mka_status = 1
+	</select>
 </mapper>

+ 201 - 0
kmall-admin/src/main/resources/mybatis/mapper/shop/ShopErrorPriceRecordDao.xml

@@ -0,0 +1,201 @@
+<?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.shop.ShopErrorPriceRecordDao">
+
+    <resultMap type="com.kmall.admin.entity.shop.ShopErrorPriceRecordEntity" id="shopErrorPriceRecordMap">
+        <result property="mseprId" column="msepr_id"/>
+        <result property="merchSn" column="merch_sn"/>
+        <result property="thirdMerchSn" column="third_merch_sn"/>
+        <result property="shopSn" column="shop_sn"/>
+        <result property="barcode" column="barcode"/>
+        <result property="sku" column="sku"/>
+        <result property="currentPrice" column="current_price"/>
+        <result property="priceType" column="price_type"/>
+        <result property="suggestedPrice" column="suggested_price"/>
+        <result property="checkTime" column="check_time"/>
+        <result property="verifier" column="verifier"/>
+        <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"/>
+    </resultMap>
+
+	<select id="queryObject" resultType="com.kmall.admin.entity.shop.ShopErrorPriceRecordEntity">
+		select
+			`msepr_id`,
+			`merch_sn`,
+			`third_merch_sn`,
+			`shop_sn`,
+			`barcode`,
+			`sku`,
+			`current_price`,
+			`price_type`,
+			`suggested_price`,
+			`check_time`,
+			`verifier`,
+			`creater_sn`,
+			`create_time`,
+			`moder_sn`,
+			`mod_time`,
+			`tstm`
+		from mall_shop_error_price_record
+		where msepr_id = #{id}
+	</select>
+
+	<select id="queryList" resultType="com.kmall.admin.entity.shop.ShopErrorPriceRecordEntity">
+		select
+    		record.msepr_id,
+    		record.merch_sn,
+    		record.third_merch_sn,
+    		record.shop_sn,
+    		record.barcode,
+    		record.sku,
+    		record.current_price,
+    		record.price_type,
+    		record.suggested_price,
+    		record.check_time,
+    		record.verifier,
+    		record.creater_sn,
+    		record.create_time,
+    		record.moder_sn,
+    		record.mod_time,
+    		record.tstm,
+    		store.store_name as shopName
+		from mall_shop_error_price_record record,
+		mall_store store
+		WHERE record.shop_sn = store.id
+		<if test="sku != null and sku.trim() != ''">
+			AND record.sku = #{sku}
+		</if>
+        <choose>
+            <when test="sidx != null and sidx.trim() != ''">
+                order by ${sidx} ${order}
+            </when>
+			<otherwise>
+                order by record.check_time desc
+			</otherwise>
+        </choose>
+		<if test="offset != null and limit != null">
+			limit #{offset}, #{limit}
+		</if>
+	</select>
+
+ 	<select id="queryTotal" resultType="int">
+		select count(*) from mall_shop_error_price_record
+		WHERE 1=1
+		<if test="sku != null and sku.trim() != ''">
+			AND sku = #{sku}
+		</if>
+	</select>
+
+	<insert id="save" parameterType="com.kmall.admin.entity.shop.ShopErrorPriceRecordEntity" useGeneratedKeys="true" keyProperty="mseprId">
+		insert into mall_shop_error_price_record(
+			`merch_sn`,
+			`third_merch_sn`,
+			`shop_sn`,
+			`barcode`,
+			`sku`,
+			`current_price`,
+			`price_type`,
+			`suggested_price`,
+			`check_time`,
+			`verifier`,
+			`creater_sn`,
+			`create_time`,
+			`moder_sn`,
+			`mod_time`,
+			`tstm`)
+		values(
+			#{merchSn},
+			#{thirdMerchSn},
+			#{shopSn},
+			#{barcode},
+			#{sku},
+			#{currentPrice},
+			#{priceType},
+			#{suggestedPrice},
+			#{checkTime},
+			#{verifier},
+			#{createrSn},
+			#{createTime},
+			#{moderSn},
+			#{modTime},
+			#{tstm})
+	</insert>
+
+	<update id="update" parameterType="com.kmall.admin.entity.shop.ShopErrorPriceRecordEntity">
+		update mall_shop_error_price_record
+		<set>
+			<if test="merchSn != null">`merch_sn` = #{merchSn}, </if>
+			<if test="thirdMerchSn != null">`third_merch_sn` = #{thirdMerchSn}, </if>
+			<if test="shopSn != null">`shop_sn` = #{shopSn}, </if>
+			<if test="barcode != null">`barcode` = #{barcode}, </if>
+			<if test="sku != null">`sku` = #{sku}, </if>
+			<if test="currentPrice != null">`current_price` = #{currentPrice}, </if>
+			<if test="priceType != null">`price_type` = #{priceType}, </if>
+			<if test="suggestedPrice != null">`suggested_price` = #{suggestedPrice}, </if>
+			<if test="checkTime != null">`check_time` = #{checkTime}, </if>
+			<if test="verifier != null">`verifier` = #{verifier}, </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 msepr_id = #{mseprId}
+	</update>
+
+	<delete id="delete">
+		delete from mall_shop_error_price_record where msepr_id = #{value}
+	</delete>
+
+	<delete id="deleteBatch">
+		delete from mall_shop_error_price_record where msepr_id in
+		<foreach item="mseprId" collection="array" open="(" separator="," close=")">
+			#{mseprId}
+		</foreach>
+	</delete>
+
+	<insert id="saveBatch" parameterType="java.util.List" useGeneratedKeys="true" keyProperty="id">
+
+		insert into mall_shop_error_price_record(
+		`merch_sn`,
+		`third_merch_sn`,
+		`shop_sn`,
+		`barcode`,
+		`sku`,
+		`current_price`,
+		`price_type`,
+		`suggested_price`,
+		`check_time`,
+		`verifier`,
+		`creater_sn`,
+		`create_time`,
+		`moder_sn`,
+		`mod_time`,
+		`tstm`)
+		values
+		<foreach collection="list" index="index" item="item" separator=",">
+		(
+		#{item.merchSn},
+		#{item.thirdMerchSn},
+		#{item.shopSn},
+		#{item.barcode},
+		#{item.sku},
+		#{item.currentPrice},
+		#{item.priceType},
+		#{item.suggestedPrice},
+		#{item.checkTime},
+		#{item.verifier},
+		#{item.createrSn},
+		#{item.createTime},
+		#{item.moderSn},
+		#{item.modTime},
+		#{item.tstm})
+		</foreach>
+
+	</insert>
+
+</mapper>

+ 1 - 0
kmall-admin/src/main/webapp/WEB-INF/page/compared/taxcomparederror.html

@@ -25,6 +25,7 @@
                 #if($shiro.hasPermission("taxcomparederror:delete"))
                 <i-button type="error" @click="del"><i class="fa fa-trash-o"></i>&nbsp;删除</i-button>
                 #end
+
             </div>
         </Row>
 	    <table id="jqGrid"></table>

+ 1 - 0
kmall-admin/src/main/webapp/WEB-INF/page/compared/taxinfo.html

@@ -19,6 +19,7 @@
                 <i-col span="8">
                     <Date-picker v-model="comparedDate" placeholder="对比日期"/>
                 </i-col>
+                <i-button type="info" @click="clear"><i class="fa fa-plus"></i>&nbsp;清除导入结果</i-button>
                 <i-button type="info" @click="compared"><i class="fa fa-plus"></i>&nbsp;对比</i-button>
                 <i-col style="display: inline-grid;">
                     <Upload :show-upload-list="false" :on-success="uploadExcelSuccess" :on-error="uploadExcelError" :on-format-error="uploadExcelFormatError"

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

@@ -141,6 +141,7 @@
                 #end
 
                 <i-button type="primary" @click="syncGoodsRate"><i class="fa fa-pencil-square-o"></i>&nbsp;同步税率</i-button>
+                <i-button type="primary" @click="checkGoodsPrice"><i class="fa fa-pencil-square-o"></i>&nbsp;校验产品价格</i-button>
 
                 <!--<i-button type="info" @click="goodsExport"><i class="fa fa-plus"></i>&nbsp;商品导入</i-button>-->
                 <!--<i-button type="info" @click="sameGoodsExport"><i class="fa fa-plus"></i>&nbsp;普货商品导入</i-button>-->

+ 93 - 0
kmall-admin/src/main/webapp/WEB-INF/page/shop/shoperrorpricerecord.html

@@ -0,0 +1,93 @@
+<!DOCTYPE html>
+<html>
+<head>
+    <title>门店价格异常记录表</title>
+    #parse("sys/header.html")
+</head>
+<body>
+<div id="rrapp" v-cloak>
+	<div v-show="showList">
+        <Row :gutter="16">
+            <div class="search-group">
+                <i-col span="4">
+                    <i-input v-model="q.name" @on-enter="query" placeholder="名称"/>
+                </i-col>
+                <i-button @click="query">查询</i-button>
+                <i-button @click="reloadSearch">重置</i-button>
+            </div>
+            <div class="buttons-group">
+                #if($shiro.hasPermission("shoperrorpricerecord:save"))
+                <i-button type="info" @click="add"><i class="fa fa-plus"></i>&nbsp;新增</i-button>
+                #end
+                #if($shiro.hasPermission("shoperrorpricerecord:update"))
+                <i-button type="warning" @click="update"><i class="fa fa-pencil-square-o"></i>&nbsp;修改</i-button>
+                #end
+                #if($shiro.hasPermission("shoperrorpricerecord:delete"))
+                <i-button type="error" @click="del"><i class="fa fa-trash-o"></i>&nbsp;删除</i-button>
+                #end
+            </div>
+        </Row>
+	    <table id="jqGrid"></table>
+	    <div id="jqGridPager"></div>
+    </div>
+
+    <Card v-show="!showList">
+        <p slot="title">{{title}}</p>
+		<i-form ref="formValidate" :model="shopErrorPriceRecord" :rules="ruleValidate" :label-width="80">
+            <Form-item label="商户编码" prop="merchSn">
+                <i-input v-model="shopErrorPriceRecord.merchSn" placeholder="商户编码"/>
+            </Form-item>
+            <Form-item label="第三方商户" prop="thirdMerchSn">
+                <i-input v-model="shopErrorPriceRecord.thirdMerchSn" placeholder="第三方商户"/>
+            </Form-item>
+            <Form-item label="门店编码" prop="shopSn">
+                <i-input v-model="shopErrorPriceRecord.shopSn" placeholder="门店编码"/>
+            </Form-item>
+            <Form-item label="条码" prop="barcode">
+                <i-input v-model="shopErrorPriceRecord.barcode" placeholder="条码"/>
+            </Form-item>
+            <Form-item label="sku" prop="sku">
+                <i-input v-model="shopErrorPriceRecord.sku" placeholder="sku"/>
+            </Form-item>
+            <Form-item label="当前价格" prop="currentPrice">
+                <i-input v-model="shopErrorPriceRecord.currentPrice" placeholder="当前价格"/>
+            </Form-item>
+            <Form-item label="价格来源" prop="priceType">
+                <i-input v-model="shopErrorPriceRecord.priceType" placeholder="价格来源"/>
+            </Form-item>
+            <Form-item label="建议价格" prop="suggestedPrice">
+                <i-input v-model="shopErrorPriceRecord.suggestedPrice" placeholder="建议价格"/>
+            </Form-item>
+            <Form-item label="校验时间" prop="checkTime">
+                <i-input v-model="shopErrorPriceRecord.checkTime" placeholder="校验时间"/>
+            </Form-item>
+            <Form-item label="校验人" prop="verifier">
+                <i-input v-model="shopErrorPriceRecord.verifier" placeholder="校验人"/>
+            </Form-item>
+            <Form-item label="创建人编号" prop="createrSn">
+                <i-input v-model="shopErrorPriceRecord.createrSn" placeholder="创建人编号"/>
+            </Form-item>
+            <Form-item label="创建时间,yyyy-MM-dd HH:mm:ss" prop="createTime">
+                <i-input v-model="shopErrorPriceRecord.createTime" placeholder="创建时间,yyyy-MM-dd HH:mm:ss"/>
+            </Form-item>
+            <Form-item label="修改人编号" prop="moderSn">
+                <i-input v-model="shopErrorPriceRecord.moderSn" placeholder="修改人编号"/>
+            </Form-item>
+            <Form-item label="修改时间,yyyy-MM-dd HH:mm:ss" prop="modTime">
+                <i-input v-model="shopErrorPriceRecord.modTime" placeholder="修改时间,yyyy-MM-dd HH:mm:ss"/>
+            </Form-item>
+            <Form-item label="时间戳" prop="tstm">
+                <i-input v-model="shopErrorPriceRecord.tstm" 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>
+                <i-button type="ghost" @click="handleReset('formValidate')" style="margin-left: 8px">重置</i-button>
+            </Form-item>
+        </i-form>
+	</Card>
+</div>
+
+<script src="${rc.contextPath}/js/shop/shoperrorpricerecord.js?_${date.systemTime}"></script>
+</body>
+</html>

+ 8 - 4
kmall-admin/src/main/webapp/js/compared/payorderinfo.js

@@ -93,7 +93,7 @@ let vm = new Vue({
 	},
 	methods: {
 		query: function () {
-			vm.reload();
+			vm.reload(1);
 		},
 		compared: function () {
 			if(vm.comparedDate == ""){
@@ -130,7 +130,7 @@ let vm = new Vue({
                 success: function (r) {
                     if (r.code === 0) {
                         alert('操作成功', function (index) {
-                            vm.reload();
+                            vm.reload(1);
                         });
                     } else {
                         alert(r.msg);
@@ -190,11 +190,15 @@ let vm = new Vue({
             vm.q = {
 				merchOrderSn: ''
             }
-            vm.reload();
+            vm.reload(1);
 		},
 		reload: function (event) {
 			vm.showList = true;
-            let page = $("#jqGrid").jqGrid('getGridParam', 'page');
+
+			let page = event;
+			if (event != 1) {
+				page = $("#jqGrid").jqGrid('getGridParam', 'page');
+			}
 			$("#jqGrid").jqGrid('setGridParam', {
                 postData: {'merchOrderSn': vm.q.merchOrderSn},
                 page: page

+ 12 - 0
kmall-admin/src/main/webapp/js/compared/taxcomparederror.js

@@ -7,6 +7,9 @@ $(function () {
 			{label: '', name: 'merchOrderSn', index: 'merch_order_sn', width: 80},
 			{label: '', name: 'kmallTax', index: 'kmall_tax', width: 80},
 			{label: '', name: 'omsTax', index: 'oms_tax', width: 80},
+			{label: '', name: 'omsTax', index: 'oms_tax', width: 80,formatter:function(value, options, row){
+				return (value - row["kmallTax"]).toFixed(4);
+			}},
 			{label: '', name: 'createTime', index: 'create_time', width: 80}],
 		viewrecords: true,
         height: 550,
@@ -109,6 +112,15 @@ let vm = new Vue({
 				});
 			});
 		},
+		clear:function(){
+			confirm("确认清除数据吗?",function(){
+				$.get("../taxcomparederror/comparedTaxOrder/"+vm.comparedDate, function (r) {
+					alert(r.msg);
+					//vm.mall2OrderingEarlyWarningReminds = r.mall2OrderingEarlyWarningReminds;
+				});
+
+			})
+		},
 		getInfo: function(mtceId){
 			$.get("../taxcomparederror/info/"+mtceId, function (r) {
                 vm.taxComparedError = r.taxComparedError;

+ 28 - 5
kmall-admin/src/main/webapp/js/compared/taxinfo.js

@@ -55,7 +55,7 @@ let vm = new Vue({
 	},
 	methods: {
 		query: function () {
-			vm.reload();
+			vm.reload(1);
 		},
 		add: function () {
 			vm.showList = false;
@@ -82,7 +82,7 @@ let vm = new Vue({
                 success: function (r) {
                     if (r.code === 0) {
                         alert('操作成功', function (index) {
-                            vm.reload();
+                            vm.reload(1);
                         });
                     } else {
                         alert(r.msg);
@@ -143,20 +143,43 @@ let vm = new Vue({
 				alert("请输入对比日期!");
 				return;
 			}
-			$.get("../taxcomparederror/comparedTaxOrder?comparedDate/"+vm.comparedDate, function (r) {
+			$.get("../taxcomparederror/comparedTaxOrder/"+vm.comparedDate, function (r) {
 				alert(r.msg);
 				//vm.mall2OrderingEarlyWarningReminds = r.mall2OrderingEarlyWarningReminds;
 			});
 		},
+		clear:function(){
+			confirm("确认清除数据吗?",function(){
+				$.ajax({
+					type: "POST",
+					url: "../taxinfo/deleteAll",
+					contentType: "application/json",
+					// data: JSON.stringify(mtiIds),
+					success: function (r) {
+						if (r.code == 0) {
+							alert('操作成功', function (index) {
+								$("#jqGrid").trigger("reloadGrid");
+							});
+						} else {
+							alert(r.msg);
+						}
+					}
+				});
+
+			})
+		},
         reloadSearch: function() {
             vm.q = {
 				merchOrderSn: ''
             }
-            vm.reload();
+            vm.reload(1);
 		},
 		reload: function (event) {
 			vm.showList = true;
-            let page = $("#jqGrid").jqGrid('getGridParam', 'page');
+			let page = event;
+			if (event != 1) {
+				page = $("#jqGrid").jqGrid('getGridParam', 'page');
+			}
 			$("#jqGrid").jqGrid('setGridParam', {
                 postData: {'merchOrderSn': vm.q.merchOrderSn},
                 page: page

+ 3 - 3
kmall-admin/src/main/webapp/js/sale/sale.js

@@ -1274,9 +1274,9 @@ function openWebSocket() {
         //注意ws、wss使用不同的端口。我使用自签名的证书测试,
         //无法使用wss,浏览器打开WebSocket时报错
         //ws对应http、wss对应https。
-        // webSocket = new WebSocket("ws://183.3.221.143:8080/ws/server/"+storeId);
-        // webSocket = new WebSocket("ws://8.135.102.238:8080//ws/server/"+storeId);
-        webSocket = new WebSocket("ws://127.0.0.1:8080//ws/server/"+163);
+        // webSocket = new WebSocket("ws://183.62.225.124:8080/ws/server/"+storeId);
+        webSocket = new WebSocket("ws://8.135.102.238:8080//ws/server/"+storeId);
+        // webSocket = new WebSocket("ws://127.0.0.1:8080//ws/server/"+163);
         // webSocket = new WebSocket("wss://cb.k1net.cn/ws/server/"+storeId);
         if (webSocket.readyState === webSocket.CONNECTING) {
             console.log('1.连接正在打开......');

+ 18 - 0
kmall-admin/src/main/webapp/js/shop/goods.js

@@ -38,6 +38,13 @@ $(function () {
                     return '-';
                 }},
             {label: '商品库存', name: 'goodsNumber', index: 'goodsNumber', width: 100, align: 'right'},
+            {label: '待恢复数量', name: 'toBeRestored', index: 'toBeRestored', width: 100, align: 'right',formatter:function(value){
+                if(value || value == null){
+                    return "0";
+                }else{
+                    return value;
+                }
+                }},
             {label: '日常价', name: 'dailyPrice', index: 'dailyPrice', width: 100, align: 'right'},
             {label: '成本价', name: 'costPrice', index: 'costPrice', width: 100, align: 'right'},
             // {label: '零售价格', name: 'retailPrice', index: 'retail_price', width: 80, align: 'center'},
@@ -778,6 +785,17 @@ var vm = new Vue({
             exportFile('#rrapp', '../goods/export', params);
             setTimeout(msg, 1000);
 
+        },
+        checkGoodsPrice:function(){
+            const msg = this.$Message.loading({
+                content: 'Loading...',
+                duration: 0
+            });
+            $.get("../goods/checkGoodsPrice", function (r) {
+                // vm.queryMerch = r.list;
+                alert(r.msg);
+                setTimeout(msg, 1000);
+            });
         }
     },
     mounted() {

+ 170 - 0
kmall-admin/src/main/webapp/js/shop/shoperrorpricerecord.js

@@ -0,0 +1,170 @@
+$(function () {
+    $("#jqGrid").jqGrid({
+        url: '../shoperrorpricerecord/list',
+        datatype: "json",
+        colModel: [
+			{label: 'mseprId', name: 'mseprId', index: 'msepr_id', key: true, hidden: true},
+			{label: '商户编码', name: 'merchSn', index: 'merch_sn', width: 80},
+			{label: '第三方商户', name: 'thirdMerchSn', index: 'third_merch_sn', width: 40, align: 'center'},
+			{label: '门店名称', name: 'shopName', index: 'shop_name', width: 80, align: 'center'},
+			{label: '条码', name: 'barcode', index: 'barcode', width: 60, align: 'center'},
+			{label: 'sku', name: 'sku', index: 'sku', width: 80, align: 'center'},
+			{label: '当前价格', name: 'currentPrice', index: 'current_price', width: 40, align: 'center'},
+			{label: '价格来源', name: 'priceType', index: 'price_type', width: 80, align: 'center',formatter:function(value ){
+				if (value == 1){
+					return "门店商品";
+				}else if (value == 2){
+					return "日常活动";
+				}else if (value == 3){
+					return "临时促销";
+				}
+				}},
+			{label: '建议价格', name: 'suggestedPrice', index: 'suggested_price', width: 220},
+			{label: '校验时间', name: 'checkTime', index: 'check_time', width: 70, align: 'center',formatter:function(value){
+
+					var time = new Date(value);
+					var y = time.getFullYear();
+					var m = time.getMonth()+1;
+					var d = time.getDate();
+					var h = time.getHours();
+					var mm = time.getMinutes();
+					var s = time.getSeconds();
+					return y+'-'+add0(m)+'-'+add0(d)+' '+add0(h)+':'+add0(mm)+':'+add0(s);
+
+				}},
+
+			],
+		viewrecords: true,
+        height: 550,
+        rowNum: 10,
+        rowList: [10, 30, 50],
+        rownumbers: true,
+        rownumWidth: 25,
+        autowidth: true,
+        multiselect: true,
+        pager: "#jqGridPager",
+        jsonReader: {
+            root: "page.list",
+            page: "page.currPage",
+            total: "page.totalPage",
+            records: "page.totalCount"
+        },
+        prmNames: {
+            page: "page",
+            rows: "limit",
+            order: "order"
+        },
+        gridComplete: function () {
+            $("#jqGrid").closest(".ui-jqgrid-bdiv").css({"overflow-x": "hidden"});
+        }
+    });
+});
+
+let vm = new Vue({
+	el: '#rrapp',
+	data: {
+        showList: true,
+        title: null,
+		shopErrorPriceRecord: {},
+		ruleValidate: {
+			name: [
+				{required: true, message: '名称不能为空', trigger: 'blur'}
+			]
+		},
+		q: {
+		    name: ''
+		}
+	},
+	methods: {
+		query: function () {
+			vm.reload();
+		},
+		add: function () {
+			vm.showList = false;
+			vm.title = "新增";
+			vm.shopErrorPriceRecord = {};
+		},
+		update: function (event) {
+            let mseprId = getSelectedRow();
+			if (mseprId == null) {
+				return;
+			}
+			vm.showList = false;
+            vm.title = "修改";
+
+            vm.getInfo(mseprId)
+		},
+		saveOrUpdate: function (event) {
+            let url = vm.shopErrorPriceRecord.mseprId == null ? "../shoperrorpricerecord/save" : "../shoperrorpricerecord/update";
+			$.ajax({
+				type: "POST",
+			    url: url,
+			    contentType: "application/json",
+			    data: JSON.stringify(vm.shopErrorPriceRecord),
+                success: function (r) {
+                    if (r.code === 0) {
+                        alert('操作成功', function (index) {
+                            vm.reload();
+                        });
+                    } else {
+                        alert(r.msg);
+                    }
+                }
+			});
+		},
+		del: function (event) {
+            let mseprIds = getSelectedRows();
+			if (mseprIds == null){
+				return;
+			}
+
+			confirm('确定要删除选中的记录?', function () {
+				$.ajax({
+					type: "POST",
+				    url: "../shoperrorpricerecord/delete",
+				    contentType: "application/json",
+				    data: JSON.stringify(mseprIds),
+				    success: function (r) {
+						if (r.code == 0) {
+							alert('操作成功', function (index) {
+								$("#jqGrid").trigger("reloadGrid");
+							});
+						} else {
+							alert(r.msg);
+						}
+					}
+				});
+			});
+		},
+		getInfo: function(mseprId){
+			$.get("../shoperrorpricerecord/info/"+mseprId, function (r) {
+                vm.shopErrorPriceRecord = r.shopErrorPriceRecord;
+            });
+		},
+        reloadSearch: function() {
+            vm.q = {
+                name: ''
+            }
+            vm.reload();
+		},
+		reload: function (event) {
+			vm.showList = true;
+            let page = $("#jqGrid").jqGrid('getGridParam', 'page');
+			$("#jqGrid").jqGrid('setGridParam', {
+                postData: {'name': vm.q.name},
+                page: page
+            }).trigger("reloadGrid");
+            vm.handleReset('formValidate');
+		},
+        handleSubmit: function (name) {
+            handleSubmitValidate(this, name, function () {
+                vm.saveOrUpdate()
+            });
+        },
+        handleReset: function (name) {
+            handleResetForm(this, name);
+        }
+	}
+});
+
+function add0(m){return m<10?'0'+m:m }

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

@@ -52,6 +52,13 @@ $(function () {
                 }},
             {label: '门店库存', name: 'stockNum', index: 'stockNum', width: 80, align: 'center'},
             {label: '园区库存', name: 'parkStock', index: 'parkStock', width: 80, align: 'center'},
+            {label: '待恢复数量', name: 'toBeRestored', index: 'toBeRestored', width: 100, align: 'right',formatter:function(value){
+                    if(value || value == null){
+                        return "0";
+                    }else{
+                        return value;
+                    }
+                }},
             {label: '零售价格', name: 'retailPrice', index: 'retailPrice', width: 80, align: 'right'},
             {label: '市场价', name: 'marketPrice', index: 'marketPrice', width: 80, align: 'right'},
             {label: '底线价格', name: 'bottomLinePrice', index: 'bottomLinePrice', width: 80, align: 'right',formatter: function (value) {