Ver Fonte

运费模板

huangzhiguo há 1 ano atrás
pai
commit
40cdf05ed7

+ 23 - 6
src/main/java/com/caimei365/commodity/controller/ProductShopApi.java

@@ -73,6 +73,20 @@ public class ProductShopApi {
         return shopService.getShopProducts(showFlag, shopId, name, productCode, validFlag, featuredFlag, commodityType, bigTypeId, smallTypeId, tinyTypeId, groundMall, newvalidFlag, pageNum, pageSize);
     }
 
+    /**
+     * 供应商 -- 运费模板选择
+     * @param shopId
+     * @return
+     */
+    @ApiOperation("供应商 -- 运费模板选择")
+    @GetMapping("/product/getFreight")
+    public ResponseJson getFreight(Integer shopId) {
+        if (null == shopId) {
+            return ResponseJson.error(-1,"供应商Id不能为空", null);
+        }
+        return shopService.getFreight(shopId);
+    }
+
     /**
      * 供应商 -- 运费模板
      * @param shopId
@@ -80,7 +94,8 @@ public class ProductShopApi {
      * @param pageSize
      * @return
      */
-    @GetMapping("/getFreightTemplate")
+    @ApiOperation("供应商 -- 运费模板")
+    @GetMapping("/product/getFreightTemplate")
     public ResponseJson getFreightTemplate( Integer shopId,
                                             @RequestParam(value = "pageNum", defaultValue = "1") int pageNum,
                                            @RequestParam(value = "pageSize", defaultValue = "20") int pageSize) {
@@ -95,8 +110,9 @@ public class ProductShopApi {
      * @param id
      * @return
      */
-    @PostMapping("/getFreightTemplateById/{id}")
-    public ResponseJson getFreightTemplateById(@PathVariable("id") Integer id) {
+    @ApiOperation("复制运费模板")
+    @GetMapping("/product/getFreightTemplateById")
+    public ResponseJson getFreightTemplateById(Integer id) {
         if (null == id ){
             ResponseJson.error(-1,"需复制的运费模板Id不能为空", null);
         }
@@ -108,8 +124,9 @@ public class ProductShopApi {
      * @param id
      * @return
      */
-    @PostMapping("/templateDetail/{id}")
-    public ResponseJson getFreightTemplateDetail(@PathVariable("id") Integer id) {
+    @ApiOperation("运费模板回显")
+    @GetMapping("/product/templateDetail")
+    public ResponseJson getFreightTemplateDetail(Integer id) {
         if (null == id) {
             return ResponseJson.error(-1,"运费模板Id不能为空");
         }
@@ -146,7 +163,7 @@ public class ProductShopApi {
      * @return
      */
     @ApiOperation("删除运费模板")
-    @GetMapping("/delFreight")
+    @GetMapping("/product/delFreight")
     public ResponseJson deleteFreightTemplate(Integer id) {
         if (null == id) {
             return ResponseJson.error(-1, "运费模板Id不能为空",null);

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

@@ -83,10 +83,10 @@ public interface ShopMapper {
 
     /**
      * 获取运费模板下所有运费规则
-     * @param Ids
+     * @param ids
      * @return
      */
-    List<FreightRuleVo> getRule(List<Integer> Ids);
+    List<FreightRuleVo> getRule(@Param("ids") List<Integer> ids);
 
 
     /**
@@ -105,10 +105,10 @@ public interface ShopMapper {
 
     /**
      * 运费规则下所有区域集合
-     * @param Ids
+     * @param ids
      * @return
      */
-    List<FreightAreaVo> getArea(List<Integer> Ids);
+    List<FreightAreaVo> getArea(@Param("ids") List<Integer> ids);
 
     /**
      * 省份集合

+ 1 - 1
src/main/java/com/caimei365/commodity/model/dto/FreightRuleDto.java

@@ -51,5 +51,5 @@ public class FreightRuleDto implements Serializable {
     /**
      * 运费规则对应地区集合
      */
-    private List<FreightAreaDto> freightAreaList;
+    private String freightAreaList;
 }

+ 1 - 1
src/main/java/com/caimei365/commodity/model/dto/FreightTemplateDto.java

@@ -26,5 +26,5 @@ public class FreightTemplateDto implements Serializable {
     /**
      * 运费模板对应规则集合
      */
-    private List<FreightRuleDto> freightRuleList;
+    private String freightRuleList;
 }

+ 3 - 7
src/main/java/com/caimei365/commodity/model/vo/FreightAreaVo.java

@@ -16,15 +16,11 @@ public class FreightAreaVo {
      */
     private Integer ruleId;
     /**
-     * 省Id
+     * 归属的运费规则
      */
-    private Integer provinceId;
+    private Integer type;
     /**
      * 市Id
      */
-    private Integer townId;
-    /**
-     * 添加时间
-     */
-    private String addTime;
+    private Integer cityId;
 }

+ 1 - 1
src/main/java/com/caimei365/commodity/model/vo/FreightTemplateVo.java

@@ -17,7 +17,7 @@ public class FreightTemplateVo {
     /**
      * 运费模板名称
      */
-    private Integer name;
+    private String name;
     /**
      * 供应商Id
      */

+ 6 - 0
src/main/java/com/caimei365/commodity/service/ShopService.java

@@ -49,6 +49,12 @@ public interface ShopService {
      */
     ResponseJson<Map<String, Object>> getShopProducts(Integer showFlag,Integer shopId, String name, String productCode, Integer validFlag, Integer featuredFlag, Integer commodityType, Integer bigTypeId, Integer smallTypeId, Integer tinyTypeId, Integer groundMall, Integer newvalidFlag, int pageNum, int pageSize);
 
+    /**
+     * 供应商 -- 运费模板选择
+     * @param shopId
+     * @return
+     */
+    ResponseJson getFreight(Integer shopId);
     /**
      * 供应商 -- 运费模板
      * @param pageNum

+ 86 - 41
src/main/java/com/caimei365/commodity/service/impl/ShopServiceImpl.java

@@ -1,6 +1,7 @@
 package com.caimei365.commodity.service.impl;
 
 import com.alibaba.fastjson.JSON;
+import com.alibaba.fastjson.JSONArray;
 import com.alibaba.fastjson.JSONObject;
 import com.caimei365.commodity.components.PriceUtilService;
 import com.caimei365.commodity.mapper.PriceMapper;
@@ -24,6 +25,7 @@ import org.springframework.transaction.interceptor.TransactionAspectSupport;
 import org.springframework.util.Assert;
 
 import javax.annotation.Resource;
+import java.sql.Array;
 import java.text.SimpleDateFormat;
 import java.util.*;
 import java.util.stream.Collectors;
@@ -154,6 +156,18 @@ public class ShopServiceImpl implements ShopService {
         return ResponseJson.success(map);
     }
 
+    /**
+     * 供应商 -- 运费模板选择
+     *
+     * @param shopId
+     * @return
+     */
+    @Override
+    public ResponseJson getFreight(Integer shopId) {
+        List<FreightTemplateVo> shopTemplate = shopMapper.getTemplate(shopId);
+        return ResponseJson.success(shopTemplate);
+    }
+
     /**
      * 供应商 -- 运费模板
      *
@@ -342,28 +356,46 @@ public class ShopServiceImpl implements ShopService {
      */
     @Override
     public ResponseJson saveFreightTemplate(FreightTemplateDto freightTemplateDto) {
+        log.info("freightTemplateDto===="+freightTemplateDto);
         if (null == freightTemplateDto) {
             return ResponseJson.error(-1, "运费模板不能为空",null);
         }
-        if (null == freightTemplateDto.getFreightRuleList()) {
+        if (StringUtils.isBlank(freightTemplateDto.getFreightRuleList())) {
+            return ResponseJson.error(-1, "运费模板对应规则不能为空", null);
+        }
+        List<FreightRuleDto> freightRuleDtos = JSONArray.parseArray(freightTemplateDto.getFreightRuleList(), FreightRuleDto.class);
+        if (null != freightRuleDtos && freightRuleDtos.size() > 0) {
+            freightRuleDtos.forEach(r -> {
+                Assert.notNull(r.getFreeType(), "是否指定条件包邮不能为空!");
+                Assert.notNull(r.getRuleTax(), "运费规则名称不能为空!");
+                Assert.notNull(r.getAreaTax(), "运费地区不能为空!");
+                Assert.notNull(r.getFreightAreaList(), "运费规则对应地区集合不能为空!");
+            });
+        } else {
             return ResponseJson.error(-1, "运费模板对应规则不能为空", null);
         }
 
         if (null == freightTemplateDto.getId()) {
             // 新增运费模板
-
             shopMapper.insertTemplate(freightTemplateDto);
+            log.info("freightTemplateDto.getId()======"+freightTemplateDto.getId());
             // 添加运费模板规则
-            for (FreightRuleDto ruleDto : freightTemplateDto.getFreightRuleList()) {
+            for (FreightRuleDto ruleDto : freightRuleDtos) {
                 ruleDto.setFreightId(freightTemplateDto.getId());
                 shopMapper.insertRule(ruleDto);
+                log.info("ruleDto.getId()======="+ruleDto.getId());
                 // 添加运费模板规则地区
-                if (null == ruleDto.getFreightAreaList()) {
-                    // 设置手动回滚
+                List<FreightAreaDto> freightAreaDtos = JSONArray.parseArray(ruleDto.getFreightAreaList(), FreightAreaDto.class);
+                if (null != freightAreaDtos && freightAreaDtos.size() > 0) {
+                    freightAreaDtos.forEach(a -> {
+                        Assert.notNull(a.getType(), "归属的运费规则不能为空!");
+                        Assert.notNull(a.getCityId(), "市Id不能为空!");
+                    });
+                } else {
                     TransactionAspectSupport.currentTransactionStatus().setRollbackOnly();
-                    return ResponseJson.error(-1, "运费模板规则锁执行地区不能为空", null);
+                    return ResponseJson.error(-1, "运费模板对应规则不能为空", null);
                 }
-                for (FreightAreaDto areaDto : ruleDto.getFreightAreaList()) {
+                for (FreightAreaDto areaDto : freightAreaDtos) {
                     areaDto.setRuleId(ruleDto.getId());
                     shopMapper.insertArea(areaDto);
                 }
@@ -371,15 +403,21 @@ public class ShopServiceImpl implements ShopService {
         } else {
             // 修改
             shopMapper.updateTemplate(freightTemplateDto);
-            for (FreightRuleDto ruleDto : freightTemplateDto.getFreightRuleList()) {
+            for (FreightRuleDto ruleDto : freightRuleDtos) {
                 shopMapper.updateRule(ruleDto);
-                if (null == ruleDto.getFreightAreaList()) {
+                List<FreightAreaDto> freightAreaDtos = JSONArray.parseArray(ruleDto.getFreightAreaList(), FreightAreaDto.class);
+                if (null != freightAreaDtos && freightAreaDtos.size() > 0) {
+                    freightAreaDtos.forEach(a -> {
+                        Assert.notNull(a.getType(), "归属的运费规则不能为空!");
+                        Assert.notNull(a.getCityId(), "市Id不能为空!");
+                    });
+                } else {
                     // 设置手动回滚
                     TransactionAspectSupport.currentTransactionStatus().setRollbackOnly();
-                    return ResponseJson.error(-1, "运费模板规则锁执行地区不能为空", null);
+                    return ResponseJson.error(-1, "运费模板对应规则不能为空", null);
                 }
                 List<Integer> ids = new ArrayList<>();
-                for (FreightAreaDto areaDto : ruleDto.getFreightAreaList()) {
+                for (FreightAreaDto areaDto : freightAreaDtos) {
                     areaDto.setRuleId(ruleDto.getId());
                     if (null == areaDto.getId()) {
                         shopMapper.insertArea(areaDto);
@@ -485,12 +523,12 @@ public class ShopServiceImpl implements ShopService {
         }
         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(), "起订量不能为空!");
-        });
+            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);
         if (null != mallSkus && mallSkus.size() > 0) {
@@ -975,24 +1013,23 @@ public class ShopServiceImpl implements ShopService {
         if (null != templateVos) {
             List<Integer> templateIds = templateVos.stream().map(FreightTemplateVo::getId).collect(Collectors.toList());
             List<FreightRuleVo> rule = shopMapper.getRule(templateIds);
-            if (null == rule) {
-                return null;
-            }
-            List<Integer> ruleIds = rule.stream().map(FreightRuleVo::getId).collect(Collectors.toList());
-            List<FreightAreaVo> area = shopMapper.getArea(ruleIds);
-            if (null == area) {
-                return null;
-            }
-            // 将地区与运费规则关联
-            for (FreightRuleVo ruleVo : rule) {
-                List<FreightAreaVo> areaVoList = area.stream().filter(a -> a.getRuleId().equals(ruleVo.getId())).collect(Collectors.toList());
-                ruleVo.setFreightAreaList(areaVoList);
-            }
-            // 将运费规则与运费模板关联
-            for (FreightTemplateVo templateVo : templateVos) {
-                List<FreightRuleVo> ruleVoList = rule.stream().filter(r -> r.getFreightId().equals(templateVo.getId())).collect(Collectors.toList());
-                templateVo.setFreightRuleList(ruleVoList);
+            if (null != rule) {
+                List<Integer> ruleIds = rule.stream().map(FreightRuleVo::getId).collect(Collectors.toList());
+                List<FreightAreaVo> area = shopMapper.getArea(ruleIds);
+                if (null != area) {
+                    // 将地区与运费规则关联
+                    for (FreightRuleVo ruleVo : rule) {
+                        List<FreightAreaVo> areaVoList = area.stream().filter(a -> a.getRuleId().equals(ruleVo.getId())).collect(Collectors.toList());
+                        ruleVo.setFreightAreaList(areaVoList);
+                    }
+                    // 将运费规则与运费模板关联
+                    for (FreightTemplateVo templateVo : templateVos) {
+                        List<FreightRuleVo> ruleVoList = rule.stream().filter(r -> r.getFreightId().equals(templateVo.getId())).collect(Collectors.toList());
+                        templateVo.setFreightRuleList(ruleVoList);
+                    }
+                }
             }
+
         }
         return templateVos;
     }
@@ -1008,18 +1045,27 @@ public class ShopServiceImpl implements ShopService {
                 // 省选中
                 List<String> provinceName = new ArrayList<>();
                 for (ProvinceVo provinceVo : regionVo.getProvinceList()) {
+                    // 区域、省type 和区域 type 一直
+                    if (null != provinceVo.getCityList() && provinceVo.getCityList().size() > 0) {
+                        regionVo.setType(provinceVo.getCityList().get(0).getType());
+                        provinceVo.setType(provinceVo.getCityList().get(0).getType());
+                    } else {
+                        regionVo.setType(0);
+                        provinceVo.setType(0);
+                    }
                     List<String> cityName = new ArrayList<>();
                     // 市选中状态
                     for (CityVo cityVo : provinceVo.getCityList()) {
-                        if ( null != cityVo.getType()) {
+
+                        if ( null != cityVo.getType() && 0 != cityVo.getType()) {
                             cityVo.setChecked(true);
+
                             cityName.add(cityVo.getName());
                         } else {
                             cityVo.setChecked(false);
                         }
                     }
-                    String[] splitCity = StringUtils.strip(cityName.toString(),"[]").split(",");
-                    provinceVo.setCheckedCities(splitCity);
+                    provinceVo.setCheckedCities(cityName.toArray(new String[]{}));
                     /**
                      * Checked、当省份下的市全被勾选中的话为 true 部分市被勾选中 为false
                      * IsIndeterminate、当省份下的市全被勾选中的话为 false 部分市被勾选中 为true
@@ -1031,7 +1077,7 @@ public class ShopServiceImpl implements ShopService {
                         provinceName.add(provinceVo.getName());
                     } else if (provinceVo.getCityList().stream().noneMatch(CityVo::getChecked)) {
                         // 市全部未选中 省设置未全选
-                        provinceVo.setIsIndeterminate(true);
+                        provinceVo.setIsIndeterminate(false);
                         provinceVo.setChecked(false);
                     } else {
                         // 市部分选中 省设置未全选
@@ -1039,8 +1085,7 @@ public class ShopServiceImpl implements ShopService {
                         provinceVo.setChecked(false);
                     }
                 }
-                String[] spiltProvince = StringUtils.strip(provinceName.toString(),"[]").split(",");
-                regionVo.setCheckedCities(spiltProvince);
+                regionVo.setCheckedCities(provinceName.toArray(new String[]{}));
                 // 区域选中
                 if (regionVo.getProvinceList().stream().allMatch(ProvinceVo::getChecked)) {
                     // 省全部选中
@@ -1048,7 +1093,7 @@ public class ShopServiceImpl implements ShopService {
                     regionVo.setChecked(true);
                 } else if (regionVo.getProvinceList().stream().noneMatch(ProvinceVo::getChecked)){
                     // 省全部未选中
-                    regionVo.setIsIndeterminate(true);
+                    regionVo.setIsIndeterminate(false);
                     regionVo.setChecked(false);
                 } else {
                     // 省部分选中

+ 45 - 28
src/main/resources/mapper/ShopMapper.xml

@@ -222,6 +222,12 @@
         <if test="hasSkuFlag != null and  hasSkuFlag != ''">
             hasSkuFlag = #{hasSkuFlag},
         </if>
+        <if test="freePostFlag != null and  freePostFlag != ''">
+            freePostFlag = #{freePostFlag},
+        </if>
+        <if test="freightTemplateId != null and  freightTemplateId != ''">
+            freightTemplateId = #{freightTemplateId},
+        </if>
         <if test="sellNumber != null and  sellNumber != ''">
             sellNumber = #{sellNumber},
         </if>
@@ -599,19 +605,20 @@
     </select>
 
     <select id="getTemplateVoById" resultType="com.caimei365.commodity.model.vo.FreightTemplateVo">
-        select name, shopId, addTime, updateTime, delFlag from cm_freight_template
+        select id, name, shopId, addTime, updateTime, delFlag from cm_freight_template
         where delFlag = 0 and id = #{id}
     </select>
 
     <select id="getRule" resultType="com.caimei365.commodity.model.vo.FreightRuleVo">
-        select id, freightId, freightAmount, areaTax, freeType, freeCondition, productNum, allAmount from cm_freight_rule
-        where
+        select id, freightId, ruleTax, freightAmount, areaTax, freeType, freeCondition, productNum, allAmount from cm_freight_rule
+        <where>
             <if test="ids.size()>0">
                 freightId in
                 <foreach collection="ids" item="id" open="(" separator="," close=")">
                     #{id}
                 </foreach>
             </if>
+        </where>
     </select>
 
     <select id="getRuleById" resultType="com.caimei365.commodity.model.vo.FreightRuleVo">
@@ -625,14 +632,15 @@
     </select>
 
     <select id="getArea" resultType="com.caimei365.commodity.model.vo.FreightAreaVo">
-        select id, ruleId, type, provinceId, townId, addTime from cm_freight_area
-        where
-        <if test="ids.size()>0">
-            ruleId in
-            <foreach collection="ids" item="id" open="(" separator="," close=")">
-                #{id}
-            </foreach>
-        </if>
+        select id, ruleId, type, cityId from cm_freight_area
+        <where>
+            <if test="ids.size()>0">
+                ruleId in
+                <foreach collection="ids" item="id" open="(" separator="," close=")">
+                    #{id}
+                </foreach>
+            </if>
+        </where>
     </select>
 
     <select id="getProvince" resultType="com.caimei365.commodity.model.vo.ProvinceVo">
@@ -640,31 +648,39 @@
     </select>
 
     <select id="getCity" resultType="com.caimei365.commodity.model.vo.CityVo">
-        SELECT c.provinceID AS provinceId, c.cityID AS cityId, name , cf.type
+        SELECT c.provinceID AS provinceId, c.cityID AS cityId, name ,
+        <if test="ruleId != null">
+               ifnull(cf.type, 0) as type
+        </if>
+        <if test="ruleId == null">
+            0 as type
+        </if>
         FROM city c
-        left join
-            (
-            SELECT cfa.type, cfa.cityId FROM cm_freight_area cfa
-            LEFT JOIN cm_freight_rule cfr ON cfr.id = cfa.ruleId
-            <WHERE>
-                <if test="freightId != null and freightId != ''">
-                    and cfr.freightId = #{freightId}
-                </if>
-                <if test="ruleId != null and ruleId != ''">
-                    and cfr.id = #{ruleId}
-                </if>
-            </WHERE>
-            ) cf ON c.cityId = cf.cityId
+        <if test="ruleId != null">
+            left join
+                (
+                SELECT cfa.type, cfa.cityId FROM cm_freight_area cfa
+                LEFT JOIN cm_freight_rule cfr ON cfr.id = cfa.ruleId
+                <where>
+                    <if test="freightId != null and freightId != ''">
+                        and cfr.freightId = #{freightId}
+                    </if>
+                    <if test="ruleId != null and ruleId != ''">
+                        and cfr.id = #{ruleId}
+                    </if>
+                </where>
+                ) cf ON c.cityId = cf.cityId
+        </if>
         where c.validFlag = 1
     </select>
 
-    <insert id="insertTemplate" keyProperty="id" keyColumn="id" parameterType="com.caimei365.commodity.model.dto.FreightTemplateDto">
+    <insert id="insertTemplate" keyProperty="id" keyColumn="id" useGeneratedKeys="true" parameterType="com.caimei365.commodity.model.dto.FreightTemplateDto">
         insert into cm_freight_template
             ( name, shopId, addTime, delFlag )
         values( #{name}, #{shopId}, now(), 0 )
     </insert>
 
-    <insert id="insertRule" keyProperty="id" keyColumn="id" parameterType="com.caimei365.commodity.model.dto.FreightRuleDto">
+    <insert id="insertRule" keyProperty="id" keyColumn="id" useGeneratedKeys="true" parameterType="com.caimei365.commodity.model.dto.FreightRuleDto">
         insert into cm_freight_rule
             ( freightId, ruleTax, freightAmount, areaTax, freeType, freeCondition, productNum, allAmount )
             values ( #{freightId}, #{ruleTax}, #{freightAmount}, #{areaTax}, #{freeType}, #{freeCondition}, #{productNum}, #{allAmount})
@@ -685,7 +701,8 @@
 
     <update id="updateRule">
         update cm_freight_rule
-        set freightAmount = #{freightAmount},
+        set ruleTax = #{ruleTax},
+            freightAmount = #{freightAmount},
             areaTax = #{areaTax},
             freeType = #{freeType},
             freeCondition = #{freeCondition},