|  |  | 
 |  |  | package com.xzx.gc.order.service; | 
 |  |  |  | 
 |  |  | import cn.hutool.core.bean.BeanUtil; | 
 |  |  | import cn.hutool.core.collection.CollUtil; | 
 |  |  | import cn.hutool.core.convert.Convert; | 
 |  |  | import cn.hutool.core.util.StrUtil; | 
 |  |  | import com.github.pagehelper.PageHelper; | 
 |  |  | import com.github.pagehelper.PageInfo; | 
 |  |  | import com.xzx.gc.common.constant.Constants; | 
 |  |  | import com.xzx.gc.common.exception.RestException; | 
 |  |  | import com.xzx.gc.common.utils.IdUtils; | 
 |  |  | import com.xzx.gc.common.utils.LocationUtils; | 
 |  |  | import com.xzx.gc.entity.*; | 
 |  |  | import com.xzx.gc.order.dto.AddJhyOrderDto; | 
 |  |  | import com.xzx.gc.order.dto.JhyOrderConfirmDto; | 
 |  |  | 
 |  |  | import com.xzx.gc.order.mapper.*; | 
 |  |  | import com.xzx.gc.order.vo.JhyOrderDetailsVo; | 
 |  |  | import com.xzx.gc.order.vo.JhyOrderListVo; | 
 |  |  | import com.xzx.gc.order.vo.JhyStatusCountVo; | 
 |  |  | import lombok.extern.slf4j.Slf4j; | 
 |  |  | import org.springframework.beans.factory.annotation.Autowired; | 
 |  |  | import org.springframework.stereotype.Service; | 
 |  |  | 
 |  |  |  | 
 |  |  | import javax.servlet.http.HttpServletRequest; | 
 |  |  | import java.math.BigDecimal; | 
 |  |  | import java.util.ArrayList; | 
 |  |  | import java.util.Date; | 
 |  |  | import java.util.List; | 
 |  |  | import java.util.*; | 
 |  |  |  | 
 |  |  | @Slf4j | 
 |  |  | @Service | 
 |  |  | 
 |  |  |     @Autowired | 
 |  |  |     private IdUtils idUtils; | 
 |  |  |  | 
 |  |  |     @Autowired | 
 |  |  |     private DistribService distribService; | 
 |  |  |  | 
 |  |  |     public void addJhyOrder(AddJhyOrderDto orderDto) { | 
 |  |  |         JhyInfo jhyInfo = jhyInfoMapper.selectJhyInfoByUserId(orderDto.getUserId()); | 
 |  |  |         if (jhyInfo != null && JhyInfo.CHECK_PASS.equals(jhyInfo.getStatus())) { | 
 |  |  |             throw new RestException(-3, "集货员不能下单"); | 
 |  |  |         } | 
 |  |  |  | 
 |  |  |         // TODO 判断地址附近500米是否有集物员 | 
 |  |  |         AddressInfo addressInfo = addressMapper.selectByPrimaryKey(orderDto.getAddressId()); | 
 |  |  |  | 
 |  |  |         List<JhyInfo> jhyInfos = jhyInfoMapper.selectJhyInfoListInAddressRange(addressInfo.getAddressId()); | 
 |  |  |         if (CollUtil.isEmpty(jhyInfos)) { | 
 |  |  |             throw new RestException(-3, "该区域暂无集物员"); | 
 |  |  |         } | 
 |  |  |  | 
 |  |  |         String orderNo = idUtils.generate("JW", 10); | 
 |  |  |  | 
 |  |  |         JhyOrder jhyOrder = new JhyOrder(); | 
 |  |  |         AddressInfo addressInfo = addressMapper.selectByPrimaryKey(orderDto.getAddressId()); | 
 |  |  |  | 
 |  |  |         jhyOrder.setOrderNo(orderNo); | 
 |  |  |         jhyOrder.setArea(addressInfo.getAddressArea()); | 
 |  |  | 
 |  |  |         JhyOrderDetailsVo detailsVo = new JhyOrderDetailsVo(); | 
 |  |  |         BeanUtil.copyProperties(order, detailsVo); | 
 |  |  |  | 
 |  |  |         detailsVo.setLongitude(order.getLongitude()); | 
 |  |  |         detailsVo.setLatitude(order.getLatitude()); | 
 |  |  |         detailsVo.setAddress(order.getArea() + order.getAddress()); | 
 |  |  |         detailsVo.setTotalPrice(total); | 
 |  |  |         detailsVo.setItems(items); | 
 |  |  | 
 |  |  |             order.setStatus(JhyOrder.ORDER_STATUS_CANCEL); | 
 |  |  |         } | 
 |  |  |  | 
 |  |  |         order.setJhyId(null); | 
 |  |  |         jhyOrderMapper.updateByPrimaryKey(order); | 
 |  |  |     } | 
 |  |  |  | 
 |  |  | 
 |  |  |  | 
 |  |  |         userAccount.setCollectScore(userScore.add(totalScore).setScale( 0, BigDecimal.ROUND_DOWN ).toString()); | 
 |  |  |         accountMapper.updateByPrimaryKey(userAccount); | 
 |  |  |  | 
 |  |  |         distribService.distribRecord(order.getId(), order.getUserId()); | 
 |  |  |     } | 
 |  |  |  | 
 |  |  |     public Map<Integer, Integer> orderStatusCount(Integer type, String userId) { | 
 |  |  |         List<JhyStatusCountVo> count = jhyOrderMapper.selectOrderStatusCount(type, userId); | 
 |  |  |  | 
 |  |  |         Map<Integer, Integer> map = new HashMap<>(); | 
 |  |  |         for (int i = 1; i < 6; i++) { | 
 |  |  |             if (CollUtil.isNotEmpty(count)) { | 
 |  |  |                 boolean flag = false; | 
 |  |  |                 for (JhyStatusCountVo jhyStatusCountVo : count) { | 
 |  |  |                     if (i == jhyStatusCountVo.getStatus()) { | 
 |  |  |                         map.put(i, jhyStatusCountVo.getCnt()); | 
 |  |  |                         flag = true; | 
 |  |  |                         break; | 
 |  |  |                     } | 
 |  |  |                 } | 
 |  |  |  | 
 |  |  |                 if (flag) { | 
 |  |  |                     continue; | 
 |  |  |                 } | 
 |  |  |             } | 
 |  |  |  | 
 |  |  |             map.put(i, 0); | 
 |  |  |         } | 
 |  |  |  | 
 |  |  |         return map; | 
 |  |  |     } | 
 |  |  | } |