Bladeren bron

Merge branch 'master' of zcb/kmall-pt-general into master

张创标 4 jaren geleden
bovenliggende
commit
33c67bdbe5
50 gewijzigde bestanden met toevoegingen van 1539 en 320 verwijderingen
  1. 38 19
      kmall-admin/src/main/java/com/kmall/admin/controller/OrderController.java
  2. 71 9
      kmall-admin/src/main/java/com/kmall/admin/controller/SalesDataUploadController.java
  3. 107 0
      kmall-admin/src/main/java/com/kmall/admin/controller/TaxErrorRecordController.java
  4. 4 0
      kmall-admin/src/main/java/com/kmall/admin/dao/GoodsDao.java
  5. 1 1
      kmall-admin/src/main/java/com/kmall/admin/dao/MkActivitiesCouponDao.java
  6. 1 1
      kmall-admin/src/main/java/com/kmall/admin/dao/MkActivitiesDiscountDao.java
  7. 1 1
      kmall-admin/src/main/java/com/kmall/admin/dao/MkActivitiesFullGiftDao.java
  8. 1 1
      kmall-admin/src/main/java/com/kmall/admin/dao/MkActivitiesFullReductionDao.java
  9. 1 1
      kmall-admin/src/main/java/com/kmall/admin/dao/MkActivitiesGetOneFreeGoodsDao.java
  10. 2 3
      kmall-admin/src/main/java/com/kmall/admin/dao/MkActivitiesHalfPriceDao.java
  11. 1 1
      kmall-admin/src/main/java/com/kmall/admin/dao/MkActivitiesPromotionDao.java
  12. 1 1
      kmall-admin/src/main/java/com/kmall/admin/dao/MkDailyActivitiesDao.java
  13. 16 0
      kmall-admin/src/main/java/com/kmall/admin/dao/TaxErrorRecordDao.java
  14. 52 0
      kmall-admin/src/main/java/com/kmall/admin/dto/GoodsDetailsDto.java
  15. 9 0
      kmall-admin/src/main/java/com/kmall/admin/dto/SystemFormatDto.java
  16. 171 0
      kmall-admin/src/main/java/com/kmall/admin/entity/TaxErrorRecordEntity.java
  17. 5 0
      kmall-admin/src/main/java/com/kmall/admin/service/GoodsService.java
  18. 1 2
      kmall-admin/src/main/java/com/kmall/admin/service/MkActivitiesCouponService.java
  19. 1 2
      kmall-admin/src/main/java/com/kmall/admin/service/MkActivitiesDiscountService.java
  20. 1 2
      kmall-admin/src/main/java/com/kmall/admin/service/MkActivitiesFullGiftService.java
  21. 1 2
      kmall-admin/src/main/java/com/kmall/admin/service/MkActivitiesFullReductionService.java
  22. 1 2
      kmall-admin/src/main/java/com/kmall/admin/service/MkActivitiesGetOneFreeGoodsService.java
  23. 1 1
      kmall-admin/src/main/java/com/kmall/admin/service/MkActivitiesHalfPriceService.java
  24. 1 1
      kmall-admin/src/main/java/com/kmall/admin/service/MkActivitiesPromotionService.java
  25. 1 1
      kmall-admin/src/main/java/com/kmall/admin/service/MkDailyActivitiesService.java
  26. 73 0
      kmall-admin/src/main/java/com/kmall/admin/service/TaxErrorRecordService.java
  27. 43 28
      kmall-admin/src/main/java/com/kmall/admin/service/impl/GoodsServiceImpl.java
  28. 2 4
      kmall-admin/src/main/java/com/kmall/admin/service/impl/MkActivitiesCouponServiceImpl.java
  29. 2 4
      kmall-admin/src/main/java/com/kmall/admin/service/impl/MkActivitiesDiscountServiceImpl.java
  30. 1 4
      kmall-admin/src/main/java/com/kmall/admin/service/impl/MkActivitiesFullGiftServiceImpl.java
  31. 2 5
      kmall-admin/src/main/java/com/kmall/admin/service/impl/MkActivitiesFullReductionServiceImpl.java
  32. 1 4
      kmall-admin/src/main/java/com/kmall/admin/service/impl/MkActivitiesGetOneFreeGoodsServiceImpl.java
  33. 2 5
      kmall-admin/src/main/java/com/kmall/admin/service/impl/MkActivitiesHalfPriceServiceImpl.java
  34. 5 6
      kmall-admin/src/main/java/com/kmall/admin/service/impl/MkActivitiesPromotionServiceImpl.java
  35. 2 5
      kmall-admin/src/main/java/com/kmall/admin/service/impl/MkDailyActivitiesServiceImpl.java
  36. 185 184
      kmall-admin/src/main/java/com/kmall/admin/service/impl/OrderServiceImpl.java
  37. 59 0
      kmall-admin/src/main/java/com/kmall/admin/service/impl/TaxErrorRecordServiceImpl.java
  38. 4 4
      kmall-admin/src/main/java/com/kmall/admin/service/impl/mk/MkActivitiesServiceImpl.java
  39. 268 0
      kmall-admin/src/main/java/com/kmall/admin/utils/CalculateTax.java
  40. 1 1
      kmall-admin/src/main/resources/logback.xml
  41. 17 6
      kmall-admin/src/main/resources/mybatis/mapper/GoodsDao.xml
  42. 1 1
      kmall-admin/src/main/resources/mybatis/mapper/MkActivitiesPromotionDao.xml
  43. 3 2
      kmall-admin/src/main/resources/mybatis/mapper/OrderDao.xml
  44. 117 0
      kmall-admin/src/main/resources/mybatis/mapper/TaxErrorRecordDao.xml
  45. 3 0
      kmall-admin/src/main/webapp/WEB-INF/page/shop/offilineOrderList.html
  46. 72 0
      kmall-admin/src/main/webapp/WEB-INF/page/shop/taxerrorrecord.html
  47. 1 1
      kmall-admin/src/main/webapp/js/sale/sale.js
  48. 35 4
      kmall-admin/src/main/webapp/js/sale/salesdataupload.js
  49. 4 1
      kmall-admin/src/main/webapp/js/shop/offilineOrderList.js
  50. 146 0
      kmall-admin/src/main/webapp/js/shop/taxerrorrecord.js

+ 38 - 19
kmall-admin/src/main/java/com/kmall/admin/controller/OrderController.java

@@ -5,6 +5,7 @@ import com.kmall.admin.dto.SystemFormatDto;
 import com.kmall.admin.entity.*;
 import com.kmall.admin.fromcomm.entity.SysUserEntity;
 import com.kmall.admin.service.*;
+import com.kmall.admin.utils.CalculateTax;
 import com.kmall.admin.utils.ParamUtils;
 import com.kmall.admin.utils.ShiroUtils;
 import com.kmall.common.constant.Dict;
@@ -76,6 +77,8 @@ public class OrderController {
     private volatile Integer code = 1;
     @Autowired
     private UserService userService;
+    @Autowired
+    private GoodsService goodsService;
 
     /**
      * 列表
@@ -667,10 +670,15 @@ public class OrderController {
             List<OrderGoodsEntity> goodsList = orderGoodsService.queryList(map);
 
             for (OrderGoodsEntity orderGoodsEntity : goodsList) {
-                tax = tax
-                        .add(orderGoodsEntity.getMarketPrice() // 商品价格
-                        .multiply(orderGoodsEntity.getGoodsRate())  // 商品税率
-                        .multiply(new BigDecimal(orderGoodsEntity.getNumber()))).setScale(2,RoundingMode.HALF_UP); // 商品数量
+                GoodsEntity goodsEntity = goodsService.queryObject(orderGoodsEntity.getGoodsId());
+                BigDecimal goodsTax = CalculateTax.calculateFinalTax(goodsEntity,orderGoodsEntity.getMarketPrice(),goodsService).setScale(3,RoundingMode.HALF_UP);
+                goodsTax = goodsTax.multiply(new BigDecimal(orderGoodsEntity.getNumber())).setScale(2,RoundingMode.HALF_UP);
+                orderGoodsEntity.setTax(goodsTax);
+                tax = tax.add(goodsTax).setScale(2,RoundingMode.HALF_UP);
+
+//                BigDecimal goodsTax = orderGoodsEntity.getMarketPrice().divide(new BigDecimal(1).add(orderGoodsEntity.getGoodsRate()),2,RoundingMode.HALF_DOWN).multiply(orderGoodsEntity.getGoodsRate())
+//                        .multiply(new BigDecimal(orderGoodsEntity.getNumber())).setScale(2,RoundingMode.HALF_DOWN);
+//                tax = tax.add(goodsTax).setScale(2,RoundingMode.HALF_UP);
             }
             orderEntity.setTax(tax);
         }
@@ -691,14 +699,18 @@ public class OrderController {
         List<OrderGoodsEntity> goodsList = order.getOrderGoodsEntityList();
 
         for (OrderGoodsEntity orderGoodsEntity : goodsList) {
-
-            BigDecimal goodsTax = orderGoodsEntity.getMarketPrice() // 商品价格
-                                    .multiply(orderGoodsEntity.getGoodsRate())  // 商品税率
-                                    .multiply(new BigDecimal(orderGoodsEntity.getNumber()));// 商品数量
+            GoodsEntity goodsEntity = goodsService.queryObject(orderGoodsEntity.getGoodsId());
+            BigDecimal goodsTax = CalculateTax.calculateFinalTax(goodsEntity,orderGoodsEntity.getMarketPrice(),goodsService).setScale(3,RoundingMode.HALF_UP);
+            goodsTax = goodsTax.multiply(new BigDecimal(orderGoodsEntity.getNumber())).setScale(2,RoundingMode.HALF_UP);
             orderGoodsEntity.setTax(goodsTax);
             tax = tax.add(goodsTax).setScale(2,RoundingMode.HALF_UP);
 
-            orderGoodsEntity.setTax(goodsTax);
+//            BigDecimal goodsTax = orderGoodsEntity.getMarketPrice().divide(new BigDecimal(1).add(orderGoodsEntity.getGoodsRate()),2,RoundingMode.HALF_DOWN).multiply(orderGoodsEntity.getGoodsRate())
+//                    .multiply(new BigDecimal(orderGoodsEntity.getNumber())).setScale(2,RoundingMode.HALF_DOWN);
+//            orderGoodsEntity.setTax(goodsTax);
+//
+//            tax = tax.add(goodsTax).setScale(2,RoundingMode.HALF_UP);
+
         }
         order.setTax(tax);
         order.setPayRecordList(payRecords);
@@ -1085,9 +1097,13 @@ public class OrderController {
             BigDecimal retailPrice = orderGoodsEntity.getRetailPrice();
             BigDecimal goodsRate = orderGoodsEntity.getGoodsRate();
             Integer number = orderGoodsEntity.getNumber();
-            BigDecimal goodsTax = retailPrice.divide(new BigDecimal(1).add(goodsRate),2,RoundingMode.HALF_DOWN).multiply(goodsRate).multiply(new BigDecimal(number)).setScale(0,RoundingMode.HALF_DOWN);
+
+            GoodsEntity goodsEntity = goodsService.queryObject(orderGoodsEntity.getGoodsId());
+            BigDecimal goodsTax = CalculateTax.calculateFinalTax(goodsEntity,retailPrice,goodsService).setScale(3,RoundingMode.HALF_UP);
+            goodsTax = goodsTax.multiply(new BigDecimal(number)).setScale(2,RoundingMode.HALF_UP);
             orderGoodsEntity.setTax(goodsTax);
-            tax = tax.add(goodsTax);
+            tax = tax.add(goodsTax).setScale(2,RoundingMode.HALF_UP);
+//            BigDecimal goodsTax = retailPrice.divide(new BigDecimal(1).add(goodsRate),2,RoundingMode.HALF_DOWN).multiply(goodsRate).multiply(new BigDecimal(number)).setScale(0,RoundingMode.HALF_DOWN);
         }
         String response = null;
 
@@ -1096,10 +1112,6 @@ public class OrderController {
             String url = OmsMerchPropertiesBuilder.instance().getWxOrderResendUrl() + "/"+orderSn;
             // 同步访问,返回结果字符串
             response = OkHttpUtils.post(map, url, "SSL");
-//            ResponseData responseData = JacksonUtils.fromStringJson(response, ResponseData.class);
-//            if(responseData.getCode().equalsIgnoreCase("0")){
-//                List<WxOrderEntity> list = responseData.getData().getRows();
-//            }
         } catch (Exception e) {
             logger.error("查询失败。"+e.getMessage());
         }
@@ -1309,17 +1321,24 @@ public class OrderController {
             for (SystemFormatDto systemFormat : systemFormatList) {
                 LinkedHashMap<String, Object> map = new LinkedHashMap<>(32);
                 if (Objects.nonNull(systemFormat.getTaxRate()) && Objects.nonNull(systemFormat.getTotalSalesInclTax())){
+
+
+                    BigDecimal unitSold = new BigDecimal(systemFormat.getUnitSold());
+
                     // 设置综合税额
                     BigDecimal totalSalesIncTax = new BigDecimal(systemFormat.getTotalSalesInclTax());
-                    BigDecimal taxRate = new BigDecimal(systemFormat.getTaxRate());
-                    systemFormat.setSales(totalSalesIncTax.divide(new BigDecimal(1).add(taxRate),4,RoundingMode.HALF_UP).setScale(2,BigDecimal.ROUND_HALF_UP).toString());
+//                    BigDecimal taxRate = new BigDecimal(systemFormat.getTaxRate());
+                    GoodsEntity goodsEntity = goodsService.queryObject(systemFormat.getGoodsId());
+                    BigDecimal goodsTax = CalculateTax.calculateFinalTax(goodsEntity,totalSalesIncTax.divide(unitSold,2,RoundingMode.HALF_UP),goodsService).setScale(3,RoundingMode.HALF_UP);
+                    goodsTax = goodsTax.multiply(unitSold).setScale(2,RoundingMode.HALF_UP);
+
+                    systemFormat.setSales(totalSalesIncTax.subtract(goodsTax).setScale(2,BigDecimal.ROUND_HALF_UP).toString());
                     systemFormat.setTaxAmount(totalSalesIncTax.subtract(new BigDecimal(systemFormat.getSales())).setScale(2,BigDecimal.ROUND_HALF_UP).toString());
 
                     // 设置实际销售额
-                    BigDecimal unitSold = new BigDecimal(systemFormat.getUnitSold());
                     systemFormat.setCurrentPrice(totalSalesIncTax.divide(unitSold,2,BigDecimal.ROUND_HALF_UP).setScale(2,BigDecimal.ROUND_HALF_UP).toEngineeringString());
                     if (Dict.orderStatus.item_401.getItem().equals(systemFormat.getOrderStatus())){
-                        systemFormat.setUnitSold("-"+systemFormat.getUnitSold());
+                        systemFormat.setUnitSold("-"+ unitSold);
                         systemFormat.setSales("-"+systemFormat.getSales());
                         systemFormat.setTaxAmount("-"+systemFormat.getTaxAmount());
                         systemFormat.setTotalSalesInclTax("-"+systemFormat.getTotalSalesInclTax());

+ 71 - 9
kmall-admin/src/main/java/com/kmall/admin/controller/SalesDataUploadController.java

@@ -1,8 +1,14 @@
 package com.kmall.admin.controller;
 
+import java.io.BufferedInputStream;
+import java.io.BufferedOutputStream;
+import java.io.ByteArrayInputStream;
 import java.net.InetAddress;
+import java.net.URLEncoder;
 import java.text.SimpleDateFormat;
 import java.util.*;
+import java.util.zip.ZipEntry;
+import java.util.zip.ZipOutputStream;
 
 import com.kmall.admin.entity.SalesDataDownloadEntity;
 import com.kmall.admin.entity.SalesDataUploadEntity;
@@ -19,6 +25,8 @@ import org.springframework.stereotype.Controller;
 import org.springframework.web.bind.annotation.*;
 import org.springframework.web.multipart.MultipartFile;
 
+import javax.servlet.http.HttpServletResponse;
+
 /**
  * 销售数据上传表Controller
  *
@@ -155,19 +163,73 @@ public class SalesDataUploadController {
      * @throws Exception
      */
     @RequestMapping("/download")
-    public ResponseEntity<byte[]> download(@RequestParam("filePath") String filePath, @RequestParam("fileName") String fileName, @RequestParam("fileId") String fileId) throws Exception {
+    public ResponseEntity<byte[]> download(
+            HttpServletResponse response,
+            @RequestParam("filePath") String filePath, @RequestParam("fileName") String fileName, @RequestParam("fileId") String fileId) throws Exception {
         if(StringUtils.isNotEmpty(filePath)){
-            SalesDataDownloadEntity salesDataDownloadEntity = new SalesDataDownloadEntity();
-            salesDataDownloadEntity.setFileId(Integer.valueOf(fileId));
-            salesDataDownloadEntity.setDownloadSn(ShiroUtils.getUserId().intValue());
-            salesDataDownloadEntity.setDownloadTime(new Date());
 
-            InetAddress localHost = InetAddress.getLocalHost();
-            salesDataDownloadEntity.setDownloadIP(localHost.getHostAddress());
-            salesDataUploadService.saveSalesDownload(salesDataDownloadEntity);
+            Map<String, byte[]> files = new HashMap<String, byte[]>();
+
+            String[] filePaths = filePath.split(",");
+            String[] fileNames = fileName.split(",");
+            String[] fileIds = fileId.split(",");
+
+
+            for(int i = 0 ; i < filePaths.length ; i++){
+                SalesDataDownloadEntity salesDataDownloadEntity = new SalesDataDownloadEntity();
+                salesDataDownloadEntity.setFileId(Integer.valueOf(fileIds[i]));
+                salesDataDownloadEntity.setDownloadSn(ShiroUtils.getUserId().intValue());
+                salesDataDownloadEntity.setDownloadTime(new Date());
 
-            return FileManager.download(filePath, fileName.substring(0,fileName.lastIndexOf(".")));
+                InetAddress localHost = InetAddress.getLocalHost();
+                salesDataDownloadEntity.setDownloadIP(localHost.getHostAddress());
+                salesDataUploadService.saveSalesDownload(salesDataDownloadEntity);
+
+                ResponseEntity<byte[]> download = FileManager.download(filePaths[i], fileNames[i].substring(0, fileNames[i].lastIndexOf(".")));
+                byte[] msg = download.getBody();
+                files.put(fileNames[i],msg);
+            }
+
+
+            downloadBatchByFile(response,files,"CW保税+新零售销售额统计.zip");
         }
         return null;
     }
+
+
+
+    /**
+     * 根据文件,进行压缩,批量下载
+     * @param response
+     * @param files
+     * @throws Exception
+     */
+    public void downloadBatchByFile(HttpServletResponse response, Map<String, byte[]> files, String zipName){
+        try{
+            response.setContentType("application/x-msdownload");
+            response.setHeader("content-disposition", "attachment;filename="+ URLEncoder.encode(zipName, "utf-8"));
+
+            ZipOutputStream zos = new ZipOutputStream(response.getOutputStream());
+            BufferedOutputStream bos = new BufferedOutputStream(zos);
+
+            for(Map.Entry<String, byte[]> entry : files.entrySet()){
+                String fileName = entry.getKey();            //每个zip文件名
+                byte[]    file = entry.getValue();            //这个zip文件的字节
+
+                BufferedInputStream bis = new BufferedInputStream(new ByteArrayInputStream(file));
+                zos.putNextEntry(new ZipEntry(fileName));
+
+                int len = 0;
+                byte[] buf = new byte[10 * 1024];
+                while( (len=bis.read(buf, 0, buf.length)) != -1){
+                    bos.write(buf, 0, len);
+                }
+                bis.close();
+                bos.flush();
+            }
+            bos.close();
+        }catch(Exception e){
+            e.printStackTrace();
+        }
+    }
 }

+ 107 - 0
kmall-admin/src/main/java/com/kmall/admin/controller/TaxErrorRecordController.java

@@ -0,0 +1,107 @@
+package com.kmall.admin.controller;
+
+import java.util.List;
+import java.util.Map;
+
+import com.kmall.admin.entity.TaxErrorRecordEntity;
+import com.kmall.admin.service.TaxErrorRecordService;
+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 2020-12-18 14:37:40
+ */
+@Controller
+@RequestMapping("taxerrorrecord")
+public class TaxErrorRecordController {
+    @Autowired
+    private TaxErrorRecordService taxErrorRecordService;
+
+    /**
+     * 查看列表
+     */
+    @RequestMapping("/list")
+    @RequiresPermissions("taxerrorrecord:list")
+    @ResponseBody
+    public R list(@RequestParam Map<String, Object> params) {
+        //查询列表数据
+        Query query = new Query(params);
+
+        List<TaxErrorRecordEntity> taxErrorRecordList = taxErrorRecordService.queryList(query);
+        int total = taxErrorRecordService.queryTotal(query);
+
+        PageUtils pageUtil = new PageUtils(taxErrorRecordList, total, query.getLimit(), query.getPage());
+
+        return R.ok().put("page", pageUtil);
+    }
+
+    /**
+     * 查看信息
+     */
+    @RequestMapping("/info/{id}")
+    @RequiresPermissions("taxerrorrecord:info")
+    @ResponseBody
+    public R info(@PathVariable("id") Integer id) {
+        TaxErrorRecordEntity taxErrorRecord = taxErrorRecordService.queryObject(id);
+
+        return R.ok().put("taxErrorRecord", taxErrorRecord);
+    }
+
+    /**
+     * 保存
+     */
+    @RequestMapping("/save")
+    @RequiresPermissions("taxerrorrecord:save")
+    @ResponseBody
+    public R save(@RequestBody TaxErrorRecordEntity taxErrorRecord) {
+        taxErrorRecordService.save(taxErrorRecord);
+
+        return R.ok();
+    }
+
+    /**
+     * 修改
+     */
+    @RequestMapping("/update")
+    @RequiresPermissions("taxerrorrecord:update")
+    @ResponseBody
+    public R update(@RequestBody TaxErrorRecordEntity taxErrorRecord) {
+        taxErrorRecordService.update(taxErrorRecord);
+
+        return R.ok();
+    }
+
+    /**
+     * 删除
+     */
+    @RequestMapping("/delete")
+    @RequiresPermissions("taxerrorrecord:delete")
+    @ResponseBody
+    public R delete(@RequestBody Integer[]ids) {
+        taxErrorRecordService.deleteBatch(ids);
+
+        return R.ok();
+    }
+
+    /**
+     * 查看所有列表
+     */
+    @RequestMapping("/queryAll")
+    @ResponseBody
+    public R queryAll(@RequestParam Map<String, Object> params) {
+
+        List<TaxErrorRecordEntity> list = taxErrorRecordService.queryList(params);
+
+        return R.ok().put("list", list);
+    }
+}

+ 4 - 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.TaxErrorRecordEntity;
 import com.kmall.api.entity.exportpdf.PDFGoodsDto;
 import com.kmall.manager.dao.BaseDao;
 import org.apache.ibatis.annotations.Param;
@@ -71,4 +72,7 @@ public interface GoodsDao extends BaseDao<GoodsEntity> {
     List<GoodsEntity> queryNonSyncOmsGoodsRateSkuList();
 
     List<GoodsEntity> queryAllList();
+
+    GoodsEntity queryByBarcodeAndSku(@Param("prodBarcode") String prodBarcode, @Param("goodsSn") String goodsSn);
+
 }

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

@@ -19,7 +19,7 @@ public interface MkActivitiesCouponDao extends BaseDao<MkActivitiesCouponEntity>
      * @param prodBarcode
      * @return
      */
-    MkActivitiesCouponEntity queryByBarCode(@Param("mkaId") Long mkaId,
+    MkActivitiesCouponEntity queryByBarCode(@Param("mkaId") String mkaId,
                                             @Param("prodBarcode") String prodBarcode
                                             , @Param("currentTime") String currentTime);
 

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

@@ -21,5 +21,5 @@ public interface MkActivitiesDiscountDao extends BaseDao<MkActivitiesDiscountEnt
      * @param prodBarcode
      * @return
      */
-    MkActivitiesDiscountEntity queryByBarCode(@Param("mkaId") Long mkaId, @Param("prodBarcode") String prodBarcode);
+    MkActivitiesDiscountEntity queryByBarCode(@Param("mkaId") String mkaId, @Param("prodBarcode") String prodBarcode);
 }

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

@@ -22,7 +22,7 @@ public interface MkActivitiesFullGiftDao extends BaseDao<MkActivitiesFullGiftEnt
      * @param nowTime
      * @return
      */
-    MkActivitiesFullGiftEntity queryByCodeOrBrand(@Param("mkaId") Long mkaId,
+    MkActivitiesFullGiftEntity queryByCodeOrBrand(@Param("mkaId") String mkaId,
                                                   @Param("prodBarcode") String prodBarcode,
                                                   @Param("brandName") String brandName,
                                                   @Param("nowTime") String nowTime);

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

@@ -21,7 +21,7 @@ public interface MkActivitiesFullReductionDao extends BaseDao<MkActivitiesFullRe
      * @param brandName
      * @return
      */
-    MkActivitiesFullReductionEntity queryByCodeOrBrand(@Param("mkaId") Long mkaId,
+    MkActivitiesFullReductionEntity queryByCodeOrBrand(@Param("mkaId") String mkaId,
                                                        @Param("prodBarcode") String prodBarcode,
                                                        @Param("brandName") String brandName,
                                                        @Param("deadline") String deadline);

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

@@ -22,7 +22,7 @@ public interface MkActivitiesGetOneFreeGoodsDao extends BaseDao<MkActivitiesGetO
      * @param brandName
      * @return
      */
-    MkActivitiesGetOneFreeGoodsEntity queryByCodeOrBrand(@Param("mkaId") Long mkaId,
+    MkActivitiesGetOneFreeGoodsEntity queryByCodeOrBrand(@Param("mkaId") String mkaId,
                                                          @Param("prodBarcode") String prodBarcode,
                                                          @Param("brandName") String brandName);
 }

+ 2 - 3
kmall-admin/src/main/java/com/kmall/admin/dao/MkActivitiesHalfPriceDao.java

@@ -1,7 +1,6 @@
 package com.kmall.admin.dao;
 
 
-import com.kmall.admin.entity.MkActivitiesFullReductionEntity;
 import com.kmall.admin.entity.MkActivitiesHalfPriceEntity;
 import com.kmall.manager.dao.BaseDao;
 import org.apache.ibatis.annotations.Param;
@@ -17,11 +16,11 @@ public interface MkActivitiesHalfPriceDao extends BaseDao<MkActivitiesHalfPriceE
 
     /**
      * 根据品牌或条形码查询是否有对应的满减活动
+     * @param brandName
      * @param mkaId
      * @param prodBarcode
-     * @param brandName
      * @return
      */
-    MkActivitiesHalfPriceEntity queryByCodeOrBrand(@Param("mkaId") Long mkaId,
+    MkActivitiesHalfPriceEntity queryByCodeOrBrand(@Param("mkaId") String mkaId,
                                                        @Param("prodBarcode") String prodBarcode);
 }

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

@@ -20,6 +20,6 @@ public interface MkActivitiesPromotionDao extends BaseDao<MkActivitiesPromotionE
      * @param prodBarcode
      * @return
      */
-    MkActivitiesPromotionEntity queryByBarCode(@Param("mkaId") Long mkaId,
+    MkActivitiesPromotionEntity queryByBarCode(@Param("mkaId") String mkaId,
                                                @Param("prodBarcode") String prodBarcode);
 }

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

@@ -20,6 +20,6 @@ public interface MkDailyActivitiesDao extends BaseDao<MkDailyActivitiesEntity> {
      * @param prodBarcode
      * @return
      */
-    MkDailyActivitiesEntity queryByBarCode(@Param("mkaId") Long mkaId,
+    MkDailyActivitiesEntity queryByBarCode(@Param("mkaId") String mkaId,
                                            @Param("prodBarcode") String prodBarcode);
 }

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

@@ -0,0 +1,16 @@
+package com.kmall.admin.dao;
+
+
+import com.kmall.admin.entity.TaxErrorRecordEntity;
+import com.kmall.manager.dao.BaseDao;
+
+/**
+ * 税款异常记录表Dao
+ *
+ * @author emato
+ * @email admin@qhdswl.com
+ * @date 2020-12-18 14:37:40
+ */
+public interface TaxErrorRecordDao extends BaseDao<TaxErrorRecordEntity> {
+
+}

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

@@ -44,6 +44,16 @@ public class GoodsDetailsDto {
     // 活动类别
     private String activity;
 
+    private String hsCode;
+
+    private String hsCodeName;
+
+    private BigDecimal legalUnit1Qty;
+
+    private BigDecimal legalUnit2Qty;
+
+    private String ciqProdModel;
+
     public String getStockNum() {
         return stockNum;
     }
@@ -163,4 +173,46 @@ public class GoodsDetailsDto {
     public void setActualPaymentAmount(BigDecimal actualPaymentAmount) {
         this.actualPaymentAmount = actualPaymentAmount;
     }
+
+    public String getHsCode() {
+        return hsCode;
+    }
+
+    public void setHsCode(String hsCode) {
+        this.hsCode = hsCode;
+    }
+
+    public BigDecimal getLegalUnit1Qty() {
+        return legalUnit1Qty;
+    }
+
+    public void setLegalUnit1Qty(BigDecimal legalUnit1Qty) {
+        this.legalUnit1Qty = legalUnit1Qty;
+    }
+
+    public BigDecimal getLegalUnit2Qty() {
+        return legalUnit2Qty;
+    }
+
+    public void setLegalUnit2Qty(BigDecimal legalUnit2Qty) {
+        this.legalUnit2Qty = legalUnit2Qty;
+    }
+
+    public String getCiqProdModel() {
+        return ciqProdModel;
+    }
+
+    public String getHsCodeName() {
+        return hsCodeName;
+    }
+
+    public void setHsCodeName(String hsCodeName) {
+        this.hsCodeName = hsCodeName;
+    }
+
+    public void setCiqProdModel(String ciqProdModel) {
+        this.ciqProdModel = ciqProdModel;
+    }
+
+
 }

+ 9 - 0
kmall-admin/src/main/java/com/kmall/admin/dto/SystemFormatDto.java

@@ -42,6 +42,7 @@ public class SystemFormatDto implements Serializable {
     private String transactionType;// 销售类型
     private String saleReturnType;// 退货类型
     private String remark;// 备注
+    private Integer goodsId; // 商品id
 
     private String orderStatus;//订单状态
 
@@ -309,4 +310,12 @@ public class SystemFormatDto implements Serializable {
     public void setRemark(String remark) {
         this.remark = remark;
     }
+
+    public Integer getGoodsId() {
+        return goodsId;
+    }
+
+    public void setGoodsId(Integer goodsId) {
+        this.goodsId = goodsId;
+    }
 }

+ 171 - 0
kmall-admin/src/main/java/com/kmall/admin/entity/TaxErrorRecordEntity.java

@@ -0,0 +1,171 @@
+package com.kmall.admin.entity;
+
+import java.io.Serializable;
+import java.util.Date;
+
+/**
+ * 税款异常记录表实体
+ * 表名 mall_tax_error_record
+ *
+ * @author emato
+ * @email admin@qhdswl.com
+ * @date 2020-12-18 14:37:40
+ */
+public class TaxErrorRecordEntity implements Serializable {
+    private static final long serialVersionUID = 1L;
+
+    /**
+     * 编号
+     */
+    private Integer id;
+    /**
+     * 料件号
+     */
+    private String sku;
+    /**
+     * 税率
+     */
+    private String goodsRate;
+    /**
+     * 金额
+     */
+    private String money;
+    /**
+     * 异常发生时间
+     */
+    private Date errorTime;
+    /**
+     * 是否修改过
+     */
+    private String handle;
+    /**
+     * 修改人编号
+     */
+    private String moderSn;
+    /**
+     * 修改时间
+     */
+    private Date modTime;
+    /**
+     * 时间戳
+     */
+    private Date tstm;
+
+    /**
+     * 设置:编号
+     */
+    public void setId(Integer id) {
+        this.id = id;
+    }
+
+    /**
+     * 获取:编号
+     */
+    public Integer getId() {
+        return id;
+    }
+    /**
+     * 设置:料件号
+     */
+    public void setSku(String sku) {
+        this.sku = sku;
+    }
+
+    /**
+     * 获取:料件号
+     */
+    public String getSku() {
+        return sku;
+    }
+    /**
+     * 设置:税率
+     */
+    public void setGoodsRate(String goodsRate) {
+        this.goodsRate = goodsRate;
+    }
+
+    /**
+     * 获取:税率
+     */
+    public String getGoodsRate() {
+        return goodsRate;
+    }
+    /**
+     * 设置:金额
+     */
+    public void setMoney(String money) {
+        this.money = money;
+    }
+
+    /**
+     * 获取:金额
+     */
+    public String getMoney() {
+        return money;
+    }
+    /**
+     * 设置:异常发生时间
+     */
+    public void setErrorTime(Date errorTime) {
+        this.errorTime = errorTime;
+    }
+
+    /**
+     * 获取:异常发生时间
+     */
+    public Date getErrorTime() {
+        return errorTime;
+    }
+    /**
+     * 设置:是否修改过
+     */
+    public void setHandle(String handle) {
+        this.handle = handle;
+    }
+
+    /**
+     * 获取:是否修改过
+     */
+    public String getHandle() {
+        return handle;
+    }
+    /**
+     * 设置:修改人编号
+     */
+    public void setModerSn(String moderSn) {
+        this.moderSn = moderSn;
+    }
+
+    /**
+     * 获取:修改人编号
+     */
+    public String getModerSn() {
+        return moderSn;
+    }
+    /**
+     * 设置:修改时间
+     */
+    public void setModTime(Date modTime) {
+        this.modTime = modTime;
+    }
+
+    /**
+     * 获取:修改时间
+     */
+    public Date getModTime() {
+        return modTime;
+    }
+    /**
+     * 设置:时间戳
+     */
+    public void setTstm(Date tstm) {
+        this.tstm = tstm;
+    }
+
+    /**
+     * 获取:时间戳
+     */
+    public Date getTstm() {
+        return tstm;
+    }
+}

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

@@ -4,6 +4,7 @@ import com.kmall.admin.dto.GoodsDetailsDto;
 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.api.entity.exportpdf.PDFGoodsDto;
 
 import java.util.List;
@@ -199,4 +200,8 @@ public interface GoodsService {
 
     void syncGoodsRate();
 
+    void updateTaxErrorRecord(TaxErrorRecordEntity taxErrorRecordEntity);
+    void insertTaxErrorRecord(TaxErrorRecordEntity taxErrorRecordEntity);
+
+    void updateByEntity(GoodsEntity updateGoods);
 }

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

@@ -1,7 +1,6 @@
 package com.kmall.admin.service;
 
 import com.kmall.admin.dto.CouponMerchandiseDto;
-import com.kmall.admin.dto.DailyPriceGoodsDto;
 import com.kmall.admin.entity.MkActivitiesCouponEntity;
 
 import java.util.List;
@@ -86,7 +85,7 @@ public interface MkActivitiesCouponService {
      * @param prodBarcode
      * @return
      */
-    MkActivitiesCouponEntity queryByBarCode(Long mkaId, String prodBarcode,String currentTime);
+    MkActivitiesCouponEntity queryByBarCode(String mkaId, String prodBarcode, String currentTime);
 
     MkActivitiesCouponEntity queryByCouponSn(String couponSn,String currentTime);
 }

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

@@ -1,6 +1,5 @@
 package com.kmall.admin.service;
 
-import com.kmall.admin.dto.DailyPriceGoodsDto;
 import com.kmall.admin.dto.DiscountedProductsDto;
 import com.kmall.admin.entity.MkActivitiesDiscountEntity;
 
@@ -86,5 +85,5 @@ public interface MkActivitiesDiscountService {
      * @param prodBarcode
      * @return
      */
-    MkActivitiesDiscountEntity queryByBarCode(Long mkaId, String prodBarcode);
+    MkActivitiesDiscountEntity queryByBarCode(String mkaId, String prodBarcode);
 }

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

@@ -1,6 +1,5 @@
 package com.kmall.admin.service;
 
-import com.kmall.admin.dto.DailyPriceGoodsDto;
 import com.kmall.admin.dto.FreeGoodsDto;
 import com.kmall.admin.entity.MkActivitiesFullGiftEntity;
 
@@ -89,5 +88,5 @@ public interface MkActivitiesFullGiftService {
      * @param nowTime
      * @return
      */
-    MkActivitiesFullGiftEntity queryByCodeOrBrand(Long mkaId, String prodBarcode, String brandName, String nowTime);
+    MkActivitiesFullGiftEntity queryByCodeOrBrand(String mkaId, String prodBarcode, String brandName, String nowTime);
 }

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

@@ -1,6 +1,5 @@
 package com.kmall.admin.service;
 
-import com.kmall.admin.dto.DailyPriceGoodsDto;
 import com.kmall.admin.dto.FullReductionDto;
 import com.kmall.admin.entity.MkActivitiesFullReductionEntity;
 
@@ -88,5 +87,5 @@ public interface MkActivitiesFullReductionService {
      * @param deadline
      * @return
      */
-    MkActivitiesFullReductionEntity queryByCodeOrBrand(Long mkaId, String prodBarcode, String brandName,String deadline);
+    MkActivitiesFullReductionEntity queryByCodeOrBrand(String mkaId, String prodBarcode, String brandName, String deadline);
 }

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

@@ -1,7 +1,6 @@
 package com.kmall.admin.service;
 
 import com.kmall.admin.dto.BuyOneGetOneFreeDto;
-import com.kmall.admin.dto.DailyPriceGoodsDto;
 import com.kmall.admin.entity.MkActivitiesGetOneFreeGoodsEntity;
 
 import java.util.List;
@@ -88,5 +87,5 @@ public interface MkActivitiesGetOneFreeGoodsService {
      * @param brandName
      * @return
      */
-    MkActivitiesGetOneFreeGoodsEntity queryByCodeOrBrand(Long mkaId, String prodBarcode, String brandName);
+    MkActivitiesGetOneFreeGoodsEntity queryByCodeOrBrand(String mkaId, String prodBarcode, String brandName);
 }

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

@@ -85,5 +85,5 @@ public interface MkActivitiesHalfPriceService {
      * @param prodBarcode
      * @return
      */
-    MkActivitiesHalfPriceEntity queryByCodeOrBrand(Long mkaId, String prodBarcode);
+    MkActivitiesHalfPriceEntity queryByCodeOrBrand(String mkaId, String prodBarcode);
 }

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

@@ -85,5 +85,5 @@ public interface MkActivitiesPromotionService {
      * @param prodBarcode
      * @return
      */
-    MkActivitiesPromotionEntity queryByBarCode(Long mkaId, String prodBarcode);
+    MkActivitiesPromotionEntity queryByBarCode(String mkaId, String prodBarcode);
 }

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

@@ -86,5 +86,5 @@ public interface MkDailyActivitiesService {
      * @param prodBarcode
      * @return
      */
-    MkDailyActivitiesEntity queryByBarCode(Long mkaId, String prodBarcode);
+    MkDailyActivitiesEntity queryByBarCode(String mkaId, String prodBarcode);
 }

+ 73 - 0
kmall-admin/src/main/java/com/kmall/admin/service/TaxErrorRecordService.java

@@ -0,0 +1,73 @@
+package com.kmall.admin.service;
+
+
+import com.kmall.admin.entity.TaxErrorRecordEntity;
+
+import java.util.List;
+import java.util.Map;
+
+/**
+ * 税款异常记录表Service接口
+ *
+ * @author emato
+ * @email admin@qhdswl.com
+ * @date 2020-12-18 14:37:40
+ */
+public interface TaxErrorRecordService {
+
+    /**
+     * 根据主键查询实体
+     *
+     * @param id 主键
+     * @return 实体
+     */
+    TaxErrorRecordEntity queryObject(Integer id);
+
+    /**
+     * 分页查询
+     *
+     * @param map 参数
+     * @return list
+     */
+    List<TaxErrorRecordEntity> queryList(Map<String, Object> map);
+
+    /**
+     * 分页统计总数
+     *
+     * @param map 参数
+     * @return 总数
+     */
+    int queryTotal(Map<String, Object> map);
+
+    /**
+     * 保存实体
+     *
+     * @param taxErrorRecord 实体
+     * @return 保存条数
+     */
+    int save(TaxErrorRecordEntity taxErrorRecord);
+
+    /**
+     * 根据主键更新实体
+     *
+     * @param taxErrorRecord 实体
+     * @return 更新条数
+     */
+    int update(TaxErrorRecordEntity taxErrorRecord);
+
+    /**
+     * 根据主键删除
+     *
+     * @param id
+     * @return 删除条数
+     */
+    int delete(Integer id);
+
+    /**
+     * 根据主键批量删除
+     *
+     * @param ids
+     * @return 删除条数
+     */
+    int deleteBatch(Integer[]ids);
+}

+ 43 - 28
kmall-admin/src/main/java/com/kmall/admin/service/impl/GoodsServiceImpl.java

@@ -81,6 +81,8 @@ public class GoodsServiceImpl implements GoodsService {
     private StoreMngChangeDao storeMngChangeDao;
     @Autowired
     private GoodsUtils goodsUtils;
+    @Autowired
+    private TaxErrorRecordDao taxErrorRecordDao;
 
 
     @Autowired
@@ -1469,15 +1471,9 @@ public class GoodsServiceImpl implements GoodsService {
             return null;
         }
         goods.setDiscountedPrice(new BigDecimal(0));
-        BigDecimal goodsRate = null;
-        try {
-            goodsRate = new BigDecimal(goods.getGoodsRate());
-        } catch (Exception e) {
-            goodsRate = new BigDecimal(0);
-        }
         BigDecimal retailPrice = goods.getRetailPrice();
-        BigDecimal tax = goodsRate.multiply(retailPrice.divide(new BigDecimal(1).add(goodsRate),2,RoundingMode.HALF_DOWN)).setScale(2,RoundingMode.HALF_DOWN) ;
-        goods.setGoodstaxes(tax.toString());
+
+
         goods.setActualPaymentAmount(retailPrice.setScale(2,RoundingMode.HALF_UP));
 
         Map<String,Object> skuActivitiesMap = new HashMap<>();
@@ -1503,11 +1499,15 @@ public class GoodsServiceImpl implements GoodsService {
                 ,getOneFree = false,promotion = false,halfPrice = false;
 
         List<String> topicList = new ArrayList<>(); // 记录有哪些营销活动的topic
-        Map<String,Long> mkaIdMap = new HashMap<>(); // 记录topic跟mkaId的关系
+        Map<String,String> mkaIdMap = new HashMap<>(); // 记录topic跟mkaId的关系
         // 将所有的营销活动新增到list中
         for(MkActivitiesEntity mkActivitiesEntity : mkActivitiesEntityList){
             topicList.add(mkActivitiesEntity.getMkaTopic());
-            mkaIdMap.put(mkActivitiesEntity.getMkaTopic(),mkActivitiesEntity.getMkaId());
+            String mkaId = mkaIdMap.putIfAbsent(mkActivitiesEntity.getMkaTopic(), mkActivitiesEntity.getMkaId()+"");
+            if(StringUtils.isNotEmpty(mkaId)){
+                mkaId = "'"+mkaId + "','" + mkActivitiesEntity.getMkaId()+"'";
+                mkaIdMap.put(mkActivitiesEntity.getMkaTopic(),mkaId);
+            }
         }
         // 判断有哪些营销活动
         if(topicList.contains("zhjsp")) // 组合价
@@ -1549,7 +1549,7 @@ public class GoodsServiceImpl implements GoodsService {
          * TODO
          */
         if(combinationPrice){
-            Long mkaId = mkaIdMap.get("zhjsp");
+            String mkaId = mkaIdMap.get("zhjsp");
             Map<String,Object> param = new HashMap<>();
             param.put("mkaId",mkaId);
             param.put("prodBarcode",prodBarcode);
@@ -1575,7 +1575,7 @@ public class GoodsServiceImpl implements GoodsService {
          */
         Map<String,Object> fullReductionMap = new HashMap<>();
         if(fullReduction){
-            Long mkaId = mkaIdMap.get("mj");
+            String mkaId = mkaIdMap.get("mj");
             MkActivitiesFullReductionEntity fullReductionEntity = fullReductionService.queryByCodeOrBrand(mkaId,prodBarcode,brandName,nowTime);
             if(fullReductionEntity != null) {
                 if(!StringUtils.isNullOrEmpty(fullReductionEntity.getProductBrand())){
@@ -1599,7 +1599,7 @@ public class GoodsServiceImpl implements GoodsService {
          */
         Map<String,Object> fullGiftMap = new HashMap<>();
         if(fullGift){
-            Long mkaId = mkaIdMap.get("mz");
+            String mkaId = mkaIdMap.get("mz");
             MkActivitiesFullGiftEntity giftEntity = fullGiftService.queryByCodeOrBrand(mkaId,prodBarcode,brandName,nowTime);
             if(giftEntity != null) {
                 if(giftEntity.getProductBrand() != null){
@@ -1625,7 +1625,7 @@ public class GoodsServiceImpl implements GoodsService {
          * key 商品条码 value 赠品条码
          */
         if(getOneFree){
-            Long mkaId = mkaIdMap.get("mysy");
+            String mkaId = mkaIdMap.get("mysy");
             MkActivitiesGetOneFreeGoodsEntity getOneFreeGoodsEntity = getOneFreeGoodsService.queryByCodeOrBrand(mkaId,prodBarcode,brandName);
             if(getOneFreeGoodsEntity != null){
                 if("无".equals(getOneFreeGoodsEntity.getProductBrand())){
@@ -1642,7 +1642,7 @@ public class GoodsServiceImpl implements GoodsService {
 
         // 第二份半价
         if(halfPrice){
-            Long mkaId = mkaIdMap.get("drjbj");
+            String mkaId = mkaIdMap.get("drjbj");
             MkActivitiesHalfPriceEntity activitiesHalfPriceEntity = halfPriceService.queryByCodeOrBrand(mkaId,prodBarcode);
             if(activitiesHalfPriceEntity != null){
                 skuActivitiesMap.put("drjbj",activitiesHalfPriceEntity);
@@ -1659,7 +1659,7 @@ public class GoodsServiceImpl implements GoodsService {
          */
 
         if(coupon){
-            Long mkaId = mkaIdMap.get("yhq");
+            String mkaId = mkaIdMap.get("yhq");
             MkActivitiesCouponEntity couponEntity =  couponService.queryByBarCode(mkaId,prodBarcode,nowTime);
             if(couponEntity != null){ // 优惠券码,优惠金额
                 Map<String,Object> returnMap = new HashMap<>();
@@ -1674,15 +1674,13 @@ public class GoodsServiceImpl implements GoodsService {
          */
 
         if(discount){
-            Long mkaId = mkaIdMap.get("dz");
+            String mkaId = mkaIdMap.get("dz");
             MkActivitiesDiscountEntity discountEntity =  discountService.queryByBarCode(mkaId,prodBarcode);
             // TODO 可能会直接替代产品价格
             if (discountEntity != null) {
                 goods.setActualPaymentAmount(discountEntity.getActivityPrice());
                 goods.setRetailPrice(discountEntity.getActivityPrice());
-                tax = goodsRate.multiply(discountEntity.getActivityPrice().divide(new BigDecimal(1).add(goodsRate),2,RoundingMode.HALF_DOWN)).setScale(2,RoundingMode.HALF_DOWN) ;
-                goods.setGoodstaxes(tax.toString());
-//                goods.setDiscountedPrice(retailPrice.subtract(discountEntity.getActivityPrice()).setScale(2,BigDecimal.ROUND_HALF_UP));
+
                 goods.setActivity("打折");
             }
         }
@@ -1692,14 +1690,12 @@ public class GoodsServiceImpl implements GoodsService {
          * 日常活动跟着条形码走,优先级比临时促销低,但是高于正常价格
          */
         if(daily){
-            Long mkaId = mkaIdMap.get("rchd");
+            String mkaId = mkaIdMap.get("rchd");
             MkDailyActivitiesEntity dailyActivitiesEntity = dailyActivitiesService.queryByBarCode(mkaId,prodBarcode);
             if(dailyActivitiesEntity != null){
                 goods.setActualPaymentAmount(dailyActivitiesEntity.getActivityPrice());
                 goods.setRetailPrice(dailyActivitiesEntity.getActivityPrice());
-                tax = goodsRate.multiply(dailyActivitiesEntity.getActivityPrice().divide(new BigDecimal(1).add(goodsRate),2,RoundingMode.HALF_DOWN)).setScale(2,RoundingMode.HALF_DOWN) ;
-                goods.setGoodstaxes(tax.toString());
-//                goods.setDiscountedPrice(retailPrice.subtract(dailyActivitiesEntity.getActivityPrice()).setScale(2,BigDecimal.ROUND_HALF_UP));
+
                 goods.setActivity("日常活动");
 
             }
@@ -1710,20 +1706,23 @@ public class GoodsServiceImpl implements GoodsService {
          * 临时促销跟着条形码走,优先级应该最高,所以排到了最下面
          */
         if(promotion){
-            Long mkaId = mkaIdMap.get("lscx");
+            String mkaId = mkaIdMap.get("lscx");
             MkActivitiesPromotionEntity promotionEntity = promotionService.queryByBarCode(mkaId,prodBarcode);
             // 如果该商品存在临时促销,直接替换活动价格
             if(promotionEntity != null){
                 goods.setActualPaymentAmount(promotionEntity.getActivityPrice());
                 goods.setRetailPrice(promotionEntity.getActivityPrice());
-                tax = goodsRate.multiply(promotionEntity.getActivityPrice().divide(new BigDecimal(1).add(goodsRate),2,RoundingMode.HALF_DOWN)).setScale(2,RoundingMode.HALF_DOWN) ;
-                goods.setGoodstaxes(tax.toString());
-//                goods.setDiscountedPrice(retailPrice.subtract(promotionEntity.getActivityPrice()).setScale(2,BigDecimal.ROUND_HALF_UP));
+
                 goods.setActivity("临时促销");
 
             }
         }
 
+        // 计算税费
+        GoodsEntity goodsEntity = goodsDao.queryByBarcodeAndSku(prodBarcode, goods.getGoodsSn());
+        BigDecimal tax = CalculateTax.calculateFinalTax(goodsEntity,goods.getActualPaymentAmount(),this).setScale(3,RoundingMode.HALF_UP);
+        goods.setGoodstaxes(tax.toString());
+
 
         skuActivitiesMap.put("goods",goods);
         return skuActivitiesMap;
@@ -1886,5 +1885,21 @@ public class GoodsServiceImpl implements GoodsService {
         }
     }
 
+    @Override
+    public void updateTaxErrorRecord(TaxErrorRecordEntity taxErrorRecordEntity) {
+        taxErrorRecordDao.update(taxErrorRecordEntity);
+    }
+
+    @Override
+    public void insertTaxErrorRecord(TaxErrorRecordEntity taxErrorRecordEntity) {
+        taxErrorRecordDao.save(taxErrorRecordEntity);
+
+    }
+
+    @Override
+    public void updateByEntity(GoodsEntity updateGoods) {
+        goodsDao.update(updateGoods);
+    }
+
 
 }

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

@@ -2,8 +2,6 @@ package com.kmall.admin.service.impl;
 
 import com.google.common.collect.ImmutableBiMap;
 import com.kmall.admin.dto.CouponMerchandiseDto;
-import com.kmall.admin.dto.DiscountedProductsDto;
-import com.kmall.admin.entity.MkActivitiesDiscountEntity;
 import com.kmall.common.utils.MapBeanUtil;
 import com.kmall.common.utils.R;
 import com.kmall.common.utils.RRException;
@@ -97,7 +95,7 @@ public class MkActivitiesCouponServiceImpl implements MkActivitiesCouponService
                     throw new RRException(r.get("msg").toString());
                 }
 
-                MkActivitiesCouponEntity old = mkActivitiesCouponDao.queryByBarCode(Long.parseLong(mkaId), couponMerchandiseDto.getBarCode(),null);
+                MkActivitiesCouponEntity old = mkActivitiesCouponDao.queryByBarCode(mkaId, couponMerchandiseDto.getBarCode(),null);
                 if(old != null){
                     throw new RRException("该商品已经参与本次活动,商品{"+couponMerchandiseDto.getBarCode()+"}",500);
                 }
@@ -130,7 +128,7 @@ public class MkActivitiesCouponServiceImpl implements MkActivitiesCouponService
      * @return
      */
     @Override
-    public MkActivitiesCouponEntity queryByBarCode(Long mkaId, String prodBarcode,String currentTime) {
+    public MkActivitiesCouponEntity queryByBarCode(String mkaId, String prodBarcode, String currentTime) {
         return mkActivitiesCouponDao.queryByBarCode(mkaId,prodBarcode,currentTime);
     }
 

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

@@ -2,8 +2,6 @@ package com.kmall.admin.service.impl;
 
 import com.google.common.collect.ImmutableBiMap;
 import com.kmall.admin.dto.DiscountedProductsDto;
-import com.kmall.admin.dto.TemporaryPromotionalItemsDto;
-import com.kmall.admin.entity.MkActivitiesPromotionEntity;
 import com.kmall.common.utils.MapBeanUtil;
 import com.kmall.common.utils.R;
 import com.kmall.common.utils.RRException;
@@ -97,7 +95,7 @@ public class MkActivitiesDiscountServiceImpl implements MkActivitiesDiscountServ
                     throw new RRException(r.get("msg").toString());
                 }
 
-                MkActivitiesDiscountEntity old = mkActivitiesDiscountDao.queryByBarCode(Long.parseLong(mkaId), discountedProductsDto.getBarCode());
+                MkActivitiesDiscountEntity old = mkActivitiesDiscountDao.queryByBarCode(mkaId, discountedProductsDto.getBarCode());
                 if(old != null){
                     throw new RRException("该商品已经参与本次活动,商品{"+discountedProductsDto.getBarCode()+"}",500);
                 }
@@ -128,7 +126,7 @@ public class MkActivitiesDiscountServiceImpl implements MkActivitiesDiscountServ
      * @return
      */
     @Override
-    public MkActivitiesDiscountEntity queryByBarCode(Long mkaId, String prodBarcode) {
+    public MkActivitiesDiscountEntity queryByBarCode(String mkaId, String prodBarcode) {
         return mkActivitiesDiscountDao.queryByBarCode(mkaId,prodBarcode);
     }
 }

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

@@ -3,10 +3,7 @@ package com.kmall.admin.service.impl;
 import com.google.common.collect.ImmutableBiMap;
 import com.kmall.admin.dao.GoodsDao;
 import com.kmall.admin.dto.FreeGoodsDto;
-import com.kmall.admin.dto.FullReductionDto;
 import com.kmall.admin.entity.GoodsEntity;
-import com.kmall.admin.entity.MkActivitiesCouponEntity;
-import com.kmall.admin.entity.MkActivitiesFullReductionEntity;
 import com.kmall.common.utils.*;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.stereotype.Service;
@@ -150,7 +147,7 @@ public class MkActivitiesFullGiftServiceImpl implements MkActivitiesFullGiftServ
      * @return
      */
     @Override
-    public MkActivitiesFullGiftEntity queryByCodeOrBrand(Long mkaId, String prodBarcode, String brandName, String nowTime) {
+    public MkActivitiesFullGiftEntity queryByCodeOrBrand(String mkaId, String prodBarcode, String brandName, String nowTime) {
         return mkActivitiesFullGiftDao.queryByCodeOrBrand(mkaId,prodBarcode,brandName,nowTime);
     }
 }

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

@@ -2,9 +2,6 @@ package com.kmall.admin.service.impl;
 
 import com.google.common.collect.ImmutableBiMap;
 import com.kmall.admin.dto.FullReductionDto;
-import com.kmall.admin.dto.TemporaryPromotionalItemsDto;
-import com.kmall.admin.entity.MkActivitiesFullGiftEntity;
-import com.kmall.admin.entity.MkActivitiesPromotionEntity;
 import com.kmall.common.utils.MapBeanUtil;
 import com.kmall.common.utils.R;
 import com.kmall.common.utils.RRException;
@@ -106,7 +103,7 @@ public class MkActivitiesFullReductionServiceImpl implements MkActivitiesFullRed
                 SimpleDateFormat format = new SimpleDateFormat("yyyy-MM-dd");
                 String nowTime = format.format(new Date());
 
-                MkActivitiesFullReductionEntity old =  mkActivitiesFullReductionDao.queryByCodeOrBrand(Long.parseLong(mkaId),fullReductionDto.getBarCode(),fullReductionDto.getBrand(),nowTime);
+                MkActivitiesFullReductionEntity old =  mkActivitiesFullReductionDao.queryByCodeOrBrand(mkaId,fullReductionDto.getBarCode(),fullReductionDto.getBrand(),nowTime);
                 if(old != null){
                     throw new RRException("该商品或者该品牌已经参与本次活动,商品{"+fullReductionDto.getBarCode()+"},品牌,{"+fullReductionDto.getBrand()+"}",500);
                 }
@@ -140,7 +137,7 @@ public class MkActivitiesFullReductionServiceImpl implements MkActivitiesFullRed
      * @return
      */
     @Override
-    public MkActivitiesFullReductionEntity queryByCodeOrBrand(Long mkaId, String prodBarcode, String brandName,String deadline) {
+    public MkActivitiesFullReductionEntity queryByCodeOrBrand(String mkaId, String prodBarcode, String brandName, String deadline) {
         return mkActivitiesFullReductionDao.queryByCodeOrBrand(mkaId,prodBarcode,brandName,deadline);
     }
 }

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

@@ -3,14 +3,11 @@ package com.kmall.admin.service.impl;
 import com.google.common.collect.ImmutableBiMap;
 import com.kmall.admin.dao.GoodsDao;
 import com.kmall.admin.dto.BuyOneGetOneFreeDto;
-import com.kmall.admin.dto.FreeGoodsDto;
 import com.kmall.admin.entity.GoodsEntity;
-import com.kmall.admin.entity.MkActivitiesFullGiftEntity;
 import com.kmall.common.utils.*;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.stereotype.Service;
 
-import java.math.BigDecimal;
 import java.util.List;
 import java.util.Map;
 
@@ -137,7 +134,7 @@ public class MkActivitiesGetOneFreeGoodsServiceImpl implements MkActivitiesGetOn
      * @return
      */
     @Override
-    public MkActivitiesGetOneFreeGoodsEntity queryByCodeOrBrand(Long mkaId, String prodBarcode, String brandName) {
+    public MkActivitiesGetOneFreeGoodsEntity queryByCodeOrBrand(String mkaId, String prodBarcode, String brandName) {
         return mkActivitiesGetOneFreeGoodsDao.queryByCodeOrBrand(mkaId,prodBarcode,brandName);
     }
 }

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

@@ -1,11 +1,9 @@
 package com.kmall.admin.service.impl;
 
 import com.google.common.collect.ImmutableBiMap;
-import com.kmall.admin.dao.MkActivitiesFullReductionDao;
 import com.kmall.admin.dao.MkActivitiesHalfPriceDao;
 import com.kmall.admin.dto.FullReductionDto;
 import com.kmall.admin.entity.MkActivitiesHalfPriceEntity;
-import com.kmall.admin.service.MkActivitiesFullReductionService;
 import com.kmall.admin.service.MkActivitiesHalfPriceService;
 import com.kmall.common.utils.MapBeanUtil;
 import com.kmall.common.utils.R;
@@ -15,7 +13,6 @@ import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.stereotype.Service;
 import org.springframework.transaction.annotation.Transactional;
 
-import java.math.BigDecimal;
 import java.text.SimpleDateFormat;
 import java.util.Date;
 import java.util.List;
@@ -104,7 +101,7 @@ public class MkActivitiesHalfPriceServiceImpl implements MkActivitiesHalfPriceSe
                 SimpleDateFormat format = new SimpleDateFormat("yyyy-MM-dd");
                 String nowTime = format.format(new Date());
 
-                MkActivitiesHalfPriceEntity old =  mkActivitiesFullReductionDao.queryByCodeOrBrand(Long.parseLong(mkaId),fullReductionDto.getBarCode());
+                MkActivitiesHalfPriceEntity old =  mkActivitiesFullReductionDao.queryByCodeOrBrand(mkaId,fullReductionDto.getBarCode());
                 if(old != null){
                     throw new RRException("该商品或者该品牌已经参与本次活动,商品{"+fullReductionDto.getBarCode()+"},品牌,{"+fullReductionDto.getBrand()+"}",500);
                 }
@@ -137,7 +134,7 @@ public class MkActivitiesHalfPriceServiceImpl implements MkActivitiesHalfPriceSe
      * @return
      */
     @Override
-    public MkActivitiesHalfPriceEntity queryByCodeOrBrand(Long mkaId, String prodBarcode) {
+    public MkActivitiesHalfPriceEntity queryByCodeOrBrand(String mkaId, String prodBarcode) {
         return mkActivitiesFullReductionDao.queryByCodeOrBrand(mkaId,prodBarcode);
     }
 }

+ 5 - 6
kmall-admin/src/main/java/com/kmall/admin/service/impl/MkActivitiesPromotionServiceImpl.java

@@ -2,7 +2,6 @@ package com.kmall.admin.service.impl;
 
 import com.google.common.collect.ImmutableBiMap;
 import com.kmall.admin.dto.TemporaryPromotionalItemsDto;
-import com.kmall.admin.entity.MkActivitiesCouponEntity;
 import com.kmall.common.utils.MapBeanUtil;
 import com.kmall.common.utils.R;
 import com.kmall.common.utils.RRException;
@@ -96,10 +95,10 @@ public class MkActivitiesPromotionServiceImpl implements MkActivitiesPromotionSe
                     throw new RRException(r.get("msg").toString());
                 }
 
-                MkActivitiesPromotionEntity old = mkActivitiesPromotionDao.queryByBarCode(Long.parseLong(mkaId), temporaryPromotionalItemsDto.getBarCode());
-                if(old != null){
-                    throw new RRException("该商品已经参与本次活动,商品{"+temporaryPromotionalItemsDto.getBarCode()+"}",500);
-                }
+//                MkActivitiesPromotionEntity old = mkActivitiesPromotionDao.queryByBarCode(mkaId, temporaryPromotionalItemsDto.getBarCode());
+//                if(old != null){
+//                    throw new RRException("该商品已经参与本次活动,商品{"+temporaryPromotionalItemsDto.getBarCode()+"}",500);
+//                }
 
                 // 保存日常活动商品
                 MkActivitiesPromotionEntity mkActivitiesPromotionEntity = new MkActivitiesPromotionEntity();
@@ -128,7 +127,7 @@ public class MkActivitiesPromotionServiceImpl implements MkActivitiesPromotionSe
      * @return
      */
     @Override
-    public MkActivitiesPromotionEntity queryByBarCode(Long mkaId, String prodBarcode) {
+    public MkActivitiesPromotionEntity queryByBarCode(String mkaId, String prodBarcode) {
         return mkActivitiesPromotionDao.queryByBarCode(mkaId,prodBarcode);
     }
 }

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

@@ -2,7 +2,6 @@ package com.kmall.admin.service.impl;
 
 import com.google.common.collect.ImmutableBiMap;
 import com.kmall.admin.dto.DailyPriceGoodsDto;
-import com.kmall.admin.entity.MkActivitiesPromotionEntity;
 import com.kmall.common.utils.MapBeanUtil;
 import com.kmall.common.utils.R;
 import com.kmall.common.utils.RRException;
@@ -11,9 +10,7 @@ import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.stereotype.Service;
 
 import java.math.BigDecimal;
-import java.text.DecimalFormat;
 import java.text.ParseException;
-import java.text.SimpleDateFormat;
 import java.util.List;
 import java.util.Map;
 
@@ -100,7 +97,7 @@ public class MkDailyActivitiesServiceImpl implements MkDailyActivitiesService {
                     throw new RRException(r.get("msg").toString());
                 }
 
-                MkDailyActivitiesEntity old = mkDailyActivitiesDao.queryByBarCode(Long.parseLong(mkaId), dailyPriceGoodsDto.getBarCode());
+                MkDailyActivitiesEntity old = mkDailyActivitiesDao.queryByBarCode(mkaId, dailyPriceGoodsDto.getBarCode());
                 if(old != null){
                     throw new RRException("该商品已经参与本次活动,商品{"+dailyPriceGoodsDto.getBarCode()+"}",500);
                 }
@@ -131,7 +128,7 @@ public class MkDailyActivitiesServiceImpl implements MkDailyActivitiesService {
      * @return
      */
     @Override
-    public MkDailyActivitiesEntity queryByBarCode(Long mkaId, String prodBarcode) {
+    public MkDailyActivitiesEntity queryByBarCode(String mkaId, String prodBarcode) {
         return mkDailyActivitiesDao.queryByBarCode(mkaId,prodBarcode);
     }
 }

File diff suppressed because it is too large
+ 185 - 184
kmall-admin/src/main/java/com/kmall/admin/service/impl/OrderServiceImpl.java


+ 59 - 0
kmall-admin/src/main/java/com/kmall/admin/service/impl/TaxErrorRecordServiceImpl.java

@@ -0,0 +1,59 @@
+package com.kmall.admin.service.impl;
+
+import com.kmall.admin.dao.TaxErrorRecordDao;
+import com.kmall.admin.entity.TaxErrorRecordEntity;
+import com.kmall.admin.service.TaxErrorRecordService;
+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 2020-12-18 14:37:40
+ */
+@Service("taxErrorRecordService")
+public class TaxErrorRecordServiceImpl implements TaxErrorRecordService {
+    @Autowired
+    private TaxErrorRecordDao taxErrorRecordDao;
+
+    @Override
+    public TaxErrorRecordEntity queryObject(Integer id) {
+        return taxErrorRecordDao.queryObject(id);
+    }
+
+    @Override
+    public List<TaxErrorRecordEntity> queryList(Map<String, Object> map) {
+        return taxErrorRecordDao.queryList(map);
+    }
+
+    @Override
+    public int queryTotal(Map<String, Object> map) {
+        return taxErrorRecordDao.queryTotal(map);
+    }
+
+    @Override
+    public int save(TaxErrorRecordEntity taxErrorRecord) {
+        return taxErrorRecordDao.save(taxErrorRecord);
+    }
+
+    @Override
+    public int update(TaxErrorRecordEntity taxErrorRecord) {
+        return taxErrorRecordDao.update(taxErrorRecord);
+    }
+
+    @Override
+    public int delete(Integer id) {
+        return taxErrorRecordDao.delete(id);
+    }
+
+    @Override
+    public int deleteBatch(Integer[]ids) {
+        return taxErrorRecordDao.deleteBatch(ids);
+    }
+}

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

@@ -55,10 +55,10 @@ public class MkActivitiesServiceImpl implements MkActivitiesService {
         String mkCode = mkActivities.getMkCode();
         String mkaTopic = mkActivities.getMkaTopic();
         String mkaStoreId = mkActivities.getMkaStoreId();
-        MkActivitiesAssociationEntity mkActivitiesAssociationEntity =  mkActivitiesAssociationDao.queryByMkCodeAndTopic(mkCode,mkaTopic,mkaStoreId);
-        if(mkActivitiesAssociationEntity != null){
-            return 0;
-        }
+//        MkActivitiesAssociationEntity mkActivitiesAssociationEntity =  mkActivitiesAssociationDao.queryByMkCodeAndTopic(mkCode,mkaTopic,mkaStoreId);
+//        if(mkActivitiesAssociationEntity != null){
+//            return 0;
+//        }
 
         SysUserEntity user = ShiroUtils.getUserEntity();
 

+ 268 - 0
kmall-admin/src/main/java/com/kmall/admin/utils/CalculateTax.java

@@ -1,13 +1,23 @@
 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;
 import com.kmall.manager.manager.express.sf.ServiceException;
 import org.apache.commons.lang3.StringUtils;
 import org.slf4j.Logger;
 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
@@ -16,6 +26,56 @@ import java.math.BigDecimal;
 public class CalculateTax {
     private static final Logger logger = LoggerFactory.getLogger(CalculateTax.class);
 
+    private static List<String> hsCodeList = new ArrayList<>();
+
+    private static Map<String,BigDecimal> hsCodeMap = new HashMap<String,BigDecimal>();
+
+    private static BigDecimal consumerGoodsRate = new BigDecimal("0.2306");
+    private static BigDecimal noConsumerGoodsRate = new BigDecimal("0.091");
+
+    /*
+    cus_goods_code	计税方式
+            3304990029	完税价格≥10元/克的,税率为15%
+            3304910000	完税价格≥10元/克的,税率为15%
+            3303000010	完税价格≥10元/克的,税率为15%
+            3303000020	完税价格≥10元/毫升的,税率为15%
+            3304100091	完税价格≥10元/克的,税率为15%
+            3304100092	完税价格≥10元/毫升的,税率为15%
+            3304100093	完税价格≥15元/片(张)的,税率为15%
+            3304200091	完税价格≥10元/克的,税率为15%
+            3304200092	完税价格≥10元/毫升的,税率为15%
+            3304200093	完税价格≥15元/片(张)的,税率为15%
+            3304300001	完税价格≥10元/克的,税率为15%
+            3304300002	完税价格≥10元/毫升的,税率为15%
+            3304300003	完税价格≥15元/片(张)的,税率为15%
+            3304990049	完税价格≥15元/片(张)的,税率为15%
+            3304990099	完税价格≥10元/克的,税率为15%
+            3304990039	完税价格≥10元/克的,税率为15%
+            9102190000	进口关税完税价格在10000人民币及以上时,税率为20%
+
+     */
+
+    static {
+        hsCodeMap.put("3304990029",new BigDecimal("10"));
+        hsCodeMap.put("3304910000",new BigDecimal("10"));
+        hsCodeMap.put("3303000010",new BigDecimal("10"));
+        hsCodeMap.put("3303000020",new BigDecimal("10"));
+        hsCodeMap.put("3304100091",new BigDecimal("10"));
+        hsCodeMap.put("3304100092",new BigDecimal("10"));
+        hsCodeMap.put("3304100093",new BigDecimal("15"));
+        hsCodeMap.put("3304200091",new BigDecimal("10"));
+        hsCodeMap.put("3304200092",new BigDecimal("10"));
+        hsCodeMap.put("3304200093",new BigDecimal("15"));
+        hsCodeMap.put("3304300001",new BigDecimal("10"));
+        hsCodeMap.put("3304300002",new BigDecimal("10"));
+        hsCodeMap.put("3304300003",new BigDecimal("15"));
+        hsCodeMap.put("3304990049",new BigDecimal("15"));
+        hsCodeMap.put("3304990099",new BigDecimal("10"));
+        hsCodeMap.put("3304990039",new BigDecimal("10"));
+        hsCodeMap.put("9102190000",new BigDecimal("10000"));
+    }
+
+
     /**
      * 计算税费,包括消费税和增值税。公式如下:
      * 订单该商品总税费 = (商品消费税 + 商品增值税)* 0.7
@@ -180,4 +240,212 @@ public class CalculateTax {
         }
     }
 
+
+    /**
+     * * 1.2.1 特殊化妆品(如下列举的“特殊化妆品SKU”),计算“消费税成分单价”:
+        * 1.2.1.1 如果是片、张,优先使用片、张成分单价,没有,则按毫升、克成分单价为算税依据,二者成分单价计算公式如下:
+               * 如果特殊化妆品内规格为“片”或“张”的化妆品,用第二数量按片、张计算成分单价:成分单价=销售单价/产品备案数据第二数量;
+               * 其它的化妆品,用第一数量按毫升、克计算成分单价,成分单价=销售单价/(产品备案数据第一数量*1000);
+       * 1.2.2 根据海关产品分类中“消费税成分单价收税阀值”,如果“消费税成分单价”大于等于“消费税成分单价收税阀值”,按产品分类消费税率作为算税依据,小于,则消费税率为0;无“消费税成分单价收税阀值”的,按产品分类消费税率作为算税依据:
+       * 1.2.3 总计订单全部明细商品消费税;
+     * @return
+     */
+    public static BigDecimal calculateFinalTax(GoodsEntity goods, BigDecimal retailPrice, GoodsService goodsService){
+
+        // 判断商品的海关商品编码是否是在特殊化妆品里面
+        // 海关商品编码
+        String hsCode = goods.getHsCode();
+        // 商品税率
+        BigDecimal goodsRate = goods.getGoodsRate();
+        if(hsCodeMap.containsKey(hsCode)){
+            String cusGoodsName = goods.getHsCodeName();
+            // 法1
+            BigDecimal qty1 = goods.getLegalUnit1Qty();
+            // 法2
+            BigDecimal qty2 = goods.getLegalUnit2Qty();
+            // 阈值
+            BigDecimal cosmThresholdValue = goods.getCosmThresholdValue();
+
+
+            BigDecimal gramOrMlUnitPrice = getUnitPrice(retailPrice, goodsRate, cusGoodsName, qty1, qty2);
+
+            //获取化妆品阀值
+            if (cosmThresholdValue != null && cosmThresholdValue.compareTo(BigDecimal.ZERO) > 0) {
+                if (gramOrMlUnitPrice != null) {
+                    //完税法定单位单价大于阈值采用第一档消费税率,否则消费税率为0
+                    if (gramOrMlUnitPrice.compareTo(cosmThresholdValue) >= 0) {
+                        // 征收消费税,此时判断税率是否为23.06,如果进入if,则是23.06  如果进了else 则当前税率为9.1
+                        if(goodsRate.compareTo(consumerGoodsRate) == 0){
+                            return getTax(retailPrice, goodsRate);
+                        }else{
+                            // 如果不是。重新用23.06计算一次
+                            gramOrMlUnitPrice = getUnitPrice(retailPrice, consumerGoodsRate, cusGoodsName, qty1, qty2);
+                            if (gramOrMlUnitPrice.compareTo(cosmThresholdValue) >= 0) {
+
+
+                                GoodsEntity updateGoods = new GoodsEntity();
+                                updateGoods.setGoodsRate(consumerGoodsRate);
+                                updateGoods.setId(goods.getId());
+                                goodsService.updateByEntity(updateGoods);
+                                // 如果用23.06去计算,还是大于阈值,那就是用23.06去计税
+                                return getTax(retailPrice, consumerGoodsRate);
+                            }else{
+                                BigDecimal tax = getFinalTax(goods, retailPrice, goodsService, cusGoodsName, qty1, qty2);
+                                return tax;
+                            }
+                        }
+
+                    } else {
+
+                        // 不征收消费税,判断税率是否是9.1  如果进了if,则是9.1 ,如果进了else,则当前税率是23.06
+                        if(goodsRate.compareTo(noConsumerGoodsRate) == 0){
+                            return getTax(retailPrice, goodsRate);
+                        }else{
+
+                            // 如果不是,重新用0.091计算一次
+                            gramOrMlUnitPrice = getUnitPrice(retailPrice, noConsumerGoodsRate, cusGoodsName, qty1, qty2);
+                            if (gramOrMlUnitPrice.compareTo(cosmThresholdValue) >= 0) {
+                                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);
+                                return getTax(retailPrice, noConsumerGoodsRate);
+                            }
+
+                        }
+                    }
+                } else {
+                    String message = "【" + goods.getSku() + "】缺少法定单价";
+                    logger.error(message);
+                    // 没有法一法二,记录起来
+                    TaxErrorRecordEntity taxErrorRecordEntity = new TaxErrorRecordEntity();
+                    taxErrorRecordEntity.setSku(goods.getGoodsSn());
+                    taxErrorRecordEntity.setMoney(retailPrice.toString());
+                    taxErrorRecordEntity.setHandle("0");
+                    taxErrorRecordEntity.setGoodsRate(goodsRate.toString());
+                    taxErrorRecordEntity.setErrorTime(new Date());
+                    goodsService.insertTaxErrorRecord(taxErrorRecordEntity);
+
+                    // 一般走不到这里,但是为了做个保险,还是要这个
+                    return getTax(retailPrice, goodsRate);
+                }
+            }
+            // 特殊化妆品但是规格型号符合不上,记录起来
+            TaxErrorRecordEntity taxErrorRecordEntity = new TaxErrorRecordEntity();
+            taxErrorRecordEntity.setSku(goods.getGoodsSn());
+            taxErrorRecordEntity.setMoney(retailPrice.toString());
+            taxErrorRecordEntity.setHandle("0");
+            taxErrorRecordEntity.setGoodsRate(goodsRate.toString());
+            taxErrorRecordEntity.setErrorTime(new Date());
+            goodsService.insertTaxErrorRecord(taxErrorRecordEntity);
+
+            // 一般走不到这里,但是为了做个保险,还是要这个
+            return getTax(retailPrice, goodsRate);
+
+        }else{
+            // 该商品不是特殊海关商品编码,直接用里面的税率进行计算
+            return getTax(retailPrice, goodsRate);
+
+        }
+    }
+
+
+
+    private static BigDecimal getFinalTax(GoodsEntity goods, BigDecimal retailPrice, GoodsService goodsService, String cusGoodsName, BigDecimal qty1, BigDecimal qty2) {
+        BigDecimal goodsRate;
+        // 当使用0.091的时候,发现要收消费税。当使用0.2306的时候,不收消费税
+        // 然后分别用两种计税方式去算税前价,然后算税费,最后去一个更接近税后价的来计算
+        BigDecimal noConsumerTaxPrice = retailPrice.divide(BigDecimal.ONE.add(noConsumerGoodsRate),10,RoundingMode.HALF_UP).setScale(2,RoundingMode.HALF_UP);
+        BigDecimal tax1 = noConsumerTaxPrice.multiply(consumerGoodsRate).setScale(10,RoundingMode.HALF_UP);
+        BigDecimal finalPrice1 = tax1.add(noConsumerTaxPrice);
+// 394.78
+// 310.29
+
+        BigDecimal consumerTaxPrice = retailPrice.divide(BigDecimal.ONE.add(consumerGoodsRate),10,RoundingMode.HALF_UP).setScale(2,RoundingMode.HALF_UP);
+        BigDecimal tax2 = consumerTaxPrice.multiply(noConsumerGoodsRate).setScale(10,RoundingMode.HALF_UP);
+        BigDecimal finalPrice2 = tax2.add(consumerTaxPrice);
+
+        // 比较两个价格哪个比较接近税后价
+        BigDecimal abs1 = finalPrice1.subtract(retailPrice).abs();
+        BigDecimal abs2 = finalPrice2.subtract(retailPrice).abs();
+
+        BigDecimal tax ;
+        if(abs1.compareTo(abs2) > 0){
+            goodsRate = consumerGoodsRate;
+            tax = tax2;
+        }else{
+            goodsRate = noConsumerGoodsRate;
+            tax = tax1;
+        }
+
+        // 如果用23.06去计算,小于阈值,则证明当前商品的价格有问题,需要记录起来 当前商品的sku,当前商品税率,异常时间
+        // 存储异常sku , 并修改税率
+        TaxErrorRecordEntity taxErrorRecordEntity = new TaxErrorRecordEntity();
+        taxErrorRecordEntity.setSku(goods.getGoodsSn());
+        taxErrorRecordEntity.setMoney(retailPrice.toString());
+        taxErrorRecordEntity.setHandle("0");
+        taxErrorRecordEntity.setGoodsRate(goodsRate.toString());
+        taxErrorRecordEntity.setErrorTime(new Date());
+        goodsService.insertTaxErrorRecord(taxErrorRecordEntity);
+
+        GoodsEntity updateGoods = new GoodsEntity();
+        updateGoods.setGoodsRate(goodsRate);
+        updateGoods.setId(goods.getId());
+        goodsService.updateByEntity(updateGoods);
+        return tax;
+    }
+
+
+    /**
+     * 根据税率、税后价,计算出税
+     * @param retailPrice 税后价
+     * @param goodsRate 税率
+     * @return
+     */
+    private static BigDecimal getTax(BigDecimal retailPrice, BigDecimal goodsRate) {
+        return goodsRate.multiply(retailPrice
+                .divide(new BigDecimal(1).add(goodsRate), 10, RoundingMode.HALF_DOWN))
+                .setScale(10, RoundingMode.HALF_DOWN);
+    }
+
+
+    /**
+     * 计算出特殊化妆品的单价
+     * @param retailPrice 税后价
+     * @param goodsRate 税率
+     * @param cusGoodsName 规格名称
+     * @param qty1 法一
+     * @param qty2 法二
+     * @return
+     */
+    private static BigDecimal getUnitPrice(BigDecimal retailPrice, BigDecimal goodsRate, String cusGoodsName, BigDecimal qty1, BigDecimal qty2) {
+        BigDecimal unit1Price = null;
+        BigDecimal unit2Price = null;
+
+        // 根据税后价计算出税前价
+        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) {
+                // 计算税额是否达到阈值
+                unit2Price = productUnitPrice.divide(qty2, 5, BigDecimal.ROUND_HALF_UP);
+            }
+        } else {
+            //毫升、克的单价
+            if (qty1 != null) {
+                BigDecimal gramOrMl = qty1.multiply(new BigDecimal(1000));
+                unit1Price = productUnitPrice.divide(gramOrMl, 5, BigDecimal.ROUND_HALF_UP);
+            }
+        }
+        // 每单位价格
+        // 如果有片、张的单价,按片、张;如果没有则按毫升、克
+        BigDecimal gramOrMlUnitPrice = (unit2Price != null) ? unit2Price : unit1Price;
+        return gramOrMlUnitPrice;
+    }
 }

+ 1 - 1
kmall-admin/src/main/resources/logback.xml

@@ -37,7 +37,7 @@ debug:当此属性设置为true时,将打印出logback内部日志信息,
         -->
         <encoder>
             <pattern>${STD_CONSOLE_LOG_PATTERN}</pattern>
-            <charset>GBK</charset>
+            <charset>UTF-8</charset>
         </encoder>
     </appender>
 

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

@@ -140,7 +140,8 @@
         mb.is_stock_share isStockShare,
         mb.is_supplier_goods 'isSupplierGoods',
         mb2.third_party_merch_code 'supplierThirdMerchCode',
-        mb2.is_stock_share 'isStockShareBySuppler'
+        mb2.is_stock_share 'isStockShareBySuppler',
+        a.hs_code, a.legal_unit1_qty, a.legal_unit2_qty,a.ciq_prod_model
         from mall_goods a left join mall_merch m on a.merch_sn = m.merch_sn
         LEFT JOIN mall_product_store_rela psr1 ON a.id = psr1.goods_id and a.merch_sn = psr1.merch_sn
         LEFT JOIN mall_store s ON s.id = psr1.store_id
@@ -192,7 +193,8 @@
         mb.is_stock_share isStockShare,
         mb.is_supplier_goods 'isSupplierGoods',
         mb2.third_party_merch_code 'supplierThirdMerchCode',
-        mb2.is_stock_share 'isStockShareBySuppler'
+        mb2.is_stock_share 'isStockShareBySuppler',
+        a.hs_code, a.legal_unit1_qty, a.legal_unit2_qty,a.ciq_prod_model
         from mall_goods a left join mall_merch m on a.merch_sn = m.merch_sn
         LEFT JOIN mall_product_store_rela psr1 ON a.id = psr1.goods_id and a.merch_sn = psr1.merch_sn
         LEFT JOIN mall_store s ON s.id = psr1.store_id
@@ -203,7 +205,8 @@
 
     <select id="queryObjectByProdBarcodeAndBizType" 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.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
         FROM
             mall_goods a
         LEFT JOIN mall_product_store_rela r ON r.goods_id = a.id
@@ -214,7 +217,8 @@
 
     <select id="queryObjectByProdBarcodeAndStore" resultType="com.kmall.admin.entity.GoodsEntity">
          SELECT
-            a.id,a.sku,a.goods_number,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.goods_rate as goodsRate
+            a.id,a.sku,a.goods_number,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.goods_rate as goodsRate,
+            a.hs_code as hsCode , a.legal_unit1_qty as legalUnit1Qty , a.legal_unit2_qty as legalUnit2Qty,a.ciq_prod_model as ciqProdModel
         FROM
             mall_goods a
         LEFT JOIN mall_product_store_rela r ON r.goods_id = a.id
@@ -226,7 +230,8 @@
 
     <select id="queryObjectByProdBarcode" 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.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
         FROM
         mall_goods a
         LEFT JOIN mall_product_store_rela r ON r.goods_id = a.id
@@ -243,6 +248,7 @@
     <select id="queryGoodsDetailsByProdBarcode" resultType="com.kmall.admin.dto.GoodsDetailsDto">
         SELECT distinct
         a.goods_sn as GoodsSn,m.retail_price as retailPrice,a.prod_barcode as prodBarcode,a.name,a.brand,a.goods_desc as goodsDesc,a.goods_unit as goodsUnit,a.goods_rate as goodsRate,a.primary_pic_url ,m.stock_num as stockNum,r.value as specification
+        ,a.hs_code as hsCode , a.legal_unit1_qty as legalUnit1Qty , a.legal_unit2_qty as legalUnit2Qty,a.ciq_prod_model as ciqProdModel
         FROM
             mall_goods a
         LEFT JOIN mall_goods_specification r ON r.goods_id = a.id
@@ -773,7 +779,8 @@
 
     <select id="queryListByBarcode" resultType="com.kmall.admin.entity.GoodsEntity">
          SELECT
-            a.id,a.sku,a.goods_number,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.goods_rate as goodsRate
+            a.id,a.sku,a.goods_number,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.goods_rate as goodsRate,
+            a.hs_code as hsCode , a.legal_unit1_qty as legalUnit1Qty , a.legal_unit2_qty as legalUnit2Qty,a.ciq_prod_model as ciqProdModel
         FROM
             mall_goods a
         LEFT JOIN mall_product_store_rela r ON r.goods_id = a.id
@@ -816,5 +823,9 @@
         select * from mall_goods
     </select>
 
+    <select id="queryByBarcodeAndSku" resultType="com.kmall.admin.entity.GoodsEntity">
+        select * from mall_goods where
+        goods_sn = #{goodsSn} and prod_barcode = #{prodBarcode}
+    </select>
 
 </mapper>

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

@@ -173,7 +173,7 @@
 			`moder_sn`,
 			`update_time`
 		from mk_activities_promotion
-		where mka_id = #{mkaId}
+		where mka_id in (${mkaId})
 		and barcode = #{prodBarcode}
 	</select>
 

+ 3 - 2
kmall-admin/src/main/resources/mybatis/mapper/OrderDao.xml

@@ -426,7 +426,7 @@
             AND o.merch_sn = #{merchSn}
         </if>
         <if test="goodsSn != null and goodsSn.trim() != ''">
-            AND gs.goods_sn = #{goodsSn}
+            AND g.goods_sn = #{goodsSn}
         </if>
         <if test="sku != null and sku.trim() != ''">
             AND gs.sku = #{sku}
@@ -496,7 +496,7 @@
             AND o.merch_sn = #{merchSn}
         </if>
         <if test="goodsSn != null and goodsSn.trim() != ''">
-            AND gs.goods_sn = #{goodsSn}
+            AND g.goods_sn = #{goodsSn}
         </if>
         <if test="sku != null and sku.trim() != ''">
             AND gs.sku = #{sku}
@@ -2034,6 +2034,7 @@
     <select id="queryExportSystemFormatList" resultType="com.kmall.admin.dto.SystemFormatDto">
         SELECT distinct
         o.id,
+        g.goods_id,
         o.order_sn as receiptNo,
         u.username as cashRegisterNo,
         o.pay_time as timeStampDetails,

+ 117 - 0
kmall-admin/src/main/resources/mybatis/mapper/TaxErrorRecordDao.xml

@@ -0,0 +1,117 @@
+<?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.TaxErrorRecordDao">
+
+    <resultMap type="com.kmall.admin.entity.TaxErrorRecordEntity" id="taxErrorRecordMap">
+        <result property="id" column="id"/>
+        <result property="sku" column="sku"/>
+        <result property="goodsRate" column="goods_rate"/>
+        <result property="money" column="money"/>
+        <result property="errorTime" column="error_time"/>
+        <result property="handle" column="handle"/>
+        <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.TaxErrorRecordEntity">
+		select
+			`id`,
+			`sku`,
+			`goods_rate`,
+			`money`,
+			`error_time`,
+			`handle`,
+			`moder_sn`,
+			`mod_time`,
+			`tstm`
+		from mall_tax_error_record
+		where id = #{id}
+	</select>
+
+	<select id="queryList" resultType="com.kmall.admin.entity.TaxErrorRecordEntity">
+		select
+    		`id`,
+    		`sku`,
+    		`goods_rate`,
+    		`money`,
+    		`error_time`,
+    		`handle`,
+    		`moder_sn`,
+    		`mod_time`,
+    		`tstm`
+		from mall_tax_error_record
+		WHERE 1=1
+		<if test="name != null and name.trim() != ''">
+			AND name LIKE concat('%',#{name},'%')
+		</if>
+        <choose>
+            <when test="sidx != null and sidx.trim() != ''">
+                order by ${sidx} ${order}
+            </when>
+			<otherwise>
+                order by id desc
+			</otherwise>
+        </choose>
+		<if test="offset != null and limit != null">
+			limit #{offset}, #{limit}
+		</if>
+	</select>
+
+ 	<select id="queryTotal" resultType="int">
+		select count(*) from mall_tax_error_record
+		WHERE 1=1
+        <if test="name != null and name.trim() != ''">
+            AND name LIKE concat('%',#{name},'%')
+        </if>
+	</select>
+
+	<insert id="save" parameterType="com.kmall.admin.entity.TaxErrorRecordEntity" useGeneratedKeys="true" keyProperty="id">
+		insert into mall_tax_error_record(
+			`sku`,
+			`goods_rate`,
+			`money`,
+			`error_time`,
+			`handle`,
+			`moder_sn`,
+			`mod_time`,
+			`tstm`)
+		values(
+			#{sku},
+			#{goodsRate},
+			#{money},
+			#{errorTime},
+			#{handle},
+			#{moderSn},
+			#{modTime},
+			#{tstm})
+	</insert>
+
+	<update id="update" parameterType="com.kmall.admin.entity.TaxErrorRecordEntity">
+		update mall_tax_error_record
+		<set>
+			<if test="sku != null">`sku` = #{sku}, </if>
+			<if test="goodsRate != null">`goods_rate` = #{goodsRate}, </if>
+			<if test="money != null">`money` = #{money}, </if>
+			<if test="errorTime != null">`error_time` = #{errorTime}, </if>
+			<if test="handle != null">`handle` = #{handle}, </if>
+			<if test="moderSn != null">`moder_sn` = #{moderSn}, </if>
+			<if test="modTime != null">`mod_time` = #{modTime}, </if>
+			<if test="tstm != null">`tstm` = #{tstm}</if>
+		</set>
+		where id = #{id}
+	</update>
+
+	<delete id="delete">
+		delete from mall_tax_error_record where id = #{value}
+	</delete>
+
+	<delete id="deleteBatch">
+		delete from mall_tax_error_record where id in
+		<foreach item="id" collection="array" open="(" separator="," close=")">
+			#{id}
+		</foreach>
+	</delete>
+
+</mapper>

+ 3 - 0
kmall-admin/src/main/webapp/WEB-INF/page/shop/offilineOrderList.html

@@ -13,6 +13,9 @@
                     <i-input v-model="q.orderSn" @on-enter="query" placeholder="订单号"/>
                 </i-col>
                 <i-col span="4">
+                    <i-input v-model="q.goodsSn" @on-enter="query" placeholder="sku"/>
+                </i-col>
+                <i-col span="4">
                     <i-select v-model="q.orderStatus" placeholder="订单状态">
                         <i-option value="0">待付款</i-option>
                         <i-option value="101">订单已取消</i-option>

+ 72 - 0
kmall-admin/src/main/webapp/WEB-INF/page/shop/taxerrorrecord.html

@@ -0,0 +1,72 @@
+<!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("taxerrorrecord:save"))
+                <i-button type="info" @click="add"><i class="fa fa-plus"></i>&nbsp;新增</i-button>
+                #end
+                #if($shiro.hasPermission("taxerrorrecord:update"))
+                <i-button type="warning" @click="update"><i class="fa fa-pencil-square-o"></i>&nbsp;修改</i-button>
+                #end
+                #if($shiro.hasPermission("taxerrorrecord: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="taxErrorRecord" :rules="ruleValidate" :label-width="80">
+            <Form-item label="料件号" prop="sku">
+                <i-input v-model="taxErrorRecord.sku" placeholder="料件号"/>
+            </Form-item>
+            <Form-item label="税率" prop="goodsRate">
+                <i-input v-model="taxErrorRecord.goodsRate" placeholder="税率"/>
+            </Form-item>
+            <Form-item label="金额" prop="money">
+                <i-input v-model="taxErrorRecord.money" placeholder="金额"/>
+            </Form-item>
+            <Form-item label="异常发生时间" prop="errorTime">
+                <i-input v-model="taxErrorRecord.errorTime" placeholder="异常发生时间"/>
+            </Form-item>
+            <Form-item label="是否修改过" prop="handle">
+                <i-input v-model="taxErrorRecord.handle" placeholder="是否修改过"/>
+            </Form-item>
+            <Form-item label="修改人编号" prop="moderSn">
+                <i-input v-model="taxErrorRecord.moderSn" placeholder="修改人编号"/>
+            </Form-item>
+            <Form-item label="修改时间" prop="modTime">
+                <i-input v-model="taxErrorRecord.modTime" placeholder="修改时间"/>
+            </Form-item>
+            <Form-item label="时间戳" prop="tstm">
+                <i-input v-model="taxErrorRecord.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/taxerrorrecord.js?_${date.systemTime}"></script>
+</body>
+</html>

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

@@ -1255,7 +1255,7 @@ function openWebSocket() {
         //无法使用wss,浏览器打开WebSocket时报错
         //ws对应http、wss对应https。
         // webSocket = new WebSocket("ws://183.62.225.124:8080/ws/server/"+storeId);
-        webSocket = new WebSocket("ws://127.0.0.1:8070//ws/server/"+storeId);
+        webSocket = new WebSocket("ws://8.135.102.238:8080//ws/server/"+storeId);
         // webSocket = new WebSocket("wss://cb.k1net.cn/ws/server/"+storeId);
         if (webSocket.readyState === webSocket.CONNECTING) {
             console.log('1.连接正在打开......');

+ 35 - 4
kmall-admin/src/main/webapp/js/sale/salesdataupload.js

@@ -171,11 +171,42 @@ let vm = new Vue({
             handleResetForm(this, name);
         },
 		download: function (event){
-			let fileData = getSelectedRowData();
-			if (fileData.length != 1 && fileData.length != undefined){
+
+			var grid = $("#jqGrid");
+			var rowKey = grid.getGridParam("selrow");
+			if (!rowKey) {
+				iview.Message.error("请选择一条记录");
 				return;
 			}
-			window.location.href = "../salesdataupload/download?filePath="+fileData.uploadAddress+"&fileName="+fileData.fileName+"&fileId="+fileData.fileId;
+
+			var selectedIDs = grid.getGridParam("selarrrow");
+			if (selectedIDs.length > 1) {
+				// iview.Message.error("只能选择一条记录");
+				// return;
+			}
+
+			let filePaths = new Array();
+			let fileNames = new Array();
+			let fileIds = new Array();
+
+			for(var i = 0 ; i < selectedIDs.length ; i++){
+				let fileData = $("#jqGrid").jqGrid('getRowData', selectedIDs[i])
+				filePaths.push(fileData.uploadAddress);
+				fileNames.push(fileData.fileName);
+				fileIds.push(fileData.fileId);
+			}
+
+			console.log(filePaths);
+			console.log(fileNames);
+			console.log(fileIds);
+
+
+
+			// let fileData = getSelectedRowData();
+			// if (fileData.length != 1 && fileData.length != undefined){
+			// 	return;
+			// }
+			window.location.href = "../salesdataupload/download?filePath="+filePaths+"&fileName="+fileNames+"&fileId="+fileIds;
 			/*let fileIds = getSelectedRows();
 			if(null != fileIds && fileIds.length < 3){
 				for(let i=0; i<fileIds.length; i++){
@@ -257,4 +288,4 @@ let vm = new Vue({
 			});
 		}
 	}
-});
+});

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

@@ -194,6 +194,7 @@ let vm = new Vue({
             orderType: '',
             startTime: '',
             endTime: '',
+            goodsSn:'',
         },
         refundMoney: 0,
         shipping: {},
@@ -250,6 +251,7 @@ let vm = new Vue({
                     'orderType': vm.q.orderType,
                     'startTime': vm.q.startTime,
                     'endTime': vm.q.endTime,
+                    'goodsSn':vm.q.goodsSn,
                 },
                 page: page
             }).trigger("reloadGrid");
@@ -258,7 +260,8 @@ let vm = new Vue({
             vm.q = {
                 orderSn: '',
                 orderStatus: '',
-                orderType: ''
+                orderType: '',
+                goodsSn:''
             };
         },
         lookDetail: function (rowId) { //第三步:定义编辑操作

+ 146 - 0
kmall-admin/src/main/webapp/js/shop/taxerrorrecord.js

@@ -0,0 +1,146 @@
+$(function () {
+    $("#jqGrid").jqGrid({
+        url: '../taxerrorrecord/list',
+        datatype: "json",
+        colModel: [
+			{label: 'id', name: 'id', index: 'id', key: true, hidden: true},
+			{label: '料件号', name: 'sku', index: 'sku', width: 80},
+			{label: '税率', name: 'goodsRate', index: 'goods_rate', width: 80},
+			{label: '金额', name: 'money', index: 'money', width: 80},
+			{label: '异常发生时间', name: 'errorTime', index: 'error_time', width: 80},
+			{label: '是否修改过', name: 'handle', index: 'handle', width: 80},
+			{label: '修改人编号', name: 'moderSn', index: 'moder_sn', width: 80},
+			{label: '修改时间', name: 'modTime', index: 'mod_time', width: 80},
+			{label: '时间戳', name: 'tstm', index: 'tstm', width: 80}],
+		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,
+		taxErrorRecord: {},
+		ruleValidate: {
+			name: [
+				{required: true, message: '名称不能为空', trigger: 'blur'}
+			]
+		},
+		q: {
+		    name: ''
+		}
+	},
+	methods: {
+		query: function () {
+			vm.reload();
+		},
+		add: function () {
+			vm.showList = false;
+			vm.title = "新增";
+			vm.taxErrorRecord = {};
+		},
+		update: function (event) {
+            let id = getSelectedRow();
+			if (id == null) {
+				return;
+			}
+			vm.showList = false;
+            vm.title = "修改";
+
+            vm.getInfo(id)
+		},
+		saveOrUpdate: function (event) {
+            let url = vm.taxErrorRecord.id == null ? "../taxerrorrecord/save" : "../taxerrorrecord/update";
+			$.ajax({
+				type: "POST",
+			    url: url,
+			    contentType: "application/json",
+			    data: JSON.stringify(vm.taxErrorRecord),
+                success: function (r) {
+                    if (r.code === 0) {
+                        alert('操作成功', function (index) {
+                            vm.reload();
+                        });
+                    } else {
+                        alert(r.msg);
+                    }
+                }
+			});
+		},
+		del: function (event) {
+            let ids = getSelectedRows();
+			if (ids == null){
+				return;
+			}
+
+			confirm('确定要删除选中的记录?', function () {
+				$.ajax({
+					type: "POST",
+				    url: "../taxerrorrecord/delete",
+				    contentType: "application/json",
+				    data: JSON.stringify(ids),
+				    success: function (r) {
+						if (r.code == 0) {
+							alert('操作成功', function (index) {
+								$("#jqGrid").trigger("reloadGrid");
+							});
+						} else {
+							alert(r.msg);
+						}
+					}
+				});
+			});
+		},
+		getInfo: function(id){
+			$.get("../taxerrorrecord/info/"+id, function (r) {
+                vm.taxErrorRecord = r.taxErrorRecord;
+            });
+		},
+        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);
+        }
+	}
+});

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