UserIncrementServiceImpl.java 9.9 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234
  1. package com.fdkankan.agent.service.impl;
  2. import cn.hutool.core.bean.BeanUtil;
  3. import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
  4. import com.baomidou.mybatisplus.core.conditions.update.LambdaUpdateWrapper;
  5. import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
  6. import com.fdkankan.agent.common.PageInfo;
  7. import com.fdkankan.agent.common.ResultCode;
  8. import com.fdkankan.agent.common.util.IncrementUtil;
  9. import com.fdkankan.agent.entity.IncrementOrderMg;
  10. import com.fdkankan.agent.entity.IncrementType;
  11. import com.fdkankan.agent.entity.User;
  12. import com.fdkankan.agent.entity.UserIncrement;
  13. import com.fdkankan.agent.exception.BusinessException;
  14. import com.fdkankan.agent.mapper.IUserIncrementMapper;
  15. import com.fdkankan.agent.request.CameraParam;
  16. import com.fdkankan.agent.request.IncrementParam;
  17. import com.fdkankan.agent.request.ScenePayStatusVo;
  18. import com.fdkankan.agent.request.UserIncrementParam;
  19. import com.fdkankan.agent.response.AgentNewVo;
  20. import com.fdkankan.agent.response.UserIncrementVo;
  21. import com.fdkankan.agent.service.*;
  22. import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
  23. import com.fdkankan.agent.util.DateUtils;
  24. import com.fdkankan.common.util.DateUtil;
  25. import com.fdkankan.rabbitmq.util.RabbitMqProducer;
  26. import org.apache.commons.lang3.StringUtils;
  27. import org.joda.time.DateTime;
  28. import org.springframework.beans.factory.annotation.Autowired;
  29. import org.springframework.stereotype.Service;
  30. import java.util.*;
  31. /**
  32. * <p>
  33. * 用户增值权益表 服务实现类
  34. * </p>
  35. *
  36. * @author
  37. * @since 2022-11-10
  38. */
  39. @Service
  40. public class UserIncrementServiceImpl extends ServiceImpl<IUserIncrementMapper, UserIncrement> implements IUserIncrementService {
  41. @Autowired
  42. IUserService userService;
  43. @Autowired
  44. IIncrementTypeService incrementTypeService;
  45. @Autowired
  46. IAgentNewService agentNewService;
  47. @Autowired
  48. IIncrementOrderMgService incrementOrderMgService;
  49. @Autowired
  50. RabbitMqProducer rabbitMqProducer;
  51. @Autowired
  52. public static String ucenterScenePayStatusQueue = "scene-pay-status";
  53. @Override
  54. public UserIncrement getByCameraId(Long cameraId) {
  55. LambdaQueryWrapper<UserIncrement> wrapper = new LambdaQueryWrapper<>();
  56. wrapper.eq(UserIncrement::getCameraId,cameraId);
  57. List<UserIncrement> list = this.list(wrapper);
  58. if(list !=null && list.size() >0){
  59. return list.get(0);
  60. }
  61. return null;
  62. }
  63. @Override
  64. public Object pageList(IncrementParam param) {
  65. Page<UserIncrementVo> page = this.getBaseMapper().pageList(new Page<>(param.getPageNum(), param.getPageSize()), param);
  66. for (UserIncrementVo vo :page.getRecords() ) {
  67. String fmName = IncrementUtil.getStrIncrementName(vo.getValidTimeType(), vo.getIncrementTypeName());
  68. vo.setIncrementTypeName(fmName);
  69. }
  70. return PageInfo.PageInfo(page);
  71. }
  72. @Override
  73. public void addIncrement(IncrementParam param, AgentNewVo agentNewVo) {
  74. if(StringUtils.isBlank(param.getUserName()) || param.getIncrementTypeId() == null
  75. || param.getCount() == null || StringUtils.isEmpty(param.getIncrementEndTime())){
  76. throw new BusinessException(ResultCode.PARAM_MISS);
  77. }
  78. IncrementType incrementType = incrementTypeService.getById(param.getIncrementTypeId());
  79. if(incrementType == null){
  80. throw new BusinessException(ResultCode.INCREMENT_TYPE_EMPTY);
  81. }
  82. if (incrementType.getValidTimeType() == 0) {
  83. if(agentNewVo.getMajorSubNum() < param.getCount() * param.getTotalTime()){
  84. throw new BusinessException(ResultCode.INCREMENT_NUM_EMPTY);
  85. }
  86. }
  87. if (incrementType.getValidTimeType() == 1) {
  88. if(agentNewVo.getHighSubNum() < param.getCount() * param.getTotalTime()){
  89. throw new BusinessException(ResultCode.INCREMENT_NUM_EMPTY);
  90. }
  91. }
  92. User user = userService.getByUserName(param.getUserName());
  93. if(user == null){
  94. throw new BusinessException(ResultCode.USER_NOT_EXIST);
  95. }
  96. if(incrementType.getValidTimeType() == 0){
  97. param.setMemberLevels("PR");
  98. }
  99. if(incrementType.getValidTimeType() == 1){
  100. param.setMemberLevels("SE");
  101. }
  102. IncrementOrderMg orderMg = incrementOrderMgService.addOrder(user, param, agentNewVo);
  103. List<UserIncrement> userIncrementList = new ArrayList<>();
  104. for (int i = 0 ; i<param.getCount() ;i++) {
  105. UserIncrement userIncrement = new UserIncrement();
  106. String date = DateUtil.date2String(new Date(), DateUtil.DEFAULT_DATE_FORMAT);
  107. userIncrement.setUserId(user.getId());
  108. userIncrement.setKeyWord(UUID.randomUUID().toString().replace("-", ""));
  109. userIncrement.setOrderSn(orderMg.getOrderSn());
  110. userIncrement.setIsExpired(0);
  111. userIncrement.setCreateTime(date);
  112. userIncrement.setUpdateTime(date);
  113. userIncrement.setIncrementStartTime(date);
  114. userIncrement.setIncrementEndTime(param.getIncrementEndTime());
  115. userIncrement.setIncrementTypeId(param.getIncrementTypeId());
  116. userIncrement.setAgentId(agentNewVo.getId());
  117. userIncrement.setMemberLevels(param.getMemberLevels());
  118. userIncrement.setMonthQy(1);
  119. userIncrementList.add(userIncrement);
  120. }
  121. if(userIncrementList.size() >0){
  122. this.saveBatch(userIncrementList);
  123. LambdaUpdateWrapper<User> wrapper = new LambdaUpdateWrapper<>();
  124. wrapper.eq(User::getId,user.getId());
  125. wrapper.setSql("download_num_total = download_num_total + " + param.getCount() *param.getTotalTime() * incrementType.getDownloadNum());
  126. userService.update(wrapper);
  127. agentNewService.subNum(agentNewVo,user.getId(),incrementType,param.getCount(),param.getTotalTime(),0);
  128. }
  129. }
  130. @Override
  131. public void renew(IncrementParam param, AgentNewVo agentNewVo) {
  132. if(param.getId() == null || StringUtils.isEmpty(param.getIncrementEndTime())){
  133. throw new BusinessException(ResultCode.PARAM_MISS);
  134. }
  135. UserIncrement userIncrement = this.getById(param.getId());
  136. if(userIncrement == null){
  137. throw new BusinessException(ResultCode.INCREMENT_EMPTY);
  138. }
  139. User user = userService.getById(userIncrement.getUserId());
  140. if(user == null){
  141. throw new BusinessException(ResultCode.USER_NOT_EXIST);
  142. }
  143. IncrementType incrementType = incrementTypeService.getById(userIncrement.getIncrementTypeId());
  144. if(incrementType == null){
  145. throw new BusinessException(ResultCode.INCREMENT_TYPE_EMPTY);
  146. }
  147. if (incrementType.getValidTimeType() == 0) {
  148. if(agentNewVo.getMajorSubNum() < param.getTotalTime()){
  149. throw new BusinessException(ResultCode.INCREMENT_NUM_EMPTY);
  150. }
  151. }
  152. if (incrementType.getValidTimeType() == 1) {
  153. if(agentNewVo.getHighSubNum() < param.getTotalTime()){
  154. throw new BusinessException(ResultCode.INCREMENT_NUM_EMPTY);
  155. }
  156. }
  157. if(incrementType.getValidTimeType() == 0){
  158. param.setMemberLevels("PR");
  159. }
  160. if(incrementType.getValidTimeType() == 1){
  161. param.setMemberLevels("SE");
  162. }
  163. IncrementOrderMg orderMg = incrementOrderMgService.addOrder(user, param, agentNewVo);
  164. userIncrement.setIsExpired(0);
  165. DateTime dateTime = this.getDateTime(incrementType, userIncrement.getId(), param.getCount() * param.getTotalTime());
  166. userIncrement.setIncrementEndTime(DateUtil.date2String(dateTime.toDate(),"yyyy-MM-dd HH:mm:ss"));
  167. userIncrement.setUpdateTime(null);
  168. userIncrement.setOrderSn(userIncrement.getOrderSn() +","+orderMg.getOrderSn());
  169. this.updateById(userIncrement);
  170. LambdaUpdateWrapper<User> wrapper = new LambdaUpdateWrapper<>();
  171. wrapper.eq(User::getId,user.getId());
  172. wrapper.setSql("download_num_total = download_num_total + " + incrementType.getDownloadNum());
  173. userService.update(wrapper);
  174. agentNewService.subNum(agentNewVo,user.getId(),incrementType,1,param.getTotalTime(),1);
  175. if(userIncrement.getCameraId() != null){
  176. ScenePayStatusVo scenePayStatusVo = new ScenePayStatusVo(userIncrement.getCameraId());
  177. Map<String, Object> map = BeanUtil.beanToMap(scenePayStatusVo);
  178. rabbitMqProducer.sendByWorkQueue(ucenterScenePayStatusQueue, map);
  179. }
  180. }
  181. @Override
  182. public HashMap<Long, UserIncrement> getByCameraIds(List<Long> cameraIds) {
  183. HashMap<Long, UserIncrement> map = new HashMap<>();
  184. if(cameraIds .isEmpty()){
  185. return map;
  186. }
  187. LambdaQueryWrapper<UserIncrement> wrapper = new LambdaQueryWrapper<>();
  188. wrapper.in(UserIncrement::getCameraId,cameraIds);
  189. List<UserIncrement> list = this.list(wrapper);
  190. list.forEach(e -> map.put(e.getCameraId(),e));
  191. return map;
  192. }
  193. @Override
  194. public List<Long> getByAgentId(CameraParam param) {
  195. return this.getBaseMapper().getByAgentId(param.getAgentId(),param.getIncrementStatus(),param.getIncrementTypeId());
  196. }
  197. @Override
  198. public DateTime getAddUserIncrementTime(UserIncrementParam param) {
  199. IncrementType incrementType = incrementTypeService.getById(param.getIncrementTypeId());
  200. return this.getDateTime(incrementType,param.getId(),param.getCount());
  201. }
  202. public DateTime getDateTime(IncrementType incrementType, Long userIncrementId, Integer count) {
  203. Date userTime = new Date();
  204. if(userIncrementId != null){
  205. UserIncrement userIncrement = this.getById(userIncrementId);
  206. userTime = DateUtils.getDate(userIncrement.getIncrementEndTime());
  207. }
  208. return DateUtils.getDateTime(userTime, incrementType,count);
  209. }
  210. }