AndroidApp/ReportGenerator.java

183 lines
6.9 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.example.myapplication.Tool;
import android.content.Context;
import android.util.Log;
import com.chaquo.python.Python;
import com.chaquo.python.android.AndroidPlatform;
import org.json.JSONException;
import org.json.JSONObject;
import java.io.File;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.InputStream;
import java.io.OutputStream;
import java.text.SimpleDateFormat;
import java.util.Date;
import java.util.Locale;
public class ReportGenerator {
private static final String TAG = "ReportGenerator";
private static final String TEMPLATE_DIR = "templates";
private final Context context;
public ReportGenerator(Context context) {
this.context = context;
initPython();
prepareTemplates();
}
private void initPython() {
if (!Python.isStarted()) {
Python.start(new AndroidPlatform(context));
}
}
private void prepareTemplates() {
File templateDir = new File(context.getFilesDir(), TEMPLATE_DIR);
if (!templateDir.exists() || isTemplateUpdateNeeded(templateDir)) {
copyAssetsTemplates(templateDir);
}
}
private boolean isTemplateUpdateNeeded(File templateDir) {
return templateDir.listFiles() == null || templateDir.listFiles().length == 0;
}
private void copyAssetsTemplates(File targetDir) {
try {
if (!targetDir.exists()) {
targetDir.mkdirs();
}
String[] files = context.getAssets().list(TEMPLATE_DIR);
if (files != null) {
for (String filename : files) {
File outFile = new File(targetDir, filename);
try (InputStream in = context.getAssets().open(TEMPLATE_DIR + "/" + filename);
OutputStream out = new FileOutputStream(outFile)) {
byte[] buffer = new byte[1024];
int read;
while ((read = in.read(buffer)) != -1) {
out.write(buffer, 0, read);
}
}
}
}
} catch (IOException e) {
Log.e(TAG, "Failed to copy templates", e);
}
}
public String generateReport() {
try {
// 创建模拟数据
JSONObject jsonData1 = createMockJsonData1();
JSONObject jsonData2 = createMockJsonData2();
Python py = Python.getInstance();
py.getModule("report_generate_server.Generate_Report")
.callAttr("main",
jsonData1.toString(),
jsonData2.toString());
return jsonData2.getString("shengcheng_dir");
} catch (Exception e) {
Log.e(TAG, "Report generation failed", e);
return "Error: " + e.toString();
}
}
private JSONObject createMockJsonData1() throws JSONException {
JSONObject jsonData1 = new JSONObject();
// 项目基本信息
JSONObject jizuData = new JSONObject();
jizuData.put("turbineName", "风力发电机001");
JSONObject projectData = new JSONObject();
projectData.put("fengmian_dir", "storage/emulated/0/DCIM/Camera/IMG_20250721_173921.jpg");
projectData.put("farmName", "华北风电场");
projectData.put("inspectionUnit", "华北检测公司");
projectData.put("inspectionContact", "李检测员");
projectData.put("inspectionPhone", "13800138000");
projectData.put("farmAddress", "河北省张家口市");
projectData.put("client", "国家电网");
projectData.put("clientContact", "王经理");
projectData.put("clientPhone", "13900139000");
projectData.put("scale", "50MW");
projectData.put("turbineModel", "GW-1500");
projectData.put("projectName", "华北风电场年度检测");
projectData.put("startDate", "2025-07-01");
projectData.put("endDate", "2025-07-31");
JSONObject shigongData = new JSONObject();
shigongData.put("startTime", "2025-07-21 08:00");
shigongData.put("endTime", "2025-07-21 17:00");
shigongData.put("weatherCode", "");
shigongData.put("windSpeed", "5.2m/s");
shigongData.put("imageCount", "120");
shigongData.put("temperature", "28℃");
jsonData1.put("jizu_data", jizuData);
jsonData1.put("project_data", projectData);
jsonData1.put("shigong_data", shigongData);
jsonData1.put("partManufacturer", "金风科技");
// Y叶片数据
String imagePath = "storage/emulated/0/DCIM/Camera/IMG_20250721_173921.jpg";
JSONObject y1 = new JSONObject();
y1.put("Code", "1");
JSONObject y1List = new JSONObject();
y1List.put("叶片前缘", imagePath);
y1List.put("叶片后缘", imagePath);
y1List.put("叶片表面", imagePath);
y1.put("list_dict", y1List);
JSONObject y2 = new JSONObject();
y2.put("Code", "2");
JSONObject y2List = new JSONObject();
y2List.put("叶片前缘", imagePath);
y2List.put("叶片后缘", imagePath);
y2List.put("叶片表面", imagePath);
y2.put("list_dict", y2List);
JSONObject y3 = new JSONObject();
y3.put("Code", "3");
JSONObject y3List = new JSONObject();
y3List.put("叶片前缘", imagePath);
y3List.put("叶片后缘", imagePath);
y3List.put("叶片表面", imagePath);
y3.put("list_dict", y3List);
jsonData1.put("Y1", y1);
jsonData1.put("Y2", y2);
jsonData1.put("Y3", y3);
return jsonData1;
}
private JSONObject createMockJsonData2() throws JSONException {
JSONObject jsonData2 = new JSONObject();
SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd_HH-mm-ss", Locale.getDefault());
String templatePath = new File(context.getFilesDir(), TEMPLATE_DIR).getAbsolutePath();
String outputPath = context.getExternalFilesDir(null).getAbsolutePath();
jsonData2.put("shengcheng_dir", outputPath);
jsonData2.put("muban_dir", templatePath);
jsonData2.put("if_waibu", false);
jsonData2.put("if_neibu", true);
jsonData2.put("if_fanglei", true);
jsonData2.put("userName", "admin");
jsonData2.put("baogaoCheck", "未审核");
jsonData2.put("key_words", "缺,损,裂,脱,污");
jsonData2.put("shigong_fangan", "标准检测方案");
jsonData2.put("jiancha_renyuan", "张三,李四");
jsonData2.put("baogao_zongjie", "本次检测共发现3处缺陷需要及时处理");
jsonData2.put("total_pic_num", "120");
return jsonData2;
}
}