给datav提供飞线层数据、商家分布数据

master
yangkai 6 years ago
parent 8ab0b4f67f
commit d9de74472f

@ -0,0 +1,12 @@
package au.com.royalpay.payment.manage.datav.core;
import com.alibaba.fastjson.JSONObject;
import java.util.List;
public interface DatavService {
List<JSONObject> merchantByIndustry();
void transactionLoc();
}

@ -0,0 +1,119 @@
package au.com.royalpay.payment.manage.datav.core.Impl;
import au.com.royalpay.payment.manage.analysis.core.PartnersAnalysisService;
import au.com.royalpay.payment.manage.datav.core.DatavService;
import au.com.royalpay.payment.manage.mappers.payment.OrderMapper;
import au.com.royalpay.payment.manage.mappers.system.ClientAndCustomerLocation;
import au.com.royalpay.payment.tools.env.PlatformEnvironment;
import cn.yixblog.platform.http.HttpRequestGenerator;
import cn.yixblog.platform.http.HttpRequestResult;
import com.alibaba.fastjson.JSONObject;
import org.apache.commons.lang3.time.DateUtils;
import org.springframework.stereotype.Service;
import org.springframework.web.bind.annotation.RequestMethod;
import javax.annotation.Resource;
import java.io.IOException;
import java.net.URISyntaxException;
import java.util.ArrayList;
import java.util.Date;
import java.util.List;
@Service
public class DatavServiceImpl implements DatavService {
@Resource
private PartnersAnalysisService partnersAnalysisService;
@Resource
private OrderMapper orderMapper;
@Resource
private ClientAndCustomerLocation clientAndCustomerLocation;
@Override
public List<JSONObject> merchantByIndustry() {
List<JSONObject> partnersTypesAnalysis = partnersAnalysisService.getPartnersTypesAnalysis(new JSONObject());
List<JSONObject> analysis = new ArrayList<>();
JSONObject result;
for(JSONObject partner : partnersTypesAnalysis) {
result = new JSONObject();
result.put("value", partner.getIntValue("count_value"));
switch (partner.getIntValue("mccCode")){
case 1:
result.put("type", "旅游出行");
break;
case 2:
result.put("type", "餐饮");
break;
case 3:
result.put("type", "教育");
break;
case 4:
result.put("type", "商务咨询");
break;
case 5:
result.put("type", "传媒");
break;
case 6:
result.put("type", "医美");
break;
case 7:
result.put("type", "零售");
break;
case 8:
result.put("type", "休闲娱乐");
break;
case 9:
result.put("type", "其他服务类");
break;
case 10:
result.put("type", "酒店");
break;
case 11:
result.put("type", "出口贸易");
break;
case 12:
result.put("type", "家居建材");
break;
}
analysis.add(result);
}
return analysis;
}
@Override
public void transactionLoc() {
JSONObject params = new JSONObject();
long time = 60*60*1000;//60分钟
Date now = new Date();
Date beforeDate = new Date(now .getTime() - time);//60分钟前的时间
params.put("begin", beforeDate);
params.put("end", now);
params.put("limit", 40);
List<JSONObject> customerLoc = orderMapper.getClientAndCustomerLoc(params);
JSONObject obj;
for (JSONObject customer : customerLoc) {
//判断数据库是否已经存在该条ip解析
obj = clientAndCustomerLocation.findByIp(customer.getString("customer_ip"));
if (obj == null) {
try {
HttpRequestResult result = new HttpRequestGenerator("https://ipinfo.io/" + customer.getString("customer_ip") +"/json?token=7fac65b5953bb1", RequestMethod.GET).execute();
if (result.isSuccess()) {
obj = result.getResponseContentJSONObj();
String[] locArr = obj.getString("loc").split(",");
obj.put("ip_longitude", locArr[1]);
obj.put("ip_latitude", locArr[0]);
obj.put("moniker_longitude", customer.getString("longitude"));
obj.put("moniker_latitude", customer.getString("latitude"));
}
} catch (IOException | URISyntaxException e) {
e.printStackTrace();
}
}
if (obj != null && !customer.getString("order_id").equals(obj.get("order_id"))) {
obj.put("order_id", customer.getString("order_id"));
obj.put("create_time", new Date());
clientAndCustomerLocation.save(obj);
}
}
}
}

@ -0,0 +1,36 @@
package au.com.royalpay.payment.manage.datav.web;
import au.com.royalpay.payment.manage.datav.core.DatavService;
import com.alibaba.fastjson.JSONObject;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;
import javax.annotation.Resource;
import java.util.List;
@RestController
@RequestMapping("/api/v1.0/datav")
public class DatavController {
@Resource
private DatavService datavService;
/**
*
* @return
*/
@RequestMapping("/merchant/industry")
public List<JSONObject> getMerchantAnalysisByIndustry() {
return datavService.merchantByIndustry();
}
/**
*
* @return
*/
@RequestMapping("/payment/loc")
public void getPaymentLonAndLat() {
datavService.transactionLoc();
}
}

@ -71,4 +71,6 @@ public interface OrderMapper {
List<JSONObject> listNewYearOrdersByOpenId(@Param("customer_id") String open_id,@Param("transaction_date") String date);
List<Integer> listGatewayByClientId(@Param("client_id") int clientId);
List<JSONObject> getClientAndCustomerLoc(JSONObject params);
}

@ -0,0 +1,17 @@
package au.com.royalpay.payment.manage.mappers.system;
import cn.yixblog.support.mybatis.autosql.annotations.AutoMapper;
import cn.yixblog.support.mybatis.autosql.annotations.AutoSql;
import cn.yixblog.support.mybatis.autosql.annotations.SqlType;
import com.alibaba.fastjson.JSONObject;
import org.apache.ibatis.annotations.Param;
@AutoMapper(tablename = "sys_clients_customer_locations", pkName = {"id"})
public interface ClientAndCustomerLocation {
@AutoSql(type = SqlType.SELECT)
JSONObject findByIp(@Param(value = "ip") String ip);
@AutoSql(type = SqlType.INSERT)
void save(JSONObject params);
}

@ -0,0 +1,25 @@
package au.com.royalpay.payment.manage.task;
import au.com.royalpay.payment.manage.datav.core.DatavService;
import au.com.royalpay.payment.tools.scheduler.SynchronizedScheduler;
import org.springframework.boot.autoconfigure.condition.ConditionalOnProperty;
import org.springframework.scheduling.annotation.Scheduled;
import org.springframework.stereotype.Component;
import javax.annotation.Resource;
@Component
@ConditionalOnProperty(value = "app.run-tasks", havingValue = "true")
public class OrderIpAnalysisTask {
@Resource
private DatavService datavService;
@Resource
private SynchronizedScheduler synchronizedScheduler;
@Scheduled(cron = "0 0 */1 * * ?")
public void ipAnalysis() {
synchronizedScheduler.executeProcess("datav_task:ip_analysis", 300_000, () -> {
datavService.transactionLoc();
});
}
}

@ -852,4 +852,22 @@
AND client_id = #{client_id}
GROUP BY gateway
</select>
<select id="getClientAndCustomerLoc" resultType="com.alibaba.fastjson.JSONObject">
<![CDATA[
SELECT
o.customer_ip, l.latitude, l.longitude, o.order_id
FROM
pmt_transactions t
INNER JOIN pmt_orders o ON t.order_id = o.order_id
INNER JOIN sys_clients_locations l ON l.client_id = o.client_id
WHERE
t.transaction_type = 'Credit'
AND t.channel != 'Settlement'
AND o.create_time < #{end}
AND o.create_time >= #{begin}
ORDER BY RAND()
]]>
<if test="limit != null">limit #{limit}</if>
</select>
</mapper>

Loading…
Cancel
Save