admin
2020-05-20 98b1a0affd69bbe63223c21fdd2c404e8bedfccb
fanli/src/main/java/com/yeshi/fanli/service/impl/push/PushCouponServiceImpl.java
@@ -1,22 +1,29 @@
package com.yeshi.fanli.service.impl.push;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.Date;
import java.util.List;
import javax.annotation.Resource;
import javax.transaction.Transactional;
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;
import com.yeshi.fanli.dao.mybatis.push.PushCouponMapper;
import com.yeshi.fanli.entity.bus.user.UserSystemCoupon;
import com.yeshi.fanli.entity.push.PushCoupon;
import com.yeshi.fanli.exception.PushException;
import com.yeshi.fanli.entity.push.PushCouponRecord;
import com.yeshi.fanli.exception.push.PushCouponException;
import com.yeshi.fanli.exception.push.PushException;
import com.yeshi.fanli.service.inter.config.ConfigService;
import com.yeshi.fanli.service.inter.push.PushCouponRecordService;
import com.yeshi.fanli.service.inter.push.PushCouponService;
import com.yeshi.fanli.service.inter.push.PushService;
import com.yeshi.fanli.service.inter.user.UserSystemCouponService;
import com.yeshi.fanli.util.StringUtil;
import net.sf.json.JSONObject;
@Service
public class PushCouponServiceImpl implements PushCouponService {
@@ -32,6 +39,9 @@
   
   @Resource
   private PushCouponRecordService pushCouponRecordService;
   @Resource
   private UserSystemCouponService userSystemCouponService;
   
   @Override
   public int deleteByPrimaryKey(Long id) {
@@ -75,60 +85,75 @@
   }
   @Override
   @Transactional
   public void save(PushCoupon record) throws PushCouponException {
   @Transactional(rollbackFor=Exception.class)
   public void save(PushCoupon record) throws PushCouponException,Exception {
      if (record == null) {
         throw new PushCouponException(1, "参数不正确");
      }
      String title = record.getTitle();
      String content = record.getContent();
      if (title == null || title.trim().length() == 0 || content == null || content.trim().length() == 0) {
         throw new PushCouponException(1, "标题或内容不能为空");
      String uids = record.getUids();
      if (StringUtil.isNullOrEmpty(uids)) {
         throw new PushCouponException(1, "发放用户不能为空");
      }
      Date startTime = record.getStartTime();
      Date endTime = record.getEndTime();
      if (startTime == null || endTime == null) {
         throw new PushCouponException(1, "有效期时间不能为空");
      }
      Integer amount = record.getAmount();
      if (amount == null || amount < 1) {
         throw new PushCouponException(1, "券数量不能小于1");
      if (amount == null) {
         throw new PushCouponException(1, "券数量不能为空");
      } else if (amount < 1 || amount > 5) {
         throw new PushCouponException(1, "券数量范围是 1~5");
      }
      Long id = record.getId();
      if (id == null) {
         // 新增
         record.setPushed(false);
         record.setCreateTime(new Date());
         record.setUpdateTime(new Date());
         // 插入数据
         insert(record);
      } else {
         // 修改
         PushCoupon current = selectByPrimaryKey(id);
         if (current == null) {
            throw new PushCouponException(1, "该记录已不存在");
         pushCouponMapper.insert(record);
         String[] uidArray = uids.split(",");
         if (uidArray != null) {
            for (int i = 0; i < uidArray.length; i++) {
               Long uid = Long.parseLong(uidArray[i]);
               // 插入记录
               PushCouponRecord pushCouponRecord = new PushCouponRecord();
               pushCouponRecord.setPushCoupon(record);
               pushCouponRecord.setUid(uid);
               pushCouponRecord.setCreateTime(new Date());
               // 插入领取记录
               //pushCouponRecordService.insertSelective(pushCouponRecord);
               // 直接发送券
               //userSystemCouponService.randomRewardCoupon(amount, uid, UserSystemCoupon.SOURCE_SYSTEM_PUSH);
            }
         }
         current.setTitle(title);
         current.setContent(content);
         current.setAmount(amount);
         current.setStartTime(startTime);
         current.setEndTime(endTime);
         current.setUids(record.getUids());
         current.setRemark(record.getRemark());
         // 更新数据
         updateByPrimaryKey(current);
      } else {
//
//         // 修改
//         PushCoupon current = selectByPrimaryKey(id);
//         if (current == null) {
//            throw new PushCouponException(1, "该记录已不存在");
//         }
//
//         if(current.isPushed()) {
//            throw new PushCouponException(1, "已推送的信息不能修改");
//         }
//         current.setAmount(amount);
//         current.setUids(record.getUids());
//         current.setRemark(record.getRemark());
//         current.setUpdateTime(new Date());
//         // 更新数据
//         updateByPrimaryKey(current);
      }
   }
   @Override
   @Transactional
   @Transactional(rollbackFor=Exception.class)
   public void executePush(Long id) throws Exception, PushCouponException, PushException {
      PushCoupon pushCoupon = selectByPrimaryKey(id);
@@ -139,6 +164,10 @@
      if(pushCoupon.isPushed()) {
         throw new PushCouponException(1, "该信息不能重复推送");
      }
      String versions = pushCoupon.getVersions();
      if (versions == null || versions.trim().length() == 0 ) {
         throw new PushCouponException(1, "推送版本不能为空");
      }
      
      String title = pushCoupon.getTitle();
@@ -147,29 +176,49 @@
         throw new PushCouponException(1, "标题或内容不能为空");
      }
      
      List<String> listVersion = null;
      String versions = pushCoupon.getVersions();
      if (versions != null && versions.trim().length() > 0) {
         listVersion  = Arrays.asList(versions.split(","));
      }
      List<String> listuid = null;
      String uids = pushCoupon.getUids();
      if (uids == null || uids.trim().length() == 0) {
      if (uids != null && uids.trim().length() > 0) {
         listuid = Arrays.asList(uids.split(","));
         if (listuid == null || listuid.size() == 0) {
            throw new PushCouponException(1, "用户id格式不正确");
         }
      }
      List<String> listIOS = new ArrayList<String>();
      JSONObject json = JSONObject.fromObject(versions);
      String versionsIOS = json.getString("IOS");
      if (versionsIOS != null && versionsIOS.trim().length() > 0) {
         if (versionsIOS.contains("全推")) {
            listIOS = null;
         } else {
            listIOS = Arrays.asList(versionsIOS.split(","));
         }
      }
      List<String> listAndroid = new ArrayList<String>();
      String versionsAndroid  = json.getString("Android");
      if (versionsAndroid != null && versionsAndroid.trim().length() > 0) {
         if (versionsAndroid.contains("全推")) {
            listAndroid = null;
         } else {
            listAndroid = Arrays.asList(versionsAndroid.split(","));
         }
      }
      if (listuid == null) {
         // 全推
         pushService.pushWelfareCenter(null, title, content, listVersion);
         pushService.pushWelfareCenter(null, title, content, listIOS, listAndroid);
         
      } else {
         // 指定用户推送
         String[] uidArray = uids.split(",");
         if (uidArray != null) {
            for (int i = 0; i < uidArray.length; i++) {
               String str_uid = uidArray[i];
               if (str_uid != null && str_uid.trim().length() > 0) {
                  pushService.pushWelfareCenter(Long.parseLong(str_uid), title, content, listVersion);
               }
         for (String str_uid: listuid) {
            if (str_uid != null && str_uid.trim().length() > 0) {
               pushService.pushWelfareCenter(Long.parseLong(str_uid), title, content, listIOS, listAndroid);
            }
         }
      }
      
      // 已推送
@@ -192,6 +241,7 @@
      
      for (Long id: list) {
         long receivedCount = pushCouponRecordService.countByPushId(id);
         // 领取数量
         if (receivedCount > 0) {
            continue;
         }