Browse Source

000000002

zhoulisky 7 months ago
parent
commit
749f924926
15 changed files with 171 additions and 107 deletions
  1. 3 0
      kd-service-api/kd-scientific-api/src/main/java/org/sky/scientific/pojo/entity/XmJtbEntity.java
  2. 9 13
      kd-service/kd-scientific/src/main/java/org/sky/scientific/controller/AssetController.java
  3. 1 1
      kd-service/kd-scientific/src/main/java/org/sky/scientific/controller/XmJtbController.java
  4. 2 2
      kd-service/kd-scientific/src/main/java/org/sky/scientific/mapper/SettingMapper.java
  5. 2 0
      kd-service/kd-scientific/src/main/java/org/sky/scientific/mapper/XmBgrzMapper.java
  6. 5 1
      kd-service/kd-scientific/src/main/java/org/sky/scientific/mapper/XmBgrzMapper.xml
  7. 3 1
      kd-service/kd-scientific/src/main/java/org/sky/scientific/mapper/XmJtbMapper.java
  8. 5 1
      kd-service/kd-scientific/src/main/java/org/sky/scientific/mapper/XmJtbMapper.xml
  9. 1 1
      kd-service/kd-scientific/src/main/java/org/sky/scientific/mapper/XmMapper.java
  10. 6 36
      kd-service/kd-scientific/src/main/java/org/sky/scientific/mapper/XmMapper.xml
  11. 20 14
      kd-service/kd-scientific/src/main/java/org/sky/scientific/service/impl/AttendanceServiceImpl.java
  12. 21 5
      kd-service/kd-scientific/src/main/java/org/sky/scientific/service/impl/TechnicianServiceImpl.java
  13. 31 17
      kd-service/kd-scientific/src/main/java/org/sky/scientific/service/impl/XmFixedAssetServiceImpl.java
  14. 13 3
      kd-service/kd-scientific/src/main/java/org/sky/scientific/service/impl/XmIntangibleAssetServiceImpl.java
  15. 49 12
      kd-service/kd-scientific/src/main/java/org/sky/scientific/service/impl/XmJtbServiceImpl.java

+ 3 - 0
kd-service-api/kd-scientific-api/src/main/java/org/sky/scientific/pojo/entity/XmJtbEntity.java

@@ -51,4 +51,7 @@ public class XmJtbEntity extends BaseEntity {
 	@Schema(description = "填报时间")
 	private Date tbsj;
 
+	@Schema(description = "状态,0:暂存,1:已取消,2:已提交")
+	private Integer status;
+
 }

+ 9 - 13
kd-service/kd-scientific/src/main/java/org/sky/scientific/controller/AssetController.java

@@ -212,12 +212,8 @@ public class AssetController extends KdController {
 	@Operation(summary = "科研仪器设备工时登记表-导出")
 	public void exportXmAssetHours(HttpServletResponse response, XmAssetHoursDto dto) {
 		List<XmAssetHoursVO> list = hoursService.selectXmAssetHoursPage(dto, Condition.getPage(new Query().setCurrent(1).setSize(Integer.MAX_VALUE))).getRecords();
-//		if(Func.isEmpty(list)){
-//			ExportUtil.processWithNoData(response);
-//		}else {
-			ExportUtil.processWithData(response, "每月仪器设备工时打卡.xls");
-			hoursService.exportXmAssetHours(response.getOutputStream(), list, dto.getYearAndMonth());
-//		}
+		ExportUtil.processWithData(response, "每月仪器设备工时打卡.xls");
+		hoursService.exportXmAssetHours(response.getOutputStream(), list, dto.getYearAndMonth());
 	}
 
 	@GetMapping("/kyyqsbzjfyfpb")
@@ -233,9 +229,9 @@ public class AssetController extends KdController {
 	@Operation(summary = "科研仪器设备折旧费用分配表-导出")
 	public void exportKeyanyiqishebeizhejiufeiyongfenpeibiao(HttpServletResponse response, @RequestBody XmAssetQueryParam dto) {
 		List<XmFixedAssetCostVo> list = fixedAssetService.keyanyiqishebeizhejiufeiyongfenpeibiao(Condition.getPage(new Query().setCurrent(1).setSize(Integer.MAX_VALUE)), dto).getRecords();
-		if(Func.isEmpty(list)){
-			ExportUtil.processWithNoData( response);
-		}else {
+		if (Func.isEmpty(list)) {
+			ExportUtil.processWithNoData(response);
+		} else {
 			ExportUtil.processWithData(response, "仪器设备折旧费用分配表.xls");
 			fixedAssetService.exportKeyanyiqishebeizhejiufeiyongfenpeibiao(response.getOutputStream(), list, dto.getYearAndMonth());
 		}
@@ -298,9 +294,9 @@ public class AssetController extends KdController {
 	@Operation(summary = "科研房屋建筑物折旧费用分配表-导出")
 	public void exportKeyanfangwujianzhuwuzhejiufeiyongfenpeibiao(HttpServletResponse response, @RequestBody XmAssetQueryParam dto) {
 		List<XmFixedAssetCostVo> list = fixedAssetService.keyanfangwujianzhuwuzhejiufeiyongfenpeibiao(Condition.getPage(new Query().setCurrent(1).setSize(Integer.MAX_VALUE)), dto).getRecords();
-		if(Func.isEmpty(list)){
+		if (Func.isEmpty(list)) {
 			ExportUtil.processWithNoData(response);
-		}else {
+		} else {
 			ExportUtil.processWithData(response, "在用建筑物折旧费用分配表.xls");
 			fixedAssetService.exportKeyanfangwujianzhuwuzhejiufeiyongfenpeibiao(response.getOutputStream(), list, dto.getYearAndMonth());
 		}
@@ -378,8 +374,8 @@ public class AssetController extends KdController {
 	public void exportKeyanwuxingzichanfenpeibiao(HttpServletResponse response, @RequestBody XmAssetQueryParam dto) {
 		List<XmIntangibleAssetCostVo> list = intangibleAssetService.keyanwuxingzichantanxiaofeiyongfenpeibiao(Condition.getPage(new Query().setCurrent(1).setSize(Integer.MAX_VALUE)), dto).getRecords();
 		if (Func.isEmpty(list)) {
- 			ExportUtil.processWithNoData(response);
-		}else {
+			ExportUtil.processWithNoData(response);
+		} else {
 			ExportUtil.processWithData(response, "无形资产摊销费用分配表.xls");
 			intangibleAssetService.exportKeyanwuxingzichanfenpeibiao(response.getOutputStream(), list, dto.getYearAndMonth());
 		}

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

@@ -38,7 +38,7 @@ public class XmJtbController extends KdController {
 
 	@PostMapping("/submit")
 	@ApiOperationSupport(order = 6)
-	@Operation(summary = "新增或修改", description  = "传入xmJtb")
+	@Operation(summary = "暂存/确定结题/取消结题", description  = "status,0:暂存,1:确定结题.2:取消结题")
 	public R submit(@Valid @RequestBody XmJtbEntity xmJtb) {
 		return R.status(service.submit(xmJtb));
 	}

+ 2 - 2
kd-service/kd-scientific/src/main/java/org/sky/scientific/mapper/SettingMapper.java

@@ -1,4 +1,3 @@
-
 package org.sky.scientific.mapper;
 
 import com.baomidou.mybatisplus.core.mapper.BaseMapper;
@@ -12,6 +11,7 @@ import org.sky.scientific.pojo.entity.SettingEntity;
  */
 public interface SettingMapper extends BaseMapper<SettingEntity> {
 
-
+//	@Select("select work_hours from setting where year = #{year}")
+//	Double getWorkHours(@Param("year") String year);
 
 }

+ 2 - 0
kd-service/kd-scientific/src/main/java/org/sky/scientific/mapper/XmBgrzMapper.java

@@ -24,4 +24,6 @@ public interface XmBgrzMapper extends BaseMapper<XmBgrzEntity> {
 	 * @return
 	 */
 	List<XmBgrzVO> selectBgrzPage(IPage<XmBgrzVO> page, @Param("ew") XmBgrzEntity xmBgrz);
+
+	int deleteBgrzByJtb(@Param("xmId") Long xmId);
 }

+ 5 - 1
kd-service/kd-scientific/src/main/java/org/sky/scientific/mapper/XmBgrzMapper.xml

@@ -30,6 +30,10 @@
         <result column="attachment" property="attachment"/>
     </resultMap>
 
+    <delete id="deleteBgrzByJtb">
+        delete from kd_xm_bgrz where xm_id = #{xmId} and ZDMC = 'STATUS' and BGHDZ = 2
+    </delete>
+
     <select id="selectBgrzPage" resultMap="ResultVoMap">
         SELECT
             XM_ID,
@@ -49,7 +53,7 @@
                 COALESCE(get_xm_info(m.id, 'XMSQDWID', null),m.XMSQDWID) as xmsqdwid
             FROM kd_xm m
         )xm on rz.xm_id = xm.id
-        WHERE rz.is_deleted = 0
+        WHERE rz.is_deleted = 0 and rz.ZDMC != "STATUS" and rz.BGHDZ != 2
         <if test="ew.xmId!=null">and rz.XM_ID = #{ew.xmId}</if>
     </select>
 

+ 3 - 1
kd-service/kd-scientific/src/main/java/org/sky/scientific/mapper/XmJtbMapper.java

@@ -1,7 +1,7 @@
-
 package org.sky.scientific.mapper;
 
 import com.baomidou.mybatisplus.core.mapper.BaseMapper;
+import org.apache.ibatis.annotations.Param;
 import org.sky.scientific.pojo.dto.XmJtbDTO;
 import org.sky.scientific.pojo.entity.XmJtbEntity;
 import org.sky.scientific.pojo.vo.XmJtbVO;
@@ -14,4 +14,6 @@ import org.sky.scientific.pojo.vo.XmJtbVO;
  */
 public interface XmJtbMapper extends BaseMapper<XmJtbEntity> {
 	XmJtbVO selectByCondition(XmJtbDTO xmJtb);
+
+	Integer getStatusByXmId(@Param("xmId") Long xmId);
 }

+ 5 - 1
kd-service/kd-scientific/src/main/java/org/sky/scientific/mapper/XmJtbMapper.xml

@@ -28,7 +28,7 @@
 
     <select id="selectByCondition" resultMap="ResultVoMap">
         SELECT
-            kxj.id, kxj.XM_ID, kxj.tbsj, kxj.ysbg,kxj.jsbg,kxj.cgbg,kxj.xybg,kxj.yspw,
+            kxj.id, kxj.XM_ID, kxj.tbsj, kxj.ysbg,kxj.jsbg,kxj.cgbg,kxj.xybg,kxj.yspw,kxj.status,
             xm.xmbh as 'xmEntity.xmbh',
             COALESCE(get_xm_info(kxj.XM_ID,'XMMC',date_format(kxj.tbsj,'%Y%m%d')), xm.XMMC ) AS 'xmEntity.xmmc',
             COALESCE(get_xm_info(kxj.XM_ID,'XMFZR',date_format(kxj.tbsj,'%Y%m%d')),xm.XMFZR) AS 'xmEntity.xmfzr',
@@ -45,4 +45,8 @@
         WHERE kxj.xm_id = #{xmId}
     </select>
 
+    <select id="getStatusByXmId" resultType="java.lang.Integer" parameterType="java.lang.Long">
+        select status from kd_xm_jtb where xm_id = #{xmId}
+    </select>
+
 </mapper>

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

@@ -100,5 +100,5 @@ public interface XmMapper extends BaseMapper<XmEntity> {
 
 	Long countXmfzrByUnicodeAndYearMonth(@Param("unicode") String unicode, @Param("yearAndMonth") String yearAndMonth);
 
-
+	Integer getXmStatusByXmId(@Param("xmId") Long xmId);
 }

+ 6 - 36
kd-service/kd-scientific/src/main/java/org/sky/scientific/mapper/XmMapper.xml

@@ -76,39 +76,6 @@
         WHERE #{year} between DATE_FORMAT(XMKSSJ, '%Y') and DATE_FORMAT(COALESCE(get_xm_info(xm.id,'XMJSSJ', #{year}),XMJSSJ), '%Y')
     </select>
 
-<!--    <select id="summaryPage" resultType="org.sky.scientific.pojo.vo.XmSummary">-->
-<!--        SELECT-->
-<!--            xm.id, xm.xmbh,-->
-<!--            COALESCE( (SELECT bgrz.BGHDZ FROM kd_xm_bgrz bgrz WHERE bgrz.XM_ID = xm.id AND bgrz.ZDMC = 'xmmc' AND (DATE_FORMAT(bgrz.BGSXSJ, '%Y%m') <![CDATA[<]]>  #{ew.yearAndMonth} or (DATE_FORMAT(bgrz.BGSXSJ, '%Y%m') =#{ew.yearAndMonth} and bgrz.BGSXSJ <![CDATA[<=]]> now())) ORDER BY bgrz.BGSXSJ DESC,bgrz.create_time desc LIMIT 1), xm.XMMC ) AS xmmc,-->
-<!--            COALESCE( (SELECT BGHDZ FROM kd_xm_bgrz bgrz WHERE XM_ID = xm.id AND ZDMC = 'XMFZR' AND (DATE_FORMAT(bgrz.BGSXSJ, '%Y%m') <![CDATA[<]]>  #{ew.yearAndMonth} or (DATE_FORMAT(bgrz.BGSXSJ, '%Y%m') =#{ew.yearAndMonth} and bgrz.BGSXSJ <![CDATA[<=]]> now())) ORDER BY BGSXSJ DESC,bgrz.create_time desc LIMIT 1), xm.XMFZR) as xmfzr,-->
-<!--            tech.name AS xmfzrxm,-->
-<!--            COALESCE( (SELECT bgrz.BGHDZ FROM kd_xm_bgrz bgrz WHERE bgrz.XM_ID = xm.id AND bgrz.ZDMC = 'XMSQDWID' AND (DATE_FORMAT(bgrz.BGSXSJ, '%Y%m') <![CDATA[<]]>  #{ew.yearAndMonth} or (DATE_FORMAT(bgrz.BGSXSJ, '%Y%m') =#{ew.yearAndMonth} and bgrz.BGSXSJ <![CDATA[<=]]> now())) ORDER BY bgrz.BGSXSJ DESC,bgrz.create_time desc LIMIT 1),xm.XMSQDWID) AS xmsqdwid,-->
-<!--            CONCAT_WS('/',(SELECT name FROM kd_department d2 WHERE d2.id = d.parent_id), d.`name`) as xmsqdw,-->
-<!--            xm.xmkssj,-->
-<!--            COALESCE( (SELECT bgrz.BGHDZ FROM kd_xm_bgrz bgrz WHERE bgrz.XM_ID = xm.id AND bgrz.ZDMC = 'XMJSSJ' AND (DATE_FORMAT(bgrz.BGSXSJ, '%Y%m') <![CDATA[<]]>  #{ew.yearAndMonth} or (DATE_FORMAT(bgrz.BGSXSJ, '%Y%m') =#{ew.yearAndMonth} and bgrz.BGSXSJ <![CDATA[<=]]> now())) ORDER BY bgrz.BGSXSJ DESC,bgrz.create_time desc LIMIT 1),xm.XMJSSJ) AS xmjssj,-->
-<!--            COALESCE( (SELECT bgrz.BGHDZ FROM kd_xm_bgrz bgrz WHERE bgrz.XM_ID = xm.id AND bgrz.ZDMC = 'XMYSZEMX' AND (DATE_FORMAT(bgrz.BGSXSJ, '%Y%m') <![CDATA[<]]>  #{ew.yearAndMonth} or (DATE_FORMAT(bgrz.BGSXSJ, '%Y%m') =#{ew.yearAndMonth} and bgrz.BGSXSJ <![CDATA[<=]]> now())) ORDER BY bgrz.BGSXSJ DESC,bgrz.create_time desc LIMIT 1),xm.XMYSZEMX) AS xmyszemx,-->
-<!--            COALESCE( (SELECT bgrz.BGHDZ FROM kd_xm_bgrz bgrz WHERE bgrz.XM_ID = xm.id AND bgrz.ZDMC = 'STATUS' AND (DATE_FORMAT(bgrz.BGSXSJ, '%Y%m') <![CDATA[<]]>  #{ew.yearAndMonth} or (DATE_FORMAT(bgrz.BGSXSJ, '%Y%m') =#{ew.yearAndMonth} and bgrz.BGSXSJ <![CDATA[<=]]> now())) ORDER BY bgrz.BGSXSJ DESC,bgrz.create_time desc LIMIT 1),xm.status) AS status,-->
-<!--            LXBG as lxbg,-->
-<!--            (select count(*) from kd_xm_jdxbg jdxbg where jdxbg.xm_id = xm.id and date_format(jdxbg.fill_date,'%Y%m') between concat(left(#{ew.yearAndMonth},4),'01') and #{ew.yearAndMonth}) as jdxbgCount,-->
-<!--            (select count(*) from kd_xm_jtb jtb where jtb.xm_id = xm.id and date_format(jtb.tbsj,'%Y%m') between concat(left(#{ew.yearAndMonth},4),'01') and #{ew.yearAndMonth}) as ysbgCount,-->
-<!--            (select count(*) from kd_cg_zl zl where zl.xm_id = xm.id and zl.ZLLX = '发明专利' and date_format(zl.SHOUQUAN_RQ,'%Y%m') between concat(left(#{ew.yearAndMonth},4),'01') and #{ew.yearAndMonth}) as fmzlCount,-->
-<!--            (select count(*) from kd_cg_zl zl where zl.xm_id = xm.id and zl.ZLLX = '实用新型专利' and date_format(zl.SHOUQUAN_RQ,'%Y%m') between concat(left(#{ew.yearAndMonth},4),'01') and #{ew.yearAndMonth}) as syxxzlCount,-->
-<!--            (select count(*) from kd_cg_rjzzq rjzzq where rjzzq.xm_id = xm.id and date_format(rjzzq.DJPZRQ,'%Y%m') between concat(left(#{ew.yearAndMonth},4),'01') and #{ew.yearAndMonth}) as rzCount,-->
-<!--            (select count(*) from kd_cg_jsbz jsbz where jsbz.xm_id = xm.id  and date_format(jsbz.SSRQ,'%Y%m') between concat(left(#{ew.yearAndMonth},4),'01') and #{ew.yearAndMonth}) as bzCount,-->
-<!--            (select count(*) from kd_cg_kylw kylw where kylw.xm_id = xm.id  and date_format(kylw.FBRQ,'%Y%m') between concat(left(#{ew.yearAndMonth},4),'01') and #{ew.yearAndMonth}) as lwCount,-->
-<!--            (select count(*) from kd_cg_qt qt where qt.xm_id = xm.id  and date_format(qt.SHOUQUAN_RQ,'%Y%m') between concat(left(#{ew.yearAndMonth},4),'01') and #{ew.yearAndMonth}) as qtCount,-->
-<!--            (select ifnull(sum(WWFYJE), 0) from kd_xm_wwxm ww where ww.XM_ID = xm.id and ww.year_and_month = left(#{ew.yearAndMonth}, 4)) as wwAmount-->
-<!--        FROM kd_xm xm-->
-<!--        LEFT JOIN kd_technician tech ON tech.id = COALESCE( (SELECT BGHDZ FROM kd_xm_bgrz bgrz WHERE XM_ID = xm.id AND ZDMC = 'XMFZR' AND (DATE_FORMAT(BGSXSJ, '%Y%m') <![CDATA[<]]>  #{ew.yearAndMonth} or (DATE_FORMAT(BGSXSJ, '%Y%m') =#{ew.yearAndMonth} and BGSXSJ <![CDATA[<=]]> now())) ORDER BY BGSXSJ DESC,create_time desc LIMIT 1), xm.XMFZR)-->
-<!--        LEFT JOIN kd_department d on d.id = COALESCE( (SELECT bgrz.BGHDZ FROM kd_xm_bgrz bgrz WHERE bgrz.XM_ID = xm.id AND bgrz.ZDMC = 'XMSQDWID' AND (DATE_FORMAT(bgrz.BGSXSJ, '%Y%m') <![CDATA[<]]>  #{ew.yearAndMonth} or (DATE_FORMAT(bgrz.BGSXSJ, '%Y%m') =#{ew.yearAndMonth} and bgrz.BGSXSJ <![CDATA[<=]]> now())) ORDER BY bgrz.BGSXSJ DESC,bgrz.create_time desc LIMIT 1),xm.XMSQDWID)-->
-<!--        WHERE xm.tenant_id = #{ew.tenantId} and DATE_FORMAT(xm.XMKSSJ, '%Y%m') <![CDATA[<=]]> #{ew.yearAndMonth}-->
-<!--        <if test="ew.xmbh!=null and ew.xmbh!=''">and xm.XMBH like concat('%',#{ew.xmbh},'%')</if>-->
-<!--        <if test="ew.xmmc!=null and ew.xmmc!=''">and COALESCE( (SELECT bgrz.BGHDZ FROM kd_xm_bgrz bgrz WHERE bgrz.XM_ID = xm.id AND bgrz.ZDMC = 'xmmc' AND (DATE_FORMAT(bgrz.BGSXSJ, '%Y%m') <![CDATA[<]]>  #{ew.yearAndMonth} or (DATE_FORMAT(bgrz.BGSXSJ, '%Y%m') =#{ew.yearAndMonth} and bgrz.BGSXSJ <![CDATA[<=]]> now())) ORDER BY bgrz.BGSXSJ DESC,bgrz.create_time desc LIMIT 1), xm.XMMC ) like concat('%',#{ew.xmmc},'%')</if>-->
-<!--        <if test="ew.xmfzrxm!=null and ew.xmfzrxm!=''">and tech.name like concat('%', #{ew.xmfzrxm},'%')</if>-->
-<!--        <if test="ew.xmsqdw!=null and ew.xmsqdw!=''">and CONCAT_WS('/',(SELECT name FROM kd_department d2 WHERE d2.id = d.parent_id), d.`name`) like concat('%',#{ew.xmsqdw},'%')</if>-->
-<!--        <if test="ew.status!=null">and COALESCE( (SELECT bgrz.BGHDZ FROM kd_xm_bgrz bgrz WHERE bgrz.XM_ID = xm.id AND bgrz.ZDMC = 'STATUS' AND (DATE_FORMAT(bgrz.BGSXSJ, '%Y%m') <![CDATA[<]]>  #{ew.yearAndMonth} or (DATE_FORMAT(bgrz.BGSXSJ, '%Y%m') =#{ew.yearAndMonth} and bgrz.BGSXSJ <![CDATA[<=]]> now())) ORDER BY bgrz.BGSXSJ DESC,bgrz.create_time desc LIMIT 1),xm.status) = #{ew.status}</if>-->
-<!--    </select>-->
-
     <select id="summaryPage" resultType="org.sky.scientific.pojo.vo.XmSummary">
 
         SELECT
@@ -184,9 +151,8 @@
             COALESCE(get_xm_info(xm.id,'XMMC', null), XMMC) AS XMMC,
             COALESCE(get_xm_info(xm.id,'XMFZR', null),XMFZR) AS XMFZR,
             COALESCE(get_xm_info(xm.id,'XMSQDWID', null),xm.XMSQDWID) AS XMSQDWID,
-
             COALESCE(get_xm_info(xm.id,'XMJSSJ', null),XMJSSJ) AS XMJSSJ,
-            COALESCE(get_xm_info(xm.id,'STATUS', null),STATUS) AS STATUS,
+            COALESCE(get_xm_info(xm.id,'STATUS', null),STATUS) AS status,
             YJLX,
             XMLY,
             XMKZXS,
@@ -213,6 +179,9 @@
         where id in <foreach item="xmId" collection="xmIdList" separator="," open="(" close=")" index="index">#{xmId}</foreach>
     </select>
 
+    <select id="getXmStatusByXmId" parameterType="java.lang.Long" resultType="java.lang.Integer">
+        SELECT COALESCE(get_xm_info(xm.id,'STATUS', null),STATUS) FROM kd_xm where id = #{xmId}
+    </select>
 
     <select id="getXmIdByXmmcOrXmbh" resultType="java.lang.Long">
         SELECT id
@@ -235,7 +204,8 @@
             XMBH,
             COALESCE(get_xm_info(xm.id,'XMMC', #{yearAndMonth}),XMMC) AS XMMC,
             xm.XMKSSJ,
-            COALESCE(get_xm_info(xm.id,'XMJSSJ', #{yearAndMonth}),XMJSSJ) AS XMJSSJ
+            COALESCE(get_xm_info(xm.id,'XMJSSJ', #{yearAndMonth}),XMJSSJ) AS XMJSSJ,
+            COALESCE(get_xm_info(xm.id,'STATUS', #{yearAndMonth}),STATUS) AS status
         FROM kd_xm xm
         where #{yearAndMonth} between DATE_FORMAT(XMKSSJ, '%Y%m') and DATE_FORMAT(COALESCE(get_xm_info(xm.id,'XMJSSJ', #{yearAndMonth}),XMJSSJ),'%Y%m')
     </select>

+ 20 - 14
kd-service/kd-scientific/src/main/java/org/sky/scientific/service/impl/AttendanceServiceImpl.java

@@ -69,7 +69,7 @@ public class AttendanceServiceImpl extends BaseServiceImpl<AttendanceMapper, Att
 
 		for (AttendanceVO vo : list) {
 			List<DailyAttendance> dailyAttendanceList = baseMapper.selectDailyAttendanceByUnicodeAndMonth(vo.getUnicode(), attendance.getYearAndMonth());
-			if (dailyAttendanceList==null) {
+			if (dailyAttendanceList == null) {
 				dailyAttendanceList = new ArrayList<>();
 			}
 			vo.setMonthlyDays(Func.toDouble(dailyAttendanceList.stream().filter(daily -> Func.notNull(daily.getWorkHours()) && daily.getWorkHours() > 0).count()));
@@ -87,12 +87,11 @@ public class AttendanceServiceImpl extends BaseServiceImpl<AttendanceMapper, Att
 			}
 			vo.setDailyAttendances(dailyAttendanceList);
 			vo.setMonthlyHours(dailyAttendanceList.stream().mapToDouble(DailyAttendance::getWorkHours).sum());
+
 			SettingEntity one = settingMapper.selectOne(Wrappers.<SettingEntity>lambdaQuery().eq(SettingEntity::getYearAndMonth, attendance.getYearAndMonth().substring(0, 4)));
 			if (Func.isNull(one) || Func.isNull(one.getWorkHours())) {
-				throw new ServiceException("企业未设置考勤时长");
+				throw new ServiceException("未设置出勤时间");
 			}
-//			Double workHours = one.getWorkHours();
-
 			vo.setDailyAttendances(dailyAttendanceList);
 		}
 		return page.setRecords(list);
@@ -202,7 +201,7 @@ public class AttendanceServiceImpl extends BaseServiceImpl<AttendanceMapper, Att
 		try {
 			AtomicInteger index = new AtomicInteger(1);
 			for (AttendanceVO vo : list) {
-				vo.setXh(index.getAndIncrement()+"");
+				vo.setXh(index.getAndIncrement() + "");
 			}
 			Integer year = Integer.valueOf(yearAndMonth.substring(0, 4));
 			Integer month = Integer.valueOf(yearAndMonth.substring(4));
@@ -249,11 +248,11 @@ public class AttendanceServiceImpl extends BaseServiceImpl<AttendanceMapper, Att
 		verticalHeaderRow.add("身份证号码");
 		verticalHeaderRow.add("科研人员类别");
 		//第二行:周几行
- 		for (int i = 1; i <= daysInMonth; i++) {
+		for (int i = 1; i <= daysInMonth; 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("本月出勤/小时");
 		verticalHeaderRow.add("本月出勤/天");
 		data.add(verticalHeaderRow);
 
@@ -312,6 +311,7 @@ public class AttendanceServiceImpl extends BaseServiceImpl<AttendanceMapper, Att
 	}
 
 	@Override
+	@Transactional
 	public boolean batchSubmit(AttendanceDto attendance) {
 		List<AttendanceEntity> dbList = baseMapper.selectByYearAndMonth(attendance.getYearAndMonth());
 		List<AttendanceEntity> dataByTechnicianMonthly = dbList.stream().filter(e -> e.getUnicode().equals(attendance.getUnicode())).toList();
@@ -321,8 +321,15 @@ public class AttendanceServiceImpl extends BaseServiceImpl<AttendanceMapper, Att
 		//需要更新的,以便后续批量修改
 		List<AttendanceEntity> updateList = new ArrayList<>();
 
-		for (DailyAttendance dailyAttendance : attendance.getDailyAttendances()) {
+		SettingEntity one = settingMapper.selectOne(Wrappers.<SettingEntity>lambdaQuery().eq(SettingEntity::getYearAndMonth, attendance.getYearAndMonth().substring(0, 4)));
+		if (Func.isNull(one) || Func.isNull(one.getWorkHours())) {
+			throw new ServiceException("未设置出勤时间");
+		}
 
+		for (DailyAttendance dailyAttendance : attendance.getDailyAttendances()) {
+			if (dailyAttendance.getWorkHours() > one.getWorkHours()) {
+				throw new ServiceException("出勤时长不能大于出勤时间设置[" + one.getWorkHours() + "]小时");
+			}
 			List<Long> primaryKeyList = dataByTechnicianMonthly.stream().filter(e -> Objects.equals(e.getWorkDate(), dailyAttendance.getWorkDate())).map(AttendanceEntity::getId).toList();
 			Long primaryKey = CollectionUtil.isEmpty(primaryKeyList) ? null : primaryKeyList.get(0);
 			AttendanceEntity entity = new AttendanceEntity();
@@ -368,7 +375,7 @@ public class AttendanceServiceImpl extends BaseServiceImpl<AttendanceMapper, Att
 	public boolean fetch(String yearAndMonth) {
 		List<XmTechnicianEntity> list = xmTechnicianMapper.selectList(Wrappers.<XmTechnicianEntity>lambdaQuery().eq(XmTechnicianEntity::getYearAndMonth, yearAndMonth));
 
-		if(Func.isEmpty(list)){
+		if (Func.isEmpty(list)) {
 			throw new ServiceException("本月无参研人员");
 		}
 		List<String> unicodeList = list.stream().map(XmTechnicianEntity::getUnicode).distinct().toList();
@@ -377,7 +384,7 @@ public class AttendanceServiceImpl extends BaseServiceImpl<AttendanceMapper, Att
 		List<String> existsUnicodeList = attendanceList.stream().map(AttendanceEntity::getUnicode).distinct().toList();
 
 		List<String> insertUnicodeList = unicodeList.stream().filter(item -> !existsUnicodeList.contains(item)).toList();
-		if(Func.isEmpty(insertUnicodeList)){
+		if (Func.isEmpty(insertUnicodeList)) {
 			throw new ServiceException("本月参研人员已全部引用");
 		}
 		List<AttendanceEntity> insertList = new ArrayList<>();
@@ -411,13 +418,12 @@ public class AttendanceServiceImpl extends BaseServiceImpl<AttendanceMapper, Att
 //		}
 
 
-
- 	}
+	}
 
 	@Override
 	public boolean deleteAttendance(List<AttendanceDto> attendanceList) {
 		for (AttendanceDto dto : attendanceList) {
- 			baseMapper.deleteByUnicodeAndMonthly(dto.getUnicode(), dto.getYearAndMonth());
+			baseMapper.deleteByUnicodeAndMonthly(dto.getUnicode(), dto.getYearAndMonth());
 		}
 		return true;
 	}

+ 21 - 5
kd-service/kd-scientific/src/main/java/org/sky/scientific/service/impl/TechnicianServiceImpl.java

@@ -23,6 +23,7 @@ import org.sky.core.mp.support.Condition;
 import org.sky.core.mp.support.Query;
 import org.sky.core.secure.utils.SecureUtil;
 import org.sky.core.tool.utils.*;
+import org.sky.scientific.e.XmStatusEnum;
 import org.sky.scientific.excel.TechnicianExcel;
 import org.sky.scientific.excel.handle.MergeCellRangeWriteHandler;
 import org.sky.scientific.excel.handle.XmcyryhzmExcel;
@@ -66,6 +67,7 @@ public class TechnicianServiceImpl extends BaseServiceImpl<TechnicianMapper, Tec
 	private final DepartmentMapper departmentMapper;
 	private final SalaryMapper salaryMapper;
 	private final AttendanceMapper attendanceMapper;
+	private final XmJtbMapper xmJtbMapper;
 
 	@Override
 	public boolean insertTechnician(TechnicianEntity technician) {
@@ -298,6 +300,10 @@ public class TechnicianServiceImpl extends BaseServiceImpl<TechnicianMapper, Tec
 		List<XmEntity> xmList = xmMapper.listByYearAndMonth(yearAndMonth);
 		Date lastDate = DateUtil.minusMonths(DateUtil.parse(yearAndMonth, DateUtil.PATTERN_YYYYMM), 1);
 		for (XmEntity xm : xmList) {
+
+			if (Func.equals(xm.getStatus(), XmStatusEnum.已结题.getCode())) {
+				continue;
+			}
 			//根据项目引入上个月的参研人员名单
 			LambdaQueryWrapper<XmTechnicianEntity> wrapper = Wrappers.<XmTechnicianEntity>lambdaQuery()
 				.eq(XmTechnicianEntity::getXmId, xm.getId())
@@ -381,6 +387,11 @@ public class TechnicianServiceImpl extends BaseServiceImpl<TechnicianMapper, Tec
 
 	@Override
 	public boolean submitXmTechnicianMonthly(XmTechnicianEntity entity) {
+
+		Integer status = xmMapper.getXmStatusByXmId(entity.getXmId());
+		if (Func.equals(status, XmStatusEnum.已结题.getCode())) {
+			throw new ServiceException("项目已结题,不可操作");
+		}
 		int affectNum = 0;
 		entity.setId(null);
 		entity.setYearAndMonth(entity.getYearAndMonth());
@@ -409,6 +420,11 @@ public class TechnicianServiceImpl extends BaseServiceImpl<TechnicianMapper, Tec
 			throw new ServiceException("数据不存在");
 		}
 
+		Integer status = xmMapper.getXmStatusByXmId(dbXmTechnician.getXmId());
+		if (Func.equals(status, XmStatusEnum.已结题.getCode())) {
+			throw new ServiceException("项目已结题,不可操作");
+		}
+
 		//每月研发人员工资
 		if (salaryMapper.selectCount(Wrappers.<SalaryEntity>lambdaQuery().eq(SalaryEntity::getYearAndMonth, dbXmTechnician.getYearAndMonth()).eq(SalaryEntity::getUnicode, dbXmTechnician.getUnicode())) > 0) {
 			throw new ServiceException("每月研发人员工资引用了该数据,无法删除");
@@ -429,19 +445,19 @@ public class TechnicianServiceImpl extends BaseServiceImpl<TechnicianMapper, Tec
 		if (xmMapper.countXmfzrByUnicodeAndYearMonth(unicode, yeaAndMonth) > 0) {
 			throw new ServiceException("删除失败,[" + name + "]是项目负责人");
 		}
- 		if (xmTechnicianMapper.selectCount(Wrappers.<XmTechnicianEntity>lambdaQuery().eq(XmTechnicianEntity::getUnicode, unicode).ge(XmTechnicianEntity::getYearAndMonth, yeaAndMonth)) > 0) {
+		if (xmTechnicianMapper.selectCount(Wrappers.<XmTechnicianEntity>lambdaQuery().eq(XmTechnicianEntity::getUnicode, unicode).ge(XmTechnicianEntity::getYearAndMonth, yeaAndMonth)) > 0) {
 			throw new ServiceException("删除失败,每月参研人员名单引用了[" + name + "]");
 		}
- 		if (ysRyrgfyMapper.countByUnicodeAndYearMonth(unicode, yeaAndMonth) > 0) {
+		if (ysRyrgfyMapper.countByUnicodeAndYearMonth(unicode, yeaAndMonth) > 0) {
 			throw new ServiceException("删除失败,研发项目费用预算-人员人工费用引用了[" + name + "]");
 		}
- 		if (salaryMapper.selectCount(Wrappers.<SalaryEntity>lambdaQuery().eq(SalaryEntity::getUnicode, unicode).ge(SalaryEntity::getYearAndMonth, yeaAndMonth)) > 0) {
+		if (salaryMapper.selectCount(Wrappers.<SalaryEntity>lambdaQuery().eq(SalaryEntity::getUnicode, unicode).ge(SalaryEntity::getYearAndMonth, yeaAndMonth)) > 0) {
 			throw new ServiceException("删除失败,每月研发人员工资引用了[" + name + "]");
 		}
- 		if (attendanceMapper.selectCount(Wrappers.<AttendanceEntity>lambdaQuery().eq(AttendanceEntity::getUnicode, unicode).apply("LEFT(work_date,6) >= {0}", yeaAndMonth)) > 0) {
+		if (attendanceMapper.selectCount(Wrappers.<AttendanceEntity>lambdaQuery().eq(AttendanceEntity::getUnicode, unicode).apply("LEFT(work_date,6) >= {0}", yeaAndMonth)) > 0) {
 			throw new ServiceException("删除失败,每月研发人员出勤引用了[" + name + "]");
 		}
- 		if(hoursMapper.selectCount(Wrappers.<XmTechnicianHours>lambdaQuery().eq(XmTechnicianHours::getUnicode, unicode).apply("LEFT(work_date,6) >= {0}", yeaAndMonth)) > 0){
+		if (hoursMapper.selectCount(Wrappers.<XmTechnicianHours>lambdaQuery().eq(XmTechnicianHours::getUnicode, unicode).apply("LEFT(work_date,6) >= {0}", yeaAndMonth)) > 0) {
 			throw new ServiceException("删除失败,每月研发工时打卡引用了[" + name + "]");
 		}
 	}

+ 31 - 17
kd-service/kd-scientific/src/main/java/org/sky/scientific/service/impl/XmFixedAssetServiceImpl.java

@@ -1,4 +1,3 @@
-
 package org.sky.scientific.service.impl;
 
 import com.alibaba.excel.EasyExcel;
@@ -20,6 +19,7 @@ import org.sky.core.mp.support.Query;
 import org.sky.core.secure.utils.SecureUtil;
 import org.sky.core.tool.utils.*;
 import org.sky.scientific.e.AssetStatusEnum;
+import org.sky.scientific.e.XmStatusEnum;
 import org.sky.scientific.excel.XmFixedAssetExcel;
 import org.sky.scientific.mapper.AssetMapper;
 import org.sky.scientific.mapper.XmFixedAssetMapper;
@@ -32,6 +32,7 @@ import org.sky.scientific.pojo.entity.YsZjfyycqdtfyEntity;
 import org.sky.scientific.pojo.vo.XmFixedAssetCostVo;
 import org.sky.scientific.service.IXmFixedAssetService;
 import org.springframework.stereotype.Service;
+import org.springframework.transaction.annotation.Transactional;
 import org.springframework.web.multipart.MultipartFile;
 
 import java.io.InputStream;
@@ -76,6 +77,7 @@ public class XmFixedAssetServiceImpl extends BaseServiceImpl<XmFixedAssetMapper,
 	}
 
 	@Override
+	@Transactional
 	public boolean xmFixAsset_zhijieyinyong(String yearAndMonth, String zclb) {
 		if (StringUtil.isBlank(yearAndMonth)) {
 			throw new ServiceException("参数yearAndMonth不能为空");
@@ -83,6 +85,13 @@ public class XmFixedAssetServiceImpl extends BaseServiceImpl<XmFixedAssetMapper,
 		Date lastDate = DateUtil.minusMonths(DateUtil.parse(yearAndMonth, DateUtil.PATTERN_YYYYMM), 1);
 		//获取上个月数据
 		List<XmFixedAsset> lastMonthList = baseMapper.selectXmFixedAssetByYearAndMonth(DateUtil.format(lastDate, DateUtil.PATTERN_YYYYMM), zclb);
+		List<Long> list = lastMonthList.stream().map(XmFixedAsset::getXmId).toList();
+		for (Long xmId : list) {
+			Integer xmStatus = xmMapper.getXmStatusByXmId(xmId);
+			if (Func.equals(xmStatus, XmStatusEnum.已结题.getCode())) {
+				throw new ServiceException("项目已结题,不可操作");
+			}
+		}
 		//获取本月数据
 		List<XmFixedAsset> thisMonthList = baseMapper.selectXmFixedAssetByYearAndMonth(yearAndMonth, zclb);
 
@@ -159,7 +168,12 @@ public class XmFixedAssetServiceImpl extends BaseServiceImpl<XmFixedAssetMapper,
 				if (xmId == null) {
 					throw new ServiceException("序号为[" + excel.getXh() + "]的项目不存在");
 				}
+				Integer status = xmMapper.getXmStatusByXmId(xmId);
+				if (Func.equals(status, XmStatusEnum.已结题.getCode())) {
+					throw new ServiceException("项目已结题,不可操作");
+				}
 			}
+
 			xmIdMap.put(xmkey, xmId);
 
 			if (StringUtil.isAllBlank(excel.getZcmc(), excel.getZcbm())) {
@@ -190,7 +204,15 @@ public class XmFixedAssetServiceImpl extends BaseServiceImpl<XmFixedAssetMapper,
 	}
 
 	@Override
+	@Transactional
 	public boolean physicalDeleteByIds(List<Long> ids) {
+		for (Long id : ids) {
+			XmFixedAsset fixedAsset = baseMapper.selectById(id);
+			Integer status = xmMapper.getXmStatusByXmId(fixedAsset.getXmId());
+			if (Func.equals(status, XmStatusEnum.已结题.getCode())) {
+				throw new ServiceException("项目已结题,不可操作");
+			}
+		}
 		return baseMapper.physicalDeleteByIds(ids);
 	}
 
@@ -199,6 +221,10 @@ public class XmFixedAssetServiceImpl extends BaseServiceImpl<XmFixedAssetMapper,
 		if (StringUtil.isBlank(xmAsset.getYearAndMonth())) {
 			throw new ServiceException("参数yearAndMonth不能为空");
 		}
+		Integer status = xmMapper.getXmStatusByXmId(xmAsset.getXmId());
+		if (Func.equals(status, XmStatusEnum.已结题.getCode())) {
+			throw new ServiceException("项目已结题,不可操作");
+		}
 		//获取本月数据
 		List<XmFixedAsset> thisMonthList = baseMapper.selectXmFixedAssetByYearAndMonth(xmAsset.getYearAndMonth(), zclb);
 
@@ -248,10 +274,7 @@ public class XmFixedAssetServiceImpl extends BaseServiceImpl<XmFixedAssetMapper,
 			results.add(data);
 		});
 		InputStream templateFileName = this.getClass().getClassLoader().getResourceAsStream("export-template/仪器设备折旧费用分配表.xls");
-		ExcelWriter excelWriter = EasyExcel.write(os)
-			.withTemplate((templateFileName))
-			.excelType(ExcelTypeEnum.XLS)
-			.build();
+		ExcelWriter excelWriter = EasyExcel.write(os).withTemplate((templateFileName)).excelType(ExcelTypeEnum.XLS).build();
 		WriteSheet writeSheet = EasyExcel.writerSheet().build();
 		FillConfig fillConfig = FillConfig.builder().forceNewRow(Boolean.TRUE).build();
 		//设置list集合数据
@@ -308,10 +331,7 @@ public class XmFixedAssetServiceImpl extends BaseServiceImpl<XmFixedAssetMapper,
 		});
 
 		InputStream templateFileName = this.getClass().getClassLoader().getResourceAsStream("export-template/在用建筑物折旧费用分配表.xls");
-		ExcelWriter excelWriter = EasyExcel.write(os)
-			.withTemplate((templateFileName))
-			.excelType(ExcelTypeEnum.XLS)
-			.build();
+		ExcelWriter excelWriter = EasyExcel.write(os).withTemplate((templateFileName)).excelType(ExcelTypeEnum.XLS).build();
 
 		WriteSheet writeSheet = EasyExcel.writerSheet().build();
 		FillConfig fillConfig = FillConfig.builder().forceNewRow(Boolean.TRUE).build();
@@ -358,10 +378,7 @@ public class XmFixedAssetServiceImpl extends BaseServiceImpl<XmFixedAssetMapper,
 		response.setContentType("application/vnd.ms-excel");
 		response.setCharacterEncoding("utf-8");
 		response.addHeader("Content-Disposition", "attachment;filename=" + URLEncoder.encode("每月仪器设备明细.xls", Charsets.UTF_8));
-		ExcelWriter excelWriter = EasyExcel.write(response.getOutputStream())
-			.withTemplate((templateFileName))
-			.excelType(ExcelTypeEnum.XLS)
-			.build();
+		ExcelWriter excelWriter = EasyExcel.write(response.getOutputStream()).withTemplate((templateFileName)).excelType(ExcelTypeEnum.XLS).build();
 
 		WriteSheet writeSheet = EasyExcel.writerSheet().build();
 		FillConfig fillConfig = FillConfig.builder().forceNewRow(Boolean.TRUE).build();
@@ -409,10 +426,7 @@ public class XmFixedAssetServiceImpl extends BaseServiceImpl<XmFixedAssetMapper,
 		response.setContentType("application/vnd.ms-excel");
 		response.setCharacterEncoding("utf-8");
 		response.addHeader("Content-Disposition", "attachment;filename=" + URLEncoder.encode("每月在用建筑物明细.xls", Charsets.UTF_8));
-		ExcelWriter excelWriter = EasyExcel.write(response.getOutputStream())
-			.withTemplate((templateFileName))
-			.excelType(ExcelTypeEnum.XLS)
-			.build();
+		ExcelWriter excelWriter = EasyExcel.write(response.getOutputStream()).withTemplate((templateFileName)).excelType(ExcelTypeEnum.XLS).build();
 
 		WriteSheet writeSheet = EasyExcel.writerSheet().build();
 		FillConfig fillConfig = FillConfig.builder().forceNewRow(Boolean.TRUE).build();

+ 13 - 3
kd-service/kd-scientific/src/main/java/org/sky/scientific/service/impl/XmIntangibleAssetServiceImpl.java

@@ -20,6 +20,7 @@ import org.sky.core.mp.support.Query;
 import org.sky.core.secure.utils.SecureUtil;
 import org.sky.core.tool.utils.*;
 import org.sky.scientific.e.AssetStatusEnum;
+import org.sky.scientific.e.XmStatusEnum;
 import org.sky.scientific.excel.XmIntangibleAssetExcel;
 import org.sky.scientific.mapper.AssetMapper;
 import org.sky.scientific.mapper.XmIntangibleAssetMapper;
@@ -83,7 +84,6 @@ public class XmIntangibleAssetServiceImpl extends BaseServiceImpl<XmIntangibleAs
 		//查询项目周期包含yearAndMonth的项目
 		//查询每个项目上个月数据,有则引入,无则引入预算表数据,都没数据,则提示:无数据可引入。否则提示:引入成功
 
-
 		//获取本月数据
 		List<XmIntangibleAsset> thisMonthList = baseMapper.selectListByYearAndMonth(yearAndMonth);
 
@@ -91,8 +91,7 @@ public class XmIntangibleAssetServiceImpl extends BaseServiceImpl<XmIntangibleAs
 		//获取上个月数据
 		List<XmIntangibleAsset> lastMonthList = baseMapper.selectListByYearAndMonth(DateUtil.format(lastDate, DateUtil.PATTERN_YYYYMM));
 
-		List<String> zcbmList = thisMonthList.stream().map(XmIntangibleAsset::getZcbm).toList();
-		Map<Long, List<XmIntangibleAsset>> c1 = thisMonthList.stream().collect(Collectors.groupingBy(XmIntangibleAsset::getXmId));
+ 		Map<Long, List<XmIntangibleAsset>> c1 = thisMonthList.stream().collect(Collectors.groupingBy(XmIntangibleAsset::getXmId));
 
 		if (!CollectionUtil.isEmpty(lastMonthList)) {
 			//复制上个月数据到本月
@@ -170,6 +169,10 @@ public class XmIntangibleAssetServiceImpl extends BaseServiceImpl<XmIntangibleAs
 				if (xmId == null) {
 					throw new ServiceException("序号为[" + excel.getXh() + "]的项目不存在");
 				}
+				Integer status = xmMapper.getXmStatusByXmId(xmId);
+				if (Func.equals(status, XmStatusEnum.已结题.getCode())) {
+					throw new ServiceException("项目已结题,不可操作");
+				}
 			}
 			xmIdMap.put(xmkey, xmId);
 
@@ -202,6 +205,13 @@ public class XmIntangibleAssetServiceImpl extends BaseServiceImpl<XmIntangibleAs
 
 	@Override
 	public boolean physicalDeleteByIds(List<Long> ids) {
+		for (Long id : ids) {
+			XmIntangibleAsset intangibleAsset = baseMapper.selectById(id);
+			Integer status = xmMapper.getXmStatusByXmId(intangibleAsset.getXmId());
+			if (Func.equals(status, XmStatusEnum.已结题.getCode())) {
+				throw new ServiceException("项目已结题,不可操作");
+			}
+		}
 		return baseMapper.physicalDeleteByIds(ids);
 	}
 

+ 49 - 12
kd-service/kd-scientific/src/main/java/org/sky/scientific/service/impl/XmJtbServiceImpl.java

@@ -2,6 +2,7 @@
 package org.sky.scientific.service.impl;
 
 import com.alibaba.fastjson.JSONObject;
+import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
 import com.baomidou.mybatisplus.core.toolkit.Wrappers;
 import lombok.AllArgsConstructor;
 import lombok.SneakyThrows;
@@ -11,21 +12,24 @@ import org.sky.core.secure.utils.SecureUtil;
 import org.sky.core.tool.api.R;
 import org.sky.core.tool.utils.DateUtil;
 import org.sky.core.tool.utils.Func;
-import org.sky.scientific.mapper.DepartmentMapper;
-import org.sky.scientific.mapper.TechnicianMapper;
-import org.sky.scientific.mapper.XmJtbMapper;
+import org.sky.scientific.e.XmStatusEnum;
+import org.sky.scientific.mapper.*;
 import org.sky.scientific.pojo.dto.XmJtbDTO;
+import org.sky.scientific.pojo.entity.XmBgrzEntity;
 import org.sky.scientific.pojo.entity.XmEntity;
 import org.sky.scientific.pojo.entity.XmJtbEntity;
 import org.sky.scientific.pojo.vo.XmJtbVO;
+import org.sky.scientific.pojo.vo.XmVO;
 import org.sky.scientific.service.IXmJtbService;
 import org.sky.scientific.utils.TemplateService;
 import org.sky.system.feign.ISysClient;
 import org.sky.system.pojo.entity.Tenant;
 import org.springframework.stereotype.Service;
+import org.springframework.transaction.annotation.Transactional;
 
 import java.io.FileOutputStream;
 import java.io.OutputStreamWriter;
+import java.util.Date;
 import java.util.Objects;
 
 /**
@@ -41,7 +45,10 @@ public class XmJtbServiceImpl extends BaseServiceImpl<XmJtbMapper, XmJtbEntity>
 	private final TechnicianMapper technicianMapper;
 	private final DepartmentMapper departmentMapper;
 	private final TemplateService templateService;
- 	private final ISysClient sysClient;
+	private final XmMapper xmMapper;
+	private final XmBgrzMapper xmBgrzMapper;
+	private final ISysClient sysClient;
+
 	@Override
 	public XmJtbVO selectByCondition(XmJtbDTO xmJtb) {
 		if (Objects.isNull(xmJtb.getXmId())) {
@@ -56,10 +63,40 @@ public class XmJtbServiceImpl extends BaseServiceImpl<XmJtbMapper, XmJtbEntity>
 	}
 
 	@Override
+	@Transactional
 	public boolean submit(XmJtbEntity xmJtb) {
 		if (Objects.isNull(xmJtb.getXmId())) {
 			throw new ServiceException("请选择科研项目");
 		}
+
+		XmVO xmVO = xmMapper.selectByXmId(xmJtb.getXmId());
+		if (Func.isNull(xmVO)) {
+			throw new ServiceException("研发项目不存在");
+		}
+		if (Func.notNull(xmJtb.getTbsj()) && !cn.hutool.core.date.DateUtil.isSameDay(xmVO.getXmjssj(), xmJtb.getTbsj())) {
+			throw new ServiceException("填报时间与项目结束时间不一致");
+		}
+
+		if (xmJtb.getStatus() == XmStatusEnum.已结题.getCode()) {
+			//往变更表插入一条项目状态变更为 已结题的 变更记录
+			LambdaQueryWrapper<XmBgrzEntity> queryWrapper = Wrappers.<XmBgrzEntity>lambdaQuery()
+				.eq(XmBgrzEntity::getXmId, xmJtb.getXmId())
+				.eq(XmBgrzEntity::getZdmc, "STATUS")
+				.eq(XmBgrzEntity::getBghdz, XmStatusEnum.已结题.getCode());
+			if (xmBgrzMapper.selectCount(queryWrapper) > 0) {
+				xmBgrzMapper.deleteBgrzByJtb(xmJtb.getXmId());
+			}
+			XmBgrzEntity bgrz = new XmBgrzEntity();
+			bgrz.setXmId(xmJtb.getXmId());
+			bgrz.setZdmc("STATUS");
+			bgrz.setBghdz(String.valueOf(XmStatusEnum.已结题.getCode()));
+			bgrz.setBgyy("项目结题");
+			bgrz.setBgsxsj(new Date());
+			bgrz.setTenantId(SecureUtil.getTenantId());
+			xmBgrzMapper.insert(bgrz);
+		} else {
+			xmBgrzMapper.deleteBgrzByJtb(xmJtb.getXmId());
+		}
 		boolean result = false;
 		if (this.isFieldDuplicate(XmJtbEntity::getXmId, xmJtb.getXmId())) {
 			result = this.update(xmJtb, Wrappers.<XmJtbEntity>lambdaUpdate().eq(XmJtbEntity::getXmId, xmJtb.getXmId()));
@@ -77,17 +114,17 @@ public class XmJtbServiceImpl extends BaseServiceImpl<XmJtbMapper, XmJtbEntity>
 
 		XmEntity xm = vo.getXmEntity();
 		map.put("xmmc", xm.getXmmc());
-		map.put("xmfzrxm", Func.notNull(xm.getXmfzrxm())?xm.getXmfzrxm(): "");
-		map.put("xmsqdw", Func.notNull(xm.getXmsqdw())?xm.getXmsqdw(): "");
+		map.put("xmfzrxm", Func.notNull(xm.getXmfzrxm()) ? xm.getXmfzrxm() : "");
+		map.put("xmsqdw", Func.notNull(xm.getXmsqdw()) ? xm.getXmsqdw() : "");
 		map.put("kssjStr", DateUtil.format(xm.getXmkssj(), "yyyy年MM月dd日"));
 		map.put("jssjStr", DateUtil.format(xm.getXmjssj(), "yyyy年MM月dd日"));
 		map.put("tbsjStr", DateUtil.format(vo.getTbsj(), "yyyy年MM月dd日"));
- 		map.put("yjlx", Func.notNull(xm.getYjlx())?xm.getYjlx(): "");
-		map.put("xmly", Func.notNull(xm.getXmly())?xm.getXmly(): "");
-		map.put("xmkzxs", Func.notNull(xm.getXmkzxs())?xm.getXmkzxs(): "");
-		map.put("yqcgxs", Func.notNull(xm.getYqcgxs())?xm.getYqcgxs(): "");
-		map.put("xmjsjjmb", Func.notNull(xm.getXmjsjjmb())?xm.getXmjsjjmb(): "");
-		map.put("xmysze", Func.notNull(xm.getXmysze())?xm.getXmysze(): "");
+		map.put("yjlx", Func.notNull(xm.getYjlx()) ? xm.getYjlx() : "");
+		map.put("xmly", Func.notNull(xm.getXmly()) ? xm.getXmly() : "");
+		map.put("xmkzxs", Func.notNull(xm.getXmkzxs()) ? xm.getXmkzxs() : "");
+		map.put("yqcgxs", Func.notNull(xm.getYqcgxs()) ? xm.getYqcgxs() : "");
+		map.put("xmjsjjmb", Func.notNull(xm.getXmjsjjmb()) ? xm.getXmjsjjmb() : "");
+		map.put("xmysze", Func.notNull(xm.getXmysze()) ? xm.getXmysze() : "");
 
 		R<Tenant> tenant = sysClient.getTenant(SecureUtil.getTenantId());
 		map.put("enterpriseName", "");