Commit 60f4504f by hanghang.wang

聚餐吗转至聚合层

parent cb26e70d
...@@ -72,6 +72,8 @@ public class ConfirmOrderRequest extends BaseConfig { ...@@ -72,6 +72,8 @@ public class ConfirmOrderRequest extends BaseConfig {
*/ */
private String mealCodeRule; private String mealCodeRule;
private String tackCode;
/** /**
* 团号 * 团号
*/ */
......
...@@ -291,6 +291,7 @@ public class OrderCenterSdkServiceImpl implements OrderCenterSdkService { ...@@ -291,6 +291,7 @@ public class OrderCenterSdkServiceImpl implements OrderCenterSdkService {
request.setCompleteOrderCode(confirmOrderRequest.getCompleteOrderCode()); request.setCompleteOrderCode(confirmOrderRequest.getCompleteOrderCode());
request.setOrderCode(confirmOrderRequest.getOrderId()); request.setOrderCode(confirmOrderRequest.getOrderId());
request.setMealCodeRule(confirmOrderRequest.getMealCodeRule()); request.setMealCodeRule(confirmOrderRequest.getMealCodeRule());
request.setTackCode(confirmOrderRequest.getTackCode());
// 引入门店基础服务 查询自动制作完成配置时间,预约单单独超时任务设置 // 引入门店基础服务 查询自动制作完成配置时间,预约单单独超时任务设置
request.setTimeout(getPaySuccessTimeout(confirmOrderRequest,request)); request.setTimeout(getPaySuccessTimeout(confirmOrderRequest,request));
......
...@@ -3154,8 +3154,10 @@ public class OrderAdapter { ...@@ -3154,8 +3154,10 @@ public class OrderAdapter {
orderPayDto.setPayCode(PayChannelType.TIKTOKPAY.getEbcode()); orderPayDto.setPayCode(PayChannelType.TIKTOKPAY.getEbcode());
} }
orderPayDto.setFoodOrderType(getFoodOrderType(orderBean.getOrderType())); orderPayDto.setFoodOrderType(getFoodOrderType(orderBean.getOrderType()));
orderPayDto.setMerchantDiscount(orderBean.getAccountList() == null ? // todo orderPayDto.setMerchantDiscount(orderBean.getAccountList() == null ?
0L:orderBean.getAccountList().stream().mapToLong(account->account.getShopDiscountAmount()==null?0L:account.getShopDiscountAmount()).sum()); // 0L:orderBean.getAccountList().stream().mapToLong(account->account.getShopDiscountAmount()==null?0L:account.getShopDiscountAmount()).sum());
// orderPayDto.setMerchantDiscount(orderBean.getAccountList() == null ?
// 0L:orderBean.getAccountList().stream().mapToLong(account->account.getShopDiscountAmount()==null?0L:account.getShopDiscountAmount()).sum());
return orderPayDto; return orderPayDto;
} }
......
...@@ -52,6 +52,13 @@ public class QueryOrdersResponseDto { ...@@ -52,6 +52,13 @@ public class QueryOrdersResponseDto {
@NoArgsConstructor @NoArgsConstructor
@Data @Data
public static class OrderBean { public static class OrderBean {
/**
* 下单渠道 1:自营微信小程序 2:i点餐 3:自营支付宝小程序 4:自营H5 5:自营安卓APP 6:自营苹果APP 7:自营PC-WEB
* 8:饿了么 9:饿百 10:京东 11:美团外卖 12:自营APP 13:i应用会员 14:i应用订货 15:POS 16:百度外卖 18:i拼团 19:i围餐
*/
private String orderClient;
private Integer bizType; private Integer bizType;
private boolean isParent; private boolean isParent;
......
...@@ -10,14 +10,14 @@ import java.util.function.Function; ...@@ -10,14 +10,14 @@ import java.util.function.Function;
@AllArgsConstructor @AllArgsConstructor
public enum OrderTackCodeFactory { public enum OrderTackCodeFactory {
DEFAULT((byte)99,((Integer code) -> new Integer(code).toString())); DEFAULT("99",((Integer code) -> new Integer(code).toString()));
private byte orderClient; private String orderClient;
private Function<Integer,String> generateTackCodeFunc; private Function<Integer,String> generateTackCodeFunc;
public static OrderTackCodeFactory getByOrderClient(byte orderClient){ public static OrderTackCodeFactory getByOrderClient(String orderClient){
return Arrays.stream(OrderTackCodeFactory.values()) return Arrays.stream(OrderTackCodeFactory.values())
.filter(e -> e.orderClient == orderClient).findFirst() .filter(e -> e.orderClient.equals(orderClient)).findFirst()
.orElseGet(() -> OrderTackCodeFactory.DEFAULT); .orElseGet(() -> OrderTackCodeFactory.DEFAULT);
} }
} }
...@@ -19,7 +19,6 @@ import java.util.ArrayList; ...@@ -19,7 +19,6 @@ import java.util.ArrayList;
import java.util.List; import java.util.List;
public enum OrderType { public enum OrderType {
TAKE_OUT(1, "外卖","takeOut"), TAKE_OUT(1, "外卖","takeOut"),
PRE_ORDER(2, "预订单","preOrder"), PRE_ORDER(2, "预订单","preOrder"),
MALL(3, "商城","mall"), MALL(3, "商城","mall"),
...@@ -29,6 +28,9 @@ public enum OrderType { ...@@ -29,6 +28,9 @@ public enum OrderType {
private Integer code; private Integer code;
private String desc; private String desc;
/**
* 对应取餐码key规则
*/
private String tackDesc; private String tackDesc;
OrderType(Integer code, String desc,String tackDesc) { OrderType(Integer code, String desc,String tackDesc) {
......
...@@ -5,6 +5,7 @@ import cn.freemud.enums.OrderType; ...@@ -5,6 +5,7 @@ import cn.freemud.enums.OrderType;
import cn.freemud.enums.OrderTackCodeRuleEnum; import cn.freemud.enums.OrderTackCodeRuleEnum;
import com.freemud.api.assortment.datamanager.entity.db.AssortmentTackCodeRule; import com.freemud.api.assortment.datamanager.entity.db.AssortmentTackCodeRule;
import com.freemud.api.assortment.datamanager.manager.AssortmentTackCodeRuleManager; import com.freemud.api.assortment.datamanager.manager.AssortmentTackCodeRuleManager;
import com.freemud.sdk.api.assortment.order.request.order.ConfirmOrderRequest;
import org.apache.commons.lang.StringUtils; import org.apache.commons.lang.StringUtils;
import org.springframework.beans.factory.annotation.Autowired; import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.data.redis.core.RedisTemplate; import org.springframework.data.redis.core.RedisTemplate;
...@@ -24,14 +25,13 @@ import java.util.function.Function; ...@@ -24,14 +25,13 @@ import java.util.function.Function;
*/ */
@Component @Component
public class OrderTackCodeManager { public class OrderTackCodeManager {
@Autowired @Autowired
private AssortmentTackCodeRuleManager assortmentTackCodeRuleManager; private AssortmentTackCodeRuleManager assortmentTackCodeRuleManager;
@Autowired @Autowired
protected RedisTemplate redisTemplate; protected RedisTemplate redisTemplate;
public final static String numberChar = "0123456789"; public final static String numberChar = "0123456789";
public final static String numberCharWithoutZero = "12345"; public final static String numberCharWithoutZero = "12345";
/** /**
...@@ -41,11 +41,9 @@ public class OrderTackCodeManager { ...@@ -41,11 +41,9 @@ public class OrderTackCodeManager {
* @param storeId 门店ID * @param storeId 门店ID
* @return * @return
*/ */
public String generateTackCode(Integer orderType, String partnerId, String storeId, Function<Integer, String> fun) { public String generateTackCode(Integer orderType, String partnerId, String storeId, ConfirmOrderRequest var1, Function<Integer, String> fun) {
String key = this.getOrderTackCodeKey(partnerId); String key = this.getOrderTackCodeKey(partnerId);
String randomKey = getRandomOrderTackCodeKey(partnerId, storeId); String randomKey = getRandomOrderTackCodeKey(partnerId, storeId);
// redisTemplate.delete(key);
// redisTemplate.delete(randomKey);
String rule = (String) redisTemplate.opsForHash().entries(key).get("rule"); String rule = (String) redisTemplate.opsForHash().entries(key).get("rule");
AssortmentTackCodeRule assortmentTackCodeRule = new AssortmentTackCodeRule(); AssortmentTackCodeRule assortmentTackCodeRule = new AssortmentTackCodeRule();
if (Objects.isNull(rule) || rule.isEmpty()) { if (Objects.isNull(rule) || rule.isEmpty()) {
...@@ -58,7 +56,8 @@ public class OrderTackCodeManager { ...@@ -58,7 +56,8 @@ public class OrderTackCodeManager {
redisTemplate.opsForHash().put(key, "rule", rule); redisTemplate.opsForHash().put(key, "rule", rule);
redisTemplate.expire(key, 24, TimeUnit.HOURS); redisTemplate.expire(key, 24, TimeUnit.HOURS);
} }
if (StringUtils.isNotEmpty(rule) && rule.equals(OrderTackCodeRuleEnum.RANDOM_NUMBER.getCode())) { if(!Objects.isNull(var1)){var1.setMealCodeRule(rule);}
if (StringUtils.isNotEmpty(rule) && rule.equals(OrderTackCodeRuleEnum.RANDOM_NUMBER.getCode()+"")) {
//6位码 //6位码
String number = generateNumber(6); String number = generateNumber(6);
if (!redisTemplate.opsForHash().hasKey(randomKey, storeId + number)) { if (!redisTemplate.opsForHash().hasKey(randomKey, storeId + number)) {
...@@ -66,40 +65,33 @@ public class OrderTackCodeManager { ...@@ -66,40 +65,33 @@ public class OrderTackCodeManager {
redisTemplate.expire(randomKey, getSecondsNextEarlyMorning(), TimeUnit.SECONDS); redisTemplate.expire(randomKey, getSecondsNextEarlyMorning(), TimeUnit.SECONDS);
return number; return number;
} }
} else if (StringUtils.isNotEmpty(rule) && rule.equals(OrderTackCodeRuleEnum.THE_CUSTOM.getCode())) { } else if (StringUtils.isNotEmpty(rule) && rule.equals(OrderTackCodeRuleEnum.THE_CUSTOM.getCode()+"")) {
//规则自定义 //规则自定义
Map<Object, Object> tackCodeSettingMap = redisTemplate.opsForHash().entries(randomKey); Map<Object, Object> tackCodeSettingMap = redisTemplate.opsForHash().entries(randomKey);
if (tackCodeSettingMap.isEmpty()) { if (tackCodeSettingMap.isEmpty()) {
if (Objects.isNull(assortmentTackCodeRule)) { if (Objects.isNull(assortmentTackCodeRule)) {
assortmentTackCodeRule = assortmentTackCodeRuleManager.queryTackCodeRule(partnerId); assortmentTackCodeRule = assortmentTackCodeRuleManager.queryTackCodeRule(partnerId);
} }
tackCodeSettingMap.put("eatInHead", assortmentTackCodeRule.getEatInHead()); initTackCodeSettingHash(assortmentTackCodeRule,randomKey,tackCodeSettingMap);
tackCodeSettingMap.put("eatInCode", assortmentTackCodeRule.getEatInCode());
tackCodeSettingMap.put("eatInLength", assortmentTackCodeRule.getEatInCode().length());
tackCodeSettingMap.put("collectGoodsHead", assortmentTackCodeRule.getCollectGoodsHead());
tackCodeSettingMap.put("collectGoodsCode", assortmentTackCodeRule.getCollectGoodsCode());
tackCodeSettingMap.put("collectGoodsLength", assortmentTackCodeRule.getCollectGoodsCode().length());
tackCodeSettingMap.put("takeOutHead", assortmentTackCodeRule.getTakeOutHead());
tackCodeSettingMap.put("takeOutCode", assortmentTackCodeRule.getTakeOutCode());
tackCodeSettingMap.put("takeOutLength", assortmentTackCodeRule.getTakeOutCode().length());
redisTemplate.opsForHash().putAll(randomKey, tackCodeSettingMap);
redisTemplate.expire(randomKey, 24, TimeUnit.HOURS);
} }
//判断订单类型 取头号 //判断订单类型
String head = ""; String head = "",code = "";
String code = "";
OrderType orderTypeEnum = OrderType.getByCode(orderType); OrderType orderTypeEnum = OrderType.getByCode(orderType);
if(!Objects.isNull(orderTypeEnum)){ if(!Objects.isNull(orderTypeEnum)){
String tackDesc = orderTypeEnum.getTackDesc(); String tackDesc = orderTypeEnum.getTackDesc();
head = (String) tackCodeSettingMap.get(tackDesc+"Head"); head = (String) tackCodeSettingMap.get(tackDesc+"Head");
code = redisTemplate.opsForHash().increment(key, tackDesc+"Code", 1).toString();
Integer length = (Integer) tackCodeSettingMap.get(tackDesc+"Length"); Integer length = (Integer) tackCodeSettingMap.get(tackDesc+"Length");
code = redisTemplate.opsForHash().increment(key, tackDesc+"Code", 1).toString();
if (code.length() > length) { if (code.length() > length) {
redisTemplate.opsForHash().put(key, tackDesc + "Code", 1); //处理并发情况下,同时含有超过上限的数字。在第一次已经变更为1之后,再次塞1进缓存导致取餐吗重复
code = String.format("%0" + length + "d", 1); if(redisTemplate.opsForHash().get(key,tackDesc + "Code").toString().length() < length){
}else{ code = redisTemplate.opsForHash().increment(key, tackDesc+"Code", 1).toString();
code = String.format("%0" + length + "d", Integer.parseInt(code)); }else{
code = "1";
redisTemplate.opsForHash().put(key, tackDesc + "Code", Integer.parseInt(code));
}
} }
code = String.format("%0" + length + "d", Integer.parseInt(code));
} }
return head + code; return head + code;
} else { } else {
...@@ -171,4 +163,18 @@ public class OrderTackCodeManager { ...@@ -171,4 +163,18 @@ public class OrderTackCodeManager {
return sb.toString(); return sb.toString();
} }
private void initTackCodeSettingHash(AssortmentTackCodeRule assortmentTackCodeRule,String randomKey, Map<Object, Object> tackCodeSettingMap){
tackCodeSettingMap.put("eatInHead", assortmentTackCodeRule.getEatInHead());
tackCodeSettingMap.put("eatInCode", assortmentTackCodeRule.getEatInCode());
tackCodeSettingMap.put("eatInLength", assortmentTackCodeRule.getEatInCode().length());
tackCodeSettingMap.put("collectGoodsHead", assortmentTackCodeRule.getCollectGoodsHead());
tackCodeSettingMap.put("collectGoodsCode", assortmentTackCodeRule.getCollectGoodsCode());
tackCodeSettingMap.put("collectGoodsLength", assortmentTackCodeRule.getCollectGoodsCode().length());
tackCodeSettingMap.put("takeOutHead", assortmentTackCodeRule.getTakeOutHead());
tackCodeSettingMap.put("takeOutCode", assortmentTackCodeRule.getTakeOutCode());
tackCodeSettingMap.put("takeOutLength", assortmentTackCodeRule.getTakeOutCode().length());
redisTemplate.opsForHash().putAll(randomKey, tackCodeSettingMap);
redisTemplate.expire(randomKey, 24, TimeUnit.HOURS);
}
} }
...@@ -64,6 +64,7 @@ import cn.freemud.management.entities.dto.response.activity.GroupWorkRefundRespo ...@@ -64,6 +64,7 @@ import cn.freemud.management.entities.dto.response.activity.GroupWorkRefundRespo
import cn.freemud.management.entities.dto.response.pay.PayBatchRefundResponse; import cn.freemud.management.entities.dto.response.pay.PayBatchRefundResponse;
import cn.freemud.management.service.handle.ActivityHandle; import cn.freemud.management.service.handle.ActivityHandle;
import cn.freemud.management.thirdparty.MulitiPaymentClient; import cn.freemud.management.thirdparty.MulitiPaymentClient;
import cn.freemud.manager.OrderTackCodeManager;
import cn.freemud.manager.SpellGroupOrderDataManager; import cn.freemud.manager.SpellGroupOrderDataManager;
import cn.freemud.redis.RedisCache; import cn.freemud.redis.RedisCache;
import cn.freemud.service.BuriedPointService; import cn.freemud.service.BuriedPointService;
...@@ -478,6 +479,9 @@ public class OrderServiceImpl implements Orderservice { ...@@ -478,6 +479,9 @@ public class OrderServiceImpl implements Orderservice {
} }
} }
@Autowired
private OrderTackCodeManager orderTackCodeManager;
@Override @Override
public String paySuccessCallback(PaysuccessNoticeMessage message, ConfirmOrderDto confirmOrderDto, Map<String, QueryOrdersResponseDto.DataBean.OrderBean> orderBeans) { public String paySuccessCallback(PaysuccessNoticeMessage message, ConfirmOrderDto confirmOrderDto, Map<String, QueryOrdersResponseDto.DataBean.OrderBean> orderBeans) {
OrderBean orderBean = orderBeans.get(OrderBeanType.SAASORDER.getCode()); OrderBean orderBean = orderBeans.get(OrderBeanType.SAASORDER.getCode());
...@@ -538,6 +542,8 @@ public class OrderServiceImpl implements Orderservice { ...@@ -538,6 +542,8 @@ public class OrderServiceImpl implements Orderservice {
if (CollectionUtils.isNotEmpty(notAutomaticTwistPartnerId) && notAutomaticTwistPartnerId.contains(partnerId)) { if (CollectionUtils.isNotEmpty(notAutomaticTwistPartnerId) && notAutomaticTwistPartnerId.contains(partnerId)) {
var1.setNotAutomaticTwistTime(notAutomaticTwistTime); var1.setNotAutomaticTwistTime(notAutomaticTwistTime);
} }
String tackCodeNew = orderTackCodeManager.generateTackCode(orderBean.getType(),partnerId,storeId,var1,OrderTackCodeFactory.getByOrderClient(orderBean.getOrderClient()).getGenerateTackCodeFunc());
var1.setTackCode(tackCodeNew);
// 订单支付成功 // 订单支付成功
com.freemud.sdk.api.assortment.order.response.order.PayAccessResponse payAccessRes = orderCenterSdkService.payAccess(var1); com.freemud.sdk.api.assortment.order.response.order.PayAccessResponse payAccessRes = orderCenterSdkService.payAccess(var1);
String string2 = JSONObject.toJSONString(payAccessRes); String string2 = JSONObject.toJSONString(payAccessRes);
......
...@@ -37,7 +37,7 @@ public class TackCodeManagerTest { ...@@ -37,7 +37,7 @@ public class TackCodeManagerTest {
@Test @Test
public void selectTackCode(){ public void selectTackCode(){
String code = orderTackCodeManager.generateTackCode(1,"1864","1000221", OrderTackCodeFactory.getByOrderClient((byte) 2).getGenerateTackCodeFunc()); String code = orderTackCodeManager.generateTackCode(5,"1864","1000221",null, OrderTackCodeFactory.getByOrderClient("2").getGenerateTackCodeFunc());
log.debug("code=="+code); log.debug("code=="+code);
} }
......
...@@ -56,6 +56,8 @@ public class PaySuccessReq { ...@@ -56,6 +56,8 @@ public class PaySuccessReq {
//取餐码生成规则 //取餐码生成规则
private String mealCodeRule; private String mealCodeRule;
private String tackCode;
//订单拓展表字段-团号 //订单拓展表字段-团号
private String spellGroupCode; private String spellGroupCode;
} }
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