Browse Source

44444444444

zhoulisky 10 months ago
parent
commit
a578e48c55

File diff suppressed because it is too large
+ 15 - 4
doc/sql/kd_dev.sql


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

@@ -1,6 +1,7 @@
 
 package org.sky.scientific.pojo.entity;
 
+import com.fasterxml.jackson.annotation.JsonFormat;
 import jakarta.validation.constraints.NotBlank;
 import jakarta.validation.constraints.NotEmpty;
 import jakarta.validation.constraints.NotNull;
@@ -10,6 +11,8 @@ import com.baomidou.mybatisplus.annotation.TableName;
 import lombok.EqualsAndHashCode;
 import org.sky.core.tenant.mp.TenantEntity;
 import org.sky.core.tool.jackson.Sensitive;
+import org.sky.core.tool.utils.DateUtil;
+import org.springframework.format.annotation.DateTimeFormat;
 
 import java.io.Serial;
 import java.util.Date;
@@ -51,10 +54,14 @@ public class XmEntity extends TenantEntity {
 
 //	@NotNull(message = "请选择研发开始时间")
 	@Schema(description = "研发开始时间")
+	@DateTimeFormat(pattern = DateUtil.PATTERN_DATE)
+	@JsonFormat(pattern = DateUtil.PATTERN_DATE)
 	private Date xmkssj;
 
 //	@NotNull(message = "请选择研发结束时间")
 	@Schema(description = "研发结束时间")
+	@DateTimeFormat(pattern = DateUtil.PATTERN_DATE)
+	@JsonFormat(pattern = DateUtil.PATTERN_DATE)
 	private Date xmjssj;
 
 //	@NotBlank(message = "请选择项目来源")

+ 1 - 1
kd-service-api/kd-scientific-api/src/main/java/org/sky/scientific/pojo/entity/ZcEntity.java

@@ -48,7 +48,7 @@ public class ZcEntity extends TenantEntity {
 	 * 功率
 	 */
 	@Schema(description = "功率")
-	private Integer gl;
+	private String gl;
 	/**
 	 * 用途
 	 */

+ 28 - 41
kd-service/kd-scientific/src/main/java/org/sky/scientific/controller/ZcController.java

@@ -16,6 +16,10 @@ import org.sky.core.secure.annotation.IsAdmin;
 import org.sky.core.tool.api.R;
 import org.sky.core.tool.utils.DateUtil;
 import org.sky.core.tool.utils.Func;
+import org.sky.scientific.excel.TechnicianExcel;
+import org.sky.scientific.excel.TechnicianImporter;
+import org.sky.scientific.pojo.dto.TechnicianDTO;
+import org.sky.scientific.pojo.dto.ZcDTO;
 import org.springframework.web.bind.annotation.*;
 import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
 import com.baomidou.mybatisplus.core.metadata.IPage;
@@ -28,6 +32,7 @@ import org.sky.core.boot.ctrl.KdController;
 import java.util.Map;
 import java.util.List;
 import jakarta.servlet.http.HttpServletResponse;
+import org.springframework.web.multipart.MultipartFile;
 
 /**
  * 资产表 控制器
@@ -38,10 +43,10 @@ import jakarta.servlet.http.HttpServletResponse;
 @RestController
 @AllArgsConstructor
 @RequestMapping("/zc")
-@Tag(name = "资产表", description = "资产表接口")
+@Tag(name = "科研资产管理", description = "资产表接口")
 public class ZcController extends KdController {
 
-	private final IZcService zcService;
+	private final IZcService service;
 
 	/**
 	 * 资产表 详情
@@ -50,86 +55,68 @@ public class ZcController extends KdController {
 	@ApiOperationSupport(order = 1)
 	@Operation(summary = "详情", description  = "传入zc")
 	public R<ZcVO> detail(ZcEntity zc) {
-		ZcEntity detail = zcService.getOne(Condition.getQueryWrapper(zc));
+		ZcEntity detail = service.getOne(Condition.getQueryWrapper(zc));
 		return R.data(ZcWrapper.build().entityVO(detail));
 	}
-	/**
-	 * 资产表 分页
-	 */
-	@GetMapping("/list")
-	@ApiOperationSupport(order = 2)
-	@Operation(summary = "分页", description  = "传入zc")
-	public R<IPage<ZcVO>> list(@Parameter(hidden = true) @RequestParam Map<String, Object> zc, Query query) {
-		IPage<ZcEntity> pages = zcService.page(Condition.getPage(query), Condition.getQueryWrapper(zc, ZcEntity.class));
-		return R.data(ZcWrapper.build().pageVO(pages));
-	}
 
-	/**
-	 * 资产表 自定义分页
-	 */
 	@GetMapping("/page")
 	@ApiOperationSupport(order = 3)
 	@Operation(summary = "分页", description  = "传入zc")
 	public R<IPage<ZcVO>> page(ZcVO zc, Query query) {
-		IPage<ZcVO> pages = zcService.selectZcPage(Condition.getPage(query), zc);
+		IPage<ZcVO> pages = service.selectZcPage(Condition.getPage(query), zc);
 		return R.data(pages);
 	}
 
-	/**
-	 * 资产表 新增
-	 */
 	@PostMapping("/save")
 	@ApiOperationSupport(order = 4)
 	@Operation(summary = "新增", description  = "传入zc")
 	public R save(@Valid @RequestBody ZcEntity zc) {
-		return R.status(zcService.save(zc));
+		return R.status(service.save(zc));
 	}
 
-	/**
-	 * 资产表 修改
-	 */
 	@PostMapping("/update")
 	@ApiOperationSupport(order = 5)
 	@Operation(summary = "修改", description  = "传入zc")
 	public R update(@Valid @RequestBody ZcEntity zc) {
-		return R.status(zcService.updateById(zc));
+		return R.status(service.updateById(zc));
 	}
 
-	/**
-	 * 资产表 新增或修改
-	 */
 	@PostMapping("/submit")
 	@ApiOperationSupport(order = 6)
 	@Operation(summary = "新增或修改", description  = "传入zc")
 	public R submit(@Valid @RequestBody ZcEntity zc) {
-		return R.status(zcService.saveOrUpdate(zc));
+		return R.status(service.saveOrUpdate(zc));
 	}
 
-	/**
-	 * 资产表 删除
-	 */
 	@PostMapping("/remove")
 	@ApiOperationSupport(order = 7)
 	@Operation(summary = "逻辑删除", description  = "传入ids")
 	public R remove(@Parameter(description = "主键集合", required = true) @RequestParam String ids) {
-		return R.status(zcService.deleteLogic(Func.toLongList(ids)));
+		return R.status(service.deleteLogic(Func.toLongList(ids)));
 	}
 
+	@PostMapping("import")
+	@ApiOperationSupport(order = 12)
+	@Operation(summary = "导入", description = "传入excel")
+	public R importZc(MultipartFile file, String yearAndMonth) {
+		service.importZc(file, yearAndMonth);
+		return R.success("操作成功");
+	}
+
+	@GetMapping("/fetchLastMonthData")
+	@ApiOperationSupport(order = 10)
+	@Operation(summary = "读取上个月资产名单", description = "传入选中的年月,比如2025-06,则读取2025-05的数据到06月")
+	public R<Boolean> fetchLastMonthData(ZcDTO zc) {
+		return R.status(service.fetchLastMonthData(zc));
+	}
 
-	/**
-	 * 导出数据
-	 */
 	@IsAdmin
 	@GetMapping("/export-zc")
 	@ApiOperationSupport(order = 9)
 	@Operation(summary = "导出数据", description  = "传入zc")
 	public void exportZc(@Parameter(hidden = true) @RequestParam Map<String, Object> zc, KdUser kdUser, HttpServletResponse response) {
 		QueryWrapper<ZcEntity> queryWrapper = Condition.getQueryWrapper(zc, ZcEntity.class);
-		//if (!AuthUtil.isAdministrator()) {
-		//	queryWrapper.lambda().eq(Zc::getTenantId, kdUser.getTenantId());
-		//}
-		//queryWrapper.lambda().eq(ZcEntity::getIsDeleted, KdConstant.DB_NOT_DELETED);
-		List<ZcExcel> list = zcService.exportZc(queryWrapper);
+		List<ZcExcel> list = service.exportZc(queryWrapper);
 		ExcelUtil.export(response, "资产表数据" + DateUtil.time(), "资产表数据表", list, ZcExcel.class);
 	}
 

+ 15 - 58
kd-service/kd-scientific/src/main/java/org/sky/scientific/excel/ZcExcel.java

@@ -28,95 +28,52 @@ public class ZcExcel implements Serializable {
 	@Serial
 	private static final long serialVersionUID = 1L;
 
-	/**
-	 * 主键
-	 */
-	@ColumnWidth(20)
-	@ExcelProperty("主键")
-	private Long id;
-	/**
-	 * 租户ID
-	 */
-	@ColumnWidth(20)
-	@ExcelProperty("租户ID")
-	private String tenantId;
-	/**
-	 * 资产编码
-	 */
 	@ColumnWidth(20)
 	@ExcelProperty("资产编码")
 	private String zcbm;
-	/**
-	 * 资产名称
-	 */
+
 	@ColumnWidth(20)
 	@ExcelProperty("资产名称")
 	private String zcmc;
-	/**
-	 * 所属年月
-	 */
+
 	@ColumnWidth(20)
 	@ExcelProperty("所属年月")
 	private String yearAndMonth;
-	/**
-	 * 资产类别
-	 */
+
 	@ColumnWidth(20)
 	@ExcelProperty("资产类别")
 	private String zclb;
-	/**
-	 * 功率
-	 */
+
 	@ColumnWidth(20)
 	@ExcelProperty("功率")
-	private Integer gl;
-	/**
-	 * 用途
-	 */
+	private String gl;
+
 	@ColumnWidth(20)
 	@ExcelProperty("用途")
 	private String yt;
-	/**
-	 * 开始日期
-	 */
+
 	@ColumnWidth(20)
 	@ExcelProperty("开始日期")
 	private Date kssj;
-	/**
-	 * 使用寿命/月
-	 */
+
 	@ColumnWidth(20)
 	@ExcelProperty("使用寿命/月")
 	private Integer sysm;
-	/**
-	 * 已使用月数
-	 */
+
 	@ColumnWidth(20)
 	@ExcelProperty("已使用月数")
 	private Integer ysysm;
-	/**
-	 * 资产原值(元)
-	 */
+
 	@ColumnWidth(20)
-	@ExcelProperty("资产原值(元)")
+	@ExcelProperty("资产原值")
 	private Integer zcyz;
-	/**
-	 * 净残值(%)
-	 */
+
 	@ColumnWidth(20)
-	@ExcelProperty("净残值(%)")
+	@ExcelProperty("净残值")
 	private Double jcz;
-	/**
-	 * 月折旧额/月摊销额(元)
-	 */
+
 	@ColumnWidth(20)
-	@ExcelProperty("月折旧额/月摊销额(元)")
+	@ExcelProperty("月折旧额/月摊销额")
 	private Integer yzje;
-	/**
-	 * 是否已删除
-	 */
-	@ColumnWidth(20)
-	@ExcelProperty("是否已删除")
-	private Integer isDeleted;
 
 }

+ 16 - 0
kd-service/kd-scientific/src/main/java/org/sky/scientific/service/IZcService.java

@@ -2,11 +2,14 @@
 package org.sky.scientific.service;
 
 import com.baomidou.mybatisplus.core.conditions.Wrapper;
+import org.sky.scientific.pojo.dto.ZcDTO;
 import org.sky.scientific.pojo.entity.ZcEntity;
 import org.sky.scientific.pojo.vo.ZcVO;
 import org.sky.scientific.excel.ZcExcel;
 import com.baomidou.mybatisplus.core.metadata.IPage;
 import org.sky.core.mp.base.BaseService;
+import org.springframework.web.multipart.MultipartFile;
+
 import java.util.List;
 
 /**
@@ -34,4 +37,17 @@ public interface IZcService extends BaseService<ZcEntity> {
 	 */
 	List<ZcExcel> exportZc(Wrapper<ZcEntity> queryWrapper);
 
+	/**
+	 * 导入
+	 * @param file
+	 * @param yearAndMonth
+	 */
+    void importZc(MultipartFile file, String yearAndMonth);
+
+	/**
+	 * 读取上个月资产名单
+	 * @param zc
+	 * @return
+	 */
+	boolean fetchLastMonthData(ZcDTO zc);
 }

+ 67 - 1
kd-service/kd-scientific/src/main/java/org/sky/scientific/service/impl/ZcServiceImpl.java

@@ -1,6 +1,19 @@
 
 package org.sky.scientific.service.impl;
 
+import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
+import com.baomidou.mybatisplus.core.toolkit.Wrappers;
+import lombok.extern.slf4j.Slf4j;
+import org.sky.core.excel.util.ExcelUtil;
+import org.sky.core.log.exception.ServiceException;
+import org.sky.core.tool.utils.BeanUtil;
+import org.sky.core.tool.utils.CollectionUtil;
+import org.sky.core.tool.utils.DateUtil;
+import org.sky.scientific.excel.CgRjzzqExcel;
+import org.sky.scientific.pojo.dto.CgRjzzqDTO;
+import org.sky.scientific.pojo.dto.ZcDTO;
+import org.sky.scientific.pojo.entity.CgRjzzqEntity;
+import org.sky.scientific.pojo.entity.TechnicianEntity;
 import org.sky.scientific.pojo.entity.ZcEntity;
 import org.sky.scientific.pojo.vo.ZcVO;
 import org.sky.scientific.excel.ZcExcel;
@@ -10,7 +23,11 @@ import org.springframework.stereotype.Service;
 import com.baomidou.mybatisplus.core.conditions.Wrapper;
 import com.baomidou.mybatisplus.core.metadata.IPage;
 import org.sky.core.mp.base.BaseServiceImpl;
+import org.springframework.transaction.annotation.Transactional;
+import org.springframework.web.multipart.MultipartFile;
+
 import java.util.List;
+import java.util.Objects;
 
 /**
  * 资产表 服务实现类
@@ -18,6 +35,7 @@ import java.util.List;
  * @author Kd
  * @since 2025-06-29
  */
+@Slf4j
 @Service
 public class ZcServiceImpl extends BaseServiceImpl<ZcMapper, ZcEntity> implements IZcService {
 
@@ -26,8 +44,57 @@ public class ZcServiceImpl extends BaseServiceImpl<ZcMapper, ZcEntity> implement
 		return page.setRecords(baseMapper.selectZcPage(page, zc));
 	}
 
+	@Override
+	public void importZc(MultipartFile file, String yearAndMonth) {
+
+		List<ZcExcel> data = ExcelUtil.read(file, ZcExcel.class);
+
+		for (ZcExcel excel : data) {
+			ZcEntity zc = Objects.requireNonNull(BeanUtil.copyProperties(excel, ZcDTO.class));
+			zc.setYearAndMonth(yearAndMonth);
+			//yearAndMonth 是否存在该物资
+			LambdaQueryWrapper<ZcEntity> queryWrapper = Wrappers.lambdaQuery();
+			queryWrapper.eq(ZcEntity::getZcbm, excel.getZcbm());
+			queryWrapper.eq(ZcEntity::getYearAndMonth, yearAndMonth);
+			if (this.count(queryWrapper) > 0) {
+				throw new ServiceException("资产编号【" + excel.getZcbm() + "】已存在");
+			}
+			this.save(zc);
+		}
+	}
+
+	@Transactional
+	@Override
+	public boolean fetchLastMonthData(ZcDTO zc) {
+		//查询上个月的数据
+		//得到上个月的年月
+		String lastDate = DateUtil.format(DateUtil.minusMonths(DateUtil.parse(zc.getYearAndMonth(), DateUtil.PATTERN_YYYYMM), 1), DateUtil.PATTERN_YYYYMM);
+		LambdaQueryWrapper<ZcEntity> queryWrapper = Wrappers.<ZcEntity>lambdaQuery().eq(ZcEntity::getYearAndMonth, lastDate);
+		List<ZcEntity> lastMonthDataList = this.baseMapper.selectList(queryWrapper);
+		if (CollectionUtil.isEmpty(lastMonthDataList)) {
+			throw new ServiceException("上个月资产数据为空");
+		}
+		//与本月数据对比,去重后保存至数据库
+//		Integer okCount = 0;
+		for (ZcEntity temp : lastMonthDataList) {
+			LambdaQueryWrapper<ZcEntity> qw = Wrappers.<ZcEntity>lambdaQuery().eq(ZcEntity::getZcbm, temp.getZcbm()).eq(ZcEntity::getYearAndMonth, zc.getYearAndMonth());
+			if (this.baseMapper.selectCount(qw) > 0) {
+				throw new ServiceException("资产【" + temp.getZcbm() + "】已存在");
+//				log.info("资产【{}】已存在, 年月【{}】", temp.getZcbm(), zc.getYearAndMonth());
+//				continue;
+			} else {
+//				okCount++;
+				temp.setYearAndMonth(zc.getYearAndMonth());
+				temp.setId(null);
+				this.save(temp);
+			}
+		}
+//		log.info("{}共{}个资产,成功导入【{}】条数据", lastDate, lastMonthDataList.size(), okCount);
+		return true;
+	}
 
 	@Override
+
 	public List<ZcExcel> exportZc(Wrapper<ZcEntity> queryWrapper) {
 		List<ZcExcel> zcList = baseMapper.exportZc(queryWrapper);
 		//zcList.forEach(zc -> {
@@ -35,5 +102,4 @@ public class ZcServiceImpl extends BaseServiceImpl<ZcMapper, ZcEntity> implement
 		//});
 		return zcList;
 	}
-
 }