123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257 |
- package com.caimei.modules.groupbuy.service;
- import com.caimei.modules.club.entity.CmUser;
- import com.caimei.modules.club.entity.Page;
- import com.caimei.modules.groupbuy.dao.ProcureRepository;
- import com.caimei.modules.groupbuy.entity.AdditionalPo;
- import com.caimei.modules.groupbuy.entity.BuyerDto;
- import com.caimei.modules.groupbuy.entity.ProcurePo;
- import com.caimei.modules.shiro.dao.UserDao;
- import com.caimei.utils.ResponseJson;
- import lombok.extern.slf4j.Slf4j;
- import org.apache.commons.lang3.StringUtils;
- import org.springframework.beans.BeanUtils;
- import org.springframework.data.domain.PageImpl;
- import org.springframework.data.domain.PageRequest;
- import org.springframework.data.domain.Pageable;
- import org.springframework.data.domain.Sort;
- import org.springframework.data.mongodb.core.MongoTemplate;
- import org.springframework.data.mongodb.core.query.Criteria;
- import org.springframework.stereotype.Service;
- import org.springframework.data.mongodb.core.query.Query;
- import javax.annotation.Resource;
- import java.text.SimpleDateFormat;
- import java.time.Instant;
- import java.time.temporal.ChronoUnit;
- import java.util.*;
- import java.util.concurrent.atomic.AtomicReference;
- import java.util.regex.Pattern;
- @Slf4j
- @Service
- public class ProcureService {
- @Resource
- private ProcureRepository procureRepository;
- @Resource
- private MongoTemplate mongoTemplate;
- @Resource
- private AdditionalService additionalService;
- @Resource
- private UserDao userDao;
- /**
- * 保存
- *
- * @param procure
- */
- public void save(ProcurePo procure) {
- //如果需要自定义主键,可以在这里指定主键;如果不指定主键,MongoDB会自动生成主键
- //设置一些默认初始值。。。
- //调用dao
- procureRepository.save(procure);
- }
- /**
- * 修改
- *
- * @param procure
- */
- public void update(ProcurePo procure) {
- //调用dao
- procureRepository.save(procure);
- }
- /**
- * 根据id删除
- *
- * @param id
- */
- public void deleteById(String id) {
- //调用dao
- procureRepository.deleteById(id);
- }
- /**
- * 查询所有集采
- *
- * @return
- */
- public Page<ProcurePo> findList(int pageNo, int pageSize) {
- //调用dao
- Pageable pageable = PageRequest.of(pageNo, pageSize);
- Query query = new Query();
- query.addCriteria(Criteria.where("delFlag").is("0"));
- query.with(Sort.by(Sort.Direction.DESC, "saveTime"));
- List<ProcurePo> procurePos = mongoTemplate.find(query.with(pageable), ProcurePo.class);
- long count = mongoTemplate.count(query, ProcurePo.class);
- PageImpl<ProcurePo> page = new PageImpl<>(procurePos, pageable, count);
- return pageCopy(page, procurePos);
- }
- /**
- * 根据id查询
- *
- * @param id
- * @return
- */
- public ProcurePo findById(String id) {
- //调用dao
- return procureRepository.findById(id).get();
- }
- /**
- * 我参与的集采
- *
- * @param userId
- * @return
- */
- public List<ProcurePo> findInvolvedList(Integer userId) {
- Query query = new Query();
- query.addCriteria(Criteria.where("userId").is(userId));
- query.addCriteria(Criteria.where("createUserId").not().is(userId));
- query.with(Sort.by(Sort.Direction.DESC, "saveTime"));
- query.with(Sort.by(Sort.Direction.DESC, "isAchieve"));
- List<ProcurePo> procureList = mongoTemplate.find(query, ProcurePo.class);
- procureList.forEach(p -> {
- });
- return mongoTemplate.find(query, ProcurePo.class);
- }
- /**
- * 我发起的集采
- *
- * @param userId
- * @return
- */
- public List<ProcurePo> findUserList(Integer userId) {
- Query query = new Query();
- query.addCriteria(Criteria.where("createUserId").is(userId));
- query.with(Sort.by(Sort.Direction.DESC, "saveTime"));
- query.with(Sort.by(Sort.Direction.DESC, "isAchieve"));
- return mongoTemplate.find(query, ProcurePo.class);
- }
- public ProcurePo editData(Integer id, Integer userId) {
- Query query = new Query();
- query.addCriteria(Criteria.where("id").is(id));
- query.addCriteria(Criteria.where("userId").is(userId));
- return mongoTemplate.find(query, ProcurePo.class).get(0);
- }
- public Page<BuyerDto> findBuyListByPro(BuyerDto dto, Integer pageNum, Integer pageSize) {
- Pageable pageable = PageRequest.of(pageNum - 1, pageSize);
- Query query = new Query();
- setCriteriaVal(query, dto);
- query.with(Sort.by(Sort.Direction.DESC, "saveTime")).with(pageable);
- List<ProcurePo> procurePos = mongoTemplate.find(query, ProcurePo.class);
- List<BuyerDto> buyerDtos = new ArrayList<>();
- // 定义格式化字符串
- SimpleDateFormat dateFormat = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
- procurePos.forEach(p -> {
- BuyerDto buyerDto = new BuyerDto();
- String format = dateFormat.format(new Date(p.getSaveTime()));
- buyerDto.setSaveTime(format);
- int count = (int) mongoTemplate.count(Query.query(Criteria.where("procureId").is(p.getId())), AdditionalPo.class);
- log.info("p.getUserId()======"+p.getUserId());
- CmUser linkMan = userDao.findLinkMan(p.getUserId());
- log.info("linkMan======"+linkMan);
- buyerDto.setLinkMan(linkMan.getLinkMan());
- buyerDto.setMobile(linkMan.getMobile());
- buyerDto.setClubCount(count);
- // 1未完成 2已完成 3已删除
- Integer status = "0".equals(p.getIsAchieve()) ? 1 : 2;
- status = !"0".equals(p.getDelFlag()) ? 3 : status;
- buyerDto.setStatus(status);
- BeanUtils.copyProperties(p, buyerDto);
- AtomicReference<Integer> totalCount = new AtomicReference<>(0);
- totalCount.set(Integer.valueOf(p.getNumber()));
- List<AdditionalPo> procureById = additionalService.findProcureById(p.getId());
- procureById.forEach(b -> {
- ProcurePo byId1 = findById(b.getAdditionalId());
- totalCount.set(totalCount.get() + Integer.parseInt(byId1.getNumber()));
- });
- buyerDto.setNeedNum(totalCount.get());
- buyerDtos.add(buyerDto);
- });
- long count = mongoTemplate.count(query, ProcurePo.class);
- PageImpl<BuyerDto> page = new PageImpl<>(buyerDtos, pageable, count);
- return pageCopy(page, buyerDtos);
- }
- public <T> Page<T> pageCopy(PageImpl<T> page, List<T> info) {
- Page<T> result = new Page<>();
- result.setTotalPage(page.getTotalPages());
- result.setPageSize(page.getSize());
- result.setHasNextPage(page.hasNext());
- result.setHasPreviousPage(page.hasPrevious());
- result.setIndex(page.getPageable().getPageNumber());
- result.setPageSize(page.getPageable().getPageSize());
- result.setResults(info);
- return result;
- }
- public Query setCriteriaVal(Query query, BuyerDto dto) {
- // 发布者有创建者id
- query.addCriteria(Criteria.where("createUserId").ne(null));
- if (StringUtils.isNotBlank(dto.getClubName())) {
- Pattern pattern = Pattern.compile("^.*" + dto.getClubName() + ".*$", Pattern.CASE_INSENSITIVE);
- query.addCriteria(Criteria.where("clubName").regex(pattern));
- }
- if (StringUtils.isNotBlank(dto.getProductName())) {
- Pattern pattern = Pattern.compile("^.*" + dto.getProductName() + ".*$", Pattern.CASE_INSENSITIVE);
- query.addCriteria(Criteria.where("productName").regex(pattern));
- }
- if (null != dto.getStatus()) {
- if (3 == dto.getStatus()) {
- query.addCriteria(Criteria.where("delFlag").is("1"));
- } else {
- query.addCriteria(Criteria.where("isAchieve").is(dto.getStatus().toString()));
- query.addCriteria(Criteria.where("delFlag").is("0"));
- }
- }
- if (StringUtils.isNotBlank(dto.getLinkMan())) {
- query.addCriteria(Criteria.where("clubName").regex(".*" + dto.getLinkMan() + ".*"));
- }
- if (StringUtils.isNotBlank(dto.getStartSaveTime()) && StringUtils.isNotBlank(dto.getEndSaveTime())) {
- /**
- * 传入结束时间为当日0点,加一天改为当日结束时间
- */
- Instant start = Instant.parse(dto.getStartSaveTime());
- Instant end = Instant.parse(dto.getEndSaveTime());
- end = end.plus(1, ChronoUnit.DAYS);
- long st = start.toEpochMilli();
- long ed = end.toEpochMilli();
- query.addCriteria(Criteria.where("saveTime").gte(st).lte(ed));
- }
- return query;
- }
- public Map<String, Object> findDetail(String id) {
- // 发起者
- ProcurePo byId = findById(id.toString());
- // 参与者
- List<AdditionalPo> procureById = additionalService.findProcureById(byId.getId());
- List<ProcurePo> procurePos = new ArrayList<>();
- procureById.forEach(p -> {
- ProcurePo byId1 = findById(p.getAdditionalId());
- procurePos.add(byId1);
- });
- Map<String, Object> map = new HashMap<>(2);
- map.put("publishMan", byId);
- map.put("followMan", procurePos);
- return map;
- }
- public ResponseJson checkDone(String id) {
- ProcurePo byId = findById(id);
- byId.setIsAchieve("1");
- update(byId);
- return ResponseJson.success();
- }
- }
|