Browse Source

Merge branch 'test2' of jishutao/kede-server into prod

anderx 1 year ago
parent
commit
791c469ab7
30 changed files with 4225 additions and 41 deletions
  1. 1 1
      src/main/java/com/goafanti/business/service/impl/RestrictProjectServiceImpl.java
  2. 1 0
      src/main/java/com/goafanti/common/dao/DepartmentMapper.java
  3. 1 0
      src/main/java/com/goafanti/common/dao/TOrderNewMapper.java
  4. 88 0
      src/main/java/com/goafanti/common/dao/TaskAnnualReportMapper.java
  5. 85 0
      src/main/java/com/goafanti/common/dao/TaskDetailsExtendMapper.java
  6. 85 0
      src/main/java/com/goafanti/common/dao/TaskDetailsMapper.java
  7. 85 0
      src/main/java/com/goafanti/common/dao/TaskDetailsSupplementMapper.java
  8. 7 0
      src/main/java/com/goafanti/common/mapper/DepartmentMapper.xml
  9. 15 11
      src/main/java/com/goafanti/common/mapper/TOrderNewMapper.xml
  10. 181 0
      src/main/java/com/goafanti/common/mapper/TaskAnnualReportMapper.xml
  11. 374 0
      src/main/java/com/goafanti/common/mapper/TaskDetailsExtendMapper.xml
  12. 450 0
      src/main/java/com/goafanti/common/mapper/TaskDetailsMapper.xml
  13. 414 0
      src/main/java/com/goafanti/common/mapper/TaskDetailsSupplementMapper.xml
  14. 116 0
      src/main/java/com/goafanti/common/model/TaskAnnualReport.java
  15. 391 0
      src/main/java/com/goafanti/common/model/TaskDetails.java
  16. 304 0
      src/main/java/com/goafanti/common/model/TaskDetailsExtend.java
  17. 351 0
      src/main/java/com/goafanti/common/model/TaskDetailsSupplement.java
  18. 12 9
      src/main/java/com/goafanti/customer/service/impl/UserClueServiceImpl.java
  19. 9 0
      src/main/java/com/goafanti/order/bo/InputOrderNewListBo.java
  20. 4 11
      src/main/java/com/goafanti/order/service/impl/OrderNewServiceImpl.java
  21. 46 7
      src/main/java/com/goafanti/order/service/impl/OrderPlusServiceImpl.java
  22. 610 0
      src/main/java/com/goafanti/techproject/bo/TaskDetailsBo.java
  23. 15 0
      src/main/java/com/goafanti/techproject/controller/AdminTaskDetailsController.java
  24. 88 0
      src/main/java/com/goafanti/techproject/controller/TaskAnnualReportController.java
  25. 91 0
      src/main/java/com/goafanti/techproject/controller/TaskDetailsController.java
  26. 54 0
      src/main/java/com/goafanti/techproject/service/TaskAnnualReportService.java
  27. 57 0
      src/main/java/com/goafanti/techproject/service/TaskDetailsService.java
  28. 96 0
      src/main/java/com/goafanti/techproject/service/impl/TaskAnnualReportServiceImpl.java
  29. 192 0
      src/main/java/com/goafanti/techproject/service/impl/TaskDetailsServiceImpl.java
  30. 2 2
      src/main/resources/props/config_local.properties

+ 1 - 1
src/main/java/com/goafanti/business/service/impl/RestrictProjectServiceImpl.java

@@ -282,7 +282,7 @@ public class RestrictProjectServiceImpl extends BaseMybatisDao<RestrictProjectMa
     public boolean checkMax(String uid) {
         int i = userMapper.checkUserMax(TokenManager.getAdminId());
         int limitMax=101;
-        //加入限定项目的数量
+        //加入限定项目的数量  不算自己的签单只算非自己的客户
         Integer rpCount =restrictProjectMapper.selectPrivateByAid(TokenManager.getAdminId());
         rpCount=rpCount==null?0:rpCount;
         i=i+rpCount;

+ 1 - 0
src/main/java/com/goafanti/common/dao/DepartmentMapper.java

@@ -132,4 +132,5 @@ public interface DepartmentMapper {
 
     void updateNull(InputDep in);
 
+    int selectByApproval(String aid);
 }

+ 1 - 0
src/main/java/com/goafanti/common/dao/TOrderNewMapper.java

@@ -176,5 +176,6 @@ public interface TOrderNewMapper {
 
     List<String> selectByDepAndProcess(@Param("depId") String depId, @Param("processStatus") Integer processStatus);
 
+    TOrderNew selectByTid(Integer tid);
 }
 

+ 88 - 0
src/main/java/com/goafanti/common/dao/TaskAnnualReportMapper.java

@@ -0,0 +1,88 @@
+package com.goafanti.common.dao;
+
+import com.goafanti.common.model.TaskAnnualReport;
+import org.apache.ibatis.annotations.Param;
+import org.springframework.data.domain.Pageable;
+
+import java.util.List;
+
+/**
+ * 项目年报(TaskAnnualReport)表数据库访问层
+ *
+ * @author makejava
+ * @since 2024-12-26 13:45:50
+ */
+public interface TaskAnnualReportMapper {
+
+    /**
+     * 通过ID查询单条数据
+     *
+     * @param id 主键
+     * @return 实例对象
+     */
+    TaskAnnualReport queryById(Integer id);
+
+
+    /**
+     * 查询指定行数据
+     *
+     * @param taskAnnualReport 查询条件
+     * @param pageable         分页对象
+     * @return 对象列表
+     */
+    List<TaskAnnualReport> findTaskAnnualReportList(TaskAnnualReport taskAnnualReport, @Param("pageable") Pageable pageable);
+
+    /**
+     * 统计总行数
+     *
+     * @param taskAnnualReport 查询条件
+     * @return 总行数
+     */
+    int findTaskAnnualReportCount(TaskAnnualReport taskAnnualReport);
+
+    /**
+     * 新增数据
+     *
+     * @param taskAnnualReport 实例对象
+     * @return 影响行数
+     */
+    int insert(TaskAnnualReport taskAnnualReport);
+
+    /**
+     * 批量新增数据(MyBatis原生foreach方法)
+     *
+     * @param entities List<TaskAnnualReport> 实例对象列表
+     * @return 影响行数
+     */
+    int insertBatch(@Param("entities") List<TaskAnnualReport> entities);
+
+    /**
+     * 批量新增或按主键更新数据(MyBatis原生foreach方法)
+     *
+     * @param entities List<TaskAnnualReport> 实例对象列表
+     * @return 影响行数
+     * @throws org.springframework.jdbc.BadSqlGrammarException 入参是空List的时候会抛SQL语句错误的异常,请自行校验入参
+     */
+    int insertOrUpdateBatch(@Param("entities") List<TaskAnnualReport> entities);
+
+    /**
+     * 修改数据
+     *
+     * @param taskAnnualReport 实例对象
+     * @return 影响行数
+     */
+    int update(TaskAnnualReport taskAnnualReport);
+
+    /**
+     * 通过主键删除数据
+     *
+     * @param id 主键
+     * @return 影响行数
+     */
+    int deleteById(Integer id);
+
+    TaskAnnualReport selectByTidAndYear(@Param("tid") Integer tid, @Param("year") Integer year);
+
+    List<TaskAnnualReport> selectThreeYear(@Param("tid") Integer tid, @Param("year") int year);
+}
+

+ 85 - 0
src/main/java/com/goafanti/common/dao/TaskDetailsExtendMapper.java

@@ -0,0 +1,85 @@
+package com.goafanti.common.dao;
+
+import com.goafanti.common.model.TaskDetailsExtend;
+import org.apache.ibatis.annotations.Param;
+import org.springframework.data.domain.Pageable;
+
+import java.util.List;
+
+/**
+ * 项目申报详情扩展表(TaskDetailsExtend)表数据库访问层
+ *
+ * @author makejava
+ * @since 2024-12-26 17:12:02
+ */
+public interface TaskDetailsExtendMapper {
+
+    /**
+     * 通过ID查询单条数据
+     *
+     * @param id 主键
+     * @return 实例对象
+     */
+    TaskDetailsExtend selectById(Integer id);
+
+
+    /**
+     * 查询指定行数据
+     *
+     * @param taskDetailsExtend 查询条件
+     * @param pageable          分页对象
+     * @return 对象列表
+     */
+    List<TaskDetailsExtend> findTaskDetailsExtendList(TaskDetailsExtend taskDetailsExtend, @Param("pageable") Pageable pageable);
+
+    /**
+     * 统计总行数
+     *
+     * @param taskDetailsExtend 查询条件
+     * @return 总行数
+     */
+    int findTaskDetailsExtendCount(TaskDetailsExtend taskDetailsExtend);
+
+    /**
+     * 新增数据
+     *
+     * @param taskDetailsExtend 实例对象
+     * @return 影响行数
+     */
+    int insert(TaskDetailsExtend taskDetailsExtend);
+
+    /**
+     * 批量新增数据(MyBatis原生foreach方法)
+     *
+     * @param entities List<TaskDetailsExtend> 实例对象列表
+     * @return 影响行数
+     */
+    int insertBatch(@Param("entities") List<TaskDetailsExtend> entities);
+
+    /**
+     * 批量新增或按主键更新数据(MyBatis原生foreach方法)
+     *
+     * @param entities List<TaskDetailsExtend> 实例对象列表
+     * @return 影响行数
+     * @throws org.springframework.jdbc.BadSqlGrammarException 入参是空List的时候会抛SQL语句错误的异常,请自行校验入参
+     */
+    int insertOrUpdateBatch(@Param("entities") List<TaskDetailsExtend> entities);
+
+    /**
+     * 修改数据
+     *
+     * @param taskDetailsExtend 实例对象
+     * @return 影响行数
+     */
+    int update(TaskDetailsExtend taskDetailsExtend);
+
+    /**
+     * 通过主键删除数据
+     *
+     * @param id 主键
+     * @return 影响行数
+     */
+    int deleteById(Integer id);
+
+}
+

+ 85 - 0
src/main/java/com/goafanti/common/dao/TaskDetailsMapper.java

@@ -0,0 +1,85 @@
+package com.goafanti.common.dao;
+
+import com.goafanti.common.model.TaskDetails;
+import org.apache.ibatis.annotations.Param;
+import org.springframework.data.domain.Pageable;
+
+import java.util.List;
+
+/**
+ * 项目申报详情(TaskDetails)表数据库访问层
+ *
+ * @author makejava
+ * @since 2024-12-26 17:11:50
+ */
+public interface TaskDetailsMapper {
+
+    /**
+     * 通过ID查询单条数据
+     *
+     * @param id 主键
+     * @return 实例对象
+     */
+    TaskDetails selectById(Integer id);
+
+
+    /**
+     * 查询指定行数据
+     *
+     * @param taskDetails 查询条件
+     * @param pageable    分页对象
+     * @return 对象列表
+     */
+    List<TaskDetails> findTaskDetailsList(TaskDetails taskDetails, @Param("pageable") Pageable pageable);
+
+    /**
+     * 统计总行数
+     *
+     * @param taskDetails 查询条件
+     * @return 总行数
+     */
+    int findTaskDetailsCount(TaskDetails taskDetails);
+
+    /**
+     * 新增数据
+     *
+     * @param taskDetails 实例对象
+     * @return 影响行数
+     */
+    int insert(TaskDetails taskDetails);
+
+    /**
+     * 批量新增数据(MyBatis原生foreach方法)
+     *
+     * @param entities List<TaskDetails> 实例对象列表
+     * @return 影响行数
+     */
+    int insertBatch(@Param("entities") List<TaskDetails> entities);
+
+    /**
+     * 批量新增或按主键更新数据(MyBatis原生foreach方法)
+     *
+     * @param entities List<TaskDetails> 实例对象列表
+     * @return 影响行数
+     * @throws org.springframework.jdbc.BadSqlGrammarException 入参是空List的时候会抛SQL语句错误的异常,请自行校验入参
+     */
+    int insertOrUpdateBatch(@Param("entities") List<TaskDetails> entities);
+
+    /**
+     * 修改数据
+     *
+     * @param taskDetails 实例对象
+     * @return 影响行数
+     */
+    int update(TaskDetails taskDetails);
+
+    /**
+     * 通过主键删除数据
+     *
+     * @param id 主键
+     * @return 影响行数
+     */
+    int deleteById(Integer id);
+
+}
+

+ 85 - 0
src/main/java/com/goafanti/common/dao/TaskDetailsSupplementMapper.java

@@ -0,0 +1,85 @@
+package com.goafanti.common.dao;
+
+import com.goafanti.common.model.TaskDetailsSupplement;
+import org.apache.ibatis.annotations.Param;
+import org.springframework.data.domain.Pageable;
+
+import java.util.List;
+
+/**
+ * 项目申报详情补充表(TaskDetailsSupplement)表数据库访问层
+ *
+ * @author makejava
+ * @since 2024-12-26 17:12:11
+ */
+public interface TaskDetailsSupplementMapper {
+
+    /**
+     * 通过ID查询单条数据
+     *
+     * @param id 主键
+     * @return 实例对象
+     */
+    TaskDetailsSupplement selectById(Integer id);
+
+
+    /**
+     * 查询指定行数据
+     *
+     * @param taskDetailsSupplement 查询条件
+     * @param pageable              分页对象
+     * @return 对象列表
+     */
+    List<TaskDetailsSupplement> findTaskDetailsSupplementList(TaskDetailsSupplement taskDetailsSupplement, @Param("pageable") Pageable pageable);
+
+    /**
+     * 统计总行数
+     *
+     * @param taskDetailsSupplement 查询条件
+     * @return 总行数
+     */
+    int findTaskDetailsSupplementCount(TaskDetailsSupplement taskDetailsSupplement);
+
+    /**
+     * 新增数据
+     *
+     * @param taskDetailsSupplement 实例对象
+     * @return 影响行数
+     */
+    int insert(TaskDetailsSupplement taskDetailsSupplement);
+
+    /**
+     * 批量新增数据(MyBatis原生foreach方法)
+     *
+     * @param entities List<TaskDetailsSupplement> 实例对象列表
+     * @return 影响行数
+     */
+    int insertBatch(@Param("entities") List<TaskDetailsSupplement> entities);
+
+    /**
+     * 批量新增或按主键更新数据(MyBatis原生foreach方法)
+     *
+     * @param entities List<TaskDetailsSupplement> 实例对象列表
+     * @return 影响行数
+     * @throws org.springframework.jdbc.BadSqlGrammarException 入参是空List的时候会抛SQL语句错误的异常,请自行校验入参
+     */
+    int insertOrUpdateBatch(@Param("entities") List<TaskDetailsSupplement> entities);
+
+    /**
+     * 修改数据
+     *
+     * @param taskDetailsSupplement 实例对象
+     * @return 影响行数
+     */
+    int update(TaskDetailsSupplement taskDetailsSupplement);
+
+    /**
+     * 通过主键删除数据
+     *
+     * @param id 主键
+     * @return 影响行数
+     */
+    int deleteById(Integer id);
+
+}
+

+ 7 - 0
src/main/java/com/goafanti/common/mapper/DepartmentMapper.xml

@@ -603,6 +603,7 @@
         from department where super_id=  #{superId}
         order by dep_no desc limit 1
     </select>
+
     <update id="updateDepFinance">
         update department
         set finance_id= #{transferId}
@@ -636,4 +637,10 @@
         </set>
         where id=#{id}
     </update>
+
+    <select id="selectByApproval"  resultType="integer">
+    select count(*)
+    from department
+    where  approval=1 and approval_aid =#{aid}
+    </select>
 </mapper>

+ 15 - 11
src/main/java/com/goafanti/common/mapper/TOrderNewMapper.xml

@@ -1515,22 +1515,20 @@
       </if>
       <if test="approval ==1">
         and a.process_status =5
-        and a.approval in
         <if test="manageType ==0">
-          (1)
-        </if>
-        <if test="manageType ==1">
-          (4)
+            and a.approval =1
         </if>
+          <if test="manageType ==1">
+              and a.approval =4
+          </if>
       </if>
       <if test="approval ==2">
-        and a.approval in
         <if test="manageType ==0">
-          (2,3)
-        </if>
-        <if test="manageType ==1">
-          (5,6)
+            and a.approval in (2,3)
         </if>
+          <if test="manageType ==1">
+              and a.approval in (5,6)
+          </if>
       </if>
     </if>
     <if test="specially !=3 ">
@@ -2234,7 +2232,7 @@
         desc
     </select>
     <select id="selectOrderByuid" resultType="java.util.Map">
-        select order_no orderNo,contract_no contractNo
+        select order_no orderNo,contract_no contractNo,total_amount totalAmount
         from t_order_new  where delete_sign in (0,2) and  buyer_id = #{uid}
         order by create_time desc
     </select>
@@ -2681,6 +2679,12 @@
         where b.delete_sign in (0,2)
           and a.task_receiver = #{aid}
     </select>
+    <select id="selectByTid"  resultMap="TOrderNewMap">
+        select
+        <include refid="TOrderNewAllSql"/>
+        from t_order_new
+        where order_no in (select order_no from t_order_task where id = #{tid})
+    </select>
 
 </mapper>
 

+ 181 - 0
src/main/java/com/goafanti/common/mapper/TaskAnnualReportMapper.xml

@@ -0,0 +1,181 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
+<mapper namespace="com.goafanti.common.dao.TaskAnnualReportMapper">
+
+    <resultMap type="com.goafanti.common.model.TaskAnnualReport" id="TaskAnnualReportMap">
+        <result property="id" column="id" jdbcType="INTEGER"/>
+        <result property="uid" column="uid" jdbcType="VARCHAR"/>
+        <result property="tid" column="tid" jdbcType="INTEGER"/>
+        <result property="year" column="year" jdbcType="INTEGER"/>
+        <result property="salesAmount" column="sales_amount" jdbcType="VARCHAR"/>
+        <result property="researchAmount" column="research_amount" jdbcType="VARCHAR"/>
+        <result property="aid" column="aid" jdbcType="VARCHAR"/>
+        <result property="createTime" column="create_time" jdbcType="TIMESTAMP"/>
+    </resultMap>
+
+    <sql id="TaskAnnualReportAllSql">
+        id, uid, tid, year, sales_amount, research_amount, aid, create_time
+    </sql>
+
+    <!--查询单个-->
+    <select id="queryById" resultMap="TaskAnnualReportMap">
+        select
+        <include refid="TaskAnnualReportAllSql"/>
+        from task_annual_report
+        where id = #{id}
+    </select>
+
+    <!--查询指定行数据-->
+    <select id="findTaskAnnualReportList" resultMap="TaskAnnualReportMap">
+        select
+        <include refid="TaskAnnualReportAllSql"/>
+
+        from task_annual_report
+        <where>
+            <if test="id != null">
+                and id = #{id}
+            </if>
+            <if test="uid != null and uid != ''">
+                and uid = #{uid}
+            </if>
+            <if test="tid != null">
+                and tid = #{tid}
+            </if>
+            <if test="year != null">
+                and year = #{year}
+            </if>
+            <if test="salesAmount != null">
+                and sales_amount = #{salesAmount}
+            </if>
+            <if test="researchAmount != null">
+                and research_amount = #{researchAmount}
+            </if>
+            <if test="aid != null and aid != ''">
+                and aid = #{aid}
+            </if>
+            <if test="createTime != null">
+                and create_time = #{createTime}
+            </if>
+        </where>
+        <if test="page_sql != null">
+            ${page_sql}
+        </if>
+    </select>
+
+    <!--统计总行数-->
+    <select id="findTaskAnnualReportCount" resultType="java.lang.Integer">
+        select count(1)
+        from task_annual_report
+        <where>
+            <if test="id != null">
+                and id = #{id}
+            </if>
+            <if test="uid != null and uid != ''">
+                and uid = #{uid}
+            </if>
+            <if test="tid != null">
+                and tid = #{tid}
+            </if>
+            <if test="year != null">
+                and year = #{year}
+            </if>
+            <if test="salesAmount != null">
+                and sales_amount = #{salesAmount}
+            </if>
+            <if test="researchAmount != null">
+                and research_amount = #{researchAmount}
+            </if>
+            <if test="aid != null and aid != ''">
+                and aid = #{aid}
+            </if>
+            <if test="createTime != null">
+                and create_time = #{createTime}
+            </if>
+        </where>
+    </select>
+
+
+    <!--新增所有列-->
+    <insert id="insert" keyProperty="id" useGeneratedKeys="true">
+        insert into task_annual_report(uid, tid, year, sales_amount, research_amount, aid, create_time)
+        values (#{uid}, #{tid}, #{year}, #{salesAmount}, #{researchAmount}, #{aid}, #{createTime})
+    </insert>
+
+    <insert id="insertBatch">
+        insert into task_annual_report(uid, tid, year, sales_amount, research_amount, aid, create_time)
+        values
+        <foreach collection="entities" item="entity" separator=",">
+            (#{entity.uid}, #{entity.tid}, #{entity.year}, #{entity.salesAmount}, #{entity.researchAmount},
+            #{entity.aid}, #{entity.createTime})
+        </foreach>
+    </insert>
+
+    <insert id="insertOrUpdateBatch" keyProperty="id" useGeneratedKeys="true">
+        insert into task_annual_report(uid, tid, year, sales_amount, research_amount, aid, create_time)
+        values
+        <foreach collection="entities" item="entity" separator=",">
+            (#{entity.uid}, #{entity.tid}, #{entity.year}, #{entity.salesAmount}, #{entity.researchAmount},
+            #{entity.aid}, #{entity.createTime})
+        </foreach>
+        on duplicate key update
+        uid = values(uid),
+        tid = values(tid),
+        year = values(year),
+        sales_amount = values(sales_amount),
+        research_amount = values(research_amount),
+        aid = values(aid),
+        create_time = values(create_time)
+    </insert>
+
+    <!--通过主键修改数据-->
+    <update id="update">
+        update task_annual_report
+        <set>
+            <if test="uid != null and uid != ''">
+                uid = #{uid},
+            </if>
+            <if test="tid != null">
+                tid = #{tid},
+            </if>
+            <if test="year != null">
+                year = #{year},
+            </if>
+            <if test="salesAmount != null">
+                sales_amount = #{salesAmount},
+            </if>
+            <if test="researchAmount != null">
+                research_amount = #{researchAmount},
+            </if>
+            <if test="aid != null and aid != ''">
+                aid = #{aid},
+            </if>
+            <if test="createTime != null">
+                create_time = #{createTime},
+            </if>
+        </set>
+        where id = #{id}
+    </update>
+
+    <!--通过主键删除-->
+    <delete id="deleteById">
+        delete
+        from task_annual_report
+        where id = #{id}
+    </delete>
+
+    <select id="selectByTidAndYear" resultMap="TaskAnnualReportMap">
+        select
+        <include refid="TaskAnnualReportAllSql"/>
+        from task_annual_report
+        where tid = #{tid} and year = #{year}
+    </select>
+
+    <select id="selectThreeYear" resultMap="TaskAnnualReportMap">
+        select
+        <include refid="TaskAnnualReportAllSql"/>
+        from task_annual_report
+        where tid = #{tid} and year in (#{year}-1,#{year}-2)
+    </select>
+
+</mapper>
+

File diff suppressed because it is too large
+ 374 - 0
src/main/java/com/goafanti/common/mapper/TaskDetailsExtendMapper.xml


File diff suppressed because it is too large
+ 450 - 0
src/main/java/com/goafanti/common/mapper/TaskDetailsMapper.xml


+ 414 - 0
src/main/java/com/goafanti/common/mapper/TaskDetailsSupplementMapper.xml

@@ -0,0 +1,414 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
+<mapper namespace="com.goafanti.common.dao.TaskDetailsSupplementMapper">
+
+    <resultMap type="com.goafanti.common.model.TaskDetailsSupplement" id="TaskDetailsSupplementMap">
+        <result property="id" column="id" jdbcType="INTEGER"/>
+        <result property="ipDeclare" column="ip_declare" jdbcType="INTEGER"/>
+        <result property="ipAuthorize" column="ip_authorize" jdbcType="INTEGER"/>
+        <result property="ipHt" column="ip_ht" jdbcType="INTEGER"/>
+        <result property="ipHtI" column="ip_ht_i" jdbcType="INTEGER"/>
+        <result property="ipHtIi" column="ip_ht_ii" jdbcType="INTEGER"/>
+        <result property="outsourcingDev" column="outsourcing_dev" jdbcType="INTEGER"/>
+        <result property="contractRegistration" column="contract_registration" jdbcType="INTEGER"/>
+        <result property="publicReleaseStipulation" column="public_release_stipulation" jdbcType="INTEGER"/>
+        <result property="publicReleaseActual" column="public_release_actual" jdbcType="INTEGER"/>
+        <result property="trainingStipulation" column="training_stipulation" jdbcType="INTEGER"/>
+        <result property="trainingActual" column="training_actual" jdbcType="INTEGER"/>
+        <result property="trainingOther" column="training_other" jdbcType="VARCHAR"/>
+        <result property="specialInspect" column="special_inspect" jdbcType="INTEGER"/>
+        <result property="simulatedAudit" column="simulated_audit" jdbcType="INTEGER"/>
+        <result property="featuredWorkOther" column="featured_work_other" jdbcType="VARCHAR"/>
+        <result property="htScore" column="ht_score" jdbcType="INTEGER"/>
+        <result property="htBatch" column="ht_batch" jdbcType="INTEGER"/>
+        <result property="htFocus" column="ht_focus" jdbcType="INTEGER"/>
+        <result property="webSubmit" column="web_submit" jdbcType="INTEGER"/>
+        <result property="webSubmitOther" column="web_submit_other" jdbcType="VARCHAR"/>
+        <result property="paperSubmit" column="paper_submit" jdbcType="INTEGER"/>
+        <result property="paperSubmitOther" column="paper_submit_other" jdbcType="VARCHAR"/>
+        <result property="reviewProvince" column="review_province" jdbcType="INTEGER"/>
+        <result property="reviewCountry" column="review_country" jdbcType="INTEGER"/>
+        <result property="reviewProvinceNumber" column="review_province_number" jdbcType="INTEGER"/>
+        <result property="reviewCountryNumber" column="review_country_number" jdbcType="INTEGER"/>
+        <result property="remarks" column="remarks" jdbcType="VARCHAR"/>
+    </resultMap>
+
+    <sql id="TaskDetailsSupplementAllSql">
+        id, ip_declare, ip_authorize, ip_ht, ip_ht_i, ip_ht_ii, outsourcing_dev, contract_registration, public_release_stipulation, public_release_actual, training_stipulation, training_actual, training_other, special_inspect, simulated_audit, featured_work_other, ht_score, ht_batch, ht_focus, web_submit, web_submit_other, paper_submit, paper_submit_other, review_province, review_country, review_province_number, review_country_number, remarks
+    </sql>
+
+    <!--查询单个-->
+    <select id="selectById" resultMap="TaskDetailsSupplementMap">
+        select
+        <include refid="TaskDetailsSupplementAllSql"/>
+        from task_details_supplement
+        where id = #{id}
+    </select>
+
+    <!--新增所有列-->
+    <insert id="insert" keyProperty="id" useGeneratedKeys="true">
+        insert into task_details_supplement(id,ip_declare, ip_authorize, ip_ht, ip_ht_i, ip_ht_ii, outsourcing_dev,
+                                            contract_registration, public_release_stipulation, public_release_actual,
+                                            training_stipulation, training_actual, training_other, special_inspect,
+                                            simulated_audit, featured_work_other, ht_score, ht_batch, ht_focus,
+                                            web_submit, web_submit_other, paper_submit, paper_submit_other,
+                                            review_province, review_country, review_province_number,
+                                            review_country_number, remarks)
+        values (#{id},#{ipDeclare}, #{ipAuthorize}, #{ipHt}, #{ipHtI}, #{ipHtIi}, #{outsourcingDev}, #{contractRegistration},
+                #{publicReleaseStipulation}, #{publicReleaseActual}, #{trainingStipulation}, #{trainingActual},
+                #{trainingOther}, #{specialInspect}, #{simulatedAudit}, #{featuredWorkOther}, #{htScore}, #{htBatch},
+                #{htFocus}, #{webSubmit}, #{webSubmitOther}, #{paperSubmit}, #{paperSubmitOther}, #{reviewProvince},
+                #{reviewCountry}, #{reviewProvinceNumber}, #{reviewCountryNumber}, #{remarks})
+    </insert>
+
+    <insert id="insertBatch">
+        insert into task_details_supplement(ip_declare, ip_authorize, ip_ht, ip_ht_i, ip_ht_ii, outsourcing_dev,
+        contract_registration, public_release_stipulation, public_release_actual, training_stipulation, training_actual,
+        training_other, special_inspect, simulated_audit, featured_work_other, ht_score, ht_batch, ht_focus, web_submit,
+        web_submit_other, paper_submit, paper_submit_other, review_province, review_country, review_province_number,
+        review_country_number, remarks)
+        values
+        <foreach collection="entities" item="entity" separator=",">
+            (#{entity.ipDeclare}, #{entity.ipAuthorize}, #{entity.ipHt}, #{entity.ipHtI}, #{entity.ipHtIi},
+            #{entity.outsourcingDev}, #{entity.contractRegistration}, #{entity.publicReleaseStipulation},
+            #{entity.publicReleaseActual}, #{entity.trainingStipulation}, #{entity.trainingActual},
+            #{entity.trainingOther}, #{entity.specialInspect}, #{entity.simulatedAudit}, #{entity.featuredWorkOther},
+            #{entity.htScore}, #{entity.htBatch}, #{entity.htFocus}, #{entity.webSubmit}, #{entity.webSubmitOther},
+            #{entity.paperSubmit}, #{entity.paperSubmitOther}, #{entity.reviewProvince}, #{entity.reviewCountry},
+            #{entity.reviewProvinceNumber}, #{entity.reviewCountryNumber}, #{entity.remarks})
+        </foreach>
+    </insert>
+
+    <insert id="insertOrUpdateBatch" keyProperty="id" useGeneratedKeys="true">
+        insert into task_details_supplement(ip_declare, ip_authorize, ip_ht, ip_ht_i, ip_ht_ii, outsourcing_dev,
+        contract_registration, public_release_stipulation, public_release_actual, training_stipulation, training_actual,
+        training_other, special_inspect, simulated_audit, featured_work_other, ht_score, ht_batch, ht_focus, web_submit,
+        web_submit_other, paper_submit, paper_submit_other, review_province, review_country, review_province_number,
+        review_country_number, remarks)
+        values
+        <foreach collection="entities" item="entity" separator=",">
+            (#{entity.ipDeclare}, #{entity.ipAuthorize}, #{entity.ipHt}, #{entity.ipHtI}, #{entity.ipHtIi},
+            #{entity.outsourcingDev}, #{entity.contractRegistration}, #{entity.publicReleaseStipulation},
+            #{entity.publicReleaseActual}, #{entity.trainingStipulation}, #{entity.trainingActual},
+            #{entity.trainingOther}, #{entity.specialInspect}, #{entity.simulatedAudit}, #{entity.featuredWorkOther},
+            #{entity.htScore}, #{entity.htBatch}, #{entity.htFocus}, #{entity.webSubmit}, #{entity.webSubmitOther},
+            #{entity.paperSubmit}, #{entity.paperSubmitOther}, #{entity.reviewProvince}, #{entity.reviewCountry},
+            #{entity.reviewProvinceNumber}, #{entity.reviewCountryNumber}, #{entity.remarks})
+        </foreach>
+        on duplicate key update
+        ip_declare = values(ip_declare),
+        ip_authorize = values(ip_authorize),
+        ip_ht = values(ip_ht),
+        ip_ht_i = values(ip_ht_i),
+        ip_ht_ii = values(ip_ht_ii),
+        outsourcing_dev = values(outsourcing_dev),
+        contract_registration = values(contract_registration),
+        public_release_stipulation = values(public_release_stipulation),
+        public_release_actual = values(public_release_actual),
+        training_stipulation = values(training_stipulation),
+        training_actual = values(training_actual),
+        training_other = values(training_other),
+        special_inspect = values(special_inspect),
+        simulated_audit = values(simulated_audit),
+        featured_work_other = values(featured_work_other),
+        ht_score = values(ht_score),
+        ht_batch = values(ht_batch),
+        ht_focus = values(ht_focus),
+        web_submit = values(web_submit),
+        web_submit_other = values(web_submit_other),
+        paper_submit = values(paper_submit),
+        paper_submit_other = values(paper_submit_other),
+        review_province = values(review_province),
+        review_country = values(review_country),
+        review_province_number = values(review_province_number),
+        review_country_number = values(review_country_number),
+        remarks = values(remarks)
+    </insert>
+
+    <!--通过主键修改数据-->
+    <update id="update">
+        update task_details_supplement
+        <set>
+            <if test="ipDeclare != null">
+                ip_declare = #{ipDeclare},
+            </if>
+            <if test="ipAuthorize != null">
+                ip_authorize = #{ipAuthorize},
+            </if>
+            <if test="ipHt != null">
+                ip_ht = #{ipHt},
+            </if>
+            <if test="ipHtI != null">
+                ip_ht_i = #{ipHtI},
+            </if>
+            <if test="ipHtIi != null">
+                ip_ht_ii = #{ipHtIi},
+            </if>
+            <if test="outsourcingDev != null">
+                outsourcing_dev = #{outsourcingDev},
+            </if>
+            <if test="contractRegistration != null">
+                contract_registration = #{contractRegistration},
+            </if>
+            <if test="publicReleaseStipulation != null">
+                public_release_stipulation = #{publicReleaseStipulation},
+            </if>
+            <if test="publicReleaseActual != null">
+                public_release_actual = #{publicReleaseActual},
+            </if>
+            <if test="trainingStipulation != null">
+                training_stipulation = #{trainingStipulation},
+            </if>
+            <if test="trainingActual != null">
+                training_actual = #{trainingActual},
+            </if>
+            <if test="trainingOther != null and trainingOther != ''">
+                training_other = #{trainingOther},
+            </if>
+            <if test="specialInspect != null">
+                special_inspect = #{specialInspect},
+            </if>
+            <if test="simulatedAudit != null">
+                simulated_audit = #{simulatedAudit},
+            </if>
+            <if test="featuredWorkOther != null and featuredWorkOther != ''">
+                featured_work_other = #{featuredWorkOther},
+            </if>
+            <if test="htScore != null">
+                ht_score = #{htScore},
+            </if>
+            <if test="htBatch != null">
+                ht_batch = #{htBatch},
+            </if>
+            <if test="htFocus != null">
+                ht_focus = #{htFocus},
+            </if>
+            <if test="webSubmit != null">
+                web_submit = #{webSubmit},
+            </if>
+            <if test="webSubmitOther != null and webSubmitOther != ''">
+                web_submit_other = #{webSubmitOther},
+            </if>
+            <if test="paperSubmit != null">
+                paper_submit = #{paperSubmit},
+            </if>
+            <if test="paperSubmitOther != null and paperSubmitOther != ''">
+                paper_submit_other = #{paperSubmitOther},
+            </if>
+            <if test="reviewProvince != null">
+                review_province = #{reviewProvince},
+            </if>
+            <if test="reviewCountry != null">
+                review_country = #{reviewCountry},
+            </if>
+            <if test="reviewProvinceNumber != null">
+                review_province_number = #{reviewProvinceNumber},
+            </if>
+            <if test="reviewCountryNumber != null">
+                review_country_number = #{reviewCountryNumber},
+            </if>
+            <if test="remarks != null and remarks != ''">
+                remarks = #{remarks},
+            </if>
+        </set>
+        where id = #{id}
+    </update>
+
+    <!--查询指定行数据-->
+    <select id="findTaskDetailsSupplementList" resultMap="TaskDetailsSupplementMap">
+        select
+        <include refid="TaskDetailsSupplementAllSql"/>
+
+        from task_details_supplement
+        <where>
+            <if test="id != null">
+                and id = #{id}
+            </if>
+            <if test="ipDeclare != null">
+                and ip_declare = #{ipDeclare}
+            </if>
+            <if test="ipAuthorize != null">
+                and ip_authorize = #{ipAuthorize}
+            </if>
+            <if test="ipHt != null">
+                and ip_ht = #{ipHt}
+            </if>
+            <if test="ipHtI != null">
+                and ip_ht_i = #{ipHtI}
+            </if>
+            <if test="ipHtIi != null">
+                and ip_ht_ii = #{ipHtIi}
+            </if>
+            <if test="outsourcingDev != null">
+                and outsourcing_dev = #{outsourcingDev}
+            </if>
+            <if test="contractRegistration != null">
+                and contract_registration = #{contractRegistration}
+            </if>
+            <if test="publicReleaseStipulation != null">
+                and public_release_stipulation = #{publicReleaseStipulation}
+            </if>
+            <if test="publicReleaseActual != null">
+                and public_release_actual = #{publicReleaseActual}
+            </if>
+            <if test="trainingStipulation != null">
+                and training_stipulation = #{trainingStipulation}
+            </if>
+            <if test="trainingActual != null">
+                and training_actual = #{trainingActual}
+            </if>
+            <if test="trainingOther != null and trainingOther != ''">
+                and training_other = #{trainingOther}
+            </if>
+            <if test="specialInspect != null">
+                and special_inspect = #{specialInspect}
+            </if>
+            <if test="simulatedAudit != null">
+                and simulated_audit = #{simulatedAudit}
+            </if>
+            <if test="featuredWorkOther != null and featuredWorkOther != ''">
+                and featured_work_other = #{featuredWorkOther}
+            </if>
+            <if test="htScore != null">
+                and ht_score = #{htScore}
+            </if>
+            <if test="htBatch != null">
+                and ht_batch = #{htBatch}
+            </if>
+            <if test="htFocus != null">
+                and ht_focus = #{htFocus}
+            </if>
+            <if test="webSubmit != null">
+                and web_submit = #{webSubmit}
+            </if>
+            <if test="webSubmitOther != null and webSubmitOther != ''">
+                and web_submit_other = #{webSubmitOther}
+            </if>
+            <if test="paperSubmit != null">
+                and paper_submit = #{paperSubmit}
+            </if>
+            <if test="paperSubmitOther != null and paperSubmitOther != ''">
+                and paper_submit_other = #{paperSubmitOther}
+            </if>
+            <if test="reviewProvince != null">
+                and review_province = #{reviewProvince}
+            </if>
+            <if test="reviewCountry != null">
+                and review_country = #{reviewCountry}
+            </if>
+            <if test="reviewProvinceNumber != null">
+                and review_province_number = #{reviewProvinceNumber}
+            </if>
+            <if test="reviewCountryNumber != null">
+                and review_country_number = #{reviewCountryNumber}
+            </if>
+            <if test="remarks != null and remarks != ''">
+                and remarks = #{remarks}
+            </if>
+        </where>
+        <if test="page_sql != null">
+            ${page_sql}
+        </if>
+    </select>
+
+    <!--统计总行数-->
+    <select id="findTaskDetailsSupplementCount" resultType="java.lang.Integer">
+        select count(1)
+        from task_details_supplement
+        <where>
+            <if test="id != null">
+                and id = #{id}
+            </if>
+            <if test="ipDeclare != null">
+                and ip_declare = #{ipDeclare}
+            </if>
+            <if test="ipAuthorize != null">
+                and ip_authorize = #{ipAuthorize}
+            </if>
+            <if test="ipHt != null">
+                and ip_ht = #{ipHt}
+            </if>
+            <if test="ipHtI != null">
+                and ip_ht_i = #{ipHtI}
+            </if>
+            <if test="ipHtIi != null">
+                and ip_ht_ii = #{ipHtIi}
+            </if>
+            <if test="outsourcingDev != null">
+                and outsourcing_dev = #{outsourcingDev}
+            </if>
+            <if test="contractRegistration != null">
+                and contract_registration = #{contractRegistration}
+            </if>
+            <if test="publicReleaseStipulation != null">
+                and public_release_stipulation = #{publicReleaseStipulation}
+            </if>
+            <if test="publicReleaseActual != null">
+                and public_release_actual = #{publicReleaseActual}
+            </if>
+            <if test="trainingStipulation != null">
+                and training_stipulation = #{trainingStipulation}
+            </if>
+            <if test="trainingActual != null">
+                and training_actual = #{trainingActual}
+            </if>
+            <if test="trainingOther != null and trainingOther != ''">
+                and training_other = #{trainingOther}
+            </if>
+            <if test="specialInspect != null">
+                and special_inspect = #{specialInspect}
+            </if>
+            <if test="simulatedAudit != null">
+                and simulated_audit = #{simulatedAudit}
+            </if>
+            <if test="featuredWorkOther != null and featuredWorkOther != ''">
+                and featured_work_other = #{featuredWorkOther}
+            </if>
+            <if test="htScore != null">
+                and ht_score = #{htScore}
+            </if>
+            <if test="htBatch != null">
+                and ht_batch = #{htBatch}
+            </if>
+            <if test="htFocus != null">
+                and ht_focus = #{htFocus}
+            </if>
+            <if test="webSubmit != null">
+                and web_submit = #{webSubmit}
+            </if>
+            <if test="webSubmitOther != null and webSubmitOther != ''">
+                and web_submit_other = #{webSubmitOther}
+            </if>
+            <if test="paperSubmit != null">
+                and paper_submit = #{paperSubmit}
+            </if>
+            <if test="paperSubmitOther != null and paperSubmitOther != ''">
+                and paper_submit_other = #{paperSubmitOther}
+            </if>
+            <if test="reviewProvince != null">
+                and review_province = #{reviewProvince}
+            </if>
+            <if test="reviewCountry != null">
+                and review_country = #{reviewCountry}
+            </if>
+            <if test="reviewProvinceNumber != null">
+                and review_province_number = #{reviewProvinceNumber}
+            </if>
+            <if test="reviewCountryNumber != null">
+                and review_country_number = #{reviewCountryNumber}
+            </if>
+            <if test="remarks != null and remarks != ''">
+                and remarks = #{remarks}
+            </if>
+        </where>
+    </select>
+
+    <!--通过主键删除-->
+    <delete id="deleteById">
+        delete
+        from task_details_supplement
+        where id = #{id}
+    </delete>
+
+</mapper>
+

+ 116 - 0
src/main/java/com/goafanti/common/model/TaskAnnualReport.java

@@ -0,0 +1,116 @@
+package com.goafanti.common.model;
+
+import com.fasterxml.jackson.annotation.JsonFormat;
+
+import java.io.Serializable;
+import java.math.BigDecimal;
+import java.util.Date;
+
+
+/**
+ * 项目年报(TaskAnnualReport)实体类
+ *
+ * @author makejava
+ * @since 2024-12-26 13:45:50
+ */
+public class TaskAnnualReport implements Serializable {
+    private static final long serialVersionUID = 726853661805494653L;
+
+    private Integer id;
+    /**
+     * 用户ID
+     */
+    private String uid;
+    /**
+     * 项目编号
+     */
+    private Integer tid;
+    /**
+     * 年份
+     */
+    private Integer year;
+    /**
+     * 销售额
+     */
+    private BigDecimal salesAmount;
+    /**
+     * 研发费用
+     */
+    private BigDecimal researchAmount;
+    /**
+     * 录入人
+     */
+    private String aid;
+    /**
+     * 创建时间
+     */
+    private Date createTime;
+
+
+    public Integer getId() {
+        return id;
+    }
+
+    public void setId(Integer id) {
+        this.id = id;
+    }
+
+    public String getUid() {
+        return uid;
+    }
+
+    public void setUid(String uid) {
+        this.uid = uid;
+    }
+
+    public Integer getTid() {
+        return tid;
+    }
+
+    public void setTid(Integer tid) {
+        this.tid = tid;
+    }
+
+    public Integer getYear() {
+        return year;
+    }
+
+    public void setYear(Integer year) {
+        this.year = year;
+    }
+
+    public BigDecimal getSalesAmount() {
+        return salesAmount;
+    }
+
+    public void setSalesAmount(BigDecimal salesAmount) {
+        this.salesAmount = salesAmount;
+    }
+
+    public BigDecimal getResearchAmount() {
+        return researchAmount;
+    }
+
+    public void setResearchAmount(BigDecimal researchAmount) {
+        this.researchAmount = researchAmount;
+    }
+
+    public String getAid() {
+        return aid;
+    }
+
+    public void setAid(String aid) {
+        this.aid = aid;
+    }
+
+    @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss", timezone = "GMT+8")
+    public Date getCreateTime() {
+        return createTime;
+    }
+
+    public void setCreateTime(Date createTime) {
+        this.createTime = createTime;
+    }
+
+}
+

+ 391 - 0
src/main/java/com/goafanti/common/model/TaskDetails.java

@@ -0,0 +1,391 @@
+package com.goafanti.common.model;
+
+import com.fasterxml.jackson.annotation.JsonFormat;
+
+import java.io.Serializable;
+import java.math.BigDecimal;
+import java.util.Date;
+
+
+/**
+ * 项目申报详情(TaskDetails)实体类
+ *
+ * @author makejava
+ * @since 2024-12-27 13:49:02
+ */
+public class TaskDetails implements Serializable {
+    private static final long serialVersionUID = 979884539912577184L;
+
+    private Integer id;
+    /**
+     * 用户ID
+     */
+    private String uid;
+    /**
+     * 项目编号
+     */
+    private Integer tid;
+    /**
+     * 职工人数
+     */
+    private Integer workersNumber;
+    /**
+     * 科技人员数
+     */
+    private Integer technologyNumber;
+    /**
+     * 科技人员占比
+     */
+    private Double workersRate;
+    /**
+     * 研发立项数
+     */
+    private Integer prjectApprovalNumber;
+    /**
+     * 年度研发预算
+     */
+    private BigDecimal rdBudget;
+    /**
+     * 年度研发预算占比
+     */
+    private Double rdBudgetRate;
+    /**
+     * 三年研发预算占比
+     */
+    private Double threeYearsRdBudgetRate;
+    /**
+     * 年度销售额
+     */
+    private BigDecimal rdSalesAmount;
+    /**
+     * 数据周期 0=第一季度,1=上半年,2=前三季度,3=全年
+     */
+    private String dataCycle;
+    /**
+     * 实际销售额
+     */
+    private BigDecimal actualSalesAmount;
+    /**
+     * 实际立项RD数
+     */
+    private Integer actualRdNumber;
+    /**
+     * 实际归集研发费用
+     */
+    private BigDecimal actualRdAmount;
+    /**
+     * 年度研发预算占比
+     */
+    private Double actualRdRate;
+    /**
+     * 三年研发预算占比
+     */
+    private Double threeYearsActualRdRate;
+    /**
+     * 火炬统计 0=其他,1=待完成,2=已完成,3=合同无此项
+     */
+    private Integer torchStatus;
+    /**
+     * 高企年报火炬统计 0=其他,1=待完成,2=已完成,3=合同无此项
+     */
+    private Integer chStatus;
+    /**
+     * 统计年报 0=其他,1=待完成,2=已完成,3=合同无此项
+     */
+    private Integer statisticsStatus;
+    /**
+     * 汇算清缴 0=其他,1=待完成,2=已完成,3=合同无此项
+     */
+    private Integer finalSettlementStatus;
+    /**
+     * 火炬统计其他说明
+     */
+    private String torchOther;
+    /**
+     * 高企年报火炬统计其他说明
+     */
+    private String chOther;
+    /**
+     * 统计年报其他说明
+     */
+    private String statisticsOther;
+    /**
+     * 汇算清缴其他说明
+     */
+    private String finalSettlementOther;
+    /**
+     * 报表加扣数
+     */
+    private Integer reportFormsRdNumber;
+    /**
+     * 知识产权加扣费用
+     */
+    private BigDecimal intellectualPropertyAmount;
+    /**
+     * 报表扣研发金额
+     */
+    private BigDecimal reportRdAmount;
+    /**
+     * 更新时间
+     */
+    private Date updateTime;
+    /**
+     * 下载/打印时间
+     */
+    private Date downloadTime;
+    /**
+     * 创建时间
+     */
+    private Date createTime;
+
+
+    public Integer getId() {
+        return id;
+    }
+
+    public void setId(Integer id) {
+        this.id = id;
+    }
+
+    public String getUid() {
+        return uid;
+    }
+
+    public void setUid(String uid) {
+        this.uid = uid;
+    }
+
+    public Integer getTid() {
+        return tid;
+    }
+
+    public void setTid(Integer tid) {
+        this.tid = tid;
+    }
+
+    public Integer getWorkersNumber() {
+        return workersNumber;
+    }
+
+    public void setWorkersNumber(Integer workersNumber) {
+        this.workersNumber = workersNumber;
+    }
+
+    public Integer getTechnologyNumber() {
+        return technologyNumber;
+    }
+
+    public void setTechnologyNumber(Integer technologyNumber) {
+        this.technologyNumber = technologyNumber;
+    }
+
+    public Double getWorkersRate() {
+        return workersRate;
+    }
+
+    public void setWorkersRate(Double workersRate) {
+        this.workersRate = workersRate;
+    }
+
+    public Integer getPrjectApprovalNumber() {
+        return prjectApprovalNumber;
+    }
+
+    public void setPrjectApprovalNumber(Integer prjectApprovalNumber) {
+        this.prjectApprovalNumber = prjectApprovalNumber;
+    }
+
+    public BigDecimal getRdBudget() {
+        return rdBudget;
+    }
+
+    public void setRdBudget(BigDecimal rdBudget) {
+        this.rdBudget = rdBudget;
+    }
+
+    public Double getRdBudgetRate() {
+        return rdBudgetRate;
+    }
+
+    public void setRdBudgetRate(Double rdBudgetRate) {
+        this.rdBudgetRate = rdBudgetRate;
+    }
+
+    public Double getThreeYearsRdBudgetRate() {
+        return threeYearsRdBudgetRate;
+    }
+
+    public void setThreeYearsRdBudgetRate(Double threeYearsRdBudgetRate) {
+        this.threeYearsRdBudgetRate = threeYearsRdBudgetRate;
+    }
+
+    public BigDecimal getRdSalesAmount() {
+        return rdSalesAmount;
+    }
+
+    public void setRdSalesAmount(BigDecimal rdSalesAmount) {
+        this.rdSalesAmount = rdSalesAmount;
+    }
+
+    public String getDataCycle() {
+        return dataCycle;
+    }
+
+    public void setDataCycle(String dataCycle) {
+        this.dataCycle = dataCycle;
+    }
+
+    public BigDecimal getActualSalesAmount() {
+        return actualSalesAmount;
+    }
+
+    public void setActualSalesAmount(BigDecimal actualSalesAmount) {
+        this.actualSalesAmount = actualSalesAmount;
+    }
+
+    public Integer getActualRdNumber() {
+        return actualRdNumber;
+    }
+
+    public void setActualRdNumber(Integer actualRdNumber) {
+        this.actualRdNumber = actualRdNumber;
+    }
+
+    public BigDecimal getActualRdAmount() {
+        return actualRdAmount;
+    }
+
+    public void setActualRdAmount(BigDecimal actualRdAmount) {
+        this.actualRdAmount = actualRdAmount;
+    }
+
+    public Double getActualRdRate() {
+        return actualRdRate;
+    }
+
+    public void setActualRdRate(Double actualRdRate) {
+        this.actualRdRate = actualRdRate;
+    }
+
+    public Double getThreeYearsActualRdRate() {
+        return threeYearsActualRdRate;
+    }
+
+    public void setThreeYearsActualRdRate(Double threeYearsActualRdRate) {
+        this.threeYearsActualRdRate = threeYearsActualRdRate;
+    }
+
+    public Integer getTorchStatus() {
+        return torchStatus;
+    }
+
+    public void setTorchStatus(Integer torchStatus) {
+        this.torchStatus = torchStatus;
+    }
+
+    public Integer getChStatus() {
+        return chStatus;
+    }
+
+    public void setChStatus(Integer chStatus) {
+        this.chStatus = chStatus;
+    }
+
+    public Integer getStatisticsStatus() {
+        return statisticsStatus;
+    }
+
+    public void setStatisticsStatus(Integer statisticsStatus) {
+        this.statisticsStatus = statisticsStatus;
+    }
+
+    public Integer getFinalSettlementStatus() {
+        return finalSettlementStatus;
+    }
+
+    public void setFinalSettlementStatus(Integer finalSettlementStatus) {
+        this.finalSettlementStatus = finalSettlementStatus;
+    }
+
+    public String getTorchOther() {
+        return torchOther;
+    }
+
+    public void setTorchOther(String torchOther) {
+        this.torchOther = torchOther;
+    }
+
+    public String getChOther() {
+        return chOther;
+    }
+
+    public void setChOther(String chOther) {
+        this.chOther = chOther;
+    }
+
+    public String getStatisticsOther() {
+        return statisticsOther;
+    }
+
+    public void setStatisticsOther(String statisticsOther) {
+        this.statisticsOther = statisticsOther;
+    }
+
+    public String getFinalSettlementOther() {
+        return finalSettlementOther;
+    }
+
+    public void setFinalSettlementOther(String finalSettlementOther) {
+        this.finalSettlementOther = finalSettlementOther;
+    }
+
+    public Integer getReportFormsRdNumber() {
+        return reportFormsRdNumber;
+    }
+
+    public void setReportFormsRdNumber(Integer reportFormsRdNumber) {
+        this.reportFormsRdNumber = reportFormsRdNumber;
+    }
+
+    public BigDecimal getIntellectualPropertyAmount() {
+        return intellectualPropertyAmount;
+    }
+
+    public void setIntellectualPropertyAmount(BigDecimal intellectualPropertyAmount) {
+        this.intellectualPropertyAmount = intellectualPropertyAmount;
+    }
+
+    public BigDecimal getReportRdAmount() {
+        return reportRdAmount;
+    }
+
+    public void setReportRdAmount(BigDecimal reportRdAmount) {
+        this.reportRdAmount = reportRdAmount;
+    }
+    @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss", timezone = "GMT+8")
+    public Date getUpdateTime() {
+        return updateTime;
+    }
+
+    public void setUpdateTime(Date updateTime) {
+        this.updateTime = updateTime;
+    }
+    @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss", timezone = "GMT+8")
+    public Date getDownloadTime() {
+        return downloadTime;
+    }
+
+    public void setDownloadTime(Date downloadTime) {
+        this.downloadTime = downloadTime;
+    }
+    @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss", timezone = "GMT+8")
+    public Date getCreateTime() {
+        return createTime;
+    }
+
+    public void setCreateTime(Date createTime) {
+        this.createTime = createTime;
+    }
+
+}
+

+ 304 - 0
src/main/java/com/goafanti/common/model/TaskDetailsExtend.java

@@ -0,0 +1,304 @@
+package com.goafanti.common.model;
+
+import java.io.Serializable;
+import java.math.BigDecimal;
+
+
+/**
+ * 项目申报详情扩展表(TaskDetailsExtend)实体类
+ *
+ * @author makejava
+ * @since 2024-12-27 09:57:05
+ */
+public class TaskDetailsExtend implements Serializable {
+    private static final long serialVersionUID = 222104184372571998L;
+
+    private Integer id;
+    /**
+     * 研发准备金备案 0=其他,1=待完成,2=已完成,3=合同无此项
+     */
+    private Integer rdReservesStatus;
+    /**
+     * 研发准备金备其他说明
+     */
+    private String rdReservesOther;
+    /**
+     * 研发奖补申请 0=其他,1=待完成,2=已完成,3=合同无此项
+     */
+    private Integer rdAwardCompensationStatus;
+    /**
+     * 研发准备金备其他说明
+     */
+    private String rdAwardCompensationOther;
+    /**
+     * 研发奖补-申请金额
+     */
+    private BigDecimal rdApplicationFee;
+    /**
+     * 研发奖补-公示金额
+     */
+    private BigDecimal rdAnnouncementAmount;
+    /**
+     * 研发奖补-公示金额-其他
+     */
+    private String rdAnnouncementOther;
+    /**
+     * 加扣备查交付 0=其他,1=待完成,2=已完成,3=合同无此项
+     */
+    private Integer adDeliverStatus;
+    /**
+     * 加扣备查交付其他说明
+     */
+    private String adDeliverOther;
+    /**
+     * 加扣备查交付归档 0=否,1=是
+     */
+    private Integer adDeliverFinish;
+    /**
+     * 高新备查交付 0=其他,1=待完成,2=已完成,3=合同无此项
+     */
+    private Integer htDeliverStatus;
+    /**
+     * 高新加扣备查交付其他说明
+     */
+    private String htDeliverOther;
+    /**
+     * 高新加扣备查交付归档 0=否,1=是
+     */
+    private Integer htDeliverFinish;
+    /**
+     * 召开上年度总结与本年工作计划会议 0=其他,1=待完成,2=已完成,3=合同无此项
+     */
+    private Integer closeMeetingStatus;
+    /**
+     * 召开上年度总结与本年工作计划会议其他说明
+     */
+    private String closeMeeting_Other;
+    /**
+     * 阶段性汇报 1=月度,2=季度
+     */
+    private Integer phasedType;
+    /**
+     * 阶段性汇报 1,2,3=选取1月到3月
+     */
+    private String phasedContent;
+    /**
+     * 立项资料编写数
+     */
+    private Integer projectApprovalWriteNumber;
+    /**
+     * 立项资料编写完成率
+     */
+    private Double projectApprovalWriteRate;
+    /**
+     * 加扣预申报七月 0=其他,1=待完成,2=已完成,3=合同无此项
+     */
+    private Integer adPrepareJulyStatus;
+    /**
+     * 加扣预申报七月其他说明
+     */
+    private String adPrepareJulyOther;
+    /**
+     * 加扣预申报七月 0=其他,1=待完成,2=已完成,3=合同无此项
+     */
+    private Integer adPrepareOctoberStatus;
+    /**
+     * 加扣预申报十月其他说明
+     */
+    private String adPrepareOctoberOther;
+
+
+    public Integer getId() {
+        return id;
+    }
+
+    public void setId(Integer id) {
+        this.id = id;
+    }
+
+    public Integer getRdReservesStatus() {
+        return rdReservesStatus;
+    }
+
+    public void setRdReservesStatus(Integer rdReservesStatus) {
+        this.rdReservesStatus = rdReservesStatus;
+    }
+
+    public String getRdReservesOther() {
+        return rdReservesOther;
+    }
+
+    public void setRdReservesOther(String rdReservesOther) {
+        this.rdReservesOther = rdReservesOther;
+    }
+
+    public Integer getRdAwardCompensationStatus() {
+        return rdAwardCompensationStatus;
+    }
+
+    public void setRdAwardCompensationStatus(Integer rdAwardCompensationStatus) {
+        this.rdAwardCompensationStatus = rdAwardCompensationStatus;
+    }
+
+    public String getRdAwardCompensationOther() {
+        return rdAwardCompensationOther;
+    }
+
+    public void setRdAwardCompensationOther(String rdAwardCompensationOther) {
+        this.rdAwardCompensationOther = rdAwardCompensationOther;
+    }
+
+    public BigDecimal getRdApplicationFee() {
+        return rdApplicationFee;
+    }
+
+    public void setRdApplicationFee(BigDecimal rdApplicationFee) {
+        this.rdApplicationFee = rdApplicationFee;
+    }
+
+    public BigDecimal getRdAnnouncementAmount() {
+        return rdAnnouncementAmount;
+    }
+
+    public void setRdAnnouncementAmount(BigDecimal rdAnnouncementAmount) {
+        this.rdAnnouncementAmount = rdAnnouncementAmount;
+    }
+
+    public String getRdAnnouncementOther() {
+        return rdAnnouncementOther;
+    }
+
+    public void setRdAnnouncementOther(String rdAnnouncementOther) {
+        this.rdAnnouncementOther = rdAnnouncementOther;
+    }
+
+    public Integer getAdDeliverStatus() {
+        return adDeliverStatus;
+    }
+
+    public void setAdDeliverStatus(Integer adDeliverStatus) {
+        this.adDeliverStatus = adDeliverStatus;
+    }
+
+    public String getAdDeliverOther() {
+        return adDeliverOther;
+    }
+
+    public void setAdDeliverOther(String adDeliverOther) {
+        this.adDeliverOther = adDeliverOther;
+    }
+
+    public Integer getAdDeliverFinish() {
+        return adDeliverFinish;
+    }
+
+    public void setAdDeliverFinish(Integer adDeliverFinish) {
+        this.adDeliverFinish = adDeliverFinish;
+    }
+
+    public Integer getHtDeliverStatus() {
+        return htDeliverStatus;
+    }
+
+    public void setHtDeliverStatus(Integer htDeliverStatus) {
+        this.htDeliverStatus = htDeliverStatus;
+    }
+
+    public String getHtDeliverOther() {
+        return htDeliverOther;
+    }
+
+    public void setHtDeliverOther(String htDeliverOther) {
+        this.htDeliverOther = htDeliverOther;
+    }
+
+    public Integer getHtDeliverFinish() {
+        return htDeliverFinish;
+    }
+
+    public void setHtDeliverFinish(Integer htDeliverFinish) {
+        this.htDeliverFinish = htDeliverFinish;
+    }
+
+    public Integer getCloseMeetingStatus() {
+        return closeMeetingStatus;
+    }
+
+    public void setCloseMeetingStatus(Integer closeMeetingStatus) {
+        this.closeMeetingStatus = closeMeetingStatus;
+    }
+
+    public String getCloseMeeting_Other() {
+        return closeMeeting_Other;
+    }
+
+    public void setCloseMeeting_Other(String closeMeeting_Other) {
+        this.closeMeeting_Other = closeMeeting_Other;
+    }
+
+    public Integer getPhasedType() {
+        return phasedType;
+    }
+
+    public void setPhasedType(Integer phasedType) {
+        this.phasedType = phasedType;
+    }
+
+    public String getPhasedContent() {
+        return phasedContent;
+    }
+
+    public void setPhasedContent(String phasedContent) {
+        this.phasedContent = phasedContent;
+    }
+
+    public Integer getProjectApprovalWriteNumber() {
+        return projectApprovalWriteNumber;
+    }
+
+    public void setProjectApprovalWriteNumber(Integer projectApprovalWriteNumber) {
+        this.projectApprovalWriteNumber = projectApprovalWriteNumber;
+    }
+
+    public Double getProjectApprovalWriteRate() {
+        return projectApprovalWriteRate;
+    }
+
+    public void setProjectApprovalWriteRate(Double projectApprovalWriteRate) {
+        this.projectApprovalWriteRate = projectApprovalWriteRate;
+    }
+
+    public Integer getAdPrepareJulyStatus() {
+        return adPrepareJulyStatus;
+    }
+
+    public void setAdPrepareJulyStatus(Integer adPrepareJulyStatus) {
+        this.adPrepareJulyStatus = adPrepareJulyStatus;
+    }
+
+    public String getAdPrepareJulyOther() {
+        return adPrepareJulyOther;
+    }
+
+    public void setAdPrepareJulyOther(String adPrepareJulyOther) {
+        this.adPrepareJulyOther = adPrepareJulyOther;
+    }
+
+    public Integer getAdPrepareOctoberStatus() {
+        return adPrepareOctoberStatus;
+    }
+
+    public void setAdPrepareOctoberStatus(Integer adPrepareOctoberStatus) {
+        this.adPrepareOctoberStatus = adPrepareOctoberStatus;
+    }
+
+    public String getAdPrepareOctoberOther() {
+        return adPrepareOctoberOther;
+    }
+
+    public void setAdPrepareOctoberOther(String adPrepareOctoberOther) {
+        this.adPrepareOctoberOther = adPrepareOctoberOther;
+    }
+
+}
+

+ 351 - 0
src/main/java/com/goafanti/common/model/TaskDetailsSupplement.java

@@ -0,0 +1,351 @@
+package com.goafanti.common.model;
+
+import java.io.Serializable;
+
+
+/**
+ * 项目申报详情补充表(TaskDetailsSupplement)实体类
+ *
+ * @author makejava
+ * @since 2024-12-27 10:11:14
+ */
+public class TaskDetailsSupplement implements Serializable {
+    private static final long serialVersionUID = 628044648930394619L;
+
+    private Integer id;
+    /**
+     * 知识产权申报数
+     */
+    private Integer ipDeclare;
+    /**
+     * 知识产权授权数
+     */
+    private Integer ipAuthorize;
+    /**
+     * 知识产权高新数
+     */
+    private Integer ipHt;
+    /**
+     * 知识产权高新I数
+     */
+    private Integer ipHtI;
+    /**
+     * 知识产权高新II数
+     */
+    private Integer ipHtIi;
+    /**
+     * 委外开发项目数
+     */
+    private Integer outsourcingDev;
+    /**
+     * 技术开发合同登记数
+     */
+    private Integer contractRegistration;
+    /**
+     * 公出约定次数
+     */
+    private Integer publicReleaseStipulation;
+    /**
+     * 公出实际次数
+     */
+    private Integer publicReleaseActual;
+    /**
+     * 培训约定次数
+     */
+    private Integer trainingStipulation;
+    /**
+     * 培训实际次数
+     */
+    private Integer trainingActual;
+    /**
+     * 培训其他说明
+     */
+    private String trainingOther;
+    /**
+     * 专项检查数
+     */
+    private Integer specialInspect;
+    /**
+     * 模拟稽查数
+     */
+    private Integer simulatedAudit;
+    /**
+     * 特色工作-其他
+     */
+    private String featuredWorkOther;
+    /**
+     * 高新认定评价估分
+     */
+    private Integer htScore;
+    /**
+     * 高新认定评申报批次
+     */
+    private Integer htBatch;
+    /**
+     * 高新认定重点关注 0=否,1=是
+     */
+    private Integer htFocus;
+    /**
+     * 网上系统提交 0=其他,1=待完成,2=已完成,3=合同无此项
+     */
+    private Integer webSubmit;
+    /**
+     * 网上系统提交其他说明
+     */
+    private String webSubmitOther;
+    /**
+     * 纸质材料提交 0=其他,1=待完成,2=已完成,3=合同无此项
+     */
+    private Integer paperSubmit;
+    /**
+     * 纸质材料提交其他说明
+     */
+    private String paperSubmitOther;
+    /**
+     * 评审省级 0=淘汰,1=公示
+     */
+    private Integer reviewProvince;
+    /**
+     * 评审国家级 0=淘汰,1=公示
+     */
+    private Integer reviewCountry;
+    /**
+     * 评审省级序号
+     */
+    private Integer reviewProvinceNumber;
+    /**
+     * 评审国家级高企编号
+     */
+    private Integer reviewCountryNumber;
+    /**
+     * 备注说明
+     */
+    private String remarks;
+
+
+    public Integer getId() {
+        return id;
+    }
+
+    public void setId(Integer id) {
+        this.id = id;
+    }
+
+    public Integer getIpDeclare() {
+        return ipDeclare;
+    }
+
+    public void setIpDeclare(Integer ipDeclare) {
+        this.ipDeclare = ipDeclare;
+    }
+
+    public Integer getIpAuthorize() {
+        return ipAuthorize;
+    }
+
+    public void setIpAuthorize(Integer ipAuthorize) {
+        this.ipAuthorize = ipAuthorize;
+    }
+
+    public Integer getIpHt() {
+        return ipHt;
+    }
+
+    public void setIpHt(Integer ipHt) {
+        this.ipHt = ipHt;
+    }
+
+    public Integer getIpHtI() {
+        return ipHtI;
+    }
+
+    public void setIpHtI(Integer ipHtI) {
+        this.ipHtI = ipHtI;
+    }
+
+    public Integer getIpHtIi() {
+        return ipHtIi;
+    }
+
+    public void setIpHtIi(Integer ipHtIi) {
+        this.ipHtIi = ipHtIi;
+    }
+
+    public Integer getOutsourcingDev() {
+        return outsourcingDev;
+    }
+
+    public void setOutsourcingDev(Integer outsourcingDev) {
+        this.outsourcingDev = outsourcingDev;
+    }
+
+    public Integer getContractRegistration() {
+        return contractRegistration;
+    }
+
+    public void setContractRegistration(Integer contractRegistration) {
+        this.contractRegistration = contractRegistration;
+    }
+
+    public Integer getPublicReleaseStipulation() {
+        return publicReleaseStipulation;
+    }
+
+    public void setPublicReleaseStipulation(Integer publicReleaseStipulation) {
+        this.publicReleaseStipulation = publicReleaseStipulation;
+    }
+
+    public Integer getPublicReleaseActual() {
+        return publicReleaseActual;
+    }
+
+    public void setPublicReleaseActual(Integer publicReleaseActual) {
+        this.publicReleaseActual = publicReleaseActual;
+    }
+
+    public Integer getTrainingStipulation() {
+        return trainingStipulation;
+    }
+
+    public void setTrainingStipulation(Integer trainingStipulation) {
+        this.trainingStipulation = trainingStipulation;
+    }
+
+    public Integer getTrainingActual() {
+        return trainingActual;
+    }
+
+    public void setTrainingActual(Integer trainingActual) {
+        this.trainingActual = trainingActual;
+    }
+
+    public String getTrainingOther() {
+        return trainingOther;
+    }
+
+    public void setTrainingOther(String trainingOther) {
+        this.trainingOther = trainingOther;
+    }
+
+    public Integer getSpecialInspect() {
+        return specialInspect;
+    }
+
+    public void setSpecialInspect(Integer specialInspect) {
+        this.specialInspect = specialInspect;
+    }
+
+    public Integer getSimulatedAudit() {
+        return simulatedAudit;
+    }
+
+    public void setSimulatedAudit(Integer simulatedAudit) {
+        this.simulatedAudit = simulatedAudit;
+    }
+
+    public String getFeaturedWorkOther() {
+        return featuredWorkOther;
+    }
+
+    public void setFeaturedWorkOther(String featuredWorkOther) {
+        this.featuredWorkOther = featuredWorkOther;
+    }
+
+    public Integer getHtScore() {
+        return htScore;
+    }
+
+    public void setHtScore(Integer htScore) {
+        this.htScore = htScore;
+    }
+
+    public Integer getHtBatch() {
+        return htBatch;
+    }
+
+    public void setHtBatch(Integer htBatch) {
+        this.htBatch = htBatch;
+    }
+
+    public Integer getHtFocus() {
+        return htFocus;
+    }
+
+    public void setHtFocus(Integer htFocus) {
+        this.htFocus = htFocus;
+    }
+
+    public Integer getWebSubmit() {
+        return webSubmit;
+    }
+
+    public void setWebSubmit(Integer webSubmit) {
+        this.webSubmit = webSubmit;
+    }
+
+    public String getWebSubmitOther() {
+        return webSubmitOther;
+    }
+
+    public void setWebSubmitOther(String webSubmitOther) {
+        this.webSubmitOther = webSubmitOther;
+    }
+
+    public Integer getPaperSubmit() {
+        return paperSubmit;
+    }
+
+    public void setPaperSubmit(Integer paperSubmit) {
+        this.paperSubmit = paperSubmit;
+    }
+
+    public String getPaperSubmitOther() {
+        return paperSubmitOther;
+    }
+
+    public void setPaperSubmitOther(String paperSubmitOther) {
+        this.paperSubmitOther = paperSubmitOther;
+    }
+
+    public Integer getReviewProvince() {
+        return reviewProvince;
+    }
+
+    public void setReviewProvince(Integer reviewProvince) {
+        this.reviewProvince = reviewProvince;
+    }
+
+    public Integer getReviewCountry() {
+        return reviewCountry;
+    }
+
+    public void setReviewCountry(Integer reviewCountry) {
+        this.reviewCountry = reviewCountry;
+    }
+
+    public Integer getReviewProvinceNumber() {
+        return reviewProvinceNumber;
+    }
+
+    public void setReviewProvinceNumber(Integer reviewProvinceNumber) {
+        this.reviewProvinceNumber = reviewProvinceNumber;
+    }
+
+    public Integer getReviewCountryNumber() {
+        return reviewCountryNumber;
+    }
+
+    public void setReviewCountryNumber(Integer reviewCountryNumber) {
+        this.reviewCountryNumber = reviewCountryNumber;
+    }
+
+    public String getRemarks() {
+        return remarks;
+    }
+
+    public void setRemarks(String remarks) {
+        this.remarks = remarks;
+    }
+
+}
+

+ 12 - 9
src/main/java/com/goafanti/customer/service/impl/UserClueServiceImpl.java

@@ -277,17 +277,20 @@ public class UserClueServiceImpl extends BaseMybatisDao<UserMapper> implements U
         if (!contactMobile.equals("-")){
             String[] split = contactMobile.split(";");
             for (String s : split) {
-                String mobileReg="[1-9]\\d{10}";
-                String mobileReg2="^0\\d{2,3}-?\\d{7,8}$";
-                Pattern  pattern =Pattern.compile(mobileReg);
-                Matcher matcher = pattern.matcher(s);
-                if (!matcher.matches()){
-                    Pattern  pattern2 =Pattern.compile(mobileReg2);
-                    Matcher matcher2 = pattern2.matcher(s);
-                    if (!matcher2.matches()){
-                        throw new BusinessException("手机号格式不正确");
+                if (StringUtils.isNotBlank(s)){
+                    String mobileReg="[1-9]\\d{10}";
+                    String mobileReg2="^0\\d{2,3}-?\\d{7,8}$";
+                    Pattern  pattern =Pattern.compile(mobileReg);
+                    Matcher matcher = pattern.matcher(s);
+                    if (!matcher.matches()){
+                        Pattern  pattern2 =Pattern.compile(mobileReg2);
+                        Matcher matcher2 = pattern2.matcher(s);
+                        if (!matcher2.matches()){
+                            throw new BusinessException("手机号格式不正确");
+                        }
                     }
                 }
+
             }
         }
 

+ 9 - 0
src/main/java/com/goafanti/order/bo/InputOrderNewListBo.java

@@ -29,6 +29,7 @@ public class InputOrderNewListBo {
      *  最大公出状态 0=未设置  1=已设置
      */
     private Integer maxStatus;
+    private Integer manageType;
 
     /**
      *  最大公出审核 0=未审核  1=已审核
@@ -38,6 +39,14 @@ public class InputOrderNewListBo {
     private  Integer pageNo;
     private Integer pageSize;
 
+    public Integer getManageType() {
+        return manageType;
+    }
+
+    public void setManageType(Integer manageType) {
+        this.manageType = manageType;
+    }
+
     public Integer getScoreStatus() {
         return scoreStatus;
     }

+ 4 - 11
src/main/java/com/goafanti/order/service/impl/OrderNewServiceImpl.java

@@ -1272,11 +1272,7 @@ public class OrderNewServiceImpl extends BaseMybatisDao<TOrderNewMapper> impleme
 			}
 		}else if (in.getSpecially()==3){
 			params.put("aid", TokenManager.getAdminId());
-			if (TokenManager.hasRole(AFTConstants.APPROVAL_DECISION_ASSISTANT)||TokenManager.hasRole(AFTConstants.APPROVAL_DECISION)){
-				params.put("manageType",1);
-			}else  {
-				params.put("manageType",0);
-			}
+
 		}else if (in.getSpecially()==12){
 			PublicConfig config=publicConfigMapper.queryById(1);
 			String aid=TokenManager.getAdminId();
@@ -1290,12 +1286,6 @@ public class OrderNewServiceImpl extends BaseMybatisDao<TOrderNewMapper> impleme
 			}
 			params.put("configType", configType);
 			params.put("aid", aid);
-			if (TokenManager.hasRole(AFTConstants.APPROVAL_DECISION_ASSISTANT)||TokenManager.hasRole(AFTConstants.SUPERADMIN)){
-				params.put("manageType",1);
-			}else  {
-				params.put("manageType",0);
-			}
-
 		}
 		params.put("specially", in.getSpecially());
 		if (StringUtils.isNotBlank(in.getName())) {
@@ -1363,6 +1353,9 @@ public class OrderNewServiceImpl extends BaseMybatisDao<TOrderNewMapper> impleme
 		}
 		params.put("outsource", in.getOutsource());
 		params.put("scoreStatus", in.getScoreStatus());
+		if (in.getManageType()!=null){
+			params.put("manageType", in.getManageType());
+		}
 		return null;
 	}
 

+ 46 - 7
src/main/java/com/goafanti/order/service/impl/OrderPlusServiceImpl.java

@@ -1,5 +1,6 @@
 package com.goafanti.order.service.impl;
 
+import com.alibaba.fastjson.JSON;
 import com.goafanti.common.dao.TOrderNewMapper;
 import com.goafanti.common.dao.TOrderTaskMapper;
 import com.goafanti.common.dao.TTaskMemberMapper;
@@ -11,8 +12,11 @@ import com.goafanti.order.service.OrderPlusService;
 import org.springframework.stereotype.Service;
 
 import javax.annotation.Resource;
+import java.math.BigDecimal;
+import java.util.ArrayList;
 import java.util.List;
 import java.util.Map;
+import java.util.stream.Collectors;
 
 @Service
 public class OrderPlusServiceImpl extends BaseMybatisDao<TOrderNewMapper> implements OrderPlusService {
@@ -35,16 +39,51 @@ public class OrderPlusServiceImpl extends BaseMybatisDao<TOrderNewMapper> implem
     public Object techUserDetails(String uid) {
         List<Map<String, Object>> maps = tOrderNewMapper.selectOrderByuid(uid);
         for (Map<String, Object> map : maps) {
-            String contractNo = (String) map.getOrDefault("contractNo",String.class);
-            System.out.println("contractNo = " + contractNo);
-            String orderNo = (String) map.getOrDefault("orderNo", String.class);
+            String contractNo = (String) map.get("contractNo");
+            BigDecimal totalAmount = (BigDecimal) map.get("totalAmount");
+            String orderNo = (String) map.get("orderNo");
             List<TOrderTaskBo> tOrderTaskBos = tOrderTaskMapper.selectOrderTaskAll(orderNo, null);
-            for (TOrderTaskBo e : tOrderTaskBos) {
-                String commodityName = e.getCommodityName();
-
-
+            String serviceLife = null;
+            List<String> list=new ArrayList<>();
+            int  yearSum=0;
+            String isHY="";
+            List<String> taskList=new ArrayList<>();
+            String lvl=null;
+            if (totalAmount.compareTo(new BigDecimal("3"))<0){
+                lvl="A";
+            }else if (totalAmount.compareTo(new BigDecimal("8"))<1){
+                lvl="AA";
+            }else if (totalAmount.compareTo(new BigDecimal("8"))>0){
+                lvl="AAA";
             }
 
+            List<TOrderTaskBo> collect = tOrderTaskBos.stream().filter(e -> e.getSplitStatus() == 1).collect(Collectors.toList());
+            for (TOrderTaskBo e : collect) {
+                if (e.getYearSum()>yearSum){
+                    yearSum=e.getYearSum();
+                    serviceLife=e.getServiceLife();
+                }
+                if(e.getcSort()!=null&&e.getcSort()==6){
+                    isHY="是";
+                }
+            }
+            if (serviceLife!=null){
+                list = JSON.parseArray(serviceLife, String.class);
+            }
+            List<TOrderTaskBo> collect2 = tOrderTaskBos.stream().filter(e -> e.getSplitStatus() == 2).collect(Collectors.toList());
+            for (TOrderTaskBo e : collect2) {
+                for (String s : list) {
+                    if (s.equals(e.getServiceYear())){
+                        s=s+" (已派)";
+                    }
+                    taskList.add(s);
+                }
+            }
+            System.out.println("contractNo = " + contractNo);
+            System.out.println(taskList);
+            System.out.println("会员="+isHY);
+            System.out.println("会员等级="+lvl);
+            System.out.println("金额="+totalAmount);
         }
         return null;
     }

+ 610 - 0
src/main/java/com/goafanti/techproject/bo/TaskDetailsBo.java

@@ -0,0 +1,610 @@
+package com.goafanti.techproject.bo;
+
+import com.goafanti.common.model.TaskDetails;
+
+import java.math.BigDecimal;
+
+public class TaskDetailsBo extends TaskDetails {
+
+    /**
+     * 研发准备金备案 0=其他,1=待完成,2=已完成,3=合同无此项
+     */
+    private Integer rdReservesStatus;
+    /**
+     * 研发准备金备其他说明
+     */
+    private String rdReservesOther;
+    /**
+     * 研发奖补申请 0=其他,1=待完成,2=已完成,3=合同无此项
+     */
+    private Integer rdAwardCompensationStatus;
+    /**
+     * 研发准备金备其他说明
+     */
+    private String rdAwardCompensationOther;
+    /**
+     * 研发奖补-申请金额
+     */
+    private BigDecimal rdApplicationFee;
+    /**
+     * 研发奖补-公示金额
+     */
+    private BigDecimal rdAnnouncementAmount;
+    /**
+     * 研发奖补-公示金额-其他
+     */
+    private String rdAnnouncementOther;
+    /**
+     * 加扣备查交付 0=其他,1=待完成,2=已完成,3=合同无此项
+     */
+    private Integer adDeliverStatus;
+    /**
+     * 加扣备查交付其他说明
+     */
+    private String adDeliverOther;
+    /**
+     * 加扣备查交付归档 0=否,1=是
+     */
+    private Integer adDeliverFinish;
+    /**
+     * 高新备查交付 0=其他,1=待完成,2=已完成,3=合同无此项
+     */
+    private Integer htDeliverStatus;
+    /**
+     * 高新加扣备查交付其他说明
+     */
+    private String htDeliverOther;
+    /**
+     * 高新加扣备查交付归档 0=否,1=是
+     */
+    private Integer htDeliverFinish;
+    /**
+     * 召开上年度总结与本年工作计划会议 0=其他,1=待完成,2=已完成,3=合同无此项
+     */
+    private Integer closeMeetingStatus;
+    /**
+     * 召开上年度总结与本年工作计划会议其他说明
+     */
+    private String closeMeeting_Other;
+    /**
+     * 阶段性汇报 1=月度,2=季度
+     */
+    private Integer phasedType;
+    /**
+     * 阶段性汇报 1,2,3=选取1月到3月
+     */
+    private String phasedContent;
+    /**
+     * 立项资料编写数
+     */
+    private Integer projectApprovalWriteNumber;
+    /**
+     * 立项资料编写完成率
+     */
+    private Double projectApprovalWriteRate;
+    /**
+     * 加扣预申报七月 0=其他,1=待完成,2=已完成,3=合同无此项
+     */
+    private Integer adPrepareJulyStatus;
+    /**
+     * 加扣预申报七月其他说明
+     */
+    private String adPrepareJulyOther;
+    /**
+     * 加扣预申报七月 0=其他,1=待完成,2=已完成,3=合同无此项
+     */
+    private Integer adPrepareOctoberStatus;
+    /**
+     * 加扣预申报十月其他说明
+     */
+    private String adPrepareOctoberOther;
+    /**
+     * 知识产权申报数
+     */
+    private Integer ipDeclare;
+    /**
+     * 知识产权授权数
+     */
+    private Integer ipAuthorize;
+    /**
+     * 知识产权高新数
+     */
+    private Integer ipHt;
+    /**
+     * 知识产权高新I数
+     */
+    private Integer ipHtI;
+    /**
+     * 知识产权高新II数
+     */
+    private Integer ipHtIi;
+    /**
+     * 委外开发项目数
+     */
+    private Integer outsourcingDev;
+    /**
+     * 技术开发合同登记数
+     */
+    private Integer contractRegistration;
+    /**
+     * 公出约定次数
+     */
+    private Integer publicReleaseStipulation;
+    /**
+     * 公出实际次数
+     */
+    private Integer publicReleaseActual;
+    /**
+     * 培训约定次数
+     */
+    private Integer trainingStipulation;
+    /**
+     * 培训实际次数
+     */
+    private Integer trainingActual;
+    /**
+     * 培训其他说明
+     */
+    private String trainingOther;
+    /**
+     * 专项检查数
+     */
+    private Integer specialInspect;
+    /**
+     * 模拟稽查数
+     */
+    private Integer simulatedAudit;
+    /**
+     * 特色工作-其他
+     */
+    private String featuredWorkOther;
+    /**
+     * 高新认定评价估分
+     */
+    private Integer htScore;
+    /**
+     * 高新认定评申报批次
+     */
+    private Integer htBatch;
+    /**
+     * 高新认定重点关注 0=否,1=是
+     */
+    private Integer htFocus;
+    /**
+     * 网上系统提交 0=其他,1=待完成,2=已完成,3=合同无此项
+     */
+    private Integer webSubmit;
+    /**
+     * 网上系统提交其他说明
+     */
+    private String webSubmitOther;
+    /**
+     * 纸质材料提交 0=其他,1=待完成,2=已完成,3=合同无此项
+     */
+    private Integer paperSubmit;
+    /**
+     * 纸质材料提交其他说明
+     */
+    private String paperSubmitOther;
+    /**
+     * 评审省级 0=淘汰,1=公示
+     */
+    private Integer reviewProvince;
+    /**
+     * 评审国家级 0=淘汰,1=公示
+     */
+    private Integer reviewCountry;
+    /**
+     * 评审省级序号
+     */
+    private Integer reviewProvinceNumber;
+    /**
+     * 评审国家级高企编号
+     */
+    private Integer reviewCountryNumber;
+    /**
+     * 备注说明
+     */
+    private String remarks;
+
+
+    public Integer getRdReservesStatus() {
+        return rdReservesStatus;
+    }
+
+    public void setRdReservesStatus(Integer rdReservesStatus) {
+        this.rdReservesStatus = rdReservesStatus;
+    }
+
+    public String getRdReservesOther() {
+        return rdReservesOther;
+    }
+
+    public void setRdReservesOther(String rdReservesOther) {
+        this.rdReservesOther = rdReservesOther;
+    }
+
+    public Integer getRdAwardCompensationStatus() {
+        return rdAwardCompensationStatus;
+    }
+
+    public void setRdAwardCompensationStatus(Integer rdAwardCompensationStatus) {
+        this.rdAwardCompensationStatus = rdAwardCompensationStatus;
+    }
+
+    public String getRdAwardCompensationOther() {
+        return rdAwardCompensationOther;
+    }
+
+    public void setRdAwardCompensationOther(String rdAwardCompensationOther) {
+        this.rdAwardCompensationOther = rdAwardCompensationOther;
+    }
+
+    public BigDecimal getRdApplicationFee() {
+        return rdApplicationFee;
+    }
+
+    public void setRdApplicationFee(BigDecimal rdApplicationFee) {
+        this.rdApplicationFee = rdApplicationFee;
+    }
+
+    public BigDecimal getRdAnnouncementAmount() {
+        return rdAnnouncementAmount;
+    }
+
+    public void setRdAnnouncementAmount(BigDecimal rdAnnouncementAmount) {
+        this.rdAnnouncementAmount = rdAnnouncementAmount;
+    }
+
+    public Integer getAdDeliverStatus() {
+        return adDeliverStatus;
+    }
+
+    public void setAdDeliverStatus(Integer adDeliverStatus) {
+        this.adDeliverStatus = adDeliverStatus;
+    }
+
+    public String getAdDeliverOther() {
+        return adDeliverOther;
+    }
+
+    public void setAdDeliverOther(String adDeliverOther) {
+        this.adDeliverOther = adDeliverOther;
+    }
+
+    public Integer getAdDeliverFinish() {
+        return adDeliverFinish;
+    }
+
+    public void setAdDeliverFinish(Integer adDeliverFinish) {
+        this.adDeliverFinish = adDeliverFinish;
+    }
+
+    public Integer getHtDeliverStatus() {
+        return htDeliverStatus;
+    }
+
+    public void setHtDeliverStatus(Integer htDeliverStatus) {
+        this.htDeliverStatus = htDeliverStatus;
+    }
+
+    public String getHtDeliverOther() {
+        return htDeliverOther;
+    }
+
+    public void setHtDeliverOther(String htDeliverOther) {
+        this.htDeliverOther = htDeliverOther;
+    }
+
+    public Integer getHtDeliverFinish() {
+        return htDeliverFinish;
+    }
+
+    public void setHtDeliverFinish(Integer htDeliverFinish) {
+        this.htDeliverFinish = htDeliverFinish;
+    }
+
+    public Integer getCloseMeetingStatus() {
+        return closeMeetingStatus;
+    }
+
+    public void setCloseMeetingStatus(Integer closeMeetingStatus) {
+        this.closeMeetingStatus = closeMeetingStatus;
+    }
+
+    public String getCloseMeeting_Other() {
+        return closeMeeting_Other;
+    }
+
+    public void setCloseMeeting_Other(String closeMeeting_Other) {
+        this.closeMeeting_Other = closeMeeting_Other;
+    }
+
+    public Integer getPhasedType() {
+        return phasedType;
+    }
+
+    public void setPhasedType(Integer phasedType) {
+        this.phasedType = phasedType;
+    }
+
+    public String getPhasedContent() {
+        return phasedContent;
+    }
+
+    public void setPhasedContent(String phasedContent) {
+        this.phasedContent = phasedContent;
+    }
+
+    public Integer getAdPrepareJulyStatus() {
+        return adPrepareJulyStatus;
+    }
+
+    public void setAdPrepareJulyStatus(Integer adPrepareJulyStatus) {
+        this.adPrepareJulyStatus = adPrepareJulyStatus;
+    }
+
+    public String getAdPrepareJulyOther() {
+        return adPrepareJulyOther;
+    }
+
+    public void setAdPrepareJulyOther(String adPrepareJulyOther) {
+        this.adPrepareJulyOther = adPrepareJulyOther;
+    }
+
+    public Integer getAdPrepareOctoberStatus() {
+        return adPrepareOctoberStatus;
+    }
+
+    public void setAdPrepareOctoberStatus(Integer adPrepareOctoberStatus) {
+        this.adPrepareOctoberStatus = adPrepareOctoberStatus;
+    }
+
+    public String getAdPrepareOctoberOther() {
+        return adPrepareOctoberOther;
+    }
+
+    public void setAdPrepareOctoberOther(String adPrepareOctoberOther) {
+        this.adPrepareOctoberOther = adPrepareOctoberOther;
+    }
+
+    public Integer getIpDeclare() {
+        return ipDeclare;
+    }
+
+    public void setIpDeclare(Integer ipDeclare) {
+        this.ipDeclare = ipDeclare;
+    }
+
+    public Integer getIpAuthorize() {
+        return ipAuthorize;
+    }
+
+    public void setIpAuthorize(Integer ipAuthorize) {
+        this.ipAuthorize = ipAuthorize;
+    }
+
+    public Integer getIpHt() {
+        return ipHt;
+    }
+
+    public void setIpHt(Integer ipHt) {
+        this.ipHt = ipHt;
+    }
+
+    public Integer getIpHtI() {
+        return ipHtI;
+    }
+
+    public void setIpHtI(Integer ipHtI) {
+        this.ipHtI = ipHtI;
+    }
+
+    public Integer getIpHtIi() {
+        return ipHtIi;
+    }
+
+    public void setIpHtIi(Integer ipHtIi) {
+        this.ipHtIi = ipHtIi;
+    }
+
+    public Integer getOutsourcingDev() {
+        return outsourcingDev;
+    }
+
+    public void setOutsourcingDev(Integer outsourcingDev) {
+        this.outsourcingDev = outsourcingDev;
+    }
+
+    public Integer getContractRegistration() {
+        return contractRegistration;
+    }
+
+    public void setContractRegistration(Integer contractRegistration) {
+        this.contractRegistration = contractRegistration;
+    }
+
+    public Integer getPublicReleaseStipulation() {
+        return publicReleaseStipulation;
+    }
+
+    public void setPublicReleaseStipulation(Integer publicReleaseStipulation) {
+        this.publicReleaseStipulation = publicReleaseStipulation;
+    }
+
+    public Integer getPublicReleaseActual() {
+        return publicReleaseActual;
+    }
+
+    public void setPublicReleaseActual(Integer publicReleaseActual) {
+        this.publicReleaseActual = publicReleaseActual;
+    }
+
+    public Integer getTrainingStipulation() {
+        return trainingStipulation;
+    }
+
+    public void setTrainingStipulation(Integer trainingStipulation) {
+        this.trainingStipulation = trainingStipulation;
+    }
+
+    public Integer getTrainingActual() {
+        return trainingActual;
+    }
+
+    public void setTrainingActual(Integer trainingActual) {
+        this.trainingActual = trainingActual;
+    }
+
+    public String getTrainingOther() {
+        return trainingOther;
+    }
+
+    public void setTrainingOther(String trainingOther) {
+        this.trainingOther = trainingOther;
+    }
+
+    public Integer getSpecialInspect() {
+        return specialInspect;
+    }
+
+    public void setSpecialInspect(Integer specialInspect) {
+        this.specialInspect = specialInspect;
+    }
+
+    public Integer getSimulatedAudit() {
+        return simulatedAudit;
+    }
+
+    public void setSimulatedAudit(Integer simulatedAudit) {
+        this.simulatedAudit = simulatedAudit;
+    }
+
+    public Integer getHtScore() {
+        return htScore;
+    }
+
+    public void setHtScore(Integer htScore) {
+        this.htScore = htScore;
+    }
+
+    public Integer getHtBatch() {
+        return htBatch;
+    }
+
+    public void setHtBatch(Integer htBatch) {
+        this.htBatch = htBatch;
+    }
+
+    public Integer getHtFocus() {
+        return htFocus;
+    }
+
+    public void setHtFocus(Integer htFocus) {
+        this.htFocus = htFocus;
+    }
+
+    public Integer getWebSubmit() {
+        return webSubmit;
+    }
+
+    public void setWebSubmit(Integer webSubmit) {
+        this.webSubmit = webSubmit;
+    }
+
+    public String getWebSubmitOther() {
+        return webSubmitOther;
+    }
+
+    public void setWebSubmitOther(String webSubmitOther) {
+        this.webSubmitOther = webSubmitOther;
+    }
+
+    public Integer getPaperSubmit() {
+        return paperSubmit;
+    }
+
+    public void setPaperSubmit(Integer paperSubmit) {
+        this.paperSubmit = paperSubmit;
+    }
+
+    public String getPaperSubmitOther() {
+        return paperSubmitOther;
+    }
+
+    public void setPaperSubmitOther(String paperSubmitOther) {
+        this.paperSubmitOther = paperSubmitOther;
+    }
+
+    public Integer getReviewProvince() {
+        return reviewProvince;
+    }
+
+    public void setReviewProvince(Integer reviewProvince) {
+        this.reviewProvince = reviewProvince;
+    }
+
+    public Integer getReviewCountry() {
+        return reviewCountry;
+    }
+
+    public void setReviewCountry(Integer reviewCountry) {
+        this.reviewCountry = reviewCountry;
+    }
+
+    public Integer getReviewProvinceNumber() {
+        return reviewProvinceNumber;
+    }
+
+    public void setReviewProvinceNumber(Integer reviewProvinceNumber) {
+        this.reviewProvinceNumber = reviewProvinceNumber;
+    }
+
+    public Integer getReviewCountryNumber() {
+        return reviewCountryNumber;
+    }
+
+    public void setReviewCountryNumber(Integer reviewCountryNumber) {
+        this.reviewCountryNumber = reviewCountryNumber;
+    }
+
+    public String getRdAnnouncementOther() {
+        return rdAnnouncementOther;
+    }
+
+    public void setRdAnnouncementOther(String rdAnnouncementOther) {
+        this.rdAnnouncementOther = rdAnnouncementOther;
+    }
+
+    public Integer getProjectApprovalWriteNumber() {
+        return projectApprovalWriteNumber;
+    }
+
+    public void setProjectApprovalWriteNumber(Integer projectApprovalWriteNumber) {
+        this.projectApprovalWriteNumber = projectApprovalWriteNumber;
+    }
+
+    public Double getProjectApprovalWriteRate() {
+        return projectApprovalWriteRate;
+    }
+
+    public void setProjectApprovalWriteRate(Double projectApprovalWriteRate) {
+        this.projectApprovalWriteRate = projectApprovalWriteRate;
+    }
+
+    public String getFeaturedWorkOther() {
+        return featuredWorkOther;
+    }
+
+    public void setFeaturedWorkOther(String featuredWorkOther) {
+        this.featuredWorkOther = featuredWorkOther;
+    }
+
+    public String getRemarks() {
+        return remarks;
+    }
+
+    public void setRemarks(String remarks) {
+        this.remarks = remarks;
+    }
+}

+ 15 - 0
src/main/java/com/goafanti/techproject/controller/AdminTaskDetailsController.java

@@ -0,0 +1,15 @@
+package com.goafanti.techproject.controller;
+
+import com.goafanti.common.controller.CertifyApiController;
+import org.springframework.web.bind.annotation.RequestMapping;
+import org.springframework.web.bind.annotation.RestController;
+
+@RestController
+@RequestMapping(value = "/api/admin/taskDetails")
+public class AdminTaskDetailsController extends CertifyApiController {
+
+
+
+
+
+}

+ 88 - 0
src/main/java/com/goafanti/techproject/controller/TaskAnnualReportController.java

@@ -0,0 +1,88 @@
+package com.goafanti.techproject.controller;
+
+import com.goafanti.common.bo.Result;
+import com.goafanti.common.controller.BaseController;
+import com.goafanti.common.model.TaskAnnualReport;
+import com.goafanti.techproject.service.TaskAnnualReportService;
+import org.springframework.web.bind.annotation.GetMapping;
+import org.springframework.web.bind.annotation.PostMapping;
+import org.springframework.web.bind.annotation.RequestMapping;
+import org.springframework.web.bind.annotation.RestController;
+
+import javax.annotation.Resource;
+
+/**
+ * 项目年报(TaskAnnualReport)表控制层
+ *
+ * @author makejava
+ * @since 2024-12-26 10:55:04
+ */
+@RestController
+@RequestMapping("/api/admin/taskAnnualReport")
+public class TaskAnnualReportController extends BaseController {
+    /**
+     * 服务对象
+     */
+    @Resource
+    private TaskAnnualReportService taskAnnualReportService;
+
+
+    /**
+     * 新增数据
+     *
+     * @param taskAnnualReport 实体
+     * @return 新增结果
+     */
+    @PostMapping("/add")
+    public Result add(TaskAnnualReport taskAnnualReport) {
+        return new Result<>().data(this.taskAnnualReportService.insert(taskAnnualReport));
+    }
+
+
+    /**
+     * 通过主键查询单条数据
+     *
+     * @param id 主键
+     * @return 单条数据
+     */
+    @GetMapping("/get")
+    public Result<TaskAnnualReport> queryById(Integer id) {
+        return new Result<>().data(this.taskAnnualReportService.queryById(id));
+    }
+
+
+    /**
+     * 编辑数据
+     *
+     * @param taskAnnualReport 实体
+     * @return 编辑结果
+     */
+    @PostMapping("/update")
+    public Result edit(TaskAnnualReport taskAnnualReport) {
+        return new Result<>().data(this.taskAnnualReportService.update(taskAnnualReport));
+    }
+
+    /**
+     * 删除数据
+     *
+     * @param id 主键
+     * @return 删除是否成功
+     */
+    @GetMapping("/delete")
+    public Result deleteById(Integer id) {
+        return new Result<>().data(this.taskAnnualReportService.deleteById(id));
+    }
+
+    /**
+     * 列表查询
+     *
+     * @param in 参数
+     * @return
+     */
+    @GetMapping("/list")
+    public Result<TaskAnnualReport> list(TaskAnnualReport in, Integer pageNo, Integer pageSize) {
+        return new Result<>().data(this.taskAnnualReportService.list(in, pageNo, pageSize));
+    }
+
+}
+

+ 91 - 0
src/main/java/com/goafanti/techproject/controller/TaskDetailsController.java

@@ -0,0 +1,91 @@
+package com.goafanti.techproject.controller;
+
+import com.goafanti.common.bo.Result;
+import com.goafanti.common.controller.BaseController;
+import com.goafanti.common.model.TaskDetails;
+import com.goafanti.common.model.TaskDetailsExtend;
+import com.goafanti.common.model.TaskDetailsSupplement;
+import com.goafanti.techproject.bo.TaskDetailsBo;
+import com.goafanti.techproject.service.TaskDetailsService;
+import org.springframework.web.bind.annotation.GetMapping;
+import org.springframework.web.bind.annotation.PostMapping;
+import org.springframework.web.bind.annotation.RequestMapping;
+import org.springframework.web.bind.annotation.RestController;
+
+import javax.annotation.Resource;
+
+/**
+ * 项目申报详情(TaskDetails)表控制层
+ *
+ * @author makejava
+ * @since 2024-12-26 17:11:50
+ */
+@RestController
+@RequestMapping("/api/admin/taskDetails")
+public class TaskDetailsController extends BaseController {
+    /**
+     * 服务对象
+     */
+    @Resource
+    private TaskDetailsService taskDetailsService;
+
+
+    /**
+     * 新增项目进度数据
+     *
+     * @param taskDetails 实体
+     * @return 新增结果
+     */
+    @PostMapping("/add")
+    public Result<TaskDetailsBo> add(TaskDetails taskDetails, TaskDetailsExtend taskDetailsExtend, TaskDetailsSupplement taskDetailsSupp) {
+        return new Result<>().data(this.taskDetailsService.insert(taskDetails,taskDetailsExtend,taskDetailsSupp));
+    }
+
+
+    /**
+     * 查询项目进度单条数据
+     *
+     * @param id 主键
+     * @return 单条数据
+     */
+    @GetMapping("/get")
+    public Result<TaskDetails> queryById(Integer id) {
+        return new Result<>().data(this.taskDetailsService.queryById(id));
+    }
+
+
+    /**
+     * 编辑项目进度数据
+     *
+     * @param taskDetails 实体
+     * @return 编辑结果
+     */
+    @PostMapping("/update")
+    public Result edit(TaskDetails taskDetails, TaskDetailsExtend taskDetailsExtend, TaskDetailsSupplement taskDetailsSupp) {
+        return new Result<>().data(this.taskDetailsService.update(taskDetails, taskDetailsExtend, taskDetailsSupp));
+    }
+
+    /**
+     * 删除数据
+     *
+     * @param id 主键
+     * @return 删除是否成功
+     */
+    @GetMapping("/delete")
+    public Result deleteById(Integer id) {
+        return new Result<>().data(this.taskDetailsService.deleteById(id));
+    }
+
+    /**
+     * 列表查询
+     *
+     * @param in 参数
+     * @return
+     */
+    @GetMapping("/list")
+    public Result<TaskDetails> list(TaskDetails in, Integer pageNo, Integer pageSize) {
+        return new Result<>().data(this.taskDetailsService.list(in, pageNo, pageSize));
+    }
+
+}
+

+ 54 - 0
src/main/java/com/goafanti/techproject/service/TaskAnnualReportService.java

@@ -0,0 +1,54 @@
+package com.goafanti.techproject.service;
+
+import com.goafanti.common.model.TaskAnnualReport;
+
+/**
+ * 项目年报(TaskAnnualReport)表服务接口
+ *
+ * @author makejava
+ * @since 2024-12-26 10:55:04
+ */
+public interface TaskAnnualReportService {
+
+    /**
+     * 通过ID查询单条数据
+     *
+     * @param id 主键
+     * @return 实例对象
+     */
+    TaskAnnualReport queryById(Integer id);
+
+
+    /**
+     * 新增数据
+     *
+     * @param taskAnnualReport 实例对象
+     * @return 实例对象
+     */
+    TaskAnnualReport insert(TaskAnnualReport taskAnnualReport);
+
+    /**
+     * 修改数据
+     *
+     * @param taskAnnualReport 实例对象
+     * @return 实例对象
+     */
+    TaskAnnualReport update(TaskAnnualReport taskAnnualReport);
+
+    /**
+     * 通过主键删除数据
+     *
+     * @param id 主键
+     * @return 是否成功
+     */
+    boolean deleteById(Integer id);
+
+    /**
+     * 列表数据
+     *
+     * @param in 参数
+     * @return 是否成功
+     */
+    Object list(TaskAnnualReport in, Integer pageNo, Integer pageSize);
+
+}

+ 57 - 0
src/main/java/com/goafanti/techproject/service/TaskDetailsService.java

@@ -0,0 +1,57 @@
+package com.goafanti.techproject.service;
+
+import com.goafanti.common.model.TaskDetails;
+import com.goafanti.common.model.TaskDetailsExtend;
+import com.goafanti.common.model.TaskDetailsSupplement;
+import com.goafanti.techproject.bo.TaskDetailsBo;
+
+/**
+ * 项目申报详情(TaskDetails)表服务接口
+ *
+ * @author makejava
+ * @since 2024-12-26 17:11:50
+ */
+public interface TaskDetailsService {
+
+    /**
+     * 通过ID查询单条数据
+     *
+     * @param id 主键
+     * @return 实例对象
+     */
+    TaskDetailsBo queryById(Integer id);
+
+
+    /**
+     * 新增数据
+     *
+     * @param taskDetails 实例对象
+     * @return 实例对象
+     */
+    TaskDetailsBo insert(TaskDetails taskDetails, TaskDetailsExtend taskDetailsExtend, TaskDetailsSupplement taskDetailsSupp);
+
+    /**
+     * 修改数据
+     *
+     * @param taskDetails 实例对象
+     * @return 实例对象
+     */
+    TaskDetailsBo update(TaskDetails taskDetails, TaskDetailsExtend taskDetailsExtend, TaskDetailsSupplement taskDetailsSupp);
+
+    /**
+     * 通过主键删除数据
+     *
+     * @param id 主键
+     * @return 是否成功
+     */
+    boolean deleteById(Integer id);
+
+    /**
+     * 列表数据
+     *
+     * @param in 参数
+     * @return 是否成功
+     */
+    Object list(TaskDetails in, Integer pageNo, Integer pageSize);
+
+}

+ 96 - 0
src/main/java/com/goafanti/techproject/service/impl/TaskAnnualReportServiceImpl.java

@@ -0,0 +1,96 @@
+package com.goafanti.techproject.service.impl;
+
+import com.goafanti.common.dao.TOrderNewMapper;
+import com.goafanti.common.dao.TaskAnnualReportMapper;
+import com.goafanti.common.model.TOrderNew;
+import com.goafanti.common.model.TaskAnnualReport;
+import com.goafanti.core.mybatis.BaseMybatisDao;
+import com.goafanti.core.mybatis.page.Pagination;
+import com.goafanti.core.shiro.token.TokenManager;
+import com.goafanti.techproject.service.TaskAnnualReportService;
+import org.springframework.stereotype.Service;
+
+import javax.annotation.Resource;
+import java.util.Date;
+import java.util.HashMap;
+import java.util.Map;
+
+/**
+ * 项目年报(TaskAnnualReport)表服务实现类
+ *
+ * @author makejava
+ * @since 2024-12-26 10:55:04
+ */
+@Service("taskAnnualReportService")
+public class TaskAnnualReportServiceImpl extends BaseMybatisDao<TaskAnnualReportMapper> implements TaskAnnualReportService {
+    @Resource
+    private TaskAnnualReportMapper taskAnnualReportMapper;
+    @Resource
+    private TOrderNewMapper tOrderNewMapper;
+
+
+    @Override
+    public Pagination<TaskAnnualReport> list(TaskAnnualReport taskAnnualReport, Integer pageNo, Integer pageSize) {
+        Map<String, Object> params = new HashMap<>();
+        params.put("in", taskAnnualReport);
+        return (Pagination<TaskAnnualReport>) findPage("findTaskAnnualReportList",
+                "findTaskAnnualReportCount", params, pageNo, pageSize);
+    }
+
+    /**
+     * 通过ID查询单条数据
+     *
+     * @param id 主键
+     * @return 实例对象
+     */
+    @Override
+    public TaskAnnualReport queryById(Integer id) {
+        return this.taskAnnualReportMapper.queryById(id);
+    }
+
+
+    /**
+     * 新增数据
+     *
+     * @param taskAnnualReport 实例对象
+     * @return 实例对象
+     */
+    @Override
+    public TaskAnnualReport insert(TaskAnnualReport taskAnnualReport) {
+        TOrderNew tOrderNew =tOrderNewMapper.selectByTid(taskAnnualReport.getTid());
+        taskAnnualReport.setAid(TokenManager.getAdminId());
+        taskAnnualReport.setUid(tOrderNew.getBuyerId());
+        taskAnnualReport.setCreateTime(new Date());
+        TaskAnnualReport use = taskAnnualReportMapper.selectByTidAndYear(taskAnnualReport.getTid(), taskAnnualReport.getYear());
+        if (use !=null){
+            taskAnnualReport.setId(use.getId());
+            return update(taskAnnualReport);
+        }else {
+            this.taskAnnualReportMapper.insert(taskAnnualReport);
+            return taskAnnualReport;
+        }
+    }
+
+    /**
+     * 修改数据
+     *
+     * @param taskAnnualReport 实例对象
+     * @return 实例对象
+     */
+    @Override
+    public TaskAnnualReport update(TaskAnnualReport taskAnnualReport) {
+        this.taskAnnualReportMapper.update(taskAnnualReport);
+        return this.queryById(taskAnnualReport.getId());
+    }
+
+    /**
+     * 通过主键删除数据
+     *
+     * @param id 主键
+     * @return 是否成功
+     */
+    @Override
+    public boolean deleteById(Integer id) {
+        return this.taskAnnualReportMapper.deleteById(id) > 0;
+    }
+}

+ 192 - 0
src/main/java/com/goafanti/techproject/service/impl/TaskDetailsServiceImpl.java

@@ -0,0 +1,192 @@
+package com.goafanti.techproject.service.impl;
+
+import com.goafanti.common.dao.*;
+import com.goafanti.common.model.*;
+import com.goafanti.core.mybatis.BaseMybatisDao;
+import com.goafanti.core.mybatis.page.Pagination;
+import com.goafanti.techproject.bo.TaskDetailsBo;
+import com.goafanti.techproject.service.TaskDetailsService;
+import org.apache.commons.beanutils.BeanUtils;
+import org.springframework.stereotype.Service;
+
+import javax.annotation.Resource;
+import java.math.BigDecimal;
+import java.math.RoundingMode;
+import java.time.LocalDate;
+import java.util.Date;
+import java.util.HashMap;
+import java.util.List;
+import java.util.Map;
+
+/**
+ * 项目申报详情(TaskDetails)表服务实现类
+ *
+ * @author makejava
+ * @since 2024-12-26 17:11:50
+ */
+@Service("taskDetailsService")
+public class TaskDetailsServiceImpl extends BaseMybatisDao<TaskDetailsMapper> implements TaskDetailsService {
+    @Resource
+    private TaskDetailsMapper taskDetailsMapper;
+    @Resource
+    private TaskDetailsExtendMapper taskDetailsExtendMapper;
+    @Resource
+    private TaskDetailsSupplementMapper taskDetailsSupplementMapper;
+    @Resource
+    private TOrderNewMapper tOrderNewMapper;
+    @Resource
+    private TaskAnnualReportMapper taskAnnualReportMapper;
+
+
+    @Override
+    public Pagination<TaskDetails> list(TaskDetails taskDetails, Integer pageNo, Integer pageSize) {
+        Map<String, Object> params = new HashMap<>();
+        params.put("in", taskDetails);
+        return (Pagination<TaskDetails>) findPage("findTaskDetailsList",
+                "findTaskDetailsCount", params, pageNo, pageSize);
+    }
+
+    /**
+     * 通过ID查询单条数据
+     *
+     * @param id 主键
+     * @return 实例对象
+     */
+    @Override
+    public TaskDetailsBo queryById(Integer id) {
+        TaskDetailsBo taskDetailsBo = new TaskDetailsBo();
+        TaskDetails taskDetails = this.taskDetailsMapper.selectById(id);
+        TaskDetailsExtend taskDetailsExtend = taskDetailsExtendMapper.selectById(id);
+        TaskDetailsSupplement taskDetailsSupplement = taskDetailsSupplementMapper.selectById(id);
+        if (taskDetails != null){
+            try {
+                BeanUtils.copyProperties(taskDetailsBo,taskDetails );
+                BeanUtils.copyProperties( taskDetailsBo,taskDetailsExtend);
+                BeanUtils.copyProperties( taskDetailsBo,taskDetailsSupplement);
+            } catch (Exception e) {
+                e.printStackTrace();
+            }
+        }
+        return taskDetailsBo;
+    }
+
+
+    /**
+     * 新增数据
+     *
+     * @param taskDetails 实例对象
+     * @return 实例对象
+     */
+    @Override
+    public TaskDetailsBo insert(TaskDetails taskDetails, TaskDetailsExtend taskDetailsExtend, TaskDetailsSupplement taskDetailsSupp) {
+        TOrderNew tOrderNew =tOrderNewMapper.selectByTid(taskDetails.getTid());
+        taskDetails.setUid(tOrderNew.getBuyerId());
+        Date date = new Date();
+        taskDetails.setCreateTime(date);
+        taskDetails.setUpdateTime(date);
+        //数据计算
+        countTaskDetails(taskDetails);
+        this.taskDetailsMapper.insert(taskDetails);
+        if (taskDetails.getId() != null) {
+            taskDetailsExtend.setId(taskDetails.getId());
+            taskDetailsSupp.setId(taskDetails.getId());
+            taskDetailsExtendMapper.insert(taskDetailsExtend);
+            taskDetailsSupplementMapper.insert(taskDetailsSupp);
+        }
+        TaskDetailsBo taskDetailsBo = new TaskDetailsBo();
+        try {
+            BeanUtils.copyProperties(taskDetailsBo,taskDetails );
+            BeanUtils.copyProperties(taskDetailsBo,taskDetailsExtend);
+            BeanUtils.copyProperties(taskDetailsBo,taskDetailsSupp);
+        } catch (Exception e) {
+            e.printStackTrace();
+        }
+        return taskDetailsBo;
+    }
+
+    private void countTaskDetails(TaskDetails taskDetails) {
+        //计算人员占比
+        if (taskDetails.getWorkersNumber()!=null||
+                taskDetails.getTechnologyNumber()!=null){
+            BigDecimal wn = BigDecimal.valueOf(taskDetails.getWorkersNumber());
+            BigDecimal tn = BigDecimal.valueOf(taskDetails.getTechnologyNumber());
+            BigDecimal res = tn.divide(wn,4, RoundingMode.HALF_UP).multiply(new BigDecimal(100));
+            taskDetails.setWorkersRate(res.doubleValue());
+        }
+        //计算年度研发占比
+        //计算三年度的研发占比
+        LocalDate now = LocalDate.now();
+        int year = now.getYear();
+        List<TaskAnnualReport> taskAnnualReports = taskAnnualReportMapper.selectThreeYear(taskDetails.getTid(), year);
+
+        if(taskDetails.getRdBudget() !=null ||
+                taskDetails.getRdSalesAmount() !=null){
+            BigDecimal rdBudget = taskDetails.getRdBudget();
+            BigDecimal rdSalesAmount = taskDetails.getRdSalesAmount();
+            BigDecimal res = rdBudget.divide(rdSalesAmount, 4, RoundingMode.HALF_UP).multiply(new BigDecimal(100));
+            taskDetails.setRdBudgetRate(res.doubleValue());
+            //计算三年度的研发占比
+            if (taskAnnualReports.size()==2){
+                BigDecimal res2 = getBigDecimal(rdSalesAmount, rdBudget, taskAnnualReports);
+                taskDetails.setThreeYearsRdBudgetRate(res2.doubleValue());
+            }
+
+
+        }
+        //计算实际研发占比
+        if(taskDetails.getActualRdNumber() !=null ||
+                taskDetails.getActualRdAmount() !=null){
+            BigDecimal actualRdNumber = BigDecimal.valueOf(taskDetails.getActualRdNumber());
+            BigDecimal actualRdAmount = taskDetails.getActualRdAmount();
+            BigDecimal res = actualRdNumber.divide(actualRdAmount, 4, RoundingMode.HALF_UP).multiply(new BigDecimal(100));
+            taskDetails.setActualRdRate(res.doubleValue());
+            if (taskAnnualReports.size()==2){
+                BigDecimal res2 = getBigDecimal(actualRdAmount, actualRdNumber, taskAnnualReports);
+                taskDetails.setThreeYearsActualRdRate(res2.doubleValue());
+            }
+        }
+
+    }
+
+    private BigDecimal getBigDecimal(BigDecimal rdSalesAmount, BigDecimal rdBudget, List<TaskAnnualReport> taskAnnualReports) {
+        BigDecimal threeYearsRdSalesAmount = rdSalesAmount;
+        BigDecimal threeYearsRdBudget = rdBudget;
+        for (TaskAnnualReport e : taskAnnualReports) {
+            threeYearsRdBudget=threeYearsRdBudget.add(e.getResearchAmount());
+            threeYearsRdSalesAmount=threeYearsRdSalesAmount.add(e.getSalesAmount());
+        }
+        return threeYearsRdBudget.divide(threeYearsRdSalesAmount, 4, RoundingMode.HALF_UP).multiply(new BigDecimal(100));
+    }
+
+    /**
+     * 修改数据
+     *
+     * @param taskDetails 实例对象
+     * @return 实例对象
+     */
+    @Override
+    public TaskDetailsBo update(TaskDetails taskDetails, TaskDetailsExtend taskDetailsExtend, TaskDetailsSupplement taskDetailsSupp) {
+        if (taskDetails.getId()!=null){
+            taskDetailsExtend.setId(taskDetails.getId());
+            taskDetailsSupp.setId(taskDetails.getId());
+            this.taskDetailsMapper.update(taskDetails);
+            taskDetailsExtendMapper.update(taskDetailsExtend);
+            taskDetailsSupplementMapper.update(taskDetailsSupp);
+        }
+        return this.queryById(taskDetails.getId());
+    }
+
+    /**
+     * 通过主键删除数据
+     *
+     * @param id 主键
+     * @return 是否成功
+     */
+    @Override
+    public boolean deleteById(Integer id) {
+        this.taskDetailsMapper.deleteById(id);
+        taskDetailsExtendMapper.deleteById(id);
+        taskDetailsSupplementMapper.deleteById(id);
+        return true;
+    }
+}

+ 2 - 2
src/main/resources/props/config_local.properties

@@ -1,8 +1,8 @@
 dev.name=local
 jdbc.driverClassName=com.mysql.jdbc.Driver
 
-static.host=//static.jishutao.com/1.3.34
-#static.host=//172.16.1.187/1.3.34
+#static.host=//static.jishutao.com/1.3.34
+static.host=//172.16.1.187/1.3.34
 
 #jdbc.url=jdbc\:mysql://localhost:3306/aft20241122?useUnicode=true&characterEncoding=UTF-8&autoReconnect=true&useSSL=false
 #jdbc.url=jdbc\:mysql://localhost:3306/aft?useUnicode=true&characterEncoding=UTF-8&autoReconnect=true&useSSL=false