package com.panzhihua.service_community.service.impl; import cn.binarywang.wx.miniapp.api.WxMaService; import cn.hutool.core.collection.CollUtil; import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; import com.baomidou.mybatisplus.core.metadata.IPage; import com.baomidou.mybatisplus.extension.plugins.pagination.Page; import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; import com.panzhihua.common.constants.Constants; import com.panzhihua.common.model.dtos.shop.ComShopFlowerOrderDeliveryDTO; import com.panzhihua.common.model.dtos.shop.PageComFlowerOrderDeliveryDTO; import com.panzhihua.common.model.dtos.shop.PageComFlowerOrderListDTO; import com.panzhihua.common.model.vos.R; import com.panzhihua.common.model.vos.community.convenient.ConvenientElevatingPointOrderVO; import com.panzhihua.common.model.vos.community.convenient.ConvenientElevatingPointVO; import com.panzhihua.common.model.vos.shop.ComShopFlowerOrderDeliveryVO; import com.panzhihua.common.model.vos.shop.ComShopFlowerOrderPageVO; import com.panzhihua.common.model.vos.user.SysUserVO; import com.panzhihua.common.service.user.UserService; import com.panzhihua.common.utlis.OrderNoUtils; import com.panzhihua.common.utlis.WxUtil; import com.panzhihua.service_community.dao.ComShopFlowerOrderDAO; import com.panzhihua.service_community.dao.ComShopFlowerOrderDeliveryDAO; import com.panzhihua.service_community.dao.ConvenientElevatingPointDAO; import com.panzhihua.service_community.entity.SysUser; import com.panzhihua.service_community.model.dos.ComShopFlowerOrderDO; import com.panzhihua.service_community.model.dos.ComShopFlowerOrderDeliveryDO; import com.panzhihua.service_community.model.dos.ConvenientElevatingPointDO; import com.panzhihua.service_community.service.ComShopFlowerOrderDeliveryService; import com.panzhihua.service_community.util.WxMaConfiguration; import lombok.extern.slf4j.Slf4j; import me.chanjar.weixin.common.error.WxErrorException; import org.springframework.beans.BeanUtils; import org.springframework.stereotype.Service; import org.springframework.transaction.annotation.Transactional; import javax.annotation.Resource; import java.util.Date; import java.util.List; import java.util.Objects; import java.util.stream.Collectors; import static java.util.Objects.nonNull; /** * @auther yh * @create 2022-11-08 17:25:45 * @describe 配送单 */ @Slf4j @Service public class ComShopFlowerOrderDeliveryServiceImpl extends ServiceImpl implements ComShopFlowerOrderDeliveryService { @Resource private ComShopFlowerOrderDAO comShopFlowerOrderDAO; @Resource private ConvenientElevatingPointDAO convenientElevatingPointDAO; @Resource private WxMaConfiguration wxMaConfiguration; @Resource private UserService userService; @Override @Transactional(rollbackFor = Exception.class) public R saveDelivery(ComShopFlowerOrderDeliveryDTO comShopFlowerOrderDeliveryDTO) { ComShopFlowerOrderDeliveryDO comShopFlowerOrderDeliveryDO = new ComShopFlowerOrderDeliveryDO(); BeanUtils.copyProperties(comShopFlowerOrderDeliveryDTO,comShopFlowerOrderDeliveryDO); //创建配送单号 String deliveryNo = OrderNoUtils.nextDeliveryNo(); comShopFlowerOrderDeliveryDO.setDeliveryNo(deliveryNo); comShopFlowerOrderDeliveryDO.setDeliveryTime(new Date()); comShopFlowerOrderDeliveryDO.setDeleteStatus(ComShopFlowerOrderDeliveryDO.deliveryStatus.psz); comShopFlowerOrderDeliveryDO.setDeleteStatus(ComShopFlowerOrderDeliveryDO.deleteStatus.wsc); int insert = this.baseMapper.insert(comShopFlowerOrderDeliveryDO); if (insert > 0){ Long deliveryId = comShopFlowerOrderDeliveryDO.getId(); List orderIds = comShopFlowerOrderDeliveryDTO.getOrderIds(); if (CollUtil.isNotEmpty(orderIds)){ comShopFlowerOrderDAO.updateOrder(orderIds,deliveryId,comShopFlowerOrderDeliveryDO.getDeliveryNo(), ComShopFlowerOrderDO.status.psz,comShopFlowerOrderDeliveryDO.getDeliveryTime()); //订单配送通知 WxMaService maService = wxMaConfiguration.getMaService(Constants.HC_APP_ID); List comShopFlowerOrderDOS = comShopFlowerOrderDAO.selectList(new LambdaQueryWrapper().in(ComShopFlowerOrderDO::getId, orderIds)); for (ComShopFlowerOrderDO comShopFlowerOrderDO : comShopFlowerOrderDOS) { Long userId = comShopFlowerOrderDO.getUserId(); R userOpenId = userService.getUserOpenId(userId); if (R.isOk(userOpenId)) { String openid = userOpenId.getData().toString(); try { WxUtil.sendStartShipping(openid,maService.getAccessToken(),comShopFlowerOrderDO.getOrderNo()); } catch (WxErrorException e) { e.printStackTrace(); } } } } } return R.ok(comShopFlowerOrderDeliveryDO.getId()); } @Override @Transactional(rollbackFor = Exception.class) public R updateDelivery(ComShopFlowerOrderDeliveryDTO comShopFlowerOrderDeliveryDTO) { Long id = comShopFlowerOrderDeliveryDTO.getId(); if (null == id){ return R.fail("配送单id不能为空"); } ComShopFlowerOrderDeliveryDO comShopFlowerOrderDeliveryDO = this.baseMapper.selectById(id); if (Objects.isNull(comShopFlowerOrderDeliveryDO)){ return R.fail("不存在该配送单"); } comShopFlowerOrderDeliveryDO.setServiceTime(new Date()); comShopFlowerOrderDeliveryDO.setDeliveryStatus(ComShopFlowerOrderDeliveryDO.deliveryStatus.ysd); int update = this.baseMapper.updateById(comShopFlowerOrderDeliveryDO); if (update > 0){ //一个自提订单算一个货 ConvenientElevatingPointDO convenientElevatingPointDO = convenientElevatingPointDAO.selectById(comShopFlowerOrderDeliveryDO.getPointId()); convenientElevatingPointDO.setCumulativeGoodsNum(convenientElevatingPointDO.getCumulativeGoodsNum() + comShopFlowerOrderDeliveryDO.getDeliveryOrderNum()); convenientElevatingPointDO.setPrepareGoodsNum(convenientElevatingPointDO.getPrepareGoodsNum()+comShopFlowerOrderDeliveryDO.getDeliveryOrderNum()); convenientElevatingPointDAO.updateById(convenientElevatingPointDO); comShopFlowerOrderDAO.updateOrderStatus(comShopFlowerOrderDeliveryDO.getId(),comShopFlowerOrderDeliveryDO.getServiceTime(),ComShopFlowerOrderDO.status.dsh); WxMaService maService = wxMaConfiguration.getMaService(Constants.HC_APP_ID); List comShopFlowerOrderDOS = comShopFlowerOrderDAO.selectList(new LambdaQueryWrapper().eq(ComShopFlowerOrderDO::getDeliveryId, id)); for (ComShopFlowerOrderDO comShopFlowerOrderDO : comShopFlowerOrderDOS) { Long userId = comShopFlowerOrderDO.getUserId(); R userOpenId = userService.getUserOpenId(userId); if (R.isOk(userOpenId)) { String openid = userOpenId.getData().toString(); try { WxUtil.sendService(openid,maService.getAccessToken(),comShopFlowerOrderDeliveryDO.getPointName()); } catch (WxErrorException e) { e.printStackTrace(); } } } } return R.ok(); } @Override public R pageDelivery(PageComFlowerOrderDeliveryDTO pageComFlowerOrderDeliveryDTO) { Page page = new Page<>(pageComFlowerOrderDeliveryDTO.getPageNum(),pageComFlowerOrderDeliveryDTO.getPageSize()); IPage page1 = this.baseMapper.pageDelivery(page, pageComFlowerOrderDeliveryDTO); for (ComShopFlowerOrderDeliveryVO record : page1.getRecords()) { Long pointId = record.getPointId(); ConvenientElevatingPointDO convenientElevatingPointDO = convenientElevatingPointDAO.selectById(pointId); ConvenientElevatingPointVO convenientElevatingPointVO = new ConvenientElevatingPointVO(); BeanUtils.copyProperties(convenientElevatingPointDO,convenientElevatingPointVO); record.setConvenientElevatingPointVO(convenientElevatingPointVO); } return R.ok(page1); } @Override public R pageNoDelivery(PageComFlowerOrderDeliveryDTO pageComFlowerOrderDeliveryDTO) { Page page = new Page<>(pageComFlowerOrderDeliveryDTO.getPageNum(),pageComFlowerOrderDeliveryDTO.getPageSize()); IPage page1 = convenientElevatingPointDAO.pageNoDelivery(page, pageComFlowerOrderDeliveryDTO); return R.ok(page1); } @Override public R pageNoDeliveryOrderList(PageComFlowerOrderListDTO pageComFlowerOrderListDTO) { Page page = new Page<>(pageComFlowerOrderListDTO.getPageNum(),pageComFlowerOrderListDTO.getPageSize()); IPage iPage = comShopFlowerOrderDAO.pageOrderListNoDelivery(page, pageComFlowerOrderListDTO); ConvenientElevatingPointVO convenientElevatingPointVO = convenientElevatingPointDAO.selectOrderNum(pageComFlowerOrderListDTO); ConvenientElevatingPointOrderVO convenientElevatingPointOrderVO = new ConvenientElevatingPointOrderVO(); convenientElevatingPointOrderVO.setConvenientElevatingPointVO(convenientElevatingPointVO); convenientElevatingPointOrderVO.setIPage(iPage); return R.ok(convenientElevatingPointOrderVO); } }