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);
|
}
|
|
}
|