package jnpf.controller; import cn.hutool.core.bean.BeanUtil; import cn.hutool.core.util.ObjectUtil; import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; import io.swagger.v3.oas.annotations.Operation; import io.swagger.v3.oas.annotations.tags.Tag; import jnpf.base.ActionResult; import jnpf.base.UserInfo; import jnpf.exception.DataException; import jnpf.permission.entity.UserEntity; import jnpf.service.*; import jnpf.entity.*; import jnpf.util.*; import jnpf.model.yysdaylogs.*; import lombok.extern.slf4j.Slf4j; import org.apache.commons.collections4.CollectionUtils; import org.apache.commons.compress.utils.Lists; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.web.bind.annotation.*; import javax.validation.Valid; import java.time.LocalDate; import java.time.ZoneId; import java.util.*; import jnpf.annotation.JnpfField; import jnpf.base.vo.PageListVO; import jnpf.base.vo.PaginationVO; import jnpf.base.vo.DownloadVO; import jnpf.config.ConfigValueUtil; import jnpf.base.entity.ProvinceEntity; import java.io.IOException; import java.util.concurrent.ConcurrentHashMap; import java.util.stream.Collectors; import jnpf.engine.entity.FlowTaskEntity; import jnpf.exception.WorkFlowException; import org.springframework.web.multipart.MultipartFile; import cn.afterturn.easypoi.excel.ExcelExportUtil; import cn.afterturn.easypoi.excel.ExcelImportUtil; import cn.afterturn.easypoi.excel.entity.ExportParams; import cn.afterturn.easypoi.excel.entity.ImportParams; import cn.afterturn.easypoi.excel.entity.params.ExcelExportEntity; import cn.afterturn.easypoi.excel.entity.enmus.ExcelType; import org.apache.poi.hssf.usermodel.HSSFWorkbook; import org.apache.poi.ss.usermodel.Workbook; import java.io.File; import jnpf.onlinedev.model.ExcelImFieldModel; import jnpf.onlinedev.model.OnlineImport.ImportDataModel; import jnpf.onlinedev.model.OnlineImport.ImportFormCheckUniqueModel; import jnpf.onlinedev.model.OnlineImport.ExcelImportModel; import jnpf.onlinedev.model.OnlineImport.VisualImportModel; import cn.xuyanwu.spring.file.storage.FileInfo; import lombok.Cleanup; import jnpf.model.visualJson.config.HeaderModel; import jnpf.base.model.ColumnDataModel; import jnpf.base.util.VisualUtils; import org.springframework.transaction.annotation.Transactional; /** * yysDayLogs * * @版本: V3.5 * @版权: 引迈信息技术有限公司(https://www.jnpfsoft.com) * @作者: JNPF开发平台组 * @日期: 2024-08-08 */ @Slf4j @RestController @Tag(name = "yysDayLogs", description = "example") @RequestMapping("/api/example/YysDayLogs") public class YysDayLogsController { @Autowired private GeneraterSwapUtil generaterSwapUtil; @Autowired private UserProvider userProvider; @Autowired private YysDayLogsService yysDayLogsService; @Autowired private ConfigValueUtil configValueUtil; /** * 列表 * * @param yysDayLogsPagination * @return */ @Operation(summary = "获取列表") @PostMapping("/getList") public ActionResult list(@RequestBody YysDayLogsPagination yysDayLogsPagination) throws IOException { List list = yysDayLogsService.getList(yysDayLogsPagination); List> realList = new ArrayList<>(); for (YysDayLogsEntity entity : list) { Map yysDayLogsMap = JsonUtil.entityToMap(entity); yysDayLogsMap.put("id", yysDayLogsMap.get("id")); //副表数据 //子表数据 realList.add(yysDayLogsMap); } //数据转换 realList = generaterSwapUtil.swapDataList(realList, YysDayLogsConstant.getFormData(), YysDayLogsConstant.getColumnData(), yysDayLogsPagination.getModuleId(), false); //返回对象 PageListVO vo = new PageListVO(); vo.setList(realList); PaginationVO page = JsonUtil.getJsonToBean(yysDayLogsPagination, PaginationVO.class); vo.setPagination(page); return ActionResult.success(vo); } /** * 列表 * * @param yysDayLogsPagination * @return */ @Operation(summary = "获取月度报工统计列表") @PostMapping("/getListByMonth") public ActionResult getListByMonth(@RequestBody YysDayLogsPagination yysDayLogsPagination) { List list = yysDayLogsService.getListByMonth(yysDayLogsPagination); List> realList = new ArrayList<>(); PageListVO vo = new PageListVO(); PaginationVO page = JsonUtil.getJsonToBean(yysDayLogsPagination, PaginationVO.class); vo.setPagination(page); if (CollectionUtils.isEmpty(list)) { vo.setList(realList); return ActionResult.success(vo); } Map mergedLogs = new ConcurrentHashMap<>(); for (YysDayLogsEntity logs : list) { YysDayLogsDTO dto = BeanUtil.copyProperties(logs, YysDayLogsDTO.class); LocalDate date = logs.getManufactureTime().toInstant().atZone(ZoneId.systemDefault()).toLocalDate(); String yearMonth = date.getYear() + "-" + (date.getMonthValue() < 10 ? "0" : "") + date.getMonthValue(); String key = yearMonth + "_" + logs.getReportMember() + "_" + logs.getProductCode() + "_" + logs.getProductType(); dto.setYears(yearMonth); if (mergedLogs.containsKey(key)) { YysDayLogsDTO mergedLog = mergedLogs.getOrDefault(key, new YysDayLogsDTO()); int qualifiedNum = Integer.parseInt(mergedLog.getQualifiedNum()) + Integer.parseInt(logs.getQualifiedNum()); dto.setQualifiedNum(String.valueOf(qualifiedNum)); dto.setCompensatoryHour(mergedLog.getCompensatoryHour().add(logs.getCompensatoryHour())); mergedLogs.put(key, mergedLog); } mergedLogs.put(key, dto); } List resultList = new ArrayList<>(mergedLogs.values()); for (YysDayLogsDTO entity : resultList) { Map yysDayLogsMap = JsonUtil.entityToMap(entity); yysDayLogsMap.put("id", yysDayLogsMap.get("id")); //副表数据 //子表数据 realList.add(yysDayLogsMap); } //数据转换 realList = generaterSwapUtil.swapDataList(realList, YysDayLogsConstant.getFormData(), YysDayLogsConstant.getColumnData(), yysDayLogsPagination.getModuleId(), false); //返回对象 vo.setList(realList); return ActionResult.success(vo); } /** * 导出Excel * * @return */ @Operation(summary = "导出Excel") @PostMapping("/Actions/Export") public ActionResult Export(@RequestBody YysDayLogsPagination yysDayLogsPagination) throws IOException { if (StringUtil.isEmpty(yysDayLogsPagination.getSelectKey())) { return ActionResult.fail("请选择导出字段"); } String name; List list = yysDayLogsService.getList(yysDayLogsPagination); List> realList = new ArrayList<>(); if ("1".equals(yysDayLogsPagination.getExportType())) { name = "年月"; Map mergedLogs = new ConcurrentHashMap<>(); for (YysDayLogsEntity logs : list) { YysDayLogsDTO dto = BeanUtil.copyProperties(logs, YysDayLogsDTO.class); LocalDate date = logs.getManufactureTime().toInstant().atZone(ZoneId.systemDefault()).toLocalDate(); String yearMonth = date.getYear() + "-" + (date.getMonthValue() < 10 ? "0" : "") + date.getMonthValue(); String key = yearMonth + "_" + logs.getReportMember() + "_" + logs.getProductCode() + "_" + logs.getProductType(); dto.setYears(yearMonth); if (mergedLogs.containsKey(key)) { YysDayLogsDTO mergedLog = mergedLogs.getOrDefault(key, new YysDayLogsDTO()); int qualifiedNum = Integer.parseInt(mergedLog.getQualifiedNum()) + Integer.parseInt(logs.getQualifiedNum()); dto.setQualifiedNum(String.valueOf(qualifiedNum)); dto.setCompensatoryHour(mergedLog.getCompensatoryHour().add(logs.getCompensatoryHour())); mergedLogs.put(key, mergedLog); } mergedLogs.put(key, dto); } List resultList = new ArrayList<>(mergedLogs.values()); for (YysDayLogsDTO entity : resultList) { Map yysDayLogsMap = JsonUtil.entityToMap(entity); yysDayLogsMap.put("id", yysDayLogsMap.get("id")); //副表数据 //子表数据 realList.add(yysDayLogsMap); } } else { name = "生产日期"; for (YysDayLogsEntity entity : list) { Map yysDayLogsMap = JsonUtil.entityToMap(entity); yysDayLogsMap.put("id", yysDayLogsMap.get("id")); //副表数据 //子表数据 realList.add(yysDayLogsMap); } } //数据转换 realList = generaterSwapUtil.swapDataList(realList, YysDayLogsConstant.getFormData(), YysDayLogsConstant.getColumnData(), yysDayLogsPagination.getModuleId(), false); String[] keys = !StringUtil.isEmpty(yysDayLogsPagination.getSelectKey()) ? yysDayLogsPagination.getSelectKey() : new String[0]; UserInfo userInfo = userProvider.get(); DownloadVO vo = this.creatModelExcel(configValueUtil.getTemporaryFilePath(), realList, keys, userInfo, name); return ActionResult.success(vo); } /** * 导出表格方法 */ public DownloadVO creatModelExcel(String path, List> list, String[] keys, UserInfo userInfo, String name) { DownloadVO vo = DownloadVO.builder().build(); List entitys = new ArrayList<>(); if (keys.length > 0) { if ("年月".equals(name)){ for (String key : keys) { switch (key) { case "years": entitys.add(new ExcelExportEntity(name, "years")); break; case "deviceCode": entitys.add(new ExcelExportEntity("设备编码", "deviceCode")); break; case "deviceName": entitys.add(new ExcelExportEntity("设备名称", "deviceName")); break; case "sort": entitys.add(new ExcelExportEntity("顺序号", "sort")); break; case "post": entitys.add(new ExcelExportEntity("班次", "post")); break; case "startTime": entitys.add(new ExcelExportEntity("开始时间", "startTime")); break; case "endTime": entitys.add(new ExcelExportEntity("结束时间", "endTime")); break; case "productCode": entitys.add(new ExcelExportEntity("产品编码", "productCode")); break; case "productName": entitys.add(new ExcelExportEntity("产品名称", "productName")); break; case "models": entitys.add(new ExcelExportEntity("规格型号", "models")); break; case "measurementUnit": entitys.add(new ExcelExportEntity("计量单位", "measurementUnit")); break; case "reportMember": entitys.add(new ExcelExportEntity("报工成员", "reportMember")); break; case "qualifiedNum": entitys.add(new ExcelExportEntity("报工数量", "qualifiedNum")); break; case "compensatoryHour": entitys.add(new ExcelExportEntity("补偿工时", "compensatoryHour")); break; default: break; } } }else { for (String key : keys) { switch (key) { case "manufactureTime": entitys.add(new ExcelExportEntity(name, "manufactureTime")); break; case "deviceCode": entitys.add(new ExcelExportEntity("设备编码", "deviceCode")); break; case "deviceName": entitys.add(new ExcelExportEntity("设备名称", "deviceName")); break; case "sort": entitys.add(new ExcelExportEntity("顺序号", "sort")); break; case "post": entitys.add(new ExcelExportEntity("班次", "post")); break; case "startTime": entitys.add(new ExcelExportEntity("开始时间", "startTime")); break; case "endTime": entitys.add(new ExcelExportEntity("结束时间", "endTime")); break; case "productCode": entitys.add(new ExcelExportEntity("产品编码", "productCode")); break; case "productName": entitys.add(new ExcelExportEntity("产品名称", "productName")); break; case "models": entitys.add(new ExcelExportEntity("规格型号", "models")); break; case "measurementUnit": entitys.add(new ExcelExportEntity("计量单位", "measurementUnit")); break; case "reportMember": entitys.add(new ExcelExportEntity("报工成员", "reportMember")); break; case "qualifiedNum": entitys.add(new ExcelExportEntity("报工数量", "qualifiedNum")); break; case "compensatoryHour": entitys.add(new ExcelExportEntity("补偿工时", "compensatoryHour")); break; default: break; } } } } ExportParams exportParams = new ExportParams(null, "表单信息"); exportParams.setType(ExcelType.XSSF); try { @Cleanup Workbook workbook = new HSSFWorkbook(); if (entitys.size() > 0) { if (list.size() == 0) { list.add(new HashMap<>()); } //去除空数据 List> dataList = new ArrayList<>(); for (Map map : list) { int i = 0; for (String key : keys) { //子表 if (key.toLowerCase().startsWith("tablefield")) { String tableField = key.substring(0, key.indexOf("-")); String field = key.substring(key.indexOf("-") + 1); Object o = map.get(tableField); if (o != null) { List> childList = (List>) o; for (Map childMap : childList) { if (childMap.get(field) != null) { i++; } } } } else { Object o = map.get(key); if (o != null) { i++; } } } if (i > 0) { dataList.add(map); } } //复杂表头-表头和数据处理 ColumnDataModel columnDataModel = JsonUtil.getJsonToBean(YysDayLogsConstant.getColumnData(), ColumnDataModel.class); List complexHeaderList = columnDataModel.getComplexHeaderList(); if (!Objects.equals(columnDataModel.getType(), 3) && !Objects.equals(columnDataModel.getType(), 5)) { entitys = VisualUtils.complexHeaderHandel(entitys, complexHeaderList); dataList = VisualUtils.complexHeaderDataHandel(dataList, complexHeaderList); } workbook = ExcelExportUtil.exportExcel(exportParams, entitys, dataList); } String fileName = "表单信息" + DateUtil.dateNow("yyyyMMdd") + "_" + RandomUtil.uuId() + ".xlsx"; MultipartFile multipartFile = ExcelUtil.workbookToCommonsMultipartFile(workbook, fileName); String temporaryFilePath = configValueUtil.getTemporaryFilePath(); FileInfo fileInfo = FileUploadUtils.uploadFile(multipartFile, temporaryFilePath, fileName); vo.setName(fileInfo.getFilename()); vo.setUrl(UploaderUtil.uploaderFile(fileInfo.getFilename() + "#" + "Temporary") + "&name=" + fileName); } catch (Exception e) { log.error("信息导出Excel错误:{}", e.getMessage()); e.printStackTrace(); } return vo; } /** * 创建 * * @param yysDayLogsForm * @return */ @PostMapping() @Operation(summary = "创建") public ActionResult create(@RequestBody @Valid YysDayLogsForm yysDayLogsForm) { String b = yysDayLogsService.checkForm(yysDayLogsForm, 0); if (StringUtil.isNotEmpty(b)) { return ActionResult.fail(b); } try { yysDayLogsService.saveOrUpdate(yysDayLogsForm, null, true); } catch (Exception e) { return ActionResult.fail("新增数据失败"); } return ActionResult.success("创建成功"); } /** * 编辑 * * @param id * @param yysDayLogsForm * @return */ @PutMapping("/{id}") @Operation(summary = "更新") public ActionResult update(@PathVariable("id") String id, @RequestBody @Valid YysDayLogsForm yysDayLogsForm, @RequestParam(value = "isImport", required = false) boolean isImport) { yysDayLogsForm.setId(id); if (!isImport) { String b = yysDayLogsService.checkForm(yysDayLogsForm, 1); if (StringUtil.isNotEmpty(b)) { return ActionResult.fail(b); } } YysDayLogsEntity entity = yysDayLogsService.getInfo(id); if (entity != null) { try { yysDayLogsService.saveOrUpdate(yysDayLogsForm, id, false); } catch (Exception e) { return ActionResult.fail("修改数据失败"); } return ActionResult.success("更新成功"); } else { return ActionResult.fail("更新失败,数据不存在"); } } /** * 删除 * * @param id * @return */ @Operation(summary = "删除") @DeleteMapping("/{id}") @Transactional public ActionResult delete(@PathVariable("id") String id) { YysDayLogsEntity entity = yysDayLogsService.getInfo(id); if (entity != null) { //假删除 entity.setDeleteMark(1); yysDayLogsService.update(id, entity); } return ActionResult.success("删除成功"); } /** * 表单信息(详情页) * 详情页面使用-转换数据 * * @param id * @return */ @Operation(summary = "表单信息(详情页)") @GetMapping("/detail/{id}") public ActionResult detailInfo(@PathVariable("id") String id) { YysDayLogsEntity entity = yysDayLogsService.getInfo(id); if (entity == null) { return ActionResult.fail("表单数据不存在!"); } Map yysDayLogsMap = JsonUtil.entityToMap(entity); yysDayLogsMap.put("id", yysDayLogsMap.get("id")); //副表数据 //子表数据 yysDayLogsMap = generaterSwapUtil.swapDataDetail(yysDayLogsMap, YysDayLogsConstant.getFormData(), "591260101755544965", false); return ActionResult.success(yysDayLogsMap); } /** * 获取详情(编辑页) * 编辑页面使用-不转换数据 * * @param id * @return */ @Operation(summary = "信息") @GetMapping("/{id}") public ActionResult info(@PathVariable("id") String id) { YysDayLogsEntity entity = yysDayLogsService.getInfo(id); if (entity == null) { return ActionResult.fail("表单数据不存在!"); } Map yysDayLogsMap = JsonUtil.entityToMap(entity); yysDayLogsMap.put("id", yysDayLogsMap.get("id")); //副表数据 //子表数据 yysDayLogsMap = generaterSwapUtil.swapDataForm(yysDayLogsMap, YysDayLogsConstant.getFormData(), YysDayLogsConstant.TABLEFIELDKEY, YysDayLogsConstant.TABLERENAMES); return ActionResult.success(yysDayLogsMap); } }