Bladeren bron

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

# Conflicts:
#	mec-biz/src/main/java/com/ym/mec/biz/service/impl/GoodsServiceImpl.java
zouxuan 1 jaar geleden
bovenliggende
commit
81b19d2c8e
23 gewijzigde bestanden met toevoegingen van 405 en 393 verwijderingen
  1. 13 1
      mec-application/src/main/java/com/ym/mec/teacher/controller/GoodsController.java
  2. 1 1
      mec-application/src/main/java/com/ym/mec/web/controller/GoodsCategoryController.java
  3. 14 1
      mec-application/src/main/java/com/ym/mec/web/controller/GoodsController.java
  4. 6 0
      mec-biz/src/main/java/com/ym/mec/biz/dal/entity/Goods.java
  5. 0 10
      mec-biz/src/main/java/com/ym/mec/biz/dal/page/GoodsQueryInfo.java
  6. 7 1
      mec-biz/src/main/java/com/ym/mec/biz/dal/wrapper/GoodsWrapper.java
  7. 1 9
      mec-biz/src/main/java/com/ym/mec/biz/service/GoodsCategoryService.java
  8. 0 2
      mec-biz/src/main/java/com/ym/mec/biz/service/GoodsService.java
  9. 21 100
      mec-biz/src/main/java/com/ym/mec/biz/service/impl/GoodsCategoryServiceImpl.java
  10. 126 88
      mec-biz/src/main/java/com/ym/mec/biz/service/impl/GoodsServiceImpl.java
  11. 1 24
      mec-biz/src/main/java/com/ym/mec/biz/service/impl/StudentGoodsSellServiceImpl.java
  12. 0 4
      mec-biz/src/main/java/com/ym/mec/biz/service/impl/StudentInstrumentServiceImpl.java
  13. 1 1
      mec-biz/src/main/resources/config/mybatis/GoodsCategoryMapper.xml
  14. 25 21
      mec-biz/src/main/resources/config/mybatis/GoodsMapper.xml
  15. 2 2
      mec-biz/src/main/resources/config/mybatis/StudentInstrumentMapper.xml
  16. 2 11
      mec-biz/src/main/resources/config/mybatis/SubjectGoodsMapperMapper.xml
  17. 1 1
      mec-client-api/src/main/java/com/ym/mec/mall/MallFeignService.java
  18. 3 8
      mec-client-api/src/main/java/com/ym/mec/web/WebFeignService.java
  19. 2 7
      mec-client-api/src/main/java/com/ym/mec/web/fallback/WebFeignServiceFallback.java
  20. 37 0
      mec-common/common-core/src/main/java/com/ym/mec/common/entity/OrderSkuSync.java
  21. 39 27
      mec-mall/mall-admin/src/main/java/com/yonge/cooleshow/admin/service/impl/OmsOrderReturnApplyServiceImpl.java
  22. 99 70
      mec-mall/mall-admin/src/main/java/com/yonge/cooleshow/admin/service/impl/OmsOrderServiceImpl.java
  23. 4 4
      mec-mall/mall-portal/src/main/java/com/yonge/cooleshow/portal/service/impl/OmsPortalOrderServiceImpl.java

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

@@ -1,5 +1,8 @@
 package com.ym.mec.teacher.controller;
 
+import com.ym.mec.biz.dal.entity.GoodsCategory;
+import com.ym.mec.biz.dal.wrapper.GoodsWrapper;
+import com.ym.mec.biz.service.GoodsCategoryService;
 import com.ym.mec.biz.service.GoodsService;
 import com.ym.mec.common.controller.BaseController;
 import io.swagger.annotations.Api;
@@ -11,6 +14,8 @@ import org.springframework.web.bind.annotation.PathVariable;
 import org.springframework.web.bind.annotation.RequestMapping;
 import org.springframework.web.bind.annotation.RestController;
 
+import java.util.Objects;
+
 @RequestMapping("${app-config.url.teacher:}/goods")
 @Api(tags = "商品(教材、辅件)服务")
 @RestController
@@ -18,11 +23,18 @@ public class GoodsController extends BaseController {
 
     @Autowired
     private GoodsService goodsService;
+    @Autowired
+    private GoodsCategoryService goodsCategoryService;
 
     @ApiOperation(value = "根据商品(教材、辅件)编号查询商品(教材、辅件)")
     @GetMapping("/get/{id}")
     public Object get(@ApiParam(value = "商品(教材、辅件)编号", required = true) @PathVariable("id") Integer id) {
-        return succeed(goodsService.getDetail(id));
+        GoodsWrapper.Goods goods = goodsService.getDetail(id);
+        GoodsCategory goodsCategory = goodsCategoryService.get(goods.getGoodsCategoryId());
+        if (Objects.nonNull(goodsCategory)) {
+            goods.setGoodsCategoryName(goodsCategory.getName());
+        }
+        return succeed(goods);
     }
 
 }

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

@@ -22,7 +22,7 @@ public class GoodsCategoryController extends BaseController {
     @PostMapping("/del")
     @PreAuthorize("@pcs.hasPermissions('category/del')")
     public Object del(Integer id) {
-        return succeed(goodsCategoryService.get(id));
+        return succeed(goodsCategoryService.delete(id));
     }
 
     @ApiOperation(value = "新增、修改商品类型")

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

@@ -3,11 +3,13 @@ package com.ym.mec.web.controller;
 import com.ym.mec.biz.dal.dao.EmployeeDao;
 import com.ym.mec.biz.dal.entity.Employee;
 import com.ym.mec.biz.dal.entity.Goods;
+import com.ym.mec.biz.dal.entity.GoodsCategory;
 import com.ym.mec.biz.dal.entity.GoodsProcurement;
 import com.ym.mec.biz.dal.enums.YesOrNoEnum;
 import com.ym.mec.biz.dal.page.GoodsQuery;
 import com.ym.mec.biz.dal.page.GoodsQueryInfo;
 import com.ym.mec.biz.dal.wrapper.GoodsWrapper;
+import com.ym.mec.biz.service.GoodsCategoryService;
 import com.ym.mec.biz.service.GoodsService;
 import com.ym.mec.biz.service.SysUserService;
 import com.ym.mec.common.controller.BaseController;
@@ -25,6 +27,10 @@ import org.springframework.web.bind.annotation.RequestMapping;
 import org.springframework.web.bind.annotation.RestController;
 
 import java.util.Date;
+import java.util.List;
+import java.util.Map;
+import java.util.Objects;
+import java.util.stream.Collectors;
 
 @RequestMapping("${app-config.url.web:}/goods")
 @Api(tags = "商品(教材、辅件)服务")
@@ -34,6 +40,8 @@ public class GoodsController extends BaseController {
     @Autowired
     private GoodsService goodsService;
     @Autowired
+    private GoodsCategoryService goodsCategoryService;
+    @Autowired
     private SysUserService sysUserService;
     @Autowired
     private EmployeeDao employeeDao;
@@ -89,7 +97,12 @@ public class GoodsController extends BaseController {
     @ApiOperation(value = "根据商品(教材、辅件)编号查询商品(教材、辅件)")
     @GetMapping("/get/{id}")
     public Object get(@ApiParam(value = "商品(教材、辅件)编号", required = true) @PathVariable("id") Integer id){
-        return succeed(goodsService.getDetail(id));
+        GoodsWrapper.Goods goods = goodsService.getDetail(id);
+        GoodsCategory goodsCategory = goodsCategoryService.get(goods.getGoodsCategoryId());
+        if(Objects.nonNull(goodsCategory)){
+            goods.setGoodsCategoryName(goodsCategory.getName());
+        }
+        return succeed(goods);
     }
 
     @ApiOperation(value = "分页查询商品(教材、辅件)列表")

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

@@ -179,6 +179,12 @@ public class Goods {
 	@ApiModelProperty(value = "库存预警")
 	private YesOrNoEnum stockWarning;
 
+	@ApiModelProperty(value = "是否是组合商品,1:是,0:不是")
+	private Boolean groupGoods;
+
+	@ApiModelProperty(value = "是否删除")
+	private Boolean delFlag;
+
 	private Integer tenantId = TenantContextHolder.getTenantId();
 
 	private String childId;

+ 0 - 10
mec-biz/src/main/java/com/ym/mec/biz/dal/page/GoodsQueryInfo.java

@@ -57,8 +57,6 @@ public class GoodsQueryInfo extends QueryInfo {
 
     private Integer subjectId;
 
-    private String goodsCategoryIds;
-
     public Integer getNoOrganSearch() {
         return noOrganSearch;
     }
@@ -186,12 +184,4 @@ public class GoodsQueryInfo extends QueryInfo {
     public void setBrandId(String brandId) {
         this.brandId = brandId;
     }
-
-    public String getGoodsCategoryIds() {
-        return goodsCategoryIds;
-    }
-
-    public void setGoodsCategoryIds(String goodsCategoryIds) {
-        this.goodsCategoryIds = goodsCategoryIds;
-    }
 }

+ 7 - 1
mec-biz/src/main/java/com/ym/mec/biz/dal/wrapper/GoodsWrapper.java

@@ -154,6 +154,9 @@ public class GoodsWrapper {
         @ApiModelProperty(value = "库存预警")
         private YesOrNoEnum stockWarning;
 
+        @ApiModelProperty(value = "是否是组合商品,1:是,0:不是")
+        private Boolean groupGoods;
+
         private Integer tenantId = TenantContextHolder.getTenantId();
 
         private String childId;
@@ -189,9 +192,12 @@ public class GoodsWrapper {
         @ApiModelProperty("商城商品名称")
         private String mallGoodsName;
 
-        @ApiModelProperty("sku编号")
+        @ApiModelProperty("skuID")
         private Integer sku;
 
+        @ApiModelProperty("sku编号")
+        private String skuCode;
+
         @ApiModelProperty("销售价格")
         private BigDecimal price;
 

+ 1 - 9
mec-biz/src/main/java/com/ym/mec/biz/service/GoodsCategoryService.java

@@ -8,10 +8,8 @@ import com.ym.mec.common.page.PageInfo;
 import com.ym.mec.common.service.BaseService;
 
 import java.util.List;
-import java.util.Map;
 
-//public interface GoodsCategoryService extends BaseService<Integer, GoodsCategory> {
-public interface GoodsCategoryService{
+public interface GoodsCategoryService extends BaseService<Integer, GoodsCategory> {
     /**
      * 新增、修改商品类型
      * @param goodsCategory
@@ -31,10 +29,4 @@ public interface GoodsCategoryService{
      * @param goodsIds
      */
     void updateSubjectGoods(Long subjectGoodsMapperId, String goodsIds);
-
-    GoodsCategory get(Integer goodsCategoryId);
-
-    List<GoodsCategory> queryPage(GoodsCategoryQueryInfo queryInfo);
-
-    Map<Integer,String> getNameMap();
 }

+ 0 - 2
mec-biz/src/main/java/com/ym/mec/biz/service/GoodsService.java

@@ -69,8 +69,6 @@ public interface GoodsService extends BaseService<Integer, Goods> {
      */
     List<Goods> findTypeGoods(String type, Integer tenantId);
 
-    PageInfo<Goods> queryPage(GoodsQueryInfo queryInfo);
-
     /**
      * @describe 商品导入
      * @apiNote 时光荏苒,认真工作的时间总是过得很快,而我、享受这一刻!

+ 21 - 100
mec-biz/src/main/java/com/ym/mec/biz/service/impl/GoodsCategoryServiceImpl.java

@@ -1,64 +1,53 @@
 package com.ym.mec.biz.service.impl;
 
-import com.alibaba.fastjson.JSON;
-import com.ym.mec.biz.dal.dao.SubjectDao;
+import com.ym.mec.biz.dal.dao.GoodsCategoryDao;
 import com.ym.mec.biz.dal.dao.SubjectGoodsMapperDao;
 import com.ym.mec.biz.dal.dto.SubjectGoodsDto;
+import com.ym.mec.biz.dal.entity.Goods;
 import com.ym.mec.biz.dal.entity.GoodsCategory;
-import com.ym.mec.biz.dal.entity.Subject;
 import com.ym.mec.biz.dal.entity.SubjectGoodsMapper;
+import com.ym.mec.biz.dal.enums.AccountType;
 import com.ym.mec.biz.dal.enums.GoodsType;
 import com.ym.mec.biz.dal.page.GoodsCategoryQueryInfo;
 import com.ym.mec.biz.service.GoodsCategoryService;
-import com.ym.mec.common.dto.ProductCategoryDto;
+import com.ym.mec.biz.service.GoodsService;
+import com.ym.mec.common.dal.BaseDAO;
 import com.ym.mec.common.page.PageInfo;
-import com.ym.mec.mall.MallFeignService;
+import com.ym.mec.common.service.impl.BaseServiceImpl;
 import com.ym.mec.util.collection.MapUtil;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.stereotype.Service;
+import org.springframework.transaction.annotation.Propagation;
 import org.springframework.transaction.annotation.Transactional;
-import org.springframework.util.CollectionUtils;
-import org.springframework.util.StringUtils;
 
-import java.util.ArrayList;
-import java.util.Collection;
-import java.util.Date;
-import java.util.HashMap;
-import java.util.List;
-import java.util.Map;
-import java.util.Optional;
-import java.util.function.Function;
+import java.util.*;
 import java.util.stream.Collectors;
 
 @Service
-//public class GoodsCategoryServiceImpl extends BaseServiceImpl<Integer, GoodsCategory>  implements GoodsCategoryService {
-public class GoodsCategoryServiceImpl implements GoodsCategoryService {
-
-//	@Autowired
-//	private GoodsCategoryDao goodsCategoryDao;
+public class GoodsCategoryServiceImpl extends BaseServiceImpl<Integer, GoodsCategory>  implements GoodsCategoryService {
+	
 	@Autowired
-	private SubjectGoodsMapperDao subjectGoodsMapperDao;
-
+	private GoodsCategoryDao goodsCategoryDao;
 	@Autowired
-	private MallFeignService mallFeignService;
-
-	@Autowired
-	private SubjectDao subjectDao;
+	private SubjectGoodsMapperDao subjectGoodsMapperDao;
 
+	@Override
+	public BaseDAO<Integer, GoodsCategory> getDAO() {
+		return goodsCategoryDao;
+	}
 
 	@Override
 	@Transactional(rollbackFor = Exception.class)
 	public void upsetGoodsCategory(GoodsCategory goodsCategory) {
-//		goodsCategory.setParentId(0);
+		goodsCategory.setParentId(0);
 		if(goodsCategory.getId() != null){
-//			goodsCategory.setUpdateTime(new Date());
-//			goodsCategoryDao.update(goodsCategory);
+			goodsCategory.setUpdateTime(new Date());
+			goodsCategoryDao.update(goodsCategory);
 			//删除关联
 			subjectGoodsMapperDao.delByGoodsCategoryId(goodsCategory.getId());
+		}else {
+			goodsCategoryDao.insert(goodsCategory);
 		}
-//		else {
-//			goodsCategoryDao.insert(goodsCategory);
-//		}
 		List<Integer> subjectIds = goodsCategory.getSubjectIds();
 		subjectGoodsMapperDao.batchAdd(goodsCategory.getId(),subjectIds, goodsCategory.getTenantId());
 	}
@@ -75,9 +64,7 @@ public class GoodsCategoryServiceImpl implements GoodsCategoryService {
 			pageInfo.setTotal(count);
 			params.put("offset", pageInfo.getOffset());
 			dataList = subjectGoodsMapperDao.querySubjectGoods(params);
-			Map<Integer, String> nameMap = getNameMap();
 			dataList.forEach(e->{
-				e.setGoodsCategoryName(nameMap.getOrDefault(e.getGoodsCategoryId(),""));
 				e.setInstrument(e.getGoodsList().stream().filter(goods -> goods.getType() == GoodsType.INSTRUMENT).collect(Collectors.toList()));
 				e.setAccessories(e.getGoodsList().stream().filter(goods -> goods.getType() == GoodsType.ACCESSORIES).collect(Collectors.toList()));
 				e.setGoodsList(null);
@@ -98,70 +85,4 @@ public class GoodsCategoryServiceImpl implements GoodsCategoryService {
 		subjectGoodsMapper.setUpdateTime(new Date());
 		subjectGoodsMapperDao.update(subjectGoodsMapper);
 	}
-
-	@Override
-	public GoodsCategory get(Integer goodsCategoryId) {
-		mallFeignService.listWithChildren();
-		List<ProductCategoryDto> productCategoryDtos = treeToList(mallFeignService.listWithChildren());
-		Optional<ProductCategoryDto> first = productCategoryDtos.stream().filter(next -> next.getId().equals(Long.valueOf(goodsCategoryId))).findFirst();
-		if(first.isPresent()){
-			ProductCategoryDto productCategoryDto = first.get();
-			GoodsCategory goodsCategory = new GoodsCategory();
-			goodsCategory.setId(goodsCategoryId);
-			goodsCategory.setName(productCategoryDto.getName());
-			return goodsCategory;
-		}
-		return null;
-	}
-
-	@Override
-	public List<GoodsCategory> queryPage(GoodsCategoryQueryInfo queryInfo) {
-		List<ProductCategoryDto> productCategoryDtos = treeToList(mallFeignService.listWithChildren());
-		List<ProductCategoryDto> childrens = productCategoryDtos.stream().map(ProductCategoryDto::getChildren).flatMap(Collection::stream).collect(Collectors.toList());
-		List<GoodsCategory> goodsCategories = JSON.parseArray(JSON.toJSONString(childrens), GoodsCategory.class);
-
-		List<Integer> categoryIdList = goodsCategories.stream().map(GoodsCategory::getId).distinct().collect(Collectors.toList());
-		if (!categoryIdList.isEmpty()) {
-			List<SubjectGoodsMapper> mappers = subjectGoodsMapperDao.queryByCategoryIds(categoryIdList);
-
-			List<Integer> subjectIdList = mappers.stream().filter(next -> !StringUtils.isEmpty(next.getSubjectId()))
-					.map(next -> Integer.valueOf(next.getSubjectId())).distinct().collect(Collectors.toList());
-			Map<Integer, Subject> subjectIfdNameMap = subjectDao.findBySubjectIds(subjectIdList).stream().collect(Collectors.toMap(Subject::getId, Function.identity()));
-
-			Map<Integer, List<SubjectGoodsMapper>> groupByCategoryId = mappers.stream().collect(Collectors.groupingBy(SubjectGoodsMapper::getGoodsCategoryId));
-
-			goodsCategories.forEach(next -> {
-				List<SubjectGoodsMapper> goodsMappers = groupByCategoryId.getOrDefault(next.getId(), new ArrayList<>());
-				if (!goodsMappers.isEmpty()) {
-					List<Subject> subjectList =
-							goodsMappers.stream().filter(o -> subjectIfdNameMap.containsKey(Integer.valueOf(o.getSubjectId()))).map(o -> subjectIfdNameMap.get(Integer.valueOf(o.getSubjectId()))).collect(Collectors.toList());
-					next.setSubjects(subjectList);
-				}
-			});
-		}
-		return goodsCategories;
-	}
-
-	@Override
-	public Map<Integer, String> getNameMap() {
-		return treeToList(mallFeignService.listWithChildren()).stream()
-				.collect(Collectors.toMap(next->next.getId().intValue(), ProductCategoryDto::getName));
-	}
-
-	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;
-	}
 }

+ 126 - 88
mec-biz/src/main/java/com/ym/mec/biz/service/impl/GoodsServiceImpl.java

@@ -14,6 +14,7 @@ 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.entity.Goods;
+import com.ym.mec.biz.dal.entity.GoodsCategory;
 import com.ym.mec.biz.dal.entity.GoodsProcurement;
 import com.ym.mec.biz.dal.entity.GoodsSub;
 import com.ym.mec.biz.dal.entity.Organization;
@@ -42,6 +43,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;
@@ -67,6 +69,8 @@ import org.springframework.util.CollectionUtils;
 import org.springframework.web.multipart.MultipartFile;
 
 import javax.annotation.Resource;
+import javax.imageio.ImageIO;
+import java.awt.image.BufferedImage;
 import java.io.*;
 import java.math.BigDecimal;
 import java.nio.charset.StandardCharsets;
@@ -101,7 +105,8 @@ public class GoodsServiceImpl extends BaseServiceImpl<Integer, Goods>  implement
 	private OrganizationDao organizationDao;
 	@Resource
 	private MallFeignService mallFeignService;
-
+    @Resource
+    private GoodsCategoryService goodsCategoryService;
 	@Resource
 	private GoodsSubService goodsSubService;
 	@Resource
@@ -119,13 +124,9 @@ public class GoodsServiceImpl extends BaseServiceImpl<Integer, Goods>  implement
 		if (CollectionUtils.isEmpty(rows)) {
 			throw new BizException("没有查询到商品信息");
 		}
-		List<ProductCategoryDto> productCategoryDtos = treeToList(queryGoodsCategoryList());
-		Map<Long, String> IdNamemap = productCategoryDtos.stream().collect(Collectors.toMap(ProductCategoryDto::getId, ProductCategoryDto::getName));
-
 		List<Organization> all = organizationDao.findAll(params);
 		Map<Integer, String> organizationMap = all.stream().collect(Collectors.toMap(Organization::getId, Organization::getName));
 		for (Goods goods : rows) {
-			goods.setGoodsCategoryName(IdNamemap.getOrDefault(Long.valueOf(goods.getGoodsCategoryId()),""));
 			if(StringUtils.isNotEmpty(goods.getStudentShowOrganId())){
 				String[] split = goods.getStudentShowOrganId().split(",");
 				StringBuffer sb = new StringBuffer();
@@ -340,6 +341,7 @@ public class GoodsServiceImpl extends BaseServiceImpl<Integer, Goods>  implement
 			PmsProductDto dto = map.get(next.getSku());
 			if (dto != null) {
 				next.setPrice(dto.getPrice());
+				next.setSkuCode(dto.getSkuCode());
 				if (1 == dto.getDeleteStatus()) {
 					next.setGoodsStatus(false);
 				} else {
@@ -375,29 +377,14 @@ public class GoodsServiceImpl extends BaseServiceImpl<Integer, Goods>  implement
 	}
 
 	@Override
-	public PageInfo<Goods> queryPage(GoodsQueryInfo queryInfo) {
-		Integer goodsCategoryId = queryInfo.getGoodsCategoryId();
-		if (goodsCategoryId != null) {
-			Map<Long, ProductCategoryDto> idCategoryMap = mallFeignService.listWithChildren().stream().collect(Collectors.toMap(ProductCategoryDto::getId, Function.identity()));
-			if (idCategoryMap.containsKey(Long.valueOf(goodsCategoryId))) {
-				ProductCategoryDto productCategoryDto = idCategoryMap.get(Long.valueOf(goodsCategoryId));
-				List<String> categoryIdList = productCategoryDto.getChildren().stream().map(ProductCategoryDto::getId).map(String::valueOf).distinct().collect(Collectors.toList());
-				categoryIdList.add(goodsCategoryId.toString());
-				queryInfo.setGoodsCategoryIds(String.join(",", categoryIdList));
-				queryInfo.setGoodsCategoryId(null);
-			}
-		}
+	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;
@@ -620,10 +607,10 @@ public class GoodsServiceImpl extends BaseServiceImpl<Integer, Goods>  implement
 		goodsCategoryQueryInfo.setPage(1);
 		goodsCategoryQueryInfo.setRows(9999);
 
-		List<ProductCategoryDto> categoryList = mallFeignService.listWithChildren();
-		List<ProductCategoryDto> allCategoryList = categoryList.stream().map(ProductCategoryDto::getChildren).filter(next->!next.isEmpty()).flatMap(Collection::stream).collect(Collectors.toList());
-		Map<String, Long> categoryIdNameMap = allCategoryList
-				.stream().collect(Collectors.toMap(ProductCategoryDto::getName, ProductCategoryDto::getId));
+
+		List<GoodsCategory> categoryList = goodsCategoryService.findAll(new HashMap<>()).stream().filter(next -> YesOrNoEnum.NO.equals(next.getDelFlag())).collect(Collectors.toList());
+		Map<String, Integer> categoryIdNameMap = categoryList
+				.stream().collect(Collectors.toMap(GoodsCategory::getName, GoodsCategory::getId));
 		Set<String> categoryNames = categoryIdNameMap.keySet();
 
 		// 查询员工机构
@@ -659,12 +646,18 @@ public class GoodsServiceImpl extends BaseServiceImpl<Integer, Goods>  implement
 			}
 		});
 
-		List<String> snSet = firstSheet.stream().map(next -> next.get("组合商品货号").toString()).filter(StringUtils::isNotEmpty).distinct().collect(Collectors.toList());
-		List<String> existSnList = goodsDao.findBySns(snSet).stream().map(Goods::getSn).distinct().collect(Collectors.toList());
+		// excel中所有的sn
+		List<String> snSet = firstSheet.stream().map(next -> next.get("组合商品货号").toString()).filter(StringUtils::isNotEmpty).collect(Collectors.toList());
+		// 获取重复的货号
+		List<String> repeatSnList = snSet.stream().collect(Collectors.groupingBy(e -> e, Collectors.counting()))
+				.entrySet().stream().filter(e -> e.getValue() > 1)
+				.map(Map.Entry::getKey).collect(Collectors.toList());
+		List<String> existSnList = goodsDao.findBySns(snSet.stream().distinct().collect(Collectors.toList())).stream().map(Goods::getSn).distinct().collect(Collectors.toList());
 
 		Map<String, Long> brandNameIdMap = mallFeignService.getList().stream().collect(Collectors.toMap(BrandDto::getName, BrandDto::getId));
 
 		List<JSONObject> jsonObjectList = new ArrayList<>();
+		Map<String, byte[]> snImageMap = new HashMap<>();
 		for (Map.Entry<String, List<Map<String, Object>>> sheetData : sheetsListMap.entrySet()) {
 			List<Map<String, Object>> rows = sheetData.getValue();
 			if (rows.isEmpty()) {
@@ -680,9 +673,8 @@ public class GoodsServiceImpl extends BaseServiceImpl<Integer, Goods>  implement
 			}
 
 			String lineErrMsg = "错误行号:第%s行,%s";
-			Map<String, String> beforeGoods = new HashMap<>();
-
-			Map<String, String> snNameMap = new HashMap<>();
+			Map<String, Object> beforeGoods = new HashMap<>();
+			Map<String, Set<String>> snSubGoodsMap = new HashMap<>();
 			for (int i = 0; i < rows.size(); i++) {
 				JSONObject objectMap = new JSONObject();
 				int rowNum = i + 2;
@@ -690,6 +682,11 @@ public class GoodsServiceImpl extends BaseServiceImpl<Integer, Goods>  implement
 				if (row.size() == 0) {
 					continue;
 				}
+				// 新商品标志
+				String sn = row.get("组合商品货号").toString();
+				if (StringUtils.isNotEmpty(sn)) {
+					beforeGoods.clear();
+				}
 				String subGoodsName = null;
 				String subGoodsSku = null;
 				List<String> lineErrList = new ArrayList<>();
@@ -699,10 +696,10 @@ public class GoodsServiceImpl extends BaseServiceImpl<Integer, Goods>  implement
 						continue;
 					}
 					String fieldCode = columns.get(fieldName);
-					String value = entry.getValue().toString();
+					Object value = entry.getValue();
 
 					// 非子商品字段为空,往上一行获取值
-					if (StringUtils.isEmpty(value)) {
+					if (StringUtils.isEmpty(value.toString())) {
 						if ("subGoodsName".equals(fieldCode) || "sku".equals(fieldCode) || "subGoodsPrice".equals(fieldCode)) {
 							lineErrList.add("字段‘" + fieldName + "’为空");
 						} else {
@@ -720,27 +717,28 @@ public class GoodsServiceImpl extends BaseServiceImpl<Integer, Goods>  implement
 							}
 						}
 					} else {
+						if ("image".equals(fieldCode) && value instanceof List) { // 图片数组 取第一个
+							Object data = ((List<?>) value).get(0);
+							if (data instanceof PictureData) {
+								value = ((PictureData) data).getData();
+							}
+						}
 						beforeGoods.put(fieldCode, value);
 					}
-					if("sn".equals(fieldCode)){
-						if (existSnList.contains(value)) {
+					if ("sn".equals(fieldCode)) {
+						if (existSnList.contains(value.toString())) {
 							lineErrList.add("货号[" + value + "]已存在");
 						} else {
-							String goodsName = row.get("组合商品名称").toString();
-							if (snNameMap.containsKey(value) && !snNameMap.get(value).equals(goodsName)) {
+							if (repeatSnList.contains(value.toString())) {
 								lineErrList.add("货号[" + value + "]重复");
-							} else {
-								snNameMap.put(value, goodsName);
 							}
-							objectMap.put(fieldCode, value);
 						}
-					}
-					else
-					if ("marketPrice".equals(fieldCode)
+						objectMap.put(fieldCode, value);
+					} else if ("marketPrice".equals(fieldCode)
 							|| "discountPrice".equals(fieldCode)
 							|| "groupPurchasePrice".equals(fieldCode)) {
-						if (NumberUtils.isNumber(value)) {
-							BigDecimal prize = new BigDecimal(value);
+						if (NumberUtils.isNumber(value.toString())) {
+							BigDecimal prize = new BigDecimal(value.toString());
 							if (BigDecimal.ZERO.compareTo(prize) > 0) {
 								lineErrList.add("字段‘" + fieldName + "’不能为负数");
 							} else {
@@ -751,7 +749,7 @@ public class GoodsServiceImpl extends BaseServiceImpl<Integer, Goods>  implement
 
 						}
 					} else if ("type".equals(fieldCode)) {
-						String tempValue = value;
+						String tempValue = value.toString();
 						Optional<GoodsType> first = Arrays.stream(GoodsType.values()).filter(next -> next.getDesc().equals(tempValue)).findFirst();
 						if (first.isPresent()) {
 							objectMap.put(fieldCode, first.get().getCode());
@@ -759,8 +757,8 @@ public class GoodsServiceImpl extends BaseServiceImpl<Integer, Goods>  implement
 							lineErrList.add("字段‘" + fieldName + "’类型不支持");
 						}
 					} else if ("goodsCategoryName".equals(fieldCode)) {
-						if(categoryNames.contains(value)){
-							objectMap.put("goodsCategoryId", categoryIdNameMap.get(value).intValue());
+						if(categoryNames.contains(value.toString())){
+							objectMap.put("goodsCategoryId", categoryIdNameMap.get(value.toString()));
 						}else {
 							lineErrList.add("字段‘" + fieldName + "’不支持");
 						}
@@ -770,9 +768,9 @@ public class GoodsServiceImpl extends BaseServiceImpl<Integer, Goods>  implement
 							|| "freeFeeShowOrganName".equals(fieldCode)
 							|| "replacementShowOrganName".equals(fieldCode)
 					) {
-						if (StringUtils.isNotEmpty(value)) {
+						if (StringUtils.isNotEmpty(value.toString())) {
 							List<String> orgIds = new ArrayList<>();
-							for (String orgName : value.split("[,,]")) {
+							for (String orgName : value.toString().split("[,,]")) {
 								if (!orgNameIdMap.containsKey(orgName)) {
 									lineErrList.add("字段‘" + fieldName + "’:‘" + value + "’分部不支持");
 								} else {
@@ -784,7 +782,7 @@ public class GoodsServiceImpl extends BaseServiceImpl<Integer, Goods>  implement
 							objectMap.put(fieldKey, join);
 						}
 					} else if ("subGoodsName".equals(fieldCode)) {
-						subGoodsName = value;
+						subGoodsName = value.toString();
 						if (StringUtils.isNotEmpty(subGoodsSku)) {
 							String key = subGoodsName + "_" + subGoodsSku;
 							if (skuMap.containsKey(key)) {
@@ -798,7 +796,7 @@ public class GoodsServiceImpl extends BaseServiceImpl<Integer, Goods>  implement
 							}
 						}
 					} else if ("sku".equals(fieldCode)) {
-						subGoodsSku = value;
+						subGoodsSku = value.toString();
 						if (StringUtils.isNotEmpty(subGoodsName)) {
 							String key = subGoodsName + "_" + subGoodsSku;
 							if (skuMap.containsKey(key)) {
@@ -812,13 +810,13 @@ public class GoodsServiceImpl extends BaseServiceImpl<Integer, Goods>  implement
 							}
 						}
 					} else if ("subGoodsPrice".equals(fieldCode)) {
-						BigDecimal subGoodsPrice = new BigDecimal(value);
+						BigDecimal subGoodsPrice = new BigDecimal(value.toString());
 						if (BigDecimal.ZERO.compareTo(subGoodsPrice) > 0) {
 							lineErrList.add("字段‘" + fieldName + "’不能为负数");
 						}
 					} else if ("brand".equals(fieldCode)) {
-						if (brandNameIdMap.containsKey(value)) {
-							objectMap.put("brand", brandNameIdMap.get(value));
+						if (brandNameIdMap.containsKey(value.toString())) {
+							objectMap.put("brand", brandNameIdMap.get(value.toString()));
 						} else {
 							lineErrList.add("组合商品品牌‘" + value + "’不支持");
 						}
@@ -833,8 +831,23 @@ public class GoodsServiceImpl extends BaseServiceImpl<Integer, Goods>  implement
 						!objectMap.containsKey("memberFeeShowOrganId") &&
 						!objectMap.containsKey("freeFeeShowOrganId") &&
 						!objectMap.containsKey("replacementShowOrganId")) {
-					lineErrList.add("可售分部至少需要选择一个");
+					lineErrList.add("可售分部至少需要填写一个");
+				}
+				// 校验子商品sku是否重复
+				String tempSn = objectMap.get("sn").toString();
+				String tempSku = objectMap.get("sku").toString();
+				byte[] images = objectMap.getBytes("image");
+				snImageMap.put(tempSn, images);
+				if (StringUtils.isNotEmpty(tempSn) && StringUtils.isNotEmpty(tempSku)) {
+					Set<String> set = snSubGoodsMap.getOrDefault(tempSn, new HashSet<>());
+					if (set.contains(tempSku)) {
+						lineErrList.add("子商品SKU重复");
+					} else {
+						set.add(tempSku);
+						snSubGoodsMap.put(tempSn, set);
+					}
 				}
+
 				if (!lineErrList.isEmpty()) {
 					errList.add(String.format(lineErrMsg, rowNum, String.join(",", lineErrList)));
 				}
@@ -852,8 +865,10 @@ public class GoodsServiceImpl extends BaseServiceImpl<Integer, Goods>  implement
 		}
 
 		List<GoodsWrapper.Goods> goodsList = jsonObjectList.stream().map(next -> {
+			next.remove("image");
 			String jsonString = next.toJSONString();
 			GoodsWrapper.Goods goods = JSON.parseObject(jsonString, GoodsWrapper.Goods.class);
+			goods.setSellCount(0);
 			GoodsWrapper.GoodsSub goodsSub = JSON.parseObject(jsonString, GoodsWrapper.GoodsSub.class);
 			ArrayList<GoodsWrapper.GoodsSub> arrayList = new ArrayList<>();
 			arrayList.add(goodsSub);
@@ -867,8 +882,21 @@ public class GoodsServiceImpl extends BaseServiceImpl<Integer, Goods>  implement
 //		// 数据合并
 		Map<Integer, Integer> skuIdMap = subGoods.stream().collect(Collectors.toMap(PmsProductDto::getSkuStockId, PmsProductDto::getStock));
 
-		goodsGroup.forEach((key, value) -> {
+		for (Map.Entry<String, List<GoodsWrapper.Goods>> entry : goodsGroup.entrySet()) {
+			List<GoodsWrapper.Goods> value = entry.getValue();
 			GoodsWrapper.Goods good = value.get(0);
+			String sn = good.getSn();
+
+			// 图片上传
+			byte[] images = snImageMap.get(sn);
+			if (images != null && images.length > 0) {
+				File imgFile = createImportGoodsTempFile(UUID.randomUUID().toString().replaceAll("-","") + ".png");
+				BufferedImage read = ImageIO.read(new ByteArrayInputStream((images)));
+				ImageIO.write(read, "png", imgFile);
+				String url = ossPluginContext.getPluginService(TencentOssPlugin.PLUGIN_NAME).uploadFile("daya/" + UploadUtil.getFileFloder(), imgFile);
+				good.setImage(url);
+				imgFile.deleteOnExit();
+			}
 			List<GoodsWrapper.GoodsSub> goodsSubList = value.stream().map(GoodsWrapper.Goods::getGoodsSubList).flatMap(Collection::stream).collect(Collectors.toList());
 			Integer stock = goodsSubList.stream().map(next -> skuIdMap.get(next.getSku())).min(Integer::compareTo).orElse(0);
 
@@ -886,8 +914,30 @@ public class GoodsServiceImpl extends BaseServiceImpl<Integer, Goods>  implement
 				sub.setGoodsPrice(next.getGoodsPrice());
 				return sub;
 			}).collect(Collectors.toList());
-			goodsSubService.saveBatch(subList);
-		});
+            goodsSubService.saveBatch(subList);
+		}
+
+//		goodsGroup.forEach((key, value) -> {
+//			GoodsWrapper.Goods good = value.get(0);
+//			List<GoodsWrapper.GoodsSub> goodsSubList = value.stream().map(GoodsWrapper.Goods::getGoodsSubList).flatMap(Collection::stream).collect(Collectors.toList());
+//			Integer stock = goodsSubList.stream().map(next -> skuIdMap.get(next.getSku())).min(Integer::compareTo).orElse(0);
+//
+//			Goods goods = JSON.parseObject(JSON.toJSONString(good), Goods.class);
+//			goods.setStatus(YesOrNoEnum.NO);
+//			goods.setStockCount(stock);
+//			this.insert(goods);
+//
+//			List<GoodsSub> subList = goodsSubList.stream().map(next -> {
+//				GoodsSub sub = new GoodsSub();
+//				sub.setGoodsId(goods.getId());
+//				sub.setMallGoodsId(next.getMallGoodsId());
+//				sub.setSku(next.getSku());
+//				sub.setGoodsStatus(next.getGoodsStatus());
+//				sub.setGoodsPrice(next.getGoodsPrice());
+//				return sub;
+//			}).collect(Collectors.toList());
+//			goodsSubMapper.saveBatch(subList);
+//		});
 		return null;
 	}
 
@@ -1194,10 +1244,6 @@ public class GoodsServiceImpl extends BaseServiceImpl<Integer, Goods>  implement
 		}
 		GoodsWrapper.Goods detail = JSON.parseObject(JSON.toJSONString(goods), GoodsWrapper.Goods.class);
 		detail.setGoodsSubList(queryGoodsSubByGoodId(goodsId));
-
-		List<ProductCategoryDto> productCategoryDtos = treeToList(queryGoodsCategoryList());
-		Map<Long, String> IdNamemap = productCategoryDtos.stream().collect(Collectors.toMap(ProductCategoryDto::getId, ProductCategoryDto::getName));
-		detail.setGoodsCategoryName(IdNamemap.getOrDefault(Long.valueOf(detail.getGoodsCategoryId()), ""));
 		return detail;
 	}
 
@@ -1390,22 +1436,27 @@ public class GoodsServiceImpl extends BaseServiceImpl<Integer, Goods>  implement
 		return mallFeignService.listWithChildren();
 	}
 
-	private String getExportErrLogFile(List<String> errList) {
-		if (CollectionUtils.isEmpty(errList)) {
-			return null;
-		}
-
+	private File createImportGoodsTempFile(String fileName) {
 		String basePath = new ApplicationHome(this.getClass()).getSource().getParentFile().getPath();
-		String format = new SimpleDateFormat("yyyyMMddHHmmss").format(new Date());
-		File file = new File(basePath + File.separator + format + ".csv");
+		File file = new File(basePath + File.separator + "daya" + File.separator + "importGoods" + File.separator + fileName);
 		try {
 			if (!file.getParentFile().exists()) {
 				file.getParentFile().mkdirs();
 			}
 			file.createNewFile();
+			return file;
 		} catch (IOException e) {
-			throw new RuntimeException(e);
+			throw new BizException("导入失败,回执文件上传失败");
+		}
+	}
+
+	private String getExportErrLogFile(List<String> errList) {
+		if (CollectionUtils.isEmpty(errList)) {
+			return null;
 		}
+
+		String format = new SimpleDateFormat("yyyyMMddHHmmss").format(new Date());
+		File file = createImportGoodsTempFile(format + ".csv");
 		try {
 			FileOutputStream out = new FileOutputStream(file);
 			byte[] uft8bom = {(byte) 0xef, (byte) 0xbb, (byte) 0xbf}; // 处理乱码
@@ -1421,25 +1472,12 @@ public class GoodsServiceImpl extends BaseServiceImpl<Integer, Goods>  implement
 			String folder = "daya/download/" + UploadUtil.getFileFloder();
 			return ossPluginContext.getPluginService(TencentOssPlugin.PLUGIN_NAME).uploadFile(folder, file);
 		} catch (IOException e) {
-			e.printStackTrace();
+			log.error("上传错误回执文件失败:{}",e.getMessage());
+		} finally {
+			if (file.exists()) {
+				file.deleteOnExit();
+			}
 		}
 		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;
-	}
 }

+ 1 - 24
mec-biz/src/main/java/com/ym/mec/biz/service/impl/StudentGoodsSellServiceImpl.java

@@ -14,11 +14,9 @@ import com.ym.mec.biz.service.SysConfigService;
 import com.ym.mec.biz.service.SysTenantConfigService;
 import com.ym.mec.biz.service.TenantInfoService;
 import com.ym.mec.common.dal.BaseDAO;
-import com.ym.mec.common.dto.ProductCategoryDto;
 import com.ym.mec.common.page.PageInfo;
 import com.ym.mec.common.service.impl.BaseServiceImpl;
 import com.ym.mec.common.tenant.TenantContextHolder;
-import com.ym.mec.mall.MallFeignService;
 import com.ym.mec.util.collection.MapUtil;
 import org.apache.commons.collections.CollectionUtils;
 import org.apache.commons.lang3.StringUtils;
@@ -46,8 +44,6 @@ public class StudentGoodsSellServiceImpl extends BaseServiceImpl<Integer, Studen
     private StudentInstrumentDao studentInstrumentDao;
     @Autowired
     private SysCouponCodeDao sysCouponCodeDao;
-    @Autowired
-    private MallFeignService mallFeignService;
 
     @Override
     public BaseDAO<Integer, StudentGoodsSell> getDAO() {
@@ -150,8 +146,6 @@ public class StudentGoodsSellServiceImpl extends BaseServiceImpl<Integer, Studen
             return null;
         }
         List<Goods> goodies = goodsDao.getGoodiesAndCate(goodsIds);
-        List<ProductCategoryDto> productCategoryDtos = treeToList(mallFeignService.listWithChildren());
-        Map<Long, String> categoryIdNameMap = productCategoryDtos.stream().collect(Collectors.toMap(next -> next.getId(), next -> next.getName()));
         List<StudentInstrument> studentInstruments = new ArrayList<>();
         for (Goods goods : goodies) {
             StudentInstrument studentInstrument = new StudentInstrument();
@@ -159,7 +153,7 @@ public class StudentGoodsSellServiceImpl extends BaseServiceImpl<Integer, Studen
             studentInstrument.setOrganId(studentGoodsSell.getOrganId());
             studentInstrument.setGoodsId(goods.getId());
             studentInstrument.setGoodsCategoryId(goods.getGoodsCategoryId());
-            studentInstrument.setGoodsCategoryName(categoryIdNameMap.getOrDefault(Long.valueOf(goods.getGoodsCategoryId()),""));
+            studentInstrument.setGoodsCategoryName(goods.getGoodsCategoryName());
             studentInstrument.setGoodsName(goods.getName());
             studentInstrument.setGoodsBrand(goods.getBrand());
             studentInstrument.setSpecification(goods.getSpecification());
@@ -184,21 +178,4 @@ public class StudentGoodsSellServiceImpl extends BaseServiceImpl<Integer, Studen
         }
         return studentGoodsSell;
     }
-
-    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 (!org.springframework.util.CollectionUtils.isEmpty(children)) {
-                children.forEach(c -> c.setName(name + "/" + c.getName()));
-                result.addAll(children);
-            }
-        });
-        return result;
-    }
 }

+ 0 - 4
mec-biz/src/main/java/com/ym/mec/biz/service/impl/StudentInstrumentServiceImpl.java

@@ -5,11 +5,9 @@ import java.util.Date;
 import java.util.HashMap;
 import java.util.List;
 import java.util.Map;
-import java.util.Objects;
 import java.util.Optional;
 import java.util.stream.Collectors;
 
-import com.ym.mec.mall.MallFeignService;
 import org.apache.commons.lang3.StringUtils;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
@@ -449,9 +447,7 @@ public class StudentInstrumentServiceImpl extends BaseServiceImpl<Long, StudentI
         List<Goods> goodies = goodsDao.getGoodsByBaseGoodsId(76);
         List<Integer> goodsIds = goodies.stream().map(Goods::getId).collect(Collectors.toList());
         List<StudentInstrument> oldStudentInstruments = studentInstrumentDao.getOldStudentInstrument(startTime, goodsIds);
-        Map<Integer, String> nameMap = goodsCategoryService.getNameMap();
         for (StudentInstrument oldStudentInstrument : oldStudentInstruments) {
-            oldStudentInstrument.setGoodsCategoryName(nameMap.getOrDefault(oldStudentInstrument.getGoodsCategoryId(),""));
             oldStudentInstrument.setChangeOrderId(oldStudentInstrument.getOrderId());
             if (oldStudentInstrument.getEndTime().compareTo(nowDate) > 0) {
                 oldStudentInstrument.setStatus(1);

+ 1 - 1
mec-biz/src/main/resources/config/mybatis/GoodsCategoryMapper.xml

@@ -24,7 +24,7 @@
 
     <!-- 根据主键查询一条记录 -->
     <select id="get" resultMap="GoodsCategory">
-		SELECT * FROM goods_category WHERE id_ = #{id}
+		SELECT * FROM goods_category WHERE id_ = #{id} 
 	</select>
 
     <!-- 全查询 -->

+ 25 - 21
mec-biz/src/main/resources/config/mybatis/GoodsMapper.xml

@@ -54,6 +54,8 @@
         <result column="child_name_" property="childName"/>
         <result column="child_sn_" property="childSn"/>
         <result column="child_organ_cost_price_" property="childOrganCostPrice"/>
+        <result column="group_goods_" property="groupGoods"/>
+        <result column="del_flag_" property="delFlag"/>
     </resultMap>
 
     <!-- 根据主键查询一条记录 -->
@@ -68,7 +70,7 @@
 
     <!-- 全查询 -->
     <select id="findAll" resultMap="Goods">
-        SELECT * FROM goods where tenant_id_ = #{tenantId} ORDER BY id_
+        SELECT * FROM goods where tenant_id_ = #{tenantId} and del_flag_ = 0 ORDER BY id_
     </select>
 
     <!-- 向数据库增加一条记录 -->
@@ -79,14 +81,14 @@
          discount_price_,group_purchase_price_,brief_,desc_,is_new_,is_top_,status_,memo_,publish_time_,
          complement_goods_id_list_,update_time_,create_time_,type_,agree_cost_price_,stock_warning_,stock_type_
             ,student_show_organ_id_,education_show_organ_id_,replacement_show_organ_id_,course_fee_show_organ_id_,
-         member_fee_show_organ_id_,free_fee_show_organ_id_,tenant_id_,organ_cost_price_)
+         member_fee_show_organ_id_,free_fee_show_organ_id_,tenant_id_,organ_cost_price_,group_goods_)
         VALUES(#{goodsCategoryId},#{sn},#{name},#{brand},#{specification},#{image},#{stockCount},#{taxStockCount},#{sellCount},#{marketPrice},
                #{discountPrice},#{groupPurchasePrice},#{brief},#{desc},
                #{isNew,typeHandler=com.ym.mec.common.dal.CustomEnumTypeHandler},#{isTop,typeHandler=com.ym.mec.common.dal.CustomEnumTypeHandler},#{status,typeHandler=com.ym.mec.common.dal.CustomEnumTypeHandler},
                #{memo},#{publishTime},#{complementGoodsIdList},now(),now(),#{type,typeHandler=com.ym.mec.common.dal.CustomEnumTypeHandler},#{agreeCostPrice},
                #{stockWarning,typeHandler=com.ym.mec.common.dal.CustomEnumTypeHandler}, #{stockType,typeHandler=com.ym.mec.common.dal.CustomEnumTypeHandler},
                #{studentShowOrganId},#{educationShowOrganId},#{replacementShowOrganId},#{courseFeeShowOrganId},
-               #{memberFeeShowOrganId},#{freeFeeShowOrganId},#{tenantId},#{organCostPrice})
+               #{memberFeeShowOrganId},#{freeFeeShowOrganId},#{tenantId},#{organCostPrice},#{groupGoods})
     </insert>
     <insert id="batchInsert" parameterType="java.util.List" useGeneratedKeys="true" keyProperty="id">
         INSERT INTO goods
@@ -94,7 +96,7 @@
         discount_price_,group_purchase_price_,brief_,desc_,update_time_,create_time_,type_,agree_cost_price_,sn_,
         stock_count_,tax_stock_count_,stock_warning_,stock_type_
         ,student_show_organ_id_,education_show_organ_id_,replacement_show_organ_id_,course_fee_show_organ_id_,
-        member_fee_show_organ_id_,free_fee_show_organ_id_,tenant_id_,organ_cost_price_)
+        member_fee_show_organ_id_,free_fee_show_organ_id_,tenant_id_,organ_cost_price_,group_goods_)
         VALUES
         <foreach collection="list" separator="," item="goods">
             (#{goods.goodsCategoryId},#{goods.name},#{goods.brand},#{goods.specification},#{goods.image},#{goods.marketPrice},
@@ -104,7 +106,7 @@
             #{goods.stockWarning,typeHandler=com.ym.mec.common.dal.CustomEnumTypeHandler},
             #{goods.stockType,typeHandler=com.ym.mec.common.dal.CustomEnumTypeHandler},
             #{goods.studentShowOrganId},#{goods.educationShowOrganId},#{goods.replacementShowOrganId},
-            #{goods.courseFeeShowOrganId},#{goods.memberFeeShowOrganId},#{goods.freeFeeShowOrganId},#{goods.tenantId},#{goods.organCostPrice}
+            #{goods.courseFeeShowOrganId},#{goods.memberFeeShowOrganId},#{goods.freeFeeShowOrganId},#{goods.tenantId},#{goods.organCostPrice},#{goods.groupGoods}
             )
         </foreach>
     </insert>
@@ -308,9 +310,8 @@
 
     <!-- 分页查询 -->
     <select id="queryPage" resultMap="Goods" parameterType="map">
-        SELECT g.* FROM goods g
-<!--        SELECT g.*,gc.name_ goods_category_name_ FROM goods g-->
-<!--        LEFT JOIN goods_category gc ON g.goods_category_id_ = gc.id_-->
+        SELECT g.*,gc.name_ goods_category_name_ FROM goods g
+        LEFT JOIN goods_category gc ON g.goods_category_id_ = gc.id_
         <include refid="queryGoodsPageSql"/>
         GROUP BY g.id_
         ORDER BY g.id_ DESC
@@ -324,7 +325,7 @@
 
     <sql id="queryGoodsPageSql">
         <where>
-            g.tenant_id_ = #{tenantId}
+            g.tenant_id_ = #{tenantId} and g.del_flag_ = 0
             <if test="goodsCategoryId != null">
                 AND g.goods_category_id_ = #{goodsCategoryId}
             </if>
@@ -384,6 +385,9 @@
             <if test="search!=null and search!=''">
                 AND (g.sn_=#{search} OR g.id_=#{search} OR g.name_ LIKE CONCAT('%', #{search}, '%'))
             </if>
+            <if test="groupGoods != null">
+                AND t.group_goods_ = #{groupGoods}
+            </if>
         </where>
     </sql>
 
@@ -395,7 +399,7 @@
 
     <sql id="queryOrganIdSql">
         <where>
-            AND g.status_ != 0 and g.tenant_id_ = #{goodsQuery.tenantId}
+            AND g.status_ != 0 and g.tenant_id_ = #{goodsQuery.tenantId} and g.del_flag_ = 0
             <if test="goodsQuery.subjectId != null">
                 AND sgm.subject_id_ = #{goodsQuery.subjectId}
             </if>
@@ -434,13 +438,13 @@
 
     <!-- 根据 -->
     <select id="findGoodsNumByCategoryId" resultType="int">
-        SELECT COUNT(*) FROM goods WHERE goods_category_id_ = #{goodsCategoryId} and tenant_id_ = #{tenantId}
+        SELECT COUNT(*) FROM goods WHERE goods_category_id_ = #{goodsCategoryId} and tenant_id_ = #{tenantId} and del_flag_ = 0
     </select>
     <select id="findGoodsByIds" resultMap="Goods">
         SELECT * FROM goods WHERE FIND_IN_SET(id_,#{ids})
     </select>
     <select id="findTypeGoods" resultMap="Goods">
-        SELECT * FROM goods WHERE type_ = #{type} AND status_ != 0 and tenant_id_ = #{tenantId}
+        SELECT * FROM goods WHERE type_ = #{type} AND status_ != 0 and tenant_id_ = #{tenantId} and del_flag_ = 0
     </select>
     <select id="getGoodies" resultMap="Goods">
         SELECT * FROM goods WHERE id_ IN
@@ -521,14 +525,14 @@
     </select>
 
     <select id="getGoodsInfo" resultMap="Goods">
-        SELECT g.* FROM goods g
-<!----><!--                                                          LEFT JOIN goods_category gc on g.goods_category_id_ = gc.id_-->
+        SELECT g.*,gc.name_ goods_category_name_ FROM goods g
+                                                          LEFT JOIN goods_category gc on g.goods_category_id_ = gc.id_
         WHERE g.id_=#{id}
     </select>
 
     <select id="getGoodiesAndCate" resultMap="Goods">
-        SELECT g.* FROM goods g
-<!--        LEFT JOIN goods_category gc on g.goods_category_id_ = gc.id_-->
+        SELECT g.*,gc.name_ goods_category_name_ FROM goods g
+        LEFT JOIN goods_category gc on g.goods_category_id_ = gc.id_
         WHERE g.id_ IN
         <foreach collection="goodsIds" item="goodsId" open="(" close=")" separator=",">
             #{goodsId}
@@ -545,7 +549,7 @@
         SELECT g.id_,g.brand_,g.specification_,g.brief_ param_,g.market_price_,g.discount_price_,g.group_purchase_price_ sale_price_,
         (g.discount_price_-g.group_purchase_price_) depreciation_price_
         FROM subject_goods_mapper sgm
-<!--        LEFT JOIN goods_category gc ON gc.id_=sgm.goods_category_id_-->
+        LEFT JOIN goods_category gc ON gc.id_=sgm.goods_category_id_
         LEFT JOIN goods g ON sgm.goods_category_id_ = g.goods_category_id_
         <include refid="replacementQuerySql"/>
         <include refid="global.limit"/>
@@ -554,7 +558,7 @@
     <select id="getReplacementInstrumentCount" resultType="int">
         SELECT COUNT(*)
         FROM subject_goods_mapper sgm
-<!--        LEFT JOIN goods_category gc ON gc.id_=sgm.goods_category_id_-->
+        LEFT JOIN goods_category gc ON gc.id_=sgm.goods_category_id_
         LEFT JOIN goods g ON sgm.goods_category_id_ = g.goods_category_id_
         <include refid="replacementQuerySql"/>
         <include refid="global.limit"/>
@@ -563,10 +567,10 @@
         select SUM(organ_cost_price_) from goods where FIND_IN_SET(id_,#{complementGoodsIdList});
     </select>
     <select id="exportGoods" resultMap="Goods">
-        SELECT g.*,
+        SELECT g.*,gc.name_ goods_category_name_,
         GROUP_CONCAT(gs.name_) child_name_,GROUP_CONCAT(gs.sn_) child_sn_,
         GROUP_CONCAT(gs.id_) child_id_,GROUP_CONCAT(gs.organ_cost_price_) child_organ_cost_price_ FROM goods g
-<!--        LEFT JOIN goods_category gc ON g.goods_category_id_ = gc.id_-->
+        LEFT JOIN goods_category gc ON g.goods_category_id_ = gc.id_
         left join goods gs ON FIND_IN_SET(gs.id_,g.complement_goods_id_list_)
         <include refid="queryGoodsPageSql"/>
         GROUP BY g.id_
@@ -577,7 +581,7 @@
         <where>
             g.status_ != 0
             AND g.type_ = 'INSTRUMENT'
-<!--            AND gc.del_flag_ = 0 and g.tenant_id_ = #{tenantId}-->
+            AND gc.del_flag_ = 0 and g.tenant_id_ = #{tenantId}
             <if test="organId != null">
                 AND FIND_IN_SET(#{organId},g.replacement_show_organ_id_)
             </if>

+ 2 - 2
mec-biz/src/main/resources/config/mybatis/StudentInstrumentMapper.xml

@@ -266,7 +266,7 @@
         spo.organ_id_,
         g.id_ goods_id_,
         g.goods_category_id_,
-<!--        gc.name_ goods_category_name_,-->
+        gc.name_ goods_category_name_,
         g.name_ goods_name_,
         g.brand_ goods_brand_,
         g.specification_,
@@ -278,7 +278,7 @@
         LEFT JOIN student_payment_order spo ON spo.id_ = spod.payment_order_id_
         LEFT JOIN student_payment_order_detail spod2 ON spod2.payment_order_id_ = spo.id_
         LEFT JOIN goods g ON g.id_ = spod2.goods_id_list_
-<!--        LEFT JOIN goods_category gc on g.goods_category_id_ = gc.id_-->
+        LEFT JOIN goods_category gc on g.goods_category_id_ = gc.id_
         WHERE spo.status_ = 'SUCCESS'
         AND spod2.type_ = 'MUSICAL'
         AND (

+ 2 - 11
mec-biz/src/main/resources/config/mybatis/SubjectGoodsMapperMapper.xml

@@ -89,12 +89,11 @@
     </select>
     <select id="querySubjectGoods" resultMap="querySubjectGoodsMap">
         SELECT sgc.*,g.type_ goods_type_,g.name_ goods_name_,g.id_ goods_id_ FROM
-        (SELECT s.name_ subject_name_,s.id_ subject_id_,sgm.goods_category_id_ goods_category_id_,
+        (SELECT s.name_ subject_name_,s.id_ subject_id_,gc.id_ goods_category_id_,gc.name_ goods_category_name_,
         sgm.goods_id_list_,sgm.id_ subject_goods_mapper_id_
         FROM subject_goods_mapper sgm
         LEFT JOIN `subject` s ON s.id_ = sgm.subject_id_
-<!--        LEFT JOIN goods_category gc ON gc.id_ = sgm.goods_category_id_ -->
-        <include refid="global.limit"/>) sgc
+        LEFT JOIN goods_category gc ON gc.id_ = sgm.goods_category_id_ <include refid="global.limit"/>) sgc
         LEFT JOIN goods g ON FIND_IN_SET(g.id_,sgc.goods_id_list_)
         where g.tenant_id_ = #{tenantId}
     </select>
@@ -110,12 +109,4 @@
             <result property="type" column="goods_type_"/>
         </collection>
     </resultMap>
-
-    <select id="queryByCategoryIds" resultMap="SubjectGoodsMapper">
-        select t.* from subject_goods_mapper t
-        where t.goods_category_id_ in
-        <foreach collection="categoryIdList" item="item" separator="," open="(" close=")">
-            #{item}
-        </foreach>
-    </select>
 </mapper>

+ 1 - 1
mec-client-api/src/main/java/com/ym/mec/mall/MallFeignService.java

@@ -55,6 +55,6 @@ public interface MallFeignService {
 
 
     //    @ApiOperation("分页获取所有商品属性分类")
-    @RequestMapping(value = "/open/returnApply", method = RequestMethod.POST)
+    @RequestMapping(value = "/open/product/returnApply", method = RequestMethod.POST)
     CommonResult<Boolean> returnApply(ReturnApplyDto returnApplyDto);
 }

+ 3 - 8
mec-client-api/src/main/java/com/ym/mec/web/WebFeignService.java

@@ -2,12 +2,7 @@ package com.ym.mec.web;
 
 import com.ym.mec.common.config.FeignConfiguration;
 import com.ym.mec.common.dto.SchoolDto;
-import com.ym.mec.common.entity.GoodsSubModel;
-import com.ym.mec.common.entity.GoodsSubStockModel;
-import com.ym.mec.common.entity.HttpResponseResult;
-import com.ym.mec.common.entity.MallCreateOrderModel;
-import com.ym.mec.common.entity.OrderCancelModel;
-import com.ym.mec.common.entity.RefundModel;
+import com.ym.mec.common.entity.*;
 import com.ym.mec.common.page.QueryInfo;
 import com.ym.mec.thirdparty.adapay.entity.BaseResult;
 import com.ym.mec.thirdparty.adapay.entity.HfMerchantConfig;
@@ -60,7 +55,7 @@ public interface WebFeignService {
 
 	//商城发货状态同步
 	@PostMapping("/api/updateShippedStatus")
-	HttpResponseResult updateShippedStatus(@RequestBody List<String> orderNo);
+	HttpResponseResult updateShippedStatus(@RequestBody List<OrderSkuSync> orderSkuSyncs);
 
 	@PostMapping("/api/cancelOrder")
 	HttpResponseResult<OrderCancelModel> cancelOrder(@RequestParam("orderNo") String orderNo,@RequestParam("reason") String reason);
@@ -99,7 +94,7 @@ public interface WebFeignService {
 	HttpResponseResult<Boolean> goodsStockCountSynchronize(@RequestBody List<GoodsSubStockModel> goodsSubStockModels);
 
 
-    // 商城商品库存更新,同步商品库存
+    // 获取学校信息
     @PostMapping("/api/schoolListByIds")
     HttpResponseResult<List<SchoolDto>> schoolListByIds(@RequestBody List<Integer> schoolIds);
 }

+ 2 - 7
mec-client-api/src/main/java/com/ym/mec/web/fallback/WebFeignServiceFallback.java

@@ -1,12 +1,7 @@
 package com.ym.mec.web.fallback;
 
 import com.ym.mec.common.dto.SchoolDto;
-import com.ym.mec.common.entity.GoodsSubModel;
-import com.ym.mec.common.entity.GoodsSubStockModel;
-import com.ym.mec.common.entity.HttpResponseResult;
-import com.ym.mec.common.entity.MallCreateOrderModel;
-import com.ym.mec.common.entity.OrderCancelModel;
-import com.ym.mec.common.entity.RefundModel;
+import com.ym.mec.common.entity.*;
 import com.ym.mec.common.page.QueryInfo;
 import com.ym.mec.thirdparty.adapay.entity.BaseResult;
 import com.ym.mec.thirdparty.adapay.entity.HfMerchantConfig;
@@ -78,7 +73,7 @@ public class WebFeignServiceFallback implements WebFeignService {
 	}
 
     @Override
-    public HttpResponseResult updateShippedStatus(List<String> orderNo) {
+    public HttpResponseResult updateShippedStatus(List<OrderSkuSync> orderSkuSyncs) {
         return null;
     }
 

+ 37 - 0
mec-common/common-core/src/main/java/com/ym/mec/common/entity/OrderSkuSync.java

@@ -0,0 +1,37 @@
+package com.ym.mec.common.entity;
+
+import lombok.Data;
+
+import java.math.BigDecimal;
+import java.util.List;
+
+/**
+ * Description
+ *
+ * @author liujunchi
+ * @date 2022-09-16
+ */
+@Data
+public class OrderSkuSync {
+
+    private String orderNo;
+
+    private List<SkuSync> skuSyncList;
+
+
+    @Data
+    public static class SkuSync {
+
+        // sku Id
+        private Long sku;
+
+        // 数量
+        private Integer count;
+
+        //价格
+        private BigDecimal price;
+
+        // 批次号
+        private Long recordId;
+    }
+}

+ 39 - 27
mec-mall/mall-admin/src/main/java/com/yonge/cooleshow/admin/service/impl/OmsOrderReturnApplyServiceImpl.java

@@ -22,10 +22,12 @@ import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.stereotype.Service;
 import org.springframework.transaction.annotation.Transactional;
 import org.springframework.util.CollectionUtils;
+import org.springframework.util.StringUtils;
 
 import java.math.BigDecimal;
 import java.math.RoundingMode;
 import java.util.ArrayList;
+import java.util.Arrays;
 import java.util.Date;
 import java.util.List;
 
@@ -238,38 +240,48 @@ public class OmsOrderReturnApplyServiceImpl implements OmsOrderReturnApplyServic
         if (CollectionUtils.isEmpty(omsOrderItems)) {
             throw new ApiException("未找到订单商品信息");
         }
-
-        OmsOrderItem orderItem = omsOrderItems.stream().filter(omsOrderItem -> omsOrderItem.getProductSkuId()
-            .equals(returnApplyDto.getSkuId())).findFirst().orElseThrow(() -> new ApiException("未找到订单商品信息"));
-        PmsProduct pmsProduct = productMapper.selectByPrimaryKey(orderItem.getProductId());
-        if (pmsProduct == null) {
-            throw new ApiException("未找到商品信息");
+        if (StringUtils.isEmpty(returnApplyDto.getSkuIds())) {
+            throw new ApiException("未找到订单商品信息");
         }
+        List<OmsOrderReturnApply> returnApplyList = new ArrayList<>();
 
+        Arrays.stream(returnApplyDto.getSkuIds().split(",")).forEach(skuId -> {
+            OmsOrderItem orderItem = omsOrderItems.stream().filter(omsOrderItem -> omsOrderItem.getProductSkuId().equals(Long.valueOf(skuId)))
+                .findFirst().orElseThrow(() -> new ApiException("未找到订单商品信息"));
+            PmsProduct pmsProduct = productMapper.selectByPrimaryKey(orderItem.getProductId());
 
+            if (pmsProduct == null) {
+                throw new ApiException("未找到商品信息");
+            }
+            OmsOrderReturnApply returnApply = new OmsOrderReturnApply();
+            returnApply.setOrderId(byOrderSn.getId());
+            returnApply.setProductId(pmsProduct.getId());
+            returnApply.setOrderItemId(orderItem.getId());
+            returnApply.setOrderSn(byOrderSn.getOrderSn());
+            returnApply.setCreateTime(new Date());
+            returnApply.setMemberUsername(byOrderSn.getMemberUsername());
+            returnApply.setReturnAmount(BigDecimal.ZERO);
+            returnApply.setStatus(2);
+            returnApply.setHandleTime(new Date());
+            returnApply.setProductPic(pmsProduct.getPic());
+            returnApply.setProductName(pmsProduct.getName());
+            if (pmsProduct.getBrandId() != null) {
+                returnApply.setProductBrand(brandMapper.selectByPrimaryKey(pmsProduct.getBrandId()).getName());
+            }
+            returnApply.setProductAttr(orderItem.getProductAttr());
+            returnApply.setProductCount(orderItem.getProductQuantity());
+            returnApply.setProductPrice(orderItem.getProductPrice());
+            returnApply.setProductRealPrice(orderItem.getRealAmount());
+            returnApply.setReason(returnApplyDto.getReason());
+            returnApplyList.add(returnApply);
+        });
+
+        if (!CollectionUtils.isEmpty(returnApplyList)) {
+            for (OmsOrderReturnApply omsOrderReturnApply : returnApplyList) {
+                returnApplyMapper.insert(omsOrderReturnApply);
 
-        OmsOrderReturnApply returnApply = new OmsOrderReturnApply();
-        returnApply.setOrderId(byOrderSn.getId());
-        returnApply.setProductId(pmsProduct.getId());
-        returnApply.setOrderItemId(orderItem.getId());
-        returnApply.setOrderSn(byOrderSn.getOrderSn());
-        returnApply.setCreateTime(new Date());
-        returnApply.setMemberUsername(byOrderSn.getMemberUsername());
-        returnApply.setReturnAmount(BigDecimal.ZERO);
-        returnApply.setStatus(2);
-        returnApply.setHandleTime(new Date());
-        returnApply.setProductPic(pmsProduct.getPic());
-        returnApply.setProductName(pmsProduct.getName());
-        if (pmsProduct.getBrandId() != null) {
-            returnApply.setProductBrand(brandMapper.selectByPrimaryKey(pmsProduct.getBrandId()).getName());
+            }
         }
-        returnApply.setProductAttr(orderItem.getProductAttr());
-        returnApply.setProductCount(orderItem.getProductQuantity());
-        returnApply.setProductPrice(orderItem.getProductPrice());
-        returnApply.setProductRealPrice(orderItem.getRealAmount());
-        returnApply.setReason(returnApplyDto.getReason());
-
-        returnApplyMapper.insert(returnApply);
 
 
     }

+ 99 - 70
mec-mall/mall-admin/src/main/java/com/yonge/cooleshow/admin/service/impl/OmsOrderServiceImpl.java

@@ -6,6 +6,7 @@ import com.google.common.collect.Lists;
 import com.ym.mec.common.dto.SchoolDto;
 import com.ym.mec.common.entity.GoodsSubStockModel;
 import com.ym.mec.common.entity.HttpResponseResult;
+import com.ym.mec.common.entity.OrderSkuSync;
 import com.ym.mec.common.exception.BizException;
 import com.ym.mec.util.date.DateUtil;
 import com.ym.mec.web.WebFeignService;
@@ -91,7 +92,7 @@ public class OmsOrderServiceImpl implements OmsOrderService {
         List<OrderVo> list = orderDao.getList(queryParam);
 
         // 过滤出学校订单,查询学校信息
-        List<Long> schoolIds = list.stream().filter(o->o.getSourceType() ==2).map(OmsOrder::getMemberId).collect(Collectors.toList());
+        List<Integer> schoolIds = list.stream().filter(o->o.getSourceType() ==2).map(e->e.getMemberId().intValue()).collect(Collectors.toList());
         for (OrderVo orderVo : list) {
             if (orderVo.getSourceType() == 2 ||orderVo.getSourceType() == 4) {
                 orderVo.setPhone("");
@@ -102,10 +103,10 @@ public class OmsOrderServiceImpl implements OmsOrderService {
             try {
                 HttpResponseResult<List<SchoolDto>> schoolDtoHttpResponseResult = webFeignService.schoolListByIds(schoolIds);
                 if (schoolDtoHttpResponseResult.getCode() == 200 && schoolDtoHttpResponseResult.getStatus()) {
-                    Map<Long, SchoolDto> schoolDtoMap = schoolDtoHttpResponseResult.getData().stream().collect(Collectors.toMap(SchoolDto::getId, o -> o));
+                    Map<Integer, SchoolDto> schoolDtoMap = schoolDtoHttpResponseResult.getData().stream().collect(Collectors.toMap(SchoolDto::getId, o -> o));
                     list.forEach(o->{
                         if (o.getSourceType() == 2) {
-                            SchoolDto schoolDto = schoolDtoMap.get(o.getMemberId());
+                            SchoolDto schoolDto = schoolDtoMap.get(o.getMemberId().intValue());
                             if (schoolDto != null) {
                                 o.setUsername(schoolDto.getName());
                             } else {
@@ -141,16 +142,7 @@ public class OmsOrderServiceImpl implements OmsOrderService {
         // 查询出所有订单关联的skuId
         // 订单ID集合
         List<Long> orderIds = deliveryParamList.stream().map(OmsOrderDeliveryParam::getOrderId).collect(Collectors.toList());
-        // 查询订单详情
-        OmsOrderItemExample example = new OmsOrderItemExample();
-        example.createCriteria().andOrderIdIn(orderIds);
-        List<OmsOrderItem> omsOrderItems = omsOrderItemMapper.selectByExample(example);
-        // skuId 数量 map
-        Map<Long, Integer> skuIdMap = omsOrderItems.stream().collect(Collectors.groupingBy(OmsOrderItem::getProductSkuId,Collectors.summingInt(OmsOrderItem::getProductQuantity)));
-
-        // skuid 集合
-        List<Long> skuIds = new ArrayList<>(skuIdMap.keySet());
-        updateSkuStock( skuIdMap, orderIds);
+        updateSkuStock( orderIds);
 
 
         //添加操作记录
@@ -174,10 +166,20 @@ public class OmsOrderServiceImpl implements OmsOrderService {
      */
 //    @Override
     @Transactional(rollbackFor = Exception.class)
-    public void updateSkuStock(Map<Long, Integer> skuIdMap, List<Long> orderIds) {
+    public void updateSkuStock(List<Long> orderIds) {
+
+        // 查询订单详情
+        OmsOrderItemExample example = new OmsOrderItemExample();
+        example.createCriteria().andOrderIdIn(orderIds);
+        List<OmsOrderItem> omsOrderItems = omsOrderItemMapper.selectByExample(example);
+        if (CollectionUtils.isEmpty(omsOrderItems)) {
+            throw new BizException("订单详情不存在");
+        }
+        // skuID集合
+        List<Long> skuIds = omsOrderItems.stream().map(OmsOrderItem::getProductSkuId).distinct().collect(Collectors.toList());
         // 查询库存
         PmsProductSkuStockRecordExample stockRecordExample = new PmsProductSkuStockRecordExample();
-        stockRecordExample.createCriteria().andProductSkuIdIn(new ArrayList<>(skuIdMap.keySet()));
+        stockRecordExample.createCriteria().andProductSkuIdIn(skuIds);
         List<PmsProductSkuStockRecord> productSkuStockRecords = pmsProductSkuStockRecordMapper.selectByExample(stockRecordExample);
         if (CollectionUtils.isEmpty(productSkuStockRecords)) {
             throw new BizException("库存不足");
@@ -193,59 +195,85 @@ public class OmsOrderServiceImpl implements OmsOrderService {
         // 扣减库存
 
         List<PmsProductSkuStockRecord> updateList = new ArrayList<>();
-        skuIdMap.forEach((skuId, num) -> {
-            List<PmsProductSkuStockRecord> skuStockRecords = skuStockRecordMap.get(skuId);
-            if (CollectionUtils.isEmpty(skuStockRecords)) {
-                throw new BizException("库存不足");
-            }
-            int count1 = num;
-            // 扣减内部库存
-            for (PmsProductSkuStockRecord skuStockRecord : skuStockRecords) {
-                if (count1 <= 0) {
-                    break;
+        Map<String, List<OmsOrderItem>> map = omsOrderItems.stream().collect(Collectors.groupingBy(o -> o.getOrderSn()));
+        List<OrderSkuSync> skuSyncList = new ArrayList<>();
+        map.forEach((sn,v) -> {
+            OrderSkuSync skuSync = new OrderSkuSync();
+            skuSync.setOrderNo(sn);
+            List<OrderSkuSync.SkuSync> skuSyncs = new ArrayList<>();
+            skuSync.setSkuSyncList(skuSyncs);
+            v.stream().forEach(o -> {
+                List<PmsProductSkuStockRecord> skuStockRecords = skuStockRecordMap.get(o.getProductSkuId());
+                if (CollectionUtils.isEmpty(skuStockRecords)) {
+                    throw new BizException("库存不足");
                 }
-                if (skuStockRecord.getInternalStock() > 0) {
-
-                    int stock = skuStockRecord.getInternalStock() - skuStockRecord.getInternalSaleStock();
-                    if (stock > 0) {
-                        PmsProductSkuStockRecord record = new PmsProductSkuStockRecord();
-                        record.setId(skuStockRecord.getId());
-
-                        if (stock >= count1) {
-                            record.setInternalSaleStock(skuStockRecord.getInternalSaleStock() + count1);
-                            count1 = 0;
-                        } else {
-                            count1 = count1 - stock;
-                            record.setInternalSaleStock(skuStockRecord.getInternalStock());
+                int count1 = o.getProductQuantity();
+                // 扣减内部库存
+                for (PmsProductSkuStockRecord skuStockRecord : skuStockRecords) {
+                    if (count1 <= 0) {
+                        break;
+                    }
+                    if (skuStockRecord.getInternalStock() > 0) {
+                        OrderSkuSync.SkuSync sync = new OrderSkuSync.SkuSync();
+                        sync.setSku(skuStockRecord.getProductSkuId());
+
+
+                        int stock = skuStockRecord.getInternalStock() - skuStockRecord.getInternalSaleStock();
+                        if (stock > 0) {
+                            PmsProductSkuStockRecord record = new PmsProductSkuStockRecord();
+                            record.setId(skuStockRecord.getId());
+                            sync.setPrice(skuStockRecord.getPrice());
+                            sync.setRecordId(skuStockRecord.getId());
+
+                            if (stock >= count1) {
+                                record.setInternalSaleStock(skuStockRecord.getInternalSaleStock() + count1);
+                                sync.setCount(count1);
+                                count1 = 0;
+                            } else {
+                                count1 = count1 - stock;
+                                record.setInternalSaleStock(skuStockRecord.getInternalStock());
+                                sync.setCount(stock);
+                            }
+                            updateList.add(record);
+                            skuSyncs.add(sync);
                         }
-                        updateList.add(record);
                     }
                 }
-            }
-            // 扣减税务库存
-            for (PmsProductSkuStockRecord skuStockRecord : skuStockRecords) {
-                if (count1 <= 0) {
-                    break;
-                }
-                if (skuStockRecord.getTaxStock() > 0) {
-                    int stock = skuStockRecord.getTaxStock() - skuStockRecord.getTaxSaleStock();
-                    if (stock > 0) {
-                        PmsProductSkuStockRecord record = new PmsProductSkuStockRecord();
-                        record.setId(skuStockRecord.getId());
-                        if (stock >= count1) {
-                            record.setTaxSaleStock(skuStockRecord.getTaxSaleStock() + count1);
-                            count1 = 0;
-                        } else {
-                            count1 = count1 - stock;
-                            record.setTaxSaleStock(skuStockRecord.getTaxStock());
+                // 扣减税务库存
+                for (PmsProductSkuStockRecord skuStockRecord : skuStockRecords) {
+                    if (count1 <= 0) {
+                        break;
+                    }
+                    if (skuStockRecord.getTaxStock() > 0) {
+
+                        OrderSkuSync.SkuSync sync = new OrderSkuSync.SkuSync();
+                        sync.setSku(skuStockRecord.getProductSkuId());
+                        sync.setPrice(skuStockRecord.getPrice());
+                        sync.setRecordId(skuStockRecord.getId());
+
+                        int stock = skuStockRecord.getTaxStock() - skuStockRecord.getTaxSaleStock();
+                        if (stock > 0) {
+                            PmsProductSkuStockRecord record = new PmsProductSkuStockRecord();
+                            record.setId(skuStockRecord.getId());
+                            if (stock >= count1) {
+                                record.setTaxSaleStock(skuStockRecord.getTaxSaleStock() + count1);
+                                sync.setCount(count1);
+                                count1 = 0;
+                            } else {
+                                count1 = count1 - stock;
+                                record.setTaxSaleStock(skuStockRecord.getTaxStock());
+                                sync.setCount(stock);
+                            }
+                            updateList.add(record);
+                            skuSyncs.add(sync);
                         }
-                        updateList.add(record);
                     }
                 }
-            }
-            if (count1 > 0) {
-                throw new BizException("库存不足");
-            }
+                if (count1 > 0) {
+                    throw new BizException("库存不足");
+                }
+            });
+            skuSyncList.add(skuSync);
         });
         for (PmsProductSkuStockRecord pmsProductSkuStockRecord : updateList) {
             pmsProductSkuStockRecordMapper.updateByPrimaryKeySelective(pmsProductSkuStockRecord);
@@ -255,10 +283,8 @@ public class OmsOrderServiceImpl implements OmsOrderService {
         OmsOrderExample orderExample = new OmsOrderExample();
         orderExample.createCriteria().andIdIn(orderIds);
         List<OmsOrder> omsOrders = orderMapper.selectByExample(orderExample);
-        // 订单号
-        List<String> orderSnList = omsOrders.stream().map(OmsOrder::getOrderSn).collect(Collectors.toList());
         try {
-            HttpResponseResult httpResponseResult = webFeignService.updateShippedStatus(orderSnList);
+            HttpResponseResult httpResponseResult = webFeignService.updateShippedStatus(skuSyncList);
             if (httpResponseResult.getCode() != 200 && !httpResponseResult.getStatus()) {
                 throw new BizException("发货通知失败");
             }
@@ -267,7 +293,7 @@ public class OmsOrderServiceImpl implements OmsOrderService {
         }
 
         // 调用三方库存更新接口
-        syncSkuStock(new ArrayList<>(skuIdMap.keySet()));
+        syncSkuStock(skuIds);
     }
 
     @Override
@@ -332,10 +358,16 @@ public class OmsOrderServiceImpl implements OmsOrderService {
     public OmsOrderDetail detail(Long id) {
         OmsOrderDetail detail = orderDao.getDetail(id);
 
+        // 获取订单详情
+        OmsOrderItemExample example = new OmsOrderItemExample();
+        example.createCriteria().andOrderIdEqualTo(id);
+        List<OmsOrderItem> omsOrderItems = omsOrderItemMapper.selectByExample(example);
+        detail.setOrderItemList(omsOrderItems);
+
         // 学校订单查询学校信息
         try {
             if (detail.getSourceType() == 2) {
-                HttpResponseResult<List<SchoolDto>> schoolDtoHttpResponseResult = webFeignService.schoolListByIds(Lists.newArrayList(detail.getMemberId()));
+                HttpResponseResult<List<SchoolDto>> schoolDtoHttpResponseResult = webFeignService.schoolListByIds(Lists.newArrayList(detail.getMemberId().intValue()));
                 if (schoolDtoHttpResponseResult.getCode() == 200 && schoolDtoHttpResponseResult.getStatus()) {
                     List<SchoolDto> data = schoolDtoHttpResponseResult.getData();
                     if (!CollectionUtils.isEmpty(data)) {
@@ -733,10 +765,7 @@ public class OmsOrderServiceImpl implements OmsOrderService {
         // 如果订单状态是已发货,扣减库存
         if (order.getStatus() ==2 || order.getStatus() == 3) {
 
-            // skuId 数量 map
-            Map<Long, Integer> skuIdMap = orderItemList.stream().collect(Collectors.groupingBy(OmsOrderItem::getProductSkuId,Collectors.summingInt(OmsOrderItem::getProductQuantity)));
-
-            updateSkuStock(skuIdMap, Lists.newArrayList(detail.getId()));
+            updateSkuStock(Lists.newArrayList(detail.getId()));
         }
     }
 

+ 4 - 4
mec-mall/mall-portal/src/main/java/com/yonge/cooleshow/portal/service/impl/OmsPortalOrderServiceImpl.java

@@ -897,7 +897,7 @@ public class OmsPortalOrderServiceImpl implements OmsPortalOrderService {
             throw new BizException("订单支付信息未找到");
         }
         OmsOrderDetail detail = detail(orderPayment.getOrderNo());
-        if (detail.getStatus() == 0) {
+//        if (detail.getStatus() == 0) {
             orderSuccess(detail, payAmount, payChannel);
 
             orderPayment.setStatus(TradeStatusEnum.succeeded.getCode());
@@ -911,12 +911,12 @@ public class OmsPortalOrderServiceImpl implements OmsPortalOrderService {
             if (!httpResponseResult.getStatus()) {
                 throw new BizException(httpResponseResult.getMsg());
             }
-        } else {
-            LOG.error("汇付支付回调,订单状态异常。 req is {}", detail.getOrderSn());
+//        } else {
+//            LOG.error("汇付支付回调,订单状态异常。 req is {}", detail.getOrderSn());
 
 
 //            orderRefund(orderPayment,detail.getPayAmount().toString());
-        }
+//        }
 
     }