package com.xzx.gc.user.service; import cn.hutool.core.collection.CollUtil; import cn.hutool.core.convert.Convert; import cn.hutool.core.date.DateUtil; import cn.hutool.core.util.NumberUtil; import cn.hutool.core.util.StrUtil; import com.google.common.collect.Ordering; import com.xzx.gc.common.constant.Constants; import com.xzx.gc.common.constant.OrderEnum; import com.xzx.gc.common.utils.BusinessUtil; import com.xzx.gc.common.utils.DateUtils; import com.xzx.gc.entity.OrderInfo; import com.xzx.gc.entity.OrderItemInfo; import com.xzx.gc.model.order.OrderInfoVo; import com.xzx.gc.user.dto.RecycleStatistic; import com.xzx.gc.user.mapper.OrderDetailMapper; import com.xzx.gc.user.mapper.OrderMapper; import com.xzx.gc.user.mapper.SysEnvironmentalInfoMapper; import lombok.extern.slf4j.Slf4j; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Service; import org.springframework.transaction.annotation.Transactional; import org.springframework.util.CollectionUtils; import tk.mybatis.mapper.entity.Example; import java.math.BigDecimal; import java.util.ArrayList; import java.util.Date; import java.util.List; import java.util.stream.Collectors; @Service @Transactional @Slf4j public class OrderService { @Autowired private OrderMapper orderMapper; /** * 统计今天和累计的回收重量和金钱 * @param type 1为用户 其他为回收员 * @return */ public RecycleStatistic findOrderItemInfo(String userId,int type){ RecycleStatistic recycleStatistic=null; List list=orderMapper.findOrderItemInfo(userId,type); BigDecimal money=BigDecimal.ZERO; BigDecimal moneyToday=BigDecimal.ZERO; BigDecimal weight=BigDecimal.ZERO; BigDecimal weightToday=BigDecimal.ZERO; if(!CollectionUtils.isEmpty(list)){ for (OrderItemInfo orderItemInfo : list) { money=NumberUtil.add(money,Convert.toBigDecimal(orderItemInfo.getMoney(),Constants.MONEY_INIT)); weight=NumberUtil.add(weight,Convert.toBigDecimal(orderItemInfo.getWeight(),Constants.WEIGHT_INIT)); String s = DateUtil.parse(orderItemInfo.getCreateTime(), DateUtils.DATE_FORMAT_YMD).toDateStr(); if(DateUtil.format(new Date(),DateUtils.DATE_FORMAT_YMD).equals(s)){ moneyToday=NumberUtil.add(moneyToday,Convert.toBigDecimal(orderItemInfo.getMoney(),Constants.MONEY_INIT)); weightToday=NumberUtil.add(weightToday,Convert.toBigDecimal(orderItemInfo.getWeight(),Constants.WEIGHT_INIT)); } } recycleStatistic=new RecycleStatistic(); recycleStatistic.setMoneyAll(Convert.toStr(money)); recycleStatistic.setWeightAll(Convert.toStr(weight)); recycleStatistic.setWeightToday(Convert.toStr(weightToday)); recycleStatistic.setMoneyToday(Convert.toStr(moneyToday)); } return recycleStatistic; } /** * 查询回收员是否有正在操作的单 * @param receiver * @return */ public List findByManageReceiver(String receiver){ //当删除回收员需要判断是否有订单存在 Example example = new Example(OrderInfo.class); Example.Criteria criteria = example.createCriteria(); criteria.andEqualTo("receiver", receiver); List list = new ArrayList<>(); list.add(OrderEnum.待入库.getValue()); list.add(OrderEnum.服务中.getValue()); criteria.andIn("orderStatus", list); List list1 = orderMapper.selectByExample(example); return list1; } /** * * @param userId * @param time * @param type * @return */ public int findByCreateTime(String userId,String time,int type){ Example example = new Example(OrderInfo.class); Example.Criteria criteria = example.createCriteria(); criteria.andEqualTo("createUserId", userId); List list = new ArrayList<>(); list.add(OrderEnum.待入库.getValue()); list.add(OrderEnum.入库中.getValue()); list.add(OrderEnum.完成.getValue()); criteria.andIn("orderStatus", list); //上线时间 if (0 == type) { criteria.andGreaterThan("createTime", time); } else if (1 == type) { criteria.andLessThan("createTime", time); } int i = orderMapper.selectCountByExample(example); return i; } public void add(OrderInfo orderInfo){ orderMapper.insertSelective(orderInfo); } public List findByCreateUserIdAndNotNullTown(String userId){ Example example = new Example(OrderInfo.class); Example.Criteria criteria = example.createCriteria(); criteria.andEqualTo("createUserId", userId); criteria.andIsNotNull("townId"); return orderMapper.selectByExample(example); } public OrderInfo findById(String id){ return orderMapper.selectByPrimaryKey(id); } /** * 查询当前服务的数目 * @param userId * @return */ public int findFwzNum(String userId){ Example example = new Example(OrderInfo.class); Example.Criteria criteria = example.createCriteria(); criteria.andEqualTo("receiver", userId); List list = new ArrayList<>(); list.add(OrderEnum.服务中.getValue()); list.add(OrderEnum.待接单.getValue()); criteria.andIn("orderStatus", list); int i = orderMapper.selectCountByExample(example); return i; } /** * 查找当前用户所处服务中的位置 * @param receiver * @param createUserId * @return */ public int findListOrderReceiveTime(String receiver,String createUserId){ List list = orderMapper.findListOrderReceiveTime(receiver); if(CollUtil.isEmpty(list)){ return 0; }else { List collect = list.stream().map(x -> x.getCreateUserId()).collect(Collectors.toList()); if(StrUtil.isNotBlank(createUserId)) { int i = collect.indexOf(createUserId); i=i==-1?collect.size():i; return i; }else { return collect.size(); } } } /** * 根据订单状态和回收员查询订单 * @param userId * @param status * @return */ public List findServiceOrderByUserIdAndStatus(String userId,List status){ return orderMapper.findServiceOrderByUserIdAndStatus(userId,status); } public List findLastTimeBycreateUserId(String userId){ return orderMapper.findLastTimeBycreateUserId(userId); } /** * 根据下单用户查找 * @param createUserId * @param statusList * @return */ public List findByCreateUserId(String createUserId, List statusList){ Example example = new Example(OrderInfo.class); Example.Criteria criteria = example.createCriteria(); criteria.andEqualTo("createUserId", createUserId); if(CollUtil.isNotEmpty(statusList)) { criteria.andIn("orderStatus", statusList); } example.setOrderByClause("create_time desc"); return orderMapper.selectByExample(example); } }