Forráskód Böngészése

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

刘俊驰 1 éve
szülő
commit
01e52675d2

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

@@ -29,10 +29,12 @@
 会员收费乐团可售分部 = memberFeeShowOrganName
 免费乐团可售分部 = freeFeeShowOrganName
 乐器置换可售分部 = replacementShowOrganName
-
 组合商品描述 = brief
 组合商品详情 = desc
 组合商品图片 = image
+子商品名称 = subGoodsName
+SKU = sku
+子商品成本 = subGoodsPrice
 
 [财务支出导入模板]
 财务流程编号 = financialProcessNo

+ 3 - 0
mec-biz/src/main/java/com/ym/mec/biz/dal/entity/MusicGroupCalenderRefundPeriod.java

@@ -45,6 +45,9 @@ public class MusicGroupCalenderRefundPeriod {
 
 	@ApiModelProperty(value = "备注",required = false)
 	private String memo;
+
+	@ApiModelProperty(value = "责任人",required = false)
+	private Integer responsiblePerson;
 	
 	/**  */
 	private java.util.Date createTime;

+ 140 - 34
mec-biz/src/main/java/com/ym/mec/biz/service/impl/GoodsServiceImpl.java

@@ -571,8 +571,10 @@ public class GoodsServiceImpl extends BaseServiceImpl<Integer, Goods>  implement
 	@Transactional(rollbackFor = Exception.class)
 	@Override
 	public String importGoodsV2(MultipartFile file, Integer userId) throws Exception {
+		List<String> errList = new ArrayList<>();
 		Map<String, List<Map<String, Object>>> sheetsListMap = POIUtil.importExcel(new ByteArrayInputStream(file.getBytes()), 2, file.getOriginalFilename());
 		if (sheetsListMap.values().isEmpty()) {
+			errList.add("excel未解析到数据");
 			return "";
 		}
 
@@ -593,10 +595,26 @@ public class GoodsServiceImpl extends BaseServiceImpl<Integer, Goods>  implement
 		InputStream inputStream = new ClassPathResource("columnMapper.ini").getInputStream();
 		Map<String, String> columns = IniFileUtil.readIniFile(inputStream, TemplateTypeEnum.GOODS_GROUP.getMsg());
 
-		List<String> errors = new ArrayList<>();
+		List<Map<String, Object>> firstSheet = sheetsListMap.get(0);
+		List<String> skuList = firstSheet.stream().map(next -> next.get("SKU").toString()).distinct().collect(Collectors.toList());
+
+		List<PmsProductDto> subGoods = new ArrayList<>();
+		try {
+			// 查询SKU对应商品
+			PmsProductQueryParamDto dto = PmsProductQueryParamDto.builder()
+					.skuStockIds(String.join(",", skuList))
+					.pageNum(1)
+					.pageSize(9999)
+					.build();
+			dto.setJson(JSON.toJSONString(dto));
+			subGoods.addAll(mallFeignService.getProductList(dto).getRows());
+		} catch (Exception e) {
+			errList.add("商城服务调用失败");
+		}
+		Map<String, PmsProductDto>skuMap = subGoods.stream().collect(Collectors.toMap(next -> (next.getName() + "_" + next.getSkuCode()), Function.identity()));
+
 		List<GoodsWrapper.Goods> goodsList = new ArrayList<>();
 		for (Map.Entry<String, List<Map<String, Object>>> sheetData : sheetsListMap.entrySet()) {
-			LinkedHashMap<Integer, List<String>> errMap = new LinkedHashMap<>();
 			List<Map<String, Object>> rows = sheetData.getValue();
 			if (rows.isEmpty()) {
 				continue;
@@ -606,16 +624,20 @@ public class GoodsServiceImpl extends BaseServiceImpl<Integer, Goods>  implement
 			Set<String> templateFields = columns.keySet();
 			List<String> defaultField = templateFields.stream().filter(firstRow::containsKey).collect(Collectors.toList());
 			if (!defaultField.isEmpty()) {
-				errors.add("导入字段缺省:" + String.join(",", defaultField));
+				errList.add("导入字段缺省:" + String.join(",", defaultField));
 				break;
 			}
 
-			String lineErrMsg = "第%行存在错误:";
-			List<String> errList = new ArrayList<>();
-			Map<String,String> fieldTypeMap = new HashMap<>();
-			GoodsWrapper.Goods beforeGoods = null;
+			String lineErrMsg = "第%s行存在错误:%s";
+			Map<String, String> beforeGoods = new HashMap<>();
+
+			JSONObject objectMap = new JSONObject();
+			String subGoodsName = null;
+			String subGoodsSku = null;
 			for (int i = 0; i < rows.size(); i++) {
+				int rowNum = i + 2;
 				GoodsWrapper.Goods goods = new GoodsWrapper.Goods();
+				GoodsWrapper.GoodsSub goodsSub = new GoodsWrapper.GoodsSub();
 				Map<String, Object> row = rows.get(i);
 				if (row.size() == 0) {
 					continue;
@@ -627,38 +649,48 @@ public class GoodsServiceImpl extends BaseServiceImpl<Integer, Goods>  implement
 					}
 					String fieldCode = columns.get(fieldName);
 					String value = entry.getValue().toString();
-					if (beforeGoods == null) {
 
-					}
-					if (beforeGoods == null && StringUtils.isEmpty(value)) {
-						errList.add("字段‘" + fieldName + "’为空");
-						continue;
+					// 非子商品字段为空,往上一行获取值
+					if (StringUtils.isEmpty(value)) {
+						if ("subGoodsName".equals(fieldCode) || "sku".equals(fieldCode) || "subGoodsPrice".equals(fieldCode)) {
+							errList.add(String.format(lineErrMsg, rowNum, "字段‘" + fieldName + "’为空"));
+						} else {
+							if (!beforeGoods.containsKey(fieldCode)) {
+								errList.add(String.format(lineErrMsg, rowNum, "字段‘" + fieldName + "’为空"));
+								continue;
+							} else {
+								value = beforeGoods.get(fieldCode);
+							}
+						}
+					} else {
+						beforeGoods.put(fieldCode, value);
 					}
 					if ("marketPrice".equals(fieldCode)
 							|| "discountPrice".equals(fieldCode)
 							|| "groupPurchasePrice".equals(fieldCode)) {
 						if (NumberUtils.isNumber(value)) {
-							BigDecimal marketPrice = new BigDecimal(value);
-							if (BigDecimal.ZERO.compareTo(marketPrice) > 0) {
-								errList.add("字段‘" + fieldName + "’不能为负数");
+							BigDecimal prize = new BigDecimal(value);
+							if (BigDecimal.ZERO.compareTo(prize) > 0) {
+								errList.add(String.format(lineErrMsg, rowNum, "字段‘" + fieldName + "’不能为负数"));
 							} else {
-//								ReflectionUtil.invoke(goods, "set" + fieldCode.substring(0, 1).toUpperCase() + fieldCode.substring(1), new Class[]{BigDecimal.class}, new Object[] {marketPrice});
+								objectMap.put(fieldCode, value);
 							}
 						} else {
-							errList.add("字段‘" + fieldName + "’类型错误");
+							errList.add(String.format(lineErrMsg, rowNum, "字段‘" + fieldName + "’类型错误"));
 						}
 					} else if ("type".equals(fieldCode)) {
-						boolean match = Arrays.stream(GoodsType.values()).allMatch(next -> next.getDesc().equals(value));
+						String tempValue = value;
+						boolean match = Arrays.stream(GoodsType.values()).allMatch(next -> next.getDesc().equals(tempValue));
 						if (match) {
-							goods.setType(GoodsType.valueOf(value));
+							objectMap.put(fieldCode, value);
 						} else {
-							errList.add("字段‘" + fieldName + "’类型不支持");
+							errList.add(String.format(lineErrMsg, rowNum, "字段‘" + fieldName + "’类型不支持"));
 						}
 					} else if ("goodsCategoryName".equals(fieldCode)) {
 						if(categoryNames.contains(value)){
-							goods.setGoodsCategoryId(categoryIdNameMap.get(value));
+							objectMap.put("goodsCategoryId", categoryIdNameMap.get(value));
 						}else {
-							errList.add("字段‘" + fieldName + "’类型不支持");
+							errList.add(String.format(lineErrMsg, rowNum, "字段‘" + fieldName + "’类型不支持"));
 						}
 					} else if ("educationShowOrganName".equals(fieldCode)
 							|| "courseFeeShowOrganName".equals(fieldCode)
@@ -669,30 +701,104 @@ public class GoodsServiceImpl extends BaseServiceImpl<Integer, Goods>  implement
 						List<String> orgIds = new ArrayList<>();
 						for (String orgName : value.split(",")) {
 							if (!orgNameIdMap.containsKey(orgName)) {
-								errList.add("字段‘" + fieldName + "’分部‘" + value + "’不支持");
+								errList.add(String.format(lineErrMsg, rowNum, "字段‘" + fieldName + "’:‘" + value + "’分部不支持"));
 							} else {
 								orgIds.add(orgNameIdMap.get(orgName).toString());
 							}
 						}
-						String valueField = fieldCode.replaceAll("Name", "Id");
-						valueField = "set" + valueField.substring(0, 1).toUpperCase() + valueField.substring(1);
-//						ReflectionUtil.invoke(goods, valueField, new Class[]{String.class}, new Object[]{String.join("", value)});
+						String join = String.join(",", orgIds);
+						String fieldKey = fieldCode.replaceAll("Name", "Id");
+						objectMap.put(fieldKey, join);
+//						if("educationShowOrganName".equals(fieldCode)){
+//							goods.setEducationShowOrganId(join);
+//						}else if("courseFeeShowOrganName".equals(fieldCode)){
+//							goods.setCourseFeeShowOrganId(join);
+//						}else if("memberFeeShowOrganName".equals(fieldCode)){
+//							goods.setMemberFeeShowOrganId(join);
+//						}else if("freeFeeShowOrganName".equals(fieldCode)){
+//							goods.setFreeFeeShowOrganId(join);
+//						}else if("replacementShowOrganName".equals(fieldCode)){
+//							goods.setReplacementShowOrganId(join);
+//						}
+					} else if ("subGoodsName".equals(fieldCode)) {
+						subGoodsName = value;
+						if (StringUtils.isNotEmpty(subGoodsSku)) {
+							String key = subGoodsName + "_" + subGoodsSku;
+							if (skuMap.containsKey(key)) {
+								PmsProductDto dto = skuMap.get(key);
+								objectMap.put("mallGoodsId", dto.getGoodsId().intValue());
+								objectMap.put("sku", dto.getSkuStockId());
+								objectMap.put("stock", dto.getStock());
+								objectMap.put("goodsStatus", dto.getPublishStatus()==1);
+							} else {
+								errList.add(String.format(lineErrMsg, rowNum, "子商品‘" + value + "[" + subGoodsSku + "]’不存在"));
+							}
+						}
+					} else if ("sku".equals(fieldCode)) {
+						subGoodsSku = value;
+						if (StringUtils.isNotEmpty(subGoodsName)) {
+							String key = subGoodsName + "_" + subGoodsSku;
+							if (skuMap.containsKey(key)) {
+								PmsProductDto dto = skuMap.get(key);
+								objectMap.put("mallGoodsId", dto.getGoodsId().intValue());
+								objectMap.put("sku", dto.getSkuStockId());
+								objectMap.put("stock", dto.getStock());
+								objectMap.put("goodsStatus", dto.getPublishStatus()==1);
+							} else {
+								errList.add(String.format(lineErrMsg, rowNum, "子商品‘" + value + "[" + subGoodsSku + "]’不存在"));
+							}
+						}
+					} else if ("subGoodsPrice".equals(fieldCode)) {
+						BigDecimal subGoodsPrice = new BigDecimal(value);
+						if (BigDecimal.ZERO.compareTo(subGoodsPrice) > 0) {
+							errList.add(String.format(lineErrMsg, rowNum, "字段‘" + fieldName + "’不能为负数"));
+						}
+						goodsSub.setGoodsPrice(subGoodsPrice);
+					} else {
+						objectMap.put(fieldCode, value);
 					}
-
-					beforeGoods = JSON.parseObject(JSON.toJSONString(goods),GoodsWrapper.Goods.class);
 				}
+				goods.setGoodsSubList(Collections.singletonList(goodsSub));
+				goodsList.add(goods);
+			}
+		}
 
+		if (goodsList.isEmpty()) {
+			errList.add("未解析到数据");
+		}
 
-			}
+		if (!errList.isEmpty()) {
+			// 存在错误信息,添加错误日志文件返回
+			return "";
+		}
 
+		Map<String, List<GoodsWrapper.Goods>> goodsGroup = goodsList.stream().collect(Collectors.groupingBy(next -> next.getName() + "_" + next.getSn()));
 
 
+		// 数据合并
+		Map<Integer, Integer> skuIdMap = subGoods.stream().collect(Collectors.toMap(PmsProductDto::getSkuStockId, PmsProductDto::getStock));
 
-		}
+		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);
 
-		if (goodsList.isEmpty()) {
-			throw new BizException("未解析到文件");
-		}
+			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;
 	}
 
@@ -1110,6 +1216,6 @@ public class GoodsServiceImpl extends BaseServiceImpl<Integer, Goods>  implement
 
 	@Override
 	public Object queryGoodsCategoryList() {
-		return null;
+		return mallFeignService.getProductAttributeCategoryList();
 	}
 }

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

@@ -1049,8 +1049,9 @@ public class MusicGroupPaymentCalenderServiceImpl extends BaseServiceImpl<Long,
                 OrderCreate orderCreate = new OrderCreate();
                 String orderNo = idGeneratorService.generatorId("payment") + "";
                 address.setOrderNo(orderNo);
+                musicGroupPaymentCalenderAddressService.updateById(address);
                 orderCreate.setOrderNo(orderNo);
-//                orderCreate.setOrchestraId(musicGroup.getId());
+                orderCreate.setOrchestraId(musicGroup.getId());
                 orderCreate.setMemberId(musicGroup.getSchoolId().longValue());
                 orderCreate.setTotalAmount(calender.getCurrentTotalAmount());
                 orderCreate.setOrderFormType("MEC");
@@ -1063,6 +1064,7 @@ public class MusicGroupPaymentCalenderServiceImpl extends BaseServiceImpl<Long,
                 orderCreate.setReceiverCity(address.getCity());
                 orderCreate.setReceiverRegion(address.getRegion());
                 orderCreate.setReceiverDetailAddress(address.getAddress());
+                orderCreate.setStatus(1);
                 List<OrderCreate.OrderItem> orderItems = new ArrayList<>();
                 for (MusicGroupPaymentCalenderGoods e : goods) {
                     BigDecimal totalPrice = e.getTotalPrice();
@@ -1433,7 +1435,18 @@ public class MusicGroupPaymentCalenderServiceImpl extends BaseServiceImpl<Long,
         if (musicGroupPaymentCalenderDetailList != null && musicGroupPaymentCalenderDetailList.size() > 0) {
             throw new BizException("操作失败:缴费项目中已存在学员");
         }
-        //TODO 商品采购订单是否已经发货
+        //商品采购订单
+        if(calender.getPaymentType() == GOODS_PURCHASE){
+            //TODO 商品采购订单是否已经发货
+            MusicGroupPaymentCalenderAddress address = musicGroupPaymentCalenderAddressService.lambdaQuery().eq(MusicGroupPaymentCalenderAddress::getCalenderId, id).one();
+            if(address != null){
+                if (address.getDeliveryFlag()) {
+                    throw new BizException("操作失败:商品采购订单已发货");
+                }
+                musicGroupPaymentCalenderAddressService.removeById(address.getId());
+            }
+            musicGroupPaymentCalenderGoodsService.lambdaUpdate().eq(MusicGroupPaymentCalenderGoods::getCalenderId,id).remove();
+        }
 
         //如果是学校缴费,删除缴费周期
         musicGroupCalenderRefundPeriodService.deleteByCalenderId(id);
@@ -1472,8 +1485,6 @@ public class MusicGroupPaymentCalenderServiceImpl extends BaseServiceImpl<Long,
         musicGroupPaymentCalenderActivityService.delByCalenderId(id);
         musicGroupPaymentCalenderMemberService.deleteByCalenderId(id);
         musicGroupPaymentCalenderRepairService.deleteByCalenderId(id);
-        musicGroupPaymentCalenderGoodsService.lambdaUpdate().eq(MusicGroupPaymentCalenderGoods::getCalenderId,id).remove();
-        musicGroupPaymentCalenderAddressService.lambdaUpdate().eq(MusicGroupPaymentCalenderAddress::getCalenderId,id).remove();
         List<Long> calenderIds = new ArrayList<Long>();
         calenderIds.add(id);
         musicGroupPaymentCalenderCourseSettingsService.deleteByMusicGroupPaymentCalenderId(calenderIds);

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

@@ -55,16 +55,18 @@
 	<!-- 向数据库增加一条记录 -->
 	<insert id="insert" parameterType="com.ym.mec.biz.dal.entity.MusicGroupCalenderRefundPeriod" useGeneratedKeys="true" keyColumn="id" keyProperty="id">
 		INSERT INTO music_group_calender_refund_period (organ_id_,cooperation_organ_id_,calender_id_,
-		                                                refund_date_,refund_amount_,sub_refund_amount_,income_,refund_flag_,order_nos_,create_time_,update_time_)
-		VALUES(#{organId},#{cooperationOrganId},#{calenderId},#{refundDate},#{refundAmount},#{subRefundAmount},#{income},#{refundFlag},#{orderNos},NOW(),NOW())
+		                                                refund_date_,refund_amount_,sub_refund_amount_,income_,refund_flag_,order_nos_,responsible_person_,create_time_,update_time_)
+		VALUES(#{organId},#{cooperationOrganId},#{calenderId},#{refundDate},#{refundAmount},#{subRefundAmount},#{income},#{refundFlag},#{orderNos},#{responsiblePerson},NOW(),NOW())
 	</insert>
 	<insert id="batchInsert">
 		INSERT INTO music_group_calender_refund_period (organ_id_,cooperation_organ_id_,calender_id_,
-														refund_date_,refund_amount_,sub_refund_amount_,income_,refund_flag_,order_nos_,create_time_,update_time_)
+														refund_date_,refund_amount_,sub_refund_amount_,income_,refund_flag_,
+		                                                order_nos_,responsible_person_,create_time_,update_time_)
 		VALUES
 		<foreach collection="refundPeriods" separator="," item="bean">
 			(#{bean.organId},#{bean.cooperationOrganId},#{bean.calenderId},#{bean.refundDate},
-			 #{bean.refundAmount},#{bean.subRefundAmount},#{bean.income},#{bean.refundFlag},#{bean.orderNos},#{bean.createTime},#{bean.updateTime})
+			 #{bean.refundAmount},#{bean.subRefundAmount},#{bean.income},#{bean.refundFlag},#{bean.orderNos},
+			 #{bean.responsiblePerson},#{bean.createTime},#{bean.updateTime})
 		</foreach>
 	</insert>
 

+ 1 - 1
mec-mall/mall-portal/src/main/resources/config/mybatis/PortalOrderItemDao.xml

@@ -1,4 +1,4 @@
 <?xml version="1.0" encoding="UTF-8"?>
 <!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
-
+<mapper namespace="com.yonge.cooleshow.portal.dao.PortalOrderItemDao">
 </mapper>