Selaa lähdekoodia

门店渠道商品管理

fubojin 3 viikkoa sitten
vanhempi
commit
619658eeed

+ 52 - 0
yami-shop-bean/src/main/java/com/yami/shop/bean/enums/DvyType.java

@@ -0,0 +1,52 @@
+/*
+ * Copyright (c) 2018-2999 广州亚米信息科技有限公司 All rights reserved.
+ *
+ * https://www.gz-yami.com/
+ *
+ * 未经允许,不可做商业用途!
+ *
+ * 版权所有,侵权必究!
+ */
+
+package com.yami.shop.bean.enums;
+
+/**
+ * 配送类型
+ */
+public enum DvyType {
+
+    /**
+     * 快递
+     */
+    DELIVERY(1),
+    /**
+     * 自提
+     */
+    FETCH(2),
+
+    /**
+     * 无需快递
+     */
+    NOT_DELIVERY(3)
+    ;
+
+    private Integer num;
+
+    public Integer value() {
+        return num;
+    }
+
+    DvyType(Integer num) {
+        this.num = num;
+    }
+
+    public static DvyType instance(Integer value) {
+        DvyType[] enums = values();
+        for (DvyType statusEnum : enums) {
+            if (statusEnum.value().equals(value)) {
+                return statusEnum;
+            }
+        }
+        return null;
+    }
+}

+ 95 - 0
yami-shop-platform/src/main/java/com/yami/shop/platform/controller/AdvertInfoController.java

@@ -0,0 +1,95 @@
+// 文件路径: com/yami/shop/platform/controller/AdvertInfoController.java
+package com.yami.shop.platform.controller;
+
+import com.baomidou.mybatisplus.core.metadata.IPage;
+import com.yami.shop.bean.model.AdvertInfo;
+import com.yami.shop.bean.param.AdvertInfoParam;
+import com.yami.shop.common.util.PageParam;
+import com.yami.shop.common.util.R;
+import com.yami.shop.service.IAdvertInfoService;
+import lombok.AllArgsConstructor;
+import lombok.extern.slf4j.Slf4j;
+import org.springframework.http.ResponseEntity;
+import org.springframework.security.access.prepost.PreAuthorize;
+import org.springframework.web.bind.annotation.*;
+
+import javax.validation.Valid;
+
+/**
+ * 广告信息管理控制器
+ *
+ * @author wy
+ */
+@Slf4j
+@RestController
+@RequestMapping("/platform/advertInfo")
+@AllArgsConstructor
+public class AdvertInfoController {
+
+    private final IAdvertInfoService advertInfoService;
+
+    /**
+     * 分页获取广告列表
+     */
+    @GetMapping("/page")
+    @PreAuthorize("@pms.hasPermission('platform:advertInfo:page')")
+    public R<IPage<AdvertInfo>> page(
+            @RequestParam(required = false) String advertName,
+            @RequestParam(required = false) Integer status,
+            @RequestParam(defaultValue = "1") Integer current,
+            @RequestParam(defaultValue = "10") Integer size) {
+
+        ResponseEntity<IPage<AdvertInfo>> response = advertInfoService.search(advertName, status, current, size);
+        return R.SUCCESS(response.getBody());
+    }
+
+    /**
+     * 根据ID获取广告详情
+     */
+    @GetMapping("/info/{id}")
+    @PreAuthorize("@pms.hasPermission('platform:advertInfo:info')")
+    public R<AdvertInfoParam> info(@PathVariable("id") Integer id) {
+        ResponseEntity<AdvertInfoParam> response = advertInfoService.get(id);
+        return R.SUCCESS(response.getBody());
+    }
+
+    /**
+     * 添加广告
+     */
+    @PostMapping
+    @PreAuthorize("@pms.hasPermission('platform:advertInfo:save')")
+    public R<Void> save(@Valid @RequestBody AdvertInfoParam param) {
+        ResponseEntity<Void> response = advertInfoService.addOrUpdate(param);
+        return R.SUCCESS();
+    }
+
+    /**
+     * 更新广告
+     */
+    @PutMapping
+    @PreAuthorize("@pms.hasPermission('platform:advertInfo:update')")
+    public R<Void> update(@Valid @RequestBody AdvertInfoParam param) {
+        ResponseEntity<Void> response = advertInfoService.addOrUpdate(param);
+        return R.SUCCESS();
+    }
+
+    /**
+     * 删除广告
+     */
+    @DeleteMapping("/{id}")
+    @PreAuthorize("@pms.hasPermission('platform:advertInfo:delete')")
+    public R<Void> delete(@PathVariable("id") Integer id) {
+        ResponseEntity<Void> response = advertInfoService.del(id);
+        return R.SUCCESS();
+    }
+
+    /**
+     * 操作广告状态(启用/禁用)
+     */
+    @PutMapping("/operate/{id}")
+    @PreAuthorize("@pms.hasPermission('platform:advertInfo:operate')")
+    public R<Void> operate(@PathVariable("id") Integer id) {
+        ResponseEntity<Void> response = advertInfoService.operate(id);
+        return R.SUCCESS();
+    }
+}

+ 389 - 389
yami-shop-platform/src/main/java/com/yami/shop/platform/task/OrderTask.java

@@ -1,389 +1,389 @@
-/*
- * Copyright (c) 2018-2999 广州亚米信息科技有限公司 All rights reserved.
- *
- * https://www.gz-yami.com/
- *
- * 未经允许,不可做商业用途!
- *
- * 版权所有,侵权必究!
- */
-
-package com.yami.shop.platform.task;
-
-import cn.hutool.core.collection.CollectionUtil;
-import cn.hutool.core.date.DateUtil;
-import cn.hutool.core.util.ObjectUtil;
-import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
-import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
-import com.baomidou.mybatisplus.core.toolkit.Wrappers;
-import com.yami.shop.bean.bo.PayInfoBo;
-import com.yami.shop.bean.enums.DvyType;
-import com.yami.shop.bean.enums.OrderStatus;
-import com.yami.shop.bean.model.*;
-import com.yami.shop.bean.param.OrderDto;
-import com.yami.shop.common.enums.PayType;
-import com.yami.shop.common.exception.YamiShopBindException;
-import com.yami.shop.dao.DeviceFeyMapper;
-import com.yami.shop.delivery.comment.api.paotui.PaoTuiApi;
-import com.yami.shop.delivery.comment.param.DeliveryOrderItemParam;
-import com.yami.shop.delivery.comment.service.DeliveryOrderService;
-import com.yami.shop.service.*;
-import com.yami.shop.service.impl.FeiEYunApi;
-import org.apache.commons.lang3.StringUtils;
-import org.apache.logging.log4j.core.util.JsonUtils;
-import org.slf4j.Logger;
-import org.slf4j.LoggerFactory;
-import org.springframework.beans.factory.annotation.Autowired;
-import org.springframework.http.ResponseEntity;
-import org.springframework.stereotype.Component;
-
-import java.math.BigDecimal;
-import java.text.SimpleDateFormat;
-import java.util.*;
-import java.util.stream.Collectors;
-
-
-@Component("orderTask")
-public class OrderTask {
-
-
-    private Logger logger = LoggerFactory.getLogger(getClass());
-
-    @Autowired
-    private OrderService orderService;
-    @Autowired
-    private ProductService productService;
-    @Autowired
-    private SkuService skuService;
-    @Autowired
-    private PayService payService;
-    @Autowired
-    private OrderSettlementService orderSettlementService;
-    @Autowired
-    private PayManagerService payManagerService;
-
-    @Autowired
-    private PaoTuiApi paoTuiApi;
-
-    @Autowired
-    private OrderRefundService orderRefundService;
-
-    @Autowired
-    private OrderItemService orderItemService;
-
-    @Autowired
-    private UserAddrOrderService userAddrOrderService;
-
-    @Autowired
-    private DeliveryOrderService deliveryOrderService;
-
-    @Autowired
-    private IQnhService qnhService;
-
-    @Autowired
-    private UserService userService;
-
-    @Autowired
-    private ShopDetailService shopDetailService;
-    @Autowired
-    private DeviceFeyMapper deviceFeyMapper;
-
-
-
-
-
-    public void cancelOrder(){
-        Date now = new Date();
-        logger.info("取消超时未支付订单。。。");
-        // 获取30分钟之前未支付的订单
-        List<Order> orders = orderService.listUnRefundOrderAndOrderItems(OrderStatus.UNPAY.value(),DateUtil.offsetMinute(now, -30));
-        if (CollectionUtil.isEmpty(orders)) {
-            return;
-        }
-
-        List<Order>  cancelOrderList = this.chackOrders(orders);
-        orderService.cancelOrders(cancelOrderList);
-        // 移除缓存
-        this.removeCache(cancelOrderList);
-
-    }
-
-    /**
-     * 确认收货
-     */
-    public void confirmOrder(){
-        Date now = new Date();
-        logger.info("系统自动确认收货订单。。。");
-        // 获取15天之前等待确认收货的订单
-        List<Order> orders = orderService.listUnRefundOrderAndOrderItems(OrderStatus.CONSIGNMENT.value(),DateUtil.offsetDay(now, -15));
-        if (CollectionUtil.isEmpty(orders)) {
-            return;
-        }
-        orderService.receiptOrder(orders);
-        // 移除缓存
-        this.removeCache(orders);
-    }
-
-    public void createDistributionOrder(){
-        SimpleDateFormat formatter = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
-        Date now = new Date();
-        logger.info("用户订单五分钟后未取消则创建物流订单。。。");
-        List<Order> orders = orderService.listUnRefundOrderAndOrderItems(OrderStatus.PADYED.value(),DateUtil.offsetMinute(now, -5));
-        if(CollectionUtil.isEmpty(orders)){
-            return;
-        }
-//        List<Order> orders =orderService.list(new QueryWrapper<Order>().lambda().like(Order::getOrderNumber,"1879830276981526528"));
-        for (Order order:orders){
-            //创建物流订单
-            if (!Objects.equals(order.getStatus(), OrderStatus.PADYED.value()) && Objects.equals(order.getDvyType(), DvyType.FETCH.value())){
-                System.out.println("订单不处于已付款状态,无法进行发货");
-                continue;
-            }else if (!Objects.equals(order.getStatus(), OrderStatus.PADYED.value())){
-                System.out.println("订单不处于待发货状态,无法进行发货");
-                continue;
-            }
-            UserAddrOrder userAddrOrder = userAddrOrderService.getById(order.getAddrOrderId());
-            if(ObjectUtil.isEmpty(userAddrOrder)){
-                System.out.println("该订单地址存在问题,请检查");
-                continue;
-            }
-            int count = orderRefundService.count(new LambdaQueryWrapper<OrderRefund>().eq(OrderRefund::getOrderId, order.getOrderId()));
-            if(count>0){
-                LambdaQueryWrapper<OrderRefund> orderRefundLambdaQueryWrapper = new LambdaQueryWrapper<>();
-                orderRefundLambdaQueryWrapper.eq(OrderRefund::getOrderId,order.getOrderId());
-                //发货时只有订单不存在退款或退款被拒绝才会创建仓储与物流订单
-                orderRefundLambdaQueryWrapper.and(wrapper->wrapper.eq(OrderRefund::getReturnMoneySts,-1).or().eq(OrderRefund::getReturnMoneySts,7).or().eq(OrderRefund::getReturnMoneySts,6));
-                List<OrderRefund> orderRefunds = orderRefundService.list(orderRefundLambdaQueryWrapper);
-                if (CollectionUtil.isEmpty(orderRefunds)) {
-                    System.out.println("该订单有退款信息正在处理或已退款中,无法进行发货操作");
-                    continue;
-                }
-            }
-            try {
-                boolean success = createQNHOrder(order);
-                if(!success){
-                    continue;
-                }
-            }catch (Exception e){
-                System.out.println(e.getMessage());
-                continue;
-            }
-
-            List<OrderItem> orderItems = orderItemService.getOrderItemsByOrderNumber(order.getOrderNumber());
-
-            //先创建物流订单
-            DeliveryOrderItemParam deliveryOrderItemParam = new DeliveryOrderItemParam();
-            deliveryOrderItemParam.setOrderNumber(order.getOrderNumber());
-            deliveryOrderItemParam.setDvyId(16l);
-            deliveryOrderItemParam.setDeliveryType(1);
-            deliveryOrderItemParam.setDvyFlowId("sdfsf");
-            deliveryOrderItemParam.setSelectOrderItems(orderItems);
-            for (OrderItem orderItem:deliveryOrderItemParam.getSelectOrderItems()){
-                orderItem.setChangeNum(orderItem.getProdCount());
-            }
-
-            try {
-                deliveryOrderService.saveDeliveriesInfo(deliveryOrderItemParam);
-                order=orderService.getById(order.getOrderId());
-                order.setDvyStatus(1);
-            }catch (Exception e){
-                System.out.println(e.getMessage());
-                order.setDvyStatus(0);
-            }
-            orderService.updateById(order);
-        }
-//        this.removeCache(orders);
-    }
-
-    /**
-     * 查询订单,去除已支付的订单
-     * @param orders
-     */
-    private List<Order> chackOrders(List<Order> orders){
-        List<String> orderNumbers=orders.stream().map(Order::getOrderNumber).collect(Collectors.toList());
-        // 收集未支付的订单
-        List<Order> orderList = new ArrayList<>();
-        //获取订单对应的订单结算数据
-        List<OrderSettlement> orderSettlementList = orderSettlementService.list(new LambdaQueryWrapper<OrderSettlement>()
-                .in(OrderSettlement::getOrderNumber, orderNumbers));
-        Map<String, OrderSettlement> orderSettlementMap = orderSettlementList.stream()
-                .collect(Collectors.toMap(OrderSettlement::getOrderNumber, orderSettlement -> orderSettlement));
-        for (Order order : orders) {
-            OrderSettlement orderSettlement = orderSettlementMap.get(order.getOrderNumber());
-            if (Objects.isNull(orderSettlement) || Objects.isNull(orderSettlement.getPayType()) || Objects.isNull(orderSettlement.getPayNo())){
-                orderList.add(order);
-                continue;
-            }
-            PayInfoBo payInfo = payManagerService.getPayInfo(PayType.instance(orderSettlement.getPayType()), orderSettlement.getPayNo());
-            if(payInfo.getIsPaySuccess()){
-                // 根据内部订单号更新order settlement
-                List<Order> successOrderList = payService.paySuccess(payInfo.getPayNo(), payInfo.getBizPayNo(),order.getPayType());
-                // 移除缓存
-                this.removeCache(successOrderList);
-            }else {
-                orderList.add(order);
-            }
-        }
-        return orderList;
-    }
-
-    /**
-     * 移除缓存
-     */
-    private void removeCache(List<Order> orders){
-        for (Order order : orders) {
-            List<OrderItem> orderItems = order.getOrderItems();
-            for (OrderItem orderItem : orderItems) {
-                productService.removeProductCacheByProdId(orderItem.getProdId());
-                skuService.removeSkuCacheBySkuId(orderItem.getSkuId(), orderItem.getProdId());
-            }
-        }
-    }
-
-    /**
-     * 创建牵牛花订单
-     * @param order
-     * @return
-     */
-    public boolean createQNHOrder(Order order) {
-        SimpleDateFormat formatter = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
-        // 待添加创建牵牛花订单
-        OrderDto orderDto = new OrderDto();
-        orderDto.setChannelSheetno(order.getOrderNumber());
-        orderDto.setChannelKeyword("YYG");
-        orderDto.setPayOver(true);
-        orderDto.setBilltype(1+"");
-        orderDto.setTotalSaleValue(BigDecimal.valueOf(order.getTotal()));
-        orderDto.setTotalDiscValue(BigDecimal.ZERO);
-        orderDto.setTotalSjDisc(BigDecimal.ZERO);
-        orderDto.setTotalSaleValue(BigDecimal.ZERO);
-        orderDto.setTotalPtDp(BigDecimal.ZERO);
-        orderDto.setTotalSjDp(BigDecimal.ZERO);
-        orderDto.setTotalPtDisc(BigDecimal.ZERO);
-        orderDto.setCommissionValue(BigDecimal.ZERO);
-        orderDto.setPayableValue(BigDecimal.valueOf(order.getTotal()));
-        orderDto.setTotalItemValue(BigDecimal.valueOf(order.getTotal()));
-        orderDto.setLogisticsModeKeyword(order.getFreightAmount().toString());
-
-
-        ShopDetail shopDetailByShopId = shopDetailService.getById(order.getShopId());
-//            orderDto.setOrgName(shopDetailByShopId.getShopName());
-        orderDto.setOrgCode(shopDetailByShopId.getThirdPartyCode());
-        orderDto.setOrgName(shopDetailByShopId.getShopName());
-        orderDto.setPreOrder(false);
-        orderDto.setOfflineOrder(false);
-        orderDto.setOrderTime(formatter.format(order.getCreateTime()));
-        orderDto.setGroupId(0);
-        orderDto.setGoodsReturn("true");
-        UserAddrOrder addrOrder = userAddrOrderService.getById(order.getAddrOrderId());
-        User user = userService.getUserByUserId(order.getUserId());
-
-        //填充收件人信息
-        orderDto.setReceiver(new OrderDto.Receiver());
-        orderDto.getReceiver().setAddress(addrOrder.getAddress());
-        orderDto.getReceiver().setMobile(user.getUserMobile());
-        orderDto.getReceiver().setName(user.getNickName());
-        orderDto.getReceiver().setType("0");
-        orderDto.getReceiver().setLatitude(String.valueOf(addrOrder.getLatitude()));
-        orderDto.getReceiver().setLongitude(String.valueOf(addrOrder.getLongitude()));
-        orderDto.setPayableLogisticsValue(BigDecimal.valueOf(order.getPlatformAmount()));
-        orderDto.setLogisticsModeKeyword("0");
-
-        //填充买家信息
-        orderDto.setBuyer(new OrderDto.Buyer());
-        orderDto.getBuyer().setAddress(addrOrder.getAddress());
-        orderDto.getBuyer().setNick(user.getNickName());
-        orderDto.getBuyer().setEmail(user.getUserMail());
-        orderDto.getBuyer().setNote(order.getRemarks());
-        orderDto.getBuyer().setTel(user.getUserMobile());
-
-        //填充支付信息
-        orderDto.setOrderPayments(new OrderDto.OrderPayments());
-        orderDto.getOrderPayments().setPayment(BigDecimal.valueOf(order.getTotal()));
-        orderDto.getOrderPayments().setKeyword("10002");
-        orderDto.getOrderPayments().setName("商城系统支付");
-        ArrayList<OrderDto.OrderDetails> orderDetails = new ArrayList<>();
-        int weight = 0;
-        List<OrderItem> orderItems1 = orderItemService.getOrderItemsByOrderNumber(order.getOrderNumber());
-        for (OrderItem orderItem:orderItems1){
-            OrderDto.OrderDetails orderDetails1 = new OrderDto.OrderDetails();
-            Sku sku = skuService.getById(orderItem.getSkuId());
-            orderDetails1.setSkuId(sku.getPartyCode());
-            orderDetails1.setItemCode("");
-            orderDetails1.setBarcode("");
-            orderDetails1.setOrderItemId(orderItem.getOrderItemId().toString());
-            orderDetails1.setName(orderItem.getProdName());
-            orderDetails1.setOriginalPrice(BigDecimal.valueOf(sku.getOriPrice()));
-            orderDetails1.setWeight((int)Math.round(sku.getWeight()));
-            weight+=orderDetails1.getWeight();
-            orderDetails1.setSalePrice(BigDecimal.valueOf(sku.getPrice()));
-            orderDetails1.setQty(orderItem.getProdCount());
-            orderDetails1.setMoney(orderDetails1.getSalePrice().multiply(BigDecimal.valueOf(orderDetails1.getQty())));
-            orderDetails.add(orderDetails1);
-        }
-        orderDto.setOrderDetails(orderDetails);
-        orderDto.setWeight(weight);
-        String s = qnhService.addOrder(orderDto);
-//        ResponseEntity responseEntity = qnhService.addOrder(orderDto);
-        if(!StringUtils.isBlank(s)){
-            order.setQnhOrderId(s);
-            order.setQnhOrderStatus("1");
-            orderService.updateById(order);
-            DeviceFey deviceFey = deviceFeyMapper.selectOne(Wrappers.<DeviceFey>lambdaQuery().eq(DeviceFey::getShopId, order.getShopId()).last("limit 1"));
-            FeiEYunApi.print(deviceFey.getDeviceSn(),print(order.getOrderNumber()));
-            return true;
-        }
-        return false;
-    }
-    private String print(String orderByOrderNumber){
-        Order order = orderService.getOrderByOrderNumber(orderByOrderNumber);
-        List<OrderItem> orderItemsByOrderNumber = orderItemService.getOrderItemsByOrderNumber(order.getOrderNumber());
-        String lastFourDigits = order.getOrderNumber().length() >= 4
-                ? order.getOrderNumber().substring(order.getOrderNumber().length() - 4)
-                : order.getOrderNumber(); // 如果长度不足4位,直接返回原字符串
-        UserAddrOrder userAddrOrder = userAddrOrderService.selectByAddrOrderId(order.getAddrOrderId());
-        String userMobile = userAddrOrder.getMobile().length() >= 4
-                ? userAddrOrder.getMobile().substring(userAddrOrder.getMobile().length() - 4)
-                : userAddrOrder.getMobile(); // 如果长度不足4位,直接返回原字符串
-        String receiverName = userAddrOrder.getReceiver();
-        String maskedName = receiverName.length() > 1
-                ? receiverName.substring(0, 1) + "*".repeat(receiverName.length() - 1)
-                : receiverName;
-        StringBuilder content = new StringBuilder();
-        content.append("<BR>");
-        content.append("<BR>");
-        content.append("<CB>#").append(lastFourDigits).append(" 海马购外卖</CB><BR>");
-        content.append("--------------------------------<BR>");
-        content.append("<BR>");
-        content.append("备注:").append(order.getRemarks()).append("<BR>");
-        content.append("<BR>");
-        content.append("--------------------------------<BR>");
-        content.append("下单时间:").append(DateUtil.date(order.getCreateTime())).append("<BR>");
-        content.append("<BR>");
-        content.append("订单编号:").append(order.getOrderNumber()).append("<BR>");
-        content.append("<BR>");
-        content.append("名称      单价  数量 金额<BR>");
-        content.append("----------商品信息----------<BR>");
-        for (OrderItem orderItem:orderItemsByOrderNumber){
-            content.append("<BR>");
-            content.append(orderItem.getProdName()).append("<BR>").append("          ").append(orderItem.getPrice()).append("    ").append(orderItem.getProdCount()).append("   ").append(orderItem.getActualTotal()).append("<BR>");
-        }
-        content.append("<BR>");
-        content.append("----------付款情况----------<BR>");
-        content.append("<BR>");
-        content.append("订单金额:").append(order.getTotal()).append("元<BR>");
-        content.append("<BR>");
-        content.append("实际支付:<B>").append(order.getActualTotal()).append("元</B><BR>");
-        content.append("--------------------------------<BR>");
-        content.append("<BR>");
-        content.append(maskedName);
-        content.append("<BR>");
-        content.append("顾客号码:手机尾号").append(userMobile).append("<BR>");
-        String add = userAddrOrder.getAddress() + userAddrOrder.getAddressName() + userAddrOrder.getAddrDetail();
-        content.append("顾客地址:").append(add).append("<BR>");
-        content.append("########海马购外卖#").append(lastFourDigits).append("########<BR>");
-        content.append("<BR>");
-        content.append("<BR>");
-        return content.toString();
-    }
-}
+/*
+ * Copyright (c) 2018-2999 广州亚米信息科技有限公司 All rights reserved.
+ *
+ * https://www.gz-yami.com/
+ *
+ * 未经允许,不可做商业用途!
+ *
+ * 版权所有,侵权必究!
+ */
+
+package com.yami.shop.platform.task;
+
+import cn.hutool.core.collection.CollectionUtil;
+import cn.hutool.core.date.DateUtil;
+import cn.hutool.core.util.ObjectUtil;
+import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
+import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
+import com.baomidou.mybatisplus.core.toolkit.Wrappers;
+import com.yami.shop.bean.bo.PayInfoBo;
+import com.yami.shop.bean.enums.DvyType;
+import com.yami.shop.bean.enums.OrderStatus;
+import com.yami.shop.bean.model.*;
+import com.yami.shop.bean.param.OrderDto;
+import com.yami.shop.common.enums.PayType;
+import com.yami.shop.common.exception.YamiShopBindException;
+import com.yami.shop.dao.DeviceFeyMapper;
+import com.yami.shop.delivery.comment.api.paotui.PaoTuiApi;
+import com.yami.shop.delivery.comment.param.DeliveryOrderItemParam;
+import com.yami.shop.delivery.comment.service.DeliveryOrderService;
+import com.yami.shop.service.*;
+import com.yami.shop.service.impl.FeiEYunApi;
+import org.apache.commons.lang3.StringUtils;
+import org.apache.logging.log4j.core.util.JsonUtils;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.http.ResponseEntity;
+import org.springframework.stereotype.Component;
+
+import java.math.BigDecimal;
+import java.text.SimpleDateFormat;
+import java.util.*;
+import java.util.stream.Collectors;
+
+
+@Component("orderTask")
+public class OrderTask {
+
+
+    private Logger logger = LoggerFactory.getLogger(getClass());
+
+    @Autowired
+    private OrderService orderService;
+    @Autowired
+    private ProductService productService;
+    @Autowired
+    private SkuService skuService;
+    @Autowired
+    private PayService payService;
+    @Autowired
+    private OrderSettlementService orderSettlementService;
+    @Autowired
+    private PayManagerService payManagerService;
+
+    @Autowired
+    private PaoTuiApi paoTuiApi;
+
+    @Autowired
+    private OrderRefundService orderRefundService;
+
+    @Autowired
+    private OrderItemService orderItemService;
+
+    @Autowired
+    private UserAddrOrderService userAddrOrderService;
+
+    @Autowired
+    private DeliveryOrderService deliveryOrderService;
+
+    @Autowired
+    private IQnhService qnhService;
+
+    @Autowired
+    private UserService userService;
+
+    @Autowired
+    private ShopDetailService shopDetailService;
+    @Autowired
+    private DeviceFeyMapper deviceFeyMapper;
+
+
+
+
+
+    public void cancelOrder(){
+        Date now = new Date();
+        logger.info("取消超时未支付订单。。。");
+        // 获取30分钟之前未支付的订单
+        List<Order> orders = orderService.listUnRefundOrderAndOrderItems(OrderStatus.UNPAY.value(),DateUtil.offsetMinute(now, -30));
+        if (CollectionUtil.isEmpty(orders)) {
+            return;
+        }
+
+        List<Order>  cancelOrderList = this.chackOrders(orders);
+        orderService.cancelOrders(cancelOrderList);
+        // 移除缓存
+        this.removeCache(cancelOrderList);
+
+    }
+
+    /**
+     * 确认收货
+     */
+    public void confirmOrder(){
+        Date now = new Date();
+        logger.info("系统自动确认收货订单。。。");
+        // 获取15天之前等待确认收货的订单
+        List<Order> orders = orderService.listUnRefundOrderAndOrderItems(OrderStatus.CONSIGNMENT.value(),DateUtil.offsetDay(now, -15));
+        if (CollectionUtil.isEmpty(orders)) {
+            return;
+        }
+        orderService.receiptOrder(orders);
+        // 移除缓存
+        this.removeCache(orders);
+    }
+
+    public void createDistributionOrder(){
+        SimpleDateFormat formatter = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
+        Date now = new Date();
+        logger.info("用户订单五分钟后未取消则创建物流订单。。。");
+        List<Order> orders = orderService.listUnRefundOrderAndOrderItems(OrderStatus.PADYED.value(),DateUtil.offsetMinute(now, -5));
+        if(CollectionUtil.isEmpty(orders)){
+            return;
+        }
+//        List<Order> orders =orderService.list(new QueryWrapper<Order>().lambda().like(Order::getOrderNumber,"1879830276981526528"));
+        for (Order order:orders){
+            //创建物流订单
+            if (!Objects.equals(order.getStatus(), OrderStatus.PADYED.value()) && Objects.equals(order.getDvyType(), DvyType.FETCH.value())){
+                System.out.println("订单不处于已付款状态,无法进行发货");
+                continue;
+            }else if (!Objects.equals(order.getStatus(), OrderStatus.PADYED.value())){
+                System.out.println("订单不处于待发货状态,无法进行发货");
+                continue;
+            }
+            UserAddrOrder userAddrOrder = userAddrOrderService.getById(order.getAddrOrderId());
+            if(ObjectUtil.isEmpty(userAddrOrder)){
+                System.out.println("该订单地址存在问题,请检查");
+                continue;
+            }
+            int count = orderRefundService.count(new LambdaQueryWrapper<OrderRefund>().eq(OrderRefund::getOrderId, order.getOrderId()));
+            if(count>0){
+                LambdaQueryWrapper<OrderRefund> orderRefundLambdaQueryWrapper = new LambdaQueryWrapper<>();
+                orderRefundLambdaQueryWrapper.eq(OrderRefund::getOrderId,order.getOrderId());
+                //发货时只有订单不存在退款或退款被拒绝才会创建仓储与物流订单
+                orderRefundLambdaQueryWrapper.and(wrapper->wrapper.eq(OrderRefund::getReturnMoneySts,-1).or().eq(OrderRefund::getReturnMoneySts,7).or().eq(OrderRefund::getReturnMoneySts,6));
+                List<OrderRefund> orderRefunds = orderRefundService.list(orderRefundLambdaQueryWrapper);
+                if (CollectionUtil.isEmpty(orderRefunds)) {
+                    System.out.println("该订单有退款信息正在处理或已退款中,无法进行发货操作");
+                    continue;
+                }
+            }
+            try {
+                boolean success = createQNHOrder(order);
+                if(!success){
+                    continue;
+                }
+            }catch (Exception e){
+                System.out.println(e.getMessage());
+                continue;
+            }
+
+            List<OrderItem> orderItems = orderItemService.getOrderItemsByOrderNumber(order.getOrderNumber());
+
+            //先创建物流订单
+            DeliveryOrderItemParam deliveryOrderItemParam = new DeliveryOrderItemParam();
+            deliveryOrderItemParam.setOrderNumber(order.getOrderNumber());
+            deliveryOrderItemParam.setDvyId(16l);
+            deliveryOrderItemParam.setDeliveryType(1);
+            deliveryOrderItemParam.setDvyFlowId("sdfsf");
+            deliveryOrderItemParam.setSelectOrderItems(orderItems);
+            for (OrderItem orderItem:deliveryOrderItemParam.getSelectOrderItems()){
+                orderItem.setChangeNum(orderItem.getProdCount());
+            }
+
+            try {
+                deliveryOrderService.saveDeliveriesInfo(deliveryOrderItemParam);
+                order=orderService.getById(order.getOrderId());
+                order.setDvyStatus(1);
+            }catch (Exception e){
+                System.out.println(e.getMessage());
+                order.setDvyStatus(0);
+            }
+            orderService.updateById(order);
+        }
+//        this.removeCache(orders);
+    }
+
+    /**
+     * 查询订单,去除已支付的订单
+     * @param orders
+     */
+    private List<Order> chackOrders(List<Order> orders){
+        List<String> orderNumbers=orders.stream().map(Order::getOrderNumber).collect(Collectors.toList());
+        // 收集未支付的订单
+        List<Order> orderList = new ArrayList<>();
+        //获取订单对应的订单结算数据
+        List<OrderSettlement> orderSettlementList = orderSettlementService.list(new LambdaQueryWrapper<OrderSettlement>()
+                .in(OrderSettlement::getOrderNumber, orderNumbers));
+        Map<String, OrderSettlement> orderSettlementMap = orderSettlementList.stream()
+                .collect(Collectors.toMap(OrderSettlement::getOrderNumber, orderSettlement -> orderSettlement));
+        for (Order order : orders) {
+            OrderSettlement orderSettlement = orderSettlementMap.get(order.getOrderNumber());
+            if (Objects.isNull(orderSettlement) || Objects.isNull(orderSettlement.getPayType()) || Objects.isNull(orderSettlement.getPayNo())){
+                orderList.add(order);
+                continue;
+            }
+            PayInfoBo payInfo = payManagerService.getPayInfo(PayType.instance(orderSettlement.getPayType()), orderSettlement.getPayNo());
+            if(payInfo.getIsPaySuccess()){
+                // 根据内部订单号更新order settlement
+                List<Order> successOrderList = payService.paySuccess(payInfo.getPayNo(), payInfo.getBizPayNo(),order.getPayType());
+                // 移除缓存
+                this.removeCache(successOrderList);
+            }else {
+                orderList.add(order);
+            }
+        }
+        return orderList;
+    }
+
+    /**
+     * 移除缓存
+     */
+    private void removeCache(List<Order> orders){
+        for (Order order : orders) {
+            List<OrderItem> orderItems = order.getOrderItems();
+            for (OrderItem orderItem : orderItems) {
+                productService.removeProductCacheByProdId(orderItem.getProdId());
+                skuService.removeSkuCacheBySkuId(orderItem.getSkuId(), orderItem.getProdId());
+            }
+        }
+    }
+
+    /**
+     * 创建牵牛花订单
+     * @param order
+     * @return
+     */
+    public boolean createQNHOrder(Order order) {
+        SimpleDateFormat formatter = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
+        // 待添加创建牵牛花订单
+        OrderDto orderDto = new OrderDto();
+        orderDto.setChannelSheetno(order.getOrderNumber());
+        orderDto.setChannelKeyword("YYG");
+        orderDto.setPayOver(true);
+        orderDto.setBilltype(1+"");
+        orderDto.setTotalSaleValue(BigDecimal.valueOf(order.getTotal()));
+        orderDto.setTotalDiscValue(BigDecimal.ZERO);
+        orderDto.setTotalSjDisc(BigDecimal.ZERO);
+        orderDto.setTotalSaleValue(BigDecimal.ZERO);
+        orderDto.setTotalPtDp(BigDecimal.ZERO);
+        orderDto.setTotalSjDp(BigDecimal.ZERO);
+        orderDto.setTotalPtDisc(BigDecimal.ZERO);
+        orderDto.setCommissionValue(BigDecimal.ZERO);
+        orderDto.setPayableValue(BigDecimal.valueOf(order.getTotal()));
+        orderDto.setTotalItemValue(BigDecimal.valueOf(order.getTotal()));
+        orderDto.setLogisticsModeKeyword(order.getFreightAmount().toString());
+
+
+        ShopDetail shopDetailByShopId = shopDetailService.getById(order.getShopId());
+//            orderDto.setOrgName(shopDetailByShopId.getShopName());
+        orderDto.setOrgCode(shopDetailByShopId.getThirdPartyCode());
+        orderDto.setOrgName(shopDetailByShopId.getShopName());
+        orderDto.setPreOrder(false);
+        orderDto.setOfflineOrder(false);
+        orderDto.setOrderTime(formatter.format(order.getCreateTime()));
+        orderDto.setGroupId(0);
+        orderDto.setGoodsReturn("true");
+        UserAddrOrder addrOrder = userAddrOrderService.getById(order.getAddrOrderId());
+        User user = userService.getUserByUserId(order.getUserId());
+
+        //填充收件人信息
+        orderDto.setReceiver(new OrderDto.Receiver());
+        orderDto.getReceiver().setAddress(addrOrder.getAddress());
+        orderDto.getReceiver().setMobile(user.getUserMobile());
+        orderDto.getReceiver().setName(user.getNickName());
+        orderDto.getReceiver().setType("0");
+        orderDto.getReceiver().setLatitude(String.valueOf(addrOrder.getLatitude()));
+        orderDto.getReceiver().setLongitude(String.valueOf(addrOrder.getLongitude()));
+        orderDto.setPayableLogisticsValue(BigDecimal.valueOf(order.getPlatformAmount()));
+        orderDto.setLogisticsModeKeyword("0");
+
+        //填充买家信息
+        orderDto.setBuyer(new OrderDto.Buyer());
+        orderDto.getBuyer().setAddress(addrOrder.getAddress());
+        orderDto.getBuyer().setNick(user.getNickName());
+        orderDto.getBuyer().setEmail(user.getUserMail());
+        orderDto.getBuyer().setNote(order.getRemarks());
+        orderDto.getBuyer().setTel(user.getUserMobile());
+
+        //填充支付信息
+        orderDto.setOrderPayments(new OrderDto.OrderPayments());
+        orderDto.getOrderPayments().setPayment(BigDecimal.valueOf(order.getTotal()));
+        orderDto.getOrderPayments().setKeyword("10002");
+        orderDto.getOrderPayments().setName("商城系统支付");
+        ArrayList<OrderDto.OrderDetails> orderDetails = new ArrayList<>();
+        int weight = 0;
+        List<OrderItem> orderItems1 = orderItemService.getOrderItemsByOrderNumber(order.getOrderNumber());
+        for (OrderItem orderItem:orderItems1){
+            OrderDto.OrderDetails orderDetails1 = new OrderDto.OrderDetails();
+            Sku sku = skuService.getById(orderItem.getSkuId());
+            orderDetails1.setSkuId(sku.getPartyCode());
+            orderDetails1.setItemCode("");
+            orderDetails1.setBarcode("");
+            orderDetails1.setOrderItemId(orderItem.getOrderItemId().toString());
+            orderDetails1.setName(orderItem.getProdName());
+            orderDetails1.setOriginalPrice(BigDecimal.valueOf(sku.getOriPrice()));
+            orderDetails1.setWeight((int)Math.round(sku.getWeight()));
+            weight+=orderDetails1.getWeight();
+            orderDetails1.setSalePrice(BigDecimal.valueOf(sku.getPrice()));
+            orderDetails1.setQty(orderItem.getProdCount());
+            orderDetails1.setMoney(orderDetails1.getSalePrice().multiply(BigDecimal.valueOf(orderDetails1.getQty())));
+            orderDetails.add(orderDetails1);
+        }
+        orderDto.setOrderDetails(orderDetails);
+        orderDto.setWeight(weight);
+        String s = qnhService.addOrder(orderDto);
+//        ResponseEntity responseEntity = qnhService.addOrder(orderDto);
+        if(!StringUtils.isBlank(s)){
+            order.setQnhOrderId(s);
+            order.setQnhOrderStatus("1");
+            orderService.updateById(order);
+            DeviceFey deviceFey = deviceFeyMapper.selectOne(Wrappers.<DeviceFey>lambdaQuery().eq(DeviceFey::getShopId, order.getShopId()).last("limit 1"));
+            FeiEYunApi.print(deviceFey.getDeviceSn(),print(order.getOrderNumber()));
+            return true;
+        }
+        return false;
+    }
+    private String print(String orderByOrderNumber){
+        Order order = orderService.getOrderByOrderNumber(orderByOrderNumber);
+        List<OrderItem> orderItemsByOrderNumber = orderItemService.getOrderItemsByOrderNumber(order.getOrderNumber());
+        String lastFourDigits = order.getOrderNumber().length() >= 4
+                ? order.getOrderNumber().substring(order.getOrderNumber().length() - 4)
+                : order.getOrderNumber(); // 如果长度不足4位,直接返回原字符串
+        UserAddrOrder userAddrOrder = userAddrOrderService.selectByAddrOrderId(order.getAddrOrderId());
+        String userMobile = userAddrOrder.getMobile().length() >= 4
+                ? userAddrOrder.getMobile().substring(userAddrOrder.getMobile().length() - 4)
+                : userAddrOrder.getMobile(); // 如果长度不足4位,直接返回原字符串
+        String receiverName = userAddrOrder.getReceiver();
+        String maskedName = receiverName.length() > 1
+                ? receiverName.substring(0, 1) + "*".repeat(receiverName.length() - 1)
+                : receiverName;
+        StringBuilder content = new StringBuilder();
+        content.append("<BR>");
+        content.append("<BR>");
+        content.append("<CB>#").append(lastFourDigits).append(" 海马购外卖</CB><BR>");
+        content.append("--------------------------------<BR>");
+        content.append("<BR>");
+        content.append("备注:").append(order.getRemarks()).append("<BR>");
+        content.append("<BR>");
+        content.append("--------------------------------<BR>");
+        content.append("下单时间:").append(DateUtil.date(order.getCreateTime())).append("<BR>");
+        content.append("<BR>");
+        content.append("订单编号:").append(order.getOrderNumber()).append("<BR>");
+        content.append("<BR>");
+        content.append("名称      单价  数量 金额<BR>");
+        content.append("----------商品信息----------<BR>");
+        for (OrderItem orderItem:orderItemsByOrderNumber){
+            content.append("<BR>");
+            content.append(orderItem.getProdName()).append("<BR>").append("          ").append(orderItem.getPrice()).append("    ").append(orderItem.getProdCount()).append("   ").append(orderItem.getActualTotal()).append("<BR>");
+        }
+        content.append("<BR>");
+        content.append("----------付款情况----------<BR>");
+        content.append("<BR>");
+        content.append("订单金额:").append(order.getTotal()).append("元<BR>");
+        content.append("<BR>");
+        content.append("实际支付:<B>").append(order.getActualTotal()).append("元</B><BR>");
+        content.append("--------------------------------<BR>");
+        content.append("<BR>");
+        content.append(maskedName);
+        content.append("<BR>");
+        content.append("顾客号码:手机尾号").append(userMobile).append("<BR>");
+        String add = userAddrOrder.getAddress() + userAddrOrder.getAddressName() + userAddrOrder.getAddrDetail();
+        content.append("顾客地址:").append(add).append("<BR>");
+        content.append("########海马购外卖#").append(lastFourDigits).append("########<BR>");
+        content.append("<BR>");
+        content.append("<BR>");
+        return content.toString();
+    }
+}

+ 1 - 9
yami-shop-service/src/main/java/com/yami/shop/service/impl/ChannelProdServiceImpl.java

@@ -205,18 +205,10 @@ public class ChannelProdServiceImpl extends ServiceImpl<ChannelProdMapper, Chann
 //
 //        // 创建模板数据(示例数据)
             List<ChannelProdImportVO> templateData = new ArrayList<>();
-//        ChannelProdImportVO example = new ChannelProdImportVO();
-//        example.setchannelId(1001L);
-//        example.setSkuId(2001L);
-//        example.setPurchasePrice(new BigDecimal("50.00"));
-//        example.setDeliveryPrice(new BigDecimal("60.00"));
-//        example.setchannelProdPrice(new BigDecimal("99.99"));
-//        example.setRemark("示例数据,请删除后填写实际数据");
-//        templateData.add(example);
 
             // 写入Excel
             EasyExcel.write(response.getOutputStream(), ChannelProdImportVO.class)
-                    .sheet("渠道商品导入模板")
+                    .sheet("商品渠道及价格导入模板")
                     .doWrite(templateData);
         } catch (Exception e) {
             e.printStackTrace();