| @@ -96,7 +96,7 @@ public class WxMerchantBUserController extends BaseController { | |||
| return new ResultData(resultMap); | |||
| } | |||
| /** | |||
| * 用户登录 | |||
| @@ -1,11 +1,13 @@ | |||
| package com.iformall.schedule; | |||
| import com.alibaba.fastjson.JSONObject; | |||
| import com.iformall.common.ErrorCode; | |||
| import com.iformall.domain.dto.WxCUserBasicInfoDto; | |||
| import com.iformall.domain.po.*; | |||
| import com.iformall.domain.vo.WxCouponSendVo; | |||
| import com.iformall.enums.EnumCouponSendSendType; | |||
| import com.iformall.enums.EnumCouponSendStatus; | |||
| import com.iformall.exception.MallinkException; | |||
| import com.iformall.mapper.*; | |||
| import com.iformall.service.WxCouponActionLogService; | |||
| import com.iformall.service.WxCouponSendService; | |||
| @@ -18,9 +20,11 @@ import org.springframework.beans.factory.annotation.Autowired; | |||
| import org.springframework.scheduling.annotation.Scheduled; | |||
| import org.springframework.stereotype.Component; | |||
| import java.util.Comparator; | |||
| import java.util.Iterator; | |||
| import java.util.List; | |||
| 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; | |||
| @Component | |||
| @@ -43,6 +47,9 @@ public class CouponSendSchedule { | |||
| @Autowired | |||
| private WxCouponSendMapper wxCouponSendMapper; | |||
| @Autowired | |||
| private WxCouponActionLogMapper wxCouponActionLogMapper; | |||
| @Autowired | |||
| private WxOrderService wxOrderService; | |||
| @@ -61,6 +68,17 @@ public class CouponSendSchedule { | |||
| return; | |||
| } | |||
| Date startTime = Date.from(LocalDateTime.now() | |||
| .with(TemporalAdjusters.firstDayOfMonth()) | |||
| .with(LocalTime.MIN) | |||
| .atZone(ZoneId.systemDefault()) | |||
| .toInstant()); | |||
| Date endTime = Date.from(LocalDateTime.now() | |||
| .with(TemporalAdjusters.lastDayOfMonth()) | |||
| .with(LocalTime.MAX) | |||
| .atZone(ZoneId.systemDefault()) | |||
| .toInstant()); | |||
| mallList.stream().forEach(mall-> { | |||
| WxLevelConfig wxLevelConfig = new WxLevelConfig(); | |||
| @@ -95,8 +113,8 @@ public class CouponSendSchedule { | |||
| List<WxCouponSendVo> couponSendList = wxCouponSendMapper.findListVo(wxCouponSend); | |||
| couponSendList.stream().forEach(cs->{ | |||
| if (cs.getRemainInventory() < sendCount){ | |||
| logger.error("定时发券:库存不足 levelId="+ l.getId() +"couponId="+ cs.getCouponId()); | |||
| return; //下一个券 | |||
| logger.error("定时发券:库存不足 levelId="+ l.getId() +" couponId="+ cs.getCouponId()); | |||
| return; //下一个券 | |||
| } | |||
| WxCUserBasicInfoDto wxCUserBasicInfoDto = new WxCUserBasicInfoDto(); | |||
| wxCUserBasicInfoDto.setTenantId(l.getTenantId()); | |||
| @@ -106,11 +124,23 @@ public class CouponSendSchedule { | |||
| wxCUserBasicInfoList.stream().forEach(cu->{ | |||
| if (cs.getRemainInventory() < sendCount){ | |||
| logger.error("定时发券:库存不足 levelId="+ l.getId() +"couponId="+ cs.getCouponId()+"userId="+cu.getId()); | |||
| logger.error("定时发券:库存不足 levelId="+ l.getId() +" couponId="+ cs.getCouponId()+"userId="+cu.getId()); | |||
| return; //下一个券 | |||
| } | |||
| for (int count = 0; count<sendCount; count++) { | |||
| Map params = new HashMap<String, Object>(); | |||
| params.put("tenantId", cs.getTenantId()); | |||
| params.put("cUserId", cu.getId()); | |||
| params.put("couponId", cs.getCouponId()); | |||
| params.put("startTime", startTime); | |||
| params.put("endTime", endTime ); | |||
| int sentCount = wxCouponActionLogMapper.getCountByUserAndCouponAndDate(params); | |||
| logger.info("定时发券:给["+ cu.getNickName() + | |||
| "]已发送券[" + cs.getTitle() + "] " + | |||
| sentCount +"张,还需发"+ (sendCount-sentCount) +"张"); | |||
| for (int count = 0; count<sendCount-sentCount; count++) { | |||
| // 发放免费券 | |||
| try { | |||
| WxCouponOrder couponOrder = wxOrderService.sendFreeCouponToUser(cu.getId(), cs.getCouponId()); | |||
| @@ -122,9 +152,10 @@ public class CouponSendSchedule { | |||
| logger.info("定时发券:商场[" + mall.getName() + | |||
| "]会员等级[" + l.getLevel() + | |||
| "]发送券" + cs.getTitle() + | |||
| "]给[" + cu.getNickName() + | |||
| "] 电话:" + cu.getPhone() + "id:" + cu.getId()); | |||
| "]发送券[" + cs.getTitle() + | |||
| "]给:" + cu.getNickName() + | |||
| " 电话-" + cu.getPhone() + | |||
| " id-" + cu.getId()); | |||
| } | |||
| }); | |||
| }); | |||
| @@ -70,6 +70,9 @@ public class WxLevelConfig implements Serializable { | |||
| @Transient | |||
| protected Long count; | |||
| @Transient | |||
| protected Long userCount; | |||
| public String getTenantId() { | |||
| return tenantId; | |||
| } | |||
| @@ -135,6 +138,14 @@ public class WxLevelConfig implements Serializable { | |||
| this.capability = capability; | |||
| } | |||
| public Long getUserCount() { | |||
| return userCount; | |||
| } | |||
| public void setUserCount(Long userCount) { | |||
| this.userCount = userCount; | |||
| } | |||
| public static enum Field | |||
| { | |||
| Id_ASC("`id` ASC"),Id_DESC("`id` DESC") | |||
| @@ -10,14 +10,6 @@ import com.iformall.domain.po.WxCouponActionLog; | |||
| public interface WxCouponActionLogMapper extends CommonMapper<WxCouponActionLog, String> { | |||
| List<WxCouponActionLog> findList(WxCouponActionLog wxCouponActionLog); | |||
| /** | |||
| * 查询场景投放发券数 | |||
| * @param tenantId | |||
| * @param startTime | |||
| * @param endTime | |||
| * @return | |||
| */ | |||
| int findCountByDateLimit(@Param("tenantId")String tenantId,@Param("startTime") Date startTime,@Param("endTime")Date endTime); | |||
| List<MarkingSceneDataReportVo> sceneDataMap(HashMap<String,Object> params); | |||
| @@ -27,6 +19,15 @@ public interface WxCouponActionLogMapper extends CommonMapper<WxCouponActionLog, | |||
| List<MarkingSceneDataReportVo> sceneDataJoinCouponOrderList(HashMap<String,Object> params); | |||
| /** | |||
| * 查询场景投放发券数 | |||
| * @param tenantId | |||
| * @param startTime | |||
| * @param endTime | |||
| * @return | |||
| */ | |||
| int getCountByDateLimit(@Param("tenantId")String tenantId,@Param("startTime") Date startTime,@Param("endTime")Date endTime); | |||
| int getCountByChannelId(@Param("tenantId")String tenantId,@Param("channelType") int channelType,@Param("channelId")Long channelId); | |||
| @@ -44,4 +45,6 @@ public interface WxCouponActionLogMapper extends CommonMapper<WxCouponActionLog, | |||
| */ | |||
| int getCountByUserAndCoupon(Map<String,Object> params); | |||
| int getCountByUserAndCouponAndDate(Map<String,Object> params); | |||
| } | |||
| @@ -128,9 +128,9 @@ public class MarkingDataReportServiceImpl implements MarkingDataReportService { | |||
| @Override | |||
| public Map<String, Object> getSceneData(String tenantId) { | |||
| //今日营销投放券数 | |||
| int todaySceneCount = wxCouponActionLogMapper.findCountByDateLimit(tenantId, addDay(0), addDay(1)); | |||
| int yesterdayCount = wxCouponActionLogMapper.findCountByDateLimit(tenantId, addDay(-1), addDay(0)); | |||
| int lastWeekCount = wxCouponActionLogMapper.findCountByDateLimit(tenantId, addDay(-7), addDay(-6)); | |||
| int todaySceneCount = wxCouponActionLogMapper.getCountByDateLimit(tenantId, addDay(0), addDay(1)); | |||
| int yesterdayCount = wxCouponActionLogMapper.getCountByDateLimit(tenantId, addDay(-1), addDay(0)); | |||
| int lastWeekCount = wxCouponActionLogMapper.getCountByDateLimit(tenantId, addDay(-7), addDay(-6)); | |||
| NumberFormat nf = NumberFormat.getPercentInstance(); | |||
| nf.setMinimumFractionDigits(2);//控制保留小数点后几位,2:表示保留2位小数点 | |||
| @@ -3,9 +3,11 @@ package com.iformall.service.impl; | |||
| import com.alibaba.fastjson.JSONObject; | |||
| import com.github.pagehelper.PageHelper; | |||
| import com.github.pagehelper.PageInfo; | |||
| import com.iformall.domain.dto.WxCUserBasicInfoDto; | |||
| import com.iformall.domain.po.WxLevelConfig; | |||
| import com.iformall.domain.po.WxLevelMerchant; | |||
| import com.iformall.domain.vo.WxLevelMerchantCVo; | |||
| import com.iformall.mapper.WxCUserBasicInfoMapper; | |||
| import com.iformall.mapper.WxLevelConfigMapper; | |||
| import com.iformall.mapper.WxLevelMerchantMapper; | |||
| import com.iformall.service.WxLevelConfigService; | |||
| @@ -28,17 +30,32 @@ public class WxLevelConfigServiceImpl implements WxLevelConfigService { | |||
| @Autowired | |||
| WxLevelMerchantMapper wxLevelMerchantapper; | |||
| @Autowired | |||
| WxCUserBasicInfoMapper wxCUserBasicInfoMapper; | |||
| @Override | |||
| public PageInfo<WxLevelConfig> listAsPage(WxLevelConfig record, Integer pageIndex, Integer pageSize) { | |||
| PageInfo<WxLevelConfig> page = PageHelper.startPage(pageIndex, pageSize).doSelectPageInfo(() -> wxLevelConfigMapper.findList(record)); | |||
| page.getList().stream().forEach(l->{ | |||
| for (int i=0;i<page.getList().size();i++) | |||
| { | |||
| WxLevelConfig l = page.getList().get(i); | |||
| if (l.getCapability()!= null){ | |||
| JSONObject jo = JSONObject.parseObject(l.getCapability()); | |||
| l.setCount(jo.getLong(CAPABILITY_SEND_CAR_COUPON)); | |||
| }else { | |||
| l.setCount(0L); | |||
| } | |||
| }); | |||
| WxCUserBasicInfoDto dto = new WxCUserBasicInfoDto(); | |||
| dto.setTenantId(l.getTenantId()); | |||
| dto.setLevelStartScore(l.getPoints()); | |||
| if (i + 1<page.getList().size()) | |||
| dto.setLevelEndScore(page.getList().get(i+1).getPoints()); | |||
| l.setUserCount(wxCUserBasicInfoMapper.findCountByScore(dto)); | |||
| } | |||
| return page; | |||
| } | |||
| @@ -72,15 +72,6 @@ | |||
| <include refid="dynamicWhereConditions" /> | |||
| </select> | |||
| <select id="findCountByDateLimit" resultType="java.lang.Integer"> | |||
| select COUNT(*) FROM wx_coupon_action_log | |||
| where tenant_id = #{tenantId} | |||
| and `channel_type` != 0 | |||
| and `channel_type` != 1 | |||
| and `create_time` >= #{startTime} | |||
| and `create_time` <= #{endTime} | |||
| </select> | |||
| <select id="sceneDataMap" resultType="com.iformall.domain.vo.MarkingSceneDataReportVo" parameterType="hashmap"> | |||
| select DATE_FORMAT(create_time,'%m/%d') as xTime, | |||
| (select Count(*) from wx_coupon_action_log c | |||
| @@ -155,6 +146,15 @@ | |||
| </select> | |||
| <select id="getCountByDateLimit" resultType="java.lang.Integer"> | |||
| select COUNT(*) FROM wx_coupon_action_log | |||
| where tenant_id = #{tenantId} | |||
| and `channel_type` != 0 | |||
| and `channel_type` != 1 | |||
| and `create_time` >= #{startTime} | |||
| and `create_time` <= #{endTime} | |||
| </select> | |||
| <select id="getCountByChannelId" resultType="java.lang.Integer"> | |||
| select COUNT(*) FROM wx_coupon_action_log | |||
| where tenant_id = #{tenantId} | |||
| @@ -181,4 +181,15 @@ | |||
| AND date(a.create_time) between date_sub(curdate(),interval #{dayNum} day) and curdate() | |||
| </select> | |||
| <select id="getCountByUserAndCouponAndDate" resultType="java.lang.Integer" parameterType="hashmap"> | |||
| select COUNT(*) | |||
| FROM wx_coupon_action_log a, wx_coupon_order o | |||
| WHERE a.coupon_order_id = o.id | |||
| AND a.tenant_id = #{tenantId} | |||
| AND o.c_user_id = #{cUserId} | |||
| AND a.coupon_id = #{couponId} | |||
| and a.create_time >= #{startTime} | |||
| and a.create_time <= #{endTime} | |||
| </select> | |||
| </mapper> | |||