Browse Source

Merge branch 'zx_saas_goods' into test

刘俊驰 1 year ago
parent
commit
901b4ced7d
31 changed files with 449 additions and 117 deletions
  1. 1 14
      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. 1 17
      mec-application/src/main/java/com/ym/mec/web/controller/GoodsController.java
  4. 1 1
      mec-application/src/main/resources/columnMapper.ini
  5. 1 1
      mec-biz/src/main/java/com/ym/mec/biz/dal/dao/MusicGroupCalenderRefundPeriodDao.java
  6. 2 0
      mec-biz/src/main/java/com/ym/mec/biz/dal/dao/SubjectGoodsMapperDao.java
  7. 7 1
      mec-biz/src/main/java/com/ym/mec/biz/dal/dto/CooperationCalenderRefundUpdateDto.java
  8. 1 0
      mec-biz/src/main/java/com/ym/mec/biz/dal/dto/GoodsOrderItemVO.java
  9. 10 0
      mec-biz/src/main/java/com/ym/mec/biz/dal/page/GoodsQueryInfo.java
  10. 9 1
      mec-biz/src/main/java/com/ym/mec/biz/service/GoodsCategoryService.java
  11. 2 0
      mec-biz/src/main/java/com/ym/mec/biz/service/GoodsService.java
  12. 100 21
      mec-biz/src/main/java/com/ym/mec/biz/service/impl/GoodsCategoryServiceImpl.java
  13. 75 26
      mec-biz/src/main/java/com/ym/mec/biz/service/impl/GoodsServiceImpl.java
  14. 4 2
      mec-biz/src/main/java/com/ym/mec/biz/service/impl/MusicGroupCalenderRefundPeriodServiceImpl.java
  15. 1 1
      mec-biz/src/main/java/com/ym/mec/biz/service/impl/MusicGroupPaymentCalenderServiceImpl.java
  16. 24 1
      mec-biz/src/main/java/com/ym/mec/biz/service/impl/StudentGoodsSellServiceImpl.java
  17. 4 0
      mec-biz/src/main/java/com/ym/mec/biz/service/impl/StudentInstrumentServiceImpl.java
  18. 1 1
      mec-biz/src/main/resources/config/mybatis/GoodsCategoryMapper.xml
  19. 12 9
      mec-biz/src/main/resources/config/mybatis/GoodsMapper.xml
  20. 4 1
      mec-biz/src/main/resources/config/mybatis/MusicGroupCalenderRefundPeriodMapper.xml
  21. 2 2
      mec-biz/src/main/resources/config/mybatis/StudentInstrumentMapper.xml
  22. 11 2
      mec-biz/src/main/resources/config/mybatis/SubjectGoodsMapperMapper.xml
  23. 7 0
      mec-client-api/src/main/java/com/ym/mec/mall/MallFeignService.java
  24. 5 0
      mec-client-api/src/main/java/com/ym/mec/mall/fallback/MallFeignServiceFallback.java
  25. 20 0
      mec-common/common-core/src/main/java/com/ym/mec/common/dto/ReturnApplyDto.java
  26. 17 0
      mec-mall/mall-admin/src/main/java/com/yonge/cooleshow/admin/controller/open/OpenController.java
  27. 6 0
      mec-mall/mall-admin/src/main/java/com/yonge/cooleshow/admin/service/OmsOrderReturnApplyService.java
  28. 67 4
      mec-mall/mall-admin/src/main/java/com/yonge/cooleshow/admin/service/impl/OmsOrderReturnApplyServiceImpl.java
  29. 21 8
      mec-mall/mall-admin/src/main/java/com/yonge/cooleshow/admin/service/impl/OmsOrderServiceImpl.java
  30. 12 0
      mec-mall/mall-mbg/src/main/java/com/yonge/cooleshow/mbg/model/PmsProduct.java
  31. 20 3
      mec-mall/mall-mbg/src/main/resources/config/mybatis/PmsProductMapper.xml

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

@@ -1,9 +1,5 @@
 package com.ym.mec.teacher.controller;
 
-import com.ym.mec.biz.dal.entity.Goods;
-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;
@@ -15,8 +11,6 @@ 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
@@ -24,18 +18,11 @@ 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) {
-        GoodsWrapper.Goods goods = goodsService.getDetail(id);
-        GoodsCategory goodsCategory = goodsCategoryService.get(goods.getGoodsCategoryId());
-        if (Objects.nonNull(goodsCategory)) {
-            goods.setGoodsCategoryName(goodsCategory.getName());
-        }
-        return succeed(goods);
+        return succeed(goodsService.getDetail(id));
     }
 
 }

+ 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.delete(id));
+        return succeed(goodsCategoryService.get(id));
     }
 
     @ApiOperation(value = "新增、修改商品类型")

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

@@ -3,19 +3,14 @@ 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;
-import com.ym.mec.common.dto.BrandDto;
-import com.ym.mec.common.dto.ProductCategoryDto;
-import com.ym.mec.common.page.PageInfo;
 import io.swagger.annotations.Api;
 import io.swagger.annotations.ApiOperation;
 import io.swagger.annotations.ApiParam;
@@ -30,10 +25,6 @@ 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 = "商品(教材、辅件)服务")
@@ -43,8 +34,6 @@ public class GoodsController extends BaseController {
     @Autowired
     private GoodsService goodsService;
     @Autowired
-    private GoodsCategoryService goodsCategoryService;
-    @Autowired
     private SysUserService sysUserService;
     @Autowired
     private EmployeeDao employeeDao;
@@ -100,12 +89,7 @@ public class GoodsController extends BaseController {
     @ApiOperation(value = "根据商品(教材、辅件)编号查询商品(教材、辅件)")
     @GetMapping("/get/{id}")
     public Object get(@ApiParam(value = "商品(教材、辅件)编号", required = true) @PathVariable("id") Integer id){
-        GoodsWrapper.Goods goods = goodsService.getDetail(id);
-        GoodsCategory goodsCategory = goodsCategoryService.get(goods.getGoodsCategoryId());
-        if(Objects.nonNull(goodsCategory)){
-            goods.setGoodsCategoryName(goodsCategory.getName());
-        }
-        return succeed(goods);
+        return succeed(goodsService.getDetail(id));
     }
 
     @ApiOperation(value = "分页查询商品(教材、辅件)列表")

+ 1 - 1
mec-application/src/main/resources/columnMapper.ini

@@ -34,7 +34,7 @@
 组合商品图片 = image
 子商品名称 = subGoodsName
 SKU = sku
-子商品成本 = subGoodsPrice
+子商品成本 = goodsPrice
 
 [财务支出导入模板]
 财务流程编号 = financialProcessNo

+ 1 - 1
mec-biz/src/main/java/com/ym/mec/biz/dal/dao/MusicGroupCalenderRefundPeriodDao.java

@@ -30,5 +30,5 @@ public interface MusicGroupCalenderRefundPeriodDao extends BaseDAO<Integer, Musi
 
     void batchUpdate(@Param("refundPeriods") List<MusicGroupCalenderRefundPeriod> refundPeriods);
 
-    List<MusicGroupCalenderRefundPeriod> queryByIds(@Param("periodsIds") List<Long> periodsIds);
+    List<MusicGroupCalenderRefundPeriod> queryByIds(@Param("periodsIds") List<Integer> periodsIds);
 }

+ 2 - 0
mec-biz/src/main/java/com/ym/mec/biz/dal/dao/SubjectGoodsMapperDao.java

@@ -36,4 +36,6 @@ public interface SubjectGoodsMapperDao extends BaseDAO<Long, SubjectGoodsMapper>
      * @return
      */
     List<SubjectGoodsDto> querySubjectGoods(Map<String, Object> params);
+
+    List<SubjectGoodsMapper> queryByCategoryIds(@Param("categoryIdList") List<Integer> categoryIdList);
 }

+ 7 - 1
mec-biz/src/main/java/com/ym/mec/biz/dal/dto/CooperationCalenderRefundUpdateDto.java

@@ -10,11 +10,17 @@ import java.math.BigDecimal;
 public class CooperationCalenderRefundUpdateDto {
 
     @ApiModelProperty(value = "回款周期编号",required = false)
-    private Long id;
+    private Integer id;
 
     @ApiModelProperty(value = "回款金额",required = false)
     private BigDecimal refundAmount;
 
+    @ApiModelProperty(value = "回款时间",required = false)
+    private String refundDate;
+
+    @ApiModelProperty(value = "责任人",required = false)
+    private Integer responsiblePerson;
+
     @ApiModelProperty(value = "修改原因",required = false)
     private String memo;
 }

+ 1 - 0
mec-biz/src/main/java/com/ym/mec/biz/dal/dto/GoodsOrderItemVO.java

@@ -29,4 +29,5 @@ public class GoodsOrderItemVO {
     private String promotionName; // 促销名称
     private BigDecimal realAmount; // 实际支付金额
     private int returnStatus; // 退货状态
+    private String productType; // 商品类型
 }

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

@@ -57,6 +57,8 @@ public class GoodsQueryInfo extends QueryInfo {
 
     private Integer subjectId;
 
+    private String goodsCategoryIds;
+
     public Integer getNoOrganSearch() {
         return noOrganSearch;
     }
@@ -184,4 +186,12 @@ 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;
+    }
 }

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

@@ -8,8 +8,10 @@ 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 extends BaseService<Integer, GoodsCategory> {
+public interface GoodsCategoryService{
     /**
      * 新增、修改商品类型
      * @param goodsCategory
@@ -29,4 +31,10 @@ public interface GoodsCategoryService extends BaseService<Integer, GoodsCategory
      * @param goodsIds
      */
     void updateSubjectGoods(Long subjectGoodsMapperId, String goodsIds);
+
+    GoodsCategory get(Integer goodsCategoryId);
+
+    List<GoodsCategory> queryPage(GoodsCategoryQueryInfo queryInfo);
+
+    Map<Integer,String> getNameMap();
 }

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

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

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

@@ -1,53 +1,64 @@
 package com.ym.mec.biz.service.impl;
 
-import com.ym.mec.biz.dal.dao.GoodsCategoryDao;
+import com.alibaba.fastjson.JSON;
+import com.ym.mec.biz.dal.dao.SubjectDao;
 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.biz.service.GoodsService;
-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.mall.MallFeignService;
 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.*;
+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.stream.Collectors;
 
 @Service
-public class GoodsCategoryServiceImpl extends BaseServiceImpl<Integer, GoodsCategory>  implements GoodsCategoryService {
-	
-	@Autowired
-	private GoodsCategoryDao goodsCategoryDao;
+//public class GoodsCategoryServiceImpl extends BaseServiceImpl<Integer, GoodsCategory>  implements GoodsCategoryService {
+public class GoodsCategoryServiceImpl implements GoodsCategoryService {
+
+//	@Autowired
+//	private GoodsCategoryDao goodsCategoryDao;
 	@Autowired
 	private SubjectGoodsMapperDao subjectGoodsMapperDao;
 
-	@Override
-	public BaseDAO<Integer, GoodsCategory> getDAO() {
-		return goodsCategoryDao;
-	}
+	@Autowired
+	private MallFeignService mallFeignService;
+
+	@Autowired
+	private SubjectDao subjectDao;
+
 
 	@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());
 	}
@@ -64,7 +75,9 @@ public class GoodsCategoryServiceImpl extends BaseServiceImpl<Integer, GoodsCate
 			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);
@@ -85,4 +98,70 @@ public class GoodsCategoryServiceImpl extends BaseServiceImpl<Integer, GoodsCate
 		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;
+	}
 }

+ 75 - 26
mec-biz/src/main/java/com/ym/mec/biz/service/impl/GoodsServiceImpl.java

@@ -47,7 +47,6 @@ 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;
@@ -129,9 +128,13 @@ 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();
@@ -381,7 +384,18 @@ public class GoodsServiceImpl extends BaseServiceImpl<Integer, Goods>  implement
 	}
 
 	@Override
-	public PageInfo<Goods> queryPage(QueryInfo queryInfo) {
+	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);
+			}
+		}
 		PageInfo<Goods> page = super.queryPage(queryInfo);
 
 		List<Goods> rows = page.getRows();
@@ -616,7 +630,7 @@ public class GoodsServiceImpl extends BaseServiceImpl<Integer, Goods>  implement
 		goodsCategoryQueryInfo.setRows(9999);
 
 		List<ProductCategoryDto> categoryList = mallFeignService.listWithChildren();
-		List<ProductCategoryDto> allCategoryList = treeToList(categoryList);
+		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));
 		Set<String> categoryNames = categoryIdNameMap.keySet();
@@ -654,6 +668,11 @@ 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());
+
+		Map<String, Long> brandNameIdMap = mallFeignService.getList().stream().collect(Collectors.toMap(BrandDto::getName, BrandDto::getId));
+
 		List<JSONObject> jsonObjectList = new ArrayList<>();
 		for (Map.Entry<String, List<Map<String, Object>>> sheetData : sheetsListMap.entrySet()) {
 			List<Map<String, Object>> rows = sheetData.getValue();
@@ -672,6 +691,7 @@ public class GoodsServiceImpl extends BaseServiceImpl<Integer, Goods>  implement
 			String lineErrMsg = "错误行号:第%s行,%s";
 			Map<String, String> beforeGoods = new HashMap<>();
 
+			Map<String, String> snNameMap = new HashMap<>();
 			for (int i = 0; i < rows.size(); i++) {
 				JSONObject objectMap = new JSONObject();
 				int rowNum = i + 2;
@@ -695,24 +715,36 @@ public class GoodsServiceImpl extends BaseServiceImpl<Integer, Goods>  implement
 						if ("subGoodsName".equals(fieldCode) || "sku".equals(fieldCode) || "subGoodsPrice".equals(fieldCode)) {
 							lineErrList.add("字段‘" + fieldName + "’为空");
 						} else {
-							if (!beforeGoods.containsKey(fieldCode)) {
-								lineErrList.add("字段‘" + fieldName + "’为空");
-								continue;
-							} else {
+							if (beforeGoods.containsKey(fieldCode)) {
 								value = beforeGoods.get(fieldCode);
+							} else {
+								if (!("educationShowOrganName".equals(fieldCode)
+										|| "courseFeeShowOrganName".equals(fieldCode)
+										|| "memberFeeShowOrganName".equals(fieldCode)
+										|| "freeFeeShowOrganName".equals(fieldCode)
+										|| "replacementShowOrganName".equals(fieldCode))) {
+									lineErrList.add("字段‘" + fieldName + "’为空");
+									continue;
+								}
 							}
 						}
 					} else {
 						beforeGoods.put(fieldCode, value);
 					}
-//					if("sn".equals(fieldCode)){
-//						if (snSet.contains(value)) {
-//							lineErrList.add("货号[" + value + "]重复");
-//						} else {
-//							snSet.add(value);
-//						}
-//					}
-//					else
+					if("sn".equals(fieldCode)){
+						if (existSnList.contains(value)) {
+							lineErrList.add("货号[" + value + "]已存在");
+						} else {
+							String goodsName = row.get("组合商品名称").toString();
+							if (snNameMap.containsKey(value) && !snNameMap.get(value).equals(goodsName)) {
+								lineErrList.add("货号[" + value + "]重复");
+							} else {
+								snNameMap.put(value, goodsName);
+							}
+							objectMap.put(fieldCode, value);
+						}
+					}
+					else
 					if ("marketPrice".equals(fieldCode)
 							|| "discountPrice".equals(fieldCode)
 							|| "groupPurchasePrice".equals(fieldCode)) {
@@ -747,17 +779,19 @@ public class GoodsServiceImpl extends BaseServiceImpl<Integer, Goods>  implement
 							|| "freeFeeShowOrganName".equals(fieldCode)
 							|| "replacementShowOrganName".equals(fieldCode)
 					) {
-						List<String> orgIds = new ArrayList<>();
-						for (String orgName : value.split(",")) {
-							if (!orgNameIdMap.containsKey(orgName)) {
-								lineErrList.add("字段‘" + fieldName + "’:‘" + value + "’分部不支持");
-							} else {
-								orgIds.add(orgNameIdMap.get(orgName).toString());
+						if (StringUtils.isNotEmpty(value)) {
+							List<String> orgIds = new ArrayList<>();
+							for (String orgName : value.split("[,,]")) {
+								if (!orgNameIdMap.containsKey(orgName)) {
+									lineErrList.add("字段‘" + fieldName + "’:‘" + value + "’分部不支持");
+								} else {
+									orgIds.add(orgNameIdMap.get(orgName).toString());
+								}
 							}
+							String join = String.join(",", orgIds);
+							String fieldKey = fieldCode.replaceAll("Name", "Id");
+							objectMap.put(fieldKey, join);
 						}
-						String join = String.join(",", orgIds);
-						String fieldKey = fieldCode.replaceAll("Name", "Id");
-						objectMap.put(fieldKey, join);
 					} else if ("subGoodsName".equals(fieldCode)) {
 						subGoodsName = value;
 						if (StringUtils.isNotEmpty(subGoodsSku)) {
@@ -791,10 +825,25 @@ public class GoodsServiceImpl extends BaseServiceImpl<Integer, Goods>  implement
 						if (BigDecimal.ZERO.compareTo(subGoodsPrice) > 0) {
 							lineErrList.add("字段‘" + fieldName + "’不能为负数");
 						}
-					} else {
+					} else if ("brand".equals(fieldCode)) {
+						if (brandNameIdMap.containsKey(value)) {
+							objectMap.put("brand", brandNameIdMap.get(value));
+						} else {
+							lineErrList.add("组合商品品牌‘" + value + "’不支持");
+						}
+					}
+					else {
 						objectMap.put(fieldCode, value);
 					}
 				}
+				// 校验分部可售是否都为空
+				if (!objectMap.containsKey("educationShowOrganId") &&
+						!objectMap.containsKey("courseFeeShowOrganId") &&
+						!objectMap.containsKey("memberFeeShowOrganId") &&
+						!objectMap.containsKey("freeFeeShowOrganId") &&
+						!objectMap.containsKey("replacementShowOrganId")) {
+					lineErrList.add("可售分部至少需要选择一个");
+				}
 				if (!lineErrList.isEmpty()) {
 					errList.add(String.format(lineErrMsg, rowNum, String.join(",", lineErrList)));
 				}
@@ -1327,7 +1376,7 @@ public class GoodsServiceImpl extends BaseServiceImpl<Integer, Goods>  implement
 
 		String basePath = new ApplicationHome(this.getClass()).getSource().getParentFile().getPath();
 		String format = new SimpleDateFormat("yyyyMMddHHmmss").format(new Date());
-		File file = new File(basePath + File.separator + "goods_group_import_err" + format + ".csv");
+		File file = new File(basePath + File.separator + format + ".csv");
 		try {
 			if (!file.getParentFile().exists()) {
 				file.getParentFile().mkdirs();

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

@@ -192,13 +192,15 @@ public class MusicGroupCalenderRefundPeriodServiceImpl extends BaseServiceImpl<I
 
     @Override
     public void batchUpdate(List<CooperationCalenderRefundUpdateDto> refundPeriods) {
-        List<Long> periodsIds = refundPeriods.stream().map(e -> e.getId()).collect(Collectors.toList());
+        List<Integer> periodsIds = refundPeriods.stream().map(e -> e.getId()).collect(Collectors.toList());
         List<MusicGroupCalenderRefundPeriod> periods = musicGroupCalenderRefundPeriodDao.queryByIds(periodsIds);
-        Map<Long, CooperationCalenderRefundUpdateDto> periodMap = refundPeriods.stream().collect(Collectors.toMap(e -> e.getId(), e -> e));
+        Map<Integer, CooperationCalenderRefundUpdateDto> periodMap = refundPeriods.stream().collect(Collectors.toMap(e -> e.getId(), e -> e));
         periods.forEach(e->{
             CooperationCalenderRefundUpdateDto dto = periodMap.get(e.getId());
             e.setRefundAmount(dto.getRefundAmount());
             e.setMemo(dto.getMemo());
+            e.setRefundDate(dto.getRefundDate());
+            e.setResponsiblePerson(dto.getResponsiblePerson());
             if (e.getRefundAmount().compareTo(e.getIncome()) <= 0) {
                 e.setSubRefundAmount(BigDecimal.ZERO);
                 e.setRefundFlag(true);

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

@@ -1467,7 +1467,7 @@ public class MusicGroupPaymentCalenderServiceImpl extends BaseServiceImpl<Long,
         }
         //商品采购订单
         MusicGroupPaymentCalenderAddress address = null;
-        if(calender.getPaymentType() == GOODS_PURCHASE){
+        if(calender.getStatus() == OPEN && calender.getPaymentType() == GOODS_PURCHASE){
             //TODO 商品采购订单是否已经发货
             address = musicGroupPaymentCalenderAddressService.lambdaQuery().eq(MusicGroupPaymentCalenderAddress::getCalenderId, id).one();
             if(address != null){

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

@@ -14,9 +14,11 @@ 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;
@@ -44,6 +46,8 @@ public class StudentGoodsSellServiceImpl extends BaseServiceImpl<Integer, Studen
     private StudentInstrumentDao studentInstrumentDao;
     @Autowired
     private SysCouponCodeDao sysCouponCodeDao;
+    @Autowired
+    private MallFeignService mallFeignService;
 
     @Override
     public BaseDAO<Integer, StudentGoodsSell> getDAO() {
@@ -146,6 +150,8 @@ 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();
@@ -153,7 +159,7 @@ public class StudentGoodsSellServiceImpl extends BaseServiceImpl<Integer, Studen
             studentInstrument.setOrganId(studentGoodsSell.getOrganId());
             studentInstrument.setGoodsId(goods.getId());
             studentInstrument.setGoodsCategoryId(goods.getGoodsCategoryId());
-            studentInstrument.setGoodsCategoryName(goods.getGoodsCategoryName());
+            studentInstrument.setGoodsCategoryName(categoryIdNameMap.getOrDefault(Long.valueOf(goods.getGoodsCategoryId()),""));
             studentInstrument.setGoodsName(goods.getName());
             studentInstrument.setGoodsBrand(goods.getBrand());
             studentInstrument.setSpecification(goods.getSpecification());
@@ -178,4 +184,21 @@ 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;
+    }
 }

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

@@ -5,9 +5,11 @@ 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;
@@ -447,7 +449,9 @@ 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>
 
     <!-- 全查询 -->

+ 12 - 9
mec-biz/src/main/resources/config/mybatis/GoodsMapper.xml

@@ -328,6 +328,9 @@
             <if test="goodsCategoryId != null">
                 AND g.goods_category_id_ = #{goodsCategoryId}
             </if>
+            <if test="goodsCategoryIds != null">
+                AND find_in_set(g.goods_category_id_,#{goodsCategoryIds})
+            </if>
             <if test="type != null">
                 AND g.type_ = #{type,typeHandler=com.ym.mec.common.dal.CustomEnumTypeHandler}
             </if>
@@ -518,14 +521,14 @@
     </select>
 
     <select id="getGoodsInfo" resultMap="Goods">
-        SELECT g.*,gc.name_ goods_category_name_ FROM goods g
-                                                          LEFT JOIN goods_category gc on g.goods_category_id_ = gc.id_
+        SELECT g.* 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.*,gc.name_ goods_category_name_ FROM goods g
-        LEFT JOIN goods_category gc on g.goods_category_id_ = gc.id_
+        SELECT g.* 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}
@@ -542,7 +545,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"/>
@@ -551,7 +554,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"/>
@@ -560,10 +563,10 @@
         select SUM(organ_cost_price_) from goods where FIND_IN_SET(id_,#{complementGoodsIdList});
     </select>
     <select id="exportGoods" resultMap="Goods">
-        SELECT g.*,gc.name_ goods_category_name_,
+        SELECT g.*,
         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_
@@ -574,7 +577,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>

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

@@ -17,6 +17,7 @@
 		<result column="income_" property="income" />
 		<result column="sub_refund_amount_" property="subRefundAmount" />
 		<result column="refund_flag_" property="refundFlag" />
+		<result column="memo_" property="memo" />
 		<result column="create_time_" property="createTime" />
 		<result column="update_time_" property="updateTime" />
 	</resultMap>
@@ -27,6 +28,9 @@
 			<if test="bean.orderNos != null and bean.orderNos != ''">
 				order_nos_ = #{bean.orderNos},
 			</if>
+			<if test="bean.memo != null and bean.memo != ''">
+				memo_ = #{bean.memo},
+			</if>
 			<if test="bean.subRefundAmount != null">
 				sub_refund_amount_ = #{bean.subRefundAmount},
 			</if>
@@ -39,7 +43,6 @@
 			<if test="bean.refundFlag != null">
 				refund_flag_ = #{bean.refundFlag},
 			</if>
-			update_time_ = #{bean.updateTime}
 		</set> WHERE id_ = #{bean.id}
 		</foreach>
 	</update>

+ 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 (

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

@@ -89,11 +89,12 @@
     </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_,gc.id_ goods_category_id_,gc.name_ goods_category_name_,
+        (SELECT s.name_ subject_name_,s.id_ subject_id_,sgm.goods_category_id_ goods_category_id_,
         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>
@@ -109,4 +110,12 @@
             <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>

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

@@ -50,4 +50,11 @@ public interface MallFeignService {
 //    @ApiOperation("分页获取所有商品属性分类")
     @RequestMapping(value = "/open/productAttribute/category/list", method = RequestMethod.GET)
     List<ProductAttributeCategoryDto> getProductAttributeCategoryList();
+
+
+
+
+    //    @ApiOperation("分页获取所有商品属性分类")
+    @RequestMapping(value = "/open/product/returnApply", method = RequestMethod.POST)
+    CommonResult<Boolean> returnApply(ReturnApplyDto returnApplyDto);
 }

+ 5 - 0
mec-client-api/src/main/java/com/ym/mec/mall/fallback/MallFeignServiceFallback.java

@@ -48,5 +48,10 @@ public class MallFeignServiceFallback implements MallFeignService {
         return null;
     }
 
+    @Override
+    public CommonResult<Boolean> returnApply(ReturnApplyDto returnApplyDto) {
+        return null;
+    }
+
 
 }

+ 20 - 0
mec-common/common-core/src/main/java/com/ym/mec/common/dto/ReturnApplyDto.java

@@ -0,0 +1,20 @@
+package com.ym.mec.common.dto;
+
+import lombok.Data;
+
+@Data
+public class ReturnApplyDto {
+
+    // 订单号
+    private String orderSn;
+
+    // 退货商品sku id
+    private Long skuId;
+
+    // 退货单号
+    private String returnApplySn;
+
+
+//    "原因")
+    private String reason;
+}

+ 17 - 0
mec-mall/mall-admin/src/main/java/com/yonge/cooleshow/admin/controller/open/OpenController.java

@@ -4,6 +4,7 @@ import com.alibaba.fastjson.JSON;
 import com.baomidou.mybatisplus.extension.api.R;
 import com.ym.mec.common.dto.PmsProductDto;
 import com.ym.mec.common.dto.PmsProductQueryParamDto;
+import com.ym.mec.common.dto.ReturnApplyDto;
 import com.ym.mec.common.page.PageInfo;
 import com.yonge.cooleshow.admin.controller.OmsOrderReturnApplyController;
 import com.yonge.cooleshow.admin.dto.OrderCreate;
@@ -64,6 +65,7 @@ public class OpenController {
     @Autowired
     private OmsOrderService orderService;
 
+
     private static final Logger log = LoggerFactory.getLogger(OmsOrderReturnApplyController.class);
 
     @ApiOperation("完成退货测试接口")
@@ -110,6 +112,21 @@ public class OpenController {
     }
 
 
+    /**
+     * 退货
+     */
+    @PostMapping(value = "/product/returnApply", consumes = MediaType.APPLICATION_JSON_VALUE, produces = MediaType.APPLICATION_JSON_VALUE)
+    public CommonResult<Boolean> returnApply(@RequestBody ReturnApplyDto returnApplyDto) {
+
+        log.info("创建管乐迷退款:{}", JSON.toJSONString(returnApplyDto));
+
+        returnApplyService.returnApply(returnApplyDto);
+
+
+        return CommonResult.success(true);
+    }
+
+
     // 同步订单状态,
     /**
      * 查询商品订单状态

+ 6 - 0
mec-mall/mall-admin/src/main/java/com/yonge/cooleshow/admin/service/OmsOrderReturnApplyService.java

@@ -1,5 +1,6 @@
 package com.yonge.cooleshow.admin.service;
 
+import com.ym.mec.common.dto.ReturnApplyDto;
 import com.yonge.cooleshow.admin.dto.HomeStatistical;
 import com.yonge.cooleshow.admin.dto.OmsOrderReturnApplyResult;
 import com.yonge.cooleshow.admin.dto.OmsReturnApplyQueryParam;
@@ -46,4 +47,9 @@ public interface OmsOrderReturnApplyService {
      * @return
      */
     HomeStatistical countReturnStatus();
+
+    /**
+     * 管乐迷同步退款申请
+     */
+    void returnApply(ReturnApplyDto returnApplyDto);
 }

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

@@ -2,24 +2,26 @@ package com.yonge.cooleshow.admin.service.impl;
 
 import com.alibaba.fastjson.JSON;
 import com.github.pagehelper.PageHelper;
+import com.ym.mec.common.dto.ReturnApplyDto;
 import com.ym.mec.common.entity.HttpResponseResult;
 import com.ym.mec.common.exception.BizException;
 import com.ym.mec.common.service.IdGeneratorService;
 import com.yonge.cooleshow.admin.dao.OmsOrderReturnApplyDao;
 import com.yonge.cooleshow.admin.dto.*;
+import com.yonge.cooleshow.admin.service.OmsOrderService;
+import com.yonge.cooleshow.admin.service.PmsProductService;
 import com.yonge.cooleshow.mall.common.exception.ApiException;
 import com.yonge.cooleshow.mall.common.service.RedisService;
-import com.yonge.cooleshow.mbg.mapper.OmsOrderItemMapper;
+import com.yonge.cooleshow.mbg.mapper.*;
 import com.yonge.cooleshow.mbg.model.*;
-import com.yonge.cooleshow.mbg.mapper.OmsOrderReturnApplyMapper;
-import com.yonge.cooleshow.mbg.mapper.UserOrderPaymentMapper;
-import com.yonge.cooleshow.mbg.mapper.UserOrderRefundMapper;
 import com.yonge.cooleshow.admin.service.OmsOrderReturnApplyService;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
 import org.springframework.beans.BeanUtils;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.stereotype.Service;
+import org.springframework.transaction.annotation.Transactional;
+import org.springframework.util.CollectionUtils;
 
 import java.math.BigDecimal;
 import java.math.RoundingMode;
@@ -42,9 +44,19 @@ public class OmsOrderReturnApplyServiceImpl implements OmsOrderReturnApplyServic
     private OmsOrderReturnApplyMapper returnApplyMapper;
 
     @Autowired
+    private OmsOrderService omsOrderService;
+    @Autowired
+    private OmsOrderMapper omsOrderMapper;
+
+    @Autowired
     private OmsOrderItemMapper orderItemMapper;
 
     @Autowired
+    private PmsProductMapper productMapper;
+    @Autowired
+    private PmsBrandMapper brandMapper;
+
+    @Autowired
     private RedisService redisService;
     private String REDIS_KEY_ORDER_ID= "redis.key.orderId";
     private String REDIS_DATABASE = "redis.database";
@@ -211,6 +223,57 @@ public class OmsOrderReturnApplyServiceImpl implements OmsOrderReturnApplyServic
         return returnApplyDao.selectReturnStatusCount();
     }
 
+    @Override
+    @Transactional
+    public void returnApply(ReturnApplyDto returnApplyDto) {
+
+        // 查询订单
+        OmsOrder byOrderSn = omsOrderMapper.getByOrderSn(returnApplyDto.getOrderSn());
+        if (byOrderSn == null) {
+            throw new ApiException("未找到订单信息");
+        }
+        OmsOrderItemExample example = new OmsOrderItemExample();
+        example.createCriteria().andOrderIdEqualTo(byOrderSn.getId());
+        List<OmsOrderItem> omsOrderItems = orderItemMapper.selectByExample(example);
+        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("未找到商品信息");
+        }
+
+
+
+        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);
+
+
+    }
+
 
     /**
      * 生成18位退款订单编号:8位日期+2位平台号码+2位支付方式+6位以上自增id

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

@@ -92,7 +92,12 @@ public class OmsOrderServiceImpl implements OmsOrderService {
 
         // 过滤出学校订单,查询学校信息
         List<Long> schoolIds = list.stream().filter(o->o.getSourceType() ==2).map(OmsOrder::getMemberId).collect(Collectors.toList());
-
+        for (OrderVo orderVo : list) {
+            if (orderVo.getSourceType() == 2 ||orderVo.getSourceType() == 4) {
+                orderVo.setPhone("");
+                orderVo.setUsername("");
+            }
+        }
         if (!CollectionUtils.isEmpty(schoolIds)) {
             try {
                 HttpResponseResult<List<SchoolDto>> schoolDtoHttpResponseResult = webFeignService.schoolListByIds(schoolIds);
@@ -102,7 +107,9 @@ public class OmsOrderServiceImpl implements OmsOrderService {
                         if (o.getSourceType() == 2) {
                             SchoolDto schoolDto = schoolDtoMap.get(o.getMemberId());
                             if (schoolDto != null) {
-                                o.setMemberUsername(schoolDto.getName());
+                                o.setUsername(schoolDto.getName());
+                            } else {
+                                o.setUsername("");
                             }
                         }
                     });
@@ -113,6 +120,7 @@ public class OmsOrderServiceImpl implements OmsOrderService {
 
         }
 
+
         return list;
     }
 
@@ -325,15 +333,20 @@ public class OmsOrderServiceImpl implements OmsOrderService {
         OmsOrderDetail detail = orderDao.getDetail(id);
 
         // 学校订单查询学校信息
-        if (detail.getSourceType() == 2) {
-            HttpResponseResult<List<SchoolDto>> schoolDtoHttpResponseResult = webFeignService.schoolListByIds(Lists.newArrayList(detail.getMemberId()));
-            if (schoolDtoHttpResponseResult.getCode() == 200 && schoolDtoHttpResponseResult.getStatus()) {
-                List<SchoolDto> data = schoolDtoHttpResponseResult.getData();
-                if (!CollectionUtils.isEmpty(data)) {
-                    detail.setMemberUsername(data.get(0).getName());
+        try {
+            if (detail.getSourceType() == 2) {
+                HttpResponseResult<List<SchoolDto>> schoolDtoHttpResponseResult = webFeignService.schoolListByIds(Lists.newArrayList(detail.getMemberId()));
+                if (schoolDtoHttpResponseResult.getCode() == 200 && schoolDtoHttpResponseResult.getStatus()) {
+                    List<SchoolDto> data = schoolDtoHttpResponseResult.getData();
+                    if (!CollectionUtils.isEmpty(data)) {
+                        detail.setMemberUsername(data.get(0).getName());
+                    }
                 }
             }
+        } catch (Exception e) {
+            log.error("查询学校信息失败", e);
         }
+
         return detail;
     }
 

+ 12 - 0
mec-mall/mall-mbg/src/main/java/com/yonge/cooleshow/mbg/model/PmsProduct.java

@@ -24,6 +24,9 @@ public class PmsProduct implements Serializable {
     @ApiModelProperty(value = "货号")
     private String productSn;
 
+    @ApiModelProperty(value = "产品类型")
+    private String productType;
+
     @ApiModelProperty(value = "删除状态:0->未删除;1->已删除")
     private Integer deleteStatus;
 
@@ -473,6 +476,14 @@ public class PmsProduct implements Serializable {
         this.detailMobileHtml = detailMobileHtml;
     }
 
+    public String getProductType() {
+        return productType;
+    }
+
+    public void setProductType(String productType) {
+        this.productType = productType;
+    }
+
     @Override
     public String toString() {
         StringBuilder sb = new StringBuilder();
@@ -487,6 +498,7 @@ public class PmsProduct implements Serializable {
         sb.append(", name=").append(name);
         sb.append(", pic=").append(pic);
         sb.append(", productSn=").append(productSn);
+        sb.append(", productType=").append(productType);
         sb.append(", deleteStatus=").append(deleteStatus);
         sb.append(", publishStatus=").append(publishStatus);
         sb.append(", newStatus=").append(newStatus);

+ 20 - 3
mec-mall/mall-mbg/src/main/resources/config/mybatis/PmsProductMapper.xml

@@ -10,6 +10,7 @@
     <result column="name" jdbcType="VARCHAR" property="name" />
     <result column="pic" jdbcType="VARCHAR" property="pic" />
     <result column="product_sn" jdbcType="VARCHAR" property="productSn" />
+    <result column="product_type" jdbcType="VARCHAR" property="productType" />
     <result column="delete_status" jdbcType="INTEGER" property="deleteStatus" />
     <result column="publish_status" jdbcType="INTEGER" property="publishStatus" />
     <result column="new_status" jdbcType="INTEGER" property="newStatus" />
@@ -108,7 +109,7 @@
   </sql>
   <sql id="Base_Column_List">
     id, brand_id, product_category_id, feight_template_id, product_attribute_category_id, 
-    name, pic, product_sn, delete_status, publish_status, new_status, recommand_status, 
+    name, pic, product_sn, product_type, delete_status, publish_status, new_status, recommand_status,
     verify_status, sort, sale, price, promotion_price, gift_growth, gift_point, use_point_limit, 
     sub_title, original_price, stock, low_stock, unit, weight, preview_status, service_ids, 
     keywords, note, album_pics, detail_title, promotion_start_time, promotion_end_time, 
@@ -171,7 +172,7 @@
     </selectKey>
     insert into pms_product (brand_id, product_category_id, feight_template_id, 
       product_attribute_category_id, name, pic, 
-      product_sn, delete_status, publish_status, 
+      product_sn, product_type, delete_status, publish_status,
       new_status, recommand_status, verify_status, 
       sort, sale, price, 
       promotion_price, gift_growth, gift_point, 
@@ -185,7 +186,7 @@
       detail_html, detail_mobile_html,lock_stock)
     values (#{brandId,jdbcType=BIGINT}, #{productCategoryId,jdbcType=BIGINT}, #{feightTemplateId,jdbcType=BIGINT}, 
       #{productAttributeCategoryId,jdbcType=BIGINT}, #{name,jdbcType=VARCHAR}, #{pic,jdbcType=VARCHAR}, 
-      #{productSn,jdbcType=VARCHAR}, #{deleteStatus,jdbcType=INTEGER}, #{publishStatus,jdbcType=INTEGER}, 
+      #{productSn,jdbcType=VARCHAR}, #{productType,jdbcType=VARCHAR}, #{deleteStatus,jdbcType=INTEGER}, #{publishStatus,jdbcType=INTEGER},
       #{newStatus,jdbcType=INTEGER}, #{recommandStatus,jdbcType=INTEGER}, #{verifyStatus,jdbcType=INTEGER}, 
       #{sort,jdbcType=INTEGER}, #{sale,jdbcType=INTEGER}, #{price,jdbcType=DECIMAL}, 
       #{promotionPrice,jdbcType=DECIMAL}, #{giftGrowth,jdbcType=INTEGER}, #{giftPoint,jdbcType=INTEGER}, 
@@ -225,6 +226,9 @@
       <if test="productSn != null">
         product_sn,
       </if>
+      <if test="productType != null">
+        product_type,
+      </if>
       <if test="deleteStatus != null">
         delete_status,
       </if>
@@ -354,6 +358,9 @@
       <if test="productSn != null">
         #{productSn,jdbcType=VARCHAR},
       </if>
+      <if test="productType != null">
+        #{productType,jdbcType=VARCHAR},
+      </if>
       <if test="deleteStatus != null">
         #{deleteStatus,jdbcType=INTEGER},
       </if>
@@ -495,6 +502,9 @@
       <if test="record.productSn != null">
         product_sn = #{record.productSn,jdbcType=VARCHAR},
       </if>
+      <if test="record.productType != null">
+        product_sn = #{record.productType,jdbcType=VARCHAR},
+      </if>
       <if test="record.deleteStatus != null">
         delete_status = #{record.deleteStatus,jdbcType=INTEGER},
       </if>
@@ -615,6 +625,7 @@
       name = #{record.name,jdbcType=VARCHAR},
       pic = #{record.pic,jdbcType=VARCHAR},
       product_sn = #{record.productSn,jdbcType=VARCHAR},
+      product_type = #{record.productType,jdbcType=VARCHAR},
       delete_status = #{record.deleteStatus,jdbcType=INTEGER},
       publish_status = #{record.publishStatus,jdbcType=INTEGER},
       new_status = #{record.newStatus,jdbcType=INTEGER},
@@ -664,6 +675,7 @@
       name = #{record.name,jdbcType=VARCHAR},
       pic = #{record.pic,jdbcType=VARCHAR},
       product_sn = #{record.productSn,jdbcType=VARCHAR},
+      product_type = #{record.productType,jdbcType=VARCHAR},
       delete_status = #{record.deleteStatus,jdbcType=INTEGER},
       publish_status = #{record.publishStatus,jdbcType=INTEGER},
       new_status = #{record.newStatus,jdbcType=INTEGER},
@@ -723,6 +735,9 @@
       <if test="productSn != null">
         product_sn = #{productSn,jdbcType=VARCHAR},
       </if>
+      <if test="productType != null">
+        product_type = #{productType,jdbcType=VARCHAR},
+      </if>
       <if test="deleteStatus != null">
         delete_status = #{deleteStatus,jdbcType=INTEGER},
       </if>
@@ -840,6 +855,7 @@
       name = #{name,jdbcType=VARCHAR},
       pic = #{pic,jdbcType=VARCHAR},
       product_sn = #{productSn,jdbcType=VARCHAR},
+      product_type = #{productType,jdbcType=VARCHAR},
       delete_status = #{deleteStatus,jdbcType=INTEGER},
       publish_status = #{publishStatus,jdbcType=INTEGER},
       new_status = #{newStatus,jdbcType=INTEGER},
@@ -886,6 +902,7 @@
       name = #{name,jdbcType=VARCHAR},
       pic = #{pic,jdbcType=VARCHAR},
       product_sn = #{productSn,jdbcType=VARCHAR},
+      product_type = #{productType,jdbcType=VARCHAR},
       delete_status = #{deleteStatus,jdbcType=INTEGER},
       publish_status = #{publishStatus,jdbcType=INTEGER},
       new_status = #{newStatus,jdbcType=INTEGER},