|
@@ -6,6 +6,8 @@ import cn.hutool.core.date.DateUnit;
|
|
|
import cn.hutool.core.date.DateUtil;
|
|
|
import cn.hutool.core.util.ObjectUtil;
|
|
|
import com.alibaba.excel.EasyExcel;
|
|
|
+import com.alibaba.excel.ExcelWriter;
|
|
|
+import com.alibaba.excel.write.metadata.WriteSheet;
|
|
|
import com.alibaba.fastjson.JSON;
|
|
|
import com.alibaba.fastjson.JSONArray;
|
|
|
import com.alibaba.fastjson.JSONObject;
|
|
@@ -17,6 +19,7 @@ import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
|
|
|
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
|
|
|
import com.google.common.collect.Maps;
|
|
|
import com.rongwei.bscommon.sys.dao.ApsProcessOperationProcessEquDao;
|
|
|
+import com.rongwei.bscommon.sys.listener.SpecificRowDropDownHandler;
|
|
|
import com.rongwei.bscommon.sys.listener.WorkShopImportListener;
|
|
|
import com.rongwei.bscommon.sys.service.*;
|
|
|
import com.rongwei.bscommon.sys.utils.ApsUtils;
|
|
@@ -57,6 +60,8 @@ import java.util.*;
|
|
|
import java.util.concurrent.ConcurrentHashMap;
|
|
|
import java.util.concurrent.TimeUnit;
|
|
|
import java.util.concurrent.atomic.AtomicReference;
|
|
|
+import java.util.function.IntPredicate;
|
|
|
+import java.util.function.Supplier;
|
|
|
import java.util.regex.Matcher;
|
|
|
import java.util.regex.Pattern;
|
|
|
import java.util.stream.Collectors;
|
|
@@ -2619,16 +2624,53 @@ public class ApsProcessOperationProcessEquServiceImpl extends ServiceImpl<ApsPro
|
|
|
WorkShopExportVo workShopExportVo = BeanUtil.toBean(convertKeysToLowercase, WorkShopExportVo.class);
|
|
|
res.add(workShopExportVo);
|
|
|
}
|
|
|
+
|
|
|
+ // 动态选项提供者(可以从数据库或其他服务获取)
|
|
|
+ //查询设备信息,组装数据
|
|
|
+ List<DeviceCodeAndNameDownVo> devices = this.baseMapper.selectAllDevice();
|
|
|
+ String deviceExpression = "下拉选!$A$2:$A$" + (devices.size() + 1);
|
|
|
+ List<String> deviceList = devices.stream().map(DeviceCodeAndNameDownVo::getDevice).collect(Collectors.toList());
|
|
|
+ Supplier<List<String>> statusOptions = () -> deviceList;
|
|
|
+// Supplier<List<String>> statusOptions = () -> Arrays.asList("Z-03-01-003(03#冷轧机)");
|
|
|
+
|
|
|
+ // 只对第2行和第4行设置下拉(relativeRowIndex从0开始)
|
|
|
+ IntPredicate rowFilter = rowIndex -> rowIndex == 0 || rowIndex == 1;
|
|
|
+
|
|
|
// 设置响应头
|
|
|
String fileName = "车间作业跟踪导出数据_" + System.currentTimeMillis() + ".xlsx";
|
|
|
response.setContentType("application/vnd.openxmlformats-officedocument.spreadsheetml.sheet");
|
|
|
response.setCharacterEncoding("utf-8");
|
|
|
response.setHeader("Content-disposition", "attachment;filename=" + URLEncoder.encode(fileName, "UTF-8"));
|
|
|
|
|
|
- // 写入Excel
|
|
|
- EasyExcel.write(response.getOutputStream(), WorkShopExportVo.class)
|
|
|
- .sheet("车间作业跟踪")
|
|
|
- .doWrite(res);
|
|
|
+ ExcelWriter excelWriter = EasyExcel.write(response.getOutputStream()).build();
|
|
|
+
|
|
|
+ // Sheet1 -
|
|
|
+ WriteSheet writeSheet1 = EasyExcel.writerSheet("车间作业跟踪")
|
|
|
+ .head(WorkShopExportVo.class)
|
|
|
+ .registerWriteHandler(new SpecificRowDropDownHandler(
|
|
|
+ 1, // 第2列(索引1)
|
|
|
+ rowFilter,
|
|
|
+ null,
|
|
|
+ deviceExpression
|
|
|
+ ))
|
|
|
+ .build();
|
|
|
+ excelWriter.write(res, writeSheet1);
|
|
|
+
|
|
|
+ // 第二个Sheet:设备列表(直接写入字符串列表)
|
|
|
+ WriteSheet deviceSheet = EasyExcel.writerSheet(1, "下拉选")
|
|
|
+ .head(DeviceCodeAndNameDownVo.class)
|
|
|
+ .build();
|
|
|
+ excelWriter.write(devices, deviceSheet);
|
|
|
+ excelWriter.finish();
|
|
|
+// // 写入Excel
|
|
|
+// EasyExcel.write(response.getOutputStream(), WorkShopExportVo.class)
|
|
|
+// .registerWriteHandler(new SpecificRowDropDownHandler(
|
|
|
+// 1, // 第2列(索引1)
|
|
|
+// rowFilter,
|
|
|
+// statusOptions
|
|
|
+// ))
|
|
|
+// .sheet("车间作业跟踪")
|
|
|
+// .doWrite(res);
|
|
|
}
|
|
|
|
|
|
public static JSONObject convertKeysToLowercase(JSONObject original) {
|
|
@@ -2704,10 +2746,11 @@ public class ApsProcessOperationProcessEquServiceImpl extends ServiceImpl<ApsPro
|
|
|
continue;
|
|
|
}
|
|
|
//查找【当前加工设备】=(生产设备列表查找设备编号=当前作业明细设备编号的设备)
|
|
|
- AspCheckItemsDo aspCheckItemsDo = allDeviceList.stream().filter(item -> item.getCheckitemcode().equals(workShopExportVo.getProcessdevicecode())).findFirst().orElse(null);
|
|
|
+ String processdevicecode = workShopExportVo.getProcessdevicecode().split("\\(")[0];
|
|
|
+ AspCheckItemsDo aspCheckItemsDo = allDeviceList.stream().filter(item -> item.getCheckitemcode().equals(processdevicecode)).findFirst().orElse(null);
|
|
|
//如果没找到,则遍历下一个作业明细,并添加错误信息:第{行号}行的加工设备编号{加工设备编号}不正确;
|
|
|
if (aspCheckItemsDo == null) {
|
|
|
- errorMessageList.add("第" + num + "行的加工设备编号" + workShopExportVo.getProcessdevicecode() + "不正确;");
|
|
|
+ errorMessageList.add("第" + num + "行的加工设备编号" + processdevicecode + "不正确;");
|
|
|
continue;
|
|
|
}
|
|
|
//查找【当前工序】=(工序列表中工序=当前作业明细工序的工序)
|
|
@@ -2798,6 +2841,7 @@ public class ApsProcessOperationProcessEquServiceImpl extends ServiceImpl<ApsPro
|
|
|
}
|
|
|
}
|
|
|
needUpdate.setPlanenddate(DateUtil.offsetMinute(workShopExportVo.getPlanstartdate(), workTime));
|
|
|
+ apsProcessOperationProcessEquDos.add(needUpdate);
|
|
|
}
|
|
|
}
|
|
|
JSONObject res = new JSONObject();
|