admin
2024-10-16 62a447d89331aee1feae7724c7616aa1bb2cfe79
fanli/src/main/java/com/yeshi/fanli/service/impl/push/PushCouponServiceImpl.java
@@ -1,250 +1,253 @@
package com.yeshi.fanli.service.impl.push;
import java.math.BigDecimal;
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 com.yeshi.fanli.dao.mybatis.push.PushCouponMapper;
import com.yeshi.fanli.entity.push.PushCoupon;
import com.yeshi.fanli.exception.PushException;
import com.yeshi.fanli.exception.push.PushCouponException;
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 net.sf.json.JSONObject;
@Service
public class PushCouponServiceImpl implements PushCouponService {
   @Resource
   private PushService pushService;
   @Resource
   private ConfigService configService;
   @Resource
   private PushCouponMapper pushCouponMapper;
   @Resource
   private PushCouponRecordService pushCouponRecordService;
   @Override
   public int deleteByPrimaryKey(Long id) {
      return pushCouponMapper.deleteByPrimaryKey(id);
   }
   @Override
   public int insert(PushCoupon record) {
      return pushCouponMapper.insert(record);
   }
   @Override
   public int insertSelective(PushCoupon record) {
      return pushCouponMapper.insertSelective(record);
   }
   @Override
   public PushCoupon selectByPrimaryKey(Long id) {
      return pushCouponMapper.selectByPrimaryKey(id);
   }
   @Override
   public int updateByPrimaryKeySelective(PushCoupon record) {
      return pushCouponMapper.updateByPrimaryKeySelective(record);
   }
   @Override
   public int updateByPrimaryKey(PushCoupon record) {
      return pushCouponMapper.updateByPrimaryKey(record);
   }
   @Override
   public List<PushCoupon> listQuery(long start, int count, String key, Integer state) {
      return pushCouponMapper.listQuery(start, count, key, state);
   }
   @Override
   public long countQuery(String key, Integer state) {
      return pushCouponMapper.countQuery(key, state);
   }
   @Override
   @Transactional
   public void save(PushCoupon record) throws PushCouponException {
      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, "标题或内容不能为空");
      }
      Date startTime = record.getStartTime();
      Date endTime = record.getEndTime();
      if (startTime == null || endTime == null) {
         throw new PushCouponException(1, "有效期时间不能为空");
      }
      Integer amount = record.getAmount();
      if (amount == null) {
         throw new PushCouponException(1, "券数量不能为空");
      } else if (amount < 1 || amount > 5) {
         throw new PushCouponException(1, "券数量范围是 1~5");
      }
      BigDecimal percent = record.getPercent();
      if (percent != null && (percent.compareTo(new BigDecimal(60)) > 0
            || percent.compareTo(new BigDecimal(1)) < 0)) {
         throw new PushCouponException(1, "券比例范围是1~60 的正整数");
      }
      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, "该记录已不存在");
         }
         if(current.isPushed()) {
            throw new PushCouponException(1, "已推送的信息不能修改");
         }
         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);
      }
   }
   @Override
   @Transactional
   public void executePush(Long id) throws Exception, PushCouponException, PushException {
      PushCoupon pushCoupon = selectByPrimaryKey(id);
      if (pushCoupon == null) {
         throw new PushCouponException(1, "推送信息已不存在");
      }
      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();
      String content = pushCoupon.getContent();
      if (title == null || title.trim().length() == 0 || content == null || content.trim().length() == 0) {
         throw new PushCouponException(1, "标题或内容不能为空");
      }
      List<String> listuid = null;
      String uids = pushCoupon.getUids();
      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, listIOS, listAndroid);
      } else {
         // 指定用户推送
         for (String str_uid: listuid) {
            if (str_uid != null && str_uid.trim().length() > 0) {
               pushService.pushWelfareCenter(Long.parseLong(str_uid), title, content, listIOS, listAndroid);
            }
         }
      }
      // 已推送
      pushCoupon.setPushed(true);
      // 推送时间
      pushCoupon.setPushTime(new Date());
      // 更新时间
      pushCoupon.setUpdateTime(new Date());
      updateByPrimaryKeySelective(pushCoupon);
   }
   @Override
   @Transactional
   public void deleteBatchByPrimaryKey(List<Long> list) {
      if (list == null || list.size() == 0) {
         return;
      }
      for (Long id: list) {
         long receivedCount = pushCouponRecordService.countByPushId(id);
         // 领取数量
         if (receivedCount > 0) {
            continue;
         }
         pushCouponMapper.deleteByPrimaryKey(id);
      }
   }
   @Override
   public List<PushCoupon> listQueryEffective() {
      return pushCouponMapper.listQueryEffective();
   }
}
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 com.yeshi.fanli.entity.SystemEnum;
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.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 {
    @Resource
    private PushService pushService;
    @Resource
    private PushCouponMapper pushCouponMapper;
    @Resource
    private PushCouponRecordService pushCouponRecordService;
    @Override
    public int deleteByPrimaryKey(Long id) {
        return pushCouponMapper.deleteByPrimaryKey(id);
    }
    @Override
    public int insert(PushCoupon record) {
        return pushCouponMapper.insert(record);
    }
    @Override
    public int insertSelective(PushCoupon record) {
        return pushCouponMapper.insertSelective(record);
    }
    @Override
    public PushCoupon selectByPrimaryKey(Long id) {
        return pushCouponMapper.selectByPrimaryKey(id);
    }
    @Override
    public int updateByPrimaryKeySelective(PushCoupon record) {
        return pushCouponMapper.updateByPrimaryKeySelective(record);
    }
    @Override
    public int updateByPrimaryKey(PushCoupon record) {
        return pushCouponMapper.updateByPrimaryKey(record);
    }
    @Override
    public List<PushCoupon> listQuery(long start, int count, String key, Integer state, SystemEnum system) {
        return pushCouponMapper.listQuery(start, count, key, state, system);
    }
    @Override
    public long countQuery(String key, Integer state, SystemEnum system) {
        return pushCouponMapper.countQuery(key, state, system);
    }
    @Override
    @Transactional(rollbackFor = Exception.class)
    public void save(PushCoupon record) throws PushCouponException, Exception {
        if (record == null) {
            throw new PushCouponException(1, "参数不正确");
        }
        String uids = record.getUids();
        if (StringUtil.isNullOrEmpty(uids)) {
            throw new PushCouponException(1, "发放用户不能为空");
        }
        Integer amount = record.getAmount();
        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.setCreateTime(new Date());
            record.setUpdateTime(new Date());
            // 插入数据
            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);
                }
            }
        } 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(rollbackFor = Exception.class)
    public void executePush(Long id) throws Exception, PushCouponException, PushException {
        PushCoupon pushCoupon = selectByPrimaryKey(id);
        if (pushCoupon == null) {
            throw new PushCouponException(1, "推送信息已不存在");
        }
        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();
        String content = pushCoupon.getContent();
        if (title == null || title.trim().length() == 0 || content == null || content.trim().length() == 0) {
            throw new PushCouponException(1, "标题或内容不能为空");
        }
        List<String> listuid = null;
        String uids = pushCoupon.getUids();
        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, listIOS, listAndroid, pushCoupon.getSystem());
        } else {
            // 指定用户推送
            for (String str_uid : listuid) {
                if (str_uid != null && str_uid.trim().length() > 0) {
                    pushService.pushWelfareCenter(Long.parseLong(str_uid), title, content, listIOS, listAndroid, pushCoupon.getSystem());
                }
            }
        }
        // 已推送
        pushCoupon.setPushed(true);
        // 推送时间
        pushCoupon.setPushTime(new Date());
        // 更新时间
        pushCoupon.setUpdateTime(new Date());
        updateByPrimaryKeySelective(pushCoupon);
    }
    @Override
    @Transactional
    public void deleteBatchByPrimaryKey(List<Long> list) {
        if (list == null || list.size() == 0) {
            return;
        }
        for (Long id : list) {
            long receivedCount = pushCouponRecordService.countByPushId(id);
            // 领取数量
            if (receivedCount > 0) {
                continue;
            }
            pushCouponMapper.deleteByPrimaryKey(id);
        }
    }
    @Override
    public List<PushCoupon> listQueryEffective(SystemEnum system) {
        return pushCouponMapper.listQueryEffective(system);
    }
}