package com.xzx.gc.shop.service; import cn.hutool.core.collection.CollUtil; import cn.hutool.core.convert.Convert; import cn.hutool.core.util.ObjectUtil; import cn.hutool.core.util.StrUtil; import com.fasterxml.jackson.databind.DeserializationFeature; import com.fasterxml.jackson.databind.ObjectMapper; import com.github.pagehelper.PageHelper; import com.github.pagehelper.PageInfo; import com.xzx.gc.common.utils.StringUtils; import com.xzx.gc.entity.*; import com.xzx.gc.shop.dto.*; import com.xzx.gc.shop.mapper.*; import com.xzx.gc.shop.vo.ExpressInfoVo; import com.xzx.gc.shop.vo.QueryOrderListVo; import com.xzx.gc.shop.vo.ViewOrderVo; import lombok.extern.slf4j.Slf4j; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Service; import org.springframework.transaction.annotation.Transactional; import tk.mybatis.mapper.entity.Example; import javax.annotation.Resource; import java.util.*; @Service @Transactional @Slf4j public class OrderService { @Resource ScoreOrderMapper scoreOrderMapper; @Resource ScoreExpressInfoMapper scoreExpressInfoMapper; @Resource ScoreOrderDetailsMapper scoreOrderDetailsMapper; @Resource private AddressInfoMapper addressInfoMapper; @Autowired private AccountInfoMapper accountInfoMapper; @Autowired private ScoreGoodsStyleMapper scoreGoodsStyleMapper; @Autowired private ScoreGoodsSkuMapper scoreGoodsSkuMapper; @Autowired private ScoreGoodsMapper scoreGoodsMapper; public Map queryOrderList(QueryOrderListDto model) { String name = model.getName(); String orderNo = model.getOrderNo(); Integer status = model.getStatus() == null ? 0 : model.getStatus(); Date createdTimeStart = model.getCreatedTimeStart(); Date createdTimeEnd = model.getCreatedTimeEnd(); PageHelper.startPage(model.getPage(), model.getLimit()); List maps = scoreOrderMapper.queryOrderList(name,orderNo,status,createdTimeStart,createdTimeEnd); if(CollUtil.isNotEmpty(maps)){ for(QueryOrderListVo queryOrderListVo : maps){ String decode = StringUtils.decode(queryOrderListVo.getName()); queryOrderListVo.setName(decode); } } PageInfo pageInfo = new PageInfo(maps); int count = Convert.toInt(pageInfo.getTotal()); Map map = new HashMap<>(); map.put("data", maps); map.put("count", count); map.put("code", 0); return map; } public ViewOrderVo viewOrder(Long id) { ViewOrderVo viewOrderVo = new ViewOrderVo(); ScoreOrder scoreOrder = scoreOrderMapper.selectByPrimaryKey(id); if(ObjectUtil.isNotEmpty(scoreOrder)){ /** * 获取基本信息 * 获取物流信息 * 获取商品订单详情 */ ObjectMapper objectMapper = new ObjectMapper(); objectMapper.configure(DeserializationFeature.FAIL_ON_UNKNOWN_PROPERTIES, false); viewOrderVo = objectMapper.convertValue(scoreOrder, ViewOrderVo.class); // String voucherImg = viewOrderVo.getVoucherImg(); String voucherImg = scoreOrder.getVoucherImg(); List lists = StrUtil.splitTrim(voucherImg, ","); viewOrderVo.setVoucherImgs(lists); //2-待收货3-已收货4-已完成5-已评价,获取物流信息 Integer status = scoreOrder.getStatus() == null ? 0:scoreOrder.getStatus(); // if(ScoreOrder.STATUS_DOING == status // || ScoreOrder.STATUS_DONE == status // || ScoreOrder.STATUS_ON == status // || ScoreOrder.STATUS_EVALUATE == status){ Example exampleExpress = new Example(ScoreExpressInfo.class); Example.Criteria criteriaExpress = exampleExpress.createCriteria(); criteriaExpress.andEqualTo("orderId",id); ScoreExpressInfo scoreExpressInfo = scoreExpressInfoMapper.selectOneByExample(exampleExpress); ExpressInfoVo expressInfoVo = objectMapper.convertValue(scoreExpressInfo, ExpressInfoVo.class); viewOrderVo.setExpressInfoVo(expressInfoVo); // } //订单详情 Example exampleDetails = new Example(ScoreOrderDetails.class); Example.Criteria criteriaDetails = exampleDetails.createCriteria(); criteriaDetails.andEqualTo("orderId",id); List scoreOrderDetails = scoreOrderDetailsMapper.selectByExample(exampleDetails); if(CollUtil.isNotEmpty(scoreOrderDetails)){ viewOrderVo.setScoreOrderDetails(scoreOrderDetails); } } return viewOrderVo; } public Long deliverGoods(DeliverGoodsDto model) { /** * 获取物流表的信息 * 更新物流信息 * 更新订单状态 */ Long id = model.getId(); Example exampleExpress = new Example(ScoreExpressInfo.class); Example.Criteria criteriaExpress = exampleExpress.createCriteria(); criteriaExpress.andEqualTo("orderId",id); ScoreExpressInfo scoreExpressInfo = scoreExpressInfoMapper.selectOneByExample(exampleExpress); if(ObjectUtil.isNotEmpty(scoreExpressInfo)){ scoreExpressInfo.setExpressNo(model.getExpressNo()); scoreExpressInfo.setExpressCom(model.getExpressCom()); scoreExpressInfoMapper.updateByPrimaryKeySelective(scoreExpressInfo); ScoreOrder scoreOrder = new ScoreOrder(); scoreOrder.setId(id); scoreOrder.setStatus(ScoreOrder.STATUS_ON); scoreOrderMapper.updateByPrimaryKeySelective(scoreOrder); } return id; } public Long insureOrder(InsureOrderDto model) { ScoreOrder scoreOrder = new ScoreOrder(); scoreOrder.setId(model.getId()); scoreOrder.setStatus(ScoreOrder.STATUS_DONE); scoreOrder.setVoucherImg(CollUtil.join(model.getVoucherImgs(),",")); scoreOrderMapper.updateByPrimaryKeySelective(scoreOrder); return scoreOrder.getId(); } public void addOrder(AddGoodsOrderDto addGoodsOrderDto) { ScoreGoodsStyle style = scoreGoodsStyleMapper.selectByPrimaryKey(addGoodsOrderDto.getStyleId()); ScoreGoodsSku sku = scoreGoodsSkuMapper.selectByPrimaryKey(addGoodsOrderDto.getSkuId()); ScoreGoods goods = scoreGoodsMapper.selectByPrimaryKey(style.getGoodsId()); AddressInfo addressInfo = addressInfoMapper.selectByPrimaryKey(addGoodsOrderDto.getAddressId()); AccountInfo accountInfo = accountInfoMapper.selectAccountInfoByUserId(addGoodsOrderDto.getUserId()); } public Long cancelOrder(CancelOrderDto model) { /** * todo 只更新了订单状态,后续操作待增加 */ ScoreOrder scoreOrder = new ScoreOrder(); scoreOrder.setId(model.getId()); scoreOrder.setStatus(ScoreOrder.STATUS_CANCEL); scoreOrderMapper.updateByPrimaryKeySelective(scoreOrder); return scoreOrder.getId(); } }