| @@ -1,167 +1,167 @@ | |||||
| package com.iformall.schedule; | |||||
| import com.alibaba.fastjson.JSON; | |||||
| import com.alibaba.fastjson.JSONObject; | |||||
| import com.iformall.domain.dto.WxCUserBasicInfoDto; | |||||
| import com.iformall.domain.po.*; | |||||
| import com.iformall.domain.po.base.TenantEntity; | |||||
| import com.iformall.domain.po.msg.WxMsgRecord; | |||||
| import com.iformall.domain.vo.WxCouponSendVo; | |||||
| import com.iformall.enums.*; | |||||
| import com.iformall.mapper.*; | |||||
| import com.iformall.mq.MqBaseProducer; | |||||
| import com.iformall.service.*; | |||||
| import com.iformall.sms.EnumSMSChannel; | |||||
| import com.iformall.sms.SMSFactory; | |||||
| import com.iformall.utils.CreditUtil; | |||||
| import org.apache.commons.collections.CollectionUtils; | |||||
| import org.apache.commons.lang3.StringUtils; | |||||
| import org.slf4j.Logger; | |||||
| import org.slf4j.LoggerFactory; | |||||
| import org.springframework.beans.factory.annotation.Autowired; | |||||
| import org.springframework.context.annotation.Lazy; | |||||
| import org.springframework.scheduling.annotation.Async; | |||||
| import org.springframework.scheduling.annotation.Scheduled; | |||||
| import org.springframework.stereotype.Component; | |||||
| import java.math.BigDecimal; | |||||
| import java.text.DateFormat; | |||||
| import java.text.SimpleDateFormat; | |||||
| import java.time.LocalDateTime; | |||||
| import java.time.LocalTime; | |||||
| import java.time.ZoneId; | |||||
| import java.time.temporal.TemporalAdjusters; | |||||
| import java.util.*; | |||||
| import java.util.stream.Collectors; | |||||
| import static java.util.stream.Collectors.toList; | |||||
| @Component | |||||
| public class CouponSendScheduleTest { | |||||
| private final Logger logger = LoggerFactory.getLogger(this.getClass()); | |||||
| @Autowired | |||||
| private WxMallMapper wxMallMapper; | |||||
| @Autowired | |||||
| private WxCUserBasicInfoMapper wxCUserBasicInfoMapper; | |||||
| @Autowired | |||||
| private WxCUserBasicInfoService wxCUserBasicInfoService; | |||||
| @Autowired | |||||
| private WxOrderService wxOrderService; | |||||
| @Autowired | |||||
| private WxCouponActionLogService wxCouponActionLogService; | |||||
| @Autowired | |||||
| private WxCouponSendInjectMapper wxCouponSendInjectMapper; | |||||
| @Autowired | |||||
| private MqBaseProducer mqBaseProducer; | |||||
| @Async | |||||
| //@Scheduled(cron = "0 0 6 1 * ?") // 每月1号发放会员的权益券 | |||||
| @Scheduled(cron = "0 */10 * * * ?") // 测试每天6点发券 | |||||
| //@Scheduled(cron = "*/30 * * * * ?") // 测试30秒中一次 | |||||
| public void couponSendSchedule() { | |||||
| WxCouponSendInject sendInject = new WxCouponSendInject(); | |||||
| sendInject.setSendStatus(EnumYesOrNo.NO.getCode()); | |||||
| List<WxCouponSendInject> list = wxCouponSendInjectMapper.findList(sendInject); | |||||
| for (WxCouponSendInject inject:list) { | |||||
| try { | |||||
| WxCouponOrder couponOrder = wxOrderService.sendFreeCouponToUser(inject.getUserId(), inject,inject.getCouponId(), null,EnumPayWay.PAY_WAY_NOT_UNPAY_INJECT_SEND,null,null); | |||||
| if(couponOrder != null){ | |||||
| inject.setSendStatus(EnumYesOrNo.YES.getCode()); | |||||
| inject.setOrderId(couponOrder.getOrderId()); | |||||
| inject.setCouponOrderId(couponOrder.getId()); | |||||
| inject.setUpdateTime(new Date()); | |||||
| wxCouponSendInjectMapper.updateById(inject); | |||||
| wxCouponActionLogService.addOne(inject, inject.getCouponId(), couponOrder.getId(), EnumCouponSendSendType.INJECT.getCode(), 0L,0L); | |||||
| } | |||||
| } catch (Exception e) { | |||||
| logger.error("定时发券:发券失败 couponId=" + inject.getCouponId() + " userId=" + inject.getUserId() + e.getMessage()); | |||||
| continue; | |||||
| } | |||||
| } | |||||
| } | |||||
| //package com.iformall.schedule; | |||||
| // | |||||
| //import com.alibaba.fastjson.JSON; | |||||
| //import com.alibaba.fastjson.JSONObject; | |||||
| //import com.iformall.domain.dto.WxCUserBasicInfoDto; | |||||
| //import com.iformall.domain.po.*; | |||||
| //import com.iformall.domain.po.base.TenantEntity; | |||||
| //import com.iformall.domain.po.msg.WxMsgRecord; | |||||
| //import com.iformall.domain.vo.WxCouponSendVo; | |||||
| //import com.iformall.enums.*; | |||||
| //import com.iformall.mapper.*; | |||||
| //import com.iformall.mq.MqBaseProducer; | |||||
| //import com.iformall.service.*; | |||||
| //import com.iformall.sms.EnumSMSChannel; | |||||
| //import com.iformall.sms.SMSFactory; | |||||
| //import com.iformall.utils.CreditUtil; | |||||
| //import org.apache.commons.collections.CollectionUtils; | |||||
| //import org.apache.commons.lang3.StringUtils; | |||||
| //import org.slf4j.Logger; | |||||
| //import org.slf4j.LoggerFactory; | |||||
| //import org.springframework.beans.factory.annotation.Autowired; | |||||
| //import org.springframework.context.annotation.Lazy; | |||||
| //import org.springframework.scheduling.annotation.Async; | |||||
| //import org.springframework.scheduling.annotation.Scheduled; | |||||
| //import org.springframework.stereotype.Component; | |||||
| // | |||||
| //import java.math.BigDecimal; | |||||
| //import java.text.DateFormat; | |||||
| //import java.text.SimpleDateFormat; | |||||
| //import java.time.LocalDateTime; | |||||
| //import java.time.LocalTime; | |||||
| //import java.time.ZoneId; | |||||
| //import java.time.temporal.TemporalAdjusters; | |||||
| //import java.util.*; | |||||
| //import java.util.stream.Collectors; | |||||
| // | |||||
| //import static java.util.stream.Collectors.toList; | |||||
| // | |||||
| //@Component | |||||
| //public class CouponSendScheduleTest { | |||||
| // | |||||
| // private final Logger logger = LoggerFactory.getLogger(this.getClass()); | |||||
| // | |||||
| // @Autowired | |||||
| // private WxMallMapper wxMallMapper; | |||||
| // | |||||
| // @Autowired | |||||
| // private WxCUserBasicInfoMapper wxCUserBasicInfoMapper; | |||||
| // | |||||
| // @Autowired | |||||
| // private WxCUserBasicInfoService wxCUserBasicInfoService; | |||||
| // | |||||
| // @Autowired | |||||
| // private WxOrderService wxOrderService; | |||||
| // | |||||
| // @Autowired | |||||
| // private WxCouponActionLogService wxCouponActionLogService; | |||||
| // | |||||
| // @Autowired | |||||
| // private WxCouponSendInjectMapper wxCouponSendInjectMapper; | |||||
| // | |||||
| // @Autowired | |||||
| // private MqBaseProducer mqBaseProducer; | |||||
| // | |||||
| // | |||||
| // @Async | // @Async | ||||
| //@Scheduled(cron = "0 0 6 1 * ?") // 每月1号发放会员的权益券 | |||||
| // //@Scheduled(cron = "0 0 6 1 * ?") // 每月1号发放会员的权益券 | |||||
| // @Scheduled(cron = "0 */10 * * * ?") // 测试每天6点发券 | // @Scheduled(cron = "0 */10 * * * ?") // 测试每天6点发券 | ||||
| //@Scheduled(cron = "*/30 * * * * ?") // 测试30秒中一次 | |||||
| public void couponSendMsgSchedule() { | |||||
| TenantEntity tenantEntity = new TenantEntity(); | |||||
| tenantEntity.setTenantId("1038"); | |||||
| WxCouponSendInject sendInject = new WxCouponSendInject(); | |||||
| sendInject.updateTenantInfo(tenantEntity); | |||||
| sendInject.setSendStatus(EnumYesOrNo.YES.getCode()); | |||||
| sendInject.setSendMsg(EnumYesOrNo.NO.getCode()); | |||||
| sendInject.setCouponId(698841722461515776l); | |||||
| List<WxCouponSendInject> list1 = wxCouponSendInjectMapper.findList(sendInject); | |||||
| sendSMS(tenantEntity,list1,"0.5元购大桶爆米花"); | |||||
| sendInject.setCouponId(698842872011190272l); | |||||
| List<WxCouponSendInject> list2 = wxCouponSendInjectMapper.findList(sendInject); | |||||
| sendSMS(tenantEntity,list2,"9.9元购普通厅单人观影票"); | |||||
| sendInject.setCouponId(698843398773829632l); | |||||
| List<WxCouponSendInject> list3 = wxCouponSendInjectMapper.findList(sendInject); | |||||
| sendSMS(tenantEntity,list3,"49.9元购双人欢乐套餐"); | |||||
| } | |||||
| private void sendSMS(TenantEntity tenantEntity ,List<WxCouponSendInject> list1,String couponTitle) { | |||||
| String validDate = "2022年6月30日"; | |||||
| try{ | |||||
| if(list1 != null && list1.size() > 0){ | |||||
| List<Long> userIds = list1.stream().map(s -> s.getUserId()).collect(toList()); | |||||
| WxCUserBasicInfo cUserBasicInfoQ = new WxCUserBasicInfo(); | |||||
| cUserBasicInfoQ.setFinalTenantId(tenantEntity.getFinalTenantId()); | |||||
| cUserBasicInfoQ.setIds(userIds); | |||||
| List<WxCUserBasicInfo> listPhoneAndNameByIds = wxCUserBasicInfoMapper.findListPhoneAndNameByIds(cUserBasicInfoQ); | |||||
| List<String> collect = listPhoneAndNameByIds.stream().map(u -> u.getPhone()).collect(toList()); | |||||
| String phone = String.join(",", collect); | |||||
| WxMsgConfig wxMsgConfig = new WxMsgConfig(); | |||||
| wxMsgConfig.setSmsChannel(EnumSMSChannel.ALIYUN.getCode()); | |||||
| Map<String, String> dynamicContentMap = new HashMap<>(); | |||||
| dynamicContentMap.put("couponTitle",couponTitle); | |||||
| dynamicContentMap.put("validDate",validDate); | |||||
| String result = SMSFactory.sendSms(wxMsgConfig, phone, "富茂", null, | |||||
| null, null, JSON.toJSONString(dynamicContentMap), | |||||
| "SMS_243651558",null); | |||||
| JSONObject jsonObjectResult = JSONObject.parseObject(result); | |||||
| String ret = jsonObjectResult.get("ret").toString(); | |||||
| String batchNo = jsonObjectResult.get("data").toString(); | |||||
| if (ret.equals("1")) { | |||||
| wxCouponSendInjectMapper.updateMsgByUserIds(userIds); | |||||
| }else{ | |||||
| logger.error("发短信失败 couponId="+couponTitle); | |||||
| } | |||||
| } | |||||
| }catch(Exception e){ | |||||
| logger.error("发短信失败 couponId="+couponTitle+e.getMessage()); | |||||
| } | |||||
| } | |||||
| } | |||||
| // //@Scheduled(cron = "*/30 * * * * ?") // 测试30秒中一次 | |||||
| // public void couponSendSchedule() { | |||||
| // | |||||
| // WxCouponSendInject sendInject = new WxCouponSendInject(); | |||||
| // sendInject.setSendStatus(EnumYesOrNo.NO.getCode()); | |||||
| // | |||||
| // List<WxCouponSendInject> list = wxCouponSendInjectMapper.findList(sendInject); | |||||
| // for (WxCouponSendInject inject:list) { | |||||
| // try { | |||||
| // WxCouponOrder couponOrder = wxOrderService.sendFreeCouponToUser(inject.getUserId(), inject,inject.getCouponId(), null,EnumPayWay.PAY_WAY_NOT_UNPAY_INJECT_SEND,null,null); | |||||
| // if(couponOrder != null){ | |||||
| // inject.setSendStatus(EnumYesOrNo.YES.getCode()); | |||||
| // inject.setOrderId(couponOrder.getOrderId()); | |||||
| // inject.setCouponOrderId(couponOrder.getId()); | |||||
| // inject.setUpdateTime(new Date()); | |||||
| // wxCouponSendInjectMapper.updateById(inject); | |||||
| // wxCouponActionLogService.addOne(inject, inject.getCouponId(), couponOrder.getId(), EnumCouponSendSendType.INJECT.getCode(), 0L,0L); | |||||
| // } | |||||
| // | |||||
| // } catch (Exception e) { | |||||
| // logger.error("定时发券:发券失败 couponId=" + inject.getCouponId() + " userId=" + inject.getUserId() + e.getMessage()); | |||||
| // continue; | |||||
| // } | |||||
| // } | |||||
| // | |||||
| // } | |||||
| // | |||||
| //// @Async | |||||
| // //@Scheduled(cron = "0 0 6 1 * ?") // 每月1号发放会员的权益券 | |||||
| //// @Scheduled(cron = "0 */10 * * * ?") // 测试每天6点发券 | |||||
| // //@Scheduled(cron = "*/30 * * * * ?") // 测试30秒中一次 | |||||
| // public void couponSendMsgSchedule() { | |||||
| // | |||||
| // TenantEntity tenantEntity = new TenantEntity(); | |||||
| // tenantEntity.setTenantId("1038"); | |||||
| // | |||||
| // | |||||
| // WxCouponSendInject sendInject = new WxCouponSendInject(); | |||||
| // sendInject.updateTenantInfo(tenantEntity); | |||||
| // sendInject.setSendStatus(EnumYesOrNo.YES.getCode()); | |||||
| // sendInject.setSendMsg(EnumYesOrNo.NO.getCode()); | |||||
| // sendInject.setCouponId(698841722461515776l); | |||||
| // | |||||
| // List<WxCouponSendInject> list1 = wxCouponSendInjectMapper.findList(sendInject); | |||||
| // sendSMS(tenantEntity,list1,"0.5元购大桶爆米花"); | |||||
| // | |||||
| // sendInject.setCouponId(698842872011190272l); | |||||
| // | |||||
| // List<WxCouponSendInject> list2 = wxCouponSendInjectMapper.findList(sendInject); | |||||
| // sendSMS(tenantEntity,list2,"9.9元购普通厅单人观影票"); | |||||
| // | |||||
| // sendInject.setCouponId(698843398773829632l); | |||||
| // | |||||
| // List<WxCouponSendInject> list3 = wxCouponSendInjectMapper.findList(sendInject); | |||||
| // sendSMS(tenantEntity,list3,"49.9元购双人欢乐套餐"); | |||||
| // | |||||
| // } | |||||
| // | |||||
| // | |||||
| // private void sendSMS(TenantEntity tenantEntity ,List<WxCouponSendInject> list1,String couponTitle) { | |||||
| // | |||||
| // String validDate = "2022年6月30日"; | |||||
| // try{ | |||||
| // if(list1 != null && list1.size() > 0){ | |||||
| // List<Long> userIds = list1.stream().map(s -> s.getUserId()).collect(toList()); | |||||
| // WxCUserBasicInfo cUserBasicInfoQ = new WxCUserBasicInfo(); | |||||
| // cUserBasicInfoQ.setFinalTenantId(tenantEntity.getFinalTenantId()); | |||||
| // cUserBasicInfoQ.setIds(userIds); | |||||
| // List<WxCUserBasicInfo> listPhoneAndNameByIds = wxCUserBasicInfoMapper.findListPhoneAndNameByIds(cUserBasicInfoQ); | |||||
| // List<String> collect = listPhoneAndNameByIds.stream().map(u -> u.getPhone()).collect(toList()); | |||||
| // String phone = String.join(",", collect); | |||||
| // | |||||
| // | |||||
| // WxMsgConfig wxMsgConfig = new WxMsgConfig(); | |||||
| // wxMsgConfig.setSmsChannel(EnumSMSChannel.ALIYUN.getCode()); | |||||
| // Map<String, String> dynamicContentMap = new HashMap<>(); | |||||
| // dynamicContentMap.put("couponTitle",couponTitle); | |||||
| // dynamicContentMap.put("validDate",validDate); | |||||
| // String result = SMSFactory.sendSms(wxMsgConfig, phone, "富茂", null, | |||||
| // null, null, JSON.toJSONString(dynamicContentMap), | |||||
| // "SMS_243651558",null); | |||||
| // | |||||
| // JSONObject jsonObjectResult = JSONObject.parseObject(result); | |||||
| // String ret = jsonObjectResult.get("ret").toString(); | |||||
| // String batchNo = jsonObjectResult.get("data").toString(); | |||||
| // if (ret.equals("1")) { | |||||
| // wxCouponSendInjectMapper.updateMsgByUserIds(userIds); | |||||
| // | |||||
| // }else{ | |||||
| // logger.error("发短信失败 couponId="+couponTitle); | |||||
| // } | |||||
| // | |||||
| // } | |||||
| // }catch(Exception e){ | |||||
| // logger.error("发短信失败 couponId="+couponTitle+e.getMessage()); | |||||
| // } | |||||
| // | |||||
| // } | |||||
| //} | |||||