Initial commit

This commit is contained in:
南宁网宿科技
2023-06-03 23:56:49 +08:00
commit 912944faea
821 changed files with 74279 additions and 0 deletions

View File

@@ -0,0 +1,384 @@
package com.gxwebsoft.apps.controller;
import cn.hutool.core.util.NumberUtil;
import cn.hutool.core.util.StrUtil;
import com.alibaba.fastjson.JSON;
import com.alibaba.fastjson.JSONObject;
import com.gxwebsoft.apps.entity.HualalaFood;
import com.gxwebsoft.apps.entity.HualalaFoodCategory;
import com.gxwebsoft.apps.entity.HualalaShop;
import com.gxwebsoft.apps.entity.ItemVo;
import com.gxwebsoft.apps.param.*;
import com.gxwebsoft.apps.result.AllShopResult;
import com.gxwebsoft.apps.result.FoodCategoryResult;
import com.gxwebsoft.apps.result.OpenFoodResult;
import com.gxwebsoft.apps.result.ShopBaseInfoResult;
import com.gxwebsoft.apps.service.HualalaFoodCategoryService;
import com.gxwebsoft.apps.service.HualalaFoodService;
import com.gxwebsoft.apps.service.HualalaService;
import com.gxwebsoft.apps.service.HualalaShopService;
import com.gxwebsoft.common.core.utils.CacheClient;
import com.gxwebsoft.common.core.utils.CommonUtil;
import com.gxwebsoft.common.core.utils.JSONUtil;
import com.gxwebsoft.common.core.web.ApiResult;
import com.gxwebsoft.common.core.web.BaseController;
import com.gxwebsoft.shop.entity.Merchant;
import com.gxwebsoft.shop.entity.Order;
import com.gxwebsoft.shop.entity.OrderGoods;
import com.gxwebsoft.shop.mapper.OrderGoodsMapper;
import com.gxwebsoft.shop.param.MerchantParam;
import com.gxwebsoft.shop.param.OrderParam;
import com.gxwebsoft.shop.service.OrderGoodsService;
import com.gxwebsoft.shop.service.OrderService;
import io.swagger.annotations.Api;
import io.swagger.annotations.ApiOperation;
import lombok.val;
import org.springframework.data.geo.Point;
import org.springframework.data.redis.core.StringRedisTemplate;
import org.springframework.http.HttpStatus;
import org.springframework.http.ResponseEntity;
import org.springframework.security.access.prepost.PreAuthorize;
import org.springframework.web.bind.annotation.*;
import org.springframework.web.client.RestTemplate;
import javax.annotation.Resource;
import java.text.SimpleDateFormat;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import java.util.concurrent.TimeUnit;
import java.util.stream.Collectors;
import static com.gxwebsoft.common.core.constants.RedisConstants.*;
/**
* 哗啦啦接口
* 桂小厨GO
* AppID:wx445232847c503f1b
* AppSecret:eb81fbcac21da949d819143b43d18636
* 桂小厨+
* AppID:wx445232847c503f1b
* AppSecret:eb81fbcac21da949d819143b43d18636
* @author 科技小王子
* @since 2022-11-25 12:55:33
*/
@Api(tags = "哗啦啦接口")
@RestController
@RequestMapping("/api/apps/hualala")
public class HualalaController extends BaseController {
@Resource
private HualalaService hualalaService;
@Resource
private HualalaShopService hualalaShopService;
@Resource
private StringRedisTemplate stringRedisTemplate;
@Resource
private CacheClient cacheClient;
@Resource
private HualalaFoodService hualalaFoodService;
@Resource
private HualalaFoodCategoryService hualalaFoodCategoryService;
@Resource
private OrderService orderService;
@Resource
private OrderGoodsService orderGoodsService;
@Resource
private OrderGoodsMapper orderGoodsMapper;
@ApiOperation("哗啦啦万能接口")
@PostMapping()
public ApiResult<?> post(@RequestBody HualalaParam hualalaParam) {
// 接口
String apiUrl = hualalaParam.getApiUrl();
// 请求参数
HashMap<String, Object> params = hualalaParam.getParams();
// 执行请求
JSONObject response = hualalaService.doPost(apiUrl, params);
return success("请求成功",response);
}
@ApiOperation("查询集团店铺列表")
@PostMapping("/getAllShop")
public ApiResult<?> getAllShop(@RequestBody Map<String, Object> params) {
// 请求缓存数据
AllShopResult cache = cacheClient.get(getAllShop, AllShopResult.class);
if(cache != null){
return success("请求成功",cache.getShopInfoList());
}
// 执行请求解析data数据
JSONObject response = hualalaService.doPost("/doc/getAllShop", params);
AllShopResult result = JSONObject.parseObject(response.getString("data"), AllShopResult.class);
cacheClient.set(getAllShop,result);
List<HualalaShop> shopInfoList = result.getShopInfoList();
// 过滤非桂小厨品牌门店
List<HualalaShop> shops = shopInfoList.stream().filter(d -> d.getBrandName().equals("桂小厨")).collect(Collectors.toList());
shops.forEach(d -> {
d.setCreateTime(null);
d.setTenantId(getTenantId());
cacheClient.geoAdd(haulalaGeoKey,d.getMapLongitudeValueBaiDu(),d.getMapLatitudeValueBaiDu(),d.getShopId().toString());
});
hualalaShopService.saveBatch(shops);
return success("缓存成功",shops);
// try {
// // 执行请求解析data数据
// JSONObject response = hualalaService.doPost("/doc/getAllShop", params);
// AllShopResult result = JSONObject.parseObject(response.getString("data"), AllShopResult.class);
// cacheClient.set(getAllShop,result,1L,TimeUnit.DAYS);
// return success("请求成功",result);
// } catch (Exception e) {
// throw new RuntimeException();
// }
}
@ApiOperation("查询店铺信息")
@PostMapping("/getBaseInfo")
public ApiResult<?> getBaseInfo(@RequestBody Map<String, Object> params) {
// 请求缓存数据
String key = getBaseInfo.concat(":").concat(params.get("shopId").toString());
Merchant merchant = cacheClient.get(key, Merchant.class);
if(merchant != null){
return success("请求成功",merchant);
}
try {
// 执行请求解析data数据
JSONObject response = hualalaService.doPost("/doc/getBaseInfo", params);
ShopBaseInfoResult result = JSONObject.parseObject(response.getString("data"), ShopBaseInfoResult.class);
cacheClient.set(key,result);
return success("缓存成功",result);
} catch (Exception e) {
throw new RuntimeException();
}
}
@ApiOperation("查询店铺菜品分类")
@PostMapping("/getFoodClassCategory")
public ApiResult<?> getFoodClassCategory(@RequestBody Map<String, Object> params) {
// 只查询外卖菜品
params.put("type",1);
// 请求缓存数据
String key = getFoodClassCategory.concat(":").concat(params.get("shopId").toString());
FoodCategoryResult cache = cacheClient.get(key, FoodCategoryResult.class);
if(cache != null){
return success("请求成功",cache);
}
try {
// 执行请求解析data数据
JSONObject response = hualalaService.doPost("/doc/getFoodClassCategory", params);
FoodCategoryResult result = JSONObject.parseObject(response.getString("data"), FoodCategoryResult.class);
cacheClient.set(key,result);
return success("缓存成功",result);
} catch (Exception e) {
throw new RuntimeException();
}
}
@ApiOperation("查询店铺菜品列表")
@PostMapping("/getOpenFood")
public ApiResult<?> getOpenFood(@RequestBody Map<String, Object> params) {
// 请求缓存数据
String key = getOpenFood.concat(":").concat(params.get("shopId").toString());
OpenFoodResult cache = cacheClient.get(key, OpenFoodResult.class);
if(cache != null){
// 计算加入购物车的商品数量
List<HualalaFood> foodList = cache.getFoodList();
foodList.forEach(d -> {
String cartKey = HLL_CART_FOOD_KEY.concat(d.getShopId()).concat(":").concat(getLoginUserId().toString());
ItemVo item = cacheClient.hGet(cartKey, d.getFoodId(), ItemVo.class);
if(item != null){
d.setCartNum(item.getNum());
}
});
// List<HualalaFood> foods = CommonUtil.toTreeData(cache.getFoodList(), null, HualalaFood::getParentFoodId, HualalaFood::getFoodOnlineCategoryId, HualalaFood::setChildren);
Map<String, List<HualalaFood>> collect = foodList.stream().collect(Collectors.groupingBy(HualalaFood::getFoodOnlineCategoryId));
return success("请求成功",collect);
}
// 执行请求解析当前店铺的菜品数据
JSONObject response = hualalaService.doPost("/doc/getOpenFood", params);
OpenFoodResult result = JSONObject.parseObject(response.getString("data"), OpenFoodResult.class);
// 筛选出外卖菜品
List<HualalaFood> foodList = result.getFoodList();
List<HualalaFood> foodList2 = foodList.stream().filter(d -> d.getTakeawayTag().equals("2")).collect(Collectors.toList());
// 筛选出可以点单的菜品
List<HualalaFood> foods = foodList2.stream().filter(d -> d.getIsSingleSale().equals(1)).collect(Collectors.toList());
// 存入redis
result.setFoodList(foods);
result.setCount(foods.size());
cacheClient.set(key,result);
hualalaFoodService.saveBatch(foods);
return success("缓存成功",result.getFoodList());
}
// @ApiOperation("查询店铺菜品列表(备份)")
// @PostMapping("/getOpenFood2")
// public ApiResult<?> getOpenFood2(@RequestBody Map<String, Object> params) {
// // 请求缓存数据
// String key = getOpenFood.concat(":").concat(params.get("shopId").toString());
// OpenFoodResult cache = cacheClient.get(key, OpenFoodResult.class);
// if(cache != null){
// // 计算加入购物车的商品数量
// List<HualalaFood> foodList = cache.getFoodList();
// foodList.forEach(d -> {
// String cartKey = HLL_CART_FOOD_KEY.concat(d.getShopId()).concat(":").concat(getLoginUserId().toString());
// ItemVo item = cacheClient.hGet(cartKey, d.getFoodId(), ItemVo.class);
// if(item != null){
// d.setCartNum(item.getNum());
// }
// });
// return success("请求成功",foodList);
// }
// try {
// // 执行请求解析当前店铺的菜品数据
// JSONObject response = hualalaService.doPost("/doc/getOpenFood", params);
// OpenFoodResult result = JSONObject.parseObject(response.getString("data"), OpenFoodResult.class);
// // 筛选出外卖菜品
// List<HualalaFood> foodList = result.getFoodList();
// List<HualalaFood> foodList2 = foodList.stream().filter(d -> d.getTakeawayTag().equals("2")).collect(Collectors.toList());
// // 筛选出可以点单的菜品
// List<HualalaFood> foods = foodList2.stream().filter(d -> d.getIsSingleSale().equals(1)).collect(Collectors.toList());
// // 存入redis
// result.setFoodList(foods);
// result.setCount(foods.size());
// cacheClient.set(key,result);
// return success("缓存成功",result.getFoodList());
// } catch (Exception e) {
// throw new RuntimeException();
// }
// }
@PreAuthorize("hasAuthority('apps:hualala:list')")
@ApiOperation("保存菜品到redis已废弃")
@PostMapping("/setOpenFoodToRedis")
public ApiResult<?> setOpenFoodToRedis(@RequestBody HualalaFoodParam food) {
System.out.println("food = " + food);
String key = "cache:getOpenFood:shop-"+food.getShopId()+":category-"+food.getFoodCategoryCode()+":"+food.getFoodId();
// stringRedisTemplate.opsForHash().put(key,food.getFoodId(),food.getData().toString());
return success("请求成功",food);
// 请求缓存数据
// String key = getOpenFood + params.get("shopId");
// String jsonStr = stringRedisTemplate.opsForValue().get(key);
// if(StrUtil.isNotBlank(jsonStr)){
// return success("请求成功",JSON.parseObject(jsonStr));
// }
// try {
// // 执行请求解析data数据
// JSONObject response = hualalaService.doPost("/doc/getOpenFood", params);
// stringRedisTemplate.opsForValue().set(key, response.getString("data"),1,TimeUnit.DAYS);
// return success("请求成功",JSON.parseObject(response.getString("data")));
// } catch (Exception e) {
// throw new RuntimeException();
// }
}
@ApiOperation("根据定位查询附近的门店列表")
@PostMapping("/getListByGeo")
public ApiResult<List<HualalaShop>> getListByGeo(@RequestBody HualalaShopParam param) {
return success(hualalaShopService.listByGeo(param));
}
@PreAuthorize("hasAuthority('apps:hualala:list')")
@ApiOperation("把商户坐标写入redis缓存")
@PostMapping("/geoAdd")
public ApiResult<?> geoAdd(){
String key1 = "shop:geo:guixiaochu";
stringRedisTemplate.opsForGeo().add(key1,new Point(108.321614,22.815124),"76230180");
stringRedisTemplate.opsForGeo().add(key1,new Point(108.335703,22.813917),"76230181");
stringRedisTemplate.opsForGeo().add(key1,new Point(108.370343,22.830116),"76230179");
stringRedisTemplate.opsForGeo().add(key1,new Point(108.292017,22.869498),"76258872");
stringRedisTemplate.opsForGeo().add(key1,new Point(108.393005,22.81194),"76230126");
stringRedisTemplate.opsForGeo().add(key1,new Point(108.325202,22.785341),"76230178");
return success("添加完毕");
}
@ApiOperation("推送订单")
@PostMapping("/pushOrder")
public ApiResult<?> pushOrder(@RequestBody OrderParam param){
Integer orderId = param.getOrderId();
Order orderInfo = orderService.getById(orderId);
System.out.println("orderInfo = " + orderInfo);
final List<OrderGoods> goodsInfo = orderGoodsMapper.selectByOrderId(orderId);
System.out.println("goodsInfo = " + goodsInfo);
// 菜品信息
ArrayList<Object> orderItem = new ArrayList<>();
goodsInfo.forEach(goods -> {
JSONObject item = new JSONObject();
item.put("foodID",goods.getGoodsId()); // 菜品id
item.put("foodName",goods.getGoodsName()); // 菜品名称
item.put("foodUnit",""); // 规格名称
item.put("foodUnitID",goods.getGoodsSkuId()); // 菜品规格id
item.put("isSetFood",0); // 是/否套餐0非套餐 1套餐
item.put("isBatching",0); // 0正常菜1主菜2配菜3加价做法
item.put("foodCount",goods.getTotalNum()); // 菜品数量
item.put("originPrice",goods.getTotalPrice()); // 菜品原价
item.put("takeoutPackagingFee","0"); // 打包费
item.put("isDiscount",0); // 是/否打折 0不是 1
item.put("duePrice",goods.getTotalPrice()); // TODO 菜品成售价
orderItem.add(item);
});
// 支付信息
ArrayList<Object> payInfo = new ArrayList<>();
JSONObject payItem = new JSONObject();
payItem.put("paymentSubjectID",Long.valueOf("51010440")); // 科目id
payItem.put("paymentSubjectName","微信小程序实收"); // 科目名称
payItem.put("dueAmount",orderInfo.getPayPrice()); // TODO 实收金额
payItem.put("paymentStatus",20); // 支付状态15未支付20已支付
payItem.put("payWay",70); // 支付方式70商家自定义科目
payInfo.add(payItem);
// 用户信息
JSONObject userInfo = new JSONObject();
userInfo.put("userName","邓莉莉");
userInfo.put("userMobile","15878179339");
userInfo.put("shopMpID","wxa4e2b8bc9c14c743");
userInfo.put("userSex","0"); // 用户性别, 1:先生 0:女士 2:不显示不传默认0 女士
// 订单信息
JSONObject order = new JSONObject();
order.put("orderSubType",20); // 订单类型 20: 外送
order.put("orderStatus",20); // 订单状态 20已付款
order.put("discountTotalAmount","0"); // TODO 优惠金额
order.put("dinners",1); // 用餐人数
// 期望送达时间
SimpleDateFormat sdf1 = new SimpleDateFormat("yyyyMMddHHmm");
order.put("orderTime",sdf1.format(orderInfo.getCreateTime()));
order.put("orderItem",orderItem); // 菜品信息
order.put("takeoutAddress","南宁市良庆区五象大道401号五象航洋城1号楼1226室"); // TODO 外送地址
order.put("deliveryAmount","8.00"); // TODO 配送费
order.put("serviceAmount","0"); // 服务费必传0
order.put("channelKey","399_weixin"); // 渠道:微信小程序
order.put("isAlreadyPaid","1"); // 是/否支付
order.put("orderMode",1); // 1先付2后付
order.put("OrderRemark","测试订单(不需要制作及发货)"); // TODO 订单备注
order.put("payment",payInfo); // 支付信息
order.put("userInfo",userInfo); // 用户信息
HashMap<String,Object> params = new HashMap<>();
params.put("shopID",Long.valueOf("76220517")); // 店铺ID
params.put("isCheackOut",0); // 0 :默认 不需要收银台数据 1 需要收银台数据
params.put("isThirdPay",2); // 只有单纯核销哗啦啦会员卡时传1其它都传2
params.put("bankCode","weChat"); // 支付方式weChat微信 aliPay支付宝非哗啦啦支付传weChat
params.put("order",order); // 订单信息
params.put("isSentMsg",1); // 下单后pos是/否显示订单下单带支付科目信息先付传1下单不带支付科目信息先付传0后付传1
params.put("msgType",120); // 消息类型240 堂食、闪吃120外送121自提 与order中orderSubType要对应
params.put("thirdOrderID",orderInfo.getOrderNo()); // 三方订单号作用十分钟内对相同的thirdOrderID进行去重处理仅开放平台使用做去重处理不会传到pos及报表
// 执行订单推送
// JSONObject response = hualalaService.doPost("/order/submitordernew", params);
// System.out .println("response = " + response);
// 同步配送平台
// JSONObject result = hualalaService.doExpress(orderInfo);
return success("推送成功",null);
}
}