Commit 9ed1ba15 by 胡敬轩

Merge remote-tracking branch 'remotes/origin/feature/Ka3.0.4.1-0613-0620-爱马哥低碳活动'

parents 8b2c3915 7090e259
package cn.freemud.entities.dto.ecology;
import io.swagger.annotations.ApiModelProperty;
import lombok.Data;
@Data
public class ReportActivityBehaviorsRequest {
@ApiModelProperty(value = "商户号", required = true)
private String partnerId;
@ApiModelProperty(value = "活动号", required = true)
private String activityId;
@ApiModelProperty(value = "用户标识", required = true)
private String openId;
@ApiModelProperty(value = "微信订单号", required = true)
private String transactionId;
@ApiModelProperty(value = "小程序appid", required = true)
private String miniAppId;
}
...@@ -7,6 +7,7 @@ import cn.freemud.constant.RedisLockKey; ...@@ -7,6 +7,7 @@ import cn.freemud.constant.RedisLockKey;
import cn.freemud.entities.bo.CreateOrderBONew; import cn.freemud.entities.bo.CreateOrderBONew;
import cn.freemud.entities.db.OpenPlatformOrderConfig; import cn.freemud.entities.db.OpenPlatformOrderConfig;
import cn.freemud.entities.dto.ConfirmOrderDto; import cn.freemud.entities.dto.ConfirmOrderDto;
import cn.freemud.entities.dto.ecology.ReportActivityBehaviorsRequest;
import cn.freemud.entities.dto.order.CreateCashierOrderDto; import cn.freemud.entities.dto.order.CreateCashierOrderDto;
import cn.freemud.entities.dto.pay.SvcPayItem; import cn.freemud.entities.dto.pay.SvcPayItem;
import cn.freemud.entities.dto.pay.svc.ConsumeHistoryCreateRequest; import cn.freemud.entities.dto.pay.svc.ConsumeHistoryCreateRequest;
...@@ -22,10 +23,12 @@ import cn.freemud.management.thirdparty.OrderCallbackClient; ...@@ -22,10 +23,12 @@ import cn.freemud.management.thirdparty.OrderCallbackClient;
import cn.freemud.manager.OpenPlatformOrderConfigManager; import cn.freemud.manager.OpenPlatformOrderConfigManager;
import cn.freemud.redis.RedisCache; import cn.freemud.redis.RedisCache;
import cn.freemud.service.*; import cn.freemud.service.*;
import cn.freemud.service.thirdparty.EcologyProgramApplicationClient;
import cn.freemud.service.thirdparty.SvcTransactionClient; import cn.freemud.service.thirdparty.SvcTransactionClient;
import cn.freemud.service.universal.factory.CreateOrderServiceFactory; import cn.freemud.service.universal.factory.CreateOrderServiceFactory;
import cn.freemud.utils.RedisUtil; import cn.freemud.utils.RedisUtil;
import cn.freemud.utils.ResponseUtil; import cn.freemud.utils.ResponseUtil;
import com.alibaba.fastjson.JSONObject;
import com.freemud.api.assortment.datamanager.entity.vo.AssortmentCustomerInfoVo; import com.freemud.api.assortment.datamanager.entity.vo.AssortmentCustomerInfoVo;
import com.freemud.api.assortment.datamanager.enums.IappIdType; import com.freemud.api.assortment.datamanager.enums.IappIdType;
import com.freemud.api.assortment.datamanager.manager.customer.AssortmentCustomerInfoManager; import com.freemud.api.assortment.datamanager.manager.customer.AssortmentCustomerInfoManager;
...@@ -33,10 +36,14 @@ import com.freemud.application.sdk.api.log.ApiLog; ...@@ -33,10 +36,14 @@ import com.freemud.application.sdk.api.log.ApiLog;
import com.freemud.application.sdk.api.log.ErrorLog; import com.freemud.application.sdk.api.log.ErrorLog;
import com.freemud.application.sdk.api.ordercenter.config.OrderCenterProperties; import com.freemud.application.sdk.api.ordercenter.config.OrderCenterProperties;
import com.freemud.application.sdk.api.ordercenter.entities.v1.OrderBeanV1; import com.freemud.application.sdk.api.ordercenter.entities.v1.OrderBeanV1;
import com.freemud.application.sdk.api.ordercenter.entities.v1.ProductBeanV1;
import com.freemud.application.sdk.api.ordercenter.entities.vo.OrderCallBackRequestVo; import com.freemud.application.sdk.api.ordercenter.entities.vo.OrderCallBackRequestVo;
import com.freemud.application.sdk.api.ordercenter.enums.BizTypeEnum; import com.freemud.application.sdk.api.ordercenter.enums.BizTypeEnum;
import com.freemud.application.sdk.api.ordercenter.enums.MarketTypeEnum; import com.freemud.application.sdk.api.ordercenter.enums.MarketTypeEnum;
import com.freemud.application.sdk.api.ordercenter.enums.NewOrderStatus; import com.freemud.application.sdk.api.ordercenter.enums.NewOrderStatus;
import com.freemud.application.sdk.api.ordercenter.enums.PayChannelType;
import com.freemud.application.sdk.api.ordercenter.response.orderInfo.OrderPayItemResp;
import com.freemud.application.sdk.api.service.EmailAlertService;
import com.freemud.sdk.api.assortment.order.util.LockUtils; import com.freemud.sdk.api.assortment.order.util.LockUtils;
import com.google.gson.Gson; import com.google.gson.Gson;
import org.apache.commons.collections4.CollectionUtils; import org.apache.commons.collections4.CollectionUtils;
...@@ -69,6 +76,13 @@ import java.util.stream.Collectors; ...@@ -69,6 +76,13 @@ import java.util.stream.Collectors;
@Service @Service
public class OrderAdapterServiceImpl { public class OrderAdapterServiceImpl {
//爱马哥微信低碳活动 一次性活动,结束即可删除 格式(商户号@活动号,用逗号分割):2690@13981711,1864@34343345
@Value("${weixin.pay.success.activity:}")
private String weixinPayActivity;
//爱马哥微信低碳活动 一次性活动,结束即可删除 格式(商户号@商品,用逗号分割):2690@13981711,1864@34343345
@Value("${weixin.pay.success.goods:}")
private String weixinPayGoods;
private final String PAY_SUCCESS_KEY = "pay_success_key:"; private final String PAY_SUCCESS_KEY = "pay_success_key:";
/** /**
...@@ -150,6 +164,10 @@ public class OrderAdapterServiceImpl { ...@@ -150,6 +164,10 @@ public class OrderAdapterServiceImpl {
private OpenPlatformOrderConfigManager openPlatformOrderConfigManager; private OpenPlatformOrderConfigManager openPlatformOrderConfigManager;
@Autowired @Autowired
private SvcTransactionClient svcTransactionClient; private SvcTransactionClient svcTransactionClient;
@Autowired
private EcologyProgramApplicationClient ecologyProgramApplicationClient;
@Autowired
private EmailAlertService emailAlertService;
//获取下单实现对象 //获取下单实现对象
private OrderFactoryService getCreateOrderBean(AssortmentCustomerInfoVo assortmentCustomerInfoVo,CreateOrderVo createOrderVo){ private OrderFactoryService getCreateOrderBean(AssortmentCustomerInfoVo assortmentCustomerInfoVo,CreateOrderVo createOrderVo){
...@@ -370,6 +388,8 @@ public class OrderAdapterServiceImpl { ...@@ -370,6 +388,8 @@ public class OrderAdapterServiceImpl {
if(CollectionUtils.isNotEmpty(message.getSvcPayItems())){ if(CollectionUtils.isNotEmpty(message.getSvcPayItems())){
sendSvcPayInfoToSvcTransaction(message.getSvcPayItems(),orderBean.getCompanyId(),orderBean.getOid(),orderBean.getUserId(),orderBean.getShopId()); sendSvcPayInfoToSvcTransaction(message.getSvcPayItems(),orderBean.getCompanyId(),orderBean.getOid(),orderBean.getUserId(),orderBean.getShopId());
} }
//爱马哥低碳活动 活动结束即可删除此代码,大概2022-09月结束
sendLowCarbonToWeixin(message,orderBean);
return result; return result;
} catch (Exception e) { } catch (Exception e) {
throw e; throw e;
...@@ -466,4 +486,90 @@ public class OrderAdapterServiceImpl { ...@@ -466,4 +486,90 @@ public class OrderAdapterServiceImpl {
} }
} }
/**
* 微信低碳活动上报,活动结束即可删除
* @param message
* @param orderBean
*/
private void sendLowCarbonToWeixin(PaysuccessNoticeMessage message,OrderBeanV1 orderBean){
ApiLog.printLog("sendLowCarbonToWeixin",message,orderBean,null);
BaseResponse response = null;
try {
// 微商城订单处理 因为没有appid
if (Objects.equals(BizTypeEnum.MALL.getBizType(), orderBean.getBizType())) {
return;
}
//先判断有没有微信支付
List<OrderPayItemResp> orderPayItem = orderBean.getOrderPayItem();
boolean hasWeixinPay = Objects.equals(orderBean.getPayChannelType(), String.valueOf(PayChannelType.WECHAT.getIndex()))
|| (CollectionUtils.isNotEmpty(orderPayItem) && orderPayItem.stream().anyMatch(payItem -> Objects.equals(payItem.getPayChannelType(), PayChannelType.WECHAT.getIndex().intValue())));
if (!hasWeixinPay) {
return;
}
//再判断用没有配置活动
String activityId = getActivityId(orderBean.getCompanyId());
if (StringUtils.isBlank(activityId)) {
return;
}
//再判断订单商品是否在白名单里面
if (isGoodInActivity(orderBean.getCompanyId(), orderBean.getProductList())) {
ReportActivityBehaviorsRequest request = new ReportActivityBehaviorsRequest();
request.setPartnerId(orderBean.getCompanyId());
request.setActivityId(activityId);
request.setOpenId(message.getOpenid());
request.setTransactionId(message.getThirdPartTradeNo());
request.setMiniAppId(orderBean.getAppId());
response = ecologyProgramApplicationClient.reportActivityBehaviors(request);
if (!Objects.equals(response.getCode(), "100")) {
emailAlertService.sendEmailAlert("低碳活动上报失败", String.format("request:%s \r\nresponse:%s \r\norderNo:%s", JSONObject.toJSONString(request), JSONObject.toJSONString(response), orderBean.getOid()));
ApiLog.printLog("sendLowCarbonToWeixin error "+orderBean.getOid(), message,request,response);
}
}
}catch (Exception e){
emailAlertService.sendEmailAlert("低碳活动上报异常", String.format("request:%s \r\nresponse:%s \r\norderNo:%s", JSONObject.toJSONString(message), JSONObject.toJSONString(response),orderBean.getOid()));
ErrorLog.printErrorLog("sendLowCarbonToWeixin exception","/ecology/micro-program/low-carbon-action/activities/behaviors-report",orderBean,e);
}
}
private String getActivityId(String partnerId){
String[] partnerArr = weixinPayActivity.split(",");
if(partnerArr != null && partnerArr.length >0){
for(String partnerStr : partnerArr){
String[] arr = partnerStr.split("@");
if(Objects.equals(arr[0],partnerId)){
return arr[1];
}
}
}
return null;
}
private boolean isGoodInActivity(String partnerId,List<ProductBeanV1> productList){
List<String> partnerList = Arrays.asList(weixinPayGoods.split(","));
if(CollectionUtils.isNotEmpty(partnerList) && CollectionUtils.isNotEmpty(productList)){
return productList.stream().anyMatch(productBeanV1 -> {
boolean mainProduct = partnerList.contains(partnerId+"@"+(StringUtils.isBlank(productBeanV1.getSpecification())?productBeanV1.getProductId():productBeanV1.getSpecification()));
if(mainProduct){
return true;
}
if(CollectionUtils.isNotEmpty(productBeanV1.getSendProduct())){
boolean sendProduct = productBeanV1.getSendProduct().stream().anyMatch(send->partnerList.contains(partnerId+"@"+(StringUtils.isBlank(send.getSpecification())?send.getProductId():send.getSpecification())));
if(sendProduct){
return true;
}
}
if(CollectionUtils.isNotEmpty(productBeanV1.getComboProduct())){
boolean comboProduct = productBeanV1.getComboProduct().stream().anyMatch(combo->partnerList.contains(partnerId+"@"+(StringUtils.isBlank(combo.getSpecification())?combo.getProductId():combo.getSpecification())));
if(comboProduct){
return true;
}
}
return false;
});
}
return false;
}
} }
...@@ -598,7 +598,7 @@ public class OrderServiceImpl implements Orderservice { ...@@ -598,7 +598,7 @@ public class OrderServiceImpl implements Orderservice {
message.setTerminalId(newMessage.getAppId()); message.setTerminalId(newMessage.getAppId());
message.setRuleId(newMessage.getRuleId()); message.setRuleId(newMessage.getRuleId());
message.setSource(PaySuccessSource.OUTSIDE.getSource()); message.setSource(PaySuccessSource.OUTSIDE.getSource());
message.setThirdPartTradeNo(message.getThirdPartTradeNo()); message.setThirdPartTradeNo(newMessage.getThirdPartTradeNo());
message.setSvcPayItems(newMessage.getPayItems()); message.setSvcPayItems(newMessage.getPayItems());
String res = orderAdapterService.paySuccessCallback(message); String res = orderAdapterService.paySuccessCallback(message);
JSONObject jsonObject = JSONObject.parseObject(res); JSONObject jsonObject = JSONObject.parseObject(res);
......
package cn.freemud.service.thirdparty;
import cn.freemud.base.entity.BaseResponse;
import cn.freemud.entities.dto.ecology.ReportActivityBehaviorsRequest;
import org.springframework.cloud.openfeign.FeignClient;
import org.springframework.web.bind.annotation.PostMapping;
import org.springframework.web.bind.annotation.RequestBody;
/**
* 生态服务
* @author: hujx
* @date:
*/
@FeignClient(name = "ecology-program-application", url = "${saas.ecology.program.application.feign.url:}")
public interface EcologyProgramApplicationClient {
/**
* 支付成功上报的低碳行为
*
* @return
*/
// @LogIgnoreFeign(logMessage="sendLowCarbonAction")
@PostMapping("/ecology/micro-program/low-carbon-action/activities/behaviors-report")
BaseResponse reportActivityBehaviors(@RequestBody ReportActivityBehaviorsRequest request);
}
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment