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<OrderItemInfo> 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<OrderInfo> findByManageReceiver(String receiver){
|
//当删除回收员需要判断是否有订单存在
|
Example example = new Example(OrderInfo.class);
|
Example.Criteria criteria = example.createCriteria();
|
criteria.andEqualTo("receiver", receiver);
|
List<String> list = new ArrayList<>();
|
list.add(OrderEnum.待入库.getValue());
|
list.add(OrderEnum.服务中.getValue());
|
criteria.andIn("orderStatus", list);
|
List<OrderInfo> 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<String> 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<OrderInfo> 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<String> 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<OrderInfo> list = orderMapper.findListOrderReceiveTime(receiver);
|
if(CollUtil.isEmpty(list)){
|
return 0;
|
}else {
|
List<String> 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<OrderInfo> findServiceOrderByUserIdAndStatus(String userId,List<String> status){
|
return orderMapper.findServiceOrderByUserIdAndStatus(userId,status);
|
}
|
|
public List<OrderInfoVo> findLastTimeBycreateUserId(String userId){
|
return orderMapper.findLastTimeBycreateUserId(userId);
|
}
|
|
|
/**
|
* 根据下单用户查找
|
* @param createUserId
|
* @param statusList
|
* @return
|
*/
|
public List<OrderInfo> findByCreateUserId(String createUserId, List<String> 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);
|
}
|
|
|
|
}
|