Browse Source

000000020

zhoulisky 6 months ago
parent
commit
68cd277d83

+ 10 - 4
kd-service/kd-scientific/src/main/java/org/sky/scientific/controller/SubjectController.java

@@ -3,7 +3,6 @@ package org.sky.scientific.controller;
 import com.baomidou.mybatisplus.core.metadata.IPage;
 import com.github.xiaoymin.knife4j.annotations.ApiOperationSupport;
 import io.swagger.v3.oas.annotations.Operation;
-import io.swagger.v3.oas.annotations.Parameter;
 import io.swagger.v3.oas.annotations.tags.Tag;
 import jakarta.servlet.http.HttpServletResponse;
 import jakarta.validation.Valid;
@@ -13,6 +12,7 @@ import org.sky.core.mp.support.Condition;
 import org.sky.core.mp.support.Query;
 import org.sky.core.tenant.annotation.NonDS;
 import org.sky.core.tool.api.R;
+import org.sky.scientific.pojo.dto.SubjectQueryDto;
 import org.sky.scientific.pojo.entity.Subject;
 import org.sky.scientific.pojo.entity.SubjectEnterprise;
 import org.sky.scientific.pojo.vo.SubjectVO;
@@ -21,7 +21,6 @@ import org.springframework.web.bind.annotation.*;
 import org.springframework.web.multipart.MultipartFile;
 
 import java.util.List;
-import java.util.Map;
 
 
 /**
@@ -40,11 +39,18 @@ public class SubjectController extends KdController {
 	@GetMapping("/lazy-list")
 	@ApiOperationSupport(order = 2)
 	@Operation(summary = "研发费用会计科目设置-懒加载列表")
-	public R<List<SubjectVO>> lazyList(Long parentId, @Parameter(hidden = true) @RequestParam Map<String, Object> subject){
-		List<SubjectVO> list = service.lazyList(parentId, subject);
+	public R<List<SubjectVO>> lazyList( SubjectQueryDto subject){
+		List<SubjectVO> list = service.lazyList(subject);
 		return R.data(list);
 	}
 
+	@PostMapping("/export")
+	@ApiOperationSupport(order = 3)
+	@Operation(summary = "研发费用会计科目设置-导出")
+	public void exportSubject(HttpServletResponse response, @RequestBody SubjectQueryDto dto) {
+		service.exportSubject(response, dto);
+	}
+
 	@PostMapping("submit")
 	@ApiOperationSupport(order = 4)
 	@Operation(summary = "研发费用会计科目设置-新增或修改")

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

@@ -3,11 +3,11 @@ package org.sky.scientific.mapper;
 import com.baomidou.mybatisplus.core.mapper.BaseMapper;
 import org.apache.ibatis.annotations.Param;
 import org.sky.core.tenant.annotation.TenantIgnore;
+import org.sky.scientific.pojo.dto.SubjectQueryDto;
 import org.sky.scientific.pojo.entity.Subject;
 import org.sky.scientific.pojo.vo.SubjectVO;
 
 import java.util.List;
-import java.util.Map;
 
 
 /**
@@ -16,13 +16,12 @@ import java.util.Map;
 public interface SubjectMapper extends BaseMapper<Subject> {
 
 	@TenantIgnore
-	List<SubjectVO> lazyList(@Param("tenantId") String tenantId, @Param("parentId") Long parentId, @Param("menu") Map<String, Object> menu);
+	List<SubjectVO> lazyList(@Param("tenantId") String tenantId, @Param("ew") SubjectQueryDto sub);
 
 	boolean deleteSubject(Long subjectId);
 
 	Subject getByName(@Param("name") String name, @Param("parentId") Long parentId, @Param("tenantId") String tenantId);
 
-//	Subject getByCode(@Param("code") String code, @Param("parentId") Long parentId, @Param("tenantId") String tenantId);
 
 	String getMaxCode(@Param("parentId") Long parentId, @Param("tenantId") String tenantId);
 }

+ 2 - 3
kd-service/kd-scientific/src/main/java/org/sky/scientific/mapper/SubjectMapper.xml

@@ -67,9 +67,8 @@
         FROM
             kd_subject sub
         where (sub.type=1 or (sub.type=0 and sub.tenant_id = #{tenantId}))
-        <if test="parentId != null">and parent_id = #{parentId}</if>
-        <if test="menu.code!=null and menu.code !=''">and code like concat('%',#{menu.code},'%')</if>
-        <if test="menu.name!=null and menu.name !=''">and name like concat('%',#{menu.name},'%')</if>
+        <if test="ew.code!=null and ew.code !=''">and code like concat('%',#{ew.code},'%')</if>
+        <if test="ew.name!=null and ew.name !=''">and name like concat('%',#{ew.name},'%')</if>
         order by code asc
      </select>
 </mapper>

+ 5 - 3
kd-service/kd-scientific/src/main/java/org/sky/scientific/service/ISubjectService.java

@@ -3,23 +3,24 @@ package org.sky.scientific.service;
 import com.baomidou.mybatisplus.core.metadata.IPage;
 import com.baomidou.mybatisplus.extension.service.IService;
 import jakarta.servlet.http.HttpServletResponse;
+import org.sky.scientific.pojo.dto.SubjectQueryDto;
 import org.sky.scientific.pojo.entity.Subject;
 import org.sky.scientific.pojo.entity.SubjectEnterprise;
 import org.sky.scientific.pojo.vo.SubjectVO;
 import org.springframework.web.multipart.MultipartFile;
 
 import java.util.List;
-import java.util.Map;
 
 /**
  * 服务类
  */
 public interface ISubjectService extends IService<Subject> {
 
-	List<SubjectVO> lazyList( Long parentId, Map<String, Object> subject);
+	List<SubjectVO> lazyList(SubjectQueryDto subject);
 
 	/**
 	 * 企业会计科目列表
+	 *
 	 * @param page
 	 * @param subjectEnterprise
 	 * @return
@@ -36,6 +37,7 @@ public interface ISubjectService extends IService<Subject> {
 
 	boolean deleteSubjectEnterprise(Long id);
 
-	void exportSubjectEnterprise(HttpServletResponse response,SubjectEnterprise dto);
+	void exportSubjectEnterprise(HttpServletResponse response, SubjectEnterprise dto);
 
+	void exportSubject(HttpServletResponse response, SubjectQueryDto dto);
 }

+ 85 - 18
kd-service/kd-scientific/src/main/java/org/sky/scientific/service/impl/SubjectServiceImpl.java

@@ -25,6 +25,7 @@ import org.sky.scientific.excel.SubjectEnterpriseExcel;
 import org.sky.scientific.mapper.SubjectEnterpriseMapper;
 import org.sky.scientific.mapper.SubjectMapper;
 import org.sky.scientific.mapper.XmCostDetailsMapper;
+import org.sky.scientific.pojo.dto.SubjectQueryDto;
 import org.sky.scientific.pojo.entity.Subject;
 import org.sky.scientific.pojo.entity.SubjectEnterprise;
 import org.sky.scientific.pojo.entity.XmCostDetailsEntity;
@@ -37,7 +38,6 @@ import java.io.InputStream;
 import java.net.URLEncoder;
 import java.util.ArrayList;
 import java.util.List;
-import java.util.Map;
 import java.util.Objects;
 import java.util.concurrent.atomic.AtomicInteger;
 
@@ -54,11 +54,8 @@ public class SubjectServiceImpl extends ServiceImpl<SubjectMapper, Subject> impl
 	private final XmCostDetailsMapper xmCostDetailsMapper;
 
 	@Override
-	public List<SubjectVO> lazyList(Long parentId, Map<String, Object> subject) {
-		if (Func.isEmpty(Func.toStr(subject.get(PARENT_ID)))) {
-			parentId = null;
-		}
-		List<SubjectVO> list = baseMapper.lazyList(SecureUtil.getTenantId(), parentId, subject);
+	public List<SubjectVO> lazyList(SubjectQueryDto subject) {
+		List<SubjectVO> list = baseMapper.lazyList(SecureUtil.getTenantId(), subject);
 		return ForestNodeMerger.merge(list);
 	}
 
@@ -72,7 +69,7 @@ public class SubjectServiceImpl extends ServiceImpl<SubjectMapper, Subject> impl
 	public boolean submitSubject(Subject subject) {
 		subject.setTenantId(SecureUtil.getTenantId());
 		Subject dbByName = baseMapper.getByName(subject.getName(), subject.getParentId(), SecureUtil.getTenantId());
- 		if (Func.isEmpty(subject.getId())) {
+		if (Func.isEmpty(subject.getId())) {
 			//新增
 			if (dbByName != null) {
 				throw new ServiceException("科目名称已存在");
@@ -138,12 +135,92 @@ public class SubjectServiceImpl extends ServiceImpl<SubjectMapper, Subject> impl
 
 	@Override
 	public boolean deleteSubjectEnterprise(Long id) {
-		if(xmCostDetailsMapper.selectCount(Wrappers.<XmCostDetailsEntity>lambdaQuery().eq(XmCostDetailsEntity::getESubjectId, id)) > 0){
+		if (xmCostDetailsMapper.selectCount(Wrappers.<XmCostDetailsEntity>lambdaQuery().eq(XmCostDetailsEntity::getESubjectId, id)) > 0) {
 			throw new ServiceException("企业研发支出明细账中引用了该科目,无法删除");
 		}
 		return subjectEnterpriseMapper.deleteById(id) > 0;
 	}
 
+
+	@SneakyThrows
+	@Override
+	public void exportSubject(HttpServletResponse response, SubjectQueryDto dto) {
+
+		List<SubjectVO> list = this.lazyList(dto);
+		List<JSONObject> resultList = new ArrayList<>();
+		traverseSubjectTree(list.get(0), null, null, null, null, 1, resultList);
+
+		AtomicInteger index = new AtomicInteger(1);
+ 		for (JSONObject obj : resultList) {
+ 			obj.put("xh", index.getAndIncrement() + "");
+ 		}
+
+		InputStream templateFileName = this.getClass().getClassLoader().getResourceAsStream("export-template/基础资源管理/系统预设会计科目.xls");
+		response.setContentType("application/vnd.ms-excel");
+		response.setCharacterEncoding("utf-8");
+		response.addHeader("Content-Disposition", "attachment;filename=" + URLEncoder.encode("系统预设会计科目.xls", Charsets.UTF_8));
+		ExcelWriter excelWriter = EasyExcel.write(response.getOutputStream())
+			.withTemplate((templateFileName))
+			.excelType(ExcelTypeEnum.XLS)
+			.build();
+
+		WriteSheet writeSheet = EasyExcel.writerSheet().build();
+		//设置list集合数据
+		excelWriter.fill(resultList, writeSheet);
+		excelWriter.finish();
+		if (templateFileName != null) {
+			templateFileName.close();
+		}
+	}
+
+	private static void traverseSubjectTree(SubjectVO currentNode,
+											String l1, String l2,
+											String l3, String l4,int currentLevel,
+											List<JSONObject> result) {
+		if (currentNode == null) {
+			return;
+		}
+
+		// 更新各级名称
+		String newL1 = l1;
+		String newL2 = l2;
+		String newL3 = l3;
+		String newL4 = l4;
+
+		switch (currentLevel) {
+			case 1: // 一级科目
+				newL1 = currentNode.getName();
+				break;
+			case 2: // 二级科目
+				newL2 = currentNode.getName();
+				break;
+			case 3: // 三级科目
+				newL3 = currentNode.getName();
+				break;
+			case 4: // 四级科目
+				newL4 = currentNode.getName();
+				break;
+		}
+
+		// 将当前节点信息添加到结果集
+		JSONObject node = new JSONObject();
+		node.put("l1", newL1);
+		node.put("l2", newL2);
+		node.put("l3", newL3);
+		node.put("l4", newL4);
+
+		node.put("code", currentNode.getCode());
+		node.put("name", currentNode.getName());
+		result.add(node);
+
+		// 递归处理子节点
+		if (currentNode.getChildren() != null && !currentNode.getChildren().isEmpty()) {
+			for (SubjectVO child : currentNode.getChildren()) {
+				traverseSubjectTree(child, newL1, newL2, newL3, newL4, currentLevel+1, result);
+			}
+		}
+	}
+
 	@SneakyThrows
 	@Override
 	public void exportSubjectEnterprise(HttpServletResponse response, SubjectEnterprise dto) {
@@ -183,27 +260,17 @@ public class SubjectServiceImpl extends ServiceImpl<SubjectMapper, Subject> impl
 
 	@Override
 	public boolean submitSubjectEnterprise(SubjectEnterprise subjectEnterprise) {
-//		SubjectEnterprise dbEntityByName = subjectEnterpriseMapper.selectOne(Wrappers.<SubjectEnterprise>lambdaQuery()
-//			.eq(SubjectEnterprise::getName, subjectEnterprise.getName()));
-
 		List<SubjectEnterprise> dbListByCode = subjectEnterpriseMapper.selectList(Wrappers.<SubjectEnterprise>lambdaQuery()
 			.eq(SubjectEnterprise::getCode, subjectEnterprise.getCode()));
 
 		if (Func.isNull(subjectEnterprise.getId())) {
 			//新增
-//			if (dbEntityByName != null && Func.equals(dbEntityByName.getName(), subjectEnterprise.getName())) {
-//				throw new ServiceException("科目名称已存在");
-//			}
 			if (Func.isNotEmpty(dbListByCode) && Func.equals(dbListByCode.get(0).getCode(), subjectEnterprise.getCode())) {
 				throw new ServiceException("科目代码已存在");
 			}
 			subjectEnterprise.setTenantId(SecureUtil.getTenantId());
 			return subjectEnterpriseMapper.insert(subjectEnterprise) == 1;
 		} else {
-			//修改
-//			if (dbEntityByName != null && Func.equals(dbEntityByName.getName(), subjectEnterprise.getName()) && !Func.equals(dbEntityByName.getId(), subjectEnterprise.getId())) {
-//				throw new ServiceException("科目名称已存在");
-//			}
 			if (Func.isNotEmpty(dbListByCode) && Func.equals(dbListByCode.get(0).getCode(), subjectEnterprise.getCode()) && !Func.equals(dbListByCode.get(0).getId(), subjectEnterprise.getId())) {
 				throw new ServiceException("科目代码已存在");
 			}

BIN
kd-service/kd-scientific/src/main/resources/export-template/基础资源管理/系统预设会计科目.xlsx