From 725f2ed0ad286dd5a910464e2bf159f81f4f17ef Mon Sep 17 00:00:00 2001 From: guoshengxiong <1923636941@qq.com> Date: Tue, 29 Apr 2025 18:30:55 +0800 Subject: [PATCH] =?UTF-8?q?=E5=8C=85=E5=A4=B4bug=E4=BF=AE=E5=A4=8D?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../plan/controller/PlanRecordController.java | 215 ++++++++++++------ .../baotou/plan/entity/PlanMilestoneVal.java | 6 +- .../service/impl/PlanRecordServiceImpl.java | 4 +- .../java/com/zhgd/xmgl/util/FlowUtil.java | 32 ++- 4 files changed, 171 insertions(+), 86 deletions(-) diff --git a/src/main/java/com/zhgd/xmgl/modules/baotou/plan/controller/PlanRecordController.java b/src/main/java/com/zhgd/xmgl/modules/baotou/plan/controller/PlanRecordController.java index 5eb35c789..db5a8265f 100644 --- a/src/main/java/com/zhgd/xmgl/modules/baotou/plan/controller/PlanRecordController.java +++ b/src/main/java/com/zhgd/xmgl/modules/baotou/plan/controller/PlanRecordController.java @@ -1,6 +1,8 @@ package com.zhgd.xmgl.modules.baotou.plan.controller; import cn.hutool.core.collection.CollUtil; +import cn.hutool.core.convert.Convert; +import cn.hutool.core.date.DateUtil; import cn.hutool.core.util.NumberUtil; import cn.hutool.core.util.StrUtil; import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; @@ -8,12 +10,15 @@ import com.baomidou.mybatisplus.core.metadata.IPage; import com.baomidou.mybatisplus.extension.plugins.pagination.Page; import com.zhgd.annotation.OperLog; import com.zhgd.jeecg.common.api.vo.Result; +import com.zhgd.jeecg.common.execption.OpenAlertException; import com.zhgd.xmgl.modules.baotou.plan.entity.*; import com.zhgd.xmgl.modules.baotou.plan.entity.vo.PlanRecordCurve; import com.zhgd.xmgl.modules.baotou.plan.mapper.PlanRecordMapper; import com.zhgd.xmgl.modules.baotou.plan.service.*; import com.zhgd.xmgl.modules.baotou.plan.service.impl.PlanRecordServiceImpl; +import com.zhgd.xmgl.util.ExcelUtils; import com.zhgd.xmgl.util.MapBuilder; +import com.zhgd.xmgl.util.MessageUtil; import io.swagger.annotations.Api; import io.swagger.annotations.ApiImplicitParam; import io.swagger.annotations.ApiImplicitParams; @@ -23,7 +28,9 @@ import org.apache.commons.collections.MapUtils; import org.simpleframework.xml.core.Validate; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.context.annotation.Lazy; +import org.springframework.transaction.annotation.Transactional; import org.springframework.web.bind.annotation.*; +import org.springframework.web.multipart.MultipartFile; import springfox.documentation.annotations.ApiIgnore; import javax.servlet.http.HttpServletResponse; @@ -540,72 +547,146 @@ public class PlanRecordController { // } -// /** -// *录入数据-作业0427 -// * -// * @return -// */ -// @Transactional(rollbackFor = Exception.class) -// @PostMapping(value = "/importWorker") -// public Result importWorker(@RequestParam("file") MultipartFile file) { -// List> list = null; -// try { -// list = ExcelUtils.jxlExlToList(file.getInputStream(), 0); -// if (list == null || list.size() == 0) { -// throw new OpenAlertException(MessageUtil.get("excelNotDataErr")); -// } -// Integer sort = 1; -// Map codeNameMap = planRecordService.list(new LambdaQueryWrapper() -// .eq(PlanRecord::getPbsId,1899717371193204738L)).stream().collect(Collectors.toMap(planRecord -> planRecord.getCode()+":"+planRecord.getJobName(), Function.identity(), (o1, o2) -> o1)); -// List addList = new ArrayList<>(); -// List updateList = new ArrayList<>(); -// for (Map map : list) { -// String zyCodeName = null; -// //专业编号 作业编号 作业名称 作业开始时间 作业结束时间 作业权重 -// if (StrUtil.isNotBlank(zyCodeName = StrUtil.trim(map.get("专业编号")) + ":" + StrUtil.trim(map.get("专业名称")))) { -// sort++; -// PlanRecord record = new PlanRecord(); -// record.setProjectSn("5B8B3DB047214AE188F2C7916DD08203"); -// record.setCode(StrUtil.trim(map.get("作业编号"))); -// record.setJobName(StrUtil.trim(map.get("作业名称"))); -// record.setPlannedStart(DateUtil.parseDate(StrUtil.trim(map.get("作业开始时间")))); -// record.setPlannedFinish(DateUtil.parseDate(StrUtil.trim(map.get("作业结束时间")))); -// record.setActualStart(record.getPlannedStart()); -// record.setActualFinish(record.getPlannedFinish()); -// record.setExpectedFinish(record.getPlannedFinish()); -// record.setWeightRate(NumberUtil.mul(Convert.toBigDecimal(StrUtil.trim(map.get("作业权重"))), new BigDecimal("100"))); -// record.setCtlLevel(1); -// record.setWorkType(1); -// PlanRecord parent = codeNameMap.get(zyCodeName); -// if (parent == null) { -// throw new OpenAlertException(zyCodeName + "不存在"); -// } -// record.setParentId(parent.getId()); -// record.setAncestors(parent.getAncestors() + "," + parent.getId()); -// record.setPbsId(1899717371193204738L); -// record.setSort(sort); -// codeNameMap.compute(record.getCode(), (key, val) -> { -// if (val == null) { -// addList.add(record); -// } else { -// record.setId(val.getId()); -// updateList.add(record); -// } -// return record; -// }); -// } -// } -// if (CollUtil.isNotEmpty(addList)) { -// planRecordService.saveBatch(addList); -// } -// if (CollUtil.isNotEmpty(updateList)) { -// planRecordService.updateBatchById(updateList); -// } -// } catch (Exception e) { -// e.printStackTrace(); -// throw new OpenAlertException(); -// } -// return Result.ok(); -// } + /** + * 录入作业数据-作业0427 + * + * @return + */ + @Transactional(rollbackFor = Exception.class) + @PostMapping(value = "/importWork") + public Result importWork(@RequestParam("file") MultipartFile file, @RequestParam HashMap param) { + List> list = null; + String zyCodeName = null; + try { + list = ExcelUtils.jxlExlToList(file.getInputStream(), 0); + if (list == null || list.size() == 0) { + throw new OpenAlertException(MessageUtil.get("excelNotDataErr")); + } + long pbsId = MapUtils.getLong(param, "pbsId"); + String projectSn = "5B8B3DB047214AE188F2C7916DD08203"; + Map codeNameMap = planRecordService.list(new LambdaQueryWrapper() + .eq(PlanRecord::getPbsId, pbsId)).stream().collect(Collectors.toMap(planRecord -> planRecord.getCode() + ":" + planRecord.getJobName(), Function.identity(), (o1, o2) -> o1)); + Integer sort = codeNameMap.values().stream().map(PlanRecord::getSort).filter(Objects::nonNull).max(Comparator.comparing(Integer::intValue)).orElse(1); + List addList = new ArrayList<>(); + List updateList = new ArrayList<>(); + for (Map map : list) { + //专业编号 作业编号 作业名称 作业开始时间 作业结束时间 作业权重 + if (StrUtil.isNotBlank(zyCodeName = StrUtil.trim(map.get("专业编号")) + ":" + StrUtil.trim(map.get("专业名称")))) { + sort++; + PlanRecord record = new PlanRecord(); + record.setProjectSn(projectSn); + record.setCode(StrUtil.trim(map.get("作业编号"))); + record.setJobName(StrUtil.trim(map.get("作业名称"))); + record.setPlannedStart(DateUtil.parseDate(StrUtil.trim(map.get("作业开始时间")))); + record.setPlannedFinish(DateUtil.parseDate(StrUtil.trim(map.get("作业结束时间")))); + record.setActualStart(record.getPlannedStart()); + record.setActualFinish(record.getPlannedFinish()); + record.setExpectedFinish(record.getPlannedFinish()); + record.setWeightRate(NumberUtil.mul(Convert.toBigDecimal(StrUtil.trim(map.get("作业权重"))), new BigDecimal("100"))); + record.setCtlLevel(1); + record.setWorkType(1); + PlanRecord parent = codeNameMap.get(zyCodeName); + if (parent == null) { + throw new OpenAlertException(zyCodeName + "不存在"); + } + record.setParentId(parent.getId()); + record.setAncestors(parent.getAncestors() + "," + parent.getId()); + record.setPbsId(pbsId); + record.setSort(sort); + codeNameMap.compute(record.getCode() + ":" + record.getJobName(), (key, val) -> { + if (val == null) { + addList.add(record); + } else { + record.setId(val.getId()); + updateList.add(record); + } + return record; + }); + } + } + if (CollUtil.isNotEmpty(addList)) { + planRecordService.saveBatch(addList); + } + if (CollUtil.isNotEmpty(updateList)) { + planRecordService.updateBatchById(updateList); + } + } catch (Exception e) { + e.printStackTrace(); + return Result.error(zyCodeName + e.getMessage()); + } + return Result.ok(); + } + + + /** + * 录入专业-0429 + * + * @return + */ + @Transactional(rollbackFor = Exception.class) + @PostMapping(value = "/importProfession") + public Result importProfession(@RequestParam("file") MultipartFile file, @RequestParam HashMap param) { + List> list = null; + try { + list = ExcelUtils.jxlExlToList(file.getInputStream(), 0); + if (list == null || list.size() == 0) { + throw new OpenAlertException(MessageUtil.get("excelNotDataErr")); + } + long pbsId = MapUtils.getLong(param, "pbsId"); + String projectSn = "5B8B3DB047214AE188F2C7916DD08203"; + Map codeMap = planRecordService.list(new LambdaQueryWrapper() + .eq(PlanRecord::getPbsId, pbsId)).stream().collect(Collectors.toMap(planRecord -> planRecord.getCode(), Function.identity(), (o1, o2) -> o1)); + Integer sort = codeMap.values().stream().map(PlanRecord::getSort).filter(Objects::nonNull).max(Comparator.comparing(Integer::intValue)).orElse(1); + List addList = new ArrayList<>(); + List updateList = new ArrayList<>(); + for (Map map : list) { + String zyCode = null; + //上级WBS编号 编号 名称 计划开始 计划完成 权重(%) + if (StrUtil.isNotBlank(zyCode = StrUtil.trim(map.get("上级WBS编号")))) { + sort++; + PlanRecord record = new PlanRecord(); + record.setProjectSn(projectSn); + record.setCode(StrUtil.trim(map.get("编号"))); + record.setJobName(StrUtil.trim(map.get("名称"))); + record.setPlannedStart(DateUtil.parseDate(StrUtil.trim(map.get("计划开始")))); + record.setPlannedFinish(DateUtil.parseDate(StrUtil.trim(map.get("计划完成")))); + record.setActualStart(record.getPlannedStart()); + record.setActualFinish(record.getPlannedFinish()); + record.setExpectedFinish(record.getPlannedFinish()); + record.setWeightRate(NumberUtil.mul(Convert.toBigDecimal(StrUtil.trim(map.get("权重(%)"))), new BigDecimal("100"))); + record.setCtlLevel(1); + record.setWorkType(2); + PlanRecord parent = codeMap.get(zyCode); + if (parent == null) { + throw new OpenAlertException(zyCode + "不存在"); + } + record.setParentId(parent.getId()); + record.setAncestors(parent.getAncestors() + "," + parent.getId()); + record.setPbsId(pbsId); + record.setSort(sort); + codeMap.compute(record.getCode(), (key, val) -> { + if (val == null) { + addList.add(record); + } else { + record.setId(val.getId()); + updateList.add(record); + } + return record; + }); + } + } + if (CollUtil.isNotEmpty(addList)) { + planRecordService.saveBatch(addList); + } + if (CollUtil.isNotEmpty(updateList)) { + planRecordService.updateBatchById(updateList); + } + } catch (Exception e) { + e.printStackTrace(); + throw new OpenAlertException(); + } + return Result.ok(); + } + } diff --git a/src/main/java/com/zhgd/xmgl/modules/baotou/plan/entity/PlanMilestoneVal.java b/src/main/java/com/zhgd/xmgl/modules/baotou/plan/entity/PlanMilestoneVal.java index 448466259..8c310afcb 100644 --- a/src/main/java/com/zhgd/xmgl/modules/baotou/plan/entity/PlanMilestoneVal.java +++ b/src/main/java/com/zhgd/xmgl/modules/baotou/plan/entity/PlanMilestoneVal.java @@ -72,7 +72,11 @@ public class PlanMilestoneVal implements Serializable { @DateTimeFormat(pattern = "yyyy-MM-dd") @ApiModelProperty(value = "计划完成日期 yyyy-MM-dd") private java.util.Date planCompleteDate; - + /** + * 1选择百分比2选择日期 + */ + @ApiModelProperty(value = "1选择百分比2选择日期") + private java.lang.Integer selectType; @TableField(exist = false) private String milestoneName; @TableField(exist = false) diff --git a/src/main/java/com/zhgd/xmgl/modules/baotou/plan/service/impl/PlanRecordServiceImpl.java b/src/main/java/com/zhgd/xmgl/modules/baotou/plan/service/impl/PlanRecordServiceImpl.java index 08c937378..7f63b171b 100644 --- a/src/main/java/com/zhgd/xmgl/modules/baotou/plan/service/impl/PlanRecordServiceImpl.java +++ b/src/main/java/com/zhgd/xmgl/modules/baotou/plan/service/impl/PlanRecordServiceImpl.java @@ -1,8 +1,10 @@ package com.zhgd.xmgl.modules.baotou.plan.service.impl; +import java.util.Date; import cn.afterturn.easypoi.excel.entity.TemplateExportParams; import cn.hutool.core.bean.BeanUtil; import cn.hutool.core.collection.CollUtil; +import cn.hutool.core.convert.Convert; import cn.hutool.core.date.DateUtil; import cn.hutool.core.util.NumberUtil; import cn.hutool.core.util.ObjectUtil; @@ -27,6 +29,7 @@ import com.zhgd.xmgl.util.*; import org.apache.commons.collections.MapUtils; import org.apache.commons.lang3.tuple.ImmutablePair; import org.apache.commons.lang3.tuple.Pair; +import org.springframework.beans.BeanUtils; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.context.annotation.Lazy; import org.springframework.stereotype.Service; @@ -301,7 +304,6 @@ public class PlanRecordServiceImpl extends ServiceImpl queryTreePage(HashMap param) { List list = this.queryList(param); diff --git a/src/main/java/com/zhgd/xmgl/util/FlowUtil.java b/src/main/java/com/zhgd/xmgl/util/FlowUtil.java index b8c18991a..2aa919da1 100644 --- a/src/main/java/com/zhgd/xmgl/util/FlowUtil.java +++ b/src/main/java/com/zhgd/xmgl/util/FlowUtil.java @@ -24,13 +24,19 @@ public class FlowUtil { * @return */ public static String getFileUrl(Map map, String key) { + if (isEmpty(map.get(key))) { + return null; + } return Optional.ofNullable(map.get(key)).map(o -> { - if ("".equals(o)) { - return null; - } else if (o instanceof String) { - return ((Map) (JSON.parseArray(o.toString())).get(0)).get("url").toString(); + if (o instanceof String) { + JSONArray jsonArray = JSON.parseArray(o.toString()); + if (jsonArray.size() == 0) { + return null; + } else { + return Optional.ofNullable((Map) jsonArray.get(0)).map(m -> m.get("url").toString()).orElse(null); + } } else { - return ((Map) getFirstFromListNotNull(o)).get("url").toString(); + return Optional.ofNullable((Map) getFirstFromListNotNull(o)).map(m -> m.get("url").toString()).orElse(null); } }).orElse(null); } @@ -54,17 +60,6 @@ public class FlowUtil { return StrUtil.join(",", collect); } - /** - * 获取文件url完整链接 - * - * @param map - * @param key - * @return - */ - public static String getFileUrlWithHost(Map map, String key) { - return Optional.ofNullable(map.get(key)).map(o -> "".equals(o) ? null : PathUtil.getDomain() + ((Map) getFirstFromListNotNull(o)).get("url").toString()).orElse(null); - } - /** * 获取文件原来的名称 * @@ -73,7 +68,10 @@ public class FlowUtil { * @return */ public static String getFileOriginFileName(Map map, String key) { - return Optional.ofNullable(map.get(key)).map(o -> "".equals(o) ? null : ((Map) getFirstFromListNotNull(o)).get("name").toString()).orElse(null); + if (isEmpty(map.get(key))) { + return null; + } + return Optional.ofNullable((Map) getFirstFromListNotNull(map.get(key))).map(m -> m.get("name").toString()).orElse(null); } /**