|  |  |  | 
|---|
|  |  |  | import java.math.BigDecimal; | 
|---|
|  |  |  | import java.text.SimpleDateFormat; | 
|---|
|  |  |  | import java.util.ArrayList; | 
|---|
|  |  |  | import java.util.Calendar; | 
|---|
|  |  |  | import java.util.Date; | 
|---|
|  |  |  | import java.util.List; | 
|---|
|  |  |  |  | 
|---|
|  |  |  | 
|---|
|  |  |  | } | 
|---|
|  |  |  |  | 
|---|
|  |  |  | //查询默认收货地址 | 
|---|
|  |  |  | //查询上次购买记录的收货地址 | 
|---|
|  |  |  | List<ComShopOrderDO> shopOrders = this.baseMapper.selectList(new QueryWrapper<ComShopOrderDO>() | 
|---|
|  |  |  | .eq("user_id",orderPreviewDTO.getUserId()).orderByDesc("create_at")); | 
|---|
|  |  |  | if(shopOrders.isEmpty()){//未查询到用户上一笔订单 | 
|---|
|  |  |  | //查询用户收货地址中的默认地址 | 
|---|
|  |  |  | ComShopUserAddressDO userAddressDO = comShopUserAddressDAO.selectOne(new QueryWrapper<ComShopUserAddressDO>() | 
|---|
|  |  |  | .eq("user_id",orderPreviewDTO.getUserId()).eq("is_default",ComShopUserAddressDO.isDefault.yes)); | 
|---|
|  |  |  | if(userAddressDO != null){ | 
|---|
|  |  |  | ComShopUserAddressVO userAddressVO = new ComShopUserAddressVO(); | 
|---|
|  |  |  | BeanUtils.copyProperties(userAddressDO,userAddressVO); | 
|---|
|  |  |  | orderPreviewVO.setUserAddressVO(userAddressVO); | 
|---|
|  |  |  | }else{ | 
|---|
|  |  |  | ComShopUserAddressDO userDefaultAddressDO = comShopUserAddressDAO.selectOne(new QueryWrapper<ComShopUserAddressDO>() | 
|---|
|  |  |  | .eq("delete_status", 2) | 
|---|
|  |  |  | .eq("user_id",orderPreviewDTO.getUserId()).eq("is_default",ComShopUserAddressDO.isDefault.yes)); | 
|---|
|  |  |  |  | 
|---|
|  |  |  | //查询用户收货地址中的默认地址 | 
|---|
|  |  |  | if(userDefaultAddressDO != null){ | 
|---|
|  |  |  | ComShopUserAddressVO userAddressVO = new ComShopUserAddressVO(); | 
|---|
|  |  |  | BeanUtils.copyProperties(userDefaultAddressDO,userAddressVO); | 
|---|
|  |  |  | orderPreviewVO.setUserAddressVO(userAddressVO); | 
|---|
|  |  |  | }else{ | 
|---|
|  |  |  | //查询上次购买记录的收货地址 | 
|---|
|  |  |  | //查询到用户上一笔订单 | 
|---|
|  |  |  | List<ComShopOrderDO> shopOrders = this.baseMapper.selectList(new QueryWrapper<ComShopOrderDO>() | 
|---|
|  |  |  | .eq("delete_status", 2) | 
|---|
|  |  |  | .eq("user_id",orderPreviewDTO.getUserId()) | 
|---|
|  |  |  | .orderByDesc("create_at")); | 
|---|
|  |  |  | if(shopOrders!=null && shopOrders.size()>0) { | 
|---|
|  |  |  | ComShopUserAddressDO userAddressDO = comShopUserAddressDAO.selectById(shopOrders.get(0).getReceiverId()); | 
|---|
|  |  |  | if (userAddressDO != null) { | 
|---|
|  |  |  | ComShopUserAddressVO userAddressVO = new ComShopUserAddressVO(); | 
|---|
|  |  |  | BeanUtils.copyProperties(userAddressDO, userAddressVO); | 
|---|
|  |  |  | orderPreviewVO.setUserAddressVO(userAddressVO); | 
|---|
|  |  |  | } | 
|---|
|  |  |  | } | 
|---|
|  |  |  | //无默认地址, 无上一单记录 地址 | 
|---|
|  |  |  | /* | 
|---|
|  |  |  | if(orderPreviewVO.getUserAddressVO()==null){ | 
|---|
|  |  |  | List<ComShopUserAddressDO> userAddressDOList = comShopUserAddressDAO.selectList(new QueryWrapper<ComShopUserAddressDO>() | 
|---|
|  |  |  | .eq("user_id",orderPreviewDTO.getUserId()).orderByDesc("create_at")); | 
|---|
|  |  |  | if(!userAddressDOList.isEmpty()){ | 
|---|
|  |  |  | 
|---|
|  |  |  | orderPreviewVO.setUserAddressVO(userAddressVO); | 
|---|
|  |  |  | } | 
|---|
|  |  |  | } | 
|---|
|  |  |  | }else{//查询到用户上一笔订单 | 
|---|
|  |  |  | ComShopUserAddressDO userAddressDO = comShopUserAddressDAO.selectById(shopOrders.get(0).getReceiverId()); | 
|---|
|  |  |  | if(userAddressDO != null){ | 
|---|
|  |  |  | ComShopUserAddressVO userAddressVO = new ComShopUserAddressVO(); | 
|---|
|  |  |  | BeanUtils.copyProperties(userAddressDO,userAddressVO); | 
|---|
|  |  |  | orderPreviewVO.setUserAddressVO(userAddressVO); | 
|---|
|  |  |  | } | 
|---|
|  |  |  | */ | 
|---|
|  |  |  | } | 
|---|
|  |  |  |  | 
|---|
|  |  |  |  | 
|---|
|  |  |  | return R.ok(orderPreviewVO); | 
|---|
|  |  |  | } | 
|---|
|  |  |  |  | 
|---|
|  |  |  | 
|---|
|  |  |  | ComShopOrderVO shopOrderVO = new ComShopOrderVO(); | 
|---|
|  |  |  | //查询用户收货地址 | 
|---|
|  |  |  | ComShopUserAddressDO userAddressDO = comShopUserAddressDAO.selectById(orderCreateDTO.getReceiverId()); | 
|---|
|  |  |  | if(userAddressDO == null){ | 
|---|
|  |  |  | if(userAddressDO == null||userAddressDO.getDeleteStatus()!=2){ | 
|---|
|  |  |  | return R.fail("收货地址不存在"); | 
|---|
|  |  |  | } | 
|---|
|  |  |  | //用户id | 
|---|
|  |  |  | 
|---|
|  |  |  | comShopOrderOperateDAO.insert(orderOperateDO); | 
|---|
|  |  |  | shopOrderVO.setOrderNo(orderNo); | 
|---|
|  |  |  | shopOrderVO.setOrderTotal(orderTotal); | 
|---|
|  |  |  | shopOrderVO.setOrderId(shopOrderDO.getId()); | 
|---|
|  |  |  |  | 
|---|
|  |  |  | try { | 
|---|
|  |  |  | BigDecimal money = orderTotal; | 
|---|
|  |  |  | 
|---|
|  |  |  | orderGoodsVO.setNum(orderGoods.getAmount()); | 
|---|
|  |  |  | orderGoodsVO.setGoodsPic(orderGoods.getGoodsAttrPic()); | 
|---|
|  |  |  | orderGoodsVO.setPrice(orderGoods.getGoodsAttrPrice()); | 
|---|
|  |  |  | //查询商品信息判断商品状态 | 
|---|
|  |  |  | ComShopGoodsDO goodsDO = comShopGoodsDAO.selectById(orderGoods.getGoodsId()); | 
|---|
|  |  |  | if(goodsDO == null || goodsDO.getDeleteStatus().equals(ComShopGoodsDO.deleteStatus.yes) || goodsDO.getDeleteStatus().equals(ComShopGoodsDO.status.recovery)){ | 
|---|
|  |  |  | orderGoodsVO.setGoodsStatus(ComShopOrderGoodsVO.goodsStatus.ysc); | 
|---|
|  |  |  | }else if(goodsDO.getStatus().equals(ComShopGoodsDO.status.lower)){ | 
|---|
|  |  |  | orderGoodsVO.setGoodsStatus(ComShopOrderGoodsVO.goodsStatus.yxj); | 
|---|
|  |  |  | }else if(goodsDO.getStatus().equals(ComShopGoodsDO.status.sell)){ | 
|---|
|  |  |  | orderGoodsVO.setGoodsStatus(ComShopOrderGoodsVO.goodsStatus.csz); | 
|---|
|  |  |  | } | 
|---|
|  |  |  |  | 
|---|
|  |  |  | //根据商品规格id查询商品规格 | 
|---|
|  |  |  | ComShopGoodsAttrDO goodsAttrDO = comShopGoodsAttrDAO.selectById(orderGoods.getGoodsAttrId()); | 
|---|
|  |  |  | if(goodsAttrDO != null){ | 
|---|
|  |  |  | 
|---|
|  |  |  |  | 
|---|
|  |  |  | /** | 
|---|
|  |  |  | * 根据订单id取消订单 | 
|---|
|  |  |  | * @param orderId   订单id | 
|---|
|  |  |  | * @param phone 操作用户手机号 | 
|---|
|  |  |  | * @param comShopOrderQueryDTO   订单信息 | 
|---|
|  |  |  | * @return  取消结果 | 
|---|
|  |  |  | */ | 
|---|
|  |  |  | @Transactional(rollbackFor = Exception.class) | 
|---|
|  |  |  | @Override | 
|---|
|  |  |  | public R orderCancel(Long orderId,String phone){ | 
|---|
|  |  |  | public R orderCancel(ComShopOrderQueryDTO comShopOrderQueryDTO){ | 
|---|
|  |  |  | //查询订单 | 
|---|
|  |  |  | ComShopOrderDO shopOrderDO = this.baseMapper.selectById(orderId); | 
|---|
|  |  |  | ComShopOrderDO shopOrderDO = this.baseMapper.selectById(comShopOrderQueryDTO.getOrderId()); | 
|---|
|  |  |  | if(shopOrderDO == null){ | 
|---|
|  |  |  | return R.fail("未查询到订单"); | 
|---|
|  |  |  | } | 
|---|
|  |  |  | 
|---|
|  |  |  | orderOperateDO.setOrderNo(shopOrderDO.getOrderNo()); | 
|---|
|  |  |  | orderOperateDO.setOperationType(ComShopOrderOperateDO.operationType.cancel); | 
|---|
|  |  |  | orderOperateDO.setOperationTime(new Date()); | 
|---|
|  |  |  | if(StringUtils.isNotEmpty(phone)){ | 
|---|
|  |  |  | orderOperateDO.setOperationContent("用户" + phone + "取消订单"); | 
|---|
|  |  |  | orderOperateDO.setOperationBy("用户" + phone); | 
|---|
|  |  |  | if(comShopOrderQueryDTO.getIsAdmin()){ | 
|---|
|  |  |  | orderOperateDO.setOperationContent("管理员" + comShopOrderQueryDTO.getOperUserAccount() + "取消订单"); | 
|---|
|  |  |  | orderOperateDO.setOperationBy("用户" + comShopOrderQueryDTO.getOperUserAccount()); | 
|---|
|  |  |  | }else { | 
|---|
|  |  |  | orderOperateDO.setOperationContent("用户取消订单"); | 
|---|
|  |  |  | orderOperateDO.setOperationBy("用户"); | 
|---|
|  |  |  | 
|---|
|  |  |  | } | 
|---|
|  |  |  | //订单确认收货 | 
|---|
|  |  |  | shopOrderDO.setStatus(ComShopOrderDO.status.ywc); | 
|---|
|  |  |  | shopOrderDO.setReceivingTime(new Date()); | 
|---|
|  |  |  | if(this.baseMapper.updateById(shopOrderDO) > 0){ | 
|---|
|  |  |  | //添加订单操作记录 | 
|---|
|  |  |  | ComShopOrderOperateDO orderOperateDO = new ComShopOrderOperateDO(); | 
|---|
|  |  |  | 
|---|
|  |  |  | return R.fail("订单不存在"); | 
|---|
|  |  |  | } | 
|---|
|  |  |  | if(!(comShopOrderDO.getStatus()==2) | 
|---|
|  |  |  | || !(comShopOrderDO.getDeleteStatus()==1)){ | 
|---|
|  |  |  | || !(comShopOrderDO.getDeliveryStatus()==1)){ | 
|---|
|  |  |  | return R.fail("订单发货失败,订单状态不允许发货"); | 
|---|
|  |  |  | } | 
|---|
|  |  |  |  | 
|---|
|  |  |  | ComShopStoreDO storeDO  = comShopStoreDAO.selectById(comShopOrderDO.getStoreId()); | 
|---|
|  |  |  | if(storeDO.getDeliveryType()!=2){ | 
|---|
|  |  |  | return R.fail("该商家不支持通过快递物流发货"); | 
|---|
|  |  |  | } | 
|---|
|  |  |  | comShopOrderDO.setDeliveryStatus(2); | 
|---|
|  |  |  | comShopOrderDO.setDeliveryType(2); | 
|---|
|  |  |  | comShopOrderDO.setStatus(3); | 
|---|
|  |  |  | comShopOrderDO.setDeliveryTime(Calendar.getInstance().getTime()); | 
|---|
|  |  |  | comShopOrderDO.setLogisticsCompany(orderShipDTO.getLogisticsCompany()); | 
|---|
|  |  |  | comShopOrderDO.setLogisticsNo(orderShipDTO.getLogisticsNo()); | 
|---|
|  |  |  | int updated = comShopOrderDAO.updateById(comShopOrderDO); | 
|---|
|  |  |  | if(updated==1){ | 
|---|
|  |  |  | //创建订单操作记录 | 
|---|
|  |  |  | ComShopOrderOperateDO orderOperateDO = new ComShopOrderOperateDO(); | 
|---|
|  |  |  | orderOperateDO.setOrderNo(comShopOrderDO.getOrderNo()); | 
|---|
|  |  |  | orderOperateDO.setOperationType(ComShopOrderOperateDO.operationType.deliver); | 
|---|
|  |  |  | orderOperateDO.setOperationTime(new Date()); | 
|---|
|  |  |  | if(orderShipDTO.getIsAdmin()){ | 
|---|
|  |  |  | orderOperateDO.setOperationContent(orderShipDTO.getOperUserAccount()+"已发货"); | 
|---|
|  |  |  | orderOperateDO.setOperationBy(orderShipDTO.getOperUserAccount()); | 
|---|
|  |  |  | }else { | 
|---|
|  |  |  | orderOperateDO.setOperationContent(orderShipDTO.getOperUserAccount() + "已发货"); | 
|---|
|  |  |  | orderOperateDO.setOperationBy(orderShipDTO.getOperUserAccount()); | 
|---|
|  |  |  | } | 
|---|
|  |  |  | int inserted = comShopOrderOperateDAO.insert(orderOperateDO); | 
|---|
|  |  |  | if(inserted!=1){ | 
|---|
|  |  |  | log.error("订单发货日志保存错误"); | 
|---|
|  |  |  | } | 
|---|
|  |  |  | return R.ok("发货成功"); | 
|---|
|  |  |  | } | 
|---|
|  |  |  | return R.fail("发货失败!"); | 
|---|
|  |  |  | } | 
|---|
|  |  |  |  | 
|---|
|  |  |  | @Override | 
|---|
|  |  |  | public R deliverOrder(Long orderId) { | 
|---|
|  |  |  | ComShopOrderDO comShopOrderDO = comShopOrderDAO.selectById(orderId); | 
|---|
|  |  |  | public R deliverOrder(ComShopOrderDeliverDTO orderDeliverDTO) { | 
|---|
|  |  |  | ComShopOrderDO comShopOrderDO = comShopOrderDAO.selectById(orderDeliverDTO.getOrderId()); | 
|---|
|  |  |  | if(comShopOrderDO==null){ | 
|---|
|  |  |  | return R.fail("订单不存在"); | 
|---|
|  |  |  | } | 
|---|
|  |  |  | if(!(comShopOrderDO.getStatus()==2)){ | 
|---|
|  |  |  | if(!(comShopOrderDO.getStatus()==2) | 
|---|
|  |  |  | || !(comShopOrderDO.getDeliveryStatus()==1)){ | 
|---|
|  |  |  | return R.fail("当前订单不能配送"); | 
|---|
|  |  |  | } | 
|---|
|  |  |  | ComShopStoreDO storeDO  = comShopStoreDAO.selectById(comShopOrderDO.getStoreId()); | 
|---|
|  |  |  | if(storeDO.getDeliveryType()!=1){ | 
|---|
|  |  |  | return R.fail("该商家不支持通过商家配送"); | 
|---|
|  |  |  | } | 
|---|
|  |  |  | comShopOrderDO.setDeliveryStatus(4); | 
|---|
|  |  |  | comShopOrderDO.setDeliveryType(1); | 
|---|
|  |  |  | comShopOrderDO.setStatus(3); | 
|---|
|  |  |  | comShopOrderDO.setDeliveryTime(Calendar.getInstance().getTime()); | 
|---|
|  |  |  | int updated = comShopOrderDAO.updateById(comShopOrderDO); | 
|---|
|  |  |  | if(updated==1){ | 
|---|
|  |  |  |  | 
|---|
|  |  |  | //创建订单操作记录 | 
|---|
|  |  |  | ComShopOrderOperateDO orderOperateDO = new ComShopOrderOperateDO(); | 
|---|
|  |  |  | orderOperateDO.setOrderNo(comShopOrderDO.getOrderNo()); | 
|---|
|  |  |  | orderOperateDO.setOperationType(ComShopOrderOperateDO.operationType.deliver); | 
|---|
|  |  |  | orderOperateDO.setOperationTime(new Date()); | 
|---|
|  |  |  | if(orderDeliverDTO.getIsAdmin()){ | 
|---|
|  |  |  | orderOperateDO.setOperationContent(orderDeliverDTO.getOperUserAccount() + "已发货"); | 
|---|
|  |  |  | orderOperateDO.setOperationBy(orderDeliverDTO.getOperUserAccount()); | 
|---|
|  |  |  | }else { | 
|---|
|  |  |  | orderOperateDO.setOperationContent(orderDeliverDTO.getOperUserAccount() + "已发货"); | 
|---|
|  |  |  | orderOperateDO.setOperationBy(orderDeliverDTO.getOperUserAccount()); | 
|---|
|  |  |  | } | 
|---|
|  |  |  | int inserted = comShopOrderOperateDAO.insert(orderOperateDO); | 
|---|
|  |  |  | if(inserted!=1){ | 
|---|
|  |  |  | log.error("订单发货日志保存错误"); | 
|---|
|  |  |  | } | 
|---|
|  |  |  | return R.ok("开始配送"); | 
|---|
|  |  |  | } | 
|---|
|  |  |  | return R.fail("操作失败!"); | 
|---|
|  |  |  | } | 
|---|
|  |  |  |  | 
|---|
|  |  |  | @Override | 
|---|
|  |  |  | public R finishDeliverOrder(Long orderId) { | 
|---|
|  |  |  | ComShopOrderDO comShopOrderDO = comShopOrderDAO.selectById(orderId); | 
|---|
|  |  |  | public R finishDeliverOrder(ComShopOrderDeliverDTO orderDeliverDTO) { | 
|---|
|  |  |  | ComShopOrderDO comShopOrderDO = comShopOrderDAO.selectById(orderDeliverDTO.getOrderId()); | 
|---|
|  |  |  | if(comShopOrderDO==null){ | 
|---|
|  |  |  | return R.fail("订单不存在"); | 
|---|
|  |  |  | } | 
|---|
|  |  |  | if(!(comShopOrderDO.getDeliveryStatus() == 4)){ | 
|---|
|  |  |  | if(comShopOrderDO.getDeliveryStatus() != 4 && comShopOrderDO.getDeliveryStatus() != 3){ | 
|---|
|  |  |  | return R.fail("订单还未开始配送"); | 
|---|
|  |  |  | } | 
|---|
|  |  |  | if(!(comShopOrderDO.getStatus() == 3)){ | 
|---|
|  |  |  | return R.fail("订单还未发货"); | 
|---|
|  |  |  | } | 
|---|
|  |  |  | //comShopOrderDO.setStatus(4); | 
|---|
|  |  |  | comShopOrderDO.setDeliveryStatus(5); | 
|---|
|  |  |  | int updated = comShopOrderDAO.updateById(comShopOrderDO); | 
|---|
|  |  |  | if(updated==1){ | 
|---|
|  |  |  | //创建订单操作记录 | 
|---|
|  |  |  | ComShopOrderOperateDO orderOperateDO = new ComShopOrderOperateDO(); | 
|---|
|  |  |  | orderOperateDO.setOrderNo(comShopOrderDO.getOrderNo()); | 
|---|
|  |  |  | orderOperateDO.setOperationType(ComShopOrderOperateDO.operationType.complete); | 
|---|
|  |  |  | orderOperateDO.setOperationTime(new Date()); | 
|---|
|  |  |  | if(orderDeliverDTO.getIsAdmin()){ | 
|---|
|  |  |  | orderOperateDO.setOperationContent("订单已完成"); | 
|---|
|  |  |  | orderOperateDO.setOperationBy(orderDeliverDTO.getOperUserAccount()); | 
|---|
|  |  |  | }else { | 
|---|
|  |  |  | orderOperateDO.setOperationContent("订单已完成"); | 
|---|
|  |  |  | orderOperateDO.setOperationBy(orderDeliverDTO.getOperUserAccount()); | 
|---|
|  |  |  | } | 
|---|
|  |  |  | int inserted = comShopOrderOperateDAO.insert(orderOperateDO); | 
|---|
|  |  |  | if(inserted!=1){ | 
|---|
|  |  |  | log.error("订单发货日志保存错误"); | 
|---|
|  |  |  | } | 
|---|
|  |  |  | return R.ok("配送完成"); | 
|---|
|  |  |  | } | 
|---|
|  |  |  | return R.fail("操作失败!"); | 
|---|
|  |  |  | 
|---|
|  |  |  | @Override | 
|---|
|  |  |  | public R shopOrderExportData(ComShopOrderExportDTO comShopOrderExportDTO) { | 
|---|
|  |  |  | Page page = new Page(); | 
|---|
|  |  |  | page.setSize(1000); | 
|---|
|  |  |  | page.setSize(10000); | 
|---|
|  |  |  | page.setCurrent(1); | 
|---|
|  |  |  | IPage<ExcelShopOrderDTO>  excelShopOrderDTO = comShopOrderDAO.selectOrderExport(page, comShopOrderExportDTO); | 
|---|
|  |  |  | return R.ok(excelShopOrderDTO.getRecords()); | 
|---|
|  |  |  | 
|---|
|  |  |  | @Override | 
|---|
|  |  |  | public R shopOrderFundsExportData(ComShopFundsExportDTO comShopFundsExportDTO) { | 
|---|
|  |  |  | Page page = new Page(); | 
|---|
|  |  |  | page.setSize(1000); | 
|---|
|  |  |  | page.setSize(10000); | 
|---|
|  |  |  | page.setCurrent(1); | 
|---|
|  |  |  | IPage<ExcelShopFundsDTO>  excelShopFundsDTO = comShopOrderDAO.selectFundsExport(page, comShopFundsExportDTO); | 
|---|
|  |  |  | return R.ok(excelShopFundsDTO.getRecords()); | 
|---|
|  |  |  | 
|---|
|  |  |  | }catch (Exception e){ | 
|---|
|  |  |  | log.error("调用微信支付异常,异常原因:" + e.getMessage()); | 
|---|
|  |  |  | } | 
|---|
|  |  |  | shopOrderVO.setOrderId(orderDO.getId()); | 
|---|
|  |  |  | shopOrderVO.setOrderNo(orderDO.getOrderNo()); | 
|---|
|  |  |  | shopOrderVO.setOrderTotal(orderDO.getTotalAmount()); | 
|---|
|  |  |  | return R.ok(shopOrderVO); | 
|---|
|  |  |  | } | 
|---|
|  |  |  |  | 
|---|