ProcureService.java 9.5 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257
  1. package com.caimei.modules.groupbuy.service;
  2. import com.caimei.modules.club.entity.CmUser;
  3. import com.caimei.modules.club.entity.Page;
  4. import com.caimei.modules.groupbuy.dao.ProcureRepository;
  5. import com.caimei.modules.groupbuy.entity.AdditionalPo;
  6. import com.caimei.modules.groupbuy.entity.BuyerDto;
  7. import com.caimei.modules.groupbuy.entity.ProcurePo;
  8. import com.caimei.modules.shiro.dao.UserDao;
  9. import com.caimei.utils.ResponseJson;
  10. import lombok.extern.slf4j.Slf4j;
  11. import org.apache.commons.lang3.StringUtils;
  12. import org.springframework.beans.BeanUtils;
  13. import org.springframework.data.domain.PageImpl;
  14. import org.springframework.data.domain.PageRequest;
  15. import org.springframework.data.domain.Pageable;
  16. import org.springframework.data.domain.Sort;
  17. import org.springframework.data.mongodb.core.MongoTemplate;
  18. import org.springframework.data.mongodb.core.query.Criteria;
  19. import org.springframework.stereotype.Service;
  20. import org.springframework.data.mongodb.core.query.Query;
  21. import javax.annotation.Resource;
  22. import java.text.SimpleDateFormat;
  23. import java.time.Instant;
  24. import java.time.temporal.ChronoUnit;
  25. import java.util.*;
  26. import java.util.concurrent.atomic.AtomicReference;
  27. import java.util.regex.Pattern;
  28. @Slf4j
  29. @Service
  30. public class ProcureService {
  31. @Resource
  32. private ProcureRepository procureRepository;
  33. @Resource
  34. private MongoTemplate mongoTemplate;
  35. @Resource
  36. private AdditionalService additionalService;
  37. @Resource
  38. private UserDao userDao;
  39. /**
  40. * 保存
  41. *
  42. * @param procure
  43. */
  44. public void save(ProcurePo procure) {
  45. //如果需要自定义主键,可以在这里指定主键;如果不指定主键,MongoDB会自动生成主键
  46. //设置一些默认初始值。。。
  47. //调用dao
  48. procureRepository.save(procure);
  49. }
  50. /**
  51. * 修改
  52. *
  53. * @param procure
  54. */
  55. public void update(ProcurePo procure) {
  56. //调用dao
  57. procureRepository.save(procure);
  58. }
  59. /**
  60. * 根据id删除
  61. *
  62. * @param id
  63. */
  64. public void deleteById(String id) {
  65. //调用dao
  66. procureRepository.deleteById(id);
  67. }
  68. /**
  69. * 查询所有集采
  70. *
  71. * @return
  72. */
  73. public Page<ProcurePo> findList(int pageNo, int pageSize) {
  74. //调用dao
  75. Pageable pageable = PageRequest.of(pageNo, pageSize);
  76. Query query = new Query();
  77. query.addCriteria(Criteria.where("delFlag").is("0"));
  78. query.with(Sort.by(Sort.Direction.DESC, "saveTime"));
  79. List<ProcurePo> procurePos = mongoTemplate.find(query.with(pageable), ProcurePo.class);
  80. long count = mongoTemplate.count(query, ProcurePo.class);
  81. PageImpl<ProcurePo> page = new PageImpl<>(procurePos, pageable, count);
  82. return pageCopy(page, procurePos);
  83. }
  84. /**
  85. * 根据id查询
  86. *
  87. * @param id
  88. * @return
  89. */
  90. public ProcurePo findById(String id) {
  91. //调用dao
  92. return procureRepository.findById(id).get();
  93. }
  94. /**
  95. * 我参与的集采
  96. *
  97. * @param userId
  98. * @return
  99. */
  100. public List<ProcurePo> findInvolvedList(Integer userId) {
  101. Query query = new Query();
  102. query.addCriteria(Criteria.where("userId").is(userId));
  103. query.addCriteria(Criteria.where("createUserId").not().is(userId));
  104. query.with(Sort.by(Sort.Direction.DESC, "saveTime"));
  105. query.with(Sort.by(Sort.Direction.DESC, "isAchieve"));
  106. List<ProcurePo> procureList = mongoTemplate.find(query, ProcurePo.class);
  107. procureList.forEach(p -> {
  108. });
  109. return mongoTemplate.find(query, ProcurePo.class);
  110. }
  111. /**
  112. * 我发起的集采
  113. *
  114. * @param userId
  115. * @return
  116. */
  117. public List<ProcurePo> findUserList(Integer userId) {
  118. Query query = new Query();
  119. query.addCriteria(Criteria.where("createUserId").is(userId));
  120. query.with(Sort.by(Sort.Direction.DESC, "saveTime"));
  121. query.with(Sort.by(Sort.Direction.DESC, "isAchieve"));
  122. return mongoTemplate.find(query, ProcurePo.class);
  123. }
  124. public ProcurePo editData(Integer id, Integer userId) {
  125. Query query = new Query();
  126. query.addCriteria(Criteria.where("id").is(id));
  127. query.addCriteria(Criteria.where("userId").is(userId));
  128. return mongoTemplate.find(query, ProcurePo.class).get(0);
  129. }
  130. public Page<BuyerDto> findBuyListByPro(BuyerDto dto, Integer pageNum, Integer pageSize) {
  131. Pageable pageable = PageRequest.of(pageNum - 1, pageSize);
  132. Query query = new Query();
  133. setCriteriaVal(query, dto);
  134. query.with(Sort.by(Sort.Direction.DESC, "saveTime")).with(pageable);
  135. List<ProcurePo> procurePos = mongoTemplate.find(query, ProcurePo.class);
  136. List<BuyerDto> buyerDtos = new ArrayList<>();
  137. // 定义格式化字符串
  138. SimpleDateFormat dateFormat = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
  139. procurePos.forEach(p -> {
  140. BuyerDto buyerDto = new BuyerDto();
  141. String format = dateFormat.format(new Date(p.getSaveTime()));
  142. buyerDto.setSaveTime(format);
  143. int count = (int) mongoTemplate.count(Query.query(Criteria.where("procureId").is(p.getId())), AdditionalPo.class);
  144. log.info("p.getUserId()======"+p.getUserId());
  145. CmUser linkMan = userDao.findLinkMan(p.getUserId());
  146. log.info("linkMan======"+linkMan);
  147. buyerDto.setLinkMan(linkMan.getLinkMan());
  148. buyerDto.setMobile(linkMan.getMobile());
  149. buyerDto.setClubCount(count);
  150. // 1未完成 2已完成 3已删除
  151. Integer status = "0".equals(p.getIsAchieve()) ? 1 : 2;
  152. status = !"0".equals(p.getDelFlag()) ? 3 : status;
  153. buyerDto.setStatus(status);
  154. BeanUtils.copyProperties(p, buyerDto);
  155. AtomicReference<Integer> totalCount = new AtomicReference<>(0);
  156. totalCount.set(Integer.valueOf(p.getNumber()));
  157. List<AdditionalPo> procureById = additionalService.findProcureById(p.getId());
  158. procureById.forEach(b -> {
  159. ProcurePo byId1 = findById(b.getAdditionalId());
  160. totalCount.set(totalCount.get() + Integer.parseInt(byId1.getNumber()));
  161. });
  162. buyerDto.setNeedNum(totalCount.get());
  163. buyerDtos.add(buyerDto);
  164. });
  165. long count = mongoTemplate.count(query, ProcurePo.class);
  166. PageImpl<BuyerDto> page = new PageImpl<>(buyerDtos, pageable, count);
  167. return pageCopy(page, buyerDtos);
  168. }
  169. public <T> Page<T> pageCopy(PageImpl<T> page, List<T> info) {
  170. Page<T> result = new Page<>();
  171. result.setTotalPage(page.getTotalPages());
  172. result.setPageSize(page.getSize());
  173. result.setHasNextPage(page.hasNext());
  174. result.setHasPreviousPage(page.hasPrevious());
  175. result.setIndex(page.getPageable().getPageNumber());
  176. result.setPageSize(page.getPageable().getPageSize());
  177. result.setResults(info);
  178. return result;
  179. }
  180. public Query setCriteriaVal(Query query, BuyerDto dto) {
  181. // 发布者有创建者id
  182. query.addCriteria(Criteria.where("createUserId").ne(null));
  183. if (StringUtils.isNotBlank(dto.getClubName())) {
  184. Pattern pattern = Pattern.compile("^.*" + dto.getClubName() + ".*$", Pattern.CASE_INSENSITIVE);
  185. query.addCriteria(Criteria.where("clubName").regex(pattern));
  186. }
  187. if (StringUtils.isNotBlank(dto.getProductName())) {
  188. Pattern pattern = Pattern.compile("^.*" + dto.getProductName() + ".*$", Pattern.CASE_INSENSITIVE);
  189. query.addCriteria(Criteria.where("productName").regex(pattern));
  190. }
  191. if (null != dto.getStatus()) {
  192. if (3 == dto.getStatus()) {
  193. query.addCriteria(Criteria.where("delFlag").is("1"));
  194. } else {
  195. query.addCriteria(Criteria.where("isAchieve").is(dto.getStatus().toString()));
  196. query.addCriteria(Criteria.where("delFlag").is("0"));
  197. }
  198. }
  199. if (StringUtils.isNotBlank(dto.getLinkMan())) {
  200. query.addCriteria(Criteria.where("clubName").regex(".*" + dto.getLinkMan() + ".*"));
  201. }
  202. if (StringUtils.isNotBlank(dto.getStartSaveTime()) && StringUtils.isNotBlank(dto.getEndSaveTime())) {
  203. /**
  204. * 传入结束时间为当日0点,加一天改为当日结束时间
  205. */
  206. Instant start = Instant.parse(dto.getStartSaveTime());
  207. Instant end = Instant.parse(dto.getEndSaveTime());
  208. end = end.plus(1, ChronoUnit.DAYS);
  209. long st = start.toEpochMilli();
  210. long ed = end.toEpochMilli();
  211. query.addCriteria(Criteria.where("saveTime").gte(st).lte(ed));
  212. }
  213. return query;
  214. }
  215. public Map<String, Object> findDetail(String id) {
  216. // 发起者
  217. ProcurePo byId = findById(id.toString());
  218. // 参与者
  219. List<AdditionalPo> procureById = additionalService.findProcureById(byId.getId());
  220. List<ProcurePo> procurePos = new ArrayList<>();
  221. procureById.forEach(p -> {
  222. ProcurePo byId1 = findById(p.getAdditionalId());
  223. procurePos.add(byId1);
  224. });
  225. Map<String, Object> map = new HashMap<>(2);
  226. map.put("publishMan", byId);
  227. map.put("followMan", procurePos);
  228. return map;
  229. }
  230. public ResponseJson checkDone(String id) {
  231. ProcurePo byId = findById(id);
  232. byId.setIsAchieve("1");
  233. update(byId);
  234. return ResponseJson.success();
  235. }
  236. }