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;
import org.apache.commons.lang.time.FastDateFormat;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.data.redis.core.RedisTemplate;
import org.springframework.stereotype.Component;
import java.awt.geom.Point2D;
......@@ -81,7 +82,9 @@ import java.math.BigDecimal;
import java.security.NoSuchAlgorithmException;
import java.security.spec.InvalidKeySpecException;
import java.text.DecimalFormat;
import java.text.SimpleDateFormat;
import java.util.*;
import java.util.concurrent.TimeUnit;
import java.util.function.Function;
import java.util.stream.Collectors;
......@@ -90,6 +93,11 @@ import static cn.freemud.constant.OrderRefundConstant.ALLOW_REFUND;
@Component
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 String SPMCHID = "1237482502";
......@@ -126,6 +134,9 @@ public class OrderAdapter {
private static Gson gson = new Gson();
@Autowired
private RedisTemplate redisTemplate;
/**
* @param createOrderVo
* @param shoppingCartGoodsDto
......@@ -3181,4 +3192,77 @@ public class OrderAdapter {
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;
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.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.response.carpark.OrderResp;
import com.freemud.application.sdk.api.ordercenter.response.BaseDownLoadResponse;
......@@ -441,6 +442,17 @@ public class OrderServiceImpl implements Orderservice {
//orderRefund(orderBean, "订单异常退款", openid, oid);
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 订单序号替换取餐码显示
takeCode = payAccessResponse.getData().getTakeCode();
daySeq = payAccessResponse.getData().getDaySeq();
......@@ -1534,7 +1546,7 @@ public class OrderServiceImpl implements Orderservice {
}
}
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) {
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