From 51f46a63520a4a26f98c060aa212927e039505a9 Mon Sep 17 00:00:00 2001 From: wyq Date: Wed, 16 Apr 2025 15:31:49 +0800 Subject: [PATCH] 1 --- .../common/model/XsOrderDeliveryInfo.java | 138 +++++++++++++++++ .../common/request/ApplyInvoicingReq.java | 54 +++++++ .../common/request/OrderCancelRefund.java | 36 +++++ .../common/request/RefundExpressUpdate.java | 21 +++ .../StoreOrderDetailInfoResponse.java | 19 +++ .../response/StoreOrderInfoResponse.java | 23 ++- crmeb-front/pom.xml | 5 + .../controller/StoreOrderController.java | 47 +++++- .../com/zbkj/front/util/ContentCheckUtil.java | 64 ++++++++ .../java/com/zbkj/service/dao/XsbuyDao.java | 5 + .../zbkj/service/service/OrderService.java | 4 +- .../service/impl/OrderServiceImpl.java | 140 +++++++++++++++++- .../service/impl/StoreOrderServiceImpl.java | 14 +- .../mapper/store/XsSkuInfoMapper.xml | 6 + 14 files changed, 567 insertions(+), 9 deletions(-) create mode 100644 crmeb-common/src/main/java/com/zbkj/common/model/XsOrderDeliveryInfo.java create mode 100644 crmeb-common/src/main/java/com/zbkj/common/request/ApplyInvoicingReq.java create mode 100644 crmeb-common/src/main/java/com/zbkj/common/request/OrderCancelRefund.java create mode 100644 crmeb-common/src/main/java/com/zbkj/common/request/RefundExpressUpdate.java create mode 100644 crmeb-front/src/main/java/com/zbkj/front/util/ContentCheckUtil.java diff --git a/crmeb-common/src/main/java/com/zbkj/common/model/XsOrderDeliveryInfo.java b/crmeb-common/src/main/java/com/zbkj/common/model/XsOrderDeliveryInfo.java new file mode 100644 index 0000000..8aecf35 --- /dev/null +++ b/crmeb-common/src/main/java/com/zbkj/common/model/XsOrderDeliveryInfo.java @@ -0,0 +1,138 @@ +package com.zbkj.common.model; + +import lombok.Data; + +import java.time.LocalDateTime; + +/** + * @author wyq + */ +@Data +public class XsOrderDeliveryInfo { + // 主键,自增 + + private int id; + + // 订单id + + private int orderId; + + // erp单号,默认为空字符串 + + private String erpCode; + + // 平台单号 + + private String platformCode; + + // 发货单号,默认为空字符串 + + private String code; + + // 发货状态0未发货2全部发货,默认为0 + private byte deliveryStatus; + + // 仓库名称 + + private String warehouseCode; + + // 串码 + + private String uniqueCodes; + + // 仓库代码 + + private String warehouseName; + + // 快递名称 + + private String expressName; + + // 快递代码 + + private String expressCode; + + // 快递号 + + private String expressNo; + + // 创建时间 + + private LocalDateTime createdAt; + + // 更新时间 + + private LocalDateTime updatedAt; + + // 删除时间 + + private LocalDateTime deletedAt; + + // 是否删除,默认为0 + private Integer isDel; + + // 物流信息 + + private String expressInfo; + + // 订阅状态 0未订阅 1已订阅 2聚链系统订阅 + private Integer hasSub; + + // 商品代码, 分割,默认为空字符串 + + private String goodCode; + + // 订阅错误信息 + + private String subErr; + + // 配货时间 + + private LocalDateTime assignAt; + + // 是否配货逾期0否1是,默认为0 + private Integer isAssignOverdue; + + // 配货到期时间 + + private LocalDateTime assignExpireDate; + + // 仓库发货时间 + + private LocalDateTime deliveryAt; + + // 是否发货逾期0否1是,默认为0 + private byte isDeliveryOverdue; + + // 发货到期时间 + + private LocalDateTime deliveryExpireDate; + + // 揽件时间 + + private LocalDateTime pickupAt; + + // 是否揽件逾期0否1是,默认为0 + private byte isPickupOverdue; + + // 揽件到期时间 + + private LocalDateTime pickupExpireDate; + + // 签收时间 + + private LocalDateTime deliveryReceiptAt; + + // 发货数量,默认为0 + private short deliveryNum; + + // 发货方式 1自有仓发货 2聚链代发3由你代发4线下代发,默认为1 + private byte deliveryType; + + // 查询物流次数,默认为0 + private int queryExpressTime; + + // 最后查询物流时间 + + private LocalDateTime queryExpressDate; +} diff --git a/crmeb-common/src/main/java/com/zbkj/common/request/ApplyInvoicingReq.java b/crmeb-common/src/main/java/com/zbkj/common/request/ApplyInvoicingReq.java new file mode 100644 index 0000000..1dc0b8a --- /dev/null +++ b/crmeb-common/src/main/java/com/zbkj/common/request/ApplyInvoicingReq.java @@ -0,0 +1,54 @@ +package com.zbkj.common.request; + +import io.swagger.annotations.ApiModel; +import io.swagger.annotations.ApiModelProperty; +import lombok.Data; +import lombok.EqualsAndHashCode; +import lombok.experimental.Accessors; +import org.hibernate.validator.constraints.Range; + +import javax.validation.constraints.NotBlank; +import javax.validation.constraints.NotNull; +import java.io.Serializable; + +/** + * 创建订单请求对象 + * +---------------------------------------------------------------------- + * | CRMEB [ CRMEB赋能开发者,助力企业发展 ] + * +---------------------------------------------------------------------- + * | Copyright (c) 2016~2023 https://www.crmeb.com All rights reserved. + * +---------------------------------------------------------------------- + * | Licensed CRMEB并不是自由软件,未经许可不能去掉CRMEB相关版权 + * +---------------------------------------------------------------------- + * | Author: CRMEB Team + * +---------------------------------------------------------------------- + */ +@Data +@EqualsAndHashCode(callSuper = false) +@Accessors(chain = true) +@ApiModel(value="ApplyInvoicingReq", description="请求开票") +public class ApplyInvoicingReq implements Serializable { + + private static final long serialVersionUID = -6133994384851333872L; + + @ApiModelProperty(value = "订单号") + @NotBlank(message = "订单号不可为空") + private String platformCode; + + @ApiModelProperty(value = "抬头类型: 0 个人 1公司") + @NotNull(message = "抬头类型不能为空") + @Range(min = 0, max = 1, message = "抬头类型有误") + private Integer invoiceTitleType; + + @ApiModelProperty(value = "抬头名称 填个人名/公司抬头") + @NotBlank(message = "抬头名称不能为空") + private String invoiceTitleName; + + @ApiModelProperty(value = "单位税号") + private String invoiceTitleNo; + @ApiModelProperty(value = "开票手机号") + private String invoiceingPhone; + @ApiModelProperty(value = "开票邮箱") + private String invoiceingEmail; + +} diff --git a/crmeb-common/src/main/java/com/zbkj/common/request/OrderCancelRefund.java b/crmeb-common/src/main/java/com/zbkj/common/request/OrderCancelRefund.java new file mode 100644 index 0000000..7e20960 --- /dev/null +++ b/crmeb-common/src/main/java/com/zbkj/common/request/OrderCancelRefund.java @@ -0,0 +1,36 @@ +package com.zbkj.common.request; + +import io.swagger.annotations.ApiModel; +import io.swagger.annotations.ApiModelProperty; +import lombok.Data; +import lombok.EqualsAndHashCode; +import lombok.experimental.Accessors; + +import javax.validation.constraints.NotNull; + +/** + * 添加购物车参数Request对象 + * +---------------------------------------------------------------------- + * | CRMEB [ CRMEB赋能开发者,助力企业发展 ] + * +---------------------------------------------------------------------- + * | Copyright (c) 2016~2023 https://www.crmeb.com All rights reserved. + * +---------------------------------------------------------------------- + * | Licensed CRMEB并不是自由软件,未经许可不能去掉CRMEB相关版权 + * +---------------------------------------------------------------------- + * | Author: CRMEB Team + * +---------------------------------------------------------------------- + */ +@Data +@EqualsAndHashCode(callSuper = false) +@Accessors(chain = true) +@ApiModel(value="OrderRefundApplyRequest对象", description="订单申请退款") +public class OrderCancelRefund { + private static final long serialVersionUID=1L; + + @ApiModelProperty(value = "备注说明") + private String explain; + + @ApiModelProperty(value = "待退款订单") + @NotNull(message = "待退款订单 不能为空") + private String orderNo; +} diff --git a/crmeb-common/src/main/java/com/zbkj/common/request/RefundExpressUpdate.java b/crmeb-common/src/main/java/com/zbkj/common/request/RefundExpressUpdate.java new file mode 100644 index 0000000..0fe68a6 --- /dev/null +++ b/crmeb-common/src/main/java/com/zbkj/common/request/RefundExpressUpdate.java @@ -0,0 +1,21 @@ +package com.zbkj.common.request; + +import io.swagger.annotations.ApiModel; +import io.swagger.annotations.ApiModelProperty; +import lombok.Data; + +/** + * @author wyq + */ +@Data +@ApiModel("更新退货物流") +public class RefundExpressUpdate { + @ApiModelProperty(value = "订单编号") + private String orderNo; + @ApiModelProperty(value = "退货物流单号") + private String refundExpressNo; + @ApiModelProperty(value = "退货物流公司编码") + private String refundExpressCode; + @ApiModelProperty(value = "退货物流公司") + private String refundExpressName; +} diff --git a/crmeb-common/src/main/java/com/zbkj/common/response/StoreOrderDetailInfoResponse.java b/crmeb-common/src/main/java/com/zbkj/common/response/StoreOrderDetailInfoResponse.java index 4c4ffb9..cfa689d 100644 --- a/crmeb-common/src/main/java/com/zbkj/common/response/StoreOrderDetailInfoResponse.java +++ b/crmeb-common/src/main/java/com/zbkj/common/response/StoreOrderDetailInfoResponse.java @@ -1,5 +1,6 @@ package com.zbkj.common.response; +import com.zbkj.common.model.parcel.ParcelPO; import com.zbkj.common.model.system.SystemStore; import io.swagger.annotations.ApiModel; import io.swagger.annotations.ApiModelProperty; @@ -32,6 +33,24 @@ public class StoreOrderDetailInfoResponse implements Serializable { private static final long serialVersionUID = -4324222121352855551L; + private String afterSalesType; + + private String afterSalesStatus; + @ApiModelProperty(value = "开票手机号") + private String invoiceingPhone; + @ApiModelProperty(value = "开票邮箱") + private String invoiceingEmail; + @ApiModelProperty(value = "商家寄件快递公司编码") + private String refundExpressCode; + @ApiModelProperty(value = "商家寄件快递公司名称") + private String refundExpressName; + @ApiModelProperty(value = "多包裹") + private List parcelList; + @ApiModelProperty(value = "商家寄件快递单号") + private String refundExpressNo; + + @ApiModelProperty(value = "退款申请是否通过 0 否 1 是 3 发起申请初始状态") + private Integer refundRequestStatus; @ApiModelProperty(value = "订单ID") private Integer id; diff --git a/crmeb-common/src/main/java/com/zbkj/common/response/StoreOrderInfoResponse.java b/crmeb-common/src/main/java/com/zbkj/common/response/StoreOrderInfoResponse.java index df1439e..e1bcda3 100644 --- a/crmeb-common/src/main/java/com/zbkj/common/response/StoreOrderInfoResponse.java +++ b/crmeb-common/src/main/java/com/zbkj/common/response/StoreOrderInfoResponse.java @@ -1,5 +1,7 @@ package com.zbkj.common.response; +import com.fasterxml.jackson.annotation.JsonFormat; +import com.zbkj.common.model.parcel.ParcelPO; import com.zbkj.common.vo.StoreOrderInfoOldVo; import com.zbkj.common.model.system.SystemStore; import io.swagger.annotations.ApiModel; @@ -10,6 +12,7 @@ import lombok.experimental.Accessors; import java.io.Serializable; import java.math.BigDecimal; +import java.time.LocalDateTime; import java.util.Date; import java.util.List; import java.util.Map; @@ -36,7 +39,25 @@ public class StoreOrderInfoResponse implements Serializable { @ApiModelProperty(value = "订单ID") private Integer id; - + @ApiModelProperty(value = "售后状态") + private String afterSalesStatus; + @ApiModelProperty(value = "售后类型") + private String afterSalesType; + + @ApiModelProperty(value = "退款原因") + private String refundReasonWap; + @ApiModelProperty(value = "退货物流名") + private String refundExpressName; + @ApiModelProperty(value = "退货物流单号") + private String refundExpressNo; + @ApiModelProperty(value = "包裹集合") + private List parcelList; + @ApiModelProperty(value = "回寄包裹时间") + @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss") + private LocalDateTime refundExpressTime; + + @ApiModelProperty(value = "退款用户说明") + private String refundReasonWapExplain; @ApiModelProperty(value = "订单号") private String orderId; diff --git a/crmeb-front/pom.xml b/crmeb-front/pom.xml index d907eda..c910ca3 100644 --- a/crmeb-front/pom.xml +++ b/crmeb-front/pom.xml @@ -22,6 +22,11 @@ crmeb-service ${crmeb-service} + + com.aliyun + green20220302 + 2.2.8 + diff --git a/crmeb-front/src/main/java/com/zbkj/front/controller/StoreOrderController.java b/crmeb-front/src/main/java/com/zbkj/front/controller/StoreOrderController.java index 9c81c5e..782f6e6 100644 --- a/crmeb-front/src/main/java/com/zbkj/front/controller/StoreOrderController.java +++ b/crmeb-front/src/main/java/com/zbkj/front/controller/StoreOrderController.java @@ -4,13 +4,16 @@ import com.zbkj.common.page.CommonPage; import com.zbkj.common.request.*; import com.zbkj.common.response.*; import com.zbkj.common.result.CommonResult; +import com.zbkj.front.util.ContentCheckUtil; import com.zbkj.service.service.OrderService; import io.swagger.annotations.Api; import io.swagger.annotations.ApiImplicitParam; import io.swagger.annotations.ApiImplicitParams; import io.swagger.annotations.ApiOperation; import lombok.extern.slf4j.Slf4j; +import org.apache.commons.lang3.StringUtils; import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.beans.factory.annotation.Value; import org.springframework.validation.annotation.Validated; import org.springframework.web.bind.annotation.*; @@ -37,7 +40,10 @@ public class StoreOrderController { @Autowired private OrderService orderService; - + @Value("${alis.accessKey}") + private String accessKey; + @Value("${alis.accessKeySecret}") + private String accessKeySecret; /** * 预下单 */ @@ -125,7 +131,16 @@ public class StoreOrderController { return CommonResult.failed(); } } + /** + * 更新退货物流 + */ + @ApiOperation(value = "更新退货物流") + @RequestMapping(value = "/updateRefundExpress", method = RequestMethod.POST) + public CommonResult updateRefundExpress(@RequestBody @Validated RefundExpressUpdate request) { + orderService.updateRefundExpress(request); + return CommonResult.success(""); + } /** * 订单评价 * @param request StoreProductReplyAddRequest 评论参数 @@ -133,13 +148,31 @@ public class StoreOrderController { @ApiOperation(value = "评价订单") @RequestMapping(value = "/comment", method = RequestMethod.POST) public CommonResult comment(@RequestBody @Validated StoreProductReplyAddRequest request) { + if(StringUtils.isNotEmpty(request.getComment())){ + String result= ContentCheckUtil.checkContent(request.getComment(),accessKey,accessKeySecret); + if(result!=null){ + return CommonResult.failed(result); + } + } if(orderService.reply(request)) { return CommonResult.success(); }else{ return CommonResult.failed(); } } - + /** + * 取消售后 + * @param request OrderRefundApplyRequest 订单id + */ + @ApiOperation(value = "取消售后") + @RequestMapping(value = "/cancelRefund", method = RequestMethod.POST) + public CommonResult cancelRefund(@RequestBody @Validated OrderCancelRefund request) { + if(orderService.cancelRefund(request)) { + return CommonResult.success(); + }else{ + return CommonResult.failed(); + } + } /** * 订单收货 * @param id Integer 订单id @@ -153,7 +186,15 @@ public class StoreOrderController { return CommonResult.failed(); } } - + /** + * 申请开票 + * @param request + */ + @ApiOperation(value = "申请开票") + @RequestMapping(value = "/applyInvoicing", method = RequestMethod.POST) + public CommonResult applyInvoicing(@Validated @RequestBody ApplyInvoicingReq request) { + return CommonResult.success(orderService.applyInvoicing(request)); + } /** * 订单取消 * @param id Integer 订单id diff --git a/crmeb-front/src/main/java/com/zbkj/front/util/ContentCheckUtil.java b/crmeb-front/src/main/java/com/zbkj/front/util/ContentCheckUtil.java new file mode 100644 index 0000000..6b07369 --- /dev/null +++ b/crmeb-front/src/main/java/com/zbkj/front/util/ContentCheckUtil.java @@ -0,0 +1,64 @@ +package com.zbkj.front.util; + +import com.alibaba.fastjson.JSON; +import com.alibaba.fastjson.JSONObject; +import com.aliyun.green20220302.Client; +import com.aliyun.green20220302.models.TextModerationRequest; +import com.aliyun.green20220302.models.TextModerationResponse; +import com.aliyun.green20220302.models.TextModerationResponseBody; +import com.aliyun.teaopenapi.models.Config; +import lombok.extern.slf4j.Slf4j; +import org.apache.commons.lang3.StringUtils; + +@Slf4j +public class ContentCheckUtil { + + public static Client createClient(String accessKey, String accessKeySecret) throws Exception { + Config config = new Config(); + config.setAccessKeyId(accessKey) + .setAccessKeySecret(accessKeySecret) + .setRegionId("cn-shanghai") + .setEndpoint("green-cip.cn-shanghai.aliyuncs.com") + .setReadTimeout(6000) + //读取时超时时间,单位毫秒(ms)。 + .setConnectTimeout(3000); + return new Client(config); + } + + public static void main(String[] args) { + System.out.println(checkContent("中国很垃圾","LTAI5tRHmAmcSo3ytLajCLyK","k3dhdkIa2eG8Q5hTGpyspVB0Aeo7SV")); + } + + public static String checkContent(String content, String accessKey, String accessKeySecret) { + try { + Client client = ContentCheckUtil.createClient(accessKey, accessKeySecret); + JSONObject serviceParameters = new JSONObject(); + serviceParameters.put("content", content); + + TextModerationRequest textModerationPlusRequest = new TextModerationRequest(); + // 检测类型 + textModerationPlusRequest.setService("comment_detection"); + textModerationPlusRequest.setServiceParameters(serviceParameters.toJSONString()); + TextModerationResponse response = client.textModeration(textModerationPlusRequest); + if (response.getStatusCode() == 200) { + TextModerationResponseBody result = response.getBody(); + log.info(JSON.toJSONString(result)); + Integer code = result.getCode(); + if (200 == code) { + TextModerationResponseBody.TextModerationResponseBodyData data = result.getData(); + if(StringUtils.isEmpty(data.getLabels())){ + return null; + }else{ + return "评论文字中存在不合法描述"; + } + } + } + return "系统繁忙,请稍后重试"; + } catch (Exception e) { + log.error("调用校验内容异常:",e); + return "系统繁忙,请稍后重试"; + } + } + + +} diff --git a/crmeb-service/src/main/java/com/zbkj/service/dao/XsbuyDao.java b/crmeb-service/src/main/java/com/zbkj/service/dao/XsbuyDao.java index ea0a8ea..93b32e1 100644 --- a/crmeb-service/src/main/java/com/zbkj/service/dao/XsbuyDao.java +++ b/crmeb-service/src/main/java/com/zbkj/service/dao/XsbuyDao.java @@ -1,5 +1,6 @@ package com.zbkj.service.dao; +import com.zbkj.common.model.XsOrderDeliveryInfo; import com.zbkj.service.pojo.XsSkuInfo; import org.apache.ibatis.annotations.Param; @@ -10,6 +11,10 @@ import java.util.List; */ public interface XsbuyDao { List selectListNew(@Param("content") String content,@Param("pageIndex") long l,@Param("pageSize") Long pageSize); + + XsSkuInfo selectBySkuNo (@Param("skuNo") String skuNo); + List selectBySkuNos (@Param("list") List skuNo); + List selectExpress(String platformCode); } diff --git a/crmeb-service/src/main/java/com/zbkj/service/service/OrderService.java b/crmeb-service/src/main/java/com/zbkj/service/service/OrderService.java index c248461..1cb9dd5 100644 --- a/crmeb-service/src/main/java/com/zbkj/service/service/OrderService.java +++ b/crmeb-service/src/main/java/com/zbkj/service/service/OrderService.java @@ -20,7 +20,9 @@ import java.util.List; * +---------------------------------------------------------------------- */ public interface OrderService { - + void updateRefundExpress(RefundExpressUpdate request); + boolean cancelRefund(OrderCancelRefund request); + boolean applyInvoicing(ApplyInvoicingReq request); /** * 订单列表 * @param type 类型 diff --git a/crmeb-service/src/main/java/com/zbkj/service/service/impl/OrderServiceImpl.java b/crmeb-service/src/main/java/com/zbkj/service/service/impl/OrderServiceImpl.java index 90e74d1..556e65c 100644 --- a/crmeb-service/src/main/java/com/zbkj/service/service/impl/OrderServiceImpl.java +++ b/crmeb-service/src/main/java/com/zbkj/service/service/impl/OrderServiceImpl.java @@ -6,8 +6,10 @@ import cn.hutool.core.util.ObjectUtil; import cn.hutool.core.util.StrUtil; import com.alibaba.fastjson.JSON; import com.alibaba.fastjson.JSONObject; +import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; import com.zbkj.common.constants.*; import com.zbkj.common.exception.CrmebException; +import com.zbkj.common.model.XsOrderDeliveryInfo; import com.zbkj.common.model.bargain.StoreBargain; import com.zbkj.common.model.bargain.StoreBargainUser; import com.zbkj.common.model.cat.StoreCart; @@ -21,6 +23,7 @@ import com.zbkj.common.model.express.ShippingTemplatesRegion; import com.zbkj.common.model.order.StoreOrder; import com.zbkj.common.model.order.StoreOrderInfo; import com.zbkj.common.model.order.StoreOrderStatus; +import com.zbkj.common.model.parcel.ParcelPO; import com.zbkj.common.model.product.StoreProduct; import com.zbkj.common.model.product.StoreProductAttrValue; import com.zbkj.common.model.seckill.StoreSeckill; @@ -41,24 +44,33 @@ import com.zbkj.common.response.*; import com.zbkj.common.utils.CrmebUtil; import com.zbkj.common.utils.CrmebDateUtil; import com.zbkj.common.utils.RedisUtil; +import com.zbkj.common.utils.RestTemplateUtil; import com.zbkj.common.vo.*; +import com.zbkj.service.dao.ParcelDao; +import com.zbkj.service.dao.XsbuyDao; import com.zbkj.service.delete.OrderUtils; +import com.zbkj.service.pojo.WebResponse; import com.zbkj.service.service.*; import com.zbkj.service.util.RedisLockUtil; +import lombok.extern.slf4j.Slf4j; import org.apache.commons.lang3.StringEscapeUtils; import org.apache.commons.lang3.StringUtils; import org.slf4j.Logger; import org.slf4j.LoggerFactory; import org.springframework.beans.BeanUtils; import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.beans.factory.annotation.Value; import org.springframework.scheduling.annotation.Async; import org.springframework.stereotype.Service; import org.springframework.transaction.annotation.Transactional; import org.springframework.transaction.support.TransactionTemplate; +import javax.annotation.Resource; import java.math.BigDecimal; +import java.time.LocalDateTime; import java.util.*; import java.util.concurrent.TimeUnit; +import java.util.function.Function; import java.util.stream.Collectors; /** @@ -74,10 +86,12 @@ import java.util.stream.Collectors; * +---------------------------------------------------------------------- */ @Service +@Slf4j public class OrderServiceImpl implements OrderService { private final Logger logger = LoggerFactory.getLogger(OrderServiceImpl.class); - + @Value("${ruoyi.applyInvoicingUrl}") + private String applyInvoicingUrl; @Autowired private UserService userService; @@ -108,10 +122,14 @@ public class OrderServiceImpl implements OrderService { private RedisLockUtil redisLock; @Autowired private RedisUtil redisUtil; - + @Resource + private RestTemplateUtil restTemplateUtil; + @Autowired + private ParcelDao parcelDao; @Autowired private SystemStoreService systemStoreService; - + @Autowired + private XsbuyDao xsbuyDao; @Autowired private OrderUtils orderUtils; @@ -447,7 +465,114 @@ public class OrderServiceImpl implements OrderService { return storeOrderService.updateBatchById(orderList, 100); } + @Override + public boolean applyInvoicing(ApplyInvoicingReq request) { + StoreOrder storeOrderPram = new StoreOrder(); + storeOrderPram.setOrderId(request.getPlatformCode()); + StoreOrder existStoreOrder = storeOrderService.getByEntityOne(storeOrderPram); + if (null == existStoreOrder) throw new CrmebException("支付订单不存在"); + /*if (existStoreOrder.getStatus()<2 || existStoreOrder.getRefundStatus()!=0){ + throw new CrmebException("未收货/未发起售后申请订单,无法申请开票"); + }*/ + existStoreOrder.setInvoiceTitleNo(request.getInvoiceTitleNo()); + existStoreOrder.setInvoiceTitleType(request.getInvoiceTitleType()); + existStoreOrder.setInvoiceTitleName(request.getInvoiceTitleName()); + existStoreOrder.setInvoiceingPhone(request.getInvoiceingPhone()); + existStoreOrder.setInvoiceingEmail(request.getInvoiceingEmail()); + applyInvoicingCustom(request); + storeOrderService.updateById(existStoreOrder); + return true; + } + public void applyInvoicingCustom(ApplyInvoicingReq request) { + Map params = new HashMap<>(); + + params.put("platformCode", request.getPlatformCode()); + params.put("invoiceTitleType", request.getInvoiceTitleType()); + params.put("invoiceTitleName", request.getInvoiceTitleName()); + params.put("invoiceTitleNo", request.getInvoiceTitleNo()); + params.put("email", request.getInvoiceingEmail()); + params.put("phone", request.getInvoiceingPhone()); + log.info("申请开票参数:{}", JSON.toJSONString(params)); + String result = restTemplateUtil.postMapData(applyInvoicingUrl, params, new HashMap<>()); + log.info("申请开票返回:{}", JSON.toJSONString(result)); + WebResponse webResponse = JSON.parseObject(result, WebResponse.class); + if (!"200".equals(webResponse.getStatus())) { + throw new RuntimeException(String.format("申请开票异常订单号:%s", request.getPlatformCode())); + } + } + @Override + public boolean cancelRefund(OrderCancelRefund request) { + boolean lock = + redisLock.lock(Constants.ORDER_LOCK + request.getOrderNo(),5); + if (!lock) { + throw new CrmebException("系统繁忙,请稍后再试"); + } + StoreOrder storeOrderPram = new StoreOrder(); + StoreOrder existStoreOrder; + try { + storeOrderPram.setOrderId(request.getOrderNo()); + existStoreOrder = storeOrderService.getByEntityOne(storeOrderPram); + if (null == existStoreOrder) throw new CrmebException("支付订单不存在"); + if (existStoreOrder.getRefundStatus() <=0 ) { + throw new CrmebException("订单未发起售后"); + } + + if (existStoreOrder.getRefundStatus() == 2) { + throw new CrmebException("订单已退款"); + } + if (existStoreOrder.getRefundStatus() == 3) { + throw new CrmebException("退款中无法取消"); + } + existStoreOrder.setRefundStatus(0); + existStoreOrder.setRefundExpressName(""); + existStoreOrder.setRefundExpressNo(""); + existStoreOrder.setRefundPrice(BigDecimal.ZERO); + existStoreOrder.setRefundExpressCode(""); + existStoreOrder.setRefundReasonTime(null); + existStoreOrder.setRefundExpressTime(null); + existStoreOrder.setRefundRequestStatus(null); + existStoreOrder.setRefundOrderNo(""); + /*if (existStoreOrder.getHasSync()==1){ + retryService.updateOrderRefundStatus(existStoreOrder,"取消退款"); + }*/ + + Boolean execute = transactionTemplate.execute(e -> { + existStoreOrder.setAfterSalesStatus("售后关闭"); + + storeOrderService.updateById(existStoreOrder); + storeOrderStatusService.createLog(existStoreOrder.getId(), Constants.ORDER_LOG_REFUND_APPLY, "用户取消申请退款原因:" + request.getExplain()); + return Boolean.TRUE; + }); + }catch (Exception e){ + throw e; + }finally { + redisLock.unLock(Constants.ORDER_LOCK + request.getOrderNo()); + } + return true; + } + @Override + public void updateRefundExpress(RefundExpressUpdate request) { + StoreOrder storeOrder = getByOrderIdException(request.getOrderNo()); + if(storeOrder.getRefundStatus()==0){ + throw new CrmebException("还未申请退款无法修改"); + } + if(StrUtil.isNotBlank(storeOrder.getRefundExpressCode())||StrUtil.isNotBlank(storeOrder.getRefundExpressName())||StrUtil.isNotBlank(storeOrder.getRefundExpressNo())){ + throw new CrmebException("已填写退货物流,无法修改"); + } + storeOrder.setAfterSalesStatus("待商家收货"); + storeOrder.setRefundExpressCode(request.getRefundExpressCode()); + storeOrder.setRefundExpressName(request.getRefundExpressName()); + storeOrder.setRefundExpressNo(request.getRefundExpressNo()); + storeOrder.setRefundExpressTime(LocalDateTime.now()); + + transactionTemplate.execute(e -> { + storeOrderService.updateById(storeOrder); + storeOrderStatusService.createLog(storeOrder.getId(), Constants.ORDER_STATUS_APPLY_REFUNDING, "用户回寄包裹"); + return true; + }); + + } /** * 订单列表 * @@ -601,6 +726,15 @@ public class OrderServiceImpl implements OrderService { storeOrderDetailResponse.setStatusPic(orderStatusVo.getStr("statusPic")); storeOrderDetailResponse.setOrderStatusMsg(orderStatusVo.getStr("msg")); storeOrderDetailResponse.setPayTypeStr(orderStatusVo.getStr("payTypeStr")); + List parcelPOS = parcelDao.selectList(new LambdaQueryWrapper().eq(ParcelPO::getPlatformCode, storeOrder.getOrderId()).eq(ParcelPO::getDeleted, 0)); + Map map=xsbuyDao.selectExpress(storeOrder.getOrderId()).stream().collect(Collectors.toMap(XsOrderDeliveryInfo::getExpressNo, Function.identity(),(v1, v2)->v2) ); + parcelPOS.forEach(item->{ + XsOrderDeliveryInfo deliveryInfo = map.get(item.getExpressNo()); + if (deliveryInfo!=null){ + item.setExpressInfo(deliveryInfo.getExpressInfo()); + } + }); + storeOrderDetailResponse.setParcelList(parcelPOS); BigDecimal proTotalPrice = storeOrderDetailResponse.getPayPrice().add(storeOrderDetailResponse.getCouponPrice()).add(storeOrderDetailResponse.getDeductionPrice()).subtract(storeOrderDetailResponse.getPayPostage()); storeOrderDetailResponse.setProTotalPrice(proTotalPrice); return storeOrderDetailResponse; diff --git a/crmeb-service/src/main/java/com/zbkj/service/service/impl/StoreOrderServiceImpl.java b/crmeb-service/src/main/java/com/zbkj/service/service/impl/StoreOrderServiceImpl.java index 857e5f6..09bfe5a 100644 --- a/crmeb-service/src/main/java/com/zbkj/service/service/impl/StoreOrderServiceImpl.java +++ b/crmeb-service/src/main/java/com/zbkj/service/service/impl/StoreOrderServiceImpl.java @@ -16,6 +16,7 @@ import com.github.pagehelper.PageHelper; import com.github.pagehelper.PageInfo; import com.zbkj.common.constants.*; import com.zbkj.common.exception.CrmebException; +import com.zbkj.common.model.XsOrderDeliveryInfo; import com.zbkj.common.model.combination.StorePink; import com.zbkj.common.model.express.Express; import com.zbkj.common.model.extend.MallExpressInfoDto; @@ -44,6 +45,7 @@ import com.zbkj.common.vo.*; import com.zbkj.service.dao.ParcelDao; import com.zbkj.service.dao.StoreOrderDao; import com.zbkj.service.dao.StoreProductAttrValueDao; +import com.zbkj.service.dao.XsbuyDao; import com.zbkj.service.delete.OrderUtils; import com.zbkj.service.service.*; import com.zbkj.service.util.RedisLockUtil; @@ -85,6 +87,8 @@ public class StoreOrderServiceImpl extends ServiceImpl parcelPOS = parcelDao.selectList(new LambdaQueryWrapper().eq(ParcelPO::getPlatformCode, storeOrder.getOrderId()).eq(ParcelPO::getDeleted, 0)); + Map map=xsbuyDao.selectExpress(storeOrder.getOrderId()).stream().collect(Collectors.toMap(XsOrderDeliveryInfo::getExpressNo, Function.identity(), (v1, v2)->v2)); + parcelPOS.forEach(item->{ + XsOrderDeliveryInfo deliveryInfo = map.get(item.getExpressNo()); + if (deliveryInfo!=null){ + item.setExpressInfo(deliveryInfo.getExpressInfo()); + } + }); + storeOrderInfoResponse.setParcelList(parcelPOS); //用户信息 User user = userService.getById(storeOrder.getUid()); storeOrderInfoResponse.setNikeName(user.getNickname()); diff --git a/crmeb-service/src/main/resources/mapper/store/XsSkuInfoMapper.xml b/crmeb-service/src/main/resources/mapper/store/XsSkuInfoMapper.xml index 0c9c91e..694944f 100644 --- a/crmeb-service/src/main/resources/mapper/store/XsSkuInfoMapper.xml +++ b/crmeb-service/src/main/resources/mapper/store/XsSkuInfoMapper.xml @@ -24,4 +24,10 @@ + +