Browse Source

用户管理调整1

zhoulisky 4 weeks ago
parent
commit
0cc14ea7ce
13 changed files with 40 additions and 33 deletions
  1. 0 0
      doc/xls导入模板/研发费用管理/8.委托外部研究开发费用.xlsx
  2. BIN
      doc/xls导入模板/研发项目管理/预算编制/委托外部研究开发费.xls
  3. 5 3
      kd-service-api/kd-scientific-api/src/main/java/org/sky/scientific/pojo/vo/DailyHours.java
  4. 5 4
      kd-service-api/kd-scientific-api/src/main/java/org/sky/scientific/pojo/vo/TechnicianHoursMonthlyVO.java
  5. 4 4
      kd-service/kd-scientific/src/main/java/org/sky/scientific/excel/handle/TechnicianWorkStatisticsMergeStrategy.java
  6. 2 1
      kd-service/kd-scientific/src/main/java/org/sky/scientific/excel/listener/TechnicianImportListener.java
  7. 1 0
      kd-service/kd-scientific/src/main/java/org/sky/scientific/excel/listener/XmCostDetailImportListener.java
  8. 1 1
      kd-service/kd-scientific/src/main/java/org/sky/scientific/excel/listener/YsQtfyImportListener.java
  9. 2 2
      kd-service/kd-scientific/src/main/java/org/sky/scientific/excel/listener/YsWtwbyjkffyImportListener.java
  10. 1 1
      kd-service/kd-scientific/src/main/java/org/sky/scientific/excel/listener/YsZbtsysyfyImportListener.java
  11. 19 17
      kd-service/kd-scientific/src/main/java/org/sky/scientific/service/impl/XmTechnicianHoursServiceImpl.java
  12. BIN
      kd-service/kd-scientific/src/main/resources/export-template/研发项目管理/预算编制/其他费用.xls
  13. BIN
      kd-service/kd-scientific/src/main/resources/export-template/研发项目管理/预算编制/装备调试费用与试验费用.xls

doc/xls导入模板/研发费用管理/委托外部研究开发费用.xlsx → doc/xls导入模板/研发费用管理/8.委托外部研究开发费用.xlsx


BIN
doc/xls导入模板/研发项目管理/预算编制/委托外部研究开发费.xls


+ 5 - 3
kd-service-api/kd-scientific-api/src/main/java/org/sky/scientific/pojo/vo/DailyHours.java

@@ -3,16 +3,18 @@ package org.sky.scientific.pojo.vo;
 import io.swagger.v3.oas.annotations.media.Schema;
 import io.swagger.v3.oas.annotations.media.Schema;
 import lombok.Data;
 import lombok.Data;
 
 
+import java.math.BigDecimal;
+
 @Data
 @Data
 public class DailyHours {
 public class DailyHours {
 
 
 	@Schema(description = "日期")
 	@Schema(description = "日期")
 	private String workDate;
 	private String workDate;
 	@Schema(description = "研发时长")
 	@Schema(description = "研发时长")
-	private Double workHours;
+	private BigDecimal workHours;
 	@Schema(description = "考勤时长")
 	@Schema(description = "考勤时长")
-	private Double attendanceHours;
+	private BigDecimal attendanceHours;
 	@Schema(description = "非研发时长")
 	@Schema(description = "非研发时长")
-	private Double unworkHours;
+	private BigDecimal unworkHours;
 
 
 }
 }

+ 5 - 4
kd-service-api/kd-scientific-api/src/main/java/org/sky/scientific/pojo/vo/TechnicianHoursMonthlyVO.java

@@ -5,6 +5,7 @@ import jakarta.validation.constraints.NotNull;
 import lombok.Data;
 import lombok.Data;
 
 
 import java.io.Serializable;
 import java.io.Serializable;
+import java.math.BigDecimal;
 import java.util.List;
 import java.util.List;
 
 
 /**
 /**
@@ -34,16 +35,16 @@ public class TechnicianHoursMonthlyVO implements Serializable {
 	private List<DailyHours> dailyHoursList;
 	private List<DailyHours> dailyHoursList;
 
 
 	@Schema(description="研发工时合计")
 	@Schema(description="研发工时合计")
- 	private Double workHoursTotal;
+ 	private BigDecimal workHoursTotal;
 
 
 	@Schema(description = "非研发工时合计")
 	@Schema(description = "非研发工时合计")
-	private Double unworkHoursTotal;
+	private BigDecimal unworkHoursTotal;
 
 
 	@Schema(description="研发工时分配率")
 	@Schema(description="研发工时分配率")
-	private Double workHoursRate;
+	private BigDecimal workHoursRate;
 
 
 	@Schema(description = "非研发工时分配率")
 	@Schema(description = "非研发工时分配率")
-	private Double unworkHoursRate;
+	private BigDecimal unworkHoursRate;
 
 
 	private String xh;
 	private String xh;
 
 

+ 4 - 4
kd-service/kd-scientific/src/main/java/org/sky/scientific/excel/handle/TechnicianWorkStatisticsMergeStrategy.java

@@ -136,7 +136,7 @@ public class TechnicianWorkStatisticsMergeStrategy implements SheetWriteHandler
 		//第二行:周几行
 		//第二行:周几行
 		for (int i = 1; i <= daysInMonth; i++) {
 		for (int i = 1; i <= daysInMonth; i++) {
 			LocalDate date = LocalDate.of(year, month, i);
 			LocalDate date = LocalDate.of(year, month, i);
-			verticalHeaderRow.add(date.format(weekFormatter).substring(1));
+			verticalHeaderRow.add(" " + date.format(weekFormatter).substring(1) + " ");
 		}
 		}
 
 
 		verticalHeaderRow.add("合计");
 		verticalHeaderRow.add("合计");
@@ -179,7 +179,7 @@ public class TechnicianWorkStatisticsMergeStrategy implements SheetWriteHandler
 				dataRow.add((index%2==0)?"研发工时":"非研发工时");
 				dataRow.add((index%2==0)?"研发工时":"非研发工时");
 
 
 				// 每日考勤数据
 				// 每日考勤数据
-				Map<String, Double> dailyMap = new HashMap<>();
+				Map<String, BigDecimal> dailyMap = new HashMap<>();
 
 
 				for (DailyHours daily : vo.getDailyHoursList()) {
 				for (DailyHours daily : vo.getDailyHoursList()) {
 					dailyMap.put(daily.getWorkDate(), (index%2==0)?daily.getWorkHours():daily.getUnworkHours());
 					dailyMap.put(daily.getWorkDate(), (index%2==0)?daily.getWorkHours():daily.getUnworkHours());
@@ -188,12 +188,12 @@ public class TechnicianWorkStatisticsMergeStrategy implements SheetWriteHandler
 				for (int day = 1; day <= daysInMonth; day++) {
 				for (int day = 1; day <= daysInMonth; day++) {
 					LocalDate currentDate = LocalDate.of(year, month, day);
 					LocalDate currentDate = LocalDate.of(year, month, day);
 					String dateKey = currentDate.format(dateFormatter);
 					String dateKey = currentDate.format(dateFormatter);
-					dataRow.add(dailyMap.getOrDefault(dateKey, 0.0));
+					dataRow.add(dailyMap.getOrDefault(dateKey, new BigDecimal("0.0")));
 				}
 				}
 				//合计
 				//合计
 				dataRow.add((index%2==0)?vo.getWorkHoursTotal():vo.getUnworkHoursTotal());
 				dataRow.add((index%2==0)?vo.getWorkHoursTotal():vo.getUnworkHoursTotal());
 				//工时分配率
 				//工时分配率
-				dataRow.add(BigDecimal.valueOf(index%2==0?vo.getWorkHoursRate()*100.00:vo.getUnworkHoursRate()*100.00).setScale(2, RoundingMode.HALF_UP));
+				dataRow.add(index%2==0?vo.getWorkHoursRate().multiply(new BigDecimal("100.00")):vo.getUnworkHoursRate().multiply(new BigDecimal("100.00")).setScale(2, RoundingMode.HALF_UP));
 				data.add(dataRow);
 				data.add(dataRow);
 				index ++;
 				index ++;
 			}
 			}

+ 2 - 1
kd-service/kd-scientific/src/main/java/org/sky/scientific/excel/listener/TechnicianImportListener.java

@@ -4,6 +4,7 @@ import com.alibaba.excel.context.AnalysisContext;
 import lombok.extern.slf4j.Slf4j;
 import lombok.extern.slf4j.Slf4j;
 import org.sky.core.tool.utils.DateUtil;
 import org.sky.core.tool.utils.DateUtil;
 import org.sky.core.tool.utils.Func;
 import org.sky.core.tool.utils.Func;
+import org.sky.core.tool.utils.StringUtil;
 import org.sky.scientific.excel.TechnicianExcel;
 import org.sky.scientific.excel.TechnicianExcel;
 import org.sky.scientific.utils.ImportResult;
 import org.sky.scientific.utils.ImportResult;
 import org.sky.scientific.utils.ValidationUtils;
 import org.sky.scientific.utils.ValidationUtils;
@@ -91,7 +92,7 @@ public class TechnicianImportListener extends BaseReadListener {
 		excel.setMajor(data.get(15));
 		excel.setMajor(data.get(15));
 
 
 		String rank = data.get(16);
 		String rank = data.get(16);
-		if (Func.isNotBlank(rank)) {
+		if (Func.isNotBlank(rank) && !StringUtil.equals("无", rank.trim())) {
 			List<String> rankList = DictCache.getList("zhicheng").stream().map(Dict::getDictValue).toList();
 			List<String> rankList = DictCache.getList("zhicheng").stream().map(Dict::getDictValue).toList();
 			if (Func.isNotEmpty(rankList) && !rankList.contains(rank.trim())) {
 			if (Func.isNotEmpty(rankList) && !rankList.contains(rank.trim())) {
 				errors.add("职称错误,请重新选择");
 				errors.add("职称错误,请重新选择");

+ 1 - 0
kd-service/kd-scientific/src/main/java/org/sky/scientific/excel/listener/XmCostDetailImportListener.java

@@ -42,6 +42,7 @@ public class XmCostDetailImportListener extends BaseReadListener {
 		if(recordDate==null){
 		if(recordDate==null){
 			errors.add("日期为空或格式错误,yyyy-MM-dd");
 			errors.add("日期为空或格式错误,yyyy-MM-dd");
 		}
 		}
+		excel.setRecordDate(recordDate);
 		excel.setXmbh(data.get(2));
 		excel.setXmbh(data.get(2));
 		if(Func.isBlank(excel.getXmbh())){
 		if(Func.isBlank(excel.getXmbh())){
 			errors.add("研发项目编号为空");
 			errors.add("研发项目编号为空");

+ 1 - 1
kd-service/kd-scientific/src/main/java/org/sky/scientific/excel/listener/YsQtfyImportListener.java

@@ -38,7 +38,7 @@ public class YsQtfyImportListener extends BaseReadListener {
 		excel.setXh(data.get(0));
 		excel.setXh(data.get(0));
 		excel.setFynr(data.get(1));
 		excel.setFynr(data.get(1));
 
 
-		String ysje = data.get(4);
+		String ysje = data.get(2);
 		if(Func.isNotBlank(ysje)){
 		if(Func.isNotBlank(ysje)){
 			excel.setYsje(ValidationUtils.safeParseDouble(ysje));
 			excel.setYsje(ValidationUtils.safeParseDouble(ysje));
 			if (Func.isNull(excel.getYsje())) {
 			if (Func.isNull(excel.getYsje())) {

+ 2 - 2
kd-service/kd-scientific/src/main/java/org/sky/scientific/excel/listener/YsWtwbyjkffyImportListener.java

@@ -37,9 +37,9 @@ public class YsWtwbyjkffyImportListener extends BaseReadListener {
 		YsWtwbyjkffyExcel excel = new YsWtwbyjkffyExcel();
 		YsWtwbyjkffyExcel excel = new YsWtwbyjkffyExcel();
 		excel.setXh(data.get(0));
 		excel.setXh(data.get(0));
 		excel.setStdwmc(data.get(1));
 		excel.setStdwmc(data.get(1));
-		excel.setZznr(data.get(3));
+		excel.setZznr(data.get(2));
 
 
-		String wwfy = data.get(4);
+		String wwfy = data.get(3);
 		if(Func.isNotBlank(wwfy)){
 		if(Func.isNotBlank(wwfy)){
 			excel.setWwfy(ValidationUtils.safeParseDouble(wwfy));
 			excel.setWwfy(ValidationUtils.safeParseDouble(wwfy));
 			if (Func.isNull(excel.getWwfy())) {
 			if (Func.isNull(excel.getWwfy())) {

+ 1 - 1
kd-service/kd-scientific/src/main/java/org/sky/scientific/excel/listener/YsZbtsysyfyImportListener.java

@@ -38,7 +38,7 @@ public class YsZbtsysyfyImportListener extends BaseReadListener {
 		YsZbtsysyfyExcel excel = new YsZbtsysyfyExcel();
 		YsZbtsysyfyExcel excel = new YsZbtsysyfyExcel();
 		excel.setXh(data.get(0));
 		excel.setXh(data.get(0));
 		excel.setFyje(data.get(1));
 		excel.setFyje(data.get(1));
-		String ysje = data.get(3);
+		String ysje = data.get(2);
 		if(Func.isNotBlank(ysje)){
 		if(Func.isNotBlank(ysje)){
 			excel.setYsje(ValidationUtils.safeParseBigDecimal(ysje));
 			excel.setYsje(ValidationUtils.safeParseBigDecimal(ysje));
 			if (Func.isNull(excel.getYsje())) {
 			if (Func.isNull(excel.getYsje())) {

+ 19 - 17
kd-service/kd-scientific/src/main/java/org/sky/scientific/service/impl/XmTechnicianHoursServiceImpl.java

@@ -39,6 +39,8 @@ import org.springframework.web.multipart.MultipartFile;
 
 
 import java.io.BufferedInputStream;
 import java.io.BufferedInputStream;
 import java.io.OutputStream;
 import java.io.OutputStream;
+import java.math.BigDecimal;
+import java.math.RoundingMode;
 import java.net.URLEncoder;
 import java.net.URLEncoder;
 import java.time.LocalDate;
 import java.time.LocalDate;
 import java.time.format.DateTimeFormatter;
 import java.time.format.DateTimeFormatter;
@@ -478,11 +480,11 @@ public class XmTechnicianHoursServiceImpl extends BaseServiceImpl<XmTechnicianHo
 		for (TechnicianHoursMonthlyVO vo : list) {
 		for (TechnicianHoursMonthlyVO vo : list) {
 			List<DailyHours> dailyHours = baseMapper.selectDailyHoursByUnicodeAndMonth(dto.getYearAndMonth(), vo.getUnicode());
 			List<DailyHours> dailyHours = baseMapper.selectDailyHoursByUnicodeAndMonth(dto.getYearAndMonth(), vo.getUnicode());
 			//总出勤小时
 			//总出勤小时
-			double attendanceTotal = 0;
+			BigDecimal attendanceTotal = BigDecimal.ZERO;
 			//总研发工时
 			//总研发工时
-			double workTotal = 0;
+			BigDecimal workTotal = BigDecimal.ZERO;
 			//总非研发工时
 			//总非研发工时
-			double unworkTotal = 0;
+			BigDecimal unworkTotal = BigDecimal.ZERO;
 			//考勤数据
 			//考勤数据
 			List<DailyAttendance> attendanceList = attendanceMapper.selectDailyAttendanceByUnicodeAndMonth(vo.getUnicode(), dto.getYearAndMonth());
 			List<DailyAttendance> attendanceList = attendanceMapper.selectDailyAttendanceByUnicodeAndMonth(vo.getUnicode(), dto.getYearAndMonth());
 			for (int i = 0; i < daysInMonth; i++) {
 			for (int i = 0; i < daysInMonth; i++) {
@@ -497,38 +499,38 @@ public class XmTechnicianHoursServiceImpl extends BaseServiceImpl<XmTechnicianHo
 				} else {
 				} else {
 					daily = new DailyHours();
 					daily = new DailyHours();
 					daily.setWorkDate(everyDay);
 					daily.setWorkDate(everyDay);
-					daily.setWorkHours(0.0);
-					daily.setUnworkHours(0.0);
+					daily.setWorkHours(new BigDecimal("0.00"));
+					daily.setUnworkHours(new BigDecimal("0.00"));
 					dailyHours.add(i, daily);
 					dailyHours.add(i, daily);
 				}
 				}
 				//设置考勤数据
 				//设置考勤数据
 				if (any.isPresent()) {
 				if (any.isPresent()) {
-					daily.setAttendanceHours(any.get().getWorkHours());
+					daily.setAttendanceHours(BigDecimal.valueOf(any.get().getWorkHours()));
 				} else {
 				} else {
-					daily.setAttendanceHours(0.0);
+					daily.setAttendanceHours(new BigDecimal("0.00"));
 				}
 				}
 				//设置一天的非研发工时=当天考勤-研发工时
 				//设置一天的非研发工时=当天考勤-研发工时
-				daily.setUnworkHours(Math.max(daily.getAttendanceHours() - daily.getWorkHours(), 0));
+				daily.setUnworkHours(daily.getAttendanceHours().subtract(daily.getWorkHours()).max(BigDecimal.ZERO));
 			}
 			}
-			attendanceTotal = dailyHours.stream().mapToDouble(DailyHours::getAttendanceHours).sum();
-			workTotal = dailyHours.stream().mapToDouble(DailyHours::getWorkHours).sum();
-			unworkTotal = dailyHours.stream().mapToDouble(DailyHours::getUnworkHours).sum();
+			attendanceTotal = dailyHours.stream().map(DailyHours::getAttendanceHours).reduce(BigDecimal.valueOf(0.00), BigDecimal::add);
+			workTotal = dailyHours.stream().map(DailyHours::getWorkHours).reduce(BigDecimal.valueOf(0.00), BigDecimal::add);
+			unworkTotal = dailyHours.stream().map(DailyHours::getUnworkHours).reduce(BigDecimal.valueOf(0.00), BigDecimal::add);
 
 
 			vo.setWorkHoursTotal(workTotal);
 			vo.setWorkHoursTotal(workTotal);
 //			总非研发工时 = 总出勤 - 总研发
 //			总非研发工时 = 总出勤 - 总研发
 			vo.setUnworkHoursTotal(unworkTotal);
 			vo.setUnworkHoursTotal(unworkTotal);
 			//研发工时分配率 = 总研发工时/总出勤小时
 			//研发工时分配率 = 总研发工时/总出勤小时
-			if (workTotal == 0 || attendanceTotal == 0) {
-				vo.setWorkHoursRate(0.0);
+			if (workTotal.doubleValue() == 0 || attendanceTotal.doubleValue() == 0) {
+				vo.setWorkHoursRate(new BigDecimal("0.00"));
 			} else {
 			} else {
-				vo.setWorkHoursRate(workTotal / attendanceTotal);
+				vo.setWorkHoursRate(workTotal.divide(attendanceTotal, 2, RoundingMode.UP));
 			}
 			}
 
 
 			//非研发工时分配率 = 总非研发工时/总出勤小时
 			//非研发工时分配率 = 总非研发工时/总出勤小时
-			if (vo.getUnworkHoursTotal() == 0 || attendanceTotal == 0) {
-				vo.setUnworkHoursRate(0.0);
+			if (vo.getUnworkHoursTotal().doubleValue() == 0 || attendanceTotal.doubleValue() == 0) {
+				vo.setUnworkHoursRate(new BigDecimal("0.00"));
 			} else {
 			} else {
-				vo.setUnworkHoursRate(vo.getUnworkHoursTotal() / attendanceTotal);
+				vo.setUnworkHoursRate(vo.getUnworkHoursTotal().divide(attendanceTotal,2, RoundingMode.UP));
 			}
 			}
 			vo.setDailyHoursList(dailyHours);
 			vo.setDailyHoursList(dailyHours);
 		}
 		}

BIN
kd-service/kd-scientific/src/main/resources/export-template/研发项目管理/预算编制/其他费用.xls


BIN
kd-service/kd-scientific/src/main/resources/export-template/研发项目管理/预算编制/装备调试费用与试验费用.xls