|
@@ -8,10 +8,7 @@ import com.caimei365.commodity.mapper.PriceMapper;
|
|
|
import com.caimei365.commodity.mapper.PromotionsMapper;
|
|
|
import com.caimei365.commodity.mapper.ShopMapper;
|
|
|
import com.caimei365.commodity.model.ResponseJson;
|
|
|
-import com.caimei365.commodity.model.dto.BrandDto;
|
|
|
-import com.caimei365.commodity.model.dto.FeaturedDto;
|
|
|
-import com.caimei365.commodity.model.dto.ProductDto;
|
|
|
-import com.caimei365.commodity.model.dto.Sku;
|
|
|
+import com.caimei365.commodity.model.dto.*;
|
|
|
import com.caimei365.commodity.model.po.*;
|
|
|
import com.caimei365.commodity.model.search.ProductListVo;
|
|
|
import com.caimei365.commodity.model.vo.*;
|
|
@@ -24,6 +21,7 @@ import org.springframework.beans.BeanUtils;
|
|
|
import org.springframework.beans.factory.annotation.Value;
|
|
|
import org.springframework.stereotype.Service;
|
|
|
import org.springframework.transaction.annotation.Transactional;
|
|
|
+import org.springframework.transaction.interceptor.TransactionAspectSupport;
|
|
|
import org.springframework.util.Assert;
|
|
|
|
|
|
import javax.annotation.Resource;
|
|
@@ -157,6 +155,221 @@ public class ShopServiceImpl implements ShopService {
|
|
|
return ResponseJson.success(map);
|
|
|
}
|
|
|
|
|
|
+ /**
|
|
|
+ * 供应商 -- 运费模板
|
|
|
+ *
|
|
|
+ * @param pageNum
|
|
|
+ * @param pageSize
|
|
|
+ * @return
|
|
|
+ */
|
|
|
+ @Override
|
|
|
+ public ResponseJson getFreightTemplate(Integer shopId, Integer pageNum, Integer pageSize) {
|
|
|
+ PageHelper.startPage(pageNum, pageSize);
|
|
|
+ List<FreightTemplateVo> shopTemplate = shopMapper.getTemplate(shopId);
|
|
|
+ // 设置模板信息
|
|
|
+ List<FreightTemplateVo> freightTemplateVos = setFreightTemplate(shopTemplate);
|
|
|
+ PaginationVo<FreightTemplateVo> paginationVo = new PaginationVo<>(freightTemplateVos);
|
|
|
+ return ResponseJson.success(paginationVo);
|
|
|
+ }
|
|
|
+
|
|
|
+ /**
|
|
|
+ * 根据模板Id 复制一份新的运费模板
|
|
|
+ *
|
|
|
+ * @param id
|
|
|
+ * @return
|
|
|
+ */
|
|
|
+ @Override
|
|
|
+ public ResponseJson copeFreightTemplateById(Integer id) {
|
|
|
+ // 获取运费模板信息
|
|
|
+ FreightTemplateDto template = shopMapper.getTemplateById(id);
|
|
|
+ if (null != template) {
|
|
|
+ // 插入新的运费模板
|
|
|
+ shopMapper.insertTemplate(template);
|
|
|
+ // 获取运费模板规则
|
|
|
+ List<FreightRuleDto> rule = shopMapper.getRuleById(id);
|
|
|
+ if (null == rule || rule.size() <= 0) {
|
|
|
+ return ResponseJson.error(-1,"运费模板规则异常",null);
|
|
|
+ }
|
|
|
+ // 获取规则地区
|
|
|
+ List<Integer> ruleIds = rule.stream().map(FreightRuleDto::getId).collect(Collectors.toList());
|
|
|
+ List<FreightAreaVo> area = shopMapper.getArea(ruleIds);
|
|
|
+ if (null == area || area.size() <= 0) {
|
|
|
+ return ResponseJson.error(-1,"运费模板规则地区异常",null);
|
|
|
+ }
|
|
|
+ // 复制运费规则
|
|
|
+ for (FreightRuleDto freightRuleDto : rule) {
|
|
|
+ FreightRuleDto ruleDto = new FreightRuleDto();
|
|
|
+ BeanUtils.copyProperties(freightRuleDto, ruleDto);
|
|
|
+ ruleDto.setFreightId(template.getId());
|
|
|
+ shopMapper.insertRule(ruleDto);
|
|
|
+ // 复制规则地区
|
|
|
+ List<FreightAreaVo> areaVoList = area.stream().filter(a -> a.getRuleId().equals(freightRuleDto.getId())).collect(Collectors.toList());
|
|
|
+ for (FreightAreaVo freightAreaVo : areaVoList) {
|
|
|
+ FreightAreaDto areaDto = new FreightAreaDto();
|
|
|
+ BeanUtils.copyProperties(freightAreaVo, areaDto);
|
|
|
+ areaDto.setRuleId(ruleDto.getId());
|
|
|
+ shopMapper.insertArea(areaDto);
|
|
|
+ }
|
|
|
+ }
|
|
|
+ } else {
|
|
|
+ return ResponseJson.error(-1,"运费模板信息异常",null);
|
|
|
+ }
|
|
|
+ return ResponseJson.success();
|
|
|
+ }
|
|
|
+
|
|
|
+ /**
|
|
|
+ * 选择地区
|
|
|
+ *
|
|
|
+ * @return
|
|
|
+ */
|
|
|
+ @Override
|
|
|
+ public ResponseJson getArea(Integer freightId, Integer ruleId) {
|
|
|
+ // 区域
|
|
|
+ List<RegionDto> regionList = new ArrayList<>();
|
|
|
+ // 添加区域 东北、华东、华北、华中、华南、西南、西北
|
|
|
+ RegionDto regionDto = new RegionDto();
|
|
|
+ regionDto.setName("东北");
|
|
|
+ regionList.add(regionDto);
|
|
|
+ regionDto = new RegionDto();
|
|
|
+ regionDto.setName("华东");
|
|
|
+ regionList.add(regionDto);
|
|
|
+ regionDto = new RegionDto();
|
|
|
+ regionDto.setName("华北");
|
|
|
+ regionList.add(regionDto);
|
|
|
+ regionDto = new RegionDto();
|
|
|
+ regionDto.setName("华中");
|
|
|
+ regionList.add(regionDto);
|
|
|
+ regionDto = new RegionDto();
|
|
|
+ regionDto.setName("华南");
|
|
|
+ regionList.add(regionDto);
|
|
|
+ regionDto = new RegionDto();
|
|
|
+ regionDto.setName("西南");
|
|
|
+ regionList.add(regionDto);
|
|
|
+ regionDto = new RegionDto();
|
|
|
+ regionDto.setName("西北");
|
|
|
+ regionList.add(regionDto);
|
|
|
+ // 省份集合
|
|
|
+ List<ProvinceDto> provinceList = shopMapper.getProvince();
|
|
|
+ // 市集合
|
|
|
+ List<CityDto> cityList = shopMapper.getCity(freightId, ruleId);
|
|
|
+ for (ProvinceDto procince: provinceList) {
|
|
|
+ List<CityDto> collect = cityList.stream().filter(c -> c.getProvinceId().equals(procince.getProvinceId())).collect(Collectors.toList());
|
|
|
+ procince.setCityList(collect);
|
|
|
+ }
|
|
|
+ for (RegionDto region : regionList) {
|
|
|
+ List<ProvinceDto> collect = null;
|
|
|
+ if ("东北".equals(region.getName())) {
|
|
|
+ collect = provinceList.stream().filter(p -> p.getName().contains("辽宁") || p.getName().contains("吉林") || p.getName().contains("黑龙江")).collect(Collectors.toList());
|
|
|
+ region.setProvinceList(collect);
|
|
|
+ }
|
|
|
+ if ("华东".equals(region.getName())) {
|
|
|
+ collect = provinceList.stream().filter(p -> p.getName().contains("上海") || p.getName().contains("江苏") || p.getName().contains("浙江")
|
|
|
+ || p.getName().contains("安徽") || p.getName().contains("福建") || p.getName().contains("江西") || p.getName().contains("山东")).collect(Collectors.toList());
|
|
|
+ region.setProvinceList(collect);
|
|
|
+ }
|
|
|
+ if ("华北".equals(region.getName())) {
|
|
|
+ collect = provinceList.stream().filter(p -> p.getName().contains("北京") || p.getName().contains("天津") || p.getName().contains("河北")
|
|
|
+ || p.getName().contains("山西") || p.getName().contains("内蒙古")).collect(Collectors.toList());
|
|
|
+ region.setProvinceList(collect);
|
|
|
+ }
|
|
|
+ if ("华中".equals(region.getName())) {
|
|
|
+ collect = provinceList.stream().filter(p -> p.getName().contains("河南") || p.getName().contains("湖北") || p.getName().contains("湖南")).collect(Collectors.toList());
|
|
|
+ region.setProvinceList(collect);
|
|
|
+ }
|
|
|
+ if ("华南".equals(region.getName())) {
|
|
|
+ collect = provinceList.stream().filter(p -> p.getName().contains("广东") || p.getName().contains("广西") || p.getName().contains("海南")).collect(Collectors.toList());
|
|
|
+ region.setProvinceList(collect);
|
|
|
+ }
|
|
|
+ if ("西南".equals(region.getName())) {
|
|
|
+ collect = provinceList.stream().filter(p -> p.getName().contains("重庆") || p.getName().contains("四川") || p.getName().contains("贵州")
|
|
|
+ || p.getName().contains("云南") || p.getName().contains("西藏")).collect(Collectors.toList());
|
|
|
+ region.setProvinceList(collect);
|
|
|
+ }
|
|
|
+ if ("西北".equals(region.getName())) {
|
|
|
+ collect = provinceList.stream().filter(p -> p.getName().contains("陕西") || p.getName().contains("甘肃") || p.getName().contains("青海")
|
|
|
+ || p.getName().contains("宁夏") || p.getName().contains("新疆")).collect(Collectors.toList());
|
|
|
+ region.setProvinceList(collect);
|
|
|
+ }
|
|
|
+ }
|
|
|
+
|
|
|
+ return ResponseJson.success(regionList);
|
|
|
+ }
|
|
|
+
|
|
|
+ /**
|
|
|
+ * 供应商 -- 新增运费模板
|
|
|
+ *
|
|
|
+ * @param freightTemplateDto
|
|
|
+ * @return
|
|
|
+ */
|
|
|
+ @Override
|
|
|
+ public ResponseJson saveFreightTemplate(FreightTemplateDto freightTemplateDto) {
|
|
|
+ if (null == freightTemplateDto) {
|
|
|
+ return ResponseJson.error(-1, "运费模板不能为空",null);
|
|
|
+ }
|
|
|
+ if (null == freightTemplateDto.getFreightRuleList()) {
|
|
|
+ return ResponseJson.error(-1, "运费模板对应规则不能为空", null);
|
|
|
+ }
|
|
|
+ SimpleDateFormat dateFormat = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
|
|
|
+ String format = dateFormat.format(new Date());
|
|
|
+ if (null == freightTemplateDto.getId()) {
|
|
|
+ // 新增运费模板
|
|
|
+
|
|
|
+ freightTemplateDto.setAddTime(format);
|
|
|
+ shopMapper.insertTemplate(freightTemplateDto);
|
|
|
+ // 添加运费模板规则
|
|
|
+ for (FreightRuleDto ruleDto : freightTemplateDto.getFreightRuleList()) {
|
|
|
+ ruleDto.setFreightId(freightTemplateDto.getId());
|
|
|
+ shopMapper.insertRule(ruleDto);
|
|
|
+ // 添加运费模板规则地区
|
|
|
+ if (null == ruleDto.getFreightAreaList()) {
|
|
|
+ // 设置手动回滚
|
|
|
+ TransactionAspectSupport.currentTransactionStatus().setRollbackOnly();
|
|
|
+ return ResponseJson.error(-1, "运费模板规则锁执行地区不能为空", null);
|
|
|
+ }
|
|
|
+ for (FreightAreaDto areaDto : ruleDto.getFreightAreaList()) {
|
|
|
+ areaDto.setRuleId(ruleDto.getId());
|
|
|
+ areaDto.setAddTime(format);
|
|
|
+ shopMapper.insertArea(areaDto);
|
|
|
+ }
|
|
|
+ }
|
|
|
+ } else {
|
|
|
+ // 修改
|
|
|
+ freightTemplateDto.setUpdateTime(format);
|
|
|
+ shopMapper.updateTemplate(freightTemplateDto);
|
|
|
+ for (FreightRuleDto ruleDto : freightTemplateDto.getFreightRuleList()) {
|
|
|
+ shopMapper.updateRule(ruleDto);
|
|
|
+ if (null == ruleDto.getFreightAreaList()) {
|
|
|
+ // 设置手动回滚
|
|
|
+ TransactionAspectSupport.currentTransactionStatus().setRollbackOnly();
|
|
|
+ return ResponseJson.error(-1, "运费模板规则锁执行地区不能为空", null);
|
|
|
+ }
|
|
|
+ List<Integer> ids = new ArrayList<>();
|
|
|
+ for (FreightAreaDto areaDto : ruleDto.getFreightAreaList()) {
|
|
|
+ areaDto.setRuleId(ruleDto.getId());
|
|
|
+ areaDto.setAddTime(format);
|
|
|
+ if (null == areaDto.getId()) {
|
|
|
+ shopMapper.insertArea(areaDto);
|
|
|
+ }
|
|
|
+ ids.add(areaDto.getId());
|
|
|
+ }
|
|
|
+ shopMapper.deleteArea(ruleDto.getId(),ids);
|
|
|
+ }
|
|
|
+ }
|
|
|
+ return ResponseJson.success();
|
|
|
+ }
|
|
|
+
|
|
|
+ /**
|
|
|
+ * 删除运费模板
|
|
|
+ *
|
|
|
+ * @param id
|
|
|
+ * @return
|
|
|
+ */
|
|
|
+ @Override
|
|
|
+ public ResponseJson deleteFreightTemplate(Integer id) {
|
|
|
+ shopMapper.deleteTemplate(id);
|
|
|
+ return ResponseJson.success();
|
|
|
+ }
|
|
|
+
|
|
|
/**
|
|
|
* 供应商-发布商品
|
|
|
*
|
|
@@ -230,6 +443,12 @@ public class ShopServiceImpl implements ShopService {
|
|
|
if (StringUtils.isBlank(productDto.getSkus()) && StringUtils.isBlank(productDto.getMallSkus())) {
|
|
|
return ResponseJson.error("参数异常:商品sku不能为空!", null);
|
|
|
}
|
|
|
+ if (null == productDto.getFreePostFlag()) {
|
|
|
+ return ResponseJson.error("参数异常,物流方式不能为空",null);
|
|
|
+ }
|
|
|
+ if (2 == productDto.getFreePostFlag() && null == productDto.getFreightTemplateId()) {
|
|
|
+ return ResponseJson.error("参数异常,运费模板Id不能为空",null);
|
|
|
+ }
|
|
|
List<Sku> skus = JSON.parseArray(productDto.getSkus(), Sku.class);
|
|
|
if (null != skus && skus.size() > 0) {
|
|
|
skus.forEach(s -> {
|
|
@@ -714,4 +933,23 @@ public class ShopServiceImpl implements ShopService {
|
|
|
}
|
|
|
|
|
|
|
|
|
+ private List<FreightTemplateVo> setFreightTemplate(List<FreightTemplateVo> templateVos) {
|
|
|
+ if (null != templateVos) {
|
|
|
+ List<Integer> templateIds = templateVos.stream().map(FreightTemplateVo::getId).collect(Collectors.toList());
|
|
|
+ List<FreightRuleVo> rule = shopMapper.getRule(templateIds);
|
|
|
+ List<Integer> ruleIds = rule.stream().map(FreightRuleVo::getId).collect(Collectors.toList());
|
|
|
+ List<FreightAreaVo> area = shopMapper.getArea(ruleIds);
|
|
|
+ // 将地区与运费规则关联
|
|
|
+ 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;
|
|
|
+ }
|
|
|
}
|