CommissionRuleServiceImpl.java 15 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319
  1. package com.fuint.common.service.impl;
  2. import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
  3. import com.baomidou.mybatisplus.core.toolkit.Wrappers;
  4. import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
  5. import com.fuint.common.dto.CommissionRuleDto;
  6. import com.fuint.common.dto.CommissionRuleItemDto;
  7. import com.fuint.common.param.CommissionRuleItemParam;
  8. import com.fuint.common.param.CommissionRuleParam;
  9. import com.fuint.common.service.GoodsService;
  10. import com.fuint.common.service.SettingService;
  11. import com.fuint.framework.annoation.OperationServiceLog;
  12. import com.fuint.framework.exception.BusinessCheckException;
  13. import com.fuint.framework.pagination.PaginationRequest;
  14. import com.fuint.framework.pagination.PaginationResponse;
  15. import com.fuint.repository.mapper.MtCommissionRuleItemMapper;
  16. import com.fuint.repository.mapper.MtCommissionRuleMapper;
  17. import com.fuint.common.service.CommissionRuleService;
  18. import com.fuint.common.enums.StatusEnum;
  19. import com.fuint.repository.model.MtCommissionRule;
  20. import com.fuint.repository.model.MtCommissionRuleItem;
  21. import com.fuint.repository.model.MtGoods;
  22. import com.fuint.utils.StringUtil;
  23. import com.github.pagehelper.PageHelper;
  24. import lombok.AllArgsConstructor;
  25. import org.apache.commons.lang.StringUtils;
  26. import org.slf4j.Logger;
  27. import org.slf4j.LoggerFactory;
  28. import com.github.pagehelper.Page;
  29. import org.springframework.beans.BeanUtils;
  30. import org.springframework.data.domain.PageImpl;
  31. import org.springframework.data.domain.PageRequest;
  32. import org.springframework.stereotype.Service;
  33. import org.springframework.transaction.annotation.Transactional;
  34. import java.util.*;
  35. /**
  36. * 分销提成服务接口
  37. *
  38. * Created by FSQ
  39. * CopyRight https://www.fuint.cn
  40. */
  41. @Service
  42. @AllArgsConstructor
  43. public class CommissionRuleServiceImpl extends ServiceImpl<MtCommissionRuleMapper, MtCommissionRule> implements CommissionRuleService {
  44. private static final Logger logger = LoggerFactory.getLogger(CommissionRuleServiceImpl.class);
  45. private MtCommissionRuleMapper mtCommissionRuleMapper;
  46. private MtCommissionRuleItemMapper mtCommissionRuleItemMapper;
  47. /**
  48. * 商品服务接口
  49. * */
  50. private GoodsService goodsService;
  51. /**
  52. * 系统设置服务接口
  53. * */
  54. private SettingService settingService;
  55. /**
  56. * 分页查询规则列表
  57. *
  58. * @param paginationRequest
  59. * @return
  60. */
  61. @Override
  62. public PaginationResponse<MtCommissionRule> queryDataByPagination(PaginationRequest paginationRequest) {
  63. Page<MtCommissionRule> pageHelper = PageHelper.startPage(paginationRequest.getCurrentPage(), paginationRequest.getPageSize());
  64. LambdaQueryWrapper<MtCommissionRule> lambdaQueryWrapper = Wrappers.lambdaQuery();
  65. lambdaQueryWrapper.ne(MtCommissionRule::getStatus, StatusEnum.DISABLE.getKey());
  66. String name = paginationRequest.getSearchParams().get("name") == null ? "" : paginationRequest.getSearchParams().get("name").toString();
  67. if (StringUtils.isNotBlank(name)) {
  68. lambdaQueryWrapper.like(MtCommissionRule::getName, name);
  69. }
  70. String status = paginationRequest.getSearchParams().get("status") == null ? "" : paginationRequest.getSearchParams().get("status").toString();
  71. if (StringUtils.isNotBlank(status)) {
  72. lambdaQueryWrapper.eq(MtCommissionRule::getStatus, status);
  73. }
  74. String target = paginationRequest.getSearchParams().get("target") == null ? "" : paginationRequest.getSearchParams().get("target").toString();
  75. if (StringUtils.isNotBlank(target)) {
  76. lambdaQueryWrapper.eq(MtCommissionRule::getTarget, target);
  77. }
  78. String type = paginationRequest.getSearchParams().get("type") == null ? "" : paginationRequest.getSearchParams().get("type").toString();
  79. if (StringUtils.isNotBlank(type)) {
  80. lambdaQueryWrapper.eq(MtCommissionRule::getType, type);
  81. }
  82. String merchantId = paginationRequest.getSearchParams().get("merchantId") == null ? "" : paginationRequest.getSearchParams().get("merchantId").toString();
  83. if (StringUtils.isNotBlank(merchantId)) {
  84. lambdaQueryWrapper.eq(MtCommissionRule::getMerchantId, merchantId);
  85. }
  86. String storeId = paginationRequest.getSearchParams().get("storeId") == null ? "" : paginationRequest.getSearchParams().get("storeId").toString();
  87. if (StringUtils.isNotBlank(storeId)) {
  88. lambdaQueryWrapper.eq(MtCommissionRule::getStoreId, storeId);
  89. }
  90. lambdaQueryWrapper.orderByDesc(MtCommissionRule::getId);
  91. List<MtCommissionRule> dataList = mtCommissionRuleMapper.selectList(lambdaQueryWrapper);
  92. PageRequest pageRequest = PageRequest.of(paginationRequest.getCurrentPage(), paginationRequest.getPageSize());
  93. PageImpl pageImpl = new PageImpl(dataList, pageRequest, pageHelper.getTotal());
  94. PaginationResponse<MtCommissionRule> paginationResponse = new PaginationResponse(pageImpl, MtCommissionRule.class);
  95. paginationResponse.setTotalPages(pageHelper.getPages());
  96. paginationResponse.setTotalElements(pageHelper.getTotal());
  97. paginationResponse.setContent(dataList);
  98. return paginationResponse;
  99. }
  100. /**
  101. * 添加分销提成规则
  102. *
  103. * @param commissionRule
  104. * @return
  105. */
  106. @Override
  107. @Transactional(rollbackFor = Exception.class)
  108. @OperationServiceLog(description = "新增分销提成规则")
  109. public MtCommissionRule addCommissionRule(CommissionRuleParam commissionRule) throws BusinessCheckException {
  110. MtCommissionRule mtCommissionRule = new MtCommissionRule();
  111. BeanUtils.copyProperties(commissionRule, mtCommissionRule);
  112. mtCommissionRule.setStatus(StatusEnum.ENABLED.getKey());
  113. Date date = new Date();
  114. mtCommissionRule.setCreateTime(date);
  115. mtCommissionRule.setUpdateTime(date);
  116. mtCommissionRule.setMerchantId(mtCommissionRule.getMerchantId()== null ? 0 : mtCommissionRule.getMerchantId());
  117. String storeIds = StringUtil.join(commissionRule.getStoreIdList().toArray(), ",");
  118. mtCommissionRule.setStoreIds(storeIds);
  119. boolean result = save(mtCommissionRule);
  120. if (result) {
  121. if (commissionRule.getDetailList() != null && commissionRule.getDetailList().size() > 0) {
  122. for (CommissionRuleItemParam itemParam : commissionRule.getDetailList()) {
  123. MtCommissionRuleItem mtCommissionRuleItem = new MtCommissionRuleItem();
  124. mtCommissionRuleItem.setRuleId(mtCommissionRule.getId());
  125. mtCommissionRuleItem.setType(mtCommissionRule.getType());
  126. mtCommissionRuleItem.setTarget(mtCommissionRule.getTarget());
  127. mtCommissionRuleItem.setMerchantId(mtCommissionRule.getMerchantId());
  128. mtCommissionRuleItem.setStoreId(mtCommissionRule.getStoreId());
  129. mtCommissionRuleItem.setStoreIds(storeIds);
  130. mtCommissionRuleItem.setCreateTime(date);
  131. mtCommissionRuleItem.setUpdateTime(date);
  132. mtCommissionRuleItem.setOperator(commissionRule.getOperator());
  133. mtCommissionRuleItem.setStatus(mtCommissionRule.getStatus());
  134. mtCommissionRuleItem.setMethod(itemParam.getMethod());
  135. mtCommissionRuleItem.setTarget(commissionRule.getTarget());
  136. mtCommissionRuleItem.setTargetId(itemParam.getGoodsId());
  137. mtCommissionRuleItem.setMember(itemParam.getMemberVal());
  138. mtCommissionRuleItem.setGuest(itemParam.getVisitorVal());
  139. mtCommissionRuleItemMapper.insert(mtCommissionRuleItem);
  140. }
  141. }
  142. } else {
  143. logger.error("新增分销提成规则失败...");
  144. throw new BusinessCheckException("新增分销方案规则失败");
  145. }
  146. return mtCommissionRule;
  147. }
  148. /**
  149. * 根据ID获取规则信息
  150. *
  151. * @param id 规则ID
  152. * @return
  153. */
  154. @Override
  155. public CommissionRuleDto queryCommissionRuleById(Integer id) throws BusinessCheckException {
  156. MtCommissionRule mtCommissionRule = mtCommissionRuleMapper.selectById(id);
  157. if (mtCommissionRule == null) {
  158. return null;
  159. }
  160. CommissionRuleDto commissionRuleDto = new CommissionRuleDto();
  161. BeanUtils.copyProperties(mtCommissionRule, commissionRuleDto);
  162. Map<String, Object> param = new HashMap();
  163. param.put("RULE_ID", id);
  164. param.put("STATUS", StatusEnum.ENABLED.getKey());
  165. List<MtCommissionRuleItem> mtCommissionRuleItems = mtCommissionRuleItemMapper.selectByMap(param);
  166. List<CommissionRuleItemDto> detailList = new ArrayList<>();
  167. String basePath = settingService.getUploadBasePath();
  168. if (mtCommissionRuleItems != null && mtCommissionRuleItems.size() > 0) {
  169. for (MtCommissionRuleItem item : mtCommissionRuleItems) {
  170. CommissionRuleItemDto commissionRuleItemDto = new CommissionRuleItemDto();
  171. commissionRuleItemDto.setGoodsId(item.getTargetId());
  172. MtGoods mtGoods = goodsService.queryGoodsById(item.getTargetId());
  173. if (mtGoods != null) {
  174. commissionRuleItemDto.setGoodsName(mtGoods.getName());
  175. commissionRuleItemDto.setLogo(basePath + mtGoods.getLogo());
  176. commissionRuleItemDto.setPrice(mtGoods.getPrice());
  177. }
  178. commissionRuleItemDto.setType(item.getType());
  179. commissionRuleItemDto.setMemberVal(item.getMember());
  180. commissionRuleItemDto.setMethod(item.getMethod());
  181. commissionRuleItemDto.setVisitorVal(item.getGuest());
  182. detailList.add(commissionRuleItemDto);
  183. }
  184. }
  185. commissionRuleDto.setDetailList(detailList);
  186. List<Integer> storeIds = new ArrayList<>();
  187. if (StringUtil.isNotEmpty(mtCommissionRule.getStoreIds())) {
  188. List<String> storeIdList = Arrays.asList(mtCommissionRule.getStoreIds().split(","));
  189. if (storeIdList != null && storeIdList.size() > 0) {
  190. for (String storeId : storeIdList) {
  191. storeIds.add(Integer.parseInt(storeId));
  192. }
  193. }
  194. }
  195. commissionRuleDto.setStoreIdList(storeIds);
  196. return commissionRuleDto;
  197. }
  198. /**
  199. * 更新分销提成规则
  200. *
  201. * @param commissionRule 规则参数
  202. * @throws BusinessCheckException
  203. * @return
  204. */
  205. @Override
  206. @Transactional(rollbackFor = Exception.class)
  207. @OperationServiceLog(description = "更新分销提成规则")
  208. public MtCommissionRule updateCommissionRule(CommissionRuleParam commissionRule) throws BusinessCheckException {
  209. MtCommissionRule mtCommissionRule = mtCommissionRuleMapper.selectById(commissionRule.getId());
  210. if (mtCommissionRule == null) {
  211. logger.error("更新分销提成规则失败...");
  212. throw new BusinessCheckException("该数据状态异常");
  213. }
  214. mtCommissionRule.setId(commissionRule.getId());
  215. if (commissionRule.getName() != null) {
  216. mtCommissionRule.setName(commissionRule.getName());
  217. }
  218. if (commissionRule.getTarget() != null) {
  219. mtCommissionRule.setTarget(commissionRule.getTarget());
  220. }
  221. if (commissionRule.getType() != null) {
  222. mtCommissionRule.setType(commissionRule.getType());
  223. }
  224. if (commissionRule.getStoreId() != null) {
  225. mtCommissionRule.setStoreId(commissionRule.getStoreId());
  226. }
  227. if (commissionRule.getDescription() != null) {
  228. mtCommissionRule.setDescription(commissionRule.getDescription());
  229. }
  230. if (commissionRule.getOperator() != null) {
  231. mtCommissionRule.setOperator(commissionRule.getOperator());
  232. }
  233. if (commissionRule.getStatus() != null) {
  234. mtCommissionRule.setStatus(commissionRule.getStatus());
  235. if (commissionRule.getStatus().equals(StatusEnum.DISABLE.getKey())) {
  236. mtCommissionRuleItemMapper.deleteByRuleId(commissionRule.getId(), new Date());
  237. }
  238. }
  239. String storeIds = StringUtil.join(commissionRule.getStoreIdList().toArray(), ",");
  240. mtCommissionRule.setStoreIds(storeIds);
  241. // 更新或插入
  242. Date date = new Date();
  243. List<Integer> itemIds = new ArrayList<>();
  244. if (commissionRule.getDetailList() != null && commissionRule.getDetailList().size() > 0) {
  245. for (CommissionRuleItemParam itemParam : commissionRule.getDetailList()) {
  246. MtCommissionRuleItem mtCommissionRuleItem = new MtCommissionRuleItem();
  247. mtCommissionRuleItem.setRuleId(mtCommissionRule.getId());
  248. mtCommissionRuleItem.setType(mtCommissionRule.getType());
  249. mtCommissionRuleItem.setMerchantId(mtCommissionRule.getMerchantId());
  250. mtCommissionRuleItem.setStoreId(mtCommissionRule.getStoreId());
  251. mtCommissionRuleItem.setStoreIds(storeIds);
  252. mtCommissionRuleItem.setCreateTime(date);
  253. mtCommissionRuleItem.setUpdateTime(date);
  254. mtCommissionRuleItem.setOperator(commissionRule.getOperator());
  255. mtCommissionRuleItem.setStatus(mtCommissionRule.getStatus());
  256. mtCommissionRuleItem.setMethod(itemParam.getMethod());
  257. mtCommissionRuleItem.setTarget(commissionRule.getTarget());
  258. mtCommissionRuleItem.setTargetId(itemParam.getGoodsId());
  259. mtCommissionRuleItem.setMember(itemParam.getMemberVal());
  260. mtCommissionRuleItem.setGuest(itemParam.getVisitorVal());
  261. // 判断是否已经存在,存在则更新
  262. if (itemParam.getGoodsId() != null && itemParam.getGoodsId() > 0) {
  263. Map<String, Object> param = new HashMap();
  264. param.put("RULE_ID", commissionRule.getId());
  265. param.put("TARGET_ID", itemParam.getGoodsId());
  266. param.put("STATUS", StatusEnum.ENABLED.getKey());
  267. List<MtCommissionRuleItem> items = mtCommissionRuleItemMapper.selectByMap(param);
  268. if (items != null && items.size() > 0) {
  269. mtCommissionRuleItem.setId(items.get(0).getId());
  270. itemIds.add(items.get(0).getId());
  271. }
  272. }
  273. if (mtCommissionRuleItem.getId() != null && mtCommissionRuleItem.getId() > 0) {
  274. mtCommissionRuleItemMapper.updateById(mtCommissionRuleItem);
  275. } else {
  276. mtCommissionRuleItemMapper.insert(mtCommissionRuleItem);
  277. itemIds.add(mtCommissionRuleItem.getId());
  278. }
  279. }
  280. }
  281. // 删除
  282. Map<String, Object> params = new HashMap();
  283. params.put("RULE_ID", commissionRule.getId());
  284. params.put("STATUS", StatusEnum.ENABLED.getKey());
  285. List<MtCommissionRuleItem> mtCommissionRuleItems = mtCommissionRuleItemMapper.selectByMap(params);
  286. for (MtCommissionRuleItem item : mtCommissionRuleItems) {
  287. if (!itemIds.contains(item.getId())) {
  288. item.setStatus(StatusEnum.DISABLE.getKey());
  289. mtCommissionRuleItemMapper.updateById(item);
  290. }
  291. }
  292. mtCommissionRule.setUpdateTime(new Date());
  293. mtCommissionRuleMapper.updateById(mtCommissionRule);
  294. return mtCommissionRule;
  295. }
  296. }