嗨森逛服务
You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
hai-server/hai-service/src/main/java/com/hai/service/impl/CommonServiceImpl.java

977 lines
33 KiB

package com.hai.service.impl;
import com.alibaba.fastjson.JSONArray;
import com.alibaba.fastjson.JSONObject;
import com.google.gson.JsonArray;
import com.google.gson.JsonObject;
import com.hai.common.exception.ErrorCode;
import com.hai.common.exception.ErrorHelp;
import com.hai.common.exception.SysCode;
import com.hai.common.utils.CoordCommonUtil;
import com.hai.common.utils.HttpsUtils;
import com.hai.config.CommonSysConst;
import com.hai.dao.*;
import com.hai.dao.order.OrderStatisticsMapperExt;
import com.hai.entity.*;
import com.hai.model.IndexCountModel;
import com.hai.model.LineCountModel;
import com.hai.model.MapStoreModel;
import com.hai.service.*;
import org.apache.commons.lang3.StringUtils;
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Propagation;
import org.springframework.transaction.annotation.Transactional;
import javax.annotation.Resource;
import java.math.BigDecimal;
import java.util.*;
import java.util.concurrent.locks.ReentrantLock;
import java.util.stream.Collectors;
@Service("iCommonService")
public class CommonServiceImpl implements CommonService {
private long READ_STEP = 30*60*1000; //半小时刷新一次缓存的字典数据
private ReentrantLock lock = new ReentrantLock();
private ReentrantLock regionLock = new ReentrantLock();
private long lastReadTime = 0;
private long regionLastReadTime = 0;
@Resource
private SecRegionMapper regionMapper;
@Resource
private SecDictionaryMapper dicMapper;
@Resource
private SecConfigService secConfigService;
@Resource
private HighUserService highUserService;
@Resource
private HighOrderService highOrderService;
@Resource
private BsProductPlatformMapper bsProductPlatformMapper;
@Resource
private BsProductDiscountMapper bsProductDiscountMapper;
@Resource
private BsProductPayTypeMapper bsProductPayTypeMapper;
@Resource
private ApiCityMapper apiCityMapper;
@Resource
private SecConfigMapper secConfigMapper;
@Resource
private HighMerchantStoreService merchantStoreService;
private Map<String, Map<String, SecDictionary>> dicCache = new HashMap<String, Map<String, SecDictionary>>();
private List<SecRegion> citiesCache = new ArrayList<>();
private Map<Long, List<SecRegion>> regionsCache = new HashMap<>();
private Map<Long,List<SecRegion>> streetCache = new HashMap<>();
private Map<Long,List<SecRegion>> communityCache = new HashMap<>();
private Map<Long, SecRegion> singleRegionCache = new HashMap<>();
@Override
public Map<String,Map<String, SecDictionary>> getDictionaries() {
refreshDic();
return dicCache;
}
/**
* @param codeType
* @param codeValue
* @throws
* @Title: getDictionary
* @Description: 精确查找数据字典值
* @author: 机器猫
* @param: @param codeType
* @param: @param codeValue
* @param: @return
* @param: @throws Exception
* @return: SysDictionary
*/
@Override
public String getDictionaryCodeName(String codeType, String codeValue) {
refreshDic();
if(StringUtils.isBlank(codeType)){
throw ErrorHelp.genException(SysCode.System, ErrorCode.REQ_PARAMS_ERROR, "");
}
Map<String, SecDictionary> m = dicCache.get(codeType);
if (null == m) {
return "";
}
SecDictionary sd = m.get(codeValue);
if (null == sd) {
return "";
}
return sd.getCodeName();
}
/**
* @param codeType
* @param codeValue
* @throws
* @Title: mappingSysCode
* @Description: 根据codetype,codevalue获取系统字典数据
* @author: 机器猫
* @param: @param codeType
* @param: @param codeValue
* @param: @return
* @param: @throws Exception
* @return: SysDictionary
*/
@Override
public SecDictionary mappingSysCode(String codeType, String codeValue) {
refreshDic();
if(StringUtils.isBlank(codeType)){
throw ErrorHelp.genException(SysCode.System, ErrorCode.REQ_PARAMS_ERROR, "");
}
Map<String, SecDictionary> m = dicCache.get(codeType);
if (null == m) {
return null;
}
SecDictionary sd = m.get(codeValue);
return sd;
}
@Override
public SecDictionary mappingSysName(String codeType, String codeName) {
refreshDic();
if(StringUtils.isBlank(codeType)){
throw ErrorHelp.genException(SysCode.System, ErrorCode.REQ_PARAMS_ERROR, "");
}
Map<String, SecDictionary> m = dicCache.get(codeType);
if (null == m) {
return null;
}
for(Map.Entry<String, SecDictionary> entry : m.entrySet()){
String mapKey = entry.getKey();
SecDictionary mapValue = entry.getValue();
if (mapValue.getCodeName().equals(codeName)) {
return mapValue;
}
}
return null;
}
/**
* 根据codeType获取该类的所有字典数据
*
* @param codeType
* @return
*/
@Override
public List<SecDictionary> getDictionarys(String codeType) {
refreshDic();
if (StringUtils.isEmpty(codeType)) {
throw ErrorHelp.genException(SysCode.System, ErrorCode.REQ_PARAMS_ERROR, "codeType is null");
}
Map<String, SecDictionary> maps = dicCache.get(codeType);
if (null == maps) {
return new ArrayList<>();
}
List<SecDictionary> rtn = new ArrayList<>();
rtn.addAll(maps.values());
return rtn;
}
@Override
public List<SecDictionary> getDictionarysAndExt(String codeType, String ext1) {
refreshDic();
if (StringUtils.isEmpty(codeType)) {
throw ErrorHelp.genException(SysCode.System, ErrorCode.REQ_PARAMS_ERROR, "codeType is null");
}
Map<String, SecDictionary> maps = dicCache.get(codeType);
if (null == maps) {
return new ArrayList<>();
}
List<SecDictionary> rtn = new ArrayList<>();
for(SecDictionary dictionary : maps.values()){
if (ext1.equals(dictionary.getExt1())) {
rtn.add(dictionary);
}
}
return rtn;
}
@Override
public List<JSONObject> getIdAndName(String codeType) {
refreshDic();
if (StringUtils.isEmpty(codeType)) {
throw ErrorHelp.genException(SysCode.System, ErrorCode.REQ_PARAMS_ERROR, "codeType is null");
}
Map<String, SecDictionary> maps = dicCache.get(codeType);
if (null == maps) {
return new ArrayList<>();
}
List<JSONObject> rtn = new ArrayList<>();
for(SecDictionary dictionary : maps.values()){
JSONObject jo = new JSONObject();
jo.put("codeValue",dictionary.getCodeValue());
jo.put("codeName",dictionary.getCodeName());
rtn.add(jo);
}
return rtn;
}
private void getDicFormDB(){
SecDictionaryExample example = new SecDictionaryExample();
example.createCriteria().andStatusEqualTo(1);
example.setOrderByClause(" sort_id asc");
List<SecDictionary> dicList = dicMapper.selectByExample(example);
for(SecDictionary dic : dicList){
if(dicCache.get(dic.getCodeType()) != null){
Map<String, SecDictionary> typeList = dicCache.get(dic.getCodeType());
typeList.put(dic.getCodeValue(), dic);
}else{
Map<String, SecDictionary> temp = new HashMap<String, SecDictionary>();
temp.put(dic.getCodeValue(), dic);
dicCache.put(dic.getCodeType(), temp);
}
}
lastReadTime = System.currentTimeMillis();
}
private void refreshDic() {
if (System.currentTimeMillis() - lastReadTime < READ_STEP) {
return;
}
if (lock.isLocked()) { //说明有线程已经在刷数据了
if (null != dicCache && dicCache.size() > 0) { //如果有数据说明已经初始化过了,直接返回老数据
return;
}
while (null == dicCache || dicCache.size()<1) { //说明初始化刷数据 等待10毫秒
try {
Thread.sleep(10);
//此处是否需要添加一个超时机制?
} catch (InterruptedException ie) {
//忽略
}
}
return;
}
try {
lock.lock();
if (System.currentTimeMillis() - lastReadTime < READ_STEP) {
return;
}
getDicFormDB();
} finally {
if (lock.isLocked()) {
lock.unlock();
}
}
}
@Override
public List<SecRegion> getCities() {
refreshRegion();
return citiesCache;
}
private void refreshRegion(){
if (System.currentTimeMillis() - regionLastReadTime < READ_STEP) {
return;
}
if (regionLock.isLocked()) { //说明有线程已经在刷数据了
if (null != dicCache && dicCache.size() > 0) { //如果有数据说明已经初始化过了,直接返回老数据
return;
}
while (null == dicCache || dicCache.size()<1) { //说明初始化刷数据 等待10毫秒
try {
Thread.sleep(10);
//此处是否需要添加一个超时机制?
} catch (InterruptedException ie) {
//忽略
}
}
return;
}
try {
regionLock.lock();
if (System.currentTimeMillis() - regionLastReadTime < READ_STEP) {
return;
}
getRegionFromDB();
} finally {
if (regionLock.isLocked()) {
regionLock.unlock();
}
}
}
private void getRegionFromDB(){
SecRegionExample example = new SecRegionExample();
example.createCriteria().andStatusEqualTo(1).andParentIdIsNull();
citiesCache = regionMapper.selectByExample(example);
for(SecRegion city : citiesCache){//市
singleRegionCache.put(city.getRegionId(), city);
List<SecRegion> regions = getRegions(city.getRegionId());
regionsCache.put(city.getRegionId(),regions);
for(SecRegion region : regions){//区
singleRegionCache.put(region.getRegionId(), region);
List<SecRegion> streets = getRegions(region.getRegionId());
streetCache.put(region.getRegionId(), streets);
for(SecRegion street : streets){
singleRegionCache.put(street.getRegionId(), street);
List<SecRegion> communities = getRegions(street.getRegionId());
communityCache.put(street.getRegionId(),communities);
for (SecRegion community : communities){
singleRegionCache.put(community.getRegionId(),community);
}
}
}
}
regionLastReadTime = System.currentTimeMillis();
}
private List<SecRegion> getRegions(Long parentId) {
SecRegionExample example = new SecRegionExample();
example.createCriteria().andStatusEqualTo(1).andParentIdEqualTo(parentId);
return regionMapper.selectByExample(example);
}
@Override
public List<SecRegion> getRegionsByParentId(Long parentId) {
if(parentId == null){
throw ErrorHelp.genException(SysCode.System, ErrorCode.REQ_PARAMS_ERROR);
}
refreshRegion();
if(null != regionsCache.get(parentId)){
return regionsCache.get(parentId);
}else if(null != streetCache.get(parentId)){
return streetCache.get(parentId);
}else if(null != communityCache.get(parentId)){
return communityCache.get(parentId);
}else{
return null;
}
}
@Override
public Map<String, SecRegion> getParentInfoByRegionId(Long regionId) {
if(regionId == null){
throw ErrorHelp.genException(SysCode.System, ErrorCode.REQ_PARAMS_ERROR);
}
refreshRegion();
Map<String, SecRegion> map = new HashMap<String, SecRegion>();
Stack<SecRegion> regionStack = getRegionStack(regionId,new Stack<>());
if (regionStack.size() == 4){
map.put("city",regionStack.pop());
map.put("region",regionStack.pop());
map.put("street",regionStack.pop());
map.put("community",regionStack.pop());
}else if (regionStack.size() == 3){
map.put("city",regionStack.pop());
map.put("region",regionStack.pop());
map.put("street",regionStack.pop());
}else if (regionStack.size() == 2){
map.put("city",regionStack.pop());
map.put("region",regionStack.pop());
}else if (regionStack.size() == 1){
map.put("city",regionStack.pop());
}
return map;
}
@Override
public String getRegionName(Long regionId) {
String regionName = "";
Map<String, SecRegion> map = getParentInfoByRegionId(regionId);
if (map.get("city") != null) {
regionName += map.get("city").getRegionName();
}
if (map.get("region") != null) {
regionName += map.get("region").getRegionName();
}
if (map.get("street") != null) {
regionName += map.get("street").getRegionName();
}
if (map.get("community") != null) {
regionName += map.get("community").getRegionName();
}
return regionName;
}
private Stack<SecRegion> getRegionStack(Long regionId, Stack<SecRegion> regionStack){
SecRegion region = singleRegionCache.get(regionId);
if (region != null){
regionStack.push(region);
getRegionStack(region.getParentId(),regionStack);
}
return regionStack;
}
@Override
public SecRegion getRegionsById(Long regionId) {
return regionMapper.selectByPrimaryKey(regionId);
}
@Override
public List<SecRegion> getProvinceList() {
SecRegionExample example = new SecRegionExample();
example.createCriteria().andParentIdIsNull().andStatusEqualTo(1);
return regionMapper.selectByExample(example);
}
@Override
public SecRegion getRegionsByName(String regionName) {
SecRegionExample example = new SecRegionExample();
example.createCriteria().andRegionNameLike("%" + regionName + "%");
List<SecRegion> list = regionMapper.selectByExample(example);
if (list.size() > 0) {
return list.get(0);
}
return null;
}
@Override
public List<SecRegion> findByName(String name) {
SecRegionExample example = new SecRegionExample();
example.createCriteria().andStatusEqualTo(1).andRegionNameEqualTo(name);
return regionMapper.selectByExample(example);
}
@Override
public SecRegion getParentByRegion(Long regionId) {
SecRegion secRegion = getRegionsById(regionId);
if (secRegion != null && secRegion.getParentId() != null) {
while (true) {
secRegion = getRegionsById(secRegion.getParentId());
if (secRegion.getParentId() == null) {
return secRegion;
}
}
}
return secRegion;
}
@Override
public Boolean findValue(String codeType, String codeValue) {
SecDictionaryExample example = new SecDictionaryExample();
example.createCriteria().andCodeTypeEqualTo(codeType).andCodeValueEqualTo(codeValue);
List<SecDictionary> list = dicMapper.selectByExample(example);
return list.size() > 0;
}
@Override
public List<SecDictionary> mappingSysNameOl(String codeType) {
SecDictionaryExample example = new SecDictionaryExample();
example.createCriteria().andCodeTypeEqualTo(codeType);
return dicMapper.selectByExample(example);
}
@Override
public void updateDictionary(SecDictionary secDictionary) {
dicMapper.updateByPrimaryKeySelective(secDictionary);
}
@Override
public BigDecimal getHLTBalance(String codeType) {
SecConfig secConfig = secConfigService.findByCodeType(codeType);
return new BigDecimal(secConfig.getCodeValue());
}
@Override
public void addHLTBalance(String codeType , BigDecimal price) {
SecConfig secConfig = secConfigService.findByCodeType(codeType);
BigDecimal balance = new BigDecimal(secConfig.getCodeValue());
secConfig.setCodeValue(String.valueOf(price.add(balance)));
secConfigService.updateSecConfig(secConfig);
}
@Override
public IndexCountModel getIndexCount() {
Map<String , Object> map = new HashMap<>();
Map<String , Object> mapToDay = new HashMap<>();
mapToDay.put("today" , "1");
IndexCountModel countModel = new IndexCountModel();
// 获取注册总人数
countModel.setRegistrantNum(highUserService.countUser());
// 获取订单总金额
countModel.setTransactionNum(highOrderService.orderPriceTotal(map).add(highOrderService.rechargePriceTotal(map)));
// 获取当天订单总金额
countModel.setTransactionToday(highOrderService.orderPriceTotal(mapToDay).add(highOrderService.rechargePriceTotal(mapToDay)));
// 获取订单数量
countModel.setTransactionOrder(highOrderService.orderPriceCount(map) + highOrderService.rechargePriceCount(map));
//获取订单当天数量
countModel.setTransactionOrderToday(highOrderService.orderPriceCount(mapToDay) + highOrderService.rechargePriceCount(mapToDay));
return countModel;
}
@Override
public LineCountModel getLineCount() {
LineCountModel lineCount = new LineCountModel();
lineCount.setOrderPriceSum(highOrderService.getOrderSumOrderByDate());
lineCount.setOrderRechargePriceSum(highOrderService.getOrderSumRechargeByDate());
lineCount.setOrderCount(highOrderService.getDateCountByOrder());
lineCount.setOrderRechargeCount(highOrderService.getDateCountByRecharge());
lineCount.setUserCount(highOrderService.getDateCountByUser());
return lineCount;
}
@Override
public JSONObject findByLatAndLng(String lng, String lat) throws Exception {
//参数
Map<String,Object> map = new HashMap<>();
//申请百度开放平台KEY(ak)
map.put("ak", "X4sSdXsohVOMb1tNiLZloD9ows5FaNjq");
// 输出Json数据
map.put("output", "json");
// 行政区划返回乡镇级数据(town),仅国内召回乡镇数据
map.put("extensions_town", "true");
// GPS 经纬度类型
map.put("coordtype", "wgs84ll");
//百度经纬度
map.put("location", lat+","+lng+"");
return HttpsUtils.doGet("http://api.map.baidu.com/reverse_geocoding/v3/" , map);
}
@Override
public JSONObject baiduApiMapSearch(Map<String, Object> map) {
//申请百度开放平台KEY(ak)
map.put("ak", "SfrwGH7INvjPq7BwCrYrioBQZm9XXxrR");
// 输出Json数据
map.put("output", "json");
// 圆形区域检索半径,单位为米。(增加区域内数据召回权重,如需严格限制召回数据在区域内,请搭配使用radius_limit参数),当半径过大,超过中心点所在城市边界时,会变为城市范围检索,检索范围为中心点所在城市
map.put("radius", "500");
// 检索结果详细程度。取值为1 或空,则返回基本信息;取值为2,返回检索POI详细信息
map.put("scope", "1");
// 是否召回国标行政区划编码,true(召回)、false(不召回)
map.put("extensions_adcode", "true");
// GPS 经纬度类型
map.put("coordtype", "wgs84ll");
return HttpsUtils.doGet("https://api.map.baidu.com/place/v2/search" , map);
}
@Override
public JSONObject gaoDeApiMapSearch(Map<String, Object> map) {
map.put("key" , "b7f6a6c5cd9801a82a0dc827f271a75d");
return HttpsUtils.doGet("https://restapi.amap.com/v3/assistant/inputtips" , map);
}
@Override
@Transactional(propagation= Propagation.REQUIRES_NEW)
public void configPayType(JSONObject object) {
// 删除原支付方式
deletePayType(object.getLong("sourceId") , object.getInteger("productType"));
// 支付方式
BsProductPayType productPayType;
// 配置支付方式
JSONArray payTypeArray = object.getJSONArray("payType");
for (Object payType : payTypeArray) {
SecDictionary dictionary = mappingSysCode("PAY_TYPE", String.valueOf(payType));
if (dictionary != null) {
productPayType = new BsProductPayType();
productPayType.setCreateTime(new Date());
productPayType.setUpdateTime(new Date());
productPayType.setPayTypeId(Integer.valueOf(String.valueOf(payType)));
productPayType.setPayTypeLogo(dictionary.getExt1());
productPayType.setPayTypeName(dictionary.getCodeName());
productPayType.setProductType(object.getInteger("productType"));
productPayType.setOperatorId(object.getLong("operatorId"));
productPayType.setOperatorName(object.getString("operatorName"));
productPayType.setSourceId(object.getLong("sourceId"));
bsProductPayTypeMapper.insert(productPayType);
}
}
}
@Override
@Transactional(propagation= Propagation.REQUIRES_NEW)
public void configIntegralDiscount(JSONObject object) {
// 清空原积分抵扣比例
deleteIntegralDiscount(object.getLong("sourceId") , object.getInteger("productType"));
// 折扣比例
BsProductDiscount productDiscount;
// 配置积分折扣比例
productDiscount = new BsProductDiscount();
productDiscount.setDiscount(object.getBigDecimal("integralDiscount"));
productDiscount.setProductType(object.getInteger("productType"));
productDiscount.setCreateTime(new Date());
productDiscount.setUpdateTime(new Date());
productDiscount.setOperatorId(object.getLong("operatorId"));
productDiscount.setOperatorName(object.getString("operatorName"));
productDiscount.setSourceId(object.getLong("sourceId"));
bsProductDiscountMapper.insert(productDiscount);
}
@Override
@Transactional(propagation= Propagation.REQUIRES_NEW)
public void configPlatform(JSONObject object) {
deletePlatform(object.getLong("sourceId") , object.getInteger("productType"));
BsProductPlatform productPlatform;
// 配置展示平台
JSONArray productPlatformArray = object.getJSONArray("productPlatform");
for (Object platform : productPlatformArray) {
if (String.valueOf(platform).length() > 0) {
productPlatform = new BsProductPlatform();
SecDictionary dictionary = mappingSysCode("SHOW_PLATFORM", String.valueOf(platform));
productPlatform.setProductType(object.getInteger("productType"));
productPlatform.setPlatformId(Integer.valueOf(String.valueOf(platform)));
productPlatform.setPlatformName(dictionary.getCodeName());
productPlatform.setCreateTime(new Date());
productPlatform.setUpdateTime(new Date());
productPlatform.setOperatorId(object.getLong("operatorId"));
productPlatform.setOperatorName(object.getString("operatorName"));
productPlatform.setSourceId(object.getLong("sourceId"));
bsProductPlatformMapper.insert(productPlatform);
}
}
}
@Override
public ApiCity findCityByName(String name) {
ApiCityExample example = new ApiCityExample();
example.createCriteria().andCityNameEqualTo(name);
List<ApiCity> list = apiCityMapper.selectByExample(example);
if (list.size()>0) {
return list.get(0);
}
return null;
}
@Override
public ApiCity findCityByProvinceName(String provinceName) {
ApiCityExample example = new ApiCityExample();
example.createCriteria().andProvinceNameEqualTo(provinceName);
List<ApiCity> list = apiCityMapper.selectByExample(example);
if (list.size()>0) {
return list.get(0);
}
return null;
}
// 清空支付方式配置
private void deletePayType(Long sourceId , Integer productType) {
if (sourceId == null) {
throw ErrorHelp.genException(SysCode.System, ErrorCode.REQ_PARAMS_ERROR, "");
}
BsProductPayTypeExample example = new BsProductPayTypeExample();
example.createCriteria().andSourceIdEqualTo(sourceId).andProductTypeEqualTo(productType);
List<BsProductPayType> list = bsProductPayTypeMapper.selectByExample(example);
if (list.size() > 0) {
for (BsProductPayType productPayType : list) {
bsProductPayTypeMapper.deleteByPrimaryKey(productPayType.getId());
}
}
}
// 清空配置积分抵扣比例
private void deleteIntegralDiscount(Long sourceId , Integer productType) {
if (sourceId == null) {
throw ErrorHelp.genException(SysCode.System, ErrorCode.REQ_PARAMS_ERROR, "");
}
BsProductDiscountExample example = new BsProductDiscountExample();
example.createCriteria().andSourceIdEqualTo(sourceId).andProductTypeEqualTo(productType);
List<BsProductDiscount> list = bsProductDiscountMapper.selectByExample(example);
if (list.size() > 0) {
for (BsProductDiscount bsProductDiscount : list) {
bsProductDiscountMapper.deleteByPrimaryKey(bsProductDiscount.getId());
}
}
}
// 清空配置展示平台
private void deletePlatform(Long sourceId, Integer productType) {
if (sourceId == null) {
throw ErrorHelp.genException(SysCode.System, ErrorCode.REQ_PARAMS_ERROR, "");
}
BsProductPlatformExample example = new BsProductPlatformExample();
example.createCriteria().andSourceIdEqualTo(sourceId).andProductTypeEqualTo(productType);
List<BsProductPlatform> list = bsProductPlatformMapper.selectByExample(example);
if (list.size() > 0) {
for (BsProductPlatform productPlatform : list) {
bsProductPlatformMapper.deleteByPrimaryKey(productPlatform.getId());
}
}
}
@Override
public SecConfig findSecConfigByType(String codeType) {
SecConfigExample example = new SecConfigExample();
example.createCriteria().andCodeTypeEqualTo(codeType);
if (secConfigMapper.selectByExample(example).size() > 0) {
return secConfigMapper.selectByExample(example).get(0);
}
return null;
}
@Override
public List<JSONObject> getRegional(String code , String name , String child) {
// 获取父类
List<SecRegion> regionListParent = getSecRegion(null);
List<JSONObject> jsonProvince = new ArrayList<>();
for (SecRegion secRegion : regionListParent) {
JSONObject provinceObject = new JSONObject();
provinceObject.put(code , secRegion.getRegionId());
provinceObject.put(name , secRegion.getRegionName());
List<SecRegion> regionList = getSecRegion(secRegion.getRegionId());
if (regionList.size() > 0) {
List<JSONObject> jsonCity = new ArrayList<>();
for (SecRegion city : regionList) {
JSONObject objectCity = new JSONObject();
objectCity.put(code , city.getRegionId());
objectCity.put(name , city.getRegionName());
List<SecRegion> areaList = getSecRegion(city.getRegionId());
if (areaList.size() > 0 ) {
List<JSONObject> jsonArea = new ArrayList<>();
for (SecRegion area : areaList) {
JSONObject objectArea = new JSONObject();
objectArea.put(code , area.getRegionId());
objectArea.put(name , area.getRegionName());
objectArea.put("isLeaf" , true);
jsonArea.add(objectArea);
}
objectCity.put(child , jsonArea);
}
jsonCity.add(objectCity);
}
provinceObject.put(child , jsonCity);
}
jsonProvince.add(provinceObject);
}
return jsonProvince;
}
@Override
public List<SecRegion> getSecRegion(Long parentId) {
SecRegionExample example = new SecRegionExample();
SecRegionExample.Criteria criteria = example.createCriteria();
if (parentId != null) {
criteria.andParentIdEqualTo(parentId);
}else {
criteria.andParentIdIsNull();
}
criteria.andStatusEqualTo(1);
return regionMapper.selectByExample(example);
}
@Override
public JSONObject getIndustry() {
return HttpsUtils.doGet(CommonSysConst.getSysConfig().getPayPostUrl() + "/common/getIndustry");
}
@Override
public List<MapStoreModel> getMapStore(String name, Long childId , String latitude , String longitude , Double distance , Integer type) {
// 获取支付门店
Map<String, Object> params = new HashMap<>();
if (name != null) {
params.put("name", name);
}
if (childId != null) {
params.put("childId", childId);
}
String borderWidth;
String padding;
Double alpha;
// 1:ios 2:安卓
if (type == 2) {
borderWidth = "12";
padding = "14";
alpha = 1.0;
} else {
borderWidth = "10";
padding = null;
alpha = 0.5;
}
List<MapStoreModel> list = new ArrayList<>();
JSONObject payObject = HttpsUtils.doGet(CommonSysConst.getSysConfig().getPayPostUrl() + "/common/getStoreList", params);
if (payObject != null) {
JSONArray payArray = payObject.getJSONArray("return_data");
for (Object object : payArray) {
MapStoreModel storeModel = new MapStoreModel();
JSONObject payData = (JSONObject) object;
storeModel.setId(payData.getLong("id"));
storeModel.setSourceType(1);
storeModel.setLatitude(payData.getString("latitude"));
storeModel.setLongitude(payData.getString("longitude"));
// if (payData.getString("iconPath") == null) {
// storeModel.setLogo(CommonSysConst.getSysConfig().getFilesystem() + "/img/store.png");
// } else {
// storeModel.setLogo(payData.getString("iconPath"));
// }
storeModel.setIconPath(CommonSysConst.getSysConfig().getFilesystem() + "/img/location.png");
storeModel.setLogo(CommonSysConst.getSysConfig().getFilesystem() + "/img/store.png");
storeModel.setRotate(1);
storeModel.setWidth(20);
storeModel.setHeight(20);
storeModel.setAlpha(alpha);
JSONObject callout = new JSONObject();
callout.put("content" , payData.getString("storeName"));
callout.put("address" , payData.getString("address"));
callout.put("color" , "#ffffff");
callout.put("fontSize" , 14);
callout.put("borderRadius" , 15);
callout.put("borderWidth" , borderWidth);
callout.put("bgColor" , "#e51860");
callout.put("padding" , padding);
callout.put("display" , "ALWAYS");
storeModel.setCallout(callout);
if (payData.getString("latitude") != null && payData.getString("longitude") != null) {
double distanceS = CoordCommonUtil.getDistance(Double.valueOf(payData.getString("latitude")), Double.valueOf(payData.getString("longitude")), Double.valueOf(latitude), Double.valueOf(longitude));
double storeDistance = Math.round(distanceS/100d)/10d;
if (storeDistance <= distance) {
storeModel.setDistance(storeDistance);
list.add(storeModel);
}
}
}
}
Map<String,Object> map = new HashMap<>();
map.put("storeName", name);
map.put("industryType", childId);
// 获取门店列表
List<HighMerchantStore> merchantStores = merchantStoreService.getMerchantStoreList(map);
if (merchantStores != null) {
for (HighMerchantStore store : merchantStores) {
MapStoreModel storeModel = new MapStoreModel();
storeModel.setId(store.getId());
// 1:支付 2:嗨森逛
storeModel.setSourceType(2);
storeModel.setLatitude(store.getLatitude());
storeModel.setLongitude(store.getLongitude());
storeModel.setIconPath(store.getStoreLogo());
if (store.getStoreLogo() == null) {
storeModel.setLogo(CommonSysConst.getSysConfig().getFilesystem() + "/img/store.png");
} else {
storeModel.setLogo(store.getStoreLogo());
}
storeModel.setIconPath(CommonSysConst.getSysConfig().getFilesystem() + "/img/location.png");
storeModel.setRotate(1);
storeModel.setWidth(20);
storeModel.setHeight(20);
storeModel.setAlpha(alpha);
JSONObject callout = new JSONObject();
callout.put("content" , store.getStoreName());
callout.put("address" , store.getAddress());
callout.put("color" , "#ffffff");
callout.put("fontSize" , 14);
callout.put("borderRadius" , 15);
callout.put("borderWidth" , borderWidth);
callout.put("padding" , padding);
callout.put("bgColor" , "#e51860");
callout.put("display" , "ALWAYS");
storeModel.setCallout(callout);
if (store.getLatitude() != null && store.getLongitude() != null) {
double distanceS = CoordCommonUtil.getDistance(Double.valueOf(store.getLatitude()), Double.valueOf(store.getLongitude()), Double.valueOf(latitude), Double.valueOf(longitude));
double storeDistance = Math.round(distanceS/100d)/10d;
if (storeDistance <= distance) {
storeModel.setDistance(storeDistance);
list.add(storeModel);
}
}
}
list = list.stream().sorted(Comparator.comparing(MapStoreModel::getDistance)).collect(Collectors.toList());
}
return list;
}
}