huminghao 2 months ago
parent
commit
24b03d2e1a

+ 1
- 1
gly-base-core/src/main/java/cn/com/taiji/core/model/comm/protocol/ias/order/AbstractIssueResponse.java View File

@@ -9,7 +9,7 @@ import java.time.format.DateTimeFormatter;

@Getter
@Setter
public abstract class AbstractIssueResponse extends AbstractSignTypeResponse {
public class AbstractIssueResponse extends AbstractSignTypeResponse {

private String info = "成功.";
private String receiveTime = LocalDateTime.now().format(DateTimeFormatter.ofPattern("yyyy-MM-dd'T'HH:mm:ss")); // 接受时间

+ 2
- 2
gly-base-core/src/main/java/cn/com/taiji/core/model/comm/protocol/ias/order/OrderInitRequest.java View File

@@ -51,9 +51,9 @@ public class OrderInitRequest extends AbstractSignTypeRequest<OrderInitResponse>
@NotNull
@EnumInteger(enumClazz = UserType.class)
private Integer userType;// 用户类型
@NotNull
// @NotNull
private Double longitude;// 经度
@NotNull
// @NotNull
private Double latitude;// 纬度
@NotBlank
private String productId; // 产品编号

+ 2
- 2
zhywpt-app-managew/src/main/java/cn/com/taiji/managew/dto/product/product/ProductAddRequestDto.java View File

@@ -52,9 +52,9 @@ public class ProductAddRequestDto extends AbstractStaffBizRequestDTO {
private String equityServicesId;
@ApiModelProperty(name = "试运营发行量设置")
private Integer trialOperationCirculation;
@ApiModelProperty(name = "推广模式(1:线上,2:线下,3:线上和线下)",required = true)
@ApiModelProperty(name = "推广模式(1:线上,2:线下)",required = true)
@NotNull
@IntegerConstant(values="1,2,3")
@IntegerConstant(values="1,2")
private Integer promotionMode;
@ApiModelProperty(name = "推广工具",required = true)
@NotNull

+ 1
- 1
zhywpt-app-managew/src/main/java/cn/com/taiji/managew/manager/product/PromotionManager.java View File

@@ -29,7 +29,7 @@ public interface PromotionManager {

void examine(PromoteExamineReqDTO req) throws ManagerException;

void status(PromoteStatusReqDTO req);
void status(PromoteStatusReqDTO req) throws ManagerException;

ProductSelectResponseDTO select(ProductDetailRequestDTO req) throws ManagerException;


+ 8
- 1
zhywpt-app-managew/src/main/java/cn/com/taiji/managew/manager/product/PromotionManagerImpl.java View File

@@ -322,8 +322,15 @@ public class PromotionManagerImpl extends AbstractManager implements PromotionMa
}

@Override
public void status(PromoteStatusReqDTO req) {
public void status(PromoteStatusReqDTO req) throws ManagerException {
IssueProductPromotion promotion = issueProductPromotionRepo.findById(req.getId()).orElse(null);
if (promotion == null) throw new ManagerException("要变更的推广产品不存在");
IssueProduct product = issueProductRepo.findByReleaseId(promotion.getReleaseId());
if (EnableStatus.ENABLE.equals(req.getStatus()) && EnableStatus.DISABLE.equals(product.getStatus())) {
throw new ManagerException("此产品已停用,不可启用推广");
}
issueProductPromotionRepo.updateState(req.getStatus(), LocalDateTime.now(), req.getId());

}

@Override

+ 8
- 10
zhywpt-service-ias/src/main/java/cn/com/taiji/ias/manager/order/AbstractOrderManager.java View File

@@ -12,8 +12,6 @@ import cn.com.taiji.core.entity.dict.issue.OrderPayStatus;
import cn.com.taiji.core.entity.dict.issue.OrderType;
import cn.com.taiji.core.entity.dict.issue.TransactionBizType;
import cn.com.taiji.core.entity.dict.pay.PayChannelType;
import cn.com.taiji.core.entity.dict.pay.TradeState;
import cn.com.taiji.core.entity.dict.pay.TradeType;
import cn.com.taiji.core.entity.issue.*;
import cn.com.taiji.core.entity.user.AccountInfo;
import cn.com.taiji.core.manager.tools.MyTimeTools;
@@ -308,16 +306,16 @@ public abstract class AbstractOrderManager<T extends AbstractSignTypeRequest<?>>
AtsQueryPayResultV3Request v3Request = new AtsQueryPayResultV3Request();
v3Request.setCreateType(payConfig.getWxServiceType());
v3Request.setExternalOrderNo(pay.getExternalOrderNo());
v3Request.setTradeType(TradeType.valueOf(payConfig.getPayProductType()));
// v3Request.setTradeType(TradeType.valueOf(payConfig.getPayProductType()));
v3Request.setMchid(payConfig.getWxMchId());
v3Request.setApiV3Key(payConfig.getWxApiv3key());
v3Request.setPrivateKey(payConfig.getWxPrivatekey());
v3Request.setSerialNo(payConfig.getWxSerialNo());
v3Request.setSubMchid(payConfig.getWxSubMchId());
// v2Request.setSubMchId(payConfig.get);
AtsQueryPayResultV3Response res = jsonPostRepeat(v3Request);
if (TradeState.SUCCESS.equals(res.getTradeState())) {
if (OrderPayStatus.SUCCESS.equals(res.getTradeState())) {
pay.setPayStatus(OrderPayStatus.SUCCESS);
pay.setPayTime(MyTimeTools.strToTime(res.getSuccessTime(),TimeTools.ISO_LOCAL_DATE_TIME));
pay.setPayTime(MyTimeTools.strToTime(res.getSuccessTime(), TimeTools.ISO_LOCAL_DATE_TIME));
pay.setUpdateTime(LocalDateTime.now());
pay.setExternalOrderNo(res.getTransactionId());
pay.setPayResult(res.toJson());
@@ -331,12 +329,12 @@ public abstract class AbstractOrderManager<T extends AbstractSignTypeRequest<?>>
v2Request.setOutTradeNo(pay.getExternalOrderNo());
v2Request.setAppId(payConfig.getWxAppId());
v2Request.setMchId(payConfig.getWxMchId());
v2Request.setSubMchId(payConfig.getWxSubMchId());
v2Request.setMchKey(payConfig.getWxKey());
// v2Request.setSubAppId(payConfig.gets);
// v2Request.setSubMchId(payConfig.get);
AtsQueryPayResultV2Response res = jsonPostRepeat(v2Request);
if (TradeState.SUCCESS.equals(res.getTradeState())) {
if (OrderPayStatus.SUCCESS.equals(res.getTradeState())) {
pay.setPayStatus(OrderPayStatus.SUCCESS);
pay.setPayTime(MyTimeTools.strToTime(res.getTimeEnd(),TimeTools.yyyyMMddHHmmss));
pay.setPayTime(MyTimeTools.strToTime(res.getTimeEnd(), TimeTools.yyyyMMddHHmmss));
pay.setUpdateTime(LocalDateTime.now());
pay.setExternalOrderNo(res.getTransactionId());
pay.setPayResult(res.toJson());

+ 189
- 0
zhywpt-service-ias/src/main/java/cn/com/taiji/ias/manager/order/OrderCancelManager.java View File

@@ -0,0 +1,189 @@
package cn.com.taiji.ias.manager.order;

import cn.com.taiji.common.manager.net.http.ServiceHandleException;
import cn.com.taiji.common.pub.TimeTools;
import cn.com.taiji.core.entity.dict.basic.SourceType;
import cn.com.taiji.core.entity.dict.issue.*;
import cn.com.taiji.core.entity.issue.IssueOrderPay;
import cn.com.taiji.core.entity.issue.IssueOrderRefund;
import cn.com.taiji.core.entity.issue.IssueOrderinfo;
import cn.com.taiji.core.entity.issue.IssueOrderinfoExt;
import cn.com.taiji.core.model.comm.protocol.AbstractSignTypeResponse;
import cn.com.taiji.core.model.comm.protocol.ias.order.AbstractIssueResponse;
import cn.com.taiji.core.model.comm.protocol.ias.order.OrderCancelRequest;
import cn.com.taiji.core.model.comm.protocol.ias.order.RetunInfoModel;
import cn.com.taiji.core.model.comm.protocol.valid.ErrorMsgBuilder;
import cn.com.taiji.core.repo.jpa.comm.OcrResultRepo;
import cn.com.taiji.core.repo.jpa.issue.IssueOrderRefundRepo;
import cn.com.taiji.ias.dict.DataType;
import cn.com.taiji.ias.model.ServiceLogEvent;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;

import java.time.LocalDateTime;
import java.util.Arrays;
import java.util.List;
import java.util.Map;
import java.util.stream.Collectors;

/**
* <pre>
* </pre>
*/
@Service
public class OrderCancelManager extends AbstractOrderManager<OrderCancelRequest> {

public static final List<IssueOrderStep> ALLOW_CANCEL_STEP =
Arrays.asList(IssueOrderStep.ORDER_INIT, IssueOrderStep.CUSTOMER_UPLOAD, IssueOrderStep.VEHICLE_UPLOAD,
IssueOrderStep.ORDER_PAID, IssueOrderStep.ORDER_SIGNED, IssueOrderStep.WAITING_AUDIT,
IssueOrderStep.AUDIT_FAIL, IssueOrderStep.WAITING_SEND);

protected final String ORDERPAY = "orderPay";
@Autowired
private OcrResultRepo ocrResultRepo;
@Autowired
private IssueOrderRefundRepo refundRepo;

public OrderCancelManager() {
super(DataType.ORDER_CANCEL);
}

@Override
protected String getDataId(OrderCancelRequest req) {
return req.getOrderNo();
}

@Override
protected void formatValidateInternal(ErrorMsgBuilder builder, OrderCancelRequest req, ServiceLogEvent event,
Map<String, Object> dataStream) throws ServiceHandleException {
req.relatedValid(builder);
}

@Override
protected void businessValidateInternal(ErrorMsgBuilder builder, OrderCancelRequest request,
ServiceLogEvent event, Map<String, Object> dataStream) throws ServiceHandleException {
IssueOrderinfo order = checkOrder(request.getOrderNo());
if (hasText(request.getOpenId()))
checkOpenId(request.getOpenId());
if (!IssueOrderStatus.NORMAL.equals(order.getOrderStatus()) || !ALLOW_CANCEL_STEP.contains(order.getOrderStep())) {
throw newBusinessException("当前订单不支持取消");
}
// 取消订单的操作来源要判断
if (SourceType.CHANNEL.equals(order.getOrderSource()) || SourceType.SERVICE_HALL.equals(order.getOrderSource())) {
if (!request.getOrgCode().equals(order.getAgencyId())) {
throw newBusinessException("不是您渠道的订单。取消失败");
}
}
// 需要支付的情况下,进行退费相关校验
if (order.getNeedPay()) {
List<IssueOrderPay> pays = paymentDetections(request.getOrderNo());
List<OrderPayStatus> payStatus = pays.stream().distinct().map(IssueOrderPay::getPayStatus).collect(Collectors.toList());
if (payStatus.contains(OrderPayStatus.SUCCESS) && payStatus.size()>1)
throw newBusinessException("有支付中的订单,请稍后重试");
if(request.getRefundStatus() == 1) {
List<String> payOrderNos = pays.stream().map(IssueOrderPay::getExternalOrderNo).collect(Collectors.toList());
for (RetunInfoModel retunInfoModel : request.getRefundInfoList()) {
if (!payOrderNos.contains(retunInfoModel.getPayOrderNo())){
throw newBusinessException("支付单号不存在:"+retunInfoModel.getPayOrderNo());
}
}
}
dataStream.put(ORDERPAY, pays);
}
dataStream.put(ORDER, order);
}

@Override
protected void persistInternal(OrderCancelRequest request, ServiceLogEvent event,
Map<String, Object> dataStream) throws ServiceHandleException {
LocalDateTime now = LocalDateTime.now();
IssueOrderinfo order = (IssueOrderinfo)dataStream.get(ORDER);
IssueOrderinfoExt orderInfoExt = orderInfoExtRepo.findByOrderNo(order.getOrderNo());
List<IssueOrderPay> pays = (List<IssueOrderPay>)dataStream.get(ORDERPAY);
canceledAndRefund(order, request, pays);
// 保存订单取消原因
order.setCancelTime(now);
order.setOrderStatus(IssueOrderStatus.CANCEL);
orderInfoExt.setCancelReason(request.getReason());
orderInfoExt.setCancelOpId(request.getOpenId());
orderInfoExtRepo.save(orderInfoExt);
// 更改订单步骤并保存
orderInfoRepo.merge(order);
orderPayRepo.persistAll(pays);
transactionManager.persistTransaction(ISSUE_ORDER_SYNC, order.getOrderNo(), "订单取消");
}

@Override
protected AbstractSignTypeResponse getRes(OrderCancelRequest req, ServiceLogEvent event,
Map<String, Object> dataStream) throws ServiceHandleException {
AbstractIssueResponse res = new AbstractIssueResponse();
res.setReceiveTime(getReceiveTimeStr(event));
return res;
}

@Override
protected void onSuccessInternal(OrderCancelRequest req, ServiceLogEvent event,
Map<String, Object> dataStream) {
IssueOrderinfo order = (IssueOrderinfo)dataStream.get(ORDER);
executor.execute(() -> {
try {
syncOrder(order);
} catch (Exception e) {
logger.error("数据同步失败", e);
}
});
}

public void canceledAndRefund(IssueOrderinfo order, OrderCancelRequest request, List<IssueOrderPay> pays) throws ServiceHandleException {
if (SourceType.CHANNEL.equals(order.getOrderSource())) {// 渠道订单的退款由自己完成
for (IssueOrderPay orderPay : pays) {
if (OrderPayStatus.SUCCESS.equals(orderPay.getPayStatus())) {
for (RetunInfoModel retunInfoModel : request.getRefundInfoList()) {
if (retunInfoModel.getPayOrderNo().equals(orderPay.getExternalOrderNo())) {
orderPay.setRefundAmount(retunInfoModel.getRefundAmount());
orderPay.setRefundOrderNo(retunInfoModel.getRefundOrderNo());
orderPay.setRefundTime(retunInfoModel.getRefundTime());
}
}
}
}
} else {
for (IssueOrderPay orderPay : pays) {
if (OrderPayStatus.SUCCESS.equals(orderPay.getPayStatus())) {
createOrderRefund(order, orderPay);
orderPay.setPayStatus(OrderPayStatus.REFUND);
order.setOrderStep(IssueOrderStep.REFUNDING);
} else {
orderPay.setPayStatus(OrderPayStatus.CANCELED);//
}
}
}
}

private IssueOrderRefund createOrderRefund(IssueOrderinfo order, IssueOrderPay orderPay) {
IssueOrderRefund orderRefund = new IssueOrderRefund();
orderRefund.setOrderNo(createRefundOrderNo());
orderRefund.setCardId(order.getCardId());
orderRefund.setVehiclePlate(order.getVehiclePlate());
orderRefund.setVehiclePlatecolor(order.getVehiclePlateColor());
orderRefund.setVehicleId(order.getVehicleId());
orderRefund.setAmount(orderPay.getFee());
orderRefund.setRefundAmount(orderPay.getFee());
orderRefund.setStatus(RefundStatus.NOTREFUND);
orderRefund.setUserName(order.getCustomerName());
orderRefund.setUserMobile(order.getCustomerTel());
orderRefund.setOperateType(RefundOperateType.ORIGINAL);
orderRefund.setPayConfigId(orderPay.getPayConfigId());
orderRefund.setExternalOrderNo(orderPay.getPayOrderNo());
orderRefund.setBusinessPort(RefundBusiness.ORDER_REFUND);
orderRefund.setUpdateTime(LocalDateTime.now());
orderRefund.setAgencyId(order.getAgencyId());
return refundRepo.save(orderRefund);
}

private String createRefundOrderNo() {
return "R" + LocalDateTime.now().format(TimeTools.yyyyMMddHHmmssSSS)
+ (int)((Math.random() * 9 + 1) * Math.pow(10, 5));
}

}

Loading…
Cancel
Save