Commit c3096662 by zhiheng.zhang

Merge branch 'feature/2020/09/11-1.9.39-6位随机取餐码-张志恒' into qa

parents 7a5e693c 3f59dab0
...@@ -74,6 +74,7 @@ import org.apache.commons.lang.StringUtils; ...@@ -74,6 +74,7 @@ import org.apache.commons.lang.StringUtils;
import org.apache.commons.lang.time.FastDateFormat; import org.apache.commons.lang.time.FastDateFormat;
import org.springframework.beans.factory.annotation.Autowired; import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.beans.factory.annotation.Value; import org.springframework.beans.factory.annotation.Value;
import org.springframework.data.redis.core.RedisTemplate;
import org.springframework.stereotype.Component; import org.springframework.stereotype.Component;
import java.awt.geom.Point2D; import java.awt.geom.Point2D;
...@@ -81,7 +82,9 @@ import java.math.BigDecimal; ...@@ -81,7 +82,9 @@ import java.math.BigDecimal;
import java.security.NoSuchAlgorithmException; import java.security.NoSuchAlgorithmException;
import java.security.spec.InvalidKeySpecException; import java.security.spec.InvalidKeySpecException;
import java.text.DecimalFormat; import java.text.DecimalFormat;
import java.text.SimpleDateFormat;
import java.util.*; import java.util.*;
import java.util.concurrent.TimeUnit;
import java.util.function.Function; import java.util.function.Function;
import java.util.stream.Collectors; import java.util.stream.Collectors;
...@@ -90,6 +93,11 @@ import static cn.freemud.constant.OrderRefundConstant.ALLOW_REFUND; ...@@ -90,6 +93,11 @@ import static cn.freemud.constant.OrderRefundConstant.ALLOW_REFUND;
@Component @Component
public class OrderAdapter { public class OrderAdapter {
public final static String TAKECODEKEY = "takecode";
public static final String REDIS_KEY_SEP = ":";
public static final String numberChar = "0123456789";
public static final String numberCharWithoutZero = "12345";
private static FastDateFormat yyyyMMddHHmmss = FastDateFormat.getInstance("yyyy-MM-dd HH:mm:ss", Locale.CHINA); private static FastDateFormat yyyyMMddHHmmss = FastDateFormat.getInstance("yyyy-MM-dd HH:mm:ss", Locale.CHINA);
private static String SPMCHID = "1237482502"; private static String SPMCHID = "1237482502";
...@@ -126,6 +134,9 @@ public class OrderAdapter { ...@@ -126,6 +134,9 @@ public class OrderAdapter {
private static Gson gson = new Gson(); private static Gson gson = new Gson();
@Autowired
private RedisTemplate redisTemplate;
/** /**
* @param createOrderVo * @param createOrderVo
* @param shoppingCartGoodsDto * @param shoppingCartGoodsDto
...@@ -3181,4 +3192,77 @@ public class OrderAdapter { ...@@ -3181,4 +3192,77 @@ public class OrderAdapter {
return StringUtils.isNotBlank(payChannel) && OrderAdapter.PAY_CODE_10102.equalsIgnoreCase(payChannel); return StringUtils.isNotBlank(payChannel) && OrderAdapter.PAY_CODE_10102.equalsIgnoreCase(payChannel);
} }
/**
* 生成取餐码
* @param partnerId 商户ID
* @param storeId 门店ID
* @return
*/
public String generateTackCode(String partnerId, String storeId){
String pickUpGoodsNo = generateNumber(6);
String key = this.getOrderTackCodeKey(partnerId,storeId);
if(!redisTemplate.opsForHash().hasKey(key,storeId+pickUpGoodsNo)) {
redisTemplate.opsForHash().put(key,storeId+pickUpGoodsNo,pickUpGoodsNo);
redisTemplate.expire(key,getSecondsNextEarlyMorning(), TimeUnit.SECONDS);
}else{
generateTackCode(partnerId, storeId);
}
return pickUpGoodsNo;
}
/**
* 获取取餐码key
* @param partnerId
* @return
*/
public String getOrderTackCodeKey(String partnerId,String storeId){
Date currentDay = new Date();
String todayStr = formatDate(currentDay);
StringBuilder key = new StringBuilder(TAKECODEKEY).append(REDIS_KEY_SEP)
.append(partnerId)
.append(REDIS_KEY_SEP)
.append(storeId)
.append(REDIS_KEY_SEP)
.append(todayStr);
return key.toString();
}
public static SimpleDateFormat defaultDateFormater = new SimpleDateFormat("yyyy-MM-dd");
private String formatDate(Date date){
return defaultDateFormater.format(date);
}
/**
* 返回一个定长的随机字符串(只包含大小写字母、数字)
*
* @param length
* 随机字符串长度
* @return 随机字符串
*/
public static String generateNumber(int length) {
StringBuffer sb = new StringBuffer();
Random random = new Random();
for (int i = 0; i < length; i++) {
if (i == 0){
sb.append(numberCharWithoutZero.charAt(random.nextInt(numberCharWithoutZero.length())));
}else {
sb.append(numberChar.charAt(random.nextInt(numberChar.length())));
}
}
return sb.toString();
}
private Long getSecondsNextEarlyMorning(){
Calendar cal = Calendar.getInstance();
cal.add(Calendar.DAY_OF_YEAR, 1);
cal.set(Calendar.HOUR_OF_DAY, 0);
cal.set(Calendar.SECOND, 0);
cal.set(Calendar.MINUTE, 0);
cal.set(Calendar.MILLISECOND, 0);
return (cal.getTimeInMillis() - System.currentTimeMillis()) / 1000;
}
} }
...@@ -81,6 +81,7 @@ import com.freemud.application.sdk.api.ordercenter.enums.OrderClientType; ...@@ -81,6 +81,7 @@ import com.freemud.application.sdk.api.ordercenter.enums.OrderClientType;
import com.freemud.application.sdk.api.ordercenter.request.OrderConditionsReq; import com.freemud.application.sdk.api.ordercenter.request.OrderConditionsReq;
import com.freemud.application.sdk.api.ordercenter.request.OrderExtInfoDto; import com.freemud.application.sdk.api.ordercenter.request.OrderExtInfoDto;
import com.freemud.application.sdk.api.ordercenter.request.OrderExtendedReq; import com.freemud.application.sdk.api.ordercenter.request.OrderExtendedReq;
import com.freemud.application.sdk.api.ordercenter.request.OrderModifyRelatingCodeReq;
import com.freemud.application.sdk.api.ordercenter.request.carpark.ParkingOrderCreateReq; import com.freemud.application.sdk.api.ordercenter.request.carpark.ParkingOrderCreateReq;
import com.freemud.application.sdk.api.ordercenter.response.carpark.OrderResp; import com.freemud.application.sdk.api.ordercenter.response.carpark.OrderResp;
import com.freemud.application.sdk.api.ordercenter.response.BaseDownLoadResponse; import com.freemud.application.sdk.api.ordercenter.response.BaseDownLoadResponse;
...@@ -441,6 +442,17 @@ public class OrderServiceImpl implements Orderservice { ...@@ -441,6 +442,17 @@ public class OrderServiceImpl implements Orderservice {
//orderRefund(orderBean, "订单异常退款", openid, oid); //orderRefund(orderBean, "订单异常退款", openid, oid);
return gson.toJson(message); return gson.toJson(message);
} }
//获取生态缓存中的配置项,如果mealCodeRule的值不为空并且值等于2,则随机生成取参数,当日不重复
String mealCodeRule = redisCache.getValue("mealCodeRule");
if(!StringUtils.isEmpty(mealCodeRule) && "2".equalsIgnoreCase(mealCodeRule)){
//更新db中的取餐码,生成取餐码
OrderModifyRelatingCodeReq relatingCodeReq =new OrderModifyRelatingCodeReq();
relatingCodeReq.setOrderCode(orderBean.getOid());
relatingCodeReq.setOperator(orderBean.getCreateUser());
relatingCodeReq.setPartnerId(orderBean.getCompanyId());
relatingCodeReq.setPickUpGoodsNo(orderAdapter.generateTackCode(orderBean.getCompanyId(),orderBean.getShopId()));
orderCenterSdkService.updatePickUpGoodNo(relatingCodeReq, LogThreadLocal.getTrackingNo());
}
// TODO 订单序号替换取餐码显示 // TODO 订单序号替换取餐码显示
takeCode = payAccessResponse.getData().getTakeCode(); takeCode = payAccessResponse.getData().getTakeCode();
daySeq = payAccessResponse.getData().getDaySeq(); daySeq = payAccessResponse.getData().getDaySeq();
...@@ -1534,7 +1546,7 @@ public class OrderServiceImpl implements Orderservice { ...@@ -1534,7 +1546,7 @@ public class OrderServiceImpl implements Orderservice {
} }
} }
if (OrderStatus.COMPLETE.getCode().equals(orderBean.getStatus())) { if (OrderStatus.COMPLETE.getCode().equals(orderBean.getStatus())) {
boolean refundButton = this.orderAdapter.checkRefundButton(queryOrderByIdResponse.getData(), userInfo.getWxAppId()); boolean refundButton = orderAdapter.checkRefundButton(queryOrderByIdResponse.getData(), userInfo.getWxAppId());
if (!refundButton) { if (!refundButton) {
return ResponseUtil.error(ResponseResult.ORDER_NOT_ALLOW_REFUND.getCode(), ResponseResult.ORDER_NOT_ALLOW_REFUND.getMessage()); return ResponseUtil.error(ResponseResult.ORDER_NOT_ALLOW_REFUND.getCode(), ResponseResult.ORDER_NOT_ALLOW_REFUND.getMessage());
} }
......
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