ProcureService.java 8.3 KB

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