| | |
| | | package com.yeshi.makemoney.app.service.impl.goldcorn; |
| | | |
| | | import com.ks.lib.common.exception.ParamsException; |
| | | import com.ks.push.exception.BPushTaskException; |
| | | import com.yeshi.makemoney.app.dto.mq.GoldCornSettleMQMsg; |
| | | import com.yeshi.makemoney.app.entity.goldcorn.GoldCornConsumeRecord; |
| | | import com.yeshi.makemoney.app.entity.goldcorn.GoldCornConsumeType; |
| | |
| | | import com.yeshi.makemoney.app.service.inter.goldcorn.GoldCornMoneyExchangeRateRecordService; |
| | | import com.yeshi.makemoney.app.service.inter.goldcorn.GoldCornSettleService; |
| | | import com.yeshi.makemoney.app.service.inter.money.UserMoneyService; |
| | | import com.yeshi.makemoney.app.service.inter.msg.UserMsgNotifyService; |
| | | import com.yeshi.makemoney.app.service.inter.user.UserInfoService; |
| | | import com.yeshi.makemoney.app.service.manager.PushManager; |
| | | import com.yeshi.makemoney.app.utils.factory.UserMoneyRecordFactory; |
| | | import com.yeshi.makemoney.app.utils.factory.goldcorn.GoldCornConsumeRecordFactory; |
| | | import com.yeshi.makemoney.app.utils.factory.msg.UserMsgFactory; |
| | | import com.yeshi.makemoney.app.utils.goldcorn.GoldCornUtil; |
| | | import com.yeshi.makemoney.app.utils.mq.CMQManager; |
| | | import org.springframework.stereotype.Service; |
| | | import org.springframework.transaction.annotation.Transactional; |
| | | import org.yeshi.utils.ThreadUtil; |
| | | |
| | | import javax.annotation.Resource; |
| | | import java.math.BigDecimal; |
| | |
| | | @Resource |
| | | private UserMoneyService userMoneyService; |
| | | |
| | | @Resource |
| | | private UserMsgNotifyService userMsgNotifyService; |
| | | |
| | | @Resource |
| | | private PushManager pushManager; |
| | | |
| | | @Override |
| | | public void startSettle(String day) { |
| | | public void startSettle(Date date) { |
| | | String day = GoldCornUtil.getFormatDay(date); |
| | | long count = goldCornGetRecordService.countUidsByDay(day); |
| | | int pageSize = 1000; |
| | | int page = (int) (count % pageSize == 0 ? count / pageSize : count / pageSize + 1); |
| | |
| | | @Transactional(rollbackFor = Exception.class) |
| | | @Override |
| | | public void settle(Long uid, String day, BigDecimal rate) throws GoldCornConsumeRecordException, UserMoneyRecordException { |
| | | long cornNum = goldCornGetRecordService.getGoldCornByDay(uid, day); |
| | | long cornNum = goldCornGetRecordService.getGoldCornByDay(uid, GoldCornUtil.convertFormatDay(day)); |
| | | //金币数量 |
| | | GoldCornConsumeRecord record = new GoldCornConsumeRecord(); |
| | | record.setUid(uid); |
| | | record.setCornNum((int) cornNum); |
| | | record.setMoney(rate.multiply(new BigDecimal(record.getCornNum()).setScale(2, RoundingMode.FLOOR))); |
| | | record.setType(GoldCornConsumeType.changeMoney); |
| | | record.setId(uid + "-" + record.getType().name() + "-" + day); |
| | | GoldCornConsumeRecord record = GoldCornConsumeRecordFactory.createExchange(uid, day, (int) cornNum, rate); |
| | | try { |
| | | UserMoneyRecord moneyRecord = UserMoneyRecordFactory.createGoldCornExchange(record); |
| | | userMoneyService.addUserMoney(moneyRecord); |
| | |
| | | throw new UserMoneyRecordException(e.getCode(), e.getMsg()); |
| | | } |
| | | goldCornConsumeRecordService.add(record); |
| | | //消息通知不需要在主线程 |
| | | ThreadUtil.run(new Runnable() { |
| | | @Override |
| | | public void run() { |
| | | try { |
| | | userMsgNotifyService.notify(UserMsgFactory.createGoldCornExchange(record, userMoneyService.getBalance(uid))); |
| | | //添加站外推送 |
| | | UserInfo user = userInfoService.get(uid); |
| | | if (user == null) { |
| | | return; |
| | | } |
| | | pushManager.pushGoldCornSettle(user.getSystem(), record.getUid(), Math.abs(record.getCornNum()), record.getMoney()); |
| | | } catch (Exception e) { |
| | | e.printStackTrace(); |
| | | } |
| | | } |
| | | }); |
| | | } |
| | | |
| | | @Override |