| | |
| | |
|
| | | import javax.annotation.Resource;
|
| | |
|
| | | import org.springframework.core.task.TaskExecutor;
|
| | | import org.springframework.stereotype.Service;
|
| | | import org.springframework.transaction.annotation.Transactional;
|
| | | import org.yeshi.utils.DateUtil;
|
| | |
| | | import com.yeshi.fanli.entity.order.CommonOrder;
|
| | | import com.yeshi.fanli.entity.system.SystemCoupon;
|
| | | import com.yeshi.fanli.entity.system.SystemCoupon.CouponTypeEnum;
|
| | | import com.yeshi.fanli.exception.user.UserInfoExtraException;
|
| | | import com.yeshi.fanli.exception.user.UserSystemCouponException;
|
| | | import com.yeshi.fanli.log.LogHelper;
|
| | | import com.yeshi.fanli.service.inter.common.JumpDetailV2Service;
|
| | |
| | | @Service
|
| | | public class UserSystemCouponServiceImpl implements UserSystemCouponService {
|
| | |
|
| | | @Resource(name = "taskExecutor")
|
| | | private TaskExecutor executor;
|
| | | |
| | | @Resource
|
| | | private UserSystemCouponMapper userSystemCouponMapper;
|
| | |
|
| | |
| | | // 插入数据库
|
| | | insertSelective(userCoupon);
|
| | |
|
| | | executor.execute(new Runnable() {
|
| | | @Override
|
| | | public void run() {
|
| | | UserInfoExtra userInfoExtra = userInfoExtraService.getUserInfoExtra(uid);
|
| | | // 添加一条消息
|
| | | if (userInfoExtra != null) {
|
| | | userInfoExtra.setCouponNews(userInfoExtra.getCouponNews() + 1);
|
| | | try {
|
| | | userInfoExtraService.saveUserInfoExtra(userInfoExtra);
|
| | | } catch (UserInfoExtraException e) {
|
| | | e.printStackTrace();
|
| | | }
|
| | | }
|
| | | |
| | | }
|
| | | });
|
| | |
|
| | | // 消息推送
|
| | | try {
|
| | |
| | | // 更新过期券
|
| | | updateCounponInvalid(uid);
|
| | | // 退回券
|
| | | sendBackCoupon(uid);
|
| | | sendBackTimeOutCoupon(uid);
|
| | |
|
| | | List<UserSystemCouponVO> listVO = userSystemCouponMapper.getUserCouponVOList(start, count, uid);
|
| | | if (listVO == null || listVO.size() == 0) {
|
| | |
| | | // 更新过期券
|
| | | updateCounponInvalid(uid);
|
| | | // 退回券
|
| | | sendBackCoupon(uid);
|
| | | sendBackTimeOutCoupon(uid);
|
| | |
|
| | | // 订单相关的券
|
| | | List<SystemCoupon> couponList = systemCouponService.getOrderCouponList();
|
| | |
| | | // 更新过期券
|
| | | updateCounponInvalid(uid);
|
| | | // 退回券
|
| | | sendBackCoupon(uid);
|
| | | sendBackTimeOutCoupon(uid);
|
| | |
|
| | | // 商品相关的券
|
| | | List<SystemCoupon> couponList = systemCouponService.getGoodsCouponList();
|
| | |
| | | }
|
| | |
|
| | | // 获取奖励金额
|
| | | Map<String, BigDecimal> map = orderHongBaoMapService.getCouponHongbaoByOrderNo(orderNo, uid);
|
| | |
|
| | | BigDecimal couponMoney = orderHongBaoMapService.getCouponHongbaoByOrderNo(orderNo, uid);
|
| | | |
| | | UserSystemCouponRecordVO userRecordVO = new UserSystemCouponRecordVO();
|
| | | userRecordVO.setCouponMoneyState("已到账");
|
| | | userRecordVO.setCommonOrder(commonOrderVO);
|
| | | userRecordVO.setCouponName("奖励金: ¥" + map.get("couponMoney").setScale(2, BigDecimal.ROUND_DOWN));
|
| | | userRecordVO.setCouponName("奖励金: ¥" + couponMoney.setScale(2, BigDecimal.ROUND_DOWN));
|
| | |
|
| | | // 比例
|
| | | BigDecimal percent = baseCoupon.getPercent();
|
| | | BigDecimal hongBao = map.get("totalMoney").setScale(2, BigDecimal.ROUND_DOWN);
|
| | | userRecordVO.setCouponEffect("返利¥" + hongBao + "已返" + percent + "%");
|
| | | BigDecimal hongBao = commonOrderVO.getHongBao();
|
| | | if (hongBao == null) {
|
| | | hongBao = new BigDecimal(0);
|
| | | }
|
| | | userRecordVO.setCouponEffect("返利¥" + hongBao.setScale(2, BigDecimal.ROUND_DOWN) + "已返" + percent + "%");
|
| | |
|
| | | // 跳转福利中心
|
| | | JumpDetailV2 welfareCore = jumpDetailV2Service.getByTypeCache("welfareCore");
|
| | |
| | | if (systemCoupon == null) {
|
| | | return;
|
| | | }
|
| | | // 激活福利免单券
|
| | | userSystemCouponMapper.activateCouponByType(uid, systemCoupon.getId());
|
| | | |
| | | // 待活福利免单券
|
| | | List<UserSystemCoupon> list = userSystemCouponMapper.getCouponByTypeAndNotActivated(uid, systemCoupon.getId());
|
| | | if (list == null || list.size() == 0) {
|
| | | return;
|
| | | }
|
| | | |
| | | for (UserSystemCoupon userSystemCoupon: list) {
|
| | | // 激活
|
| | | userSystemCoupon.setStateActivated(1);
|
| | | userSystemCoupon.setUpdateTime(new Date());
|
| | | userSystemCouponMapper.updateByPrimaryKeySelective(userSystemCoupon);
|
| | | |
| | | // 消息推送
|
| | | try {
|
| | | userOtherMsgNotificationService.welfareCouponGet(userSystemCoupon);
|
| | | } catch(Exception e) {
|
| | | try {
|
| | | LogHelper.errorDetailInfo(e);
|
| | | } catch (Exception e1) {
|
| | | e1.printStackTrace();
|
| | | }
|
| | | }
|
| | | }
|
| | | }
|
| | |
|
| | | @Override
|
| | | public void updateStateByDrawback(String orderNo) throws Exception {
|
| | | |
| | | if (orderNo == null || orderNo.trim().length() == 0) {
|
| | | return;
|
| | | }
|
| | |
|
| | | UserSystemCouponRecord record = userSystemCouponRecordService.getRecordByOrderNo(orderNo, null);
|
| | | if (record == null) {
|
| | | return;
|
| | | }
|
| | | |
| | | record.setOrderNo(orderNo);
|
| | | record.setUpdateTime(new Date());
|
| | | record.setState(UserSystemCouponRecord.STATE_FAIL_DRAWBACK);
|
| | | userSystemCouponRecordService.updateByPrimaryKeySelective(record);
|
| | | |
| | | // 券退回
|
| | | sendBackCoupon(record.getUserSystemCoupon());
|
| | | }
|
| | | |
| | | @Override
|
| | | public void updateStateByArrivalAccount(String orderNo) throws Exception {
|
| | | |
| | | if (orderNo == null || orderNo.trim().length() == 0) {
|
| | | return;
|
| | | }
|
| | |
|
| | | UserSystemCouponRecord record = userSystemCouponRecordService.getRecordByOrderNo(orderNo, 2);
|
| | | if (record == null) {
|
| | | return;
|
| | | }
|
| | | |
| | | record.setOrderNo(orderNo);
|
| | | record.setUpdateTime(new Date());
|
| | | record.setState(UserSystemCouponRecord.STATE_SUCCESS);
|
| | | userSystemCouponRecordService.updateByPrimaryKeySelective(record);
|
| | | }
|
| | |
|
| | | @Override
|
| | | public void updateCounponInvalid(Long uid) {
|
| | |
| | | }
|
| | |
|
| | | @Override
|
| | | public void sendBackCoupon(Long uid) {
|
| | | public void sendBackTimeOutCoupon(Long uid) {
|
| | | // 超过120秒 未被匹配的券
|
| | | List<UserSystemCouponRecord> list = userSystemCouponRecordService.getCouponByUsingTimeOut(uid, 120);
|
| | | List<UserSystemCouponRecord> list = userSystemCouponRecordService.getCouponByUsingTimeOut(uid, 120L);
|
| | | if (list == null || list.size() == 0) {
|
| | | return;
|
| | | }
|
| | |
| | | userSystemCouponRecordService.updateByPrimaryKeySelective(couponRecord);
|
| | |
|
| | | UserSystemCoupon userSystemCoupon = couponRecord.getUserSystemCoupon();
|
| | | // 状态初始化
|
| | | userSystemCoupon.setState(UserSystemCoupon.STATE_CAN_USE);
|
| | | userSystemCoupon.setUseTime(null);
|
| | |
|
| | | int expiryDay = 15;
|
| | |
|
| | |
| | | } catch (ParseException e) {
|
| | | e.printStackTrace();
|
| | | }
|
| | | |
| | | // 状态初始化
|
| | | userSystemCoupon.setState(UserSystemCoupon.STATE_CAN_USE);
|
| | | userSystemCoupon.setUseTime(null);
|
| | | |
| | | // 有效期时间重新定义
|
| | | userSystemCoupon.setStartTime(new Date());
|
| | | userSystemCoupon.setEndTime(endTime);
|
| | | userSystemCoupon.setUpdateTime(new Date());
|
| | | userSystemCouponMapper.updateByPrimaryKey(userSystemCoupon);
|
| | | }
|
| | | |
| | | }
|
| | |
|
| | | @Override
|
| | | public boolean updateCouponRecordUsed(Long uid, String orderNo, BigDecimal payment,
|
| | | Long auctionId) throws Exception{
|
| | | |
| | | boolean isfree = false;
|
| | | |
| | | if (uid == null || payment == null || auctionId == null || orderNo == null || |
| | | orderNo.trim().length() == 0 ) {
|
| | | throw new Exception("传递参数不能为空");
|
| | | }
|
| | | |
| | | // 查询等待匹配的券记录
|
| | | List<UserSystemCouponRecord> list = userSystemCouponRecordService.getRecordByState(uid, UserSystemCouponRecord.STATE_WAIT);
|
| | | if (list == null || list.size() == 0) {
|
| | | return isfree;
|
| | | }
|
| | | |
| | | // 匹配
|
| | | boolean matching = false;
|
| | | UserSystemCouponRecord record = null;
|
| | | |
| | | for (UserSystemCouponRecord userSystemCouponRecord : list) {
|
| | | Long goodId = userSystemCouponRecord.getGoodId();
|
| | | if (auctionId.equals(goodId)) {
|
| | | matching = true; // 匹配成功
|
| | | record = userSystemCouponRecord;
|
| | | break;
|
| | | }
|
| | | }
|
| | | |
| | | // 商品匹配成功
|
| | | if (matching) {
|
| | | |
| | | record.setOrderNo(orderNo);
|
| | | record.setUpdateTime(new Date());
|
| | | |
| | | UserSystemCoupon userSystemCoupon = record.getUserSystemCoupon();
|
| | | |
| | | if (payment.compareTo(new BigDecimal(10)) > 0) {
|
| | | // 更新记录 -- 金额不匹配 大10元
|
| | | record.setState(UserSystemCouponRecord.STATE_FAIL_RULE);
|
| | | userSystemCouponRecordService.updateByPrimaryKeySelective(record);
|
| | | |
| | | // 退回券
|
| | | sendBackCoupon(userSystemCoupon);
|
| | | |
| | | } else {
|
| | | // 免单匹配成功
|
| | | isfree = true;
|
| | | |
| | | //更新记录--免单中
|
| | | record.setState(UserSystemCouponRecord.STATE_FREE_ON);
|
| | | userSystemCouponRecordService.updateByPrimaryKeySelective(record);
|
| | | |
| | | // 券结束使用
|
| | | userSystemCoupon.setState(UserSystemCoupon.STATE_END_USE);
|
| | | userSystemCoupon.setUpdateTime(new Date());
|
| | | userSystemCouponMapper.updateByPrimaryKeySelective(userSystemCoupon);
|
| | | |
| | | SystemCoupon systemCoupon = userSystemCoupon.getSystemCoupon();
|
| | | |
| | | SystemCoupon baseCoupon = systemCouponService.selectByPrimaryKey(systemCoupon.getId());
|
| | | if (baseCoupon == null) {
|
| | | // 券已使用
|
| | | userOtherMsgNotificationService.freeSheetCouponUsed(userSystemCoupon);
|
| | | } else if (baseCoupon.getType() != CouponTypeEnum.welfareFreeCoupon) {
|
| | | userOtherMsgNotificationService.welfareCouponUsed(userSystemCoupon);
|
| | | } else if (baseCoupon.getType() != CouponTypeEnum.freeCoupon) {
|
| | | userOtherMsgNotificationService.freeSheetCouponUsed(userSystemCoupon);
|
| | | } |
| | | }
|
| | | }
|
| | | |
| | | return isfree;
|
| | | }
|
| | | |
| | | /**
|
| | | * 退回券 初始数据
|
| | | * @param userSystemCoupon
|
| | | */
|
| | | public void sendBackCoupon(UserSystemCoupon userSystemCoupon) throws Exception{
|
| | |
|
| | | int expiryDay = 15;
|
| | |
|
| | | SystemCoupon systemCoupon = userSystemCoupon.getSystemCoupon();
|
| | | SystemCoupon coupon = systemCouponService.selectByPrimaryKey(systemCoupon.getId());
|
| | | if (coupon != null) {
|
| | | expiryDay = coupon.getExpiryDay();
|
| | | }
|
| | |
|
| | | // 结束日期
|
| | | Date endTime = null;
|
| | | try {
|
| | | String endDay = DateUtil.plusDay(expiryDay, new Date());
|
| | | SimpleDateFormat format = new SimpleDateFormat("yyyy-MM-dd");
|
| | | endTime = format.parse(endDay);
|
| | | } catch (ParseException e) {
|
| | | e.printStackTrace();
|
| | | }
|
| | | // 状态初始化
|
| | | userSystemCoupon.setState(UserSystemCoupon.STATE_CAN_USE);
|
| | | userSystemCoupon.setUseTime(null);
|
| | | // 有效期时间重新定义
|
| | | userSystemCoupon.setStartTime(new Date());
|
| | | userSystemCoupon.setEndTime(endTime);
|
| | | |
| | | userSystemCoupon.setUpdateTime(new Date());
|
| | | |
| | | userSystemCouponMapper.updateByPrimaryKey(userSystemCoupon);
|
| | | }
|
| | |
|
| | |
|
| | |
|