4 Commits 2416334bb2 ... 69da71e85c

Author SHA1 Message Date
  Wayne 69da71e85c Merge branch 'master' of http://8.137.121.180:10880/longping/subject_gxj 10 months ago
  Wayne a62ccd8266 新增项目转换统计 10 months ago
  Wayne 49aea5d33f 四库操作新增日志写入功能 10 months ago
  Wayne 96e359d0aa 重点库新增搜索行业功能 10 months ago
18 changed files with 569 additions and 76 deletions
  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,