Pārlūkot izejas kodu

Merge branch 'mp-server-test' into 'master'

Mp server test

See merge request quanshu/mp-server!205
zhong chunping 3 gadi atpakaļ
vecāks
revīzija
609f665432

+ 75 - 0
mp-admin/src/main/java/com/qs/mp/web/controller/api/admin/GoodsMgrController.java

@@ -1,5 +1,6 @@
 package com.qs.mp.web.controller.api.admin;
 
+import com.alibaba.fastjson.JSONArray;
 import com.alibaba.fastjson.JSONObject;
 import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
 import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
@@ -22,7 +23,12 @@ import ma.glasnost.orika.MapperFacade;
 
 import java.net.URLDecoder;
 import java.util.ArrayList;
+import java.util.HashMap;
+import java.util.Iterator;
 import java.util.List;
+import java.util.Map;
+import java.util.stream.Collectors;
+
 import org.apache.commons.lang3.StringUtils;
 import org.springframework.beans.BeanUtils;
 import org.springframework.beans.factory.annotation.Autowired;
@@ -156,6 +162,7 @@ public class GoodsMgrController extends BaseApiController {
 		}
 		// 3.插入数据
 		try {
+			goods.setSkuProp(getSkuProp(skuList));
 			goodsService.saveGoods(goods, skuList);
 		} catch (Exception e) {
 			return AjaxResult.error("商品'" + goods.getTitle() + "'新增失败" + e.getMessage());
@@ -213,6 +220,7 @@ public class GoodsMgrController extends BaseApiController {
 		}
 		// 3.插入数据
 		try {
+			goods.setSkuProp(getSkuProp(skuList));
 			goodsService.updateGoods(goods, skuList);
 		} catch (Exception e) {
 			return AjaxResult.error("商品'" + goods.getTitle() + "'新增失败" + e.getMessage());
@@ -220,6 +228,73 @@ public class GoodsMgrController extends BaseApiController {
 		return AjaxResult.success("商品'" + goods.getTitle() + "'新增成功");
 	}
 
+	// 获取商品的sku
+	public String getSkuProp(List<GoodsSku> skuList) {
+		List<Map<String,Object>> skuMapList = new ArrayList<Map<String,Object>>();
+		if(null != skuList && skuList.size() > 0) {
+			for(GoodsSku sku : skuList) {
+				if(null != sku && StringUtils.isNotBlank(sku.getProperties())) {
+					String[] skuAry = sku.getProperties().split(";");
+					if(null != skuAry && skuAry.length > 0) {
+						for (int i = 0; i < skuAry.length; i++) {
+							String item = skuAry[i];
+							String[] itemAry = item.split(":");
+							if(null != itemAry && itemAry.length > 1) {
+								String key = itemAry[0];
+								Object value = itemAry[1];
+								Map<String,Object> map = new HashMap<String,Object>();
+								map.put(key,value);
+								skuMapList.add(map);
+							}
+						}
+					}
+				}
+			}
+		}
+		if(null != skuMapList && skuMapList.size() > 0) {
+			// 合并key相同的Map
+			Map<String,Object> map = skuMapList.stream().flatMap(m -> m.entrySet().stream())
+		              .collect(Collectors.toMap(Map.Entry::getKey, Map.Entry::getValue, (a, b) -> getObjValue(a,b)));
+			
+			List<Map<String,Object>> mapList=new ArrayList<>(); 
+			for (Map.Entry<String, Object> entry : map.entrySet()) {
+				String key = entry.getKey();
+				Object value = entry.getValue();
+				Map<String, Object> mapObj = new HashMap<String, Object>();
+				mapObj.put("name", key);
+				if (value instanceof List<?>) {
+					mapObj.put("value", value);
+				} else {
+					List<Object> list = new ArrayList<>();
+					list.add(value + "");
+					mapObj.put("value", list);
+				}
+				mapList.add(mapObj);
+			}
+			return JSONArray.toJSONString(mapList);
+		}
+		return null;
+	}
+	
+	
+	private Object getObjValue(Object a, Object b){
+		boolean isa = (a instanceof List<?>);
+		boolean isb = (b instanceof List<?>);
+		System.out.println("isa == " + isa);
+		System.out.println("isb == " + isb);
+		List<Object> list = new ArrayList<>();
+		if (isa) {
+			list.addAll((List<?>) a);
+		} else {
+			list.add(a+"");
+		}
+		if (isb) {
+			list.addAll((List<?>) b);
+		} else {
+			list.add(b+"");
+		}
+		return list.stream().distinct().collect(Collectors.toList());
+	}
 
 
 	/**

+ 12 - 2
mp-admin/src/main/java/com/qs/mp/web/controller/api/channel/mall/ChannelOrderController.java

@@ -5,6 +5,9 @@ import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
 import com.qs.mp.admin.domain.TicketBox;
 import com.qs.mp.admin.service.ITicketBoxService;
 import com.qs.mp.channel.domain.Channel;
+import com.qs.mp.common.utils.StringUtils;
+import com.qs.mp.system.domain.SysUser;
+import com.qs.mp.system.service.ISysUserService;
 import com.qs.mp.user.domain.UserAddr;
 import com.qs.mp.channel.domain.ChannelCart;
 import com.qs.mp.channel.domain.ChannelOrder;
@@ -77,6 +80,9 @@ public class ChannelOrderController extends BaseApiController {
   @Autowired
   private IChannelService channelService;
 
+  @Autowired
+  private ISysUserService sysUserService;
+
   @Autowired
   private RedisCache redisCache;
 
@@ -218,11 +224,15 @@ public class ChannelOrderController extends BaseApiController {
   @PostMapping("/order/pay")
   @ApiOperation(value = "订单支付" , notes = "在订单列表页面支付")
   public AjaxResult pay(@Valid @RequestBody OrderPayParam param) {
-    String openId = SecurityUtils.getLoginUser().getUser().getChannelOpenId();
+    Long userId = SecurityUtils.getLoginUser().getUserId();
+    SysUser sysUser = sysUserService.selectUserById(userId);
+    if (StringUtils.isBlank(sysUser.getChannelOpenId())) {
+      return AjaxResult.error(ErrorCodeEnum.ERROR_CODE_1005);
+    }
     ChannelOrder channelOrder = channelOrderService.getById(param.getOrderId());
     JSONObject jsonObject;
     try {
-      jsonObject = walletService.pay(BizTypeEnum.CHANNEL_ORDER, param.getOrderId(), openId, channelOrder.getPayAmt());
+      jsonObject = walletService.pay(BizTypeEnum.CHANNEL_ORDER, param.getOrderId(), sysUser.getChannelOpenId(), channelOrder.getPayAmt());
     }catch (ServiceException e) {
       return AjaxResult.error(e.getMessage());
     }

+ 2 - 2
mp-admin/src/main/java/com/qs/mp/web/controller/api/common/UserController.java

@@ -119,7 +119,7 @@ public class UserController extends BaseApiController {
       return error("登录失败");
     }
     //更新数据库用户授权信息
-    LoginUser loginUser = hostHolder.getUser();
+    LoginUser loginUser = SecurityUtils.getLoginUser();
     SysUser user = new SysUser();
     user.setUserId(loginUser.getUserId());
     if (wxLoginParams.getIdentity() == UserIdentityEnum.USER.ordinal()) {
@@ -233,7 +233,7 @@ public class UserController extends BaseApiController {
    */
   @RequestMapping(value = "/user/getLoginUserinfo", method = RequestMethod.POST)
   public AjaxResult getLoginUserinfo(@RequestBody JSONObject params) {
-    LoginUser loginUser = hostHolder.getUser();
+    LoginUser loginUser = SecurityUtils.getLoginUser();
 
     JSONObject jsonObject = new JSONObject();
     jsonObject.put("userName", loginUser.getUsername());

+ 12 - 2
mp-admin/src/main/java/com/qs/mp/web/controller/api/user/UserTicketOrderController.java

@@ -14,10 +14,13 @@ import com.qs.mp.common.core.domain.AjaxResult;
 import com.qs.mp.common.core.redis.RedisCache;
 import com.qs.mp.common.enums.BizTypeEnum;
 import com.qs.mp.common.enums.CouponUseAreaEnum;
+import com.qs.mp.common.enums.ErrorCodeEnum;
 import com.qs.mp.common.exception.ServiceException;
 import com.qs.mp.common.utils.StringUtils;
 import com.qs.mp.framework.redis.RedisKey;
 import com.qs.mp.pay.service.IWalletService;
+import com.qs.mp.system.domain.SysUser;
+import com.qs.mp.system.service.ISysUserService;
 import com.qs.mp.user.domain.UserTicketOrder;
 import com.qs.mp.user.domain.param.TicketOrderParam;
 import com.qs.mp.user.domain.vo.TicketOrderSettleVO;
@@ -66,6 +69,9 @@ public class UserTicketOrderController extends BaseApiController {
   @Autowired
   private IWalletService walletService;
 
+  @Autowired
+  private ISysUserService sysUserService;
+
   @Autowired
   private MapperFacade mapperFacade;
 
@@ -181,11 +187,15 @@ public class UserTicketOrderController extends BaseApiController {
   @PostMapping("/order/pay")
   @ApiOperation(value = "订单支付" , notes = "在盲票页面支付")
   public AjaxResult pay(@Valid @RequestBody OrderPayParam param) {
-    String openId = SecurityUtils.getLoginUser().getUser().getOpenId();
+    Long userId = SecurityUtils.getLoginUser().getUserId();
+    SysUser sysUser = sysUserService.selectUserById(userId);
+    if (StringUtils.isBlank(sysUser.getOpenId())) {
+      return AjaxResult.error(ErrorCodeEnum.ERROR_CODE_1005);
+    }
     UserTicketOrder ticketOrder = userTicketOrderService.getById(param.getOrderId());
     JSONObject jsonObject;
     try {
-      jsonObject = walletService.pay(BizTypeEnum.TICKET_ORDER, param.getOrderId(), openId, ticketOrder.getPayAmt());
+      jsonObject = walletService.pay(BizTypeEnum.TICKET_ORDER, param.getOrderId(), sysUser.getOpenId(), ticketOrder.getPayAmt());
     }catch (ServiceException e) {
       return AjaxResult.error(e.getMessage());
     }

+ 6 - 0
mp-admin/src/test/java/com/qs/mp/service/ServiceImplTest.java

@@ -36,6 +36,12 @@ public class ServiceImplTest {
 
   }
 
+  @Test
+  public void testGenerateShortUrl() {
+    System.out.println(wxUrlLinkService.generate("", "", "wxc3a684f1196f6e15"));
+
+  }
+
   @Test
   public void testGenerateUrlSchema() {
     System.out.println(wxUrlLinkService.generateUrlSchema("/pages/login/invitation", "", "wxc3a684f1196f6e15"));

+ 83 - 0
mp-service/src/main/java/com/qs/mp/admin/domain/Goods.java

@@ -1,5 +1,6 @@
 package com.qs.mp.admin.domain;
 
+import com.alibaba.fastjson.JSONArray;
 import com.alibaba.fastjson.annotation.JSONField;
 import com.alibaba.fastjson.serializer.SerializerFeature;
 import com.baomidou.mybatisplus.annotation.IdType;
@@ -9,8 +10,16 @@ import com.baomidou.mybatisplus.annotation.TableLogic;
 import com.baomidou.mybatisplus.annotation.TableName;
 import com.qs.mp.common.enums.GoodsStatusEnum;
 
+
 import java.io.Serializable;
+import java.util.ArrayList;
 import java.util.Date;
+import java.util.HashMap;
+import java.util.List;
+import java.util.Map;
+import java.util.Set;
+import java.util.stream.*;
+
 import lombok.Data;
 
 /**
@@ -134,6 +143,80 @@ public class Goods implements Serializable {
    */
   @TableField("updated_time")
   private Date updatedTime;
+  
+  public static void main(String[] args) {
+	  List<Map<String,Object>> lists=new ArrayList<>();
+	  Map<String,Object> map1 = new HashMap<String,Object>();
+	  map1.put("大小", 1);
+	  lists.add(map1);
+	  Map<String,Object> map2 = new HashMap<String,Object>();
+	  map2.put("大小", 2);
+	  lists.add(map2);
+	  Map<String,Object> map3 = new HashMap<String,Object>();
+	  map3.put("名字", "胜多负少");
+	  lists.add(map3);
+	  
+	  Map<String,Object> map4 = new HashMap<String,Object>();
+	  map4.put("大小", 4);
+	  lists.add(map4);
+	  
+	  System.out.println(lists.toString());
+	  
+	  Map<String,Object> map = lists.stream().flatMap(m -> m.entrySet().stream())
+              .collect(Collectors.toMap(Map.Entry::getKey, Map.Entry::getValue, (a, b) -> getObjValue(a,b))); 
+	  
+	  System.out.println(map.toString());
+	  
+	  List<Map<String,Object>> mapList=new ArrayList<>(); 
+	  
+	  for(Map.Entry<String, Object> entry:map.entrySet()) {
+          //map.entrySet()  返回此映射中包含的映射关系的Set视图
+          //Map.Entry<Integer, String> 映射项 (键值对)
+		  String key = entry.getKey();
+		  Object value = entry.getValue();
+          System.out.println("key="+entry.getKey()+" value="+entry.getValue());
+
+          
+          Map<String,Object> mapObj = new HashMap<String,Object>();
+          mapObj.put("name", key);
+          mapObj.put("value", value);
+          mapList.add(mapObj);
+      }
+	  
+	  System.out.println(JSONArray.toJSONString(mapList));
+	  
+}
+  
+ 
+  
+  static Object getObjValue(Object a, Object b){
+		boolean isa = (a instanceof List<?>);
+		boolean isb = (b instanceof List<?>);
+		System.out.println("isa == " + isa);
+		System.out.println("isb == " + isb);
+		List<Object> list = new ArrayList<>();
+		if (isa) {
+			list.addAll((List<Object>) a);
+		} else {
+			list.add(a+"");
+		}
+		if (isb) {
+			list.addAll((List<Object>) b);
+		} else {
+			list.add(b+"");
+		}
+	  return list;
+	  
+  }
+  
+  
+  public static boolean isArray(Object obj) {
+      if (obj == null) {
+          return false;
+      }
+
+      return obj.getClass().isArray();
+  }
 
 
 }

+ 6 - 0
mp-service/src/main/java/com/qs/mp/admin/domain/vo/GoodsListVO.java

@@ -58,6 +58,12 @@ public class GoodsListVO {
    * 已兑换量
    */
   private Integer exchangedQty;
+  
+  /**
+   * 规格描述
+   */
+  private String skuProp;
+
 
   /**
    * 上架状态;上架/下架

+ 6 - 1
mp-service/src/main/java/com/qs/mp/admin/domain/vo/GoodsVO.java

@@ -84,10 +84,15 @@ public class GoodsVO {
 	 */
 	private Integer multiSku;
 
+	/**
+	 * 规格描述
+	 */
+	private String skuProp;
+
 	/**
 	 * 上架状态;上架/下架
 	 */
-	 @JSONField(serialzeFeatures = SerializerFeature.WriteEnumUsingToString)
+	@JSONField(serialzeFeatures = SerializerFeature.WriteEnumUsingToString)
 	private GoodsStatusEnum status;
 
 	/**

+ 9 - 9
mp-service/src/main/java/com/qs/mp/framework/service/impl/AppTokenServiceImpl.java

@@ -37,23 +37,23 @@ public class AppTokenServiceImpl implements IAppTokenService {
 
   @Override
   public String getAccessToken(String appId) {
-    String cacheKey = RedisKey.build(RedisKey.WX_APP_TOKEN_KEY, appId);
+//    String cacheKey = RedisKey.build(RedisKey.WX_APP_TOKEN_KEY, appId);
 
-    boolean updateCache = false;
+//    boolean updateCache = false;
 
-    String appInfo = redis.get(cacheKey);
+//    String appInfo = redis.get(cacheKey);
     AppToken token = null;
-    if (StringUtils.isBlank(appInfo)) {
+//    if (StringUtils.isBlank(appInfo)) {
       token = selectByPrimaryKey(appId);
       if (null == token) {
         LogUtil.error(logger, "app_token记录不存在,appId:{0}", appId);
         throw new ServiceException();
       }
-      updateCache = true;
+      /*updateCache = true;
     } else {
       token = JSON.parseObject(appInfo, AppToken.class);
     }
-
+*/
     LogUtil.info(logger, "token: {0}", JSON.toJSONString(token));
     if (token.getExpireTimestamp().getTime() < System.currentTimeMillis()) {
       String res = wxGetAccessToken(appId, token.getAppSecret());
@@ -74,16 +74,16 @@ public class AppTokenServiceImpl implements IAppTokenService {
       // 防止时间不同步,此处提前100s超时
       token.setExpireTimestamp(DateUtils.addSeconds(new Date(), expiresIn - 100));
       appTokenMapper.updateByPrimaryKeySelective(token);
-      updateCache = true;
+ //     updateCache = true;
 
     }
-
+/*
     if (updateCache) {
       boolean result = redis.set(cacheKey, JSON.toJSONString(token));
       if (!result) {
         LogUtil.error(logger, "appsecret key set error.cacheKey:", cacheKey);
       }
-    }
+    }*/
 
     return token.getAccessToken();
   }

+ 5 - 5
mp-service/src/main/java/com/qs/mp/framework/service/impl/WxUrlLinkServiceImpl.java

@@ -45,10 +45,10 @@ public class WxUrlLinkServiceImpl implements IWxUrlLinkService {
     param.put("query", query);
     // 有效时间超过31天的 Link 或永久有效的 Link 为长期有效Link,
     // 单个小程序总共可生成长期有效 Link 上限为10万个,请谨慎调用
-    param.put("is_expire", true);
-    param.put("expire_type", 1);
-    param.put("expire_interval", 30);
-    // 云管铺小程序永久短链接https://wxaurl.cn/YL8D48CQbMr
+    param.put("is_expire", false);
+//    param.put("expire_type", 1);
+//    param.put("expire_interval", 30);
+    // 渠道端票赢天下小程序永久短链接https://wxaurl.cn/rNflbUVrTJn
     // 获取access_token
     String accessToken = appTokenService.getAccessToken(appId);
     String res = HttpUtils.sendPost(
@@ -100,7 +100,7 @@ public class WxUrlLinkServiceImpl implements IWxUrlLinkService {
     param.put("path", path + "?" + scene); // 页面路径
     //param.put("scene", scene); // 参数
 //    param.put("check_path", true);// 为 true 时 page 必须是已经发布的小程序存在的页面(否则报错);为 false 时允许小程序未发布或者 page 不存在
-    param.put("env_version", "trial");
+    param.put("env_version", "release");
     // 获取access_token
     String accessToken = appTokenService.getAccessToken(appId);
     InputStream in = HttpUtils.sendImagePost(