Commit 64b0ce09 by ping.wu

Merge remote-tracking branch 'origin/pre' into pre

parents d90daf49 bd17204b
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;
}
} }
...@@ -607,7 +607,7 @@ public class OrderServiceImpl implements Orderservice { ...@@ -607,7 +607,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);
}
...@@ -29,6 +29,7 @@ public class Finals { ...@@ -29,6 +29,7 @@ public class Finals {
public static final String CHANNEL_ID_LIST = "channelIds"; public static final String CHANNEL_ID_LIST = "channelIds";
public static final String CHANNEL_CODE_LIST = "channelCodes"; public static final String CHANNEL_CODE_LIST = "channelCodes";
public static final String IS_QUERY_STORE = "isQueryStore"; public static final String IS_QUERY_STORE = "isQueryStore";
public static final String SHOPPINGCARD_PRODUCTS = "shoppingCardProducts";
public static final Integer PRODUCT_COUPON = 0; public static final Integer PRODUCT_COUPON = 0;
public static final Integer CASH_COUPON = 1; public static final Integer CASH_COUPON = 1;
public static final Integer ELSE_COUPON = 2; public static final Integer ELSE_COUPON = 2;
......
...@@ -21,4 +21,9 @@ public class GetMemberCouponRequestVo { ...@@ -21,4 +21,9 @@ public class GetMemberCouponRequestVo {
//是否 校验券门店是否可用 //是否 校验券门店是否可用
private Boolean checkStoreId = false; private Boolean checkStoreId = false;
/**
* 购物车中的开个店商品id列表,多个用逗号分隔
*/
private String shoppingCardProducts;
} }
...@@ -150,6 +150,9 @@ public class CouponServiceImpl implements CouponService { ...@@ -150,6 +150,9 @@ public class CouponServiceImpl implements CouponService {
// 由于门店服务老是慢,这个参数可以控制不查门店服务, 返回的数据也不需要门店数据 // 由于门店服务老是慢,这个参数可以控制不查门店服务, 返回的数据也不需要门店数据
map.put(Finals.IS_QUERY_STORE, false); map.put(Finals.IS_QUERY_STORE, false);
map.put(Finals.SIGN, "adapterV4Skip" + requestVo.getPartnerId()); map.put(Finals.SIGN, "adapterV4Skip" + requestVo.getPartnerId());
if (StringUtils.isNotEmpty(requestVo.getShoppingCardProducts())) {
map.put(Finals.SHOPPINGCARD_PRODUCTS, requestVo.getShoppingCardProducts());
}
GetCouponDetailResponseDto responseDto = couponOnlineClient.getCouponDetails(map); GetCouponDetailResponseDto responseDto = couponOnlineClient.getCouponDetails(map);
if (ResponseCodeConstant.RESPONSE_SUCCESS_1.equals(responseDto.getResult())) { if (ResponseCodeConstant.RESPONSE_SUCCESS_1.equals(responseDto.getResult())) {
return responseDto; return responseDto;
...@@ -740,6 +743,7 @@ public class CouponServiceImpl implements CouponService { ...@@ -740,6 +743,7 @@ public class CouponServiceImpl implements CouponService {
requestVo.setCouponCode(couponCode); requestVo.setCouponCode(couponCode);
requestVo.setStoreId(requestDto.getStoreId()); requestVo.setStoreId(requestDto.getStoreId());
requestVo.setCheckStoreId(true); requestVo.setCheckStoreId(true);
requestVo.setShoppingCardProducts(goodsId);
GetCouponDetailResponseDto couponDetailResponseDto = this.getMemberCoupon(requestVo); GetCouponDetailResponseDto couponDetailResponseDto = this.getMemberCoupon(requestVo);
if (couponDetailResponseDto == null || !couponDetailResponseDto.getResult().equals(ResponseCodeConstant.RESPONSE_SUCCESS_1) || CollectionUtils.isEmpty(couponDetailResponseDto.getDetails())) { if (couponDetailResponseDto == null || !couponDetailResponseDto.getResult().equals(ResponseCodeConstant.RESPONSE_SUCCESS_1) || CollectionUtils.isEmpty(couponDetailResponseDto.getDetails())) {
return null; return null;
......
...@@ -25,6 +25,7 @@ import org.springframework.beans.factory.annotation.Autowired; ...@@ -25,6 +25,7 @@ import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service; import org.springframework.stereotype.Service;
import java.util.*; import java.util.*;
import java.util.function.Function;
import java.util.function.Predicate; import java.util.function.Predicate;
import java.util.stream.Collectors; import java.util.stream.Collectors;
...@@ -86,16 +87,31 @@ public class ProductServiceImpl implements ProductService { ...@@ -86,16 +87,31 @@ public class ProductServiceImpl implements ProductService {
return CartResponseUtil.error(valiadResponse.getErrmsg(),checkCartRequest); return CartResponseUtil.error(valiadResponse.getErrmsg(),checkCartRequest);
} }
ValiadShopProductResponse valiadResult = valiadResponse.getData(); ValiadShopProductResponse valiadResult = valiadResponse.getData();
if (CollectionUtils.isEmpty(valiadResult.getSuccessList())) {
checkCartRequest.getCartGoodsList().clear();
checkCartRequest.getShoppingCartGoodsResponseVo().setChanged(true);
checkCartRequest.getShoppingCartGoodsResponseVo().setToastMsg(ShoppingCartConstant.SHOPPING_CART_INVALIAD_GOODS);
return CartResponseUtil.success(checkCartRequest);
}
Map<String, ValiadShopProductResult> successMap = valiadResult.getSuccessList().stream().collect(Collectors.toMap(ValiadShopProductResult::getUuid, Function.identity(), (k1, k2) -> k1));
//非法商品(商品是否存在、商品是否处于上架状态)自动移除,返回前端提示 //非法商品(商品是否存在、商品是否处于上架状态)自动移除,返回前端提示
if (CollectionUtils.isNotEmpty(valiadResult.getFailureList())){ boolean hasChange = false;
setToastMsgIfNotExist(checkCartRequest.getShoppingCartGoodsResponseVo(), ShoppingCartConstant.SHOPPING_CART_GOODS_CHANGE);
for (CartGoods cartGoods :checkCartRequest.getCartGoodsList()) { for (CartGoods cartGoods :checkCartRequest.getCartGoodsList()) {
if (valiadResult.getFailureList().stream().anyMatch(f->cartGoods.getCartGoodsUid().equals(f.getUuid()))){ // 当goodsId为空或商品是商品券时直接跳过
if (StringUtils.isEmpty(cartGoods.getGoodsId()) || Objects.equals(cartGoods.getGoodsType(), GoodsTypeEnum.COUPON_GOODS.getGoodsType())
|| Objects.equals(cartGoods.getGoodsType(), GoodsTypeEnum.HG_COUPON_GOODS.getGoodsType())
|| Objects.equals(cartGoods.getGoodsType(), GoodsTypeEnum.BUY_M_SEND_N_COUPON.getGoodsType())) {
continue;
}
if (!successMap.containsKey(cartGoods.getCartGoodsUid())){
hasChange = true;
cartGoods.setCartGoodsUid(null); cartGoods.setCartGoodsUid(null);
checkCartRequest.getShoppingCartGoodsResponseVo().setChanged(true); checkCartRequest.getShoppingCartGoodsResponseVo().setChanged(true);
checkCartRequest.getShoppingCartGoodsResponseVo().setToastMsg(ShoppingCartConstant.SHOPPING_CART_INVALIAD_GOODS); checkCartRequest.getShoppingCartGoodsResponseVo().setToastMsg(ShoppingCartConstant.SHOPPING_CART_INVALIAD_GOODS);
} }
} }
if (hasChange){
setToastMsgIfNotExist(checkCartRequest.getShoppingCartGoodsResponseVo(), ShoppingCartConstant.SHOPPING_CART_GOODS_CHANGE);
checkCartRequest.getCartGoodsList().removeIf(k -> StringUtils.isEmpty(k.getCartGoodsUid())); checkCartRequest.getCartGoodsList().removeIf(k -> StringUtils.isEmpty(k.getCartGoodsUid()));
} }
// Todo : 验证的商品信息 // Todo : 验证的商品信息
......
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