CateServiceImpl.java 12 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291
  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.GoodsCateDto;
  6. import com.fuint.common.enums.StatusEnum;
  7. import com.fuint.common.service.CateService;
  8. import com.fuint.common.service.StoreService;
  9. import com.fuint.framework.annoation.OperationServiceLog;
  10. import com.fuint.framework.exception.BusinessCheckException;
  11. import com.fuint.framework.pagination.PaginationRequest;
  12. import com.fuint.framework.pagination.PaginationResponse;
  13. import com.fuint.repository.mapper.MtGoodsCateMapper;
  14. import com.fuint.repository.mapper.MtGoodsMapper;
  15. import com.fuint.repository.model.MtGoods;
  16. import com.fuint.repository.model.MtGoodsCate;
  17. import com.fuint.repository.model.MtStore;
  18. import com.fuint.utils.StringUtil;
  19. import com.github.pagehelper.Page;
  20. import com.github.pagehelper.PageHelper;
  21. import lombok.AllArgsConstructor;
  22. import org.apache.commons.lang.StringUtils;
  23. import org.slf4j.Logger;
  24. import org.slf4j.LoggerFactory;
  25. import org.springframework.beans.BeanUtils;
  26. import org.springframework.data.domain.PageImpl;
  27. import org.springframework.data.domain.PageRequest;
  28. import org.springframework.stereotype.Service;
  29. import org.springframework.transaction.annotation.Transactional;
  30. import java.util.*;
  31. /**
  32. * 商品分类业务实现类
  33. *
  34. * Created by FSQ
  35. * CopyRight https://www.fuint.cn
  36. */
  37. @Service
  38. @AllArgsConstructor
  39. public class CateServiceImpl extends ServiceImpl<MtGoodsCateMapper, MtGoodsCate> implements CateService {
  40. private static final Logger log = LoggerFactory.getLogger(CateServiceImpl.class);
  41. private MtGoodsMapper mtGoodsMapper;
  42. private MtGoodsCateMapper cateMapper;
  43. /**
  44. * 店铺服务接口
  45. * */
  46. private StoreService storeService;
  47. /**
  48. * 分页查询分类列表
  49. *
  50. * @param paginationRequest
  51. * @return
  52. */
  53. @Override
  54. public PaginationResponse<GoodsCateDto> queryCateListByPagination(PaginationRequest paginationRequest) throws BusinessCheckException {
  55. Page<MtGoodsCate> pageHelper = PageHelper.startPage(paginationRequest.getCurrentPage(), paginationRequest.getPageSize());
  56. LambdaQueryWrapper<MtGoodsCate> lambdaQueryWrapper = Wrappers.lambdaQuery();
  57. lambdaQueryWrapper.ne(MtGoodsCate::getStatus, StatusEnum.DISABLE.getKey());
  58. String name = paginationRequest.getSearchParams().get("name") == null ? "" : paginationRequest.getSearchParams().get("name").toString();
  59. if (StringUtils.isNotBlank(name)) {
  60. lambdaQueryWrapper.like(MtGoodsCate::getName, name);
  61. }
  62. String status = paginationRequest.getSearchParams().get("status") == null ? "" : paginationRequest.getSearchParams().get("status").toString();
  63. if (StringUtils.isNotBlank(status)) {
  64. lambdaQueryWrapper.eq(MtGoodsCate::getStatus, status);
  65. }
  66. String merchantId = paginationRequest.getSearchParams().get("merchantId") == null ? "" : paginationRequest.getSearchParams().get("merchantId").toString();
  67. if (StringUtils.isNotBlank(merchantId)) {
  68. lambdaQueryWrapper.eq(MtGoodsCate::getMerchantId, merchantId);
  69. }
  70. String storeId = paginationRequest.getSearchParams().get("storeId") == null ? "" : paginationRequest.getSearchParams().get("storeId").toString();
  71. if (StringUtils.isNotBlank(storeId)) {
  72. lambdaQueryWrapper.and(wq -> wq
  73. .eq(MtGoodsCate::getStoreId, 0)
  74. .or()
  75. .eq(MtGoodsCate::getStoreId, storeId));
  76. }
  77. lambdaQueryWrapper.orderByAsc(MtGoodsCate::getSort);
  78. List<GoodsCateDto> dataList = new ArrayList<>();
  79. List<MtGoodsCate> cateList = cateMapper.selectList(lambdaQueryWrapper);
  80. for (MtGoodsCate mtCate : cateList) {
  81. GoodsCateDto cateDto = new GoodsCateDto();
  82. BeanUtils.copyProperties(mtCate, cateDto);
  83. if (mtCate.getStoreId() != null && mtCate.getStoreId() > 0) {
  84. MtStore storeInfo = storeService.queryStoreById(mtCate.getStoreId());
  85. if (storeInfo != null) {
  86. cateDto.setStoreName(storeInfo.getName());
  87. }
  88. }
  89. dataList.add(cateDto);
  90. }
  91. PageRequest pageRequest = PageRequest.of(paginationRequest.getCurrentPage(), paginationRequest.getPageSize());
  92. PageImpl pageImpl = new PageImpl(dataList, pageRequest, pageHelper.getTotal());
  93. PaginationResponse<GoodsCateDto> paginationResponse = new PaginationResponse(pageImpl, GoodsCateDto.class);
  94. paginationResponse.setTotalPages(pageHelper.getPages());
  95. paginationResponse.setTotalElements(pageHelper.getTotal());
  96. paginationResponse.setContent(dataList);
  97. return paginationResponse;
  98. }
  99. /**
  100. * 添加商品分类
  101. *
  102. * @param reqDto 商品分类参数
  103. * @throws BusinessCheckException
  104. * @return
  105. */
  106. @Override
  107. @OperationServiceLog(description = "新增商品分类")
  108. public MtGoodsCate addCate(MtGoodsCate reqDto) throws BusinessCheckException {
  109. MtGoodsCate mtCate = new MtGoodsCate();
  110. if (null != reqDto.getId()) {
  111. mtCate.setId(reqDto.getId());
  112. }
  113. Integer storeId = reqDto.getStoreId() == null ? 0 : reqDto.getStoreId();
  114. if (storeId > 0 && (reqDto.getMerchantId() == null || reqDto.getMerchantId() <= 0)) {
  115. MtStore mtStore = storeService.queryStoreById(storeId);
  116. if (mtStore != null) {
  117. reqDto.setMerchantId(mtStore.getMerchantId());
  118. }
  119. }
  120. if (reqDto.getMerchantId() == null || reqDto.getMerchantId() < 1) {
  121. throw new BusinessCheckException("平台方帐号无法执行该操作,请使用商户帐号操作");
  122. }
  123. mtCate.setName(reqDto.getName());
  124. mtCate.setStatus(StatusEnum.ENABLED.getKey());
  125. mtCate.setLogo(reqDto.getLogo());
  126. mtCate.setDescription(reqDto.getDescription());
  127. mtCate.setOperator(reqDto.getOperator());
  128. mtCate.setMerchantId(reqDto.getMerchantId());
  129. mtCate.setStoreId(storeId);
  130. mtCate.setUpdateTime(new Date());
  131. mtCate.setCreateTime(new Date());
  132. this.save(mtCate);
  133. return mtCate;
  134. }
  135. /**
  136. * 根据ID获取分类信息
  137. *
  138. * @param id 分类ID
  139. * @throws BusinessCheckException
  140. */
  141. @Override
  142. public MtGoodsCate queryCateById(Integer id) {
  143. return cateMapper.selectById(id);
  144. }
  145. /**
  146. * 根据ID删除分类信息
  147. *
  148. * @param id ID
  149. * @param operator 操作人
  150. * @throws BusinessCheckException
  151. */
  152. @Override
  153. @OperationServiceLog(description = "删除商品分类")
  154. public void deleteCate(Integer id, String operator) throws BusinessCheckException {
  155. MtGoodsCate cateInfo = queryCateById(id);
  156. Map<String, Object> params = new HashMap<>();
  157. params.put("cate_id", id);
  158. params.put("status", StatusEnum.ENABLED.getKey());
  159. params.put("merchant_id", cateInfo.getMerchantId());
  160. List<MtGoods> goodsList = mtGoodsMapper.selectByMap(params);
  161. if (goodsList != null && goodsList.size() > 0) {
  162. throw new BusinessCheckException("删除失败,该分类有商品存在");
  163. }
  164. if (null == cateInfo) {
  165. return;
  166. }
  167. cateInfo.setStatus(StatusEnum.DISABLE.getKey());
  168. cateInfo.setUpdateTime(new Date());
  169. this.updateById(cateInfo);
  170. }
  171. /**
  172. * 修改分类
  173. *
  174. * @param reqDto
  175. * @throws BusinessCheckException
  176. */
  177. @Override
  178. @Transactional(rollbackFor = Exception.class)
  179. @OperationServiceLog(description = "更新商品分类")
  180. public MtGoodsCate updateCate(MtGoodsCate reqDto) throws BusinessCheckException {
  181. MtGoodsCate mtCate = queryCateById(reqDto.getId());
  182. if (null == mtCate) {
  183. log.error("该分类状态异常");
  184. throw new BusinessCheckException("该分类状态异常");
  185. }
  186. mtCate.setId(reqDto.getId());
  187. if (reqDto.getLogo() != null) {
  188. mtCate.setLogo(reqDto.getLogo());
  189. }
  190. if (reqDto.getName() != null) {
  191. mtCate.setName(reqDto.getName());
  192. }
  193. if (reqDto.getDescription() != null) {
  194. mtCate.setDescription(reqDto.getDescription());
  195. }
  196. mtCate.setUpdateTime(new Date());
  197. if (StringUtil.isNotEmpty(reqDto.getOperator())) {
  198. mtCate.setOperator(reqDto.getOperator());
  199. }
  200. if (reqDto.getStatus() != null) {
  201. if (reqDto.getStatus().equals(StatusEnum.DISABLE.getKey())) {
  202. deleteCate(mtCate.getId(), reqDto.getOperator());
  203. }
  204. mtCate.setStatus(reqDto.getStatus());
  205. }
  206. if (reqDto.getSort() != null) {
  207. mtCate.setSort(reqDto.getSort());
  208. }
  209. if (reqDto.getMerchantId() != null && reqDto.getMerchantId() > 0) {
  210. mtCate.setMerchantId(reqDto.getMerchantId());
  211. }
  212. if (mtCate.getMerchantId() == null || mtCate.getMerchantId() < 1) {
  213. throw new BusinessCheckException("平台方帐号无法执行该操作,请使用商户帐号操作");
  214. }
  215. if (reqDto.getStoreId() != null) {
  216. mtCate.setStoreId(reqDto.getStoreId());
  217. }
  218. this.updateById(mtCate);
  219. return mtCate;
  220. }
  221. @Override
  222. public List<MtGoodsCate> queryCateListByParams(Map<String, Object> params) {
  223. LambdaQueryWrapper<MtGoodsCate> lambdaQueryWrapper = Wrappers.lambdaQuery();
  224. lambdaQueryWrapper.ne(MtGoodsCate::getStatus, StatusEnum.DISABLE.getKey());
  225. String storeId = params.get("storeId") == null ? "" : params.get("storeId").toString();
  226. String merchantId = params.get("merchantId") == null ? "" : params.get("merchantId").toString();
  227. if (StringUtils.isNotBlank(merchantId)) {
  228. lambdaQueryWrapper.eq(MtGoodsCate::getMerchantId, merchantId);
  229. }
  230. String name = params.get("name") == null ? "" : params.get("name").toString();
  231. if (StringUtils.isNotBlank(name)) {
  232. lambdaQueryWrapper.like(MtGoodsCate::getName, name);
  233. }
  234. String status = params.get("status") == null ? StatusEnum.ENABLED.getKey(): params.get("status").toString();
  235. if (StringUtils.isNotBlank(status)) {
  236. lambdaQueryWrapper.eq(MtGoodsCate::getStatus, status);
  237. }
  238. if (StringUtils.isNotBlank(storeId)) {
  239. lambdaQueryWrapper.and(wq -> wq
  240. .eq(MtGoodsCate::getStoreId, 0)
  241. .or()
  242. .eq(MtGoodsCate::getStoreId, storeId));
  243. }
  244. lambdaQueryWrapper.orderByAsc(MtGoodsCate::getSort);
  245. List<MtGoodsCate> dataList = cateMapper.selectList(lambdaQueryWrapper);
  246. return dataList;
  247. }
  248. /**
  249. * 获取分类ID
  250. *
  251. * @param merchantId 商户ID
  252. * @param storeId 店铺ID
  253. * @param name 分类名称
  254. * @return
  255. * */
  256. @Override
  257. public Integer getGoodsCateId(Integer merchantId, Integer storeId, String name) {
  258. Integer cate = 0;
  259. Map<String, Object> param = new HashMap<>();
  260. param.put("status", StatusEnum.ENABLED.getKey());
  261. param.put("name", name);
  262. if (storeId != null && storeId > 0) {
  263. param.put("storeId", storeId);
  264. }
  265. if (merchantId != null && merchantId > 0) {
  266. param.put("merchantId", merchantId);
  267. }
  268. List<MtGoodsCate> cateList = queryCateListByParams(param);
  269. if (cateList != null && cateList.size() > 0) {
  270. cate = cateList.get(0).getId();
  271. }
  272. return cate;
  273. }
  274. }