4 次代碼提交 2416334bb2 ... 69da71e85c

作者 SHA1 備註 提交日期
  Wayne 69da71e85c Merge branch 'master' of http://8.137.121.180:10880/longping/subject_gxj 3 月之前
  Wayne a62ccd8266 新增项目转换统计 3 月之前
  Wayne 49aea5d33f 四库操作新增日志写入功能 3 月之前
  Wayne 96e359d0aa 重点库新增搜索行业功能 3 月之前
共有 18 個文件被更改,包括 569 次插入76 次删除
  1. 4 0
      projects-service/src/main/java/com/rtrh/projects/modules/projects/mapper/StaticsMapper.java
  2. 27 0
      projects-service/src/main/java/com/rtrh/projects/modules/projects/mapper/StaticsMapper.xml
  3. 6 6
      projects-service/src/main/java/com/rtrh/projects/modules/projects/mapper/SubInfoMapper.xml
  4. 27 0
      projects-service/src/main/java/com/rtrh/projects/modules/projects/po/TLogOperate.java
  5. 6 4
      projects-service/src/main/java/com/rtrh/projects/modules/projects/service/StaticsService.java
  6. 35 0
      projects-service/src/main/java/com/rtrh/projects/modules/projects/service/impl/StaticsServiceImpl.java
  7. 48 46
      projects-service/src/main/java/com/rtrh/projects/modules/projects/service/impl/SubInfoQueryServiceImpl.java
  8. 14 0
      projects-service/src/main/java/com/rtrh/projects/modules/projects/vo/TLogOperateVo.java
  9. 40 4
      projects/src/main/java/com/rtrh/projects/web/controller/projects/TjFxController.java
  10. 23 1
      projects/src/main/java/com/rtrh/projects/web/controller/projects/api/TzfxApiController.java
  11. 3 2
      projects/src/main/java/com/rtrh/projects/web/controller/subject/api/SubInfoApiController.java
  12. 7 7
      projects/src/main/java/com/rtrh/projects/web/controller/subject/api/SubInfoQueryApiController.java
  13. 2 2
      projects/src/main/webapp/vmodules/leftMenu.jsp
  14. 323 0
      projects/src/main/webapp/vmodules/project/xmzhtj.jsp
  15. 1 1
      projects/src/main/webapp/vmodules/subject/subInfo/tz/year_extend.jsp
  16. 1 1
      projects/src/main/webapp/vmodules/subject/subInfo/tz/year_new.jsp
  17. 1 1
      projects/src/main/webapp/vmodules/subject/subInfo/tz/year_reserve.jsp
  18. 1 1
      projects/src/main/webapp/vmodules/subject/subInfo/tz/year_sum.jsp

+ 4 - 0
projects-service/src/main/java/com/rtrh/projects/modules/projects/mapper/StaticsMapper.java

@@ -7,6 +7,8 @@ import java.util.Map;
 import com.rtrh.projects.modules.projects.vo.HistoryVO;
 import com.rtrh.projects.modules.projects.vo.NewTouzVO;
 import com.rtrh.projects.modules.projects.vo.SubInfoTjfxDataVo;
+import com.rtrh.projects.modules.projects.vo.TLogOperateVo;
+import com.rtrh.projects.vo.passport.RegisterListVO;
 import org.apache.ibatis.annotations.Param;
 
 import com.rtrh.core.repository.mybatis.MyBatisRepository;
@@ -316,4 +318,6 @@ public interface StaticsMapper {
 	List<SubInfoTjfxDataVo> getTjfxData(@Param("year") String year, @Param("startMoney") Integer startMoney, @Param("endMoney") Integer endMoney, @Param("subjectIds") List<String> subjectIds, @Param("codeList") List<String> codeList, @Param("propKinds") List<String> propKinds);
 
 	List<SubInfoTjfxDataVo> getTjfxYearMoneyBySubIds(@Param("idList") List<String> idList, @Param("year") String year);
+
+	List<TLogOperateVo> getXmzhtjData(@Param("vo") RegisterListVO vo);
 }

+ 27 - 0
projects-service/src/main/java/com/rtrh/projects/modules/projects/mapper/StaticsMapper.xml

@@ -161,5 +161,32 @@
 		GROUP BY
 		sub_id
 	</select>
+    <select id="getXmzhtjData" resultType="com.rtrh.projects.modules.projects.vo.TLogOperateVo">
+		select
+			DATE_FORMAT(zh_date, '%Y-%m') AS projectDate,
+		    title as title,
+		    kind as kind,
+		    count(*) as number
+		from
+		    t_log_operate
+		where
+			logic_delete_flag = 0
+		<if test="vo.startDate != null and  vo.startDate != ''">
+			AND zh_date &gt;= #{vo.startDate}
+		</if>
+		<if test="vo.endDate != null and vo.endDate != ''">
+			AND zh_date &lt;= #{vo.endDate}
+		</if>
+		<if test="vo.status != null and vo.status != ''">
+			AND kind = #{vo.status}
+		</if>
+		<if test="vo.status = null">
+			AND kind != 0
+		</if>
+		group by
+			projectDate, kind, title
+		order by
+		    projectDate, kind, title
+	</select>
 
 </mapper>

+ 6 - 6
projects-service/src/main/java/com/rtrh/projects/modules/projects/mapper/SubInfoMapper.xml

@@ -594,25 +594,25 @@
         from sub_fix a left join sub_info b on a.sub_id = b.id
         where a.cat = #{queryVO.stateFix} and a.year = #{queryVO.year} and b.logic_delete_flag = 0
         <if test="queryVO.subName != null and queryVO.subName != ''">
-            AND sub_info.sub_name LIKE CONCAT('%', #{queryVO.subName}, '%')
+            AND b.sub_name LIKE CONCAT('%', #{queryVO.subName}, '%')
         </if>
         <if test="queryVO.subjectId != null and queryVO.subjectId != ''">
-            AND sub_info.subject_id = #{queryVO.subjectId}
+            AND b.subject_id = #{queryVO.subjectId}
         </if>
         <if test="indusKinds != null and indusKinds.size() &gt; 0">
-            AND sub_info.indus_kind IN
+            AND b.indus_kind IN
             <foreach collection="indusKinds" item="item" separator="," open="(" close=")">
                 #{item}
             </foreach>
         </if>
         <if test="queryVO.sbdw != null and queryVO.sbdw != ''">
-            AND sub_info.unit_desc LIKE CONCAT('%', #{queryVO.sbdw}, '%')
+            AND b.unit_desc LIKE CONCAT('%', #{queryVO.sbdw}, '%')
         </if>
         <if test="queryVO.startAmt != null and queryVO.startAmt != ''">
-            AND sub_info.amt_total &gt;= #{queryVO.startAmt}
+            AND b.amt_total &gt;= #{queryVO.startAmt}
         </if>
         <if test="queryVO.endAmt != null and queryVO.endAmt != ''">
-            AND sub_info.amt_total &lt;= #{queryVO.endAmt}
+            AND b.amt_total &lt;= #{queryVO.endAmt}
         </if>
     </select>
     <!--预警-->

+ 27 - 0
projects-service/src/main/java/com/rtrh/projects/modules/projects/po/TLogOperate.java

@@ -0,0 +1,27 @@
+package com.rtrh.projects.modules.projects.po;
+
+import lombok.Data;
+
+import java.util.Date;
+
+//四库转变操作日志
+@Data
+public class TLogOperate {
+
+    private Integer id;
+    private String userId;  //用户id
+    private String userName;    //用户名称
+    private String menu;        //菜单
+    private String button;  //按钮
+    private String title;   //操作说明
+    private String kind;    //转化:1-正转 2-逆转 0-其他操作
+    private String subId;   //sub_info表的id
+    private String statusFirst; //转化前状态
+    private String statusAfter; //转化后状态
+    private Date zhDate;    //转化时间
+    private String remark;  //备注
+    private String createUserId;
+    private Date createTime;
+    private Integer logicDeleteFlag;
+
+}

+ 6 - 4
projects-service/src/main/java/com/rtrh/projects/modules/projects/service/StaticsService.java

@@ -4,12 +4,12 @@ import java.math.BigDecimal;
 import java.util.List;
 import java.util.Map;
 
+import com.rtrh.core.repository.Page;
 import com.rtrh.projects.modules.outApi.vo.StaticsQueryVO;
-import com.rtrh.projects.modules.projects.vo.NewTouzVO;
-import com.rtrh.projects.modules.projects.vo.SubInfoTjfxDataVo;
-import com.rtrh.projects.modules.projects.vo.SubInfoTjfxVo;
-import com.rtrh.projects.modules.projects.vo.TzfxDataQueryVO;
+import com.rtrh.projects.modules.projects.po.TLogOperate;
+import com.rtrh.projects.modules.projects.vo.*;
 import com.rtrh.projects.modules.system.vo.LoginUserVO;
+import com.rtrh.projects.vo.passport.RegisterListVO;
 
 public interface StaticsService {
 
@@ -343,4 +343,6 @@ public interface StaticsService {
 	 * @return
 	 */
 	SubInfoTjfxVo getTjfxData(TzfxDataQueryVO queryVO);
+
+	Page getXmzhtjData(Page page, RegisterListVO vo);
 }

+ 35 - 0
projects-service/src/main/java/com/rtrh/projects/modules/projects/service/impl/StaticsServiceImpl.java

@@ -5,6 +5,8 @@ import java.io.InputStreamReader;
 import java.math.BigDecimal;
 import java.math.BigInteger;
 import java.math.RoundingMode;
+import java.time.LocalDate;
+import java.time.format.DateTimeFormatter;
 import java.util.*;
 import java.util.concurrent.ConcurrentHashMap;
 import java.util.concurrent.ConcurrentMap;
@@ -12,10 +14,15 @@ import java.util.function.ToDoubleFunction;
 import java.util.stream.Collectors;
 
 import com.alibaba.excel.util.StringUtils;
+import com.github.pagehelper.PageHelper;
+import com.github.pagehelper.PageInfo;
+import com.rtrh.core.repository.Page;
 import com.rtrh.projects.modules.projects.po.SubIndu;
 import com.rtrh.projects.modules.projects.vo.*;
 import com.rtrh.projects.modules.system.service.ISubInduService;
 import com.rtrh.projects.modules.utils.DateUtils;
+import com.rtrh.projects.modules.projects.vo.TLogOperateVo;
+import com.rtrh.projects.vo.passport.RegisterListVO;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.stereotype.Service;
 
@@ -1223,4 +1230,32 @@ public class StaticsServiceImpl implements StaticsService {
 
         return subInfoTjfxVo;
     }
+
+    @Override
+    public Page getXmzhtjData(Page page, RegisterListVO vo) {
+        if (StringUtil.isNotEmpty(vo.getStartDate())){
+            vo.setStartDate(vo.getStartDate() + "-01");
+        }
+        if (StringUtil.isNotEmpty(vo.getEndDate())){
+
+            // 将字符串转换为 LocalDate 对象,获取该月的第一天
+            LocalDate firstDayOfMonth = LocalDate.parse(vo.getEndDate() + "-01", DateTimeFormatter.ofPattern("yyyy-MM-dd"));
+
+            // 获取下个月的第一天
+            LocalDate firstDayOfNextMonth = firstDayOfMonth.plusMonths(1);
+
+            // 上个月的最后一天就是下个月第一天的前一天
+            LocalDate lastDayOfMonth = firstDayOfNextMonth.minusDays(1);
+
+            vo.setEndDate(lastDayOfMonth.toString());
+        }
+
+        PageHelper.startPage(page.getPageNo(), page.getPageSize());
+        List<TLogOperateVo> list = staticsMapper.getXmzhtjData(vo);
+        PageInfo<TLogOperateVo> pageInfo = new PageInfo<>(list);
+        page.setList(list);
+        page.setTotalCount(pageInfo.getTotal());
+
+        return page;
+    }
 }

+ 48 - 46
projects-service/src/main/java/com/rtrh/projects/modules/projects/service/impl/SubInfoQueryServiceImpl.java

@@ -385,57 +385,59 @@ public class SubInfoQueryServiceImpl implements SubInfoQueryService {
                 .filter(StringUtils::isNotBlank)
                 .collect(Collectors.toList());
 
-        // 查询前期手续办理情况表中的数据,获取所有重点项目的前期手续信息
-        List<SubInfoFixDetailPreNew> preNewList = Optional.ofNullable(
-                subInfoMapper.selectSubPreNewBySubIds(subIdList)
-        ).orElse(Collections.emptyList());
-
-        //对手续信息按照id进行分组
-        Map<String, List<SubInfoFixDetailPreNew>> preNewMap = preNewList.stream().collect(Collectors.groupingBy(SubInfoFixDetailPreNew::getSubId));
-
-        // 遍历重点项目信息,找到对应的前期手续信息,然后拼接手续完成情况为字符串,拼接到对应的重点项目信息中
-        list.forEach(e->{
-            List<SubInfoFixDetailPreNew> subInfoFixDetailPreNewList = preNewMap.get(e.getId());
-            StringBuilder sb = new StringBuilder();
-            if (com.rtrh.common.util.CollectionUtil.isNotEmpty(subInfoFixDetailPreNewList)){
-                //已经完成的手续
-                StringBuilder end = new StringBuilder("已完成:");
-                //正在办理的手续
-                StringBuilder yellow = new StringBuilder("进行中:");
-                //判断是否有已完成手续
-                boolean endBoolean = subInfoFixDetailPreNewList.stream().anyMatch(f->"2".equals(f.getStatusConf()));
-                //判断是否有正在进行手续
-                boolean yellowBoolean = subInfoFixDetailPreNewList.stream().anyMatch(f->"1".equals(f.getStatusConf()));
-                subInfoFixDetailPreNewList.forEach(f->{
-                    if ("1".equals(f.getStatusConf())){
-                        yellow.append(f.getTitle()).append(",");
-                    }else if ("2".equals(f.getStatusConf())){
-                        end.append(f.getTitle()).append(",");
+        if (list != null && list.size() > 0){
+            // 查询前期手续办理情况表中的数据,获取所有重点项目的前期手续信息
+            List<SubInfoFixDetailPreNew> preNewList = Optional.ofNullable(
+                    subInfoMapper.selectSubPreNewBySubIds(subIdList)
+            ).orElse(Collections.emptyList());
+
+            //对手续信息按照id进行分组
+            Map<String, List<SubInfoFixDetailPreNew>> preNewMap = preNewList.stream().collect(Collectors.groupingBy(SubInfoFixDetailPreNew::getSubId));
+
+            // 遍历重点项目信息,找到对应的前期手续信息,然后拼接手续完成情况为字符串,拼接到对应的重点项目信息中
+            list.forEach(e->{
+                List<SubInfoFixDetailPreNew> subInfoFixDetailPreNewList = preNewMap.get(e.getId());
+                StringBuilder sb = new StringBuilder();
+                if (com.rtrh.common.util.CollectionUtil.isNotEmpty(subInfoFixDetailPreNewList)){
+                    //已经完成的手续
+                    StringBuilder end = new StringBuilder("已完成:");
+                    //正在办理的手续
+                    StringBuilder yellow = new StringBuilder("进行中:");
+                    //判断是否有已完成手续
+                    boolean endBoolean = subInfoFixDetailPreNewList.stream().anyMatch(f->"2".equals(f.getStatusConf()));
+                    //判断是否有正在进行手续
+                    boolean yellowBoolean = subInfoFixDetailPreNewList.stream().anyMatch(f->"1".equals(f.getStatusConf()));
+                    subInfoFixDetailPreNewList.forEach(f->{
+                        if ("1".equals(f.getStatusConf())){
+                            yellow.append(f.getTitle()).append(",");
+                        }else if ("2".equals(f.getStatusConf())){
+                            end.append(f.getTitle()).append(",");
+                        }
+                    });
+                    if (endBoolean){
+                        sb.append(end, 0, end.length()-1).append("。");
+                    }
+                    if (yellowBoolean){
+                        sb.append(yellow, 0, yellow.length()-1).append("。");
+                    }
+                    if (!endBoolean && !yellowBoolean){
+                        sb.append("暂无手续办理情况!");
                     }
-                });
-                if (endBoolean){
-                    sb.append(end, 0, end.length()-1).append("。");
-                }
-                if (yellowBoolean){
-                    sb.append(yellow, 0, yellow.length()-1).append("。");
                 }
-                if (!endBoolean && !yellowBoolean){
-                    sb.append("暂无手续办理情况!");
+                e.setQqsxblqk(sb.toString());
+                if (StringUtils.isNotBlank(e.getSubjectId())){
+                    e.setSubjectId(jsddNameMap.getOrDefault(e.getSubjectId(),""));
                 }
-            }
-            e.setQqsxblqk(sb.toString());
-            if (StringUtils.isNotBlank(e.getSubjectId())){
-                e.setSubjectId(jsddNameMap.getOrDefault(e.getSubjectId(),""));
-            }
 
-            //遍历subInfoTotalExcel将万元转换为亿元
-            e.setAmtTotal(e.getAmtTotal().divide(new BigDecimal("10000"), 2, RoundingMode.HALF_UP));
+                //遍历subInfoTotalExcel将万元转换为亿元
+                e.setAmtTotal(e.getAmtTotal().divide(new BigDecimal("10000"), 2, RoundingMode.HALF_UP));
 
-            //由于content字段过长,所以截取长度100字符,避免空指针异常
-            // 检查内容是否为空,避免空指针异常,并截取前100个字符
-            String content = e.getContent();
-            e.setContent(content == null ? "" : StringUtils.substring(content, 0, 100));
-        });
+                //由于content字段过长,所以截取长度100字符,避免空指针异常
+                // 检查内容是否为空,避免空指针异常,并截取前100个字符
+                String content = e.getContent();
+                e.setContent(content == null ? "" : StringUtils.substring(content, 0, 100));
+            });
+        }
 
         PageInfo<SubFixListVo> pageInfo = new PageInfo<SubFixListVo>(list);
         page.setList(list);

+ 14 - 0
projects-service/src/main/java/com/rtrh/projects/modules/projects/vo/TLogOperateVo.java

@@ -0,0 +1,14 @@
+package com.rtrh.projects.modules.projects.vo;
+
+import lombok.Data;
+
+@Data
+public class TLogOperateVo {
+
+    private String id;  //序号
+    private String projectDate; //月份时间
+    private String kind;    //类型
+    private String title;  //说明
+    private String number;  //数量
+
+}

+ 40 - 4
projects/src/main/java/com/rtrh/projects/web/controller/projects/TjFxController.java

@@ -6,24 +6,25 @@ import java.io.IOException;
 import java.io.InputStream;
 import java.math.BigDecimal;
 import java.text.SimpleDateFormat;
-import java.util.Calendar;
-import java.util.HashMap;
-import java.util.List;
-import java.util.Map;
+import java.util.*;
 
 import cn.afterturn.easypoi.word.WordExportUtil;
 import cn.afterturn.easypoi.word.entity.MyXWPFDocument;
 import com.rtrh.common.util.StringUtil;
 import com.rtrh.projects.modules.projects.mapper.ReportMapper;
 import com.rtrh.projects.modules.projects.po.SubIndu;
+import com.rtrh.projects.modules.system.po.JUnit;
 import com.rtrh.projects.modules.system.service.ISubInduService;
+import com.rtrh.projects.modules.system.service.JUnitService;
 import org.apache.commons.io.IOUtils;
 import org.apache.poi.xwpf.usermodel.XWPFDocument;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.stereotype.Controller;
+import org.springframework.ui.Model;
 import org.springframework.ui.ModelMap;
 import org.springframework.web.bind.annotation.GetMapping;
 import org.springframework.web.bind.annotation.RequestMapping;
+import org.springframework.web.bind.annotation.RequestMethod;
 import org.springframework.web.servlet.ModelAndView;
 
 import com.rtrh.projects.modules.system.enums.SysTableKind;
@@ -44,6 +45,9 @@ public class TjFxController extends BaseController {
 	@Autowired
 	private ISubInduService subInduService;
 
+	@Autowired
+	private JUnitService jUnitService;
+
 	@GetMapping("index")
 	public ModelAndView index(ModelMap model) {
 		List<TSystable> JSDD = tSysTableService.getByKind(SysTableKind.JSDD);
@@ -59,6 +63,38 @@ public class TjFxController extends BaseController {
 		return new ModelAndView("/vmodules/tjfx/index2.jsp", model);
 	}
 
+	/**
+	 * 返回项目转换统计页面
+	 * @param model
+	 * @return
+	 */
+	@RequestMapping(value="/xmzhtj",method= RequestMethod.GET)
+	public ModelAndView view(Model model) {
+		String currUserUnitId = getCurUser().getUnitId();
+		Boolean isSfgw = false;
+		if(StringUtil.isNotEmpty(currUserUnitId)) {
+			JUnit unit = jUnitService.getById(currUserUnitId);
+			if(Objects.nonNull(unit)) {
+				isSfgw = unit.getTitle().contains("发改委");
+			}
+		}
+
+		Boolean isAdmin=false;
+		String loginName=getCurUser().getId();
+		if ("ADMIN".equals(loginName)){
+			isAdmin=true;
+		}
+
+		Boolean checkEdit=getCurUser().getEdit();
+		model.addAttribute("HYFL", tSysTableService.getByKind(SysTableKind.HYFL));
+		model.addAttribute("JSDD", tSysTableService.getByKind(SysTableKind.JSDD));
+		model.addAttribute("unitId", getCurUser().getUnitId());
+		model.addAttribute("isSfgw", isSfgw);
+		model.addAttribute("isAdmin", isAdmin);
+		model.addAttribute("checkEdit", checkEdit);
+		return new ModelAndView("/vmodules/project/xmzhtj.jsp");
+	}
+
 
 	@GetMapping("reportWord")
 	public void reportWord(String year,String kind,String month) throws Exception {

+ 23 - 1
projects/src/main/java/com/rtrh/projects/web/controller/projects/api/TzfxApiController.java

@@ -6,9 +6,16 @@ import java.util.List;
 import java.util.Map;
 import java.util.Optional;
 
+import com.rtrh.core.repository.Page;
+import com.rtrh.core.vo.ListMessage;
 import com.rtrh.projects.modules.projects.mapper.ReportMapper;
+import com.rtrh.projects.modules.projects.po.TLogOperate;
 import com.rtrh.projects.modules.projects.vo.SubInfoTjfxDataVo;
 import com.rtrh.projects.modules.projects.vo.SubInfoTjfxVo;
+import com.rtrh.projects.modules.projects.vo.TLogOperateVo;
+import com.rtrh.projects.modules.system.po.SecUser;
+import com.rtrh.projects.vo.passport.RegisterListVO;
+import com.team.security.TeamShiroUser;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.web.bind.annotation.PostMapping;
 import org.springframework.web.bind.annotation.RequestBody;
@@ -99,7 +106,22 @@ public class TzfxApiController extends BaseController {
 		return message;
 	}
 
-
+	/**
+	 * 项目转换统计列表数据
+	 */
+	@PostMapping("/getXmzhtjData")
+	public ListMessage getXmzhtjData(@RequestBody Page page, @RequestBody RegisterListVO vo) {
+		ListMessage message = new ListMessage();
+		try {
+			//查询数据库获取项目转换列表信息
+			Page pageData = staticsService.getXmzhtjData(page, vo);
+			message.add(pageData.getList(), pageData.getTotalCount());
+		} catch (Exception e) {
+			logger.error("",e);
+			message.add("获取失败");
+		}
+		return message;
+	}
 
 
 

+ 3 - 2
projects/src/main/java/com/rtrh/projects/web/controller/subject/api/SubInfoApiController.java

@@ -144,6 +144,7 @@ public class SubInfoApiController extends BaseController {
      * 抓取四库代码到重点项目库中
      *
      */
+    @Log("自动抓取四库代码到重点项目库中")
     @PostMapping(value = "/subInfoToSubFix")
     public ListMessage subInfoToSubFix(@RequestBody SubInfoToSubFixVo subInfoToSubFixVo) {
         ListMessage message = new ListMessage();
@@ -160,7 +161,7 @@ public class SubInfoApiController extends BaseController {
     /**
      * 重点项目状态改变
      */
-
+    @Log("重点项目信息状态转换")
     @PostMapping(value = "/updateFixeCat/{subInfoId}/{cat}")
     public Message updateFixeCat(@PathVariable String subInfoId,@PathVariable String cat) {
         Message message = new Message();
@@ -1103,7 +1104,7 @@ public class SubInfoApiController extends BaseController {
      * 设置项目取消纳入年度固定资产项目库
      */
     @PostMapping("setIsFix")
-    @Log("项目是否纳入年度固定资产项目库")
+    @Log("重点项目移除重点项目库")
     public Message setBackIsFix(@RequestBody SubIdVO vo) {
         Message message = new Message();
         try {

+ 7 - 7
projects/src/main/java/com/rtrh/projects/web/controller/subject/api/SubInfoQueryApiController.java

@@ -86,7 +86,7 @@ public class SubInfoQueryApiController extends BaseController {
     }
 
     /**
-     * 项目台账
+     * 获取重点项目数据
      *
      * @param page
      * @param queryVO
@@ -103,15 +103,15 @@ public class SubInfoQueryApiController extends BaseController {
             //保存行业code
             List<String> indusKinds = new ArrayList<>();
             //判断搜索条件中是否有行业分类条件
-            if (StringUtils.isNotBlank(queryVO.getIndusKinds())) {
+            if (StringUtils.isNotBlank(queryVO.getIndusKind())) {
                 //在subInduList中找到code=queryVO.getIndusKinds()的数据
-                SubIndu subIndu = subInduList.stream().filter(item -> item.getCode().equals(queryVO.getIndusKinds())).findFirst().orElse(null);
+                SubIndu subIndu = subInduList.stream().filter(item -> item.getCode().equals(queryVO.getIndusKind())).findFirst().orElse(null);
 
                 if (subIndu != null){
                     //判断这个行业是不是上级行业
                     if (StringUtils.isBlank(subIndu.getLastId())){
                         // 这个行业是上级行业,需要找到所有下级行业的code
-                        indusKinds = subInduList.stream().filter(item -> item.getLastId().equals(subIndu.getId())).map(SubIndu::getCode).collect(Collectors.toList());
+                        indusKinds = subInduList.stream().filter(item -> item.getLastId() != null && item.getLastId().equals(subIndu.getId())).map(SubIndu::getCode).collect(Collectors.toList());
                     }else {
                         indusKinds.add(subIndu.getCode());
                     }
@@ -654,15 +654,15 @@ public class SubInfoQueryApiController extends BaseController {
         //保存行业code
         List<String> indusKinds = new ArrayList<>();
         //判断搜索条件中是否有行业分类条件
-        if (StringUtils.isNotBlank(queryVO.getIndusKinds())) {
+        if (StringUtils.isNotBlank(queryVO.getIndusKind())) {
             //在subInduList中找到code=queryVO.getIndusKinds()的数据
-            SubIndu subIndu = subInduList.stream().filter(item -> item.getCode().equals(queryVO.getIndusKinds())).findFirst().orElse(null);
+            SubIndu subIndu = subInduList.stream().filter(item -> item.getCode().equals(queryVO.getIndusKind())).findFirst().orElse(null);
 
             if (subIndu != null){
                 //判断这个行业是不是上级行业
                 if (StringUtils.isBlank(subIndu.getLastId())){
                     // 这个行业是上级行业,需要找到所有下级行业的code
-                    indusKinds = subInduList.stream().filter(item -> item.getLastId().equals(subIndu.getId())).map(SubIndu::getCode).collect(Collectors.toList());
+                    indusKinds = subInduList.stream().filter(item -> item.getLastId() != null && item.getLastId().equals(subIndu.getId())).map(SubIndu::getCode).collect(Collectors.toList());
                 }else {
                     indusKinds.add(subIndu.getCode());
                 }

+ 2 - 2
projects/src/main/webapp/vmodules/leftMenu.jsp

@@ -589,8 +589,8 @@
                         {
                             txt: 'D每个月项目转换情况',
                             code: '407',
-                            // url: 'monthReport/view'
-                            url: 'register/underConstruction'
+                            url: 'tjfx/xmzhtj'
+                            // url: 'register/underConstruction'
                         },
                         <%--{--%>
                         <%--    txt: '逾期项目',--%>

+ 323 - 0
projects/src/main/webapp/vmodules/project/xmzhtj.jsp

@@ -0,0 +1,323 @@
+<%--
+  Created by IntelliJ IDEA.
+  User: WangC
+  Date: 2025/1/6
+  Time: 15:50
+  To change this template use File | Settings | File Templates.
+--%>
+<%@ page contentType="text/html;charset=UTF-8" language="java" %>
+<html>
+<head>
+    <title>项目转换统计页面</title>
+    <jsp:include page="../common/common-meta-include.jsp"></jsp:include>
+    <%-- <jsp:include page="../common/common-css-include.jsp"></jsp:include> --%>
+    <link rel="stylesheet" type="text/css" href="${WebSite.asset}/lib/layui-v2.5.5/css/layui.css?version=${version}" media="all" />
+    <link rel="stylesheet" type="text/css" href="${WebSite.asset}/lib/layui-v2.5.5/css/public.css?version=${version}" media="all" />
+    <link rel="stylesheet" type="text/css" href="${WebSite.asset}/lib/layui-v2.6.5/css/layui.css?version=${version}" media="all" />
+    <link rel="stylesheet" type="text/css" href="${WebSite.asset}/css/style.css?version=${version}" media="all" />
+
+    <style>
+        .table_box .pagination-box {
+            display: flex;
+            justify-content: center;
+            width: 100%;
+        }
+        .layui-table-view .layui-table td >div{
+            line-height: 20px !important;
+            white-space: normal;
+        }
+    </style>
+</head>
+<body>
+<div id="app">
+    <template id="template">
+        <div class="layui-layout layui-layout-admin">
+            <div class="right_title">
+                <span class="txt">项目转化统计</span>
+                <div class="layui-collapse">
+                    <div class="layui-colla-item">
+                        <%--                    <h2 class="layui-colla-title">筛选</h2>--%>
+                        <div class="layui-colla-content layui-show">
+                            <form class="layui-form" lay-filter="searchForm">
+                                <div class="layui-row">
+                                    <div class="layui-col-xs6 layui-col-sm6 layui-col-md3">
+                                        <div class="layui-form-item">
+                                            <label class="layui-form-label">状态</label>
+                                            <div class="layui-input-block">
+                                                <select lay-verify="required" name="status" lay-filter="status" id="status" v-model="junit.status">
+                                                    <option value="">所有</option>
+                                                    <option value="2">逆转</option>
+                                                    <option value="1">正转</option>
+                                                </select>
+                                            </div>
+                                        </div>
+                                    </div>
+
+                                    <div class="layui-col-xs6 layui-col-sm6 layui-col-md4">
+                                        <div class="layui-form-item">
+                                            <label class="layui-form-label">月报期间</label>
+                                            <div class="layui-input-block" style="width: fit-content;">
+                                                <input type="text" id="startDate" name="startDate" style="float: left;width: 120px"
+                                                       placeholder="请选择开始时间" autocomplete="off" class="layui-input" value="${startDate}"> -
+                                                <input type="text" id="endDate" name="endDate" style="float: right;width: 120px"
+                                                       placeholder="请选择结束时间" autocomplete="off" class="layui-input" value="${endDate}">
+                                            </div>
+                                        </div>
+                                    </div>
+
+                                    <div class="layui-col-xs6 layui-col-sm6 layui-col-md3">
+                                        <button type="button" class="layui-btn layui-btn-normal" @click="search()">查询</button>
+                                    </div>
+                                </div>
+                            </form>
+                        </div>
+                    </div>
+                </div>
+            </div>
+            <div class="table_box" style="padding-top: 0;">
+                <div class="table_process">
+                    <table id="table1" lay-filter="test"></table>
+                    <div class="pagination-box" id="pagination"></div>
+                </div>
+            </div>
+        </div>
+    </template>
+</div>
+
+<script type="text/html" id="currentTableBar">
+    <div class="toolBar">
+        <span lay-event="edit2">明细</span>
+    </div>
+</script>
+
+<jsp:include page="../common/common-js-include.jsp"></jsp:include>
+
+<script type="text/javascript">
+    new Vue({
+        el: "#app",
+        template: "#template",
+        data: {
+            winH: 0,
+            dataList: [],
+            junit: {},
+            tableName: 'test',
+            pageNo: 1,
+            pageSize: 10
+        },
+        mounted: function () {
+            this.init();
+        },
+        methods: {
+            init: function () {
+                layui.laydate.render({
+                    elem: '#startDate',
+                    theme: layDateTheme,
+                    type: 'month',  // 设置为选择月份
+                    format: 'yyyy-MM',  // 设置显示格式为年-月
+                });
+                layui.laydate.render({
+                    elem: '#endDate',
+                    theme: layDateTheme,
+                    type: 'month',  // 设置为选择月份
+                    format: 'yyyy-MM',  // 设置显示格式为年-月
+                });
+                this.getData();
+            },
+            add: function (obj) {
+                App.openLayer({
+                    title: "新增角色",
+                    content: App.getUrl("/Rolemeun/add"),
+                    height: "600",
+                    width: "800"
+                });
+            },
+            edit: function (obj) {
+                window.location.href = App.getUrl("register/editSbdw?id=" + obj.data.id);
+            },
+            edit2: function (obj) {
+                window.location.href = App.getUrl("register/editCkSbdw?id=" + obj.data.id);
+            },
+            del: function (obj) {
+                App.msg.confirm("确定删除该角色吗?", function () {
+                    App.postJson("/api/Rolemeun/del", { id: obj.data.id }, function (res) {
+                        if (res.success) methods.reload();
+                    });
+                });
+            },
+            loadPage: function (totalCount) {
+                var self = this;
+                layui.laypage.render({
+                    elem: 'pagination',
+                    count: totalCount,
+                    curr: self.pageNo,
+                    limit: self.pageSize,
+                    layout: ['count', 'prev', 'page', 'next', 'skip'],
+                    jump: function (obj, first) {
+                        //首次不执行
+                        if (!first) {
+                            self.pageNo = obj.curr;
+                            self.getData();
+                        }
+                    }
+                });
+            },
+            getData: function () {
+                var self = this;
+                var param = layui.form.getValue("searchForm");
+                param.pageNo = this.pageNo;
+                param.pageSize = this.pageSize;
+                App.postJson("/api/tzfx/getXmzhtjData", param, function (res) {
+                    self.dataList = res.rows;
+                    self.loadPage(res.total);
+                    self.loadTable();
+                });
+            },
+            search: function () {
+                var param = layui.form.getValue("searchForm");
+                this.pageNo = 1;
+                param.pageNo = this.pageNo;
+                param.pageSize = this.pageSize;
+                var self = this;
+                App.postJson("/api/tzfx/getXmzhtjData", param, function (res) {
+                    self.dataList = res.rows;
+                    self.loadPage(res.total);
+                    self.loadTable();
+                });
+            },
+            loadTable: function () {
+                var self = this;
+                layui.table.render({
+                    elem: '#table1', // 指定原始表格元素选择器(推荐id选择器)
+                    even: true,
+                    cols: [[ // 设置表头
+                        { type: 'numbers',  width: 80,title:'序号' },
+                        {field: 'projectDate', title: '月', minWidth: 200},
+                        {
+                            field: 'kind',
+                            title: '类型',
+                            minWidth: 200,
+                            templet: function (row) {
+                                // 判断 kind 的值,进行转换
+                                return row.kind === '1' ? '正转' : (row.kind === '2' ? '逆转' : '未知');
+                            }
+                        },
+                        { field: 'title', title: '说明', minWidth: 200 },
+                        { field: 'number', title: '数量', minWidth: 200 },
+                        { title: '操作', width: 100, align: 'center', toolbar: '#currentTableBar', fixed: 'right' }
+                    ]],
+                    data: self.dataList,
+                    done:function(res, curr, count) {
+                        $('tr').css({ 'border': 'none' })
+                        $(".layui-table-main tr").each(function (index, val) {
+                            $($(".layui-table-fixed-l .layui-table-body tbody tr")[index]).height($(val).height());
+                            $($(".layui-table-fixed-r .layui-table-body tbody tr")[index]).height($(val).height());
+                        })
+                    }
+                });
+                layui.table.on('tool(' + this.tableName + ')', function (obj) {
+                    var event = obj.event;
+                    self[event].call(this, obj);
+                });
+            },
+            loadTable_1: function () {
+                var self = this;
+                layui.table.render({
+                    elem: '#table1', // 指定原始表格元素选择器(推荐id选择器)
+                    even: true,
+                    cols: [[ // 设置表头
+                        { type: 'numbers', fixed: 'left', align: '5%',title:'序号' , width: 44},
+                        {
+                            field: 'title', title: '单位名称', width: '15%', templet: function (row) {
+                                if (row.title != null) {
+                                    return '<span title="' + row.title + '">' + row.title + '</span>';
+                                }
+                                return ""
+                            }
+                        },
+                        { field: 'status', title: '状态', width: '7%' },
+                        {
+                            field: 'area', title: '所在区县', width: '8%', templet: function (row) {
+                                if (row.area != null) {
+                                    return '<span title="' + row.area + '">' + row.area + '</span>';
+                                }
+                                return ""
+                            }
+                        },
+                        { field: 'dateFound', title: '成立日期', width: '9%' },
+                        { field: 'amt', title: '注册资金', width: '8%' },
+                        { field: 'unitPropName', title: '单位性质', width: '8%' },
+                        { field: 'unitKindName', title: '单位类型', width: '8%' },
+                        { field: 'nameJur1', title: '法人', width: '7%' },
+                        { field: 'simCode', title: '联系电话', width: '10%' },
+                        {
+                            field: 'reason', title: '退回原因', width: '10%', templet: function (row) {
+                                if (row.reason != null) {
+                                    return '<span title="' + row.reason + '">' + row.reason + '</span>';
+                                }
+                                return "";
+                            }
+                        },
+                        { title: '操作', width: '6%', align: 'center', toolbar: '#currentTableBar2' }
+                    ]],
+                    data: self.dataList,
+                    /*        done:function (res,curr,count){
+                           $('tr').css({'background-color':'#ECEDFF','border':'none'})
+                         } */
+                });
+                layui.table.on('tool(' + this.tableName + ')', function (obj) {
+                    var event = obj.event;
+                    self[event].call(this, obj);
+                });
+            },
+            loadTable1: function () {
+                var self = this;
+                layui.table.render({
+                    elem: '#table1', // 指定原始表格元素选择器(推荐id选择器)
+                    even: true,
+                    cols: [[ // 设置表头
+                        { type: 'numbers', fixed: 'left', align: '5%',title:'序号' , width: 44},
+                        {
+                            field: 'title', title: '单位名称', width: '15%', templet: function (row) {
+                                if (row.title != null) {
+                                    return '<span title="' + row.title + '">' + row.title + '</span>';
+                                }
+                                return ""
+                            }
+                        },
+                        { field: 'status', title: '状态', width: '7%' },
+                        {
+                            field: 'area', title: '所在区县', width: '8%', templet: function (row) {
+                                if (row.area != null) {
+                                    return '<span title="' + row.area + '">' + row.area + '</span>';
+                                }
+                                return ""
+                            }
+                        },
+                        { field: 'dateFound', title: '成立日期', width: '9%' },
+                        { field: 'amt', title: '注册资金', width: '8%' },
+                        { field: 'unitPropName', title: '单位性质', width: '8%' },
+                        { field: 'unitKindName', title: '单位类型', width: '8%' },
+                        { field: 'nameJur1', title: '法人', width: '7%' },
+                        { field: 'simCode', title: '联系电话', width: '10%' },
+                        {
+                            field: 'reason', title: '退回原因', width: '10%', templet: function (row) {
+                                if (row.reason != null) {
+                                    return '<span title="' + row.reason + '">' + row.reason + '</span>';
+                                }
+                                return "";
+                            }
+                        },
+                        { title: '操作', width: '6%', align: 'center', toolbar: '#currentTableBar1' }
+                    ]],
+                    data: self.dataList,
+                });
+                layui.table.on('tool(' + this.tableName + ')', function (obj) {
+                    var event = obj.event;
+                    self[event].call(this, obj);
+                });
+            }
+        }
+    });
+</script>
+</body>
+</html>

+ 1 - 1
projects/src/main/webapp/vmodules/subject/subInfo/tz/year_extend.jsp

@@ -1222,7 +1222,7 @@
 
                 addSub: function (index, data) {
                     var self = this;
-                    App.msg.confirm("是否纳入年度固定资产投资项目库?", function () {
+                    App.msg.confirm("是否纳入重点项目库?", function () {
                         App.postJson("/api/subject/subInfo/setIsFix", {
                             subId: data.id,
                             year: data.year,

+ 1 - 1
projects/src/main/webapp/vmodules/subject/subInfo/tz/year_new.jsp

@@ -1218,7 +1218,7 @@
 
                 addSub: function (index, data) {
                     var self = this;
-                    App.msg.confirm("是否纳入年度固定资产投资项目库?", function () {
+                    App.msg.confirm("是否纳入重点项目库?", function () {
                         App.postJson("/api/subject/subInfo/setIsFix", {
                             subId: data.id,
                             year: data.year,

+ 1 - 1
projects/src/main/webapp/vmodules/subject/subInfo/tz/year_reserve.jsp

@@ -1188,7 +1188,7 @@
 
                 addSub: function (index, data) {
                     var self = this;
-                    App.msg.confirm("是否纳入年度固定资产投资项目库?", function () {
+                    App.msg.confirm("是否纳入重点项目库?", function () {
                         App.postJson("/api/subject/subInfo/setIsFix", {
                             subId: data.id,
                             year: data.year,

+ 1 - 1
projects/src/main/webapp/vmodules/subject/subInfo/tz/year_sum.jsp

@@ -1233,7 +1233,7 @@
 
                 addSub: function (index, data) {
                     var self = this;
-                    App.msg.confirm("是否纳入年度固定资产投资项目库?", function () {
+                    App.msg.confirm("是否纳入重点项目库?", function () {
                         App.postJson("/api/subject/subInfo/setIsFix", {
                             subId: data.id,
                             year: data.year,