zhyManagement/src/main/java/com/management/tzcontroller/DeviceInstallController.java

486 lines
25 KiB
Java
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

package com.management.tzcontroller;
import com.alibaba.fastjson.JSON;
import com.alibaba.fastjson.JSONObject;
import com.management.constant.URLConstant;
import com.management.entity.Filter;
import com.management.utils.CrmRequestUtil;
import lombok.extern.slf4j.Slf4j;
import org.springframework.http.HttpEntity;
import org.springframework.http.HttpHeaders;
import org.springframework.web.bind.annotation.PostMapping;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;
import org.springframework.web.client.RestClientException;
import org.springframework.web.client.RestTemplate;
import java.text.SimpleDateFormat;
import java.time.LocalDateTime;
import java.time.format.DateTimeFormatter;
import java.util.*;
@RestController
@RequestMapping("/api/device/install")
@Slf4j
public class DeviceInstallController {
private RestTemplate restTemplate = new RestTemplate();
public static void main(String[] args) {
new DeviceInstallController().syncDeviceInstall();
//new DeviceInstallController().upDeviceInstall();
}
/**
* 台账设备安装同步创建
*
* @return void
* @Author weiloong_zhang
*/
@PostMapping("/sync/device")
public void syncDeviceInstall() {
CrmRequestUtil crmRequestUtil = new CrmRequestUtil();
String[] syncStatus = {"option_pending_sync__c", "option_resync__c"};
JSONObject getDeviceInstall = crmRequestUtil.getCRMList(Arrays.asList(
new Filter("GT", "last_modified_time", Arrays.asList("1748923200000")),
new Filter("EQ", "life_status", Arrays.asList("normal")),
new Filter("ISN", "voltage_level__c", Arrays.asList("")),
new Filter("ISN", "line_name__c", Arrays.asList("")),
new Filter("ISN", "pole_number__c", Arrays.asList("")),
new Filter("ISN", "install_time", Arrays.asList("")),
new Filter("ISN", "is_maintenance_mode_enable__c", Arrays.asList("")),
new Filter("ISN", "run_platform__c", Arrays.asList("")),
//new Filter("EQ", "name", Arrays.asList("DEV202505260012"))
new Filter("IN", "ledger_sync_status__c", Arrays.asList(syncStatus))
), "DeviceObj");
JSONObject deviceInstallRes = new JSONObject();
try {
deviceInstallRes = restTemplate.postForObject(URLConstant.GET_CRM_LIST_URL, getDeviceInstall, JSONObject.class);
} catch (RestClientException e) {
e.printStackTrace();
}
if (!"success".equals(deviceInstallRes.getString("errorDescription")) || deviceInstallRes.getJSONObject("data").getJSONArray("dataList").isEmpty()) {
log.info("设备安装为空或者请求失败,将不再向下执行");
return;
}
log.info("设备信息存在,将继续向下执行");
for (Object deviceInstallObj : deviceInstallRes.getJSONObject("data").getJSONArray("dataList")) {
JSONObject deviceInstallData = JSON.parseObject(JSON.toJSONString(deviceInstallObj));
System.out.println("当前正在处理的设备数据为:" + deviceInstallData);
//开始截取关键数据
//设备id
String deviceId = deviceInstallData.getString("_id");
//设备编号
String deviceName = deviceInstallData.getString("name");
//创建时间
String createTime = deviceInstallData.getString("last_modified_time");
//开始查询是否已经执行过该单据
JSONObject isLogRes = new JSONObject();
try {
isLogRes = restTemplate.getForObject("http://localhost:18085/Log/query/log_data?table=send_log_tzdevice&log_type=TZSB&dataId=" + deviceId + "&mark=" + createTime, JSONObject.class);
} catch (RestClientException e) {
e.printStackTrace();
}
if (!isLogRes.getJSONArray("data").isEmpty()) {
log.info("数据已经集成过了,将不再继续向下执行");
continue;
}
log.info("数据不存在,继续向下执行");
//开始封装数据
Map deviceInstallMap = new HashMap<>();
deviceInstallMap.put("crmId", deviceId);//发货设备唯一ID
deviceInstallMap.put("deviceId", deviceInstallData.getString("device_code"));//主板编号
deviceInstallMap.put("ICCID", deviceInstallData.getString("smart_card_number_iccid__c__r") != null ? deviceInstallData.getString("smart_card_number_iccid__c__r") : "");//智能卡号ICCID
deviceInstallMap.put("powerStripVersion", deviceInstallData.getString("power_board_program_versio__c") != null ? deviceInstallData.getString("power_board_program_versio__c") : "");//电源板程序版本号
deviceInstallMap.put("mainBoardVersion", deviceInstallData.getString("mainboard_program_version__c") != null ? deviceInstallData.getString("mainboard_program_version__c") : "");//主板程序版本号
deviceInstallMap.put("hardwareVersion", deviceInstallData.getString("mainboard_hardware_version__c") != null ? deviceInstallData.getString("mainboard_hardware_version__c") : "");//硬件版本号
deviceInstallMap.put("deviceHardwareVersion", deviceInstallData.getString("device_hardware__c") != null ? deviceInstallData.getString("device_hardware__c") : "");//设备硬件
deviceInstallMap.put("systemVersion", deviceInstallData.getString("system_version_number__c") != null ? deviceInstallData.getString("system_version_number__c") : "");//系统版本号
deviceInstallMap.put("fourGVersion", deviceInstallData.getString("version_4g__c") != null ? deviceInstallData.getString("version_4g__c") : "");//4G版本号
deviceInstallMap.put("aiVersion", deviceInstallData.getString("ai_version_number__c") != null ? deviceInstallData.getString("ai_version_number__c") : "");//AI版本号
//deviceInstallMap.put("deviceStatus", "");//todo 设备状态(选项未提供)
deviceInstallMap.put("preSignContract", deviceInstallData.getString("pre_signed_contract_id__c__r") != null ? deviceInstallData.getString("pre_signed_contract_id__c__r") : "");//预签合同
deviceInstallMap.put("contract", deviceInstallData.getString("sales_contract_number__c__r") != null ? deviceInstallData.getString("sales_contract_number__c__r") : "");//销售合同
deviceInstallMap.put("project", deviceInstallData.getString("project_id__c") != null ? deviceInstallData.getString("project_id__c") : "");//项目号
deviceInstallMap.put("vol", deviceInstallData.getString("voltage_level__c__r") != null ? deviceInstallData.getString("voltage_level__c__r") : "");//电压等级
deviceInstallMap.put("line", deviceInstallData.getString("line_name__c") != null ? deviceInstallData.getString("line_name__c") : "");//线路名称
deviceInstallMap.put("tower", deviceInstallData.getString("pole_number__c") != null ? deviceInstallData.getString("pole_number__c") : "");//杆塔号
deviceInstallMap.put("towerType", deviceInstallData.getString("pole_type__c__r") != null ? deviceInstallData.getString("pole_type__c__r") : "");////杆塔类型
deviceInstallMap.put("direction", deviceInstallData.getString("installation_direction__c") != null ? deviceInstallData.getString("installation_direction__c") : "");//安装方向
//获取安装日期时间戳
SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
String installDateStr = deviceInstallData.getString("install_time") != null ? deviceInstallData.getString("install_time") : "";
String installDate = "";
if (!installDateStr.equals("")) {
installDate = sdf.format(new Date(Long.parseLong(installDateStr)));
}
deviceInstallMap.put("installDate", installDate);//安装日期
//到期日期
String expireDateStr = deviceInstallData.getString("mobile_card_expiration_dat__c") != null ? deviceInstallData.getString("mobile_card_expiration_dat__c") : "";
String expireDate = "";
if (!expireDateStr.equals("")) {
expireDate = sdf.format(new Date(Long.parseLong(expireDateStr)));
}
deviceInstallMap.put("expireDate", expireDate);//到期日期
deviceInstallMap.put("signalStrength", deviceInstallData.getString("telecom_signal_strength__c") != null ? deviceInstallData.getString("telecom_signal_strength__c") : "");//电信信号强度
deviceInstallMap.put("supplier", deviceInstallData.getString("supplier_name__c") != null ? deviceInstallData.getString("supplier_name__c") : "");//供方名称
deviceInstallMap.put("construction", deviceInstallData.getString("construction_company__c__r") != null ? deviceInstallData.getString("construction_company__c__r") : "");//施工方
deviceInstallMap.put("operationPlatform", deviceInstallData.getString("run_platform__c__r") != null ? deviceInstallData.getString("run_platform__c__r") : "");//运行平台
deviceInstallMap.put("thirdDeviceId", deviceInstallData.getString("third_party_platform_id__c") != null ? deviceInstallData.getString("third_party_platform_id__c") : "");//第三方平台编号
deviceInstallMap.put("thirdMotherboardId", deviceInstallData.getString("third_party_mainboard_id__c") != null ? deviceInstallData.getString("third_party_mainboard_id__c") : "");//第三方主板编号
deviceInstallMap.put("sensor", deviceInstallData.getString("sensor__c") != null ? deviceInstallData.getString("sensor__c") : "");//传感器
//更新时间
String updateTimeStr = deviceInstallData.getString("update_time__c") != null ? deviceInstallData.getString("update_time__c") : "";
String updateTime = "";
if (!updateTimeStr.equals("")) {
updateTime = sdf.format(new Date(Long.parseLong(updateTimeStr)));
}
deviceInstallMap.put("updateTime", updateTime);//todo 更新时间(待测)
deviceInstallMap.put("installationSite", deviceInstallData.getString("address") != null ? deviceInstallData.getString("address") : "");//todo 安装地点
deviceInstallMap.put("itemGroup", deviceInstallData.getString("work_group__c") != null ? deviceInstallData.getString("work_group__c") : "");//班组
deviceInstallMap.put("coordinate", deviceInstallData.getString("latitude_longitude__c") != null ? deviceInstallData.getString("latitude_longitude__c") : "");//经纬度
deviceInstallMap.put("stuctureType", deviceInstallData.getString("structure_type__c__r") != null ? deviceInstallData.getString("structure_type__c__r") : "");//结构件类型
deviceInstallMap.put("photoAmount", deviceInstallData.getBigDecimal("photo_count__c") != null ? deviceInstallData.getBigDecimal("photo_count__c") : 0);//拍照张数
deviceInstallMap.put("installationGeography", deviceInstallData.getString("installation_geography__c") != null ? deviceInstallData.getString("installation_geography__c") : "");//安装地理环境
deviceInstallMap.put("constructionWorkers", deviceInstallData.getString("shigongrenyuan__c") != null ? deviceInstallData.getString("shigongrenyuan__c") : "");//施工人员
deviceInstallMap.put("siteManager", deviceInstallData.getString("on_site_responsible_person__c__r") != null ? deviceInstallData.getString("on_site_responsible_person__c__r") : "");//现场负责人
deviceInstallMap.put("siteManagerTel", deviceInstallData.getString("on_site_contact_info__c") != null ? deviceInstallData.getString("on_site_contact_info__c") : "");//现场负责人联系方式
deviceInstallMap.put("devicePurpose", deviceInstallData.getString("device_purpose__c") != null ? deviceInstallData.getString("device_purpose__c") : "");//设备用途
deviceInstallMap.put("dangerType", deviceInstallData.getString("hazard_type__c") != null ? deviceInstallData.getString("hazard_type__c") : "");//隐患类型
deviceInstallMap.put("remarks", deviceInstallData.getString("remark__c") != null ? deviceInstallData.getString("remark__c") : "");//备注
deviceInstallMap.put("deviceDetailState", deviceInstallData.getString("device_installation_status__c__r") != null ? deviceInstallData.getString("device_installation_status__c__r") : "");//设备安装状态
Integer isMaintenance = null;
switch (deviceInstallData.getString("is_maintenance_mode__c") != null ? deviceInstallData.getString("is_maintenance_mode__c") : "") {
case "yes":
isMaintenance = 1;
break;
case "no":
isMaintenance = 0;
break;
default:
isMaintenance = null;
break;
}
deviceInstallMap.put("isMaintenance", isMaintenance);//是否开启维护模式
//更新者
JSONObject updaterJSON = deviceInstallData.getJSONObject("updater__c__r") != null ? deviceInstallData.getJSONObject("updater__c__r") : new JSONObject();
String updaterStr = "";
if (!updaterJSON.isEmpty()) {
updaterStr = updaterJSON.getString("name");
}
deviceInstallMap.put("updateUser", updaterStr);//更新者
deviceInstallMap.put("deviceAttribute", 1);//todo 主副设备
//开始获取token
String token = new LedgerTokenController().getToken();
if (token == null || "".equals(token)) {
log.info("台账token获取失败将不再向下执行");
continue;
}
//开始封装请求头
HttpHeaders headers = new HttpHeaders();
headers.set("Content-Type", "application/json");
headers.set("accessToken", token);
HttpEntity reqEntity = new HttpEntity(deviceInstallMap, headers);
System.out.println(JSON.parseObject(JSON.toJSONString(reqEntity)));
//开始发起请求
String deviceUrl = "http://192.168.9.4:9011/crm/initInstallationDevice";
JSONObject deviceResult = new JSONObject();
try {
deviceResult = restTemplate.postForObject(deviceUrl, reqEntity, JSONObject.class);
} catch (RestClientException e) {
e.printStackTrace();
}
System.out.println(JSON.parseObject(JSON.toJSONString(deviceResult)));
//开始封装回写程序
Map backReqMap = new HashMap();
backReqMap.put("_id", deviceId);
backReqMap.put("dataObjectApiName", "DeviceObj");
//开始封装日志
Map logMap = new HashMap<>();
logMap.put("log_id", UUID.randomUUID().toString().replace("-", ""));
logMap.put("log_type", "TZSB");
logMap.put("syn_type", "0");
logMap.put("data_name", deviceName);
logMap.put("data_id", deviceId);
logMap.put("mark", createTime);
logMap.put("send_body", JSON.toJSONString(reqEntity));
logMap.put("send_res", JSON.toJSONString(deviceResult));
logMap.put("tableName", "send_log_tzdevice");
//判断是否执行成功
if (deviceResult.getInteger("code") == 0) {
//同步成功
logMap.put("log_status", "0");
logMap.put("res_body", "同步成功");
backReqMap.put("ledger_sync_status__c", "option_sync_success__c");
backReqMap.put("ledger_response_status__c", "创建" + deviceResult.getString("msg"));
} else {
//同步失败
logMap.put("log_status", "1");
logMap.put("res_body", "同步失败:" + deviceResult.getString("msg"));
backReqMap.put("ledger_sync_status__c", "option_sync_failure__c");
backReqMap.put("ledger_response_status__c", "创建" + deviceResult.getString("msg"));
}
//开始回写
JSONObject backReq = crmRequestUtil.updateCRM(backReqMap);
JSONObject backRes = new JSONObject();
try {
backRes = restTemplate.postForObject(URLConstant.UPDATE_CRM_MAIN, backReq, JSONObject.class);
} catch (RestClientException e) {
e.printStackTrace();
}
System.out.println("回写结果为:" + backRes);
//开始记录日志
JSONObject logRes = new JSONObject();
try {
logRes = restTemplate.postForObject("http://localhost:18085/Log/insert/log_data", logMap, JSONObject.class);
} catch (RestClientException e) {
e.printStackTrace();
}
System.out.println("日志插入结果为:" + logRes);
}
}
/**
* 设备安装信息更新
*
* @return void
* @Author weiloong_zhang
*/
@PostMapping("/update/device_install")
public void upDeviceInstall() {
CrmRequestUtil crmRequestUtil = new CrmRequestUtil();
String[] syncStatus = {"option_pending_sync__c", "option_resync__c"};
JSONObject getDeviceInstall = crmRequestUtil.getCRMList(Arrays.asList(
//new Filter("EQ", "name", Arrays.asList("DEV202505260012"))
new Filter("GT", "last_modified_time", Arrays.asList("1748923200000")),
new Filter("IN", "ledger_sync_status__c", Arrays.asList(syncStatus)),
new Filter("EQ", "life_status", Arrays.asList("normal"))
), "DeviceObj");
JSONObject deviceInstallRes = new JSONObject();
try {
deviceInstallRes = restTemplate.postForObject(URLConstant.GET_CRM_LIST_URL, getDeviceInstall, JSONObject.class);
} catch (RestClientException e) {
e.printStackTrace();
}
if (!"success".equals(deviceInstallRes.getString("errorDescription")) || deviceInstallRes.getJSONObject("data").getJSONArray("dataList").isEmpty()) {
log.info("设备安装为空或者请求失败,将不再向下执行");
return;
}
log.info("设备信息存在,将继续向下执行");
for (Object deviceInstallObj : deviceInstallRes.getJSONObject("data").getJSONArray("dataList")) {
JSONObject deviceInstallData = JSON.parseObject(JSON.toJSONString(deviceInstallObj));
System.out.println("当前正在处理的设备数据为:" + deviceInstallData);
//开始截取关键数据
//设备id
String deviceId = deviceInstallData.getString("_id");
//设备编号
String deviceName = deviceInstallData.getString("name");
//创建时间
String modifyTime = deviceInstallData.getString("last_modified_time");
//开始查询是否已经执行过该单据
JSONObject isLogRes = new JSONObject();
try {
isLogRes = restTemplate.getForObject("http://localhost:18085/Log/query/log_data?table=send_log_tzdevice&log_type=TZSBUP&dataId=" + deviceId + "&mark=" + modifyTime, JSONObject.class);
} catch (RestClientException e) {
e.printStackTrace();
}
if (!isLogRes.getJSONArray("data").isEmpty()) {
log.info("数据已经集成过了,将不再继续向下执行");
continue;
}
log.info("数据不存在,继续向下执行");
//开始封装数据
Map deviceInstallMap = new HashMap<>();
deviceInstallMap.put("deviceId", deviceInstallData.getString("device_code"));//主板编号
deviceInstallMap.put("preSignContract", deviceInstallData.getString("pre_signed_contract_id__c__r") != null ? deviceInstallData.getString("pre_signed_contract_id__c__r") : "");//预签合同
deviceInstallMap.put("contract", deviceInstallData.getString("sales_contract_number__c__r") != null ? deviceInstallData.getString("sales_contract_number__c__r") : "");//销售合同
deviceInstallMap.put("project", deviceInstallData.getString("project_number__c") != null ? deviceInstallData.getString("project_number__c") : "");//项目号
//更新者
List updaterList = deviceInstallData.getJSONArray("updater__c") != null ? deviceInstallData.getJSONArray("updater__c") : new ArrayList();
String updaterStr = "";
if (!updaterList.isEmpty()) {
//更新者不为空
JSONObject getUpdater = crmRequestUtil.getCRMList(Arrays.asList(
new Filter("EQ", "user_id", updaterList)
), "PersonnelObj");
JSONObject updaterRes = new JSONObject();
try {
updaterRes = restTemplate.postForObject(URLConstant.GET_CRM_LIST_URL, getUpdater, JSONObject.class);
} catch (RestClientException e) {
e.printStackTrace();
}
if ("success".equals(updaterRes.getString("errorDescription")) && !updaterRes.getJSONObject("data").getJSONArray("dataList").isEmpty()) {
JSONObject updaterJSON = updaterRes.getJSONObject("data").getJSONArray("dataList").getJSONObject(0);
updaterStr = updaterJSON.getString("name");
} else {
updaterStr = "";
}
}
deviceInstallMap.put("updateUser", updaterStr);//更新者
//开始获取token
String token = new LedgerTokenController().getToken();
if (token == null || "".equals(token)) {
log.info("台账token获取失败将不再向下执行");
continue;
}
//开始封装请求头
HttpHeaders headers = new HttpHeaders();
headers.set("Content-Type", "application/json");
headers.set("accessToken", token);
HttpEntity reqEntity = new HttpEntity(Arrays.asList(deviceInstallMap), headers);
System.out.println(JSON.parseObject(JSON.toJSONString(reqEntity)));
//开始发起请求
String deviceUrl = "http://192.168.9.4:9011/crm/updateDeviceContract";
JSONObject deviceResult = new JSONObject();
try {
deviceResult = restTemplate.postForObject(deviceUrl, reqEntity, JSONObject.class);
} catch (RestClientException e) {
e.printStackTrace();
}
System.out.println(JSON.parseObject(JSON.toJSONString(deviceResult)));
//开始封装回写程序
Map backReqMap = new HashMap();
backReqMap.put("_id", deviceId);
backReqMap.put("dataObjectApiName", "DeviceObj");
//开始封装日志
Map logMap = new HashMap<>();
logMap.put("log_id", UUID.randomUUID().toString().replace("-", ""));
logMap.put("log_type", "TZSBUP");
logMap.put("syn_type", "0");
logMap.put("data_name", deviceName);
logMap.put("data_id", deviceId);
logMap.put("mark", modifyTime);
logMap.put("send_body", JSON.toJSONString(reqEntity));
logMap.put("send_res", JSON.toJSONString(deviceResult));
logMap.put("tableName", "send_log_tzdevice");
//判断是否执行成功
if (deviceResult.getInteger("code") == 0) {
//同步成功
logMap.put("log_status", "0");
logMap.put("res_body", "同步成功");
backReqMap.put("ledger_sync_status__c", "option_sync_success__c");
backReqMap.put("ledger_response_status__c", "更新成功" + LocalDateTime.now().format(DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss")));
} else {
//同步失败
logMap.put("log_status", "1");
logMap.put("res_body", "同步失败:" + deviceResult.getString("msg"));
backReqMap.put("ledger_sync_status__c", "option_sync_failure__c");
backReqMap.put("ledger_response_status__c", "更新失败" + LocalDateTime.now().format(DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss")));
}
//开始回写
JSONObject backReq = crmRequestUtil.updateCRM(backReqMap);
JSONObject backRes = new JSONObject();
try {
backRes = restTemplate.postForObject(URLConstant.UPDATE_CRM_MAIN, backReq, JSONObject.class);
} catch (RestClientException e) {
e.printStackTrace();
}
System.out.println("回写结果为:" + backRes);
//开始记录日志
JSONObject logRes = new JSONObject();
try {
logRes = restTemplate.postForObject("http://localhost:18085/Log/insert/log_data", logMap, JSONObject.class);
} catch (RestClientException e) {
e.printStackTrace();
}
System.out.println("日志插入结果为:" + logRes);
}
}
}