Procházet zdrojové kódy

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

刘俊驰 před 1 rokem
rodič
revize
a76a208230

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

@@ -15,6 +15,7 @@ import com.ym.mec.biz.service.SysUserService;
 import com.ym.mec.common.controller.BaseController;
 import com.ym.mec.common.dto.BrandDto;
 import com.ym.mec.common.dto.ProductAttributeCategoryDto;
+import com.ym.mec.common.dto.ProductCategoryDto;
 import com.ym.mec.common.page.PageInfo;
 import io.swagger.annotations.Api;
 import io.swagger.annotations.ApiOperation;
@@ -127,7 +128,7 @@ public class GoodsController extends BaseController {
         List<Goods> rows = page.getRows();
         if (!rows.isEmpty()) {
             Map<String, String> brandIdNameMap = goodsService.queryGoodsBrandList().stream().collect(Collectors.toMap(next -> next.getId().toString(), BrandDto::getName));
-            Map<Integer, String> categoryIdNameMap = goodsService.queryGoodsCategoryList().stream().collect(Collectors.toMap(next -> next.getId().intValue(), ProductAttributeCategoryDto::getName));
+            Map<Integer, String> categoryIdNameMap = goodsService.queryGoodsCategoryList().stream().collect(Collectors.toMap(next -> next.getId().intValue(), ProductCategoryDto::getName));
 
             for (Goods row : rows) {
                 row.setBrandName(brandIdNameMap.getOrDefault(row.getBrand(), row.getBrand()));

+ 5 - 2
mec-application/src/main/java/com/ym/mec/web/controller/TaskController.java

@@ -140,9 +140,10 @@ public class TaskController extends BaseController {
     private DegreeService degreeService;
 	@Autowired
 	private ImPluginContext imPluginContext;
-
     @Autowired
     private UserMusicService userMusicService;
+    @Autowired
+    private MusicGroupPaymentCalenderRepairService musicGroupPaymentCalenderRepairService;
 
 	@GetMapping(value = "/initSysMusicCompareDayData")
 	public void initSysMusicCompareDayData(){
@@ -234,9 +235,11 @@ public class TaskController extends BaseController {
 	}
 
 	@GetMapping(value = "/pushWaitSendMessageTask")
-	// 每天9点推送前一天22点之后的推送消息
 	public void pushWaitSendMessageTask(){
+		// 每天9点推送前一天22点之后的推送消息
 		sysMessageService.pushWaitSendMessageTask();
+		// 学校缴费回款提醒
+		musicGroupPaymentCalenderRepairService.pushWaitSendMessageTask();
 	}
 
 	@GetMapping(value = "/repertoryWarn")

+ 7 - 0
mec-biz/src/main/java/com/ym/mec/biz/dal/dao/MusicGroupPaymentCalenderRepairDao.java

@@ -1,13 +1,20 @@
 package com.ym.mec.biz.dal.dao;
 
+import com.ym.mec.biz.dal.dto.WaitSendMessageDto;
 import com.ym.mec.common.dal.BaseDAO;
 import com.ym.mec.biz.dal.entity.MusicGroupPaymentCalenderRepair;
 import org.apache.ibatis.annotations.Param;
 
+import java.util.List;
+
 public interface MusicGroupPaymentCalenderRepairDao extends BaseDAO<Long, MusicGroupPaymentCalenderRepair> {
 
 
     void deleteByCalenderId(@Param("calenderId") Long calenderId);
 
     MusicGroupPaymentCalenderRepair findByCalenderId(@Param("calenderId") Long calenderId);
+
+    List<WaitSendMessageDto> queryWaitSendMessage();
+
+    void updateSendRemind(@Param("ids") List<Integer> ids);
 }

+ 22 - 0
mec-biz/src/main/java/com/ym/mec/biz/dal/dto/WaitSendMessageDto.java

@@ -0,0 +1,22 @@
+package com.ym.mec.biz.dal.dto;
+
+import io.swagger.annotations.ApiModelProperty;
+import lombok.Data;
+
+@Data
+public class WaitSendMessageDto {
+
+    private Integer id;
+
+    @ApiModelProperty(value = "学校名称", required = false)
+    private String schoolName;
+
+    @ApiModelProperty(value = "缴费批次", required = false)
+    private String batchNo;
+
+    @ApiModelProperty(value = "责任人手机号", required = false)
+    private String phone;
+
+    @ApiModelProperty(value = "用户编号", required = false)
+    private Integer userId;
+}

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

@@ -48,6 +48,9 @@ public class MusicGroupCalenderRefundPeriod {
 
 	@ApiModelProperty(value = "责任人",required = false)
 	private Integer responsiblePerson;
+
+	@ApiModelProperty(value = "是否发送回款提醒",required = false)
+	private Boolean sendRemind = false;
 	
 	/**  */
 	private java.util.Date createTime;

+ 1 - 0
mec-biz/src/main/java/com/ym/mec/biz/dal/enums/MessageTypeEnum.java

@@ -246,6 +246,7 @@ public enum MessageTypeEnum implements BaseEnum<String, MessageTypeEnum> {
     SMS_TENANT_RECHARGE("SMS_TENANT_RECHARGE",   "云教室充值"),
     SMS_TENANT_INSUFFICIENT_BALANCE("SMS_TENANT_INSUFFICIENT_BALANCE",  "余额不足"),
     SMS_TENANT_EXPIRE("SMS_TENANT_EXPIRE",  "云教室欠费"),
+    SMS_WAIT_REMINDER_PAYMENT("SMS_WAIT_REMINDER_PAYMENT",  "待回款提醒"),
 
 
     STUDENT_SMS_CLOUD_PAYMENT("STUDENT_SMS_CLOUD_PAYMENT",  "待缴费订单"),

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

@@ -156,9 +156,9 @@ public interface GoodsService extends BaseService<Integer, Goods> {
 
     Boolean goodsStockCountSynchronize(List<GoodsSubStockModel> goodsSubStockModels);
 
-    List<ProductCategoryDto> queryGoodsTypeList();
+    List<ProductAttributeCategoryDto> queryGoodsTypeList();
 
     List<BrandDto> queryGoodsBrandList();
 
-    List<ProductAttributeCategoryDto> queryGoodsCategoryList();
+    List<ProductCategoryDto> queryGoodsCategoryList();
 }

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

@@ -9,4 +9,6 @@ public interface MusicGroupPaymentCalenderRepairService extends BaseService<Long
     void deleteByCalenderId(Long calenderId);
 
     MusicGroupPaymentCalenderRepair findByCalenderId(Long calenderId);
+
+    void pushWaitSendMessageTask();
 }

+ 67 - 64
mec-biz/src/main/java/com/ym/mec/biz/service/impl/GoodsServiceImpl.java

@@ -576,7 +576,7 @@ public class GoodsServiceImpl extends BaseServiceImpl<Integer, Goods>  implement
 		Map<String, List<Map<String, Object>>> sheetsListMap = POIUtil.importExcel(new ByteArrayInputStream(file.getBytes()), 2, file.getOriginalFilename());
 		if (sheetsListMap.values().isEmpty()) {
 			errList.add("excel未解析到数据");
-			return "";
+			return getImportErrLogFile(errList);
 		}
 
 		// 查询商品分类
@@ -599,7 +599,7 @@ public class GoodsServiceImpl extends BaseServiceImpl<Integer, Goods>  implement
 		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<>();
+		List<PmsProductDto> subGoods;
 		try {
 			// 查询SKU对应商品
 			PmsProductQueryParamDto dto = PmsProductQueryParamDto.builder()
@@ -608,13 +608,15 @@ public class GoodsServiceImpl extends BaseServiceImpl<Integer, Goods>  implement
 					.pageSize(9999)
 					.build();
 			dto.setJson(JSON.toJSONString(dto));
-			subGoods.addAll(mallFeignService.getProductList(dto).getRows());
+			subGoods = new ArrayList<>(mallFeignService.getProductList(dto).getRows());
 		} catch (Exception e) {
 			errList.add("商城服务调用失败");
+			return getImportErrLogFile(errList);
 		}
 		Map<String, PmsProductDto>skuMap = subGoods.stream().collect(Collectors.toMap(next -> (next.getName() + "_" + next.getSkuCode()), Function.identity()));
 
-		List<GoodsWrapper.Goods> goodsList = new ArrayList<>();
+//		List<GoodsWrapper.Goods> goodsList = new ArrayList<>();
+		List<JSONObject> jsonObjectList = new ArrayList<>();
 		for (Map.Entry<String, List<Map<String, Object>>> sheetData : sheetsListMap.entrySet()) {
 			List<Map<String, Object>> rows = sheetData.getValue();
 			if (rows.isEmpty()) {
@@ -626,7 +628,7 @@ public class GoodsServiceImpl extends BaseServiceImpl<Integer, Goods>  implement
 			List<String> defaultField = templateFields.stream().filter(firstRow::containsKey).collect(Collectors.toList());
 			if (!defaultField.isEmpty()) {
 				errList.add("导入字段缺省:" + String.join(",", defaultField));
-				break;
+				return getImportErrLogFile(errList);
 			}
 
 			String lineErrMsg = "第%s行存在错误:%s";
@@ -643,6 +645,7 @@ public class GoodsServiceImpl extends BaseServiceImpl<Integer, Goods>  implement
 				if (row.size() == 0) {
 					continue;
 				}
+				List<String> lineErrList = new ArrayList<>();
 				for (Map.Entry<String, Object> entry : row.entrySet()) {
 					String fieldName = entry.getKey();
 					if (!templateFields.contains(fieldName)) {
@@ -654,10 +657,10 @@ public class GoodsServiceImpl extends BaseServiceImpl<Integer, Goods>  implement
 					// 非子商品字段为空,往上一行获取值
 					if (StringUtils.isEmpty(value)) {
 						if ("subGoodsName".equals(fieldCode) || "sku".equals(fieldCode) || "subGoodsPrice".equals(fieldCode)) {
-							errList.add(String.format(lineErrMsg, rowNum, "字段‘" + fieldName + "’为空"));
+							lineErrList.add("字段‘" + fieldName + "’为空");
 						} else {
 							if (!beforeGoods.containsKey(fieldCode)) {
-								errList.add(String.format(lineErrMsg, rowNum, "字段‘" + fieldName + "’为空"));
+								lineErrList.add("字段‘" + fieldName + "’为空");
 								continue;
 							} else {
 								value = beforeGoods.get(fieldCode);
@@ -672,12 +675,13 @@ public class GoodsServiceImpl extends BaseServiceImpl<Integer, Goods>  implement
 						if (NumberUtils.isNumber(value)) {
 							BigDecimal prize = new BigDecimal(value);
 							if (BigDecimal.ZERO.compareTo(prize) > 0) {
-								errList.add(String.format(lineErrMsg, rowNum, "字段‘" + fieldName + "’不能为负数"));
+								lineErrList.add("字段‘" + fieldName + "’不能为负数");
 							} else {
 								objectMap.put(fieldCode, value);
 							}
 						} else {
-							errList.add(String.format(lineErrMsg, rowNum, "字段‘" + fieldName + "’类型错误"));
+							lineErrList.add("字段‘" + fieldName + "’类型错误");
+
 						}
 					} else if ("type".equals(fieldCode)) {
 						String tempValue = value;
@@ -685,13 +689,13 @@ public class GoodsServiceImpl extends BaseServiceImpl<Integer, Goods>  implement
 						if (match) {
 							objectMap.put(fieldCode, value);
 						} else {
-							errList.add(String.format(lineErrMsg, rowNum, "字段‘" + fieldName + "’类型不支持"));
+							lineErrList.add("字段‘" + fieldName + "’类型不支持");
 						}
 					} else if ("goodsCategoryName".equals(fieldCode)) {
 						if(categoryNames.contains(value)){
 							objectMap.put("goodsCategoryId", categoryIdNameMap.get(value));
 						}else {
-							errList.add(String.format(lineErrMsg, rowNum, "字段‘" + fieldName + "’类型不支持"));
+							lineErrList.add("字段‘" + fieldName + "’类型不支持");
 						}
 					} else if ("educationShowOrganName".equals(fieldCode)
 							|| "courseFeeShowOrganName".equals(fieldCode)
@@ -702,7 +706,7 @@ public class GoodsServiceImpl extends BaseServiceImpl<Integer, Goods>  implement
 						List<String> orgIds = new ArrayList<>();
 						for (String orgName : value.split(",")) {
 							if (!orgNameIdMap.containsKey(orgName)) {
-								errList.add(String.format(lineErrMsg, rowNum, "字段‘" + fieldName + "’:‘" + value + "’分部不支持"));
+								lineErrList.add("字段‘" + fieldName + "’:‘" + value + "’分部不支持");
 							} else {
 								orgIds.add(orgNameIdMap.get(orgName).toString());
 							}
@@ -710,17 +714,6 @@ public class GoodsServiceImpl extends BaseServiceImpl<Integer, Goods>  implement
 						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)) {
@@ -732,7 +725,7 @@ public class GoodsServiceImpl extends BaseServiceImpl<Integer, Goods>  implement
 								objectMap.put("stock", dto.getStock());
 								objectMap.put("goodsStatus", dto.getPublishStatus()==1);
 							} else {
-								errList.add(String.format(lineErrMsg, rowNum, "子商品‘" + value + "[" + subGoodsSku + "]’不存在"));
+								lineErrList.add("子商品‘" + value + "[" + subGoodsSku + "]’不存在");
 							}
 						}
 					} else if ("sku".equals(fieldCode)) {
@@ -746,60 +739,65 @@ public class GoodsServiceImpl extends BaseServiceImpl<Integer, Goods>  implement
 								objectMap.put("stock", dto.getStock());
 								objectMap.put("goodsStatus", dto.getPublishStatus()==1);
 							} else {
-								errList.add(String.format(lineErrMsg, rowNum, "子商品‘" + value + "[" + subGoodsSku + "]’不存在"));
+								lineErrList.add("子商品‘" + 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 + "’不能为负数"));
+							lineErrList.add("字段‘" + fieldName + "’不能为负数");
 						}
 						goodsSub.setGoodsPrice(subGoodsPrice);
 					} else {
 						objectMap.put(fieldCode, value);
 					}
 				}
-				goods.setGoodsSubList(Collections.singletonList(goodsSub));
-				goodsList.add(goods);
+				if (!lineErrList.isEmpty()) {
+					errList.add(String.format(lineErrMsg, rowNum, String.join(",", lineErrList)));
+				}
+				jsonObjectList.add(objectMap);
+//				goods.setGoodsSubList(Collections.singletonList(goodsSub));
+//				goodsList.add(goods);
 			}
 		}
 
-		if (goodsList.isEmpty()) {
+		if (jsonObjectList.isEmpty()) {
 			errList.add("未解析到数据");
 		}
 
 		if (!errList.isEmpty()) {
 			// 存在错误信息,添加错误日志文件返回
-			return "";
+			return getImportErrLogFile(errList);
 		}
 
-		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);
-
-			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);
-		});
+//		Map<String, List<GoodsWrapper.Goods>> goodsGroup = jsonObjectList.stream().collect(Collectors.groupingBy(next -> next.getClass() + "_" + 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);
+//
+//			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;
 	}
 
@@ -1142,16 +1140,16 @@ public class GoodsServiceImpl extends BaseServiceImpl<Integer, Goods>  implement
 			return false;
 		}
 		log.info(Thread.currentThread().getName() + "开始同步商品状态:" + JSON.toJSONString(goodsSubModelList));
-		List<Integer> goodIds = goodsSubModelList.stream().map(GoodsSubModel::getMallGoodsId).distinct().collect(Collectors.toList());
+		List<Integer> skuIds = goodsSubModelList.stream().map(GoodsSubModel::getSkuId).distinct().collect(Collectors.toList());
 		QueryWrapper<GoodsSub> queryWrapper = new QueryWrapper<>();
-		queryWrapper.in("mall_goods_id_", goodIds);
+		queryWrapper.in("sku_", skuIds);
 		List<GoodsSub> goodsSubs = goodsSubMapper.selectList(queryWrapper);
 		if (CollectionUtils.isEmpty(goodsSubs)) {
 			return true;
 		}
-		Map<String, Boolean> keyStatusMap = goodsSubModelList.stream().collect(Collectors.toMap(next -> next.getMallGoodsId() + "_" + next.getSkuId(), GoodsSubModel::getGoodsStatus));
+		Map<Integer, Boolean> keyStatusMap = goodsSubModelList.stream().collect(Collectors.toMap(GoodsSubModel::getSkuId, GoodsSubModel::getGoodsStatus));
 		log.info(Thread.currentThread().getName() + "开始同步商品状态:0/" + goodsSubs.size());
-		List<GoodsSub> goodsSubList = goodsSubs.stream().peek(next -> next.setGoodsStatus(keyStatusMap.get(next.getMallGoodsId() + "_" + next.getSku()))).collect(Collectors.toList());
+		List<GoodsSub> goodsSubList = goodsSubs.stream().peek(next -> next.setGoodsStatus(keyStatusMap.get(next.getSku()))).collect(Collectors.toList());
 		// 下架的商品
 		List<GoodsSub> downGoods = goodsSubList.stream().filter(next -> Boolean.FALSE.equals(next.getGoodsStatus())).collect(Collectors.toList());
 		if(!CollectionUtils.isEmpty(downGoods)){
@@ -1216,8 +1214,8 @@ public class GoodsServiceImpl extends BaseServiceImpl<Integer, Goods>  implement
 	}
 
 	@Override
-	public List<ProductCategoryDto> queryGoodsTypeList() {
-		return mallFeignService.listWithChildren();
+	public List<ProductAttributeCategoryDto> queryGoodsTypeList() {
+		return mallFeignService.getProductAttributeCategoryList();
 	}
 
 	@Override
@@ -1226,7 +1224,12 @@ public class GoodsServiceImpl extends BaseServiceImpl<Integer, Goods>  implement
 	}
 
 	@Override
-	public List<ProductAttributeCategoryDto> queryGoodsCategoryList() {
-		return mallFeignService.getProductAttributeCategoryList();
+	public List<ProductCategoryDto> queryGoodsCategoryList() {
+		return mallFeignService.listWithChildren();
+	}
+
+	private String getImportErrLogFile(List<String> errList){
+
+		return "";
 	}
 }

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

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

+ 28 - 4
mec-biz/src/main/java/com/ym/mec/biz/service/impl/MusicGroupPaymentCalenderRepairServiceImpl.java

@@ -2,22 +2,27 @@ package com.ym.mec.biz.service.impl;
 
 import com.ym.mec.biz.dal.dao.MusicGroupPaymentCalenderRepairDao;
 import com.ym.mec.biz.dal.dto.MusicGroupPaymentBaseCalender;
+import com.ym.mec.biz.dal.dto.WaitSendMessageDto;
 import com.ym.mec.biz.dal.entity.MusicGroupPaymentCalender;
 import com.ym.mec.biz.dal.entity.MusicGroupPaymentCalenderRepair;
 import com.ym.mec.biz.dal.enums.CalenderBaseServiceEnum;
-import com.ym.mec.biz.service.MusicGroupPaymentCalenderBaseService;
-import com.ym.mec.biz.service.MusicGroupPaymentCalenderRepairService;
-import com.ym.mec.biz.service.SysConfigService;
-import com.ym.mec.biz.service.SysTenantConfigService;
+import com.ym.mec.biz.dal.enums.MessageTypeEnum;
+import com.ym.mec.biz.service.*;
 import com.ym.mec.common.dal.BaseDAO;
 import com.ym.mec.common.exception.BizException;
 import com.ym.mec.common.service.impl.BaseServiceImpl;
 import com.ym.mec.common.tenant.TenantContextHolder;
+import com.ym.mec.thirdparty.message.MessageSenderPluginContext;
+import org.apache.commons.collections.CollectionUtils;
 import org.apache.commons.lang3.StringUtils;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.stereotype.Service;
 
 import java.math.BigDecimal;
+import java.util.HashMap;
+import java.util.List;
+import java.util.Map;
+import java.util.stream.Collectors;
 
 import static com.ym.mec.biz.dal.entity.MusicGroupPaymentCalender.PaymentCalenderStatusEnum.AUDITING;
 import static com.ym.mec.biz.dal.entity.MusicGroupPaymentCalender.PaymentCalenderStatusEnum.NO;
@@ -36,6 +41,8 @@ public class MusicGroupPaymentCalenderRepairServiceImpl extends BaseServiceImpl<
 
     @Autowired
     private SysTenantConfigService sysTenantConfigService;
+    @Autowired
+    private SysMessageService sysMessageService;
 
     public MusicGroupPaymentCalenderRepairServiceImpl() {
         MusicGroupPaymentCalenderBaseService.calenderBaseServiceMap.put(CalenderBaseServiceEnum.MUSIC_REPAIR,this);
@@ -93,6 +100,23 @@ public class MusicGroupPaymentCalenderRepairServiceImpl extends BaseServiceImpl<
         return musicGroupPaymentCalenderRepairDao.findByCalenderId(calenderId);
     }
 
+    @Override
+    public void pushWaitSendMessageTask() {
+        //获取截止回款日期还未回款的数据
+        List<WaitSendMessageDto> messageDtos = musicGroupPaymentCalenderRepairDao.queryWaitSendMessage();
+        if (CollectionUtils.isNotEmpty(messageDtos)) {
+            for (WaitSendMessageDto messageDto : messageDtos) {
+                //发送消息
+                Map<Integer, String> receivers = new HashMap<>(1);
+                receivers.put(messageDto.getUserId(), messageDto.getPhone());
+                sysMessageService.batchSendMessage(MessageSenderPluginContext.MessageSender.AWSMS,
+                        MessageTypeEnum.SMS_WAIT_REMINDER_PAYMENT, receivers, null, 0, null, null,messageDto.getSchoolName(),messageDto.getBatchNo());
+            }
+            List<Integer> ids = messageDtos.stream().map(e -> e.getId()).collect(Collectors.toList());
+            musicGroupPaymentCalenderRepairDao.updateSendRemind(ids);
+        }
+    }
+
     private BigDecimal getAmount(MusicGroupPaymentBaseCalender baseCalender,String configName){
         MusicGroupPaymentCalenderRepair musicRepair = baseCalender.getMusicRepair();
         if(musicRepair != null){

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

@@ -55,7 +55,13 @@
 		update_time_ = NOW()
 	</set> WHERE id_ = #{id} and tenant_id_ = #{tenantId}
 	</update>
-	
+	<update id="updateSendRemind">
+		UPDATE music_group_payment_calender_repair SET send_remind_ = 1 WHERE id_
+		<foreach collection="ids" item="id" open="(" separator="," close=")">
+			#{id}
+		</foreach>
+	</update>
+
 	<!-- 根据主键删除一条记录 -->
 	<delete id="delete" >
 		DELETE FROM music_group_payment_calender_repair WHERE id_ = #{id} 
@@ -76,4 +82,13 @@
     <select id="findByCalenderId" resultMap="MusicGroupPaymentCalenderRepair">
 		SELECT * FROM music_group_payment_calender_repair WHERE calender_id_ = #{calenderId}
 	</select>
+    <select id="queryWaitSendMessage" resultType="com.ym.mec.biz.dal.dto.WaitSendMessageDto">
+		select mgcrp.id_ id,s.name_ schoolName,mgpc.batch_no_ batchNo,su.phone_ phone,mgcrp.responsible_person_ userId
+		from music_group_calender_refund_period mgcrp
+		left join music_group_payment_calender mgpc ON mgpc.id_ = mgcrp.calender_id_
+		left join music_group mg ON mg.id_ = mgpc.music_group_id_
+		left join school s ON s.id_ = mg.school_id_
+		left join sys_user su ON su.id_ = mgcrp.responsible_person_
+		where mgcrp.refund_date_ = CURDATE() AND mgcrp.refund_flag_ = 0 AND mgcrp.responsible_person_ IS NOT NULL
+	</select>
 </mapper>

+ 3 - 2
mec-task/src/main/java/com/ym/mec/task/jobs/MusicSchoolTermPushTask.java

@@ -3,13 +3,14 @@ package com.ym.mec.task.jobs;
 import com.ym.mec.task.TaskRemoteService;
 import com.ym.mec.task.core.BaseTask;
 import com.ym.mec.task.core.TaskException;
-import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.stereotype.Service;
 
+import javax.annotation.Resource;
+
 @Service
 public class MusicSchoolTermPushTask extends BaseTask {
 
-    @Autowired
+    @Resource
     private TaskRemoteService taskRemoteService;
 
     @Override