package com.xzx.gc.order.service; import cn.hutool.core.bean.BeanUtil; 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.entity.*; import com.xzx.gc.order.dto.AddJhyOrderDto; import com.xzx.gc.order.dto.JhyOrderConfirmDto; import com.xzx.gc.order.dto.JhyOrderConfirmItemsDto; import com.xzx.gc.order.dto.JhyOrderListDto; import com.xzx.gc.order.mapper.*; import com.xzx.gc.order.vo.JhyOrderDetailsVo; import com.xzx.gc.order.vo.JhyOrderListVo; import lombok.extern.slf4j.Slf4j; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Service; import org.springframework.transaction.annotation.Transactional; import javax.servlet.http.HttpServletRequest; import java.math.BigDecimal; import java.util.ArrayList; import java.util.Date; import java.util.List; @Slf4j @Service @Transactional public class JhyOrderService { @Autowired private JhyOrderMapper jhyOrderMapper; @Autowired private AddressMapper addressMapper; @Autowired private SysEnvironmentalInfoMapper environmentalInfoMapper; @Autowired private JhyOrderItemsMapper jhyOrderItemsMapper; @Autowired private JhyInfoMapper jhyInfoMapper; @Autowired private AccountMapper accountMapper; @Autowired private ScoreDetailsMapper scoreDetailsMapper; @Autowired private IdUtils idUtils; 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米是否有集物员 String orderNo = idUtils.generate("JW", 10); JhyOrder jhyOrder = new JhyOrder(); AddressInfo addressInfo = addressMapper.selectByPrimaryKey(orderDto.getAddressId()); jhyOrder.setOrderNo(orderNo); jhyOrder.setArea(addressInfo.getAddressArea()); StringBuffer address = new StringBuffer(); address.append(addressInfo.getDetailAddress()); if (StrUtil.isNotBlank(addressInfo.getTagName())) { address.append(StrUtil.isNotBlank(addressInfo.getHouseName()) ? addressInfo.getHouseName() : ""); if (Constants.ADDRESS_TYPE_HOME.equals(addressInfo.getTagName())) { address.append(StrUtil.isNotBlank(addressInfo.getHouseNumber()) ? addressInfo.getHouseNumber() : ""); address.append(StrUtil.isNotBlank(addressInfo.getUnitName()) ? addressInfo.getUnitName() : ""); } } jhyOrder.setAddress(address.toString()); jhyOrder.setUsername(addressInfo.getRelaName()); jhyOrder.setPhone(addressInfo.getMobilePhone()); jhyOrder.setLongitude(addressInfo.getLongitude()); jhyOrder.setLatitude(addressInfo.getLatitude()); jhyOrder.setReserveDate(orderDto.getReserveDate()); jhyOrder.setReserveTime(orderDto.getReserveTime()); jhyOrder.setWeight(orderDto.getWeight()); jhyOrder.setStatus(JhyOrder.ORDER_STATUS_WAITING); jhyOrder.setCreatedTime(new Date()); jhyOrder.setUserId(orderDto.getUserId()); jhyOrderMapper.insert(jhyOrder); long[] typeIds = StrUtil.splitToLong(orderDto.getTypeIds(), ","); for (long typeId : typeIds) { SysEnvironmentalInfo environmentalInfo = environmentalInfoMapper.selectByPrimaryKey(typeId); JhyOrderItems item = new JhyOrderItems(); item.setOrderId(jhyOrder.getId()); item.setPicture(environmentalInfo.getPicture()); item.setItemType(typeId); item.setTitle(environmentalInfo.getTitle()); item.setPrice(new BigDecimal(environmentalInfo.getPrice())); jhyOrderItemsMapper.insert(item); } } public PageInfo orderList(JhyOrderListDto orderListDto) { PageHelper.startPage(orderListDto.getPageNo(), orderListDto.getPageSize()); List data = jhyOrderMapper.selectJhyOrderList(orderListDto); return new PageInfo<>(data); } public JhyOrderDetailsVo orderDetails(Long orderId, String userId) { JhyOrder order = jhyOrderMapper.selectByPrimaryKey(orderId); List items = jhyOrderItemsMapper.selectOrderItems(orderId); BigDecimal total = BigDecimal.ZERO; for (JhyOrderItems item : items) { total = total.add(StrUtil.isNotBlank(item.getScore()) ? new BigDecimal(item.getScore()) : BigDecimal.ZERO); } JhyOrderDetailsVo detailsVo = new JhyOrderDetailsVo(); BeanUtil.copyProperties(order, detailsVo); detailsVo.setAddress(order.getArea() + order.getAddress()); detailsVo.setTotalPrice(total); detailsVo.setItems(items); return detailsVo; } public void grabOrder(Long orderId, String userId) { JhyInfo jhyInfo = jhyInfoMapper.selectJhyInfoByUserId(userId); if (jhyInfo == null || !JhyInfo.CHECK_PASS.equals(jhyInfo.getStatus())) { throw new RestException(-3, "不是集货员"); } JhyOrder order = jhyOrderMapper.selectByPrimaryKey(orderId); if (order == null) { throw new RestException(-3, "订单不存在"); } order.setJhyId(userId); order.setStatus(JhyOrder.ORDER_STATUS_IMG); jhyOrderMapper.updateByPrimaryKey(order); } public void cancelOrder(Long orderId, String userId) { JhyOrder order = jhyOrderMapper.selectByPrimaryKey(orderId); if (!userId.equals(order.getUserId()) && !userId.equals(order.getJhyId())) { throw new RestException(-3, "无权限操作"); } order.setStatus(JhyOrder.ORDER_STATUS_CANCEL); jhyOrderMapper.updateByPrimaryKey(order); } public void confirmOrder(JhyOrderConfirmDto confirmDto) { JhyInfo jhyInfo = jhyInfoMapper.selectJhyInfoByUserId(confirmDto.getUserId()); if (jhyInfo == null || !JhyInfo.CHECK_PASS.equals(jhyInfo.getStatus())) { throw new RestException(-3, "不是集物员"); } JhyOrder order = jhyOrderMapper.selectByPrimaryKey(confirmDto.getOrderId()); order.setStatus(JhyOrder.ORDER_STATUS_CONFIRM); order.setReceivingTime(new Date()); jhyOrderMapper.updateByPrimaryKey(order); BigDecimal totalScore = BigDecimal.ZERO; for (JhyOrderConfirmItemsDto item : confirmDto.getItems()) { JhyOrderItems orderItem = jhyOrderItemsMapper.selectByPrimaryKey(item.getId()); BigDecimal total = orderItem.getPrice().multiply(BigDecimal.valueOf(40)).multiply(new BigDecimal(item.getWeight())); orderItem.setScore(total.setScale(0, BigDecimal.ROUND_DOWN).toString()); orderItem.setWeight(new BigDecimal(item.getWeight())); jhyOrderItemsMapper.updateByPrimaryKey(orderItem); totalScore = totalScore.add(total); } AccountInfo jhyAccount = accountMapper.selectAccountInfoByUserId(order.getJhyId()); BigDecimal jhyScore = StrUtil.isBlank(jhyAccount.getCollectScore()) ? BigDecimal.ZERO : new BigDecimal(jhyAccount.getCollectScore()); ScoreDetails jhyScoreDetail = new ScoreDetails(); jhyScoreDetail.setOrderNo(order.getOrderNo()); jhyScoreDetail.setUserId(order.getJhyId()); jhyScoreDetail.setType(ScoreDetails.SCORE_TYPE_PAY); jhyScoreDetail.setChangeScore(totalScore.negate()); jhyScoreDetail.setOriginalScore(jhyScore); jhyScoreDetail.setCurrentScore(jhyScore.subtract(totalScore)); scoreDetailsMapper.insert(jhyScoreDetail); AccountInfo userAccount = accountMapper.selectAccountInfoByUserId(order.getUserId()); BigDecimal userScore = StrUtil.isBlank(userAccount.getCollectScore()) ? BigDecimal.ZERO : new BigDecimal(userAccount.getCollectScore()); ScoreDetails userScoreDetail = new ScoreDetails(); userScoreDetail.setOrderNo(order.getOrderNo()); userScoreDetail.setUserId(order.getJhyId()); userScoreDetail.setType(ScoreDetails.SCORE_TYPE_EXCHANGE); userScoreDetail.setChangeScore(totalScore); userScoreDetail.setOriginalScore(userScore); userScoreDetail.setCurrentScore(userScore.add(totalScore)); scoreDetailsMapper.insert(userScoreDetail); } }