瀏覽代碼

联合丽格1.0.2

huangzhiguo 1 年之前
父節點
當前提交
0110d35648

+ 3 - 2
src/main/java/com/caimei365/commodity/components/PriceUtilService.java

@@ -229,7 +229,8 @@ public class PriceUtilService {
                                 price.setStock(lowAllPrice.getStock());
                             }
                         }
-                    } else {
+                    }
+                    /* else {
                         // 复购价
                         Double repurchase = priceMapper.getRepurchasePrice(s.getSkuId(), userId);
                         if (null != repurchase && repurchase > 0) {
@@ -237,7 +238,7 @@ public class PriceUtilService {
                             s.setRepurchaseFlag(1);
                             s.setLadderPriceFlag(0);
                         }
-                    }
+                    }*/
                 }
             }
             //添加税费

+ 7 - 0
src/main/java/com/caimei365/commodity/mapper/ShopMapper.java

@@ -231,5 +231,12 @@ public interface ShopMapper {
 
     void updateSku(Sku s);
 
+    /**
+     * 删除Sku
+     * @param skuIds
+     * @param productId
+     */
+    void deleteSku(List<Integer> skuIds, Integer productId, Integer organizeId);
+
     void insertProductInfo(@Param("organizeId") Integer organizeId, @Param("productId") Integer productId, @Param("validFlag") Integer validFlag);
 }

+ 12 - 0
src/main/java/com/caimei365/commodity/model/vo/MallOrganizeProductVo.java

@@ -51,6 +51,18 @@ public class MallOrganizeProductVo {
      * 供应商名称
      */
     private String shopName;
+    /**
+     * 机构 税率
+     */
+    private Double taxRate;
+    /**
+     * 是否含税   0不含税,1含税,2未知
+     */
+    private Integer includedTax;
+    /**
+     * 发票类型(基于是否含税基础)   1增值税票,2普通票, 3不能开票
+     */
+    private String invoiceType;
     /**
      * 商品名称
      */

+ 13 - 0
src/main/java/com/caimei365/commodity/service/impl/MallOrganizeServiceImpl.java

@@ -6,6 +6,8 @@ import com.caimei365.commodity.model.ResponseJson;
 import com.caimei365.commodity.model.po.ProcurePo;
 import com.caimei365.commodity.model.vo.*;
 import com.caimei365.commodity.service.MallOrganizeService;
+import com.caimei365.commodity.utils.MathUtil;
+import lombok.extern.slf4j.Slf4j;
 import org.apache.commons.lang3.StringUtils;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.stereotype.Service;
@@ -24,6 +26,7 @@ import java.util.stream.Collectors;
  * @date : 2023/4/28
  */
 @Service
+@Slf4j
 public class MallOrganizeServiceImpl implements MallOrganizeService {
 
     @Autowired private MallOrganizeMapper mallOrganizeMapper;
@@ -57,6 +60,11 @@ public class MallOrganizeServiceImpl implements MallOrganizeService {
             if (null != mallProducts) {
                 List<MallOrganizeProductVo> productVos = mallProducts.stream().filter(m -> m.getFloorId() == floor.getId()).collect(Collectors.toList());
                 productVos.forEach( product -> {
+                    // 计算税费
+                    boolean taxFlag = (Integer.valueOf(0).equals(product.getIncludedTax()) && ("1".equals(product.getInvoiceType()) || "2".equals(product.getInvoiceType())));
+                    if (taxFlag) {
+                        product.setPrice(MathUtil.add(product.getPrice(), MathUtil.div(MathUtil.mul(product.getPrice(), product.getTaxRate()), 100, 2)).doubleValue());
+                    }
                     // 价格等级
                     product.setPriceGrade(priceUtilService.getPriceGrade(product.getPrice()));
                 });
@@ -145,6 +153,11 @@ public class MallOrganizeServiceImpl implements MallOrganizeService {
     public ResponseJson<List<MallOrganizeProductVo>> getOrganizeProducts(Integer floorId) {
         List<MallOrganizeProductVo> organizeProducts = mallOrganizeMapper.getOrganizeProducts(floorId);
         organizeProducts.forEach(p -> {
+            // 计算税费
+            boolean taxFlag = (Integer.valueOf(0).equals(p.getIncludedTax()) && ("1".equals(p.getInvoiceType()) || "2".equals(p.getInvoiceType())));
+            if (taxFlag) {
+                p.setPrice(MathUtil.add(p.getPrice(), MathUtil.div(MathUtil.mul(p.getPrice(), p.getTaxRate()), 100, 2)).doubleValue());
+            }
             // 价格等级
             p.setPriceGrade(priceUtilService.getPriceGrade(p.getPrice()));
         });

+ 5 - 0
src/main/java/com/caimei365/commodity/service/impl/PageServiceImpl.java

@@ -746,6 +746,11 @@ public class PageServiceImpl implements PageService {
                 Integer like = likeMapper.findLike(userId, product.getProductId());
                 product.setUserLike(like);
             }
+            // 计算税费
+            boolean taxFlag = (Integer.valueOf(0).equals(product.getIncludedTax()) && ("1".equals(product.getInvoiceType()) || "2".equals(product.getInvoiceType())));
+            if (taxFlag) {
+                product.setPrice(MathUtil.add(product.getPrice(), MathUtil.div(MathUtil.mul(product.getPrice(), product.getTaxPoint()), 100, 2)).doubleValue());
+            }
             organizeSkus.forEach(o -> {
                 // 设置价格等级
                 o.setPriceGrade(priceUtilService.getPriceGrade(o.getPrice()));

+ 61 - 31
src/main/java/com/caimei365/commodity/service/impl/ShopServiceImpl.java

@@ -118,6 +118,8 @@ public class ShopServiceImpl implements ShopService {
         List<ProductItemVo> productList = shopMapper.getShopProductsSelect(showFlag, newvalidFlag, shopId, name, productCode, validFlag, featuredFlag, commodityType, bigTypeId, smallTypeId, tinyTypeId, groundMall);
         if (null != productList && productList.size() > 0) {
             for (ProductItemVo product : productList) {
+                // 前端判断不能有空
+                product.setGroundMall(product.getGroundMall().trim().replaceAll(" ",""));
                 String typeName = shopMapper.getTypeName(product.getBigTypeId(), product.getSmallTypeId(), product.getTinyTypeId());
                 product.setTypeName(typeName);
                 product.setIsChecked(false);
@@ -225,24 +227,27 @@ public class ShopServiceImpl implements ShopService {
         if (StringUtils.isBlank(productDto.getDetailInfo())) {
             return ResponseJson.error("参数异常:商品详情信息不能为空!", null);
         }
-        if (StringUtils.isBlank(productDto.getSkus())) {
+        if (StringUtils.isBlank(productDto.getSkus()) && StringUtils.isBlank(productDto.getMallSkus())) {
             return ResponseJson.error("参数异常:商品sku不能为空!", null);
         }
         List<Sku> skus = JSON.parseArray(productDto.getSkus(), Sku.class);
+        if (null != skus && skus.size() > 0) {
         skus.forEach(s -> {
             Assert.notNull(s.getNormalPrice(), "市场价不能为空!");
             Assert.notNull(s.getPrice(), "售价不能为空!");
             Assert.notNull(s.getUnit(), "规格不能为空!");
             Assert.notNull(s.getMinBuyNumber(), "起订量不能为空!");
         });
+        }
         List<Sku> mallSkus = JSON.parseArray(productDto.getMallSkus(), Sku.class);
-        mallSkus.forEach(s -> {
-            Assert.notNull(s.getNormalPrice(), "市场价不能为空!");
-            Assert.notNull(s.getPrice(), "售价不能为空!");
-            Assert.notNull(s.getUnit(), "规格不能为空!");
-            Assert.notNull(s.getMinBuyNumber(), "起订量不能为空!");
-        });
-
+        if (null != mallSkus && mallSkus.size() > 0) {
+            mallSkus.forEach(s -> {
+                Assert.notNull(s.getNormalPrice(), "市场价不能为空!");
+                Assert.notNull(s.getPrice(), "售价不能为空!");
+                Assert.notNull(s.getUnit(), "规格不能为空!");
+                Assert.notNull(s.getMinBuyNumber(), "起订量不能为空!");
+            });
+        }
         JSONObject parseObject = JSON.parseObject(productDto.getParams());
         //图片
         List<Map<String, String>> imageList = (List<Map<String, String>>) parseObject.get("image");
@@ -398,16 +403,30 @@ public class ShopServiceImpl implements ShopService {
         }
     }
 
+    /**
+     * 修改sku信息
+     * @param skus
+     * @param productId
+     */
     public void updateSkus(List<Sku> skus, Integer productId) {
-        skus.forEach(s -> {
-            s.setProductId(productId);
-            s.setOrganizeId(0);
-            if (null != s.getSkuId()) {
-                shopMapper.updateSku(s);
-            } else {
-                shopMapper.insertSku(s);
-            }
-        });
+        List<Integer> skuIds = new ArrayList<>();
+        if (null != skus && skus.size() > 0) {
+            skus.forEach(s -> {
+                s.setProductId(productId);
+                s.setOrganizeId(0);
+                if (null != s.getSkuId()) {
+                    shopMapper.updateSku(s);
+                } else {
+                    shopMapper.insertSku(s);
+                }
+            });
+            skuIds = skus.stream().map(Sku::getSkuId).collect(Collectors.toList());
+            shopMapper.deleteSku(skuIds, productId, 0);
+        } else {
+            shopMapper.deleteSku(skuIds, productId, 0);
+            // 采美商城商品状态
+            shopMapper.updateVaildFlag(0, productId, 3);
+        }
     }
 
     /**
@@ -417,20 +436,29 @@ public class ShopServiceImpl implements ShopService {
      * @param productId
      */
     public void saveMallSku(List<Sku> skus, Integer productId) {
-        skus.forEach(s -> {
-            s.setProductId(productId);
-            s.setOrganizeId(4);
-            // 默认比例
-            s.setOrganizePercent(17d);
-            s.setShopPercent(80d);
-            s.setCmPercent(3d);
-            s.setOrganizeId(s.getOrganizeId());
-            if (null == s.getSkuId()) {
-                shopMapper.insertSku(s);
-            } else {
-                shopMapper.updateSku(s);
-            }
-        });
+        List<Integer> skuIds = new ArrayList<>();
+        if (null != skus && skus.size() > 0) {
+            skus.forEach(s -> {
+                s.setProductId(productId);
+                s.setOrganizeId(4);
+                // 默认比例
+                s.setOrganizePercent(17d);
+                s.setShopPercent(80d);
+                s.setCmPercent(3d);
+                s.setOrganizeId(s.getOrganizeId());
+                if (null == s.getSkuId()) {
+                    shopMapper.insertSku(s);
+                } else {
+                    shopMapper.updateSku(s);
+                }
+            });
+            skuIds = skus.stream().map(Sku::getSkuId).collect(Collectors.toList());
+            shopMapper.deleteSku(skuIds, productId, 4);
+        } else {
+            shopMapper.deleteSku(skuIds, productId, 4);
+            // 采美商城商品状态
+            shopMapper.updateVaildFlag(4, productId, 3);
+        }
     }
 
     /**
@@ -457,6 +485,8 @@ public class ShopServiceImpl implements ShopService {
         }
         // 上架平台
         product.setGroundMall(product.getGroundMall().replaceAll("##", ","));
+        // 前端判断不能有空格
+        product.setGroundMall(product.getGroundMall().trim().replaceAll(" ",""));
         if (StringUtils.isNotBlank(product.getTags())) {
             String[] tags = product.getTags().split(",");
             product.setTagsList(tags);

+ 38 - 6
src/main/resources/mapper/MallOrganizeMapper.xml

@@ -55,13 +55,29 @@
         s.costPrice,
         s.ladderPriceFlag,
         s.minBuyNumber as minBuyNumber,
-        IFNULL((SELECT validFlag FROM cm_organize_product_info  WHERE productId = p.productID AND organizeId =4), 999) AS validFlag,
+        IFNULL(copi.validFlag, 999) AS validFlag,
         p.name,
+        p.taxPoint as taxRate,
+        p.includedTax,
+        p.invoiceType,
         p.mainImage
         FROM cm_mall_floor_product cmfp
         LEFT JOIN product p ON p.productId = cmfp.productId
-        LEFT JOIN cm_sku s ON p.productId = s.productId
         left join cm_organize_product_info copi on copi.productId = p.productID and copi.organizeId = 4
+        LEFT JOIN
+        (SELECT
+        cs.organizeId,
+        cs.productID,
+        cs.price AS price,
+        cs.normalPrice,
+        cs.costPrice,
+        cs.ladderPriceFlag,
+        cs.minBuyNumber
+        FROM cm_mall_floor_product cmfp
+        LEFT JOIN cm_sku cs ON cmfp.productId = cs.productId
+        WHERE cs.organizeId =4
+        GROUP BY cs.productID
+        ORDER BY cs.price) s ON p.productId = s.productId
         <where>
             copi.validFlag = 2 and s.organizeId =4
             <if test="floorIds.size() > 0">
@@ -218,13 +234,29 @@
             s.ladderPriceFlag,
             s.price AS price,
             s.minBuyNumber as minBuyNumber,
-            IFNULL((SELECT validFlag FROM cm_organize_product_info  WHERE productId = p.productID AND organizeId = 4), 999) AS validFlag,
+            IFNULL(copi.validFlag, 999) AS validFlag,
             p.name,
+            p.taxPoint as taxRate,
+            p.includedTax,
+            p.invoiceType,
             p.mainImage
         FROM product p
-            LEFT JOIN cm_sku s ON p.productId = s.productId
-                 LEFT JOIN cm_mall_floor_product cmfp ON cmfp.productId = p.productId
-        WHERE  s.organizeId = 4 and cmfp.floorId = #{floorId}
+            LEFT JOIN cm_mall_floor_product cmfp ON cmfp.productId = p.productId
+            LEFT JOIN (SELECT
+		        cs.organizeId,
+                cs.productID,
+                cs.price AS price,
+                cs.normalPrice,
+                cs.costPrice,
+                cs.ladderPriceFlag,
+                cs.minBuyNumber
+                FROM cm_mall_floor_product cmfp
+                LEFT JOIN cm_sku cs ON cmfp.productId = cs.productId
+                WHERE cs.organizeId =4
+                GROUP BY cs.productID
+                ORDER BY cs.price) s ON p.productId = s.productId
+        left join cm_organize_product_info copi on copi.productId = p.productId
+        WHERE  s.organizeId = 4 and cmfp.floorId = #{floorId} and copi.validFlag = 2 and copi.organizeId = 4
     </select>
     <select id="getThemeInfo" resultType="com.caimei365.commodity.model.vo.MallThemeVo">
         SELECT id, organizeId, topic, image, enabledStatus, jumpType, jumpProductId, jumpActiveId, ADDTIME

+ 37 - 2
src/main/resources/mapper/ShopMapper.xml

@@ -78,6 +78,15 @@
         <if test="qualificationTime != null and  qualificationTime != ''">
             qualificationTime,
         </if>
+        <if test="trainingMethod != null and  trainingMethod != ''">
+            trainingMethod,
+        </if>
+        <if test="trainingType != null and  trainingType != ''">
+            trainingType,
+        </if>
+        <if test="trainingFee != null and  trainingFee != ''">
+            trainingFee,
+        </if>
         updateTime,newProductType,showFlag,newvalidFlag
         ) values (
         #{groundMall}, #{shopId}, #{name}, #{aliasName}, #{commodityType}, #{bigTypeId}, #{smallTypeId}, #{tinyTypeId}, #{mainImage},
@@ -154,6 +163,15 @@
         <if test="qualificationTime != null and  qualificationTime != ''">
             #{qualificationTime},
         </if>
+        <if test="trainingMethod != null and  trainingMethod != ''">
+            #{trainingMethod},
+        </if>
+        <if test="trainingType != null and  trainingType != ''">
+            #{trainingType},
+        </if>
+        <if test="trainingFee != null and  trainingFee != ''">
+            #{trainingFee},
+        </if>
         #{updateTime}, #{newProductType},#{showFlag},3
         )
     </insert>
@@ -240,6 +258,12 @@
         <if test="invoiceType != null and  invoiceType != ''">
             invoiceType = #{invoiceType},
         </if>
+        <if test="trainingMethod != null and  trainingMethod != ''">
+            trainingMethod = #{trainingMethod},
+        </if>
+        <if test="trainingType != null and  trainingType != ''">
+            trainingType = #{trainingType},
+        </if>
         updateTime = #{updateTime},
         showFlag=#{showFlag}
         where productID = #{productId}
@@ -275,7 +299,7 @@
         values (#{name}, #{source}, #{userId}, #{status}, #{delFlag}, #{createDate}, #{updateDate}, #{logo},
                 #{description})
     </insert>
-    <insert id="insertSku">
+    <insert id="insertSku" keyColumn="skuId" keyProperty="skuId" parameterType="com.caimei365.commodity.model.dto.Sku">
         insert into cm_sku
         (productId,
          organizeId,
@@ -395,6 +419,17 @@
             unit=#{unit}
         where skuId = #{skuId}
     </update>
+    <delete id="deleteSku">
+        delete from cm_sku
+        where productId = #{productId}
+          <if test="skuIds.size() > 0">
+            and skuId not in
+            <foreach collection="skuIds" item="skuId" open="(" separator="," close=")">
+                #{skuId}
+            </foreach>
+          </if>
+         and organizeId = #{organizeId}
+    </delete>
     <delete id="deleteProductImage">
         delete
         from productimage
@@ -486,7 +521,7 @@
             <if test="name != null and name != ''">
                 and p.name like CONCAT("%",#{name},"%")
             </if>
-            <if test="groundMall != null and groundMall != ''">
+            <if test="groundMall != null">
                 and p.groundMall like concat('%',#{groundMall},'%')
             </if>
             <if test="newvalidFlag !=null and newvalidFlag!=''">