Pārlūkot izejas kodu

Merge branch 'zx_saas_goods' of http://git.dayaedu.com/yonge/mec into zx_saas_goods

刘俊驰 1 gadu atpakaļ
vecāks
revīzija
6d1cfec63c

+ 1 - 13
mec-application/src/main/java/com/ym/mec/web/controller/GoodsController.java

@@ -14,7 +14,6 @@ import com.ym.mec.biz.service.GoodsService;
 import com.ym.mec.biz.service.SysUserService;
 import com.ym.mec.common.controller.BaseController;
 import com.ym.mec.common.dto.BrandDto;
-import com.ym.mec.common.dto.ProductAttributeCategoryDto;
 import com.ym.mec.common.dto.ProductCategoryDto;
 import com.ym.mec.common.page.PageInfo;
 import io.swagger.annotations.Api;
@@ -124,18 +123,7 @@ public class GoodsController extends BaseController {
         }else if(StringUtils.isEmpty(employee.getOrganIdList())){
             return failed("用户所在分部异常");
         }
-        PageInfo<Goods> page = goodsService.queryPage(queryInfo);
-        List<Goods> rows = page.getRows();
-        if (!rows.isEmpty()) {
-            Map<String, String> brandIdNameMap = goodsService.queryGoodsBrandList().stream().collect(Collectors.toMap(next -> next.getId().toString(), BrandDto::getName));
-            Map<Integer, String> categoryIdNameMap = goodsService.queryGoodsCategoryList().stream().collect(Collectors.toMap(next -> next.getId().intValue(), ProductCategoryDto::getName));
-
-            for (Goods row : rows) {
-                row.setBrandName(brandIdNameMap.getOrDefault(row.getBrand(), row.getBrand()));
-                row.setGoodsCategoryName(categoryIdNameMap.getOrDefault(row.getGoodsCategoryId(), ""));
-            }
-        }
-        return succeed(page);
+        return succeed(goodsService.queryPage(queryInfo));
     }
 
     @ApiOperation(value = "通过科目编号、商品分类 查询商品(教材、辅件)列表")

+ 0 - 2
mec-biz/src/main/java/com/ym/mec/biz/dal/dto/ComplementGoodsDto.java

@@ -11,6 +11,4 @@ public class ComplementGoodsDto {
         private Integer goodsId;
 
         private BigDecimal organCostPrice;
-
-        private String skuCode;
 }

+ 2 - 2
mec-biz/src/main/java/com/ym/mec/biz/dal/entity/Goods.java

@@ -115,8 +115,8 @@ public class Goods {
 	private String complementGoodsIdList;
 
 	/** 发布时间 */
-	@ApiModelProperty(value = "附件商品详情",required = false)
-	private String complementGoodsJson;
+//	@ApiModelProperty(value = "附件商品详情",required = false)
+//	private String complementGoodsJson;
 
 	/** 辅件列表 */
 	@ApiModelProperty(value = "辅件列表(子商品)",required = false)

+ 4 - 0
mec-biz/src/main/java/com/ym/mec/biz/dal/mapper/GoodsSubMapper.java

@@ -1,11 +1,13 @@
 package com.ym.mec.biz.dal.mapper;
 
 import com.baomidou.mybatisplus.core.mapper.BaseMapper;
+import com.ym.mec.biz.dal.dto.ComplementGoodsDto;
 import com.ym.mec.biz.dal.entity.GoodsSub;
 import org.apache.ibatis.annotations.Param;
 import org.springframework.stereotype.Repository;
 
 import java.util.List;
+import java.util.Map;
 
 /**
  * 组合商品,子商品信息
@@ -18,4 +20,6 @@ public interface GoodsSubMapper extends BaseMapper<GoodsSub> {
     void saveBatch(@Param("goodsSubs") List<GoodsSub> goodsSubs);
 
     void updateStatus(@Param("goodsSubIdList") List<Integer> goodsSubIdList, @Param("status") Boolean status);
+
+    List<ComplementGoodsDto> queryChildGoods(@Param("goodsId") Integer goodsId);
 }

+ 82 - 43
mec-biz/src/main/java/com/ym/mec/biz/service/impl/GoodsServiceImpl.java

@@ -13,7 +13,6 @@ import com.ym.mec.biz.dal.dao.SellOrderDao;
 import com.ym.mec.biz.dal.dao.TeacherDao;
 import com.ym.mec.biz.dal.dto.BasicUserDto;
 import com.ym.mec.biz.dal.dto.GoodsSellDto;
-import com.ym.mec.biz.dal.dto.SubjectGoodsDto;
 import com.ym.mec.biz.dal.entity.Goods;
 import com.ym.mec.biz.dal.entity.GoodsProcurement;
 import com.ym.mec.biz.dal.entity.GoodsSub;
@@ -48,6 +47,7 @@ import com.ym.mec.common.entity.GoodsSubStockModel;
 import com.ym.mec.common.entity.UploadReturnBean;
 import com.ym.mec.common.exception.BizException;
 import com.ym.mec.common.page.PageInfo;
+import com.ym.mec.common.page.QueryInfo;
 import com.ym.mec.common.service.IdGeneratorService;
 import com.ym.mec.common.service.impl.BaseServiceImpl;
 import com.ym.mec.common.tenant.TenantContextHolder;
@@ -73,18 +73,9 @@ import org.springframework.util.CollectionUtils;
 import org.springframework.web.multipart.MultipartFile;
 
 import javax.annotation.Resource;
-import java.io.BufferedWriter;
-import java.io.ByteArrayInputStream;
-import java.io.File;
-import java.io.FileOutputStream;
-import java.io.FileWriter;
-import java.io.IOException;
-import java.io.InputStream;
-import java.io.OutputStream;
-import java.io.OutputStreamWriter;
+import java.io.*;
 import java.math.BigDecimal;
 import java.nio.charset.StandardCharsets;
-import java.nio.file.Files;
 import java.text.SimpleDateFormat;
 import java.util.*;
 import java.util.concurrent.atomic.AtomicInteger;
@@ -302,7 +293,7 @@ public class GoodsServiceImpl extends BaseServiceImpl<Integer, Goods>  implement
 					throw new BizException("{}等商品还在销售中", goodsNames);
 				}
 			}
-			List<GoodsWrapper.GoodsSub> goodsSubs = queryGoodsSub(goodsId);
+			List<GoodsWrapper.GoodsSub> goodsSubs = queryGoodsSubByGoodId(goodsId);
 			if (!CollectionUtils.isEmpty(goodsSubs) && status == 1) {
 				long falseSize = goodsSubs.stream().map(GoodsWrapper.GoodsSub::getGoodsStatus).filter(Boolean.FALSE::equals).count();
 				if (falseSize > 0) {
@@ -323,7 +314,7 @@ public class GoodsServiceImpl extends BaseServiceImpl<Integer, Goods>  implement
 		goodsDao.update(goods);
 	}
 
-	private List<GoodsWrapper.GoodsSub> queryGoodsSub(Integer goodsId) {
+	private List<GoodsWrapper.GoodsSub> queryGoodsSubByGoodId(Integer goodsId) {
 		// 从管乐迷商城组合的商品
 		QueryWrapper<GoodsSub> queryWrapper = new QueryWrapper<>();
 		queryWrapper.eq("goods_id_", goodsId);
@@ -331,7 +322,7 @@ public class GoodsServiceImpl extends BaseServiceImpl<Integer, Goods>  implement
 		if (goodsSubs.isEmpty()) {
 			return new ArrayList<>();
 		}
-		List<String> skuList = goodsSubs.stream().map(next -> next.getSku().toString()).distinct().collect(Collectors.toList());
+//		List<String> skuList = goodsSubs.stream().map(next -> next.getSku().toString()).distinct().collect(Collectors.toList());
 		List<GoodsWrapper.GoodsSub> goodsSubList = goodsSubs.stream().map(next -> {
 			GoodsWrapper.GoodsSub goodsSub = new GoodsWrapper.GoodsSub();
 			goodsSub.setId(next.getId());
@@ -342,13 +333,15 @@ public class GoodsServiceImpl extends BaseServiceImpl<Integer, Goods>  implement
 			goodsSub.setGoodsPrice(next.getGoodsPrice());
 			return goodsSub;
 		}).collect(Collectors.toList());
+		List<String> goodIdList = goodsSubs.stream().map(next -> next.getMallGoodsId().toString()).distinct().collect(Collectors.toList());
 		PmsProductQueryParamDto build = PmsProductQueryParamDto.builder()
-				.skuStockIds(String.join(",", skuList))
+				.productIds(String.join(",", goodIdList))
 				.pageSize(9999)
 				.pageNum(1).build();
 		build.setJson(JSON.toJSONString(build));
-		Map<Integer, PmsProductDto> map = mallFeignService.getProductList(build)
-				.getRows().stream().collect(Collectors.toMap(PmsProductDto::getSkuStockId, Function.identity()));
+		List<PmsProductDto> rows = mallFeignService.getProductList(build).getRows();
+		Map<Integer, PmsProductDto> map = rows.stream().collect(Collectors.toMap(PmsProductDto::getSkuStockId, Function.identity()));
+		Map<Long, List<PmsProductDto>> groupByGoodId = rows.stream().collect(Collectors.groupingBy(PmsProductDto::getGoodsId));
 		goodsSubList.forEach(next -> {
 			PmsProductDto dto = map.get(next.getSku());
 			if (dto != null) {
@@ -358,8 +351,11 @@ public class GoodsServiceImpl extends BaseServiceImpl<Integer, Goods>  implement
 				} else {
 					next.setGoodsStatus(dto.getPublishStatus() == 1);
 				}
-				next.setMallGoodsName(dto.getName());
-				next.setProductSn(dto.getProductSn());
+			}
+			if(groupByGoodId.containsKey(Long.valueOf(next.getMallGoodsId()))){
+				PmsProductDto dto1 =  groupByGoodId.get(Long.valueOf(next.getMallGoodsId())).get(0);
+				next.setMallGoodsName(dto1.getName());
+				next.setProductSn(dto1.getProductSn());
 			}
 		});
 		return goodsSubList;
@@ -385,6 +381,24 @@ public class GoodsServiceImpl extends BaseServiceImpl<Integer, Goods>  implement
 	}
 
 	@Override
+	public PageInfo<Goods> queryPage(QueryInfo queryInfo) {
+		PageInfo<Goods> page = super.queryPage(queryInfo);
+
+		List<Goods> rows = page.getRows();
+		if (!rows.isEmpty()) {
+			Map<String, String> brandIdNameMap = this.queryGoodsBrandList().stream().collect(Collectors.toMap(next -> next.getId().toString(), BrandDto::getName));
+			List<ProductCategoryDto> productCategoryDtos = treeToList(this.queryGoodsCategoryList());
+			Map<Integer, String> categoryIdNameMap = productCategoryDtos.stream().collect(Collectors.toMap(next -> next.getId().intValue(), ProductCategoryDto::getName));
+
+			for (Goods row : rows) {
+				row.setBrandName(brandIdNameMap.getOrDefault(row.getBrand(), row.getBrand()));
+				row.setGoodsCategoryName(categoryIdNameMap.getOrDefault(row.getGoodsCategoryId(), ""));
+			}
+		}
+		return page;
+	}
+
+	@Override
 	@Transactional(rollbackFor = Exception.class, isolation = Isolation.READ_COMMITTED)
 	public List<Goods> importGoods(MultipartFile file, Integer operatorId) throws Exception {
 		Map<String, List<Map<String, Object>>> sheetsListMap = POIUtil.importExcel(new ByteArrayInputStream(file.getBytes()), 2, file.getOriginalFilename());
@@ -600,8 +614,11 @@ public class GoodsServiceImpl extends BaseServiceImpl<Integer, Goods>  implement
 		goodsCategoryQueryInfo.setDelFlag(YesOrNoEnum.NO);
 		goodsCategoryQueryInfo.setPage(1);
 		goodsCategoryQueryInfo.setRows(9999);
-		Map<String, Integer> categoryIdNameMap = goodsCategoryService.querySubjectGoods(goodsCategoryQueryInfo).getRows()
-				.stream().collect(Collectors.toMap(SubjectGoodsDto::getGoodsCategoryName, SubjectGoodsDto::getGoodsCategoryId));
+
+		List<ProductCategoryDto> categoryList = mallFeignService.listWithChildren();
+		List<ProductCategoryDto> allCategoryList = treeToList(categoryList);
+		Map<String, Long> categoryIdNameMap = allCategoryList
+				.stream().collect(Collectors.toMap(ProductCategoryDto::getName, ProductCategoryDto::getId));
 		Set<String> categoryNames = categoryIdNameMap.keySet();
 
 		// 查询员工机构
@@ -612,14 +629,14 @@ public class GoodsServiceImpl extends BaseServiceImpl<Integer, Goods>  implement
 		InputStream inputStream = new ClassPathResource("columnMapper.ini").getInputStream();
 		Map<String, String> columns = IniFileUtil.readIniFile(inputStream, TemplateTypeEnum.GOODS_GROUP.getMsg());
 
-		List<Map<String, Object>> firstSheet = sheetsListMap.get(0);
+		List<Map<String, Object>> firstSheet = sheetsListMap.entrySet().iterator().next().getValue();
 		List<String> skuList = firstSheet.stream().map(next -> next.get("SKU").toString()).distinct().collect(Collectors.toList());
 
 		List<PmsProductDto> subGoods;
 		try {
 			// 查询SKU对应商品
 			PmsProductQueryParamDto dto = PmsProductQueryParamDto.builder()
-					.skuStockIds(String.join(",", skuList))
+					.skuStockCodes(String.join(",", skuList))
 					.pageNum(1)
 					.pageSize(9999)
 					.build();
@@ -629,11 +646,15 @@ public class GoodsServiceImpl extends BaseServiceImpl<Integer, Goods>  implement
 			errList.add("商城服务调用失败");
 			return getExportErrLogFile(errList);
 		}
-		Map<String, PmsProductDto>skuMap = subGoods.stream().collect(Collectors.toMap(next -> (next.getName() + "_" + next.getSkuCode()), Function.identity()));
+		Map<String, PmsProductDto> skuMap = new HashMap<>();
+		subGoods.forEach(next -> {
+			String key = next.getName() + "_" + next.getSkuCode();
+			if (!skuMap.containsKey(key)) { // 处理出现重复key问题
+				skuMap.put(key, next);
+			}
+		});
 
-//		List<GoodsWrapper.Goods> goodsList = new ArrayList<>();
 		List<JSONObject> jsonObjectList = new ArrayList<>();
-		Set<String> snSet = new HashSet<>();
 		for (Map.Entry<String, List<Map<String, Object>>> sheetData : sheetsListMap.entrySet()) {
 			List<Map<String, Object>> rows = sheetData.getValue();
 			if (rows.isEmpty()) {
@@ -642,26 +663,24 @@ public class GoodsServiceImpl extends BaseServiceImpl<Integer, Goods>  implement
 			Map<String, Object> firstRow = rows.get(0);
 			// 缺省字段
 			Set<String> templateFields = columns.keySet();
-			List<String> defaultField = templateFields.stream().filter(firstRow::containsKey).collect(Collectors.toList());
+			List<String> defaultField = templateFields.stream().filter(next->!firstRow.containsKey(next)).collect(Collectors.toList());
 			if (!defaultField.isEmpty()) {
 				errList.add("导入字段缺省:" + String.join(",", defaultField));
 				return getExportErrLogFile(errList);
 			}
 
-			String lineErrMsg = "第%s行存在错误:%s";
+			String lineErrMsg = "错误行号:第%s行,%s";
 			Map<String, String> beforeGoods = new HashMap<>();
 
-			JSONObject objectMap = new JSONObject();
-			String subGoodsName = null;
-			String subGoodsSku = null;
 			for (int i = 0; i < rows.size(); i++) {
+				JSONObject objectMap = new JSONObject();
 				int rowNum = i + 2;
-//				GoodsWrapper.Goods goods = new GoodsWrapper.Goods();
-//				GoodsWrapper.GoodsSub goodsSub = new GoodsWrapper.GoodsSub();
 				Map<String, Object> row = rows.get(i);
 				if (row.size() == 0) {
 					continue;
 				}
+				String subGoodsName = null;
+				String subGoodsSku = null;
 				List<String> lineErrList = new ArrayList<>();
 				for (Map.Entry<String, Object> entry : row.entrySet()) {
 					String fieldName = entry.getKey();
@@ -710,17 +729,17 @@ public class GoodsServiceImpl extends BaseServiceImpl<Integer, Goods>  implement
 						}
 					} else if ("type".equals(fieldCode)) {
 						String tempValue = value;
-						boolean match = Arrays.stream(GoodsType.values()).allMatch(next -> next.getDesc().equals(tempValue));
-						if (match) {
-							objectMap.put(fieldCode, value);
+						Optional<GoodsType> first = Arrays.stream(GoodsType.values()).filter(next -> next.getDesc().equals(tempValue)).findFirst();
+						if (first.isPresent()) {
+							objectMap.put(fieldCode, first.get().getCode());
 						} else {
 							lineErrList.add("字段‘" + fieldName + "’类型不支持");
 						}
 					} else if ("goodsCategoryName".equals(fieldCode)) {
 						if(categoryNames.contains(value)){
-							objectMap.put("goodsCategoryId", categoryIdNameMap.get(value));
+							objectMap.put("goodsCategoryId", categoryIdNameMap.get(value).intValue());
 						}else {
-							lineErrList.add("字段‘" + fieldName + "’类型不支持");
+							lineErrList.add("字段‘" + fieldName + "’不支持");
 						}
 					} else if ("educationShowOrganName".equals(fieldCode)
 							|| "courseFeeShowOrganName".equals(fieldCode)
@@ -750,7 +769,7 @@ public class GoodsServiceImpl extends BaseServiceImpl<Integer, Goods>  implement
 								objectMap.put("stock", dto.getStock());
 								objectMap.put("goodsStatus", dto.getPublishStatus()==1);
 							} else {
-								lineErrList.add("子商品‘" + value + "[" + subGoodsSku + "]’不存在");
+								lineErrList.add("子商品‘" + subGoodsName + "[" + subGoodsSku + "]’不存在");
 							}
 						}
 					} else if ("sku".equals(fieldCode)) {
@@ -764,7 +783,7 @@ public class GoodsServiceImpl extends BaseServiceImpl<Integer, Goods>  implement
 								objectMap.put("stock", dto.getStock());
 								objectMap.put("goodsStatus", dto.getPublishStatus()==1);
 							} else {
-								lineErrList.add("子商品‘" + value + "[" + subGoodsSku + "]’不存在");
+								lineErrList.add("子商品‘" + subGoodsName + "[" + subGoodsSku + "]’不存在");
 							}
 						}
 					} else if ("subGoodsPrice".equals(fieldCode)) {
@@ -802,7 +821,7 @@ public class GoodsServiceImpl extends BaseServiceImpl<Integer, Goods>  implement
 			return goods;
 		}).collect(Collectors.toList());
 
-		Map<String, List<GoodsWrapper.Goods>> goodsGroup = goodsList.stream().collect(Collectors.groupingBy(next -> next.getClass() + "_" + next.getSn()));
+		Map<String, List<GoodsWrapper.Goods>> goodsGroup = goodsList.stream().collect(Collectors.groupingBy(next -> next.getName() + "_" + next.getSn()));
 //
 //
 //		// 数据合并
@@ -1104,7 +1123,7 @@ public class GoodsServiceImpl extends BaseServiceImpl<Integer, Goods>  implement
 			goods.setFreeFeeShowOrganName(StringUtils.join(organizationDao.findByOrganIds(goods.getFreeFeeShowOrganId()),","));
 		}
 		GoodsWrapper.Goods detail = JSON.parseObject(JSON.toJSONString(goods), GoodsWrapper.Goods.class);
-		detail.setGoodsSubList(queryGoodsSub(goodsId));
+		detail.setGoodsSubList(queryGoodsSubByGoodId(goodsId));
 		return detail;
 	}
 
@@ -1299,7 +1318,10 @@ public class GoodsServiceImpl extends BaseServiceImpl<Integer, Goods>  implement
 			throw new RuntimeException(e);
 		}
 		try {
-			BufferedWriter csvFileOutputStream = new BufferedWriter(new OutputStreamWriter(Files.newOutputStream(file.toPath()), StandardCharsets.UTF_8), 1024);
+			FileOutputStream out = new FileOutputStream(file);
+			byte[] uft8bom = {(byte) 0xef, (byte) 0xbb, (byte) 0xbf}; // 处理乱码
+			out.write(uft8bom);
+			BufferedWriter csvFileOutputStream = new BufferedWriter(new OutputStreamWriter(out, StandardCharsets.UTF_8));
 
 			for (String errMsg : errList) {
 				csvFileOutputStream.write(errMsg);
@@ -1314,4 +1336,21 @@ public class GoodsServiceImpl extends BaseServiceImpl<Integer, Goods>  implement
 		}
 		return "";
 	}
+
+	public List<ProductCategoryDto> treeToList(List<ProductCategoryDto> categoryList) {
+		if (categoryList.isEmpty()) {
+			return new ArrayList<>();
+		}
+		List<ProductCategoryDto> result = new ArrayList<>();
+		categoryList.forEach(next -> {
+			result.add(next);
+			String name = next.getName();
+			List<ProductCategoryDto> children = next.getChildren();
+			if (!CollectionUtils.isEmpty(children)) {
+				children.forEach(c -> c.setName(name + "/" + c.getName()));
+				result.addAll(children);
+			}
+		});
+		return result;
+	}
 }

+ 0 - 8
mec-biz/src/main/java/com/ym/mec/biz/service/impl/MusicGroupPaymentCalenderGoodsServiceImpl.java

@@ -57,14 +57,6 @@ public class MusicGroupPaymentCalenderGoodsServiceImpl extends ServiceImpl<Music
             List<Integer> goodsIds = goodsList.stream().map(e -> e.getGoodsId()).collect(Collectors.toList());
             List<Goods> goodies = goodsDao.getGoodies(goodsIds);
             Map<Integer,Goods> goodsMap = goodies.stream().collect(Collectors.toMap(Goods::getId, e -> e));
-            for (MusicGroupPaymentCalenderGoods e : goodsList) {
-                Goods goods = goodsMap.get(e.getGoodsId());
-                e.setGoodsSn(goods.getSn());
-                e.setTotalPrice(goods.getGroupPurchasePrice().multiply(new BigDecimal(e.getNum())));
-                e.setSinglePrice(goods.getGroupPurchasePrice());
-                e.setCalenderId(musicGroupPaymentBaseCalender.getCalenderId());
-                e.setChildGoodsJson(goods.getComplementGoodsJson());
-            }
             //计算原价
             return goodsList.stream().map(e -> {
                 Goods goods = goodsMap.get(e.getGoodsId());

+ 21 - 2
mec-biz/src/main/java/com/ym/mec/biz/service/impl/MusicGroupPaymentCalenderServiceImpl.java

@@ -142,6 +142,10 @@ public class MusicGroupPaymentCalenderServiceImpl extends BaseServiceImpl<Long,
     private MallFeignService mallFeignService;
     @Autowired
     private StudentPaymentRouteOrderService studentPaymentRouteOrderService;
+    @Autowired
+    private GoodsSubService goodsSubService;
+    @Autowired
+    private GoodsDao goodsDao;
 
     @Override
     public BaseDAO<Long, MusicGroupPaymentCalender> getDAO() {
@@ -446,9 +450,24 @@ public class MusicGroupPaymentCalenderServiceImpl extends BaseServiceImpl<Long,
         //保存商品缴费信息
         if (musicGroupPaymentCalender.getPaymentType() == GOODS_PURCHASE) {
             if(CollectionUtils.isNotEmpty(musicGroupPaymentBaseCalender.getCalenderGoodsList())){
+                List<Integer> goodsIds = musicGroupPaymentBaseCalender.getCalenderGoodsList().stream().map(e -> e.getGoodsId()).collect(Collectors.toList());
+                Map<Integer, Goods> goodsMap = goodsDao.getGoodies(goodsIds).stream().collect(Collectors.toMap(Goods::getId, e -> e));
+                for (MusicGroupPaymentCalenderGoods e : musicGroupPaymentBaseCalender.getCalenderGoodsList()) {
+                    Goods goods = goodsMap.get(e.getGoodsId());
+                    e.setGoodsSn(goods.getSn());
+                    e.setTotalPrice(goods.getGroupPurchasePrice().multiply(new BigDecimal(e.getNum())));
+                    e.setSinglePrice(goods.getGroupPurchasePrice());
+                    e.setCalenderId(calenderId);
+                    List<ComplementGoodsDto> childGoods = goodsSubService.getBaseMapper().queryChildGoods(e.getGoodsId());
+                    if(CollectionUtils.isEmpty(childGoods)){
+                        throw new BizException("商品{}没有子商品",goods.getName());
+                    }
+                    e.setChildGoodsJson(JSON.toJSONString(childGoods));
+                }
                 musicGroupPaymentCalenderGoodsService.saveBatch(musicGroupPaymentBaseCalender.getCalenderGoodsList());
             }
             if(musicGroupPaymentBaseCalender.getCalenderAddress() != null){
+                musicGroupPaymentBaseCalender.getCalenderAddress().setCalenderId(calenderId);
                 musicGroupPaymentCalenderAddressService.save(musicGroupPaymentBaseCalender.getCalenderAddress());
             }
         }
@@ -953,7 +972,7 @@ public class MusicGroupPaymentCalenderServiceImpl extends BaseServiceImpl<Long,
             MusicGroupPaymentCalender calender = musicGroupPaymentCalenders.get(0);
             MusicGroup musicGroup = musicGroupDao.get(calender.getMusicGroupId());
 
-            if (musicGroup.getStatus() != MusicGroupStatusEnum.PROGRESS && musicGroup.getStatus() != MusicGroupStatusEnum.FEE_AUDIT) {
+            if (musicGroup.getStatus() != MusicGroupStatusEnum.PROGRESS && musicGroup.getStatus() != MusicGroupStatusEnum.FEE_AUDIT && calender.getPaymentType() != GOODS_PURCHASE) {
                 throw new BizException("当前乐团状态不支持此操作");
             }
             
@@ -1172,7 +1191,7 @@ public class MusicGroupPaymentCalenderServiceImpl extends BaseServiceImpl<Long,
             MusicGroupPaymentCalender calender = musicGroupPaymentCalenders.get(0);
 
 			MusicGroup musicGroup = musicGroupDao.get(calender.getMusicGroupId());
-            if (musicGroup.getStatus() != MusicGroupStatusEnum.PROGRESS && musicGroup.getStatus() != MusicGroupStatusEnum.FEE_AUDIT) {
+            if (musicGroup.getStatus() != MusicGroupStatusEnum.PROGRESS && musicGroup.getStatus() != MusicGroupStatusEnum.FEE_AUDIT && calender.getPaymentType() != GOODS_PURCHASE){
                 throw new BizException("当前乐团状态不支持此操作");
             }
             //如果是报名,并且所有的报名都审核通过,需要修改乐团状态

+ 4 - 15
mec-biz/src/main/java/com/ym/mec/biz/service/impl/ReplacementInstrumentActivityServiceImpl.java

@@ -8,6 +8,7 @@ import java.util.List;
 import java.util.Map;
 import java.util.stream.Collectors;
 
+import com.ym.mec.biz.service.*;
 import org.apache.commons.lang3.StringUtils;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
@@ -58,19 +59,6 @@ import com.ym.mec.biz.dal.enums.QuestionnaireActiveTypeEnum;
 import com.ym.mec.biz.dal.enums.SellTypeEnum;
 import com.ym.mec.biz.dal.enums.YesOrNoEnum;
 import com.ym.mec.biz.dal.page.ReplacementInstrumentActivityQueryInfo;
-import com.ym.mec.biz.service.ContractService;
-import com.ym.mec.biz.service.CooperationOrganService;
-import com.ym.mec.biz.service.GoodsService;
-import com.ym.mec.biz.service.PayService;
-import com.ym.mec.biz.service.ReplacementInstrumentActivityService;
-import com.ym.mec.biz.service.StudentPaymentOrderService;
-import com.ym.mec.biz.service.StudentPaymentRouteOrderService;
-import com.ym.mec.biz.service.StudentService;
-import com.ym.mec.biz.service.SysCouponCodeService;
-import com.ym.mec.biz.service.SysMessageService;
-import com.ym.mec.biz.service.SysPaymentConfigService;
-import com.ym.mec.biz.service.SysUserCashAccountDetailService;
-import com.ym.mec.biz.service.SysUserCashAccountService;
 import com.ym.mec.common.dal.BaseDAO;
 import com.ym.mec.common.exception.BizException;
 import com.ym.mec.common.page.PageInfo;
@@ -122,7 +110,7 @@ public class ReplacementInstrumentActivityServiceImpl extends BaseServiceImpl<In
     @Autowired
     private SysPaymentConfigService sysPaymentConfigService;
     @Autowired
-    private SellOrderDao sellOrderDao;
+    private SellOrderService sellOrderService;
     @Autowired
     private QuestionnaireTopicDao questionnaireTopicDao;
     @Autowired
@@ -624,7 +612,8 @@ public class ReplacementInstrumentActivityServiceImpl extends BaseServiceImpl<In
             i++;
         }
         if (sellOrders.size() > 0) {
-            sellOrderDao.batchInsert(sellOrders);
+            sellOrderService.batchInsert(sellOrders);
+            sellOrderService.syncSellOrder2Mall(sellOrders,order);
         }
         return sellOrders;
     }

+ 2 - 1
mec-biz/src/main/java/com/ym/mec/biz/service/impl/StudentRepairServiceImpl.java

@@ -1530,11 +1530,12 @@ public class StudentRepairServiceImpl extends BaseServiceImpl<Integer, StudentRe
                 List<Goods> goods = JSONObject.parseArray(repairInfo.getGoodsJson(), Goods.class);
                 List<Integer> goodsIds = goods.stream().map(Goods::getId).collect(Collectors.toList());
                 if (goodsIds.size() > 0) {
-                    sellOrderService.addSellOrder(studentPaymentOrder.getId(),
+                    List<SellOrder> sellOrders = sellOrderService.addSellOrder(studentPaymentOrder.getId(),
                             null,
                             goodsIds,
                             studentPaymentOrder.getExpectAmount().add(repairInfo.getExemptionAmount()),
                             studentPaymentOrder.getBalancePaymentAmount(), couponRemitFee);
+                    sellOrderService.syncSellOrder2Mall(sellOrders, studentPaymentOrder);
                 }
             }
 

+ 2 - 2
mec-biz/src/main/java/com/ym/mec/biz/service/impl/SubjectChangeServiceImpl.java

@@ -1048,12 +1048,12 @@ public class SubjectChangeServiceImpl extends BaseServiceImpl<Integer, SubjectCh
             }
             if (StringUtils.isNotBlank(goodsIds)) {
                 List<Integer> goodsIdList = Arrays.stream(goodsIds.split(",")).map(Integer::parseInt).collect(Collectors.toList());
-                //退原订单商品
+                //TODO 退原订单商品
                 if (subjectChange.getOriginalOrderId() != null) {
                     sellOrderService.refundByOrderId(subjectChange.getOriginalOrderId().longValue(), false);
                 }
                 //添加新订单
-                List<SellOrder> sellOrders = this.addSellOrder(studentPaymentOrder,subjectChange.getMusicGroupId(),
+                this.addSellOrder(studentPaymentOrder,subjectChange.getMusicGroupId(),
                         goodsIdList,
                         subjectChange.getKitGroupPurchaseType());
                 /*if (sellOrders != null && sellOrders.size() > 0) {

+ 3 - 0
mec-biz/src/main/resources/config/mybatis/GoodsSubMapper.xml

@@ -16,4 +16,7 @@
             #{item}
         </foreach>
     </update>
+    <select id="queryChildGoods" resultType="com.ym.mec.biz.dal.dto.ComplementGoodsDto">
+        select sku_ skuStockId,goods_id_ goodsId,goods_price_ organCostPrice from goods_sub where goods_id_ = 1
+    </select>
 </mapper>

+ 2 - 0
mec-common/common-core/src/main/java/com/ym/mec/common/dto/PmsProductQueryParamDto.java

@@ -16,6 +16,8 @@ import javax.validation.constraints.NotNull;
 public class PmsProductQueryParamDto {
     //skuId多个逗号隔开
     private String skuStockIds;
+    //skuCode多个逗号隔开
+    private String skuStockCodes;
     //上架状态
     private Integer publishStatus;
     //商品名称模糊关键字

+ 4 - 0
mec-common/common-core/src/main/java/com/ym/mec/common/dto/ProductCategoryDto.java

@@ -3,6 +3,8 @@ package com.ym.mec.common.dto;
 import lombok.Data;
 
 import java.io.Serializable;
+import java.util.ArrayList;
+import java.util.List;
 
 @Data
 public class ProductCategoryDto {
@@ -12,4 +14,6 @@ public class ProductCategoryDto {
     private Long parentId;
 
     private String name;
+
+    private List<ProductCategoryDto> children = new ArrayList<>();
 }

+ 3 - 0
mec-mall/mall-admin/src/main/resources/config/mybatis/PmsProductDao.xml

@@ -136,6 +136,9 @@
             <if test="param.skuStockIds != null and param.skuStockIds != ''">
                 and find_in_set(t1.id,#{param.skuStockIds})
             </if>
+            <if test="param.skuStockCodes != null and param.skuStockCodes != ''">
+                and find_in_set(t1.sku_code,#{param.skuStockCodes})
+            </if>
             <if test="param.keyword != null and param.keyword != ''">
                 and (t.name like concat('%',#{param.keyword},'%') )
             </if>