zhoulisky 7 months ago
parent
commit
753b1b6ff2
15 changed files with 211 additions and 51 deletions
  1. 23 0
      kd-service-api/kd-scientific-api/src/main/java/org/sky/scientific/pojo/dto/AcceptRdDataDto.java
  2. 16 0
      kd-service-api/kd-scientific-api/src/main/java/org/sky/scientific/pojo/dto/HoursSyncDto.java
  3. 1 1
      kd-service/kd-scientific/src/main/java/org/sky/scientific/controller/KYCGController.java
  4. 2 2
      kd-service/kd-scientific/src/main/java/org/sky/scientific/excel/CgKylwExcel.java
  5. 23 21
      kd-service/kd-scientific/src/main/java/org/sky/scientific/excel/CgRjzzqExcel.java
  6. 44 0
      kd-service/kd-scientific/src/main/java/org/sky/scientific/excel/listener/CgRjzzqImportListener.java
  7. 3 0
      kd-service/kd-scientific/src/main/java/org/sky/scientific/mapper/TechnicianMapper.java
  8. 4 0
      kd-service/kd-scientific/src/main/java/org/sky/scientific/mapper/TechnicianMapper.xml
  9. 16 5
      kd-service/kd-scientific/src/main/java/org/sky/scientific/mapper/XmMapper.java
  10. 13 0
      kd-service/kd-scientific/src/main/java/org/sky/scientific/mapper/XmMapper.xml
  11. 15 1
      kd-service/kd-scientific/src/main/java/org/sky/scientific/mapper/XmTechnicianHoursMapper.java
  12. 15 5
      kd-service/kd-scientific/src/main/java/org/sky/scientific/mapper/XmTechnicianHoursMapper.xml
  13. 20 13
      kd-service/kd-scientific/src/main/java/org/sky/scientific/service/impl/CgRjzzqServiceImpl.java
  14. 16 3
      kd-service/kd-scientific/src/main/java/org/sky/scientific/service/impl/TechnicianServiceImpl.java
  15. BIN
      kd-service/kd-scientific/src/main/resources/export-template/技术人员花名册.xls

+ 23 - 0
kd-service-api/kd-scientific-api/src/main/java/org/sky/scientific/pojo/dto/AcceptRdDataDto.java

@@ -0,0 +1,23 @@
+package org.sky.scientific.pojo.dto;
+
+import lombok.Data;
+
+import java.util.List;
+
+@Data
+public class AcceptRdDataDto {
+
+	private String usci;
+
+	private List<RdData> rdList;
+
+	@Data
+	static class RdData {
+		private String projectNumber;
+		private String adminKyId;
+		private String recordTime;
+		private String duration;
+	}
+}
+
+

+ 16 - 0
kd-service-api/kd-scientific-api/src/main/java/org/sky/scientific/pojo/dto/HoursSyncDto.java

@@ -0,0 +1,16 @@
+package org.sky.scientific.pojo.dto;
+
+import io.swagger.v3.oas.annotations.media.Schema;
+import jakarta.validation.constraints.NotBlank;
+import lombok.Data;
+
+@Data
+public class HoursSyncDto {
+
+	@Schema(description = "所属年月")
+	@NotBlank(message = "参数yearAndMonth不能为空")
+	private String yearAndMonth;
+
+
+
+}

+ 1 - 1
kd-service/kd-scientific/src/main/java/org/sky/scientific/controller/KYCGController.java

@@ -231,7 +231,7 @@ public class KYCGController extends KdController {
 
 	@PostMapping("/kylw/remove")
 	@ApiOperationSupport(order = 34)
-	@Operation(summary = "科研论文-逻辑删除", description = "传入ids")
+	@Operation(summary = "科研论文-删除", description = "传入ids")
 	public R removeKylw(@Parameter(description = "主键集合", required = true) @RequestParam String ids) {
 		return R.status(kylwService.physicalDeleteByIds(Func.toLongList(ids)));
 	}

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

@@ -52,8 +52,8 @@ public class CgKylwExcel implements Serializable {
 
 	@ColumnWidth(20)
 	@ExcelProperty(index = 5, value = "发表日期")
-	@DateTimeFormat(DateUtil.PATTERN_DATETIME)
-	@JsonFormat(pattern = DateUtil.PATTERN_DATETIME)
+	@DateTimeFormat(DateUtil.PATTERN_DATE)
+	@JsonFormat(pattern = DateUtil.PATTERN_DATE)
 	private Date fbrq;
 
 	private String fbrqStr;

+ 23 - 21
kd-service/kd-scientific/src/main/java/org/sky/scientific/excel/CgRjzzqExcel.java

@@ -8,6 +8,7 @@ import com.alibaba.excel.annotation.write.style.ColumnWidth;
 import com.alibaba.excel.annotation.write.style.ContentRowHeight;
 import com.alibaba.excel.annotation.write.style.HeadRowHeight;
 import com.fasterxml.jackson.annotation.JsonFormat;
+import io.swagger.v3.oas.annotations.media.Schema;
 import lombok.Data;
 import org.sky.core.tool.utils.DateUtil;
 
@@ -31,58 +32,59 @@ public class CgRjzzqExcel implements Serializable {
 	@Serial
 	private static final long serialVersionUID = 1L;
 
+	@Schema(description = "序号")
 	private String xh;
 
-	@ColumnWidth(20)
-	@ExcelProperty(index = 1, value = "软件名称")
+	@Schema(description = "软件名称")
+	@ExcelProperty(index = 1)
 	private String rjmc;
 
-	@ColumnWidth(20)
-	@ExcelProperty(index = 2, value ="软件简称")
+	@Schema(description = "软件简称")
+	@ExcelProperty(index = 2)
 	private String rjjc;
 
-	@ColumnWidth(20)
-	@ExcelProperty(index = 3, value ="版本号")
+	@Schema(description = "版本号")
+	@ExcelProperty(index = 3)
 	private String bbh;
 
-	@ColumnWidth(20)
-	@ExcelProperty(index = 4, value ="登记号")
+	@Schema(description = "登记号")
+	@ExcelProperty(index = 4)
 	private String djh;
 
-	@ColumnWidth(20)
-	@ExcelProperty(index = 5, value ="开发完成日期")
+	@Schema(description = "开发完成日期")
+	@ExcelProperty(index = 5)
 	@DateTimeFormat(DateUtil.PATTERN_DATE)
 	@JsonFormat(pattern = DateUtil.PATTERN_DATE)
 	private Date kfwcrq;
 
 	private String kfwcrqStr;
 
-	@ColumnWidth(20)
-	@ExcelProperty(index = 6, value ="首次发布日期")
+	@Schema(description = "首次发布日期")
+	@ExcelProperty(index = 6)
 	@DateTimeFormat(DateUtil.PATTERN_DATE)
 	@JsonFormat(pattern = DateUtil.PATTERN_DATE)
 	private Date scfbrq;
 
 	private String scfbrqStr;
 
-	@ColumnWidth(20)
-	@ExcelProperty(index = 7, value ="登记批准日期")
+	@Schema(description = "登记批准日期")
+	@ExcelProperty(index = 7)
 	@DateTimeFormat(DateUtil.PATTERN_DATE)
- 	@JsonFormat(pattern = DateUtil.PATTERN_DATE)
+	@JsonFormat(pattern = DateUtil.PATTERN_DATE)
 	private Date djpzrq;
 
 	private String djpzrqStr;
 
-	@ColumnWidth(20)
-	@ExcelProperty(index = 8, value ="取得方式")
+	@Schema(description = "取得方式")
+	@ExcelProperty(index = 8)
 	private String qdfs;
 
-	@ColumnWidth(20)
-	@ExcelProperty(index = 9, value ="项目名称")
+	@Schema(description = "项目名称")
+	@ExcelProperty(index = 9)
 	private String xmmc;
 
-	@ColumnWidth(20)
-	@ExcelProperty(index = 10, value ="项目编号")
+	@Schema(description = "项目编号")
+	@ExcelProperty(index = 10)
 	private String xmbh;
 
 }

+ 44 - 0
kd-service/kd-scientific/src/main/java/org/sky/scientific/excel/listener/CgRjzzqImportListener.java

@@ -0,0 +1,44 @@
+package org.sky.scientific.excel.listener;
+
+import com.alibaba.excel.context.AnalysisContext;
+import com.alibaba.excel.read.listener.ReadListener;
+import lombok.Data;
+import lombok.extern.slf4j.Slf4j;
+import org.sky.core.tool.utils.DateUtil;
+import org.sky.scientific.excel.CgRjzzqExcel;
+import org.sky.scientific.utils.DataImportUtils;
+
+import java.util.ArrayList;
+import java.util.List;
+import java.util.Map;
+
+
+@Data
+@Slf4j
+ public class CgRjzzqImportListener implements ReadListener<Map<Integer, String>> {
+
+	private boolean done = false;
+	private List<CgRjzzqExcel> dataList = new ArrayList<>();
+
+	@Override
+	public void invoke(Map<Integer, String> map, AnalysisContext analysisContext) {
+		CgRjzzqExcel excel = new CgRjzzqExcel();
+		excel.setXh(map.get(0));
+		excel.setRjmc(map.get(1));
+		excel.setRjjc(map.get(2));
+		excel.setBbh(map.get(3));
+		excel.setDjh(map.get(4));
+		excel.setKfwcrq(DataImportUtils.safeParseDate(map.get(5), DateUtil.PATTERN_DATE));
+		excel.setScfbrq(DataImportUtils.safeParseDate(map.get(6), DateUtil.PATTERN_DATE));
+		excel.setDjpzrq(DataImportUtils.safeParseDate(map.get(7), DateUtil.PATTERN_DATE));
+		excel.setQdfs(map.get(8));
+		excel.setXmmc(map.get(9));
+		excel.setXmbh(map.get(10));
+		dataList.add(excel);
+	}
+
+	@Override
+	public void doAfterAllAnalysed(AnalysisContext analysisContext) {
+		log.info("解析科研成果-如见著作权:{}条", dataList.size());
+	}
+}

+ 3 - 0
kd-service/kd-scientific/src/main/java/org/sky/scientific/mapper/TechnicianMapper.java

@@ -57,4 +57,7 @@ public interface TechnicianMapper extends BaseMapper<TechnicianEntity> {
 	 */
 	@TenantIgnore
 	List<TechnicianVO> niandugaokejirenyuanhuizongbiao(@Param("page") IPage<TechnicianVO> page, @Param("ew") TechnicianDTO dto);
+
+	@TenantIgnore
+	String getMaxUnicode();
 }

+ 4 - 0
kd-service/kd-scientific/src/main/java/org/sky/scientific/mapper/TechnicianMapper.xml

@@ -176,4 +176,8 @@
         select name from kd_technician where id = #{technicianId}
     </select>
 
+    <select id="getMaxUnicode" resultType="java.lang.String">
+        SELECT max(unicode) from kd_technician
+    </select>
+
 </mapper>

+ 16 - 5
kd-service/kd-scientific/src/main/java/org/sky/scientific/mapper/XmMapper.java

@@ -5,6 +5,7 @@ import com.alibaba.fastjson.JSONObject;
 import com.baomidou.mybatisplus.core.mapper.BaseMapper;
 import com.baomidou.mybatisplus.core.metadata.IPage;
 import org.apache.ibatis.annotations.Param;
+import org.apache.ibatis.annotations.Select;
 import org.sky.core.tenant.annotation.TenantIgnore;
 import org.sky.scientific.pojo.dto.XmDTO;
 import org.sky.scientific.pojo.dto.XmUpdateDto;
@@ -28,13 +29,14 @@ public interface XmMapper extends BaseMapper<XmEntity> {
 	 * 自定义分页
 	 *
 	 * @param page 分页参数
-	 * @param xm 查询参数
+	 * @param xm   查询参数
 	 * @return List<XmVO>
 	 */
-	List<XmEntity> selectXmPage(IPage page, @Param("ew")XmDTO xm);
+	List<XmEntity> selectXmPage(IPage page, @Param("ew") XmDTO xm);
 
 	/**
 	 * 项目列表,查询年度项目
+	 *
 	 * @param year
 	 * @return
 	 */
@@ -44,7 +46,7 @@ public interface XmMapper extends BaseMapper<XmEntity> {
 	 * 获取汇总表
 	 *
 	 * @param page 分页参数
-	 * @param xm 查询参数
+	 * @param xm   查询参数
 	 * @return List<XmVO>
 	 */
 	@TenantIgnore
@@ -52,6 +54,7 @@ public interface XmMapper extends BaseMapper<XmEntity> {
 
 	/**
 	 * 获取项目预算总表
+	 *
 	 * @param xmId
 	 * @return
 	 */
@@ -59,6 +62,7 @@ public interface XmMapper extends BaseMapper<XmEntity> {
 
 	/**
 	 * 根据项目id和年月查询项目最新信息
+	 *
 	 * @param xmId
 	 * @param yearAndMonth
 	 * @return
@@ -67,21 +71,28 @@ public interface XmMapper extends BaseMapper<XmEntity> {
 
 	/**
 	 * 查询项目信息,结合变更
+	 *
 	 * @param xmId
 	 * @return
 	 */
 	XmVO selectByXmId(Long xmId);
 
+	List<XmVO> selectByXmIdList(@Param("xmIdList") List<Long> xmIdList);
+
 	JSONObject getXmmcAndXmbhByXmId(Long xmId);
 
-	Long getXmIdByXmmcOrXmbh(@Param("yearAndMonth") String yearAndMonth,@Param("xmmc") String xmmc, @Param("xmbh") String xmbh);
+	Long getXmIdByXmmcOrXmbh(@Param("yearAndMonth") String yearAndMonth, @Param("xmmc") String xmmc, @Param("xmbh") String xmbh);
+
+	@Select("select id from kd_xm where xmbh=#{xmbh}")
+	Long getXmIdByXmbh(@Param("xmbh") String xmbh);
 
 	/**
 	 * 查询项目列表-开发周期包含yearAndMonth的
+	 *
 	 * @param yearAndMonth
 	 * @return
 	 */
-    List<XmEntity> listByYearAndMonth(String yearAndMonth);
+	List<XmEntity> listByYearAndMonth(String yearAndMonth);
 
 	List<JSONObject> selectAssistList(IPage<JSONObject> page, @Param("ew") XmDTO xm);
 

+ 13 - 0
kd-service/kd-scientific/src/main/java/org/sky/scientific/mapper/XmMapper.xml

@@ -165,6 +165,19 @@
         where id = #{xmId}
     </select>
 
+    <select id="selectByXmIdList" resultMap="ResultVoMap">
+        SELECT
+            id, XMBH,XMKSSJ,create_time,
+            COALESCE( (SELECT bgrz.BGHDZ FROM kd_xm_bgrz bgrz WHERE bgrz.XM_ID = xm.id AND bgrz.ZDMC = 'xmmc' and bgrz.BGSXSJ <![CDATA[<=]]> now() ORDER BY bgrz.BGSXSJ DESC LIMIT 1), XMMC ) AS XMMC,
+            COALESCE( (SELECT bgrz.BGHDZ FROM kd_xm_bgrz bgrz WHERE bgrz.XM_ID = xm.id AND bgrz.ZDMC = 'XMFZR' and bgrz.BGSXSJ <![CDATA[<=]]> now() ORDER BY bgrz.BGSXSJ DESC LIMIT 1),XMFZR) AS XMFZR,
+            COALESCE( (SELECT bgrz.BGHDZ FROM kd_xm_bgrz bgrz WHERE bgrz.XM_ID = xm.id AND bgrz.ZDMC = 'XMSQDWID' and bgrz.BGSXSJ <![CDATA[<=]]> now() ORDER BY bgrz.BGSXSJ DESC LIMIT 1),xm.XMSQDWID) AS XMSQDWID,
+            COALESCE( (SELECT bgrz.BGHDZ FROM kd_xm_bgrz bgrz WHERE bgrz.XM_ID = xm.id AND bgrz.ZDMC = 'XMJSSJ' and bgrz.BGSXSJ <![CDATA[<=]]> now() ORDER BY bgrz.BGSXSJ DESC LIMIT 1),XMJSSJ) AS XMJSSJ,
+            COALESCE( (SELECT bgrz.BGHDZ FROM kd_xm_bgrz bgrz WHERE bgrz.XM_ID = xm.id AND bgrz.ZDMC = 'STATUS' and bgrz.BGSXSJ <![CDATA[<=]]> now() ORDER BY bgrz.BGSXSJ DESC LIMIT 1),STATUS) AS STATUS
+        FROM kd_xm xm
+        where id in <foreach item="xmId" collection="xmIdList" separator="," open="(" close=")" index="index">#{xmId}</foreach>
+    </select>
+
+
     <select id="getXmIdByXmmcOrXmbh" resultType="java.lang.Long">
         SELECT id
         FROM kd_xm xm

+ 15 - 1
kd-service/kd-scientific/src/main/java/org/sky/scientific/mapper/XmTechnicianHoursMapper.java

@@ -63,4 +63,18 @@ public interface XmTechnicianHoursMapper extends BaseMapper<XmTechnicianHours> {
 	List<DailyHours> selectDailyHoursByUnicodeAndMonth(@Param("yearAndMonth") String yearAndMonth, @Param("unicode") String unicode);
 
 	Long countByUnicodeAndMonth(@Param("unicode") String unicode, @Param("yearAndMonth") String yearAndMonth);
- }
+
+	/**
+	 * 查询待同步的工时数据
+	 * @param dto
+	 * @return
+	 */
+	List<JSONObject> selectListForSync(String yearAndMonth);
+
+	/**
+	 * 批量更新工时数据
+	 * @param updateList
+	 * @return
+	 */
+	int batchUpdateHours(List<XmTechnicianHours> updateList);
+}

+ 15 - 5
kd-service/kd-scientific/src/main/java/org/sky/scientific/mapper/XmTechnicianHoursMapper.xml

@@ -64,6 +64,14 @@
         </foreach>
     </update>
 
+    <update id="batchUpdateHours" parameterType="java.util.List">
+        <foreach collection="list" item="record" separator=";">
+            update kd_xm_technician_hours
+            set work_hours = #{record.workHours}
+            where tenant_id = #{record.tenantId} and xm_id = #{record.xmId} and unicode = #{record.unicode} and work_date = #{record.workDate}
+        </foreach>
+    </update>
+
     <select id="selectByXmIdAndUnicode" resultType="org.sky.scientific.pojo.vo.DailyAttendance">
         select work_date,work_hours
         from kd_xm_technician_hours
@@ -113,11 +121,6 @@
         <result column="id_card" property="idCard"/>
         <result column="personnel_type" property="personnelType"/>
         <result column="unicode" property="unicode"/>
-<!--        <collection property="dailyHoursList" ofType="org.sky.scientific.pojo.vo.DailyHours">-->
-<!--            <result column="work_date" property="workDate"/>-->
-<!--            <result column="work_hours" property="workHours"/>-->
-<!--            <result column="attendance_hours" property="attendanceHours"/>-->
-<!--        </collection>-->
     </resultMap>
     <select id="meiyueyanfagongshifenpeibiao" resultMap="TechnicianHoursMonthlyVOMap" parameterType="org.sky.scientific.pojo.dto.TechnicianDTO">
         SELECT
@@ -145,6 +148,13 @@
         where unicode = #{unicode} and left(work_date,6) = #{yearAndMonth}
     </select>
 
+    <select id="selectListForSync" resultType="com.alibaba.fastjson.JSONObject">
+        SELECT
+            h.tenant_id as tenantId, xm.id as xmId, xm.XMBH as xmbh,h.unicode, h.work_date as workDate , h.work_hours as workHours
+        FROM kd_xm_technician_hours h
+        LEFT JOIN kd_xm xm on xm.id = h.xm_id
+        WHERE LEFT(h.work_date, 6) = #{yearAndMonth}
+    </select>
 
     <delete id="clear">
         DELETE FROM kd_xm_technician_hours

+ 20 - 13
kd-service/kd-scientific/src/main/java/org/sky/scientific/service/impl/CgRjzzqServiceImpl.java

@@ -10,12 +10,12 @@ import com.baomidou.mybatisplus.core.metadata.IPage;
 import com.baomidou.mybatisplus.core.toolkit.Wrappers;
 import jakarta.annotation.Resource;
 import lombok.SneakyThrows;
-import org.sky.core.excel.util.ExcelUtil;
 import org.sky.core.log.exception.ServiceException;
 import org.sky.core.mp.base.BaseServiceImpl;
 import org.sky.core.secure.utils.SecureUtil;
 import org.sky.core.tool.utils.*;
 import org.sky.scientific.excel.CgRjzzqExcel;
+import org.sky.scientific.excel.listener.CgRjzzqImportListener;
 import org.sky.scientific.mapper.CgRjzzqMapper;
 import org.sky.scientific.mapper.XmMapper;
 import org.sky.scientific.pojo.dto.CgRjzzqDTO;
@@ -26,6 +26,7 @@ import org.springframework.stereotype.Service;
 import org.springframework.transaction.annotation.Transactional;
 import org.springframework.web.multipart.MultipartFile;
 
+import java.io.BufferedInputStream;
 import java.io.InputStream;
 import java.io.OutputStream;
 import java.util.ArrayList;
@@ -45,14 +46,21 @@ public class CgRjzzqServiceImpl extends BaseServiceImpl<CgRjzzqMapper, CgRjzzqEn
 	@Resource
 	private XmMapper xmMapper;
 
-    @Transactional
-    @Override
-    public void importRjzzq(MultipartFile file) {
-		List<CgRjzzqExcel> data = ExcelUtil.read(file, 0, 2, CgRjzzqExcel.class);
-		if(CollectionUtil.isEmpty(data)){
+	@SneakyThrows
+	@Transactional
+	@Override
+	public void importRjzzq(MultipartFile file) {
+		CgRjzzqImportListener listener = new CgRjzzqImportListener();
+		EasyExcel.read(new BufferedInputStream(file.getInputStream()))
+			.registerReadListener(listener)
+			.sheet(0)
+			.headRowNumber(2) // 重要:设置表头行数(0-based)
+			.doRead();
+		List<CgRjzzqExcel> dataList = listener.getDataList();
+		if (CollectionUtil.isEmpty(dataList)) {
 			throw new ServiceException("未能从模板中读取数据,请检查模板格式是否正确");
 		}
-		for (CgRjzzqExcel excel : data) {
+		for (CgRjzzqExcel excel : dataList) {
 			CgRjzzqEntity zlDTO = Objects.requireNonNull(BeanUtil.copyProperties(excel, CgRjzzqDTO.class));
 			if (!StringUtil.isAllBlank(excel.getXmbh(), excel.getXmmc())) {
 				Long xmId = xmMapper.getXmIdByXmmcOrXmbh(null, excel.getXmmc(), excel.getXmbh());
@@ -63,11 +71,10 @@ public class CgRjzzqServiceImpl extends BaseServiceImpl<CgRjzzqMapper, CgRjzzqEn
 			}
 			this.save(zlDTO);
 		}
-    }
+	}
 
 	@Override
 	public boolean save(CgRjzzqEntity cgRjzzq) {
-
 		return super.save(cgRjzzq);
 	}
 
@@ -97,15 +104,15 @@ public class CgRjzzqServiceImpl extends BaseServiceImpl<CgRjzzqMapper, CgRjzzqEn
 	@SneakyThrows
 	@Override
 	public void export(OutputStream os, List<CgRjzzqEntity> list) {
- 		AtomicInteger index = new AtomicInteger(1);
+		AtomicInteger index = new AtomicInteger(1);
 		List<CgRjzzqExcel> results = new ArrayList<>();
 		list.forEach(temp -> {
 			CgRjzzqExcel excel = BeanUtil.copyProperties(temp, CgRjzzqExcel.class);
 			assert excel != null;
 			excel.setXh(index.getAndIncrement() + "");
-			excel.setKfwcrqStr(Func.notNull(temp.getKfwcrq())?DateUtil.format(temp.getKfwcrq(), DateUtil.PATTERN_DATE):null);
-			excel.setScfbrqStr(Func.notNull(temp.getScfbrq())?DateUtil.format(temp.getScfbrq(), DateUtil.PATTERN_DATE):null);
-			excel.setDjpzrqStr(Func.notNull(temp.getDjpzrq())?DateUtil.format(temp.getDjpzrq(), DateUtil.PATTERN_DATE):null);
+			excel.setKfwcrqStr(Func.notNull(temp.getKfwcrq()) ? DateUtil.format(temp.getKfwcrq(), DateUtil.PATTERN_DATE) : null);
+			excel.setScfbrqStr(Func.notNull(temp.getScfbrq()) ? DateUtil.format(temp.getScfbrq(), DateUtil.PATTERN_DATE) : null);
+			excel.setDjpzrqStr(Func.notNull(temp.getDjpzrq()) ? DateUtil.format(temp.getDjpzrq(), DateUtil.PATTERN_DATE) : null);
 			results.add(excel);
 		});
 		InputStream templateFileName = this.getClass().getClassLoader().getResourceAsStream("export-template/科研成果-软件著作.xls");

+ 16 - 3
kd-service/kd-scientific/src/main/java/org/sky/scientific/service/impl/TechnicianServiceImpl.java

@@ -78,7 +78,7 @@ public class TechnicianServiceImpl extends BaseServiceImpl<TechnicianMapper, Tec
 
 		String unicode = baseMapper.getUnicodeByNumberAndIdentityCard(technician.getNumber(), technician.getIdCard());
 		if (unicode == null) {
-			unicode = UUID.randomUUID().toString();
+			unicode =generateUnicode();
 		}
 		technician.setUnicode(unicode);
 
@@ -135,6 +135,20 @@ public class TechnicianServiceImpl extends BaseServiceImpl<TechnicianMapper, Tec
 		}
 	}
 
+	private synchronized String generateUnicode(){
+		String maxUnicode = baseMapper.getMaxUnicode();
+		String unicode = null;
+		if(Func.isNull(maxUnicode)){
+			unicode = "00001";
+		}else {
+			unicode = String.valueOf(Integer.parseInt(maxUnicode) + 1);
+			while (unicode.length() < 5) {
+				unicode = "0" + unicode;
+			}
+		}
+		return unicode;
+	}
+
 	@Transactional
 	@Override
 	public void importTechnician(MultipartFile file, String yearAndMonth) {
@@ -178,8 +192,7 @@ public class TechnicianServiceImpl extends BaseServiceImpl<TechnicianMapper, Tec
 			}
 			String unicode = baseMapper.getUnicodeByNumberAndIdentityCard(technician.getNumber(), technician.getIdCard());
 			if (unicode == null) {
-				unicode = UUID.randomUUID().toString();
-//				 continue;
+				unicode = generateUnicode();
 			}
 			technician.setUnicode(unicode);
 

BIN
kd-service/kd-scientific/src/main/resources/export-template/技术人员花名册.xls