Procházet zdrojové kódy

生命礼赞顶顶那

wangxy před 6 dny
rodič
revize
54584673c8

+ 246 - 0
fs-company/src/main/java/com/fs/company/controller/company/LifeSaluteOrderController.java

@@ -0,0 +1,246 @@
+package com.fs.company.controller.company;
+
+import com.fs.common.annotation.Log;
+import com.fs.common.core.controller.BaseController;
+import com.fs.common.core.domain.AjaxResult;
+import com.fs.common.core.domain.R;
+import com.fs.common.core.page.TableDataInfo;
+import com.fs.common.enums.BusinessType;
+import com.fs.common.exception.base.BaseException;
+import com.fs.common.utils.poi.ExcelUtil;
+import com.fs.core.utils.OrderCodeUtils;
+import com.fs.framework.security.LoginUser;
+import com.fs.framework.security.SecurityUtils;
+import com.fs.his.domain.LifeSaluteOrder;
+import com.fs.his.dto.LifeSaluteOrderImportDTO;
+import com.fs.his.param.LifeSaluteOrderCreateParam;
+import com.fs.his.service.ILifeSaluteOrderService;
+import org.apache.commons.lang3.StringUtils;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.web.bind.annotation.*;
+import org.springframework.web.multipart.MultipartFile;
+
+import java.util.List;
+
+/**
+ * 生命礼赞订单Controller
+ */
+@RestController
+    @RequestMapping("/his/lifeSaluteOrder")
+public class LifeSaluteOrderController extends BaseController
+{
+    @Autowired
+    private ILifeSaluteOrderService lifeSaluteOrderService;
+
+    /**
+     * 分页查询生命礼赞订单列表
+     */
+    @GetMapping("/list")
+    public TableDataInfo list(LifeSaluteOrder lifeSaluteOrder)
+    {
+        startPage();
+        LoginUser loginUser = SecurityUtils.getLoginUser();
+        lifeSaluteOrder.setCompanyId(loginUser.getCompany().getCompanyId());
+        List<LifeSaluteOrder> list = lifeSaluteOrderService.selectLifeSaluteOrderList(lifeSaluteOrder);
+        return getDataTable(list);
+    }
+
+    /**
+     * 创建生命礼赞订单(全部字段由前端传入)
+     */
+    @Log(title = "生命礼赞订单", businessType = BusinessType.INSERT)
+    @PostMapping("/create")
+    public R create(@RequestBody LifeSaluteOrderCreateParam param)
+    {
+        LoginUser loginUser = SecurityUtils.getLoginUser();
+        param.setCompanyId(loginUser.getCompany().getCompanyId());
+        param.setCompanyUserId(loginUser.getUser().getUserId());
+        return lifeSaluteOrderService.createLifeSaluteOrder(param);
+    }
+
+    /**
+     * 导出生命礼赞订单列表到Excel
+     */
+    @Log(title = "生命礼赞订单", businessType = BusinessType.EXPORT)
+    @PostMapping("/export")
+    public AjaxResult export(@RequestBody LifeSaluteOrder lifeSaluteOrder)
+    {
+        LoginUser loginUser = SecurityUtils.getLoginUser();
+        lifeSaluteOrder.setCompanyId(loginUser.getCompany().getCompanyId());
+        List<LifeSaluteOrder> list = lifeSaluteOrderService.selectLifeSaluteOrderList(lifeSaluteOrder);
+        ExcelUtil<LifeSaluteOrder> util = new ExcelUtil<>(LifeSaluteOrder.class);
+        return util.exportExcel(list, "生命礼赞订单数据");
+    }
+
+    /**
+     * 下载生命礼赞订单导入模板
+     */
+    @GetMapping("/importTemplate")
+    public AjaxResult importTemplate()
+    {
+        ExcelUtil<LifeSaluteOrderImportDTO> util = new ExcelUtil<>(LifeSaluteOrderImportDTO.class);
+        return util.importTemplateExcel("生命礼赞订单导入模板");
+    }
+
+    /**
+     * 查询生命礼赞订单物流信息
+     */
+    @GetMapping(value = "/getExpress/{id}")
+    public R getExpress(@PathVariable("id") Long id)
+    {
+        return R.ok().put("data", lifeSaluteOrderService.getExpress(id));
+    }
+
+    /**
+     * 同步生命礼赞订单物流状态
+     */
+    @Log(title = "同步生命礼赞订单物流", businessType = BusinessType.UPDATE)
+    @GetMapping(value = "/syncExpress/{id}")
+    public R syncExpress(@PathVariable("id") Long id)
+    {
+        return lifeSaluteOrderService.syncExpress(id);
+    }
+
+    /**
+     * 从Excel导入生命礼赞订单数据
+     */
+    @Log(title = "生命礼赞订单", businessType = BusinessType.IMPORT)
+    @PostMapping("/importData")
+    public AjaxResult importData(MultipartFile file, boolean updateSupport) throws Exception
+    {
+        ExcelUtil<LifeSaluteOrderImportDTO> util = new ExcelUtil<>(LifeSaluteOrderImportDTO.class);
+        List<LifeSaluteOrderImportDTO> list = util.importExcel(file.getInputStream());
+        String message = importLifeSaluteOrder(list, updateSupport);
+        return AjaxResult.success(message);
+    }
+
+    /**
+     * 处理Excel导入的生命礼赞订单数据
+     */
+    private String importLifeSaluteOrder(List<LifeSaluteOrderImportDTO> orderList, boolean updateSupport)
+    {
+        LoginUser loginUser = SecurityUtils.getLoginUser();
+        if (orderList == null || orderList.isEmpty())
+        {
+            return "导入数据不能为空";
+        }
+        int successCount = 0;
+        int failCount = 0;
+        for (LifeSaluteOrderImportDTO orderDTO : orderList)
+        {
+            try
+            {
+                LifeSaluteOrder existing = lifeSaluteOrderService.selectLifeSaluteOrderByOrderNo(orderDTO.getOrderNo());
+                if (existing != null)
+                {
+                    if (updateSupport)
+                    {
+                        existing = copyImportDtoToOrder(orderDTO, existing);
+                        existing.setId(existing.getId());
+                        lifeSaluteOrderService.updateLifeSaluteOrder(existing);
+                        if (StringUtils.isNotEmpty(existing.getWaybillNo()) && StringUtils.isNotEmpty(existing.getDeliveryCode()))
+                        {
+                            lifeSaluteOrderService.subscribeExpress(existing);
+                        }
+                        successCount++;
+                    }
+                    else
+                    {
+                        failCount++;
+                    }
+                }
+                else
+                {
+                    LifeSaluteOrder order = copyImportDtoToOrder(orderDTO, new LifeSaluteOrder());
+                    if (order.getPackageCount() == null)
+                    {
+                        order.setPackageCount(1);
+                    }
+                    if (order.getOrderStatus() == null)
+                    {
+                        order.setOrderStatus(0);
+                    }
+                    String orderSn = OrderCodeUtils.getOrderSn();
+                    if (StringUtils.isEmpty(orderSn)) {
+                       throw new BaseException("订单号创建失败");
+                    }
+                    order.setOrderNo(orderSn);
+                    order.setCompanyId(loginUser.getCompany().getCompanyId());
+                    order.setCompanyUserId(loginUser.getUser().getUserId());
+                    lifeSaluteOrderService.insertLifeSaluteOrder(order);
+                    if (StringUtils.isNotEmpty(order.getWaybillNo()) && StringUtils.isNotEmpty(order.getDeliveryCode()))
+                    {
+                        lifeSaluteOrderService.subscribeExpress(order);
+                    }
+                    successCount++;
+                }
+            }
+            catch (Exception e)
+            {
+                failCount++;
+            }
+        }
+        return "导入成功 " + successCount + " 条,失败 " + failCount + " 条";
+    }
+
+    /**
+     * 将导入DTO数据复制到实体对象
+     */
+    private LifeSaluteOrder copyImportDtoToOrder(LifeSaluteOrderImportDTO dto, LifeSaluteOrder order)
+    {
+        order.setOrderNo(dto.getOrderNo());
+        order.setMerchantOrderNo(dto.getMerchantOrderNo());
+        order.setPlatformOrderNo(dto.getPlatformOrderNo());
+        order.setPreWaybillNo(dto.getPreWaybillNo());
+        order.setWaybillNo(dto.getWaybillNo());
+        order.setDeliveryCode(dto.getDeliveryCode());
+        order.setSenderName(dto.getSenderName());
+        order.setSenderMobile(dto.getSenderMobile());
+        order.setSenderTel(dto.getSenderTel());
+        order.setSenderCompany(dto.getSenderCompany());
+        order.setSenderProvince(dto.getSenderProvince());
+        order.setSenderCity(dto.getSenderCity());
+        order.setSenderDistrict(dto.getSenderDistrict());
+        order.setSenderAddress(dto.getSenderAddress());
+        order.setReceiverName(dto.getReceiverName());
+        order.setReceiverMobile(dto.getReceiverMobile());
+        order.setReceiverTel(dto.getReceiverTel());
+        order.setReceiverCompany(dto.getReceiverCompany());
+        order.setReceiverProvince(dto.getReceiverProvince());
+        order.setReceiverCity(dto.getReceiverCity());
+        order.setReceiverDistrict(dto.getReceiverDistrict());
+        order.setReceiverAddress(dto.getReceiverAddress());
+        order.setGoodsType(dto.getGoodsType());
+        order.setPackageCount(dto.getPackageCount());
+        order.setWeight(dto.getWeight());
+        order.setLength(dto.getLength());
+        order.setWidth(dto.getWidth());
+        order.setHeight(dto.getHeight());
+        order.setTemperatureType(dto.getTemperatureType());
+        order.setExpressProductType(dto.getExpressProductType());
+        order.setPickupDate(dto.getPickupDate());
+        order.setPickupTime(dto.getPickupTime());
+        order.setWarehouseCode(dto.getWarehouseCode());
+        order.setPayType(dto.getPayType());
+        order.setIsUploadWaybillFile(dto.getIsUploadWaybillFile());
+        order.setIsPrintWaybill(dto.getIsPrintWaybill());
+        order.setInsuredAmount(dto.getInsuredAmount());
+        order.setIsSignReturn(dto.getIsSignReturn());
+        order.setCodAmount(dto.getCodAmount());
+        order.setIsJdExpress(dto.getIsJdExpress());
+        order.setIsFraudCodeCollect(dto.getIsFraudCodeCollect());
+        order.setIsOpenCheck(dto.getIsOpenCheck());
+        order.setIsPackService(dto.getIsPackService());
+        order.setIsExpressWarehouse(dto.getIsExpressWarehouse());
+        order.setIsReturnBox(dto.getIsReturnBox());
+        order.setIsDesignatedSign(dto.getIsDesignatedSign());
+        order.setDesignatedSignVerifyCode(dto.getDesignatedSignVerifyCode());
+        order.setIsDesignatedSignIdcard(dto.getIsDesignatedSignIdcard());
+        order.setIsPackageService(dto.getIsPackageService());
+        order.setSalesChannel(dto.getSalesChannel());
+        order.setOrderAmount(dto.getOrderAmount());
+        order.setCustomInfo(dto.getCustomInfo());
+        order.setOrderStatus(dto.getOrderStatus());
+        return order;
+    }
+}

+ 3 - 0
fs-service/src/main/java/com/fs/his/domain/FsExternalOrder.java

@@ -105,6 +105,9 @@ public class FsExternalOrder extends BaseEntity
 
     private String syncMsg;
 
+    @Excel(name = "收件人电话")
+    private String receiverPhone;
+
     /**
      * 扩展订单id
      */

+ 272 - 0
fs-service/src/main/java/com/fs/his/domain/LifeSaluteOrder.java

@@ -0,0 +1,272 @@
+package com.fs.his.domain;
+
+import java.math.BigDecimal;
+import java.util.Date;
+import com.fasterxml.jackson.annotation.JsonFormat;
+import com.fs.common.annotation.Excel;
+import com.fs.common.core.domain.BaseEntity;
+import lombok.Data;
+
+/**
+ * 生命礼赞订单对象 life_salute_order
+ */
+@Data
+public class LifeSaluteOrder extends BaseEntity
+{
+    private static final long serialVersionUID = 1L;
+
+    /** 主键ID */
+    private Long id;
+
+    /** 公司ID */
+//    @Excel(name = "公司ID")
+    private Long companyId;
+
+    /** 销售/员工ID */
+//    @Excel(name = "销售/员工ID")
+    private Long companyUserId;
+
+    /** 系统订单号 */
+    @Excel(name = "系统订单号", type = Excel.Type.EXPORT)
+    private String orderNo;
+
+    /** 商家订单号 */
+    @Excel(name = "商家订单号")
+    private String merchantOrderNo;
+
+    /** 平台订单号 */
+    @Excel(name = "平台订单号")
+    private String platformOrderNo;
+
+    /** 预制运单号 */
+    @Excel(name = "预制运单号")
+    private String preWaybillNo;
+
+    /** 实际运单号 */
+    @Excel(name = "实际运单号")
+    private String waybillNo;
+
+    /** 快递公司编码 */
+    @Excel(name = "快递公司编码")
+    private String deliveryCode;
+
+    /** 物流状态 */
+    @Excel(name = "物流状态")
+    private Integer deliveryStatus;
+
+    /** 物流状态类型 */
+    @Excel(name = "物流状态类型")
+    private String deliveryType;
+
+    /** 物流更新时间 */
+    @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss")
+    @Excel(name = "物流更新时间", width = 30, dateFormat = "yyyy-MM-dd HH:mm:ss")
+    private Date deliveryUpdateTime;
+
+    /** 处方编号 */
+    @Excel(name = "处方编号")
+    private String prescriptionNo;
+
+    /** 处方人姓名 */
+    @Excel(name = "处方人姓名")
+    private String prescriptionName;
+
+    /** 寄件人姓名 */
+    @Excel(name = "寄件人姓名")
+    private String senderName;
+
+    /** 寄件人手机号 */
+    @Excel(name = "寄件人手机号")
+    private String senderMobile;
+
+    /** 寄件人座机 */
+    @Excel(name = "寄件人座机")
+    private String senderTel;
+
+    /** 寄件公司 */
+    @Excel(name = "寄件公司")
+    private String senderCompany;
+
+    /** 寄件省 */
+    @Excel(name = "寄件省")
+    private String senderProvince;
+
+    /** 寄件市 */
+    @Excel(name = "寄件市")
+    private String senderCity;
+
+    /** 寄件区县 */
+    @Excel(name = "寄件区县")
+    private String senderDistrict;
+
+    /** 寄件详细地址 */
+    @Excel(name = "寄件详细地址")
+    private String senderAddress;
+
+    /** 收件人姓名 */
+    @Excel(name = "收件人姓名")
+    private String receiverName;
+
+    /** 收件人手机号 */
+    @Excel(name = "收件人手机号")
+    private String receiverMobile;
+
+    /** 收件人座机 */
+    @Excel(name = "收件人座机")
+    private String receiverTel;
+
+    /** 收件公司 */
+    @Excel(name = "收件公司")
+    private String receiverCompany;
+
+    /** 收件省 */
+    @Excel(name = "收件省")
+    private String receiverProvince;
+
+    /** 收件市 */
+    @Excel(name = "收件市")
+    private String receiverCity;
+
+    /** 收件区县 */
+    @Excel(name = "收件区县")
+    private String receiverDistrict;
+
+    /** 收件详细地址 */
+    @Excel(name = "收件详细地址")
+    private String receiverAddress;
+
+    /** 物品类型 */
+    @Excel(name = "物品类型")
+    private String goodsType;
+
+    /** 总件数 */
+    @Excel(name = "总件数")
+    private Integer packageCount;
+
+    /** 重量KG */
+    @Excel(name = "重量KG")
+    private BigDecimal weight;
+
+    /** 长度CM */
+    @Excel(name = "长度CM")
+    private BigDecimal length;
+
+    /** 宽度CM */
+    @Excel(name = "宽度CM")
+    private BigDecimal width;
+
+    /** 高度CM */
+    @Excel(name = "高度CM")
+    private BigDecimal height;
+
+    /** 温层 1普通 2冷藏 3冷冻 */
+    @Excel(name = "温层", readConverterExp = "1=普通,2=冷藏,3=冷冻")
+    private Integer temperatureType;
+
+    /** 时效产品 */
+    @Excel(name = "时效产品")
+    private String expressProductType;
+
+    /** 期望上门日期 */
+    @JsonFormat(pattern = "yyyy-MM-dd")
+    @Excel(name = "期望上门日期", width = 30, dateFormat = "yyyy-MM-dd")
+    private Date pickupDate;
+
+    /** 期望上门时间 */
+    @Excel(name = "期望上门时间")
+    private String pickupTime;
+
+    /** 发货仓编码 */
+    @Excel(name = "发货仓编码")
+    private String warehouseCode;
+
+    /** 付款方式 1寄付月结 2到付月结 3第三方付 */
+    @Excel(name = "付款方式", readConverterExp = "1=寄付月结,2=到付月结,3=第三方付")
+    private String payType;
+
+    /** 是否上传函速达文件 0 否 1 是 */
+    @Excel(name = "是否上传函速达文件", readConverterExp = "0=否,1=是")
+    private Integer isUploadWaybillFile;
+
+    /** 函速达打印 0黑白打印 1彩色打印 */
+    @Excel(name = "函速达打印", readConverterExp = "0=黑白打印,1=彩色打印")
+    private Integer isPrintWaybill;
+
+    /** 保价金额 */
+    @Excel(name = "保价金额")
+    private BigDecimal insuredAmount;
+
+    /** 签单返还 0否 1纸质+电子 */
+    @Excel(name = "签单返还", readConverterExp = "0=否,1=纸质+电子")
+    private Integer isSignReturn;
+
+    /** 代收货款金额 */
+    @Excel(name = "代收货款金额")
+    private BigDecimal codAmount;
+
+    /** 京尊达 0 否 1 是 */
+    @Excel(name = "京尊达", readConverterExp = "0=否,1=是")
+    private Integer isJdExpress;
+
+    /** 防撕码采集 0 否 1 是 */
+    @Excel(name = "防撕码采集", readConverterExp = "0=否,1=是")
+    private Integer isFraudCodeCollect;
+
+    /** 开箱验货 0 否 1 是 */
+    @Excel(name = "开箱验货", readConverterExp = "0=否,1=是")
+    private Integer isOpenCheck;
+
+    /** 打包服务 0 否 1 是 */
+    @Excel(name = "打包服务", readConverterExp = "0=否,1=是")
+    private Integer isPackService;
+
+    /** 快递入仓 0 否 1 是 */
+    @Excel(name = "快递入仓", readConverterExp = "0=否,1=是")
+    private Integer isExpressWarehouse;
+
+    /** 退回箱 0 否 1 是 */
+    @Excel(name = "退回箱", readConverterExp = "0=否,1=是")
+    private Integer isReturnBox;
+
+    /** 指定签收 0 否 1 短信验证签收 */
+    @Excel(name = "指定签收", readConverterExp = "0=否,1=短信验证签收")
+    private Integer isDesignatedSign;
+
+    /** 指定签收-自定义验证码 */
+    @Excel(name = "指定签收-自定义验证码")
+    private String designatedSignVerifyCode;
+
+    /** 指定签收-身份证验证 */
+    @Excel(name = "指定签收-身份证验证")
+    private String isDesignatedSignIdcard;
+
+    /** 包装服务 0 否 1 是 */
+    @Excel(name = "包装服务", readConverterExp = "0=否,1=是")
+    private Integer isPackageService;
+
+    /** 销售渠道 */
+    @Excel(name = "销售渠道")
+    private String salesChannel;
+
+    /** 订单金额(元) */
+    @Excel(name = "订单金额(元)")
+    private BigDecimal orderAmount;
+
+    /** 自定义信息 */
+    @Excel(name = "自定义信息")
+    private String customInfo;
+
+    /** 订单状态 */
+    @Excel(name = "订单状态", readConverterExp = "0=待处理,1=处理中,2=已完成,3=已取消")
+    private Integer orderStatus;
+
+    /** 创建时间 */
+    @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss")
+    @Excel(name = "创建时间", width = 30, dateFormat = "yyyy-MM-dd HH:mm:ss")
+    private Date createTime;
+
+    /** 更新时间 */
+    @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss")
+    @Excel(name = "更新时间", width = 30, dateFormat = "yyyy-MM-dd HH:mm:ss")
+    private Date updateTime;
+}

+ 229 - 0
fs-service/src/main/java/com/fs/his/dto/LifeSaluteOrderImportDTO.java

@@ -0,0 +1,229 @@
+package com.fs.his.dto;
+
+import com.fs.common.annotation.Excel;
+import com.fs.common.core.domain.BaseEntity;
+import lombok.Data;
+
+import java.math.BigDecimal;
+import java.util.Date;
+
+/**
+ * 生命礼赞订单导入DTO
+ */
+@Data
+public class LifeSaluteOrderImportDTO extends BaseEntity
+{
+    private static final long serialVersionUID = 1L;
+
+    /** 系统订单号 */
+    @Excel(name = "系统订单号")
+    private String orderNo;
+
+    /** 商家订单号 */
+    @Excel(name = "商家订单号")
+    private String merchantOrderNo;
+
+    /** 平台订单号 */
+    @Excel(name = "平台订单号")
+    private String platformOrderNo;
+
+    /** 预制运单号 */
+    @Excel(name = "预制运单号")
+    private String preWaybillNo;
+
+    /** 实际运单号 */
+    @Excel(name = "运单号")
+    private String waybillNo;
+
+    /** 快递公司编码 */
+    @Excel(name = "快递公司编码")
+    private String deliveryCode;
+
+    /** 寄件人姓名 */
+    @Excel(name = "寄件人姓名")
+    private String senderName;
+
+    /** 寄件人手机号 */
+    @Excel(name = "寄件人手机")
+    private String senderMobile;
+
+    /** 寄件人座机 */
+    @Excel(name = "寄件人座机")
+    private String senderTel;
+
+    /** 寄件公司 */
+    @Excel(name = "寄件公司")
+    private String senderCompany;
+
+    /** 寄件省 */
+    @Excel(name = "寄件省")
+    private String senderProvince;
+
+    /** 寄件市 */
+    @Excel(name = "寄件市")
+    private String senderCity;
+
+    /** 寄件区县 */
+    @Excel(name = "寄件区县")
+    private String senderDistrict;
+
+    /** 寄件详细地址 */
+    @Excel(name = "寄件人地址")
+    private String senderAddress;
+
+    /** 收件人姓名 */
+    @Excel(name = "收件人姓名")
+    private String receiverName;
+
+    /** 收件人手机号 */
+    @Excel(name = "收件人手机")
+    private String receiverMobile;
+
+    /** 收件人座机 */
+    @Excel(name = "收件人座机")
+    private String receiverTel;
+
+    /** 收件公司 */
+    @Excel(name = "收件公司")
+    private String receiverCompany;
+
+    /** 收件省 */
+    @Excel(name = "收件省")
+    private String receiverProvince;
+
+    /** 收件市 */
+    @Excel(name = "收件市")
+    private String receiverCity;
+
+    /** 收件区县 */
+    @Excel(name = "收件区县")
+    private String receiverDistrict;
+
+    /** 收件详细地址 */
+    @Excel(name = "收件人地址")
+    private String receiverAddress;
+
+    /** 物品类型 */
+    @Excel(name = "物品类型")
+    private String goodsType;
+
+    /** 总件数 */
+    @Excel(name = "总件数")
+    private Integer packageCount;
+
+    /** 重量KG */
+    @Excel(name = "重量KG")
+    private BigDecimal weight;
+
+    /** 长度CM */
+    @Excel(name = "长度CM")
+    private BigDecimal length;
+
+    /** 宽度CM */
+    @Excel(name = "宽度CM")
+    private BigDecimal width;
+
+    /** 高度CM */
+    @Excel(name = "高度CM")
+    private BigDecimal height;
+
+    /** 温层 1普通 2冷藏 3冷冻 */
+    @Excel(name = "温层", readConverterExp = "1=普通,2=冷藏,3=冷冻")
+    private Integer temperatureType;
+
+    /** 时效产品 */
+    @Excel(name = "时效产品")
+    private String expressProductType;
+
+    /** 期望上门日期 */
+    @Excel(name = "期望上门日期", width = 30, dateFormat = "yyyy-MM-dd")
+    private Date pickupDate;
+
+    /** 期望上门时间 */
+    @Excel(name = "期望上门时间")
+    private String pickupTime;
+
+    /** 发货仓编码 */
+    @Excel(name = "发货仓编码")
+    private String warehouseCode;
+
+    /** 付款方式 1寄付月结 2到付月结 3第三方付 */
+    @Excel(name = "付款方式", readConverterExp = "1=寄付月结,2=到付月结,3=第三方付")
+    private String payType;
+
+    /** 是否上传函速达文件 0 否 1 是 */
+    @Excel(name = "是否上传函速达文件", readConverterExp = "0=否,1=是")
+    private Integer isUploadWaybillFile;
+
+    /** 函速达打印 0黑白打印 1彩色打印 */
+    @Excel(name = "函速达打印", readConverterExp = "0=黑白打印,1=彩色打印")
+    private Integer isPrintWaybill;
+
+    /** 保价金额 */
+    @Excel(name = "保价金额")
+    private BigDecimal insuredAmount;
+
+    /** 签单返还 0否 1纸质+电子 */
+    @Excel(name = "签单返还", readConverterExp = "0=否,1=纸质+电子")
+    private Integer isSignReturn;
+
+    /** 代收货款金额 */
+    @Excel(name = "代收货款金额(元)")
+    private BigDecimal codAmount;
+
+    /** 京尊达 0 否 1 是 */
+    @Excel(name = "京尊达", readConverterExp = "0=否,1=是")
+    private Integer isJdExpress;
+
+    /** 防撕码采集 0 否 1 是 */
+    @Excel(name = "防撕码采集", readConverterExp = "0=否,1=是")
+    private Integer isFraudCodeCollect;
+
+    /** 开箱验货 0 否 1 是 */
+    @Excel(name = "开箱验货", readConverterExp = "0=否,1=是")
+    private Integer isOpenCheck;
+
+    /** 打包服务 0 否 1 是 */
+    @Excel(name = "打包服务", readConverterExp = "0=否,1=是")
+    private Integer isPackService;
+
+    /** 快递入仓 0 否 1 是 */
+    @Excel(name = "快递入仓", readConverterExp = "0=否,1=是")
+    private Integer isExpressWarehouse;
+
+    /** 退回箱 0 否 1 是 */
+    @Excel(name = "退回箱", readConverterExp = "0=否,1=是")
+    private Integer isReturnBox;
+
+    /** 指定签收 0 否 1 短信验证签收 */
+    @Excel(name = "指定签收", readConverterExp = "0=否,1=短信验证签收")
+    private Integer isDesignatedSign;
+
+    /** 指定签收-自定义验证码 */
+    @Excel(name = "指定签收-自定义验证码")
+    private String designatedSignVerifyCode;
+
+    /** 指定签收-身份证验证 */
+    @Excel(name = "指定签收-身份证验证")
+    private String isDesignatedSignIdcard;
+
+    /** 包装服务 0 否 1 是 */
+    @Excel(name = "包装服务", readConverterExp = "0=否,1=是")
+    private Integer isPackageService;
+
+    /** 销售渠道 */
+    @Excel(name = "销售渠道")
+    private String salesChannel;
+
+    /** 订单金额(元) */
+    @Excel(name = "订单金额(元)")
+    private BigDecimal orderAmount;
+
+    /** 自定义信息 */
+    @Excel(name = "自定义信息")
+    private String customInfo;
+
+    /** 订单状态 */
+    @Excel(name = "订单状态", readConverterExp = "0=待处理,1=处理中,2=已完成,3=已取消")
+    private Integer orderStatus;
+}

+ 76 - 0
fs-service/src/main/java/com/fs/his/mapper/LifeSaluteOrderMapper.java

@@ -0,0 +1,76 @@
+package com.fs.his.mapper;
+
+import com.fs.his.domain.LifeSaluteOrder;
+import org.apache.ibatis.annotations.Param;
+
+import java.util.List;
+
+/**
+ * 生命礼赞订单Mapper接口
+ */
+public interface LifeSaluteOrderMapper {
+
+    /**
+     * 根据主键查询生命礼赞订单
+     *
+     * @param id 主键ID
+     * @return 生命礼赞订单
+     */
+    public LifeSaluteOrder selectLifeSaluteOrderById(Long id);
+
+    /**
+     * 根据系统订单号查询生命礼赞订单
+     *
+     * @param orderNo 系统订单号
+     * @return 生命礼赞订单
+     */
+    public LifeSaluteOrder selectLifeSaluteOrderByOrderNo(String orderNo);
+
+    /**
+     * 查询生命礼赞订单列表
+     *
+     * @param lifeSaluteOrder 查询条件
+     * @return 生命礼赞订单集合
+     */
+    public List<LifeSaluteOrder> selectLifeSaluteOrderList(LifeSaluteOrder lifeSaluteOrder);
+
+    /**
+     * 根据ID列表批量查询生命礼赞订单
+     *
+     * @param ids 主键ID集合
+     * @return 生命礼赞订单集合
+     */
+    public List<LifeSaluteOrder> selectLifeSaluteOrderByIds(@Param("ids") List<Long> ids);
+
+    /**
+     * 新增生命礼赞订单
+     *
+     * @param lifeSaluteOrder 生命礼赞订单
+     * @return 影响行数
+     */
+    public int insertLifeSaluteOrder(LifeSaluteOrder lifeSaluteOrder);
+
+    /**
+     * 修改生命礼赞订单
+     *
+     * @param lifeSaluteOrder 生命礼赞订单
+     * @return 影响行数
+     */
+    public int updateLifeSaluteOrder(LifeSaluteOrder lifeSaluteOrder);
+
+    /**
+     * 根据主键删除生命礼赞订单
+     *
+     * @param id 主键ID
+     * @return 影响行数
+     */
+    public int deleteLifeSaluteOrderById(Long id);
+
+    /**
+     * 批量删除生命礼赞订单
+     *
+     * @param ids 需要删除的数据ID数组
+     * @return 影响行数
+     */
+    public int deleteLifeSaluteOrderByIds(Long[] ids);
+}

+ 2 - 0
fs-service/src/main/java/com/fs/his/param/FsExternalOrderAddParam.java

@@ -19,6 +19,8 @@ public class FsExternalOrderAddParam {
 
     private String userPhone;
 
+    private String receiverPhone;
+
     private String userAddress;
 
     private BigDecimal freightPrice;

+ 181 - 0
fs-service/src/main/java/com/fs/his/param/LifeSaluteOrderCreateParam.java

@@ -0,0 +1,181 @@
+package com.fs.his.param;
+
+import lombok.Data;
+
+import java.math.BigDecimal;
+import java.util.Date;
+
+/**
+ * 生命礼赞订单创建参数
+ */
+@Data
+public class LifeSaluteOrderCreateParam {
+
+    /** 公司ID */
+    private Long companyId;
+
+    /** 销售/员工ID */
+    private Long companyUserId;
+
+    /** 系统订单号 */
+    private String orderNo;
+
+    /** 商家订单号 */
+    private String merchantOrderNo;
+
+    /** 平台订单号 */
+    private String platformOrderNo;
+
+    /** 预制运单号 */
+    private String preWaybillNo;
+
+    /** 实际运单号 */
+    private String waybillNo;
+
+    /** 处方编号 */
+    private String prescriptionNo;
+
+    /** 处方人姓名 */
+    private String prescriptionName;
+
+    /** 寄件人姓名 */
+    private String senderName;
+
+    /** 寄件人手机号 */
+    private String senderMobile;
+
+    /** 寄件人座机 */
+    private String senderTel;
+
+    /** 寄件公司 */
+    private String senderCompany;
+
+    /** 寄件省 */
+    private String senderProvince;
+
+    /** 寄件市 */
+    private String senderCity;
+
+    /** 寄件区县 */
+    private String senderDistrict;
+
+    /** 寄件详细地址 */
+    private String senderAddress;
+
+    /** 收件人姓名 */
+    private String receiverName;
+
+    /** 收件人手机号 */
+    private String receiverMobile;
+
+    /** 收件人座机 */
+    private String receiverTel;
+
+    /** 收件公司 */
+    private String receiverCompany;
+
+    /** 收件省 */
+    private String receiverProvince;
+
+    /** 收件市 */
+    private String receiverCity;
+
+    /** 收件区县 */
+    private String receiverDistrict;
+
+    /** 收件详细地址 */
+    private String receiverAddress;
+
+    /** 物品类型 */
+    private String goodsType;
+
+    /** 总件数 */
+    private Integer packageCount;
+
+    /** 重量KG */
+    private BigDecimal weight;
+
+    /** 长度CM */
+    private BigDecimal length;
+
+    /** 宽度CM */
+    private BigDecimal width;
+
+    /** 高度CM */
+    private BigDecimal height;
+
+    /** 温层 1普通 2冷藏 3冷冻 */
+    private Integer temperatureType;
+
+    /** 时效产品 */
+    private String expressProductType;
+
+    /** 期望上门日期 */
+    private Date pickupDate;
+
+    /** 期望上门时间 */
+    private String pickupTime;
+
+    /** 发货仓编码 */
+    private String warehouseCode;
+
+    /** 付款方式 1寄付月结 2到付月结 3第三方付 */
+    private String payType;
+
+    /** 是否上传函速达文件 0 否 1 是 */
+    private Integer isUploadWaybillFile;
+
+    /** 函速达打印 0黑白打印 1彩色打印 */
+    private Integer isPrintWaybill;
+
+    /** 保价金额 */
+    private BigDecimal insuredAmount;
+
+    /** 签单返还 0否 1纸质+电子 */
+    private Integer isSignReturn;
+
+    /** 代收货款金额 */
+    private BigDecimal codAmount;
+
+    /** 京尊达 0 否 1 是 */
+    private Integer isJdExpress;
+
+    /** 防撕码采集 0 否 1 是 */
+    private Integer isFraudCodeCollect;
+
+    /** 开箱验货 0 否 1 是 */
+    private Integer isOpenCheck;
+
+    /** 打包服务 0 否 1 是 */
+    private Integer isPackService;
+
+    /** 快递入仓 0 否 1 是 */
+    private Integer isExpressWarehouse;
+
+    /** 退回箱 0 否 1 是 */
+    private Integer isReturnBox;
+
+    /** 指定签收 0 否 1 短信验证签收 */
+    private Integer isDesignatedSign;
+
+    /** 指定签收-自定义验证码 */
+    private String designatedSignVerifyCode;
+
+    /** 指定签收-身份证验证 */
+    private String isDesignatedSignIdcard;
+
+    /** 包装服务 0 否 1 是 */
+    private Integer isPackageService;
+
+    /** 销售渠道 */
+    private String salesChannel;
+
+    /** 订单金额(元) */
+    private BigDecimal orderAmount;
+
+    /** 自定义信息 */
+    private String customInfo;
+
+    /** 订单状态 */
+    private Integer orderStatus;
+}

+ 109 - 0
fs-service/src/main/java/com/fs/his/service/ILifeSaluteOrderService.java

@@ -0,0 +1,109 @@
+package com.fs.his.service;
+
+import com.fs.common.core.domain.R;
+import com.fs.his.domain.LifeSaluteOrder;
+import com.fs.his.dto.ExpressInfoDTO;
+import com.fs.his.param.LifeSaluteOrderCreateParam;
+
+import java.util.List;
+
+/**
+ * 生命礼赞订单Service接口
+ */
+public interface ILifeSaluteOrderService {
+
+    /**
+     * 根据主键查询生命礼赞订单
+     *
+     * @param id 主键ID
+     * @return 生命礼赞订单
+     */
+    public LifeSaluteOrder selectLifeSaluteOrderById(Long id);
+
+    /**
+     * 根据系统订单号查询生命礼赞订单
+     *
+     * @param orderNo 系统订单号
+     * @return 生命礼赞订单
+     */
+    public LifeSaluteOrder selectLifeSaluteOrderByOrderNo(String orderNo);
+
+    /**
+     * 查询生命礼赞订单列表(根据公司配置自动过滤寄件人信息)
+     *
+     * @param lifeSaluteOrder 查询条件
+     * @return 生命礼赞订单集合
+     */
+    public List<LifeSaluteOrder> selectLifeSaluteOrderList(LifeSaluteOrder lifeSaluteOrder);
+
+    /**
+     * 根据ID列表批量查询生命礼赞订单
+     *
+     * @param ids 主键ID集合
+     * @return 生命礼赞订单集合
+     */
+    public List<LifeSaluteOrder> selectLifeSaluteOrderByIds(List<Long> ids);
+
+    /**
+     * 新增生命礼赞订单
+     *
+     * @param lifeSaluteOrder 生命礼赞订单
+     * @return 影响行数
+     */
+    public int insertLifeSaluteOrder(LifeSaluteOrder lifeSaluteOrder);
+
+    /**
+     * 修改生命礼赞订单
+     *
+     * @param lifeSaluteOrder 生命礼赞订单
+     * @return 影响行数
+     */
+    public int updateLifeSaluteOrder(LifeSaluteOrder lifeSaluteOrder);
+
+    /**
+     * 根据主键删除生命礼赞订单
+     *
+     * @param id 主键ID
+     * @return 影响行数
+     */
+    public int deleteLifeSaluteOrderById(Long id);
+
+    /**
+     * 批量删除生命礼赞订单
+     *
+     * @param ids 需要删除的数据ID数组
+     * @return 影响行数
+     */
+    public int deleteLifeSaluteOrderByIds(Long[] ids);
+
+    /**
+     * 创建生命礼赞订单
+     *
+     * @param param 订单创建参数(全部字段由前端传入)
+     * @return 结果(包含 orderId 和 orderNo)
+     */
+    R createLifeSaluteOrder(LifeSaluteOrderCreateParam param);
+
+    /**
+     * 查询生命礼赞订单物流信息
+     *
+     * @param id 订单ID
+     * @return 物流信息
+     */
+    ExpressInfoDTO getExpress(Long id);
+
+    /**
+     * 同步生命礼赞订单物流状态
+     *
+     * @param id 订单ID
+     * @return 同步结果
+     */
+    R syncExpress(Long id);
+
+    /**
+     * 订阅快递鸟物流推送
+     *
+     * @param order 订单信息
+     */
+    void subscribeExpress(LifeSaluteOrder order);
+}

+ 4 - 3
fs-service/src/main/java/com/fs/his/service/impl/FsExternalOrderServiceImpl.java

@@ -205,7 +205,7 @@ public class FsExternalOrderServiceImpl implements IFsExternalOrderService {
         if (!ShipperCodeEnum.SF.getValue().equals(order.getDeliveryCode()) || StringUtils.isBlank(order.getUserPhone())) {
             return "";
         }
-        String phone = order.getUserPhone();
+        String phone = order.getReceiverPhone();
         if (phone.length() > 11) {
             phone = PhoneUtil.decryptPhone(phone);
         }
@@ -312,6 +312,7 @@ public class FsExternalOrderServiceImpl implements IFsExternalOrderService {
         order.setIsPay(1);
         order.setIsSync(0);
         order.setShippingType(1);
+        order.setReceiverPhone(param.getReceiverPhone());
         order.setExternalCreateTime(new Date());
 
         Long totalNum = 0L;
@@ -571,7 +572,7 @@ public class FsExternalOrderServiceImpl implements IFsExternalOrderService {
             receiverName = "收件人";
         }
         shopOrderDTO.setReceiverName(receiverName.length() > 20 ? receiverName.substring(0, 20) : receiverName);
-        shopOrderDTO.setReceiverPhone(order.getUserPhone());
+        shopOrderDTO.setReceiverPhone(order.getReceiverPhone());
 
         String[] address = order.getUserAddress().split(" ");
         if (address.length < 3) {
@@ -765,7 +766,7 @@ public class FsExternalOrderServiceImpl implements IFsExternalOrderService {
         }
 
         try {
-            String userPhone = order.getUserPhone();
+            String userPhone = order.getReceiverPhone();
             String lastFourNumber = StringUtils.isNotBlank(userPhone) && userPhone.length() >= 4
                     ? userPhone.substring(userPhone.length() - 4)
                     : userPhone;

+ 273 - 0
fs-service/src/main/java/com/fs/his/service/impl/LifeSaluteOrderServiceImpl.java

@@ -0,0 +1,273 @@
+package com.fs.his.service.impl;
+
+import com.fs.common.OrderUtils;
+import com.fs.common.core.domain.R;
+import com.fs.company.domain.Company;
+import com.fs.company.domain.CompanyConfig;
+import com.fs.company.service.ICompanyConfigService;
+import com.fs.company.service.ICompanyService;
+import com.fs.company.service.impl.CompanyServiceImpl;
+import com.fs.core.utils.OrderCodeUtils;
+import com.fs.his.domain.LifeSaluteOrder;
+import com.fs.his.dto.ExpressInfoDTO;
+import com.fs.his.mapper.LifeSaluteOrderMapper;
+import com.fs.his.param.LifeSaluteOrderCreateParam;
+import com.fs.his.service.IFsExpressService;
+import com.fs.his.service.ILifeSaluteOrderService;
+import lombok.extern.slf4j.Slf4j;
+import org.apache.commons.lang3.StringUtils;
+import org.springframework.beans.BeanUtils;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.stereotype.Service;
+import org.springframework.transaction.annotation.Transactional;
+
+import java.util.ArrayList;
+import java.util.Collection;
+import java.util.Date;
+import java.util.List;
+import java.util.stream.Collectors;
+
+/**
+ * 生命礼赞订单Service实现类
+ */
+@Slf4j
+@Service
+public class LifeSaluteOrderServiceImpl implements ILifeSaluteOrderService {
+
+    @Autowired
+    private LifeSaluteOrderMapper lifeSaluteOrderMapper;
+
+    @Autowired
+    private ICompanyConfigService companyConfigService;
+
+    @Autowired
+    private ICompanyService  iCompanyService;
+
+    @Autowired
+    private IFsExpressService expressService;
+
+    /**
+     * 根据主键查询生命礼赞订单
+     *
+     * @param id 主键ID
+     * @return 生命礼赞订单
+     */
+    @Override
+    public LifeSaluteOrder selectLifeSaluteOrderById(Long id) {
+        return lifeSaluteOrderMapper.selectLifeSaluteOrderById(id);
+    }
+
+    /**
+     * 根据系统订单号查询生命礼赞订单
+     *
+     * @param orderNo 系统订单号
+     * @return 生命礼赞订单
+     */
+    @Override
+    public LifeSaluteOrder selectLifeSaluteOrderByOrderNo(String orderNo) {
+        return lifeSaluteOrderMapper.selectLifeSaluteOrderByOrderNo(orderNo);
+    }
+
+    /**
+     * 查询生命礼赞订单列表
+     * 根据公司ID自动查询 company_config 中配置的寄件人姓名和手机号进行数据过滤
+     *
+     * @param lifeSaluteOrder 查询条件
+     * @return 生命礼赞订单集合
+     */
+    @Override
+    public List<LifeSaluteOrder> selectLifeSaluteOrderList(LifeSaluteOrder lifeSaluteOrder) {
+        if (lifeSaluteOrder.getCompanyId() != null) {
+            Company company = iCompanyService.selectCompanyById(lifeSaluteOrder.getCompanyId());
+            if(company !=null){
+                String senderName = company.getSenderName();
+                if (senderName == null) {
+                    return new ArrayList<>();
+                }else {
+                    lifeSaluteOrder.setSenderName(senderName);
+                }
+                String senderPhone = company.getSenderPhone();
+                if (senderPhone == null ) {
+                    return new ArrayList<>();
+                }else {
+                    lifeSaluteOrder.setSenderMobile(senderPhone);
+                }
+            }
+        }
+        return lifeSaluteOrderMapper.selectLifeSaluteOrderList(lifeSaluteOrder);
+    }
+
+    /**
+     * 根据ID列表批量查询生命礼赞订单
+     *
+     * @param ids 主键ID集合
+     * @return 生命礼赞订单集合
+     */
+    @Override
+    public List<LifeSaluteOrder> selectLifeSaluteOrderByIds(List<Long> ids) {
+        return lifeSaluteOrderMapper.selectLifeSaluteOrderByIds(ids);
+    }
+
+    /**
+     * 创建生命礼赞订单
+     * 校验订单号唯一性,将前端传入参数复制到实体并设置默认值后入库
+     *
+     * @param param 订单创建参数
+     * @return 创建结果
+     */
+    @Override
+    @Transactional
+    public R createLifeSaluteOrder(LifeSaluteOrderCreateParam param) {
+        LifeSaluteOrder existingOrder = lifeSaluteOrderMapper.selectLifeSaluteOrderByOrderNo(param.getOrderNo());
+        if (existingOrder != null) {
+            return R.error("订单号已存在");
+        }
+
+        LifeSaluteOrder order = new LifeSaluteOrder();
+        BeanUtils.copyProperties(param, order);
+
+        if (order.getPackageCount() == null) {
+            order.setPackageCount(1);
+        }
+        if (order.getOrderStatus() == null) {
+            order.setOrderStatus(0);
+        }
+        String orderSn = OrderCodeUtils.getOrderSn();
+        if (StringUtils.isEmpty(orderSn)) {
+            return R.error("订单号生成失败,请重试");
+        }
+        order.setOrderNo(orderSn);
+
+        int result = lifeSaluteOrderMapper.insertLifeSaluteOrder(order);
+        if (result > 0) {
+            return R.ok().put("orderId", order.getId()).put("orderNo", order.getOrderNo());
+        }
+        return R.error("订单创建失败");
+    }
+
+    /**
+     * 新增生命礼赞订单
+     *
+     * @param lifeSaluteOrder 生命礼赞订单
+     * @return 影响行数
+     */
+    @Override
+    public int insertLifeSaluteOrder(LifeSaluteOrder lifeSaluteOrder) {
+        return lifeSaluteOrderMapper.insertLifeSaluteOrder(lifeSaluteOrder);
+    }
+
+    /**
+     * 修改生命礼赞订单
+     *
+     * @param lifeSaluteOrder 生命礼赞订单
+     * @return 影响行数
+     */
+    @Override
+    public int updateLifeSaluteOrder(LifeSaluteOrder lifeSaluteOrder) {
+        return lifeSaluteOrderMapper.updateLifeSaluteOrder(lifeSaluteOrder);
+    }
+
+    /**
+     * 根据主键删除生命礼赞订单
+     *
+     * @param id 主键ID
+     * @return 影响行数
+     */
+    @Override
+    public int deleteLifeSaluteOrderById(Long id) {
+        return lifeSaluteOrderMapper.deleteLifeSaluteOrderById(id);
+    }
+
+    /**
+     * 批量删除生命礼赞订单
+     *
+     * @param ids 需要删除的数据ID数组
+     * @return 影响行数
+     */
+    @Override
+    public int deleteLifeSaluteOrderByIds(Long[] ids) {
+        return lifeSaluteOrderMapper.deleteLifeSaluteOrderByIds(ids);
+    }
+
+    /**
+     * 查询生命礼赞订单物流信息
+     *
+     * @param id 订单ID
+     * @return 物流信息
+     */
+    @Override
+    public ExpressInfoDTO getExpress(Long id) {
+        LifeSaluteOrder order = lifeSaluteOrderMapper.selectLifeSaluteOrderById(id);
+        if (order == null) {
+            throw new RuntimeException("订单不存在");
+        }
+        if (StringUtils.isBlank(order.getWaybillNo())) {
+            return null;
+        }
+        String deliveryCode = StringUtils.isNotBlank(order.getDeliveryCode()) ? order.getDeliveryCode() : "JD";
+        String lastFourNumber = getExpressLastFourNumber(order);
+        return expressService.getExpressInfo(order.getOrderNo(), deliveryCode, order.getWaybillNo(), lastFourNumber);
+    }
+
+    /**
+     * 同步生命礼赞订单物流状态
+     *
+     * @param id 订单ID
+     * @return 同步结果
+     */
+    @Override
+    @Transactional(rollbackFor = Exception.class)
+    public R syncExpress(Long id) {
+        LifeSaluteOrder order = lifeSaluteOrderMapper.selectLifeSaluteOrderById(id);
+        if (order == null) {
+            return R.error("订单不存在");
+        }
+        if (StringUtils.isBlank(order.getWaybillNo())) {
+            return R.error("快递单号为空");
+        }
+        ExpressInfoDTO dto = getExpress(id);
+        if (dto == null) {
+            return R.error("未查询到物流信息");
+        }
+        if (!dto.isSuccess()) {
+            return R.error(dto.getReason());
+        }
+        LifeSaluteOrder update = new LifeSaluteOrder();
+        update.setId(order.getId());
+        update.setDeliveryStatus(Integer.parseInt(dto.getState()));
+        update.setDeliveryType(dto.getStateEx());
+        update.setDeliveryUpdateTime(new Date());
+        lifeSaluteOrderMapper.updateLifeSaluteOrder(update);
+        return R.ok();
+    }
+
+    /**
+     * 订阅快递鸟物流推送
+     *
+     * @param order 订单信息
+     */
+    @Override
+    public void subscribeExpress(LifeSaluteOrder order) {
+        if (order == null || StringUtils.isBlank(order.getWaybillNo()) || StringUtils.isBlank(order.getDeliveryCode())) {
+            return;
+        }
+        try {
+            String lastFourNumber = getExpressLastFourNumber(order);
+            expressService.subscribeEspress(order.getOrderNo(), order.getDeliveryCode(), order.getWaybillNo(), lastFourNumber);
+            log.info("生命礼赞订单订阅快递鸟成功, 订单号: {}, 快递公司: {}, 运单号: {}", order.getOrderNo(), order.getDeliveryCode(), order.getWaybillNo());
+        } catch (Exception e) {
+            log.error("生命礼赞订单订阅快递鸟失败, 订单号: {}, 快递公司: {}, 运单号: {}", order.getOrderNo(), order.getDeliveryCode(), order.getWaybillNo(), e);
+        }
+    }
+
+    private String getExpressLastFourNumber(LifeSaluteOrder order) {
+        String phone = order.getReceiverMobile();
+        if (StringUtils.isBlank(phone)) {
+            return "";
+        }
+        if (phone.length() >= 4) {
+            return phone.substring(phone.length() - 4);
+        }
+        return "";
+    }
+}

+ 5 - 1
fs-service/src/main/resources/mapper/his/FsExternalOrderMapper.xml

@@ -38,10 +38,11 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
         <result property="updateTime"    column="update_time"    />
         <result property="extendOrderId"    column="extend_order_id"    />
         <result property="storeId"    column="store_id"    />
+        <result property="receiverPhone"    column="receiver_phone"    />
     </resultMap>
 
     <sql id="selectFsExternalOrderVo">
-        select order_id, order_code, source, user_id, user_name, user_phone, user_address, total_num, total_price, pay_price, freight_price, is_pay, pay_time, pay_type, status, delivery_code, delivery_name, delivery_sn, delivery_time, delivery_status, delivery_type, delivery_update_time, shipping_type, company_id, company_user_id, remark, external_create_time, is_sync, sync_msg, create_time, update_time, extend_order_id,store_id from fs_external_order
+        select order_id, order_code, source, user_id, user_name, user_phone, user_address, total_num, total_price, pay_price, freight_price, is_pay, pay_time, pay_type, status, delivery_code, delivery_name, delivery_sn, delivery_time, delivery_status, delivery_type, delivery_update_time, shipping_type, company_id, company_user_id, remark, external_create_time, is_sync, sync_msg, create_time, update_time, extend_order_id, store_id, receiver_phone from fs_external_order
     </sql>
 
     <select id="selectFsExternalOrderList" parameterType="FsExternalOrder" resultMap="FsExternalOrderResult">
@@ -113,6 +114,7 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
             <if test="syncMsg != null and syncMsg != ''">sync_msg,</if>
             <if test="extendOrderId !=null and extendOrderId !=''">extend_order_id,</if>
             <if test="storeId != null">store_id,</if>
+            <if test="receiverPhone != null and receiverPhone != ''">receiver_phone,</if>
             create_time
         </trim>
         <trim prefix="values (" suffix=")" suffixOverrides=",">
@@ -146,6 +148,7 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
             <if test="syncMsg != null and syncMsg != ''">#{syncMsg},</if>
             <if test="extendOrderId !=null and extendOrderId !=''">#{extendOrderId},</if>
             <if test="storeId != null">#{storeId},</if>
+            <if test="receiverPhone != null and receiverPhone != ''">#{receiverPhone},</if>
             sysdate()
         </trim>
     </insert>
@@ -183,6 +186,7 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
             <if test="syncMsg != null and syncMsg != ''">sync_msg = #{syncMsg},</if>
             <if test="extendOrderId !=null and extendOrderId !=''">extend_order_id = #{extendOrderId},</if>
             <if test="storeId != null">store_id = #{storeId},</if>
+            <if test="receiverPhone != null and receiverPhone != ''">receiver_phone = #{receiverPhone},</if>
             update_time = sysdate()
         </trim>
         where order_id = #{orderId}

+ 350 - 0
fs-service/src/main/resources/mapper/his/LifeSaluteOrderMapper.xml

@@ -0,0 +1,350 @@
+<?xml version="1.0" encoding="UTF-8" ?>
+<!DOCTYPE mapper
+PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
+"http://mybatis.org/dtd/mybatis-3-mapper.dtd">
+<mapper namespace="com.fs.his.mapper.LifeSaluteOrderMapper">
+
+    <!-- 生命礼赞订单结果映射 -->
+    <resultMap type="LifeSaluteOrder" id="LifeSaluteOrderResult">
+        <result property="id"    column="id"    />
+        <result property="companyId"    column="company_id"    />
+        <result property="companyUserId"    column="company_user_id"    />
+        <result property="orderNo"    column="order_no"    />
+        <result property="merchantOrderNo"    column="merchant_order_no"    />
+        <result property="platformOrderNo"    column="platform_order_no"    />
+        <result property="preWaybillNo"    column="pre_waybill_no"    />
+        <result property="waybillNo"    column="waybill_no"    />
+        <result property="deliveryCode"    column="delivery_code"    />
+        <result property="deliveryStatus"    column="delivery_status"    />
+        <result property="deliveryType"    column="delivery_type"    />
+        <result property="deliveryUpdateTime"    column="delivery_update_time"    />
+        <result property="prescriptionNo"    column="prescription_no"    />
+        <result property="prescriptionName"    column="prescription_name"    />
+        <result property="senderName"    column="sender_name"    />
+        <result property="senderMobile"    column="sender_mobile"    />
+        <result property="senderTel"    column="sender_tel"    />
+        <result property="senderCompany"    column="sender_company"    />
+        <result property="senderProvince"    column="sender_province"    />
+        <result property="senderCity"    column="sender_city"    />
+        <result property="senderDistrict"    column="sender_district"    />
+        <result property="senderAddress"    column="sender_address"    />
+        <result property="receiverName"    column="receiver_name"    />
+        <result property="receiverMobile"    column="receiver_mobile"    />
+        <result property="receiverTel"    column="receiver_tel"    />
+        <result property="receiverCompany"    column="receiver_company"    />
+        <result property="receiverProvince"    column="receiver_province"    />
+        <result property="receiverCity"    column="receiver_city"    />
+        <result property="receiverDistrict"    column="receiver_district"    />
+        <result property="receiverAddress"    column="receiver_address"    />
+        <result property="goodsType"    column="goods_type"    />
+        <result property="packageCount"    column="package_count"    />
+        <result property="weight"    column="weight"    />
+        <result property="length"    column="length"    />
+        <result property="width"    column="width"    />
+        <result property="height"    column="height"    />
+        <result property="temperatureType"    column="temperature_type"    />
+        <result property="expressProductType"    column="express_product_type"    />
+        <result property="pickupDate"    column="pickup_date"    />
+        <result property="pickupTime"    column="pickup_time"    />
+        <result property="warehouseCode"    column="warehouse_code"    />
+        <result property="payType"    column="pay_type"    />
+        <result property="isUploadWaybillFile"    column="is_upload_waybill_file"    />
+        <result property="isPrintWaybill"    column="is_print_waybill"    />
+        <result property="insuredAmount"    column="insured_amount"    />
+        <result property="isSignReturn"    column="is_sign_return"    />
+        <result property="codAmount"    column="cod_amount"    />
+        <result property="isJdExpress"    column="is_jd_express"    />
+        <result property="isFraudCodeCollect"    column="is_fraud_code_collect"    />
+        <result property="isOpenCheck"    column="is_open_check"    />
+        <result property="isPackService"    column="is_pack_service"    />
+        <result property="isExpressWarehouse"    column="is_express_warehouse"    />
+        <result property="isReturnBox"    column="is_return_box"    />
+        <result property="isDesignatedSign"    column="is_designated_sign"    />
+        <result property="designatedSignVerifyCode"    column="designated_sign_verify_code"    />
+        <result property="isDesignatedSignIdcard"    column="is_designated_sign_idcard"    />
+        <result property="isPackageService"    column="is_package_service"    />
+        <result property="salesChannel"    column="sales_channel"    />
+        <result property="orderAmount"    column="order_amount"    />
+        <result property="customInfo"    column="custom_info"    />
+        <result property="orderStatus"    column="order_status"    />
+        <result property="createTime"    column="create_time"    />
+        <result property="updateTime"    column="update_time"    />
+    </resultMap>
+
+    <!-- 生命礼赞订单基础查询列 -->
+    <sql id="selectLifeSaluteOrderVo">
+        select id, company_id, company_user_id, order_no, merchant_order_no, platform_order_no, pre_waybill_no, waybill_no, delivery_code,
+               delivery_status, delivery_type, delivery_update_time,
+               prescription_no, prescription_name,
+               sender_name, sender_mobile, sender_tel, sender_company, sender_province, sender_city, sender_district, sender_address,
+               receiver_name, receiver_mobile, receiver_tel, receiver_company, receiver_province, receiver_city, receiver_district, receiver_address,
+               goods_type, package_count, weight, length, width, height, temperature_type,
+               express_product_type, pickup_date, pickup_time, warehouse_code,
+               pay_type, is_upload_waybill_file, is_print_waybill, insured_amount, is_sign_return, cod_amount,
+               is_jd_express, is_fraud_code_collect, is_open_check, is_pack_service, is_express_warehouse, is_return_box,
+               is_designated_sign, designated_sign_verify_code, is_designated_sign_idcard, is_package_service,
+               sales_channel, order_amount, custom_info, order_status,
+               create_time, update_time
+        from life_salute_order
+    </sql>
+
+    <!-- 查询生命礼赞订单列表(支持多条件动态过滤) -->
+    <select id="selectLifeSaluteOrderList" parameterType="LifeSaluteOrder" resultMap="LifeSaluteOrderResult">
+        <include refid="selectLifeSaluteOrderVo"/>
+        <where>
+<!--            <if test="companyId != null"> and company_id = #{companyId}</if>-->
+<!--            <if test="companyUserId != null"> and company_user_id = #{companyUserId}</if>-->
+            <if test="orderNo != null and orderNo != ''"> and order_no = #{orderNo}</if>
+            <if test="merchantOrderNo != null and merchantOrderNo != ''"> and merchant_order_no = #{merchantOrderNo}</if>
+            <if test="platformOrderNo != null and platformOrderNo != ''"> and platform_order_no = #{platformOrderNo}</if>
+            <if test="waybillNo != null and waybillNo != ''"> and waybill_no = #{waybillNo}</if>
+            <if test="deliveryStatus != null"> and delivery_status = #{deliveryStatus}</if>
+            <if test="deliveryType != null and deliveryType != ''"> and delivery_type = #{deliveryType}</if>
+            <if test="prescriptionNo != null and prescriptionNo != ''"> and prescription_no = #{prescriptionNo}</if>
+            <if test="prescriptionName != null and prescriptionName != ''"> and prescription_name like concat('%', #{prescriptionName}, '%')</if>
+            <if test="senderName != null and senderName != ''"> and sender_name =#{senderName} </if>
+            <if test="senderMobile != null and senderMobile != ''"> and sender_mobile = #{senderMobile}</if>
+            <if test="receiverName != null and receiverName != ''"> and receiver_name like concat('%', #{receiverName}, '%')</if>
+            <if test="receiverMobile != null and receiverMobile != ''"> and receiver_mobile = #{receiverMobile}</if>
+            <if test="goodsType != null and goodsType != ''"> and goods_type = #{goodsType}</if>
+            <if test="orderStatus != null"> and order_status = #{orderStatus}</if>
+            <if test="params.createTimeStart != null and params.createTimeStart != ''"> and create_time &gt;= str_to_date(#{params.createTimeStart}, '%Y-%m-%d %H')</if>
+            <if test="params.createTimeEnd != null and params.createTimeEnd != ''"> and create_time &lt; date_add(str_to_date(#{params.createTimeEnd}, '%Y-%m-%d %H'), interval 1 hour)</if>
+        </where>
+        order by create_time desc
+    </select>
+
+    <!-- 根据主键查询生命礼赞订单 -->
+    <select id="selectLifeSaluteOrderById" parameterType="Long" resultMap="LifeSaluteOrderResult">
+        <include refid="selectLifeSaluteOrderVo"/>
+        where id = #{id}
+    </select>
+
+    <!-- 根据系统订单号查询生命礼赞订单 -->
+    <select id="selectLifeSaluteOrderByOrderNo" parameterType="String" resultMap="LifeSaluteOrderResult">
+        <include refid="selectLifeSaluteOrderVo"/>
+        where order_no = #{orderNo}
+    </select>
+
+    <!-- 根据ID列表批量查询生命礼赞订单 -->
+    <select id="selectLifeSaluteOrderByIds" resultMap="LifeSaluteOrderResult">
+        <include refid="selectLifeSaluteOrderVo"/>
+        where id in
+        <foreach collection="ids" item="id" open="(" separator="," close=")">
+            #{id}
+        </foreach>
+    </select>
+
+    <!-- 新增生命礼赞订单(动态插入,自动回填主键) -->
+    <insert id="insertLifeSaluteOrder" parameterType="LifeSaluteOrder" useGeneratedKeys="true" keyProperty="id">
+        insert into life_salute_order
+        <trim prefix="(" suffix=")" suffixOverrides=",">
+            <if test="companyId != null">company_id,</if>
+            <if test="companyUserId != null">company_user_id,</if>
+            <if test="orderNo != null and orderNo != ''">order_no,</if>
+            <if test="merchantOrderNo != null and merchantOrderNo != ''">merchant_order_no,</if>
+            <if test="platformOrderNo != null and platformOrderNo != ''">platform_order_no,</if>
+            <if test="preWaybillNo != null and preWaybillNo != ''">pre_waybill_no,</if>
+            <if test="waybillNo != null and waybillNo != ''">waybill_no,</if>
+            <if test="deliveryCode != null and deliveryCode != ''">delivery_code,</if>
+            <if test="deliveryStatus != null">delivery_status,</if>
+            <if test="deliveryType != null and deliveryType != ''">delivery_type,</if>
+            <if test="deliveryUpdateTime != null">delivery_update_time,</if>
+            <if test="prescriptionNo != null and prescriptionNo != ''">prescription_no,</if>
+            <if test="prescriptionName != null and prescriptionName != ''">prescription_name,</if>
+            <if test="senderName != null and senderName != ''">sender_name,</if>
+            <if test="senderMobile != null and senderMobile != ''">sender_mobile,</if>
+            <if test="senderTel != null and senderTel != ''">sender_tel,</if>
+            <if test="senderCompany != null and senderCompany != ''">sender_company,</if>
+            <if test="senderProvince != null and senderProvince != ''">sender_province,</if>
+            <if test="senderCity != null and senderCity != ''">sender_city,</if>
+            <if test="senderDistrict != null and senderDistrict != ''">sender_district,</if>
+            <if test="senderAddress != null and senderAddress != ''">sender_address,</if>
+            <if test="receiverName != null and receiverName != ''">receiver_name,</if>
+            <if test="receiverMobile != null and receiverMobile != ''">receiver_mobile,</if>
+            <if test="receiverTel != null and receiverTel != ''">receiver_tel,</if>
+            <if test="receiverCompany != null and receiverCompany != ''">receiver_company,</if>
+            <if test="receiverProvince != null and receiverProvince != ''">receiver_province,</if>
+            <if test="receiverCity != null and receiverCity != ''">receiver_city,</if>
+            <if test="receiverDistrict != null and receiverDistrict != ''">receiver_district,</if>
+            <if test="receiverAddress != null and receiverAddress != ''">receiver_address,</if>
+            <if test="goodsType != null and goodsType != ''">goods_type,</if>
+            <if test="packageCount != null">package_count,</if>
+            <if test="weight != null">weight,</if>
+            <if test="length != null">length,</if>
+            <if test="width != null">width,</if>
+            <if test="height != null">height,</if>
+            <if test="temperatureType != null">temperature_type,</if>
+            <if test="expressProductType != null and expressProductType != ''">express_product_type,</if>
+            <if test="pickupDate != null">pickup_date,</if>
+            <if test="pickupTime != null and pickupTime != ''">pickup_time,</if>
+            <if test="warehouseCode != null and warehouseCode != ''">warehouse_code,</if>
+            <if test="payType != null and payType != ''">pay_type,</if>
+            <if test="isUploadWaybillFile != null">is_upload_waybill_file,</if>
+            <if test="isPrintWaybill != null">is_print_waybill,</if>
+            <if test="insuredAmount != null">insured_amount,</if>
+            <if test="isSignReturn != null">is_sign_return,</if>
+            <if test="codAmount != null">cod_amount,</if>
+            <if test="isJdExpress != null">is_jd_express,</if>
+            <if test="isFraudCodeCollect != null">is_fraud_code_collect,</if>
+            <if test="isOpenCheck != null">is_open_check,</if>
+            <if test="isPackService != null">is_pack_service,</if>
+            <if test="isExpressWarehouse != null">is_express_warehouse,</if>
+            <if test="isReturnBox != null">is_return_box,</if>
+            <if test="isDesignatedSign != null">is_designated_sign,</if>
+            <if test="designatedSignVerifyCode != null and designatedSignVerifyCode != ''">designated_sign_verify_code,</if>
+            <if test="isDesignatedSignIdcard != null and isDesignatedSignIdcard != ''">is_designated_sign_idcard,</if>
+            <if test="isPackageService != null">is_package_service,</if>
+            <if test="salesChannel != null and salesChannel != ''">sales_channel,</if>
+            <if test="orderAmount != null">order_amount,</if>
+            <if test="customInfo != null and customInfo != ''">custom_info,</if>
+            <if test="orderStatus != null">order_status,</if>
+            create_time
+        </trim>
+        <trim prefix="values (" suffix=")" suffixOverrides=",">
+            <if test="companyId != null">#{companyId},</if>
+            <if test="companyUserId != null">#{companyUserId},</if>
+            <if test="orderNo != null and orderNo != ''">#{orderNo},</if>
+            <if test="merchantOrderNo != null and merchantOrderNo != ''">#{merchantOrderNo},</if>
+            <if test="platformOrderNo != null and platformOrderNo != ''">#{platformOrderNo},</if>
+            <if test="preWaybillNo != null and preWaybillNo != ''">#{preWaybillNo},</if>
+            <if test="waybillNo != null and waybillNo != ''">#{waybillNo},</if>
+            <if test="deliveryCode != null and deliveryCode != ''">#{deliveryCode},</if>
+            <if test="deliveryStatus != null">#{deliveryStatus},</if>
+            <if test="deliveryType != null and deliveryType != ''">#{deliveryType},</if>
+            <if test="deliveryUpdateTime != null">#{deliveryUpdateTime},</if>
+            <if test="prescriptionNo != null and prescriptionNo != ''">#{prescriptionNo},</if>
+            <if test="prescriptionName != null and prescriptionName != ''">#{prescriptionName},</if>
+            <if test="senderName != null and senderName != ''">#{senderName},</if>
+            <if test="senderMobile != null and senderMobile != ''">#{senderMobile},</if>
+            <if test="senderTel != null and senderTel != ''">#{senderTel},</if>
+            <if test="senderCompany != null and senderCompany != ''">#{senderCompany},</if>
+            <if test="senderProvince != null and senderProvince != ''">#{senderProvince},</if>
+            <if test="senderCity != null and senderCity != ''">#{senderCity},</if>
+            <if test="senderDistrict != null and senderDistrict != ''">#{senderDistrict},</if>
+            <if test="senderAddress != null and senderAddress != ''">#{senderAddress},</if>
+            <if test="receiverName != null and receiverName != ''">#{receiverName},</if>
+            <if test="receiverMobile != null and receiverMobile != ''">#{receiverMobile},</if>
+            <if test="receiverTel != null and receiverTel != ''">#{receiverTel},</if>
+            <if test="receiverCompany != null and receiverCompany != ''">#{receiverCompany},</if>
+            <if test="receiverProvince != null and receiverProvince != ''">#{receiverProvince},</if>
+            <if test="receiverCity != null and receiverCity != ''">#{receiverCity},</if>
+            <if test="receiverDistrict != null and receiverDistrict != ''">#{receiverDistrict},</if>
+            <if test="receiverAddress != null and receiverAddress != ''">#{receiverAddress},</if>
+            <if test="goodsType != null and goodsType != ''">#{goodsType},</if>
+            <if test="packageCount != null">#{packageCount},</if>
+            <if test="weight != null">#{weight},</if>
+            <if test="length != null">#{length},</if>
+            <if test="width != null">#{width},</if>
+            <if test="height != null">#{height},</if>
+            <if test="temperatureType != null">#{temperatureType},</if>
+            <if test="expressProductType != null and expressProductType != ''">#{expressProductType},</if>
+            <if test="pickupDate != null">#{pickupDate},</if>
+            <if test="pickupTime != null and pickupTime != ''">#{pickupTime},</if>
+            <if test="warehouseCode != null and warehouseCode != ''">#{warehouseCode},</if>
+            <if test="payType != null and payType != ''">#{payType},</if>
+            <if test="isUploadWaybillFile != null">#{isUploadWaybillFile},</if>
+            <if test="isPrintWaybill != null">#{isPrintWaybill},</if>
+            <if test="insuredAmount != null">#{insuredAmount},</if>
+            <if test="isSignReturn != null">#{isSignReturn},</if>
+            <if test="codAmount != null">#{codAmount},</if>
+            <if test="isJdExpress != null">#{isJdExpress},</if>
+            <if test="isFraudCodeCollect != null">#{isFraudCodeCollect},</if>
+            <if test="isOpenCheck != null">#{isOpenCheck},</if>
+            <if test="isPackService != null">#{isPackService},</if>
+            <if test="isExpressWarehouse != null">#{isExpressWarehouse},</if>
+            <if test="isReturnBox != null">#{isReturnBox},</if>
+            <if test="isDesignatedSign != null">#{isDesignatedSign},</if>
+            <if test="designatedSignVerifyCode != null and designatedSignVerifyCode != ''">#{designatedSignVerifyCode},</if>
+            <if test="isDesignatedSignIdcard != null and isDesignatedSignIdcard != ''">#{isDesignatedSignIdcard},</if>
+            <if test="isPackageService != null">#{isPackageService},</if>
+            <if test="salesChannel != null and salesChannel != ''">#{salesChannel},</if>
+            <if test="orderAmount != null">#{orderAmount},</if>
+            <if test="customInfo != null and customInfo != ''">#{customInfo},</if>
+            <if test="orderStatus != null">#{orderStatus},</if>
+            sysdate()
+        </trim>
+    </insert>
+
+    <!-- 修改生命礼赞订单(动态更新非空字段) -->
+    <update id="updateLifeSaluteOrder" parameterType="LifeSaluteOrder">
+        update life_salute_order
+        <trim prefix="SET" suffixOverrides=",">
+            <if test="companyId != null">company_id = #{companyId},</if>
+            <if test="companyUserId != null">company_user_id = #{companyUserId},</if>
+            <if test="orderNo != null and orderNo != ''">order_no = #{orderNo},</if>
+            <if test="merchantOrderNo != null and merchantOrderNo != ''">merchant_order_no = #{merchantOrderNo},</if>
+            <if test="platformOrderNo != null and platformOrderNo != ''">platform_order_no = #{platformOrderNo},</if>
+            <if test="preWaybillNo != null and preWaybillNo != ''">pre_waybill_no = #{preWaybillNo},</if>
+            <if test="waybillNo != null and waybillNo != ''">waybill_no = #{waybillNo},</if>
+            <if test="deliveryCode != null and deliveryCode != ''">delivery_code = #{deliveryCode},</if>
+            <if test="deliveryStatus != null">delivery_status = #{deliveryStatus},</if>
+            <if test="deliveryType != null and deliveryType != ''">delivery_type = #{deliveryType},</if>
+            <if test="deliveryUpdateTime != null">delivery_update_time = #{deliveryUpdateTime},</if>
+            <if test="prescriptionNo != null and prescriptionNo != ''">prescription_no = #{prescriptionNo},</if>
+            <if test="prescriptionName != null and prescriptionName != ''">prescription_name = #{prescriptionName},</if>
+            <if test="senderName != null and senderName != ''">sender_name = #{senderName},</if>
+            <if test="senderMobile != null and senderMobile != ''">sender_mobile = #{senderMobile},</if>
+            <if test="senderTel != null and senderTel != ''">sender_tel = #{senderTel},</if>
+            <if test="senderCompany != null and senderCompany != ''">sender_company = #{senderCompany},</if>
+            <if test="senderProvince != null and senderProvince != ''">sender_province = #{senderProvince},</if>
+            <if test="senderCity != null and senderCity != ''">sender_city = #{senderCity},</if>
+            <if test="senderDistrict != null and senderDistrict != ''">sender_district = #{senderDistrict},</if>
+            <if test="senderAddress != null and senderAddress != ''">sender_address = #{senderAddress},</if>
+            <if test="receiverName != null and receiverName != ''">receiver_name = #{receiverName},</if>
+            <if test="receiverMobile != null and receiverMobile != ''">receiver_mobile = #{receiverMobile},</if>
+            <if test="receiverTel != null and receiverTel != ''">receiver_tel = #{receiverTel},</if>
+            <if test="receiverCompany != null and receiverCompany != ''">receiver_company = #{receiverCompany},</if>
+            <if test="receiverProvince != null and receiverProvince != ''">receiver_province = #{receiverProvince},</if>
+            <if test="receiverCity != null and receiverCity != ''">receiver_city = #{receiverCity},</if>
+            <if test="receiverDistrict != null and receiverDistrict != ''">receiver_district = #{receiverDistrict},</if>
+            <if test="receiverAddress != null and receiverAddress != ''">receiver_address = #{receiverAddress},</if>
+            <if test="goodsType != null and goodsType != ''">goods_type = #{goodsType},</if>
+            <if test="packageCount != null">package_count = #{packageCount},</if>
+            <if test="weight != null">weight = #{weight},</if>
+            <if test="length != null">length = #{length},</if>
+            <if test="width != null">width = #{width},</if>
+            <if test="height != null">height = #{height},</if>
+            <if test="temperatureType != null">temperature_type = #{temperatureType},</if>
+            <if test="expressProductType != null and expressProductType != ''">express_product_type = #{expressProductType},</if>
+            <if test="pickupDate != null">pickup_date = #{pickupDate},</if>
+            <if test="pickupTime != null and pickupTime != ''">pickup_time = #{pickupTime},</if>
+            <if test="warehouseCode != null and warehouseCode != ''">warehouse_code = #{warehouseCode},</if>
+            <if test="payType != null and payType != ''">pay_type = #{payType},</if>
+            <if test="isUploadWaybillFile != null">is_upload_waybill_file = #{isUploadWaybillFile},</if>
+            <if test="isPrintWaybill != null">is_print_waybill = #{isPrintWaybill},</if>
+            <if test="insuredAmount != null">insured_amount = #{insuredAmount},</if>
+            <if test="isSignReturn != null">is_sign_return = #{isSignReturn},</if>
+            <if test="codAmount != null">cod_amount = #{codAmount},</if>
+            <if test="isJdExpress != null">is_jd_express = #{isJdExpress},</if>
+            <if test="isFraudCodeCollect != null">is_fraud_code_collect = #{isFraudCodeCollect},</if>
+            <if test="isOpenCheck != null">is_open_check = #{isOpenCheck},</if>
+            <if test="isPackService != null">is_pack_service = #{isPackService},</if>
+            <if test="isExpressWarehouse != null">is_express_warehouse = #{isExpressWarehouse},</if>
+            <if test="isReturnBox != null">is_return_box = #{isReturnBox},</if>
+            <if test="isDesignatedSign != null">is_designated_sign = #{isDesignatedSign},</if>
+            <if test="designatedSignVerifyCode != null and designatedSignVerifyCode != ''">designated_sign_verify_code = #{designatedSignVerifyCode},</if>
+            <if test="isDesignatedSignIdcard != null and isDesignatedSignIdcard != ''">is_designated_sign_idcard = #{isDesignatedSignIdcard},</if>
+            <if test="isPackageService != null">is_package_service = #{isPackageService},</if>
+            <if test="salesChannel != null and salesChannel != ''">sales_channel = #{salesChannel},</if>
+            <if test="orderAmount != null">order_amount = #{orderAmount},</if>
+            <if test="customInfo != null and customInfo != ''">custom_info = #{customInfo},</if>
+            <if test="orderStatus != null">order_status = #{orderStatus},</if>
+            update_time = sysdate()
+        </trim>
+        where id = #{id}
+    </update>
+
+    <!-- 根据主键删除生命礼赞订单 -->
+    <delete id="deleteLifeSaluteOrderById" parameterType="Long">
+        delete from life_salute_order where id = #{id}
+    </delete>
+
+    <!-- 批量删除生命礼赞订单 -->
+    <delete id="deleteLifeSaluteOrderByIds" parameterType="String">
+        delete from life_salute_order where id in
+        <foreach item="id" collection="array" open="(" separator="," close=")">
+            #{id}
+        </foreach>
+    </delete>
+</mapper>