diff --git a/casic-metering-api/src/main/java/com/casic/missiles/controller/MeterFixedAssetsController.java b/casic-metering-api/src/main/java/com/casic/missiles/controller/MeterFixedAssetsController.java
new file mode 100644
index 0000000..a5dc19f
--- /dev/null
+++ b/casic-metering-api/src/main/java/com/casic/missiles/controller/MeterFixedAssetsController.java
@@ -0,0 +1,80 @@
+package com.casic.missiles.controller;
+
+import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
+import com.casic.missiles.core.base.controller.ExportController;
+import com.casic.missiles.core.page.PageFactory;
+import com.casic.missiles.core.page.PageInfoBT;
+import com.casic.missiles.dto.IdDTO;
+import com.casic.missiles.dto.ReturnDTO;
+import com.casic.missiles.dto.ReturnUtil;
+import com.casic.missiles.dto.meter.FixedAssetRequest;
+import com.casic.missiles.model.MeterFixedAssets;
+import com.casic.missiles.service.IMeterFixedAssetsService;
+import com.casic.missiles.utils.DictCodeUtils;
+import io.swagger.annotations.Api;
+import io.swagger.annotations.ApiOperation;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.web.bind.annotation.*;
+
+import javax.validation.Valid;
+
+/**
+ *
+ * 固定资产Controller
+ *
+ *
+ * @author cuicheng
+ * @since 2022-12-07
+ */
+@Api(tags = "固定资产管理接口")
+@RestController
+@RequestMapping("/meter/assets")
+public class MeterFixedAssetsController extends ExportController {
+
+ /**
+ * 固定资产service
+ */
+ @Autowired
+ private IMeterFixedAssetsService iMeterFixedAssetsService;
+ /**
+ * 计量组织列表
+ */
+ @ApiOperation("固定资产(分页)")
+ @PostMapping("/listPage")
+ @ResponseBody
+ public ReturnDTO> listPage(@RequestBody @Valid FixedAssetRequest request) throws Exception {
+ Page page = PageFactory.defaultPage();
+ DictCodeUtils.validDictCode(request);
+ return ReturnUtil.success(super.packForBT(iMeterFixedAssetsService.listPage(page, request)));
+ }
+ /**
+ * 固定资产更新
+ */
+ @ApiOperation("固定资产更新")
+ @PostMapping("/update")
+ @ResponseBody
+ public ReturnDTO update(@RequestBody @Valid MeterFixedAssets meterFixedAssets) {
+ return iMeterFixedAssetsService.updateFixedAsset(meterFixedAssets);
+ }
+ /**
+ * 固定资产详情
+ */
+ @ApiOperation("固定资产详情")
+ @PostMapping("/detail")
+ @ResponseBody
+ public ReturnDTO detail(@RequestBody @Valid IdDTO idDTO) {
+ return ReturnUtil.success(iMeterFixedAssetsService.getById(idDTO.getId()));
+ }
+
+ /**
+ * 刪除固定资产
+ */
+ @ApiOperation("删除固定资产")
+ @PostMapping("/delete")
+ @ResponseBody
+ public ReturnDTO delete(@RequestBody @Valid IdDTO idDTO) {
+ return iMeterFixedAssetsService.deleteByFixedAssetId(idDTO.getId());
+ }
+
+
+}
diff --git a/casic-metering-api/src/main/java/com/casic/missiles/controller/MeterFixedAssetsController.java b/casic-metering-api/src/main/java/com/casic/missiles/controller/MeterFixedAssetsController.java
new file mode 100644
index 0000000..a5dc19f
--- /dev/null
+++ b/casic-metering-api/src/main/java/com/casic/missiles/controller/MeterFixedAssetsController.java
@@ -0,0 +1,80 @@
+package com.casic.missiles.controller;
+
+import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
+import com.casic.missiles.core.base.controller.ExportController;
+import com.casic.missiles.core.page.PageFactory;
+import com.casic.missiles.core.page.PageInfoBT;
+import com.casic.missiles.dto.IdDTO;
+import com.casic.missiles.dto.ReturnDTO;
+import com.casic.missiles.dto.ReturnUtil;
+import com.casic.missiles.dto.meter.FixedAssetRequest;
+import com.casic.missiles.model.MeterFixedAssets;
+import com.casic.missiles.service.IMeterFixedAssetsService;
+import com.casic.missiles.utils.DictCodeUtils;
+import io.swagger.annotations.Api;
+import io.swagger.annotations.ApiOperation;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.web.bind.annotation.*;
+
+import javax.validation.Valid;
+
+/**
+ *
+ * 固定资产Controller
+ *
+ *
+ * @author cuicheng
+ * @since 2022-12-07
+ */
+@Api(tags = "固定资产管理接口")
+@RestController
+@RequestMapping("/meter/assets")
+public class MeterFixedAssetsController extends ExportController {
+
+ /**
+ * 固定资产service
+ */
+ @Autowired
+ private IMeterFixedAssetsService iMeterFixedAssetsService;
+ /**
+ * 计量组织列表
+ */
+ @ApiOperation("固定资产(分页)")
+ @PostMapping("/listPage")
+ @ResponseBody
+ public ReturnDTO> listPage(@RequestBody @Valid FixedAssetRequest request) throws Exception {
+ Page page = PageFactory.defaultPage();
+ DictCodeUtils.validDictCode(request);
+ return ReturnUtil.success(super.packForBT(iMeterFixedAssetsService.listPage(page, request)));
+ }
+ /**
+ * 固定资产更新
+ */
+ @ApiOperation("固定资产更新")
+ @PostMapping("/update")
+ @ResponseBody
+ public ReturnDTO update(@RequestBody @Valid MeterFixedAssets meterFixedAssets) {
+ return iMeterFixedAssetsService.updateFixedAsset(meterFixedAssets);
+ }
+ /**
+ * 固定资产详情
+ */
+ @ApiOperation("固定资产详情")
+ @PostMapping("/detail")
+ @ResponseBody
+ public ReturnDTO detail(@RequestBody @Valid IdDTO idDTO) {
+ return ReturnUtil.success(iMeterFixedAssetsService.getById(idDTO.getId()));
+ }
+
+ /**
+ * 刪除固定资产
+ */
+ @ApiOperation("删除固定资产")
+ @PostMapping("/delete")
+ @ResponseBody
+ public ReturnDTO delete(@RequestBody @Valid IdDTO idDTO) {
+ return iMeterFixedAssetsService.deleteByFixedAssetId(idDTO.getId());
+ }
+
+
+}
diff --git a/casic-metering-common/src/main/java/com/casic/missiles/enums/BusinessExceptionEnum.java b/casic-metering-common/src/main/java/com/casic/missiles/enums/BusinessExceptionEnum.java
index 1207389..048d1ae 100644
--- a/casic-metering-common/src/main/java/com/casic/missiles/enums/BusinessExceptionEnum.java
+++ b/casic-metering-common/src/main/java/com/casic/missiles/enums/BusinessExceptionEnum.java
@@ -33,7 +33,8 @@
OPERATOR_DISCOUNT_PERMISSION_NOT_EXISTENCE(2300, "业务员折扣权限不存在;"),
DIRECTOR_DISCOUNT_PERMISSION_NOT_EXISTENCE(2300, "负责人折扣权限不存在;"),
TRACE_SUPPLIER_ID_NULL(2400, "培训记录主键不能为空"),
- DUPLICATE_NUMBER(2401, "编号生成重复,请重新提交");
+ DUPLICATE_NUMBER(2401, "编号生成重复,请重新提交"),
+ DUPLICATE_MANUFACTURE_NUMBER(2401, "出厂编号重复");
private Integer code;
diff --git a/casic-metering-api/src/main/java/com/casic/missiles/controller/MeterFixedAssetsController.java b/casic-metering-api/src/main/java/com/casic/missiles/controller/MeterFixedAssetsController.java
new file mode 100644
index 0000000..a5dc19f
--- /dev/null
+++ b/casic-metering-api/src/main/java/com/casic/missiles/controller/MeterFixedAssetsController.java
@@ -0,0 +1,80 @@
+package com.casic.missiles.controller;
+
+import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
+import com.casic.missiles.core.base.controller.ExportController;
+import com.casic.missiles.core.page.PageFactory;
+import com.casic.missiles.core.page.PageInfoBT;
+import com.casic.missiles.dto.IdDTO;
+import com.casic.missiles.dto.ReturnDTO;
+import com.casic.missiles.dto.ReturnUtil;
+import com.casic.missiles.dto.meter.FixedAssetRequest;
+import com.casic.missiles.model.MeterFixedAssets;
+import com.casic.missiles.service.IMeterFixedAssetsService;
+import com.casic.missiles.utils.DictCodeUtils;
+import io.swagger.annotations.Api;
+import io.swagger.annotations.ApiOperation;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.web.bind.annotation.*;
+
+import javax.validation.Valid;
+
+/**
+ *
+ * 固定资产Controller
+ *
+ *
+ * @author cuicheng
+ * @since 2022-12-07
+ */
+@Api(tags = "固定资产管理接口")
+@RestController
+@RequestMapping("/meter/assets")
+public class MeterFixedAssetsController extends ExportController {
+
+ /**
+ * 固定资产service
+ */
+ @Autowired
+ private IMeterFixedAssetsService iMeterFixedAssetsService;
+ /**
+ * 计量组织列表
+ */
+ @ApiOperation("固定资产(分页)")
+ @PostMapping("/listPage")
+ @ResponseBody
+ public ReturnDTO> listPage(@RequestBody @Valid FixedAssetRequest request) throws Exception {
+ Page page = PageFactory.defaultPage();
+ DictCodeUtils.validDictCode(request);
+ return ReturnUtil.success(super.packForBT(iMeterFixedAssetsService.listPage(page, request)));
+ }
+ /**
+ * 固定资产更新
+ */
+ @ApiOperation("固定资产更新")
+ @PostMapping("/update")
+ @ResponseBody
+ public ReturnDTO update(@RequestBody @Valid MeterFixedAssets meterFixedAssets) {
+ return iMeterFixedAssetsService.updateFixedAsset(meterFixedAssets);
+ }
+ /**
+ * 固定资产详情
+ */
+ @ApiOperation("固定资产详情")
+ @PostMapping("/detail")
+ @ResponseBody
+ public ReturnDTO detail(@RequestBody @Valid IdDTO idDTO) {
+ return ReturnUtil.success(iMeterFixedAssetsService.getById(idDTO.getId()));
+ }
+
+ /**
+ * 刪除固定资产
+ */
+ @ApiOperation("删除固定资产")
+ @PostMapping("/delete")
+ @ResponseBody
+ public ReturnDTO delete(@RequestBody @Valid IdDTO idDTO) {
+ return iMeterFixedAssetsService.deleteByFixedAssetId(idDTO.getId());
+ }
+
+
+}
diff --git a/casic-metering-common/src/main/java/com/casic/missiles/enums/BusinessExceptionEnum.java b/casic-metering-common/src/main/java/com/casic/missiles/enums/BusinessExceptionEnum.java
index 1207389..048d1ae 100644
--- a/casic-metering-common/src/main/java/com/casic/missiles/enums/BusinessExceptionEnum.java
+++ b/casic-metering-common/src/main/java/com/casic/missiles/enums/BusinessExceptionEnum.java
@@ -33,7 +33,8 @@
OPERATOR_DISCOUNT_PERMISSION_NOT_EXISTENCE(2300, "业务员折扣权限不存在;"),
DIRECTOR_DISCOUNT_PERMISSION_NOT_EXISTENCE(2300, "负责人折扣权限不存在;"),
TRACE_SUPPLIER_ID_NULL(2400, "培训记录主键不能为空"),
- DUPLICATE_NUMBER(2401, "编号生成重复,请重新提交");
+ DUPLICATE_NUMBER(2401, "编号生成重复,请重新提交"),
+ DUPLICATE_MANUFACTURE_NUMBER(2401, "出厂编号重复");
private Integer code;
diff --git a/casic-metering-common/src/main/java/com/casic/missiles/utils/DictCodeUtils.java b/casic-metering-common/src/main/java/com/casic/missiles/utils/DictCodeUtils.java
new file mode 100644
index 0000000..f91602e
--- /dev/null
+++ b/casic-metering-common/src/main/java/com/casic/missiles/utils/DictCodeUtils.java
@@ -0,0 +1,77 @@
+package com.casic.missiles.utils;
+
+import com.casic.missiles.annotation.DictCodeField;
+import com.casic.missiles.core.application.service.AbstractDictService;
+import com.casic.missiles.exception.BusinessException;
+import org.apache.commons.lang3.StringUtils;
+
+import java.lang.reflect.Field;
+
+/**
+ * 字典utils
+ */
+public class DictCodeUtils {
+ /**
+ * 字典code转换成名称
+ */
+ public static void convertDictCodeToName(Object object) throws Exception{
+ Field[] fields = object.getClass().getDeclaredFields();
+ for (Field field:fields) {
+ if (!field.isAccessible()) {
+ field.setAccessible(true);
+ }
+ if (field.isAnnotationPresent(DictCodeField.class) && field.get(object) != null) {
+ DictCodeField dictCodeField = field.getAnnotationsByType(DictCodeField.class)[0];
+ if (StringUtils.isEmpty(dictCodeField.cacheName())) {
+ throw new BusinessException(500, "缓存名不能为空");
+ }
+ AbstractDictService dictService = SpringContextUtil.getBean(AbstractDictService.class);
+ String name = dictService.getDictNameByCode(dictCodeField.cacheName(), field.get(object).toString());
+ if (StringUtils.isEmpty(name)) {
+ throw new BusinessException(500, dictCodeField.message());
+ }
+ String destFieldName = field.getName() + "Name";
+ Field destField = object.getClass().getDeclaredField(destFieldName);
+ if (destField == null) {
+ throw new BusinessException(500, "字典名称字段不存在");
+ }
+ if(!destField.isAccessible()) {
+ destField.setAccessible(true);
+ }
+ destField.set(object, name);
+ }
+ }
+ }
+
+ /**
+ * 校验字典code是否合法
+ * @param object
+ * @return
+ */
+ public static boolean validDictCode(Object object) throws Exception{
+ Field[] fields = object.getClass().getDeclaredFields();
+ for (Field field:fields) {
+ if (!field.isAccessible()) {
+ field.setAccessible(true);
+ }
+ if (field.isAnnotationPresent(DictCodeField.class) && field.get(object) != null) {
+ DictCodeField dictCodeField = field.getAnnotationsByType(DictCodeField.class)[0];
+ // 判断字典code是否需要校验
+ if(!dictCodeField.needValid()){
+ continue;
+ }
+ AbstractDictService dictService = SpringContextUtil.getBean(AbstractDictService.class);
+ if (StringUtils.isEmpty(dictCodeField.cacheName())) {
+ throw new BusinessException(500, "缓存名不能为空");
+ }
+ String name = dictService.getDictNameByCode(dictCodeField.cacheName(), field.get(object).toString());
+ if (StringUtils.isEmpty(name)) {
+ throw new BusinessException(500, dictCodeField.message());
+ }
+ dictCodeField.message();
+ }
+ }
+ return true;
+ }
+
+}
\ No newline at end of file
diff --git a/casic-metering-api/src/main/java/com/casic/missiles/controller/MeterFixedAssetsController.java b/casic-metering-api/src/main/java/com/casic/missiles/controller/MeterFixedAssetsController.java
new file mode 100644
index 0000000..a5dc19f
--- /dev/null
+++ b/casic-metering-api/src/main/java/com/casic/missiles/controller/MeterFixedAssetsController.java
@@ -0,0 +1,80 @@
+package com.casic.missiles.controller;
+
+import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
+import com.casic.missiles.core.base.controller.ExportController;
+import com.casic.missiles.core.page.PageFactory;
+import com.casic.missiles.core.page.PageInfoBT;
+import com.casic.missiles.dto.IdDTO;
+import com.casic.missiles.dto.ReturnDTO;
+import com.casic.missiles.dto.ReturnUtil;
+import com.casic.missiles.dto.meter.FixedAssetRequest;
+import com.casic.missiles.model.MeterFixedAssets;
+import com.casic.missiles.service.IMeterFixedAssetsService;
+import com.casic.missiles.utils.DictCodeUtils;
+import io.swagger.annotations.Api;
+import io.swagger.annotations.ApiOperation;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.web.bind.annotation.*;
+
+import javax.validation.Valid;
+
+/**
+ *
+ * 固定资产Controller
+ *
+ *
+ * @author cuicheng
+ * @since 2022-12-07
+ */
+@Api(tags = "固定资产管理接口")
+@RestController
+@RequestMapping("/meter/assets")
+public class MeterFixedAssetsController extends ExportController {
+
+ /**
+ * 固定资产service
+ */
+ @Autowired
+ private IMeterFixedAssetsService iMeterFixedAssetsService;
+ /**
+ * 计量组织列表
+ */
+ @ApiOperation("固定资产(分页)")
+ @PostMapping("/listPage")
+ @ResponseBody
+ public ReturnDTO> listPage(@RequestBody @Valid FixedAssetRequest request) throws Exception {
+ Page page = PageFactory.defaultPage();
+ DictCodeUtils.validDictCode(request);
+ return ReturnUtil.success(super.packForBT(iMeterFixedAssetsService.listPage(page, request)));
+ }
+ /**
+ * 固定资产更新
+ */
+ @ApiOperation("固定资产更新")
+ @PostMapping("/update")
+ @ResponseBody
+ public ReturnDTO update(@RequestBody @Valid MeterFixedAssets meterFixedAssets) {
+ return iMeterFixedAssetsService.updateFixedAsset(meterFixedAssets);
+ }
+ /**
+ * 固定资产详情
+ */
+ @ApiOperation("固定资产详情")
+ @PostMapping("/detail")
+ @ResponseBody
+ public ReturnDTO detail(@RequestBody @Valid IdDTO idDTO) {
+ return ReturnUtil.success(iMeterFixedAssetsService.getById(idDTO.getId()));
+ }
+
+ /**
+ * 刪除固定资产
+ */
+ @ApiOperation("删除固定资产")
+ @PostMapping("/delete")
+ @ResponseBody
+ public ReturnDTO delete(@RequestBody @Valid IdDTO idDTO) {
+ return iMeterFixedAssetsService.deleteByFixedAssetId(idDTO.getId());
+ }
+
+
+}
diff --git a/casic-metering-common/src/main/java/com/casic/missiles/enums/BusinessExceptionEnum.java b/casic-metering-common/src/main/java/com/casic/missiles/enums/BusinessExceptionEnum.java
index 1207389..048d1ae 100644
--- a/casic-metering-common/src/main/java/com/casic/missiles/enums/BusinessExceptionEnum.java
+++ b/casic-metering-common/src/main/java/com/casic/missiles/enums/BusinessExceptionEnum.java
@@ -33,7 +33,8 @@
OPERATOR_DISCOUNT_PERMISSION_NOT_EXISTENCE(2300, "业务员折扣权限不存在;"),
DIRECTOR_DISCOUNT_PERMISSION_NOT_EXISTENCE(2300, "负责人折扣权限不存在;"),
TRACE_SUPPLIER_ID_NULL(2400, "培训记录主键不能为空"),
- DUPLICATE_NUMBER(2401, "编号生成重复,请重新提交");
+ DUPLICATE_NUMBER(2401, "编号生成重复,请重新提交"),
+ DUPLICATE_MANUFACTURE_NUMBER(2401, "出厂编号重复");
private Integer code;
diff --git a/casic-metering-common/src/main/java/com/casic/missiles/utils/DictCodeUtils.java b/casic-metering-common/src/main/java/com/casic/missiles/utils/DictCodeUtils.java
new file mode 100644
index 0000000..f91602e
--- /dev/null
+++ b/casic-metering-common/src/main/java/com/casic/missiles/utils/DictCodeUtils.java
@@ -0,0 +1,77 @@
+package com.casic.missiles.utils;
+
+import com.casic.missiles.annotation.DictCodeField;
+import com.casic.missiles.core.application.service.AbstractDictService;
+import com.casic.missiles.exception.BusinessException;
+import org.apache.commons.lang3.StringUtils;
+
+import java.lang.reflect.Field;
+
+/**
+ * 字典utils
+ */
+public class DictCodeUtils {
+ /**
+ * 字典code转换成名称
+ */
+ public static void convertDictCodeToName(Object object) throws Exception{
+ Field[] fields = object.getClass().getDeclaredFields();
+ for (Field field:fields) {
+ if (!field.isAccessible()) {
+ field.setAccessible(true);
+ }
+ if (field.isAnnotationPresent(DictCodeField.class) && field.get(object) != null) {
+ DictCodeField dictCodeField = field.getAnnotationsByType(DictCodeField.class)[0];
+ if (StringUtils.isEmpty(dictCodeField.cacheName())) {
+ throw new BusinessException(500, "缓存名不能为空");
+ }
+ AbstractDictService dictService = SpringContextUtil.getBean(AbstractDictService.class);
+ String name = dictService.getDictNameByCode(dictCodeField.cacheName(), field.get(object).toString());
+ if (StringUtils.isEmpty(name)) {
+ throw new BusinessException(500, dictCodeField.message());
+ }
+ String destFieldName = field.getName() + "Name";
+ Field destField = object.getClass().getDeclaredField(destFieldName);
+ if (destField == null) {
+ throw new BusinessException(500, "字典名称字段不存在");
+ }
+ if(!destField.isAccessible()) {
+ destField.setAccessible(true);
+ }
+ destField.set(object, name);
+ }
+ }
+ }
+
+ /**
+ * 校验字典code是否合法
+ * @param object
+ * @return
+ */
+ public static boolean validDictCode(Object object) throws Exception{
+ Field[] fields = object.getClass().getDeclaredFields();
+ for (Field field:fields) {
+ if (!field.isAccessible()) {
+ field.setAccessible(true);
+ }
+ if (field.isAnnotationPresent(DictCodeField.class) && field.get(object) != null) {
+ DictCodeField dictCodeField = field.getAnnotationsByType(DictCodeField.class)[0];
+ // 判断字典code是否需要校验
+ if(!dictCodeField.needValid()){
+ continue;
+ }
+ AbstractDictService dictService = SpringContextUtil.getBean(AbstractDictService.class);
+ if (StringUtils.isEmpty(dictCodeField.cacheName())) {
+ throw new BusinessException(500, "缓存名不能为空");
+ }
+ String name = dictService.getDictNameByCode(dictCodeField.cacheName(), field.get(object).toString());
+ if (StringUtils.isEmpty(name)) {
+ throw new BusinessException(500, dictCodeField.message());
+ }
+ dictCodeField.message();
+ }
+ }
+ return true;
+ }
+
+}
\ No newline at end of file
diff --git a/casic-metering-dao/src/main/java/com/casic/missiles/mapper/MeterFixedAssetsMapper.java b/casic-metering-dao/src/main/java/com/casic/missiles/mapper/MeterFixedAssetsMapper.java
new file mode 100644
index 0000000..b2dc13d
--- /dev/null
+++ b/casic-metering-dao/src/main/java/com/casic/missiles/mapper/MeterFixedAssetsMapper.java
@@ -0,0 +1,16 @@
+package com.casic.missiles.mapper;
+
+import com.baomidou.mybatisplus.core.mapper.BaseMapper;
+import com.casic.missiles.model.MeterFixedAssets;
+
+/**
+ *
+ * Mapper 接口
+ *
+ *
+ * @author cuicheng
+ * @since 2022-12-07
+ */
+public interface MeterFixedAssetsMapper extends BaseMapper {
+ Long selectMaxNo();
+}
diff --git a/casic-metering-api/src/main/java/com/casic/missiles/controller/MeterFixedAssetsController.java b/casic-metering-api/src/main/java/com/casic/missiles/controller/MeterFixedAssetsController.java
new file mode 100644
index 0000000..a5dc19f
--- /dev/null
+++ b/casic-metering-api/src/main/java/com/casic/missiles/controller/MeterFixedAssetsController.java
@@ -0,0 +1,80 @@
+package com.casic.missiles.controller;
+
+import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
+import com.casic.missiles.core.base.controller.ExportController;
+import com.casic.missiles.core.page.PageFactory;
+import com.casic.missiles.core.page.PageInfoBT;
+import com.casic.missiles.dto.IdDTO;
+import com.casic.missiles.dto.ReturnDTO;
+import com.casic.missiles.dto.ReturnUtil;
+import com.casic.missiles.dto.meter.FixedAssetRequest;
+import com.casic.missiles.model.MeterFixedAssets;
+import com.casic.missiles.service.IMeterFixedAssetsService;
+import com.casic.missiles.utils.DictCodeUtils;
+import io.swagger.annotations.Api;
+import io.swagger.annotations.ApiOperation;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.web.bind.annotation.*;
+
+import javax.validation.Valid;
+
+/**
+ *
+ * 固定资产Controller
+ *
+ *
+ * @author cuicheng
+ * @since 2022-12-07
+ */
+@Api(tags = "固定资产管理接口")
+@RestController
+@RequestMapping("/meter/assets")
+public class MeterFixedAssetsController extends ExportController {
+
+ /**
+ * 固定资产service
+ */
+ @Autowired
+ private IMeterFixedAssetsService iMeterFixedAssetsService;
+ /**
+ * 计量组织列表
+ */
+ @ApiOperation("固定资产(分页)")
+ @PostMapping("/listPage")
+ @ResponseBody
+ public ReturnDTO> listPage(@RequestBody @Valid FixedAssetRequest request) throws Exception {
+ Page page = PageFactory.defaultPage();
+ DictCodeUtils.validDictCode(request);
+ return ReturnUtil.success(super.packForBT(iMeterFixedAssetsService.listPage(page, request)));
+ }
+ /**
+ * 固定资产更新
+ */
+ @ApiOperation("固定资产更新")
+ @PostMapping("/update")
+ @ResponseBody
+ public ReturnDTO update(@RequestBody @Valid MeterFixedAssets meterFixedAssets) {
+ return iMeterFixedAssetsService.updateFixedAsset(meterFixedAssets);
+ }
+ /**
+ * 固定资产详情
+ */
+ @ApiOperation("固定资产详情")
+ @PostMapping("/detail")
+ @ResponseBody
+ public ReturnDTO detail(@RequestBody @Valid IdDTO idDTO) {
+ return ReturnUtil.success(iMeterFixedAssetsService.getById(idDTO.getId()));
+ }
+
+ /**
+ * 刪除固定资产
+ */
+ @ApiOperation("删除固定资产")
+ @PostMapping("/delete")
+ @ResponseBody
+ public ReturnDTO delete(@RequestBody @Valid IdDTO idDTO) {
+ return iMeterFixedAssetsService.deleteByFixedAssetId(idDTO.getId());
+ }
+
+
+}
diff --git a/casic-metering-common/src/main/java/com/casic/missiles/enums/BusinessExceptionEnum.java b/casic-metering-common/src/main/java/com/casic/missiles/enums/BusinessExceptionEnum.java
index 1207389..048d1ae 100644
--- a/casic-metering-common/src/main/java/com/casic/missiles/enums/BusinessExceptionEnum.java
+++ b/casic-metering-common/src/main/java/com/casic/missiles/enums/BusinessExceptionEnum.java
@@ -33,7 +33,8 @@
OPERATOR_DISCOUNT_PERMISSION_NOT_EXISTENCE(2300, "业务员折扣权限不存在;"),
DIRECTOR_DISCOUNT_PERMISSION_NOT_EXISTENCE(2300, "负责人折扣权限不存在;"),
TRACE_SUPPLIER_ID_NULL(2400, "培训记录主键不能为空"),
- DUPLICATE_NUMBER(2401, "编号生成重复,请重新提交");
+ DUPLICATE_NUMBER(2401, "编号生成重复,请重新提交"),
+ DUPLICATE_MANUFACTURE_NUMBER(2401, "出厂编号重复");
private Integer code;
diff --git a/casic-metering-common/src/main/java/com/casic/missiles/utils/DictCodeUtils.java b/casic-metering-common/src/main/java/com/casic/missiles/utils/DictCodeUtils.java
new file mode 100644
index 0000000..f91602e
--- /dev/null
+++ b/casic-metering-common/src/main/java/com/casic/missiles/utils/DictCodeUtils.java
@@ -0,0 +1,77 @@
+package com.casic.missiles.utils;
+
+import com.casic.missiles.annotation.DictCodeField;
+import com.casic.missiles.core.application.service.AbstractDictService;
+import com.casic.missiles.exception.BusinessException;
+import org.apache.commons.lang3.StringUtils;
+
+import java.lang.reflect.Field;
+
+/**
+ * 字典utils
+ */
+public class DictCodeUtils {
+ /**
+ * 字典code转换成名称
+ */
+ public static void convertDictCodeToName(Object object) throws Exception{
+ Field[] fields = object.getClass().getDeclaredFields();
+ for (Field field:fields) {
+ if (!field.isAccessible()) {
+ field.setAccessible(true);
+ }
+ if (field.isAnnotationPresent(DictCodeField.class) && field.get(object) != null) {
+ DictCodeField dictCodeField = field.getAnnotationsByType(DictCodeField.class)[0];
+ if (StringUtils.isEmpty(dictCodeField.cacheName())) {
+ throw new BusinessException(500, "缓存名不能为空");
+ }
+ AbstractDictService dictService = SpringContextUtil.getBean(AbstractDictService.class);
+ String name = dictService.getDictNameByCode(dictCodeField.cacheName(), field.get(object).toString());
+ if (StringUtils.isEmpty(name)) {
+ throw new BusinessException(500, dictCodeField.message());
+ }
+ String destFieldName = field.getName() + "Name";
+ Field destField = object.getClass().getDeclaredField(destFieldName);
+ if (destField == null) {
+ throw new BusinessException(500, "字典名称字段不存在");
+ }
+ if(!destField.isAccessible()) {
+ destField.setAccessible(true);
+ }
+ destField.set(object, name);
+ }
+ }
+ }
+
+ /**
+ * 校验字典code是否合法
+ * @param object
+ * @return
+ */
+ public static boolean validDictCode(Object object) throws Exception{
+ Field[] fields = object.getClass().getDeclaredFields();
+ for (Field field:fields) {
+ if (!field.isAccessible()) {
+ field.setAccessible(true);
+ }
+ if (field.isAnnotationPresent(DictCodeField.class) && field.get(object) != null) {
+ DictCodeField dictCodeField = field.getAnnotationsByType(DictCodeField.class)[0];
+ // 判断字典code是否需要校验
+ if(!dictCodeField.needValid()){
+ continue;
+ }
+ AbstractDictService dictService = SpringContextUtil.getBean(AbstractDictService.class);
+ if (StringUtils.isEmpty(dictCodeField.cacheName())) {
+ throw new BusinessException(500, "缓存名不能为空");
+ }
+ String name = dictService.getDictNameByCode(dictCodeField.cacheName(), field.get(object).toString());
+ if (StringUtils.isEmpty(name)) {
+ throw new BusinessException(500, dictCodeField.message());
+ }
+ dictCodeField.message();
+ }
+ }
+ return true;
+ }
+
+}
\ No newline at end of file
diff --git a/casic-metering-dao/src/main/java/com/casic/missiles/mapper/MeterFixedAssetsMapper.java b/casic-metering-dao/src/main/java/com/casic/missiles/mapper/MeterFixedAssetsMapper.java
new file mode 100644
index 0000000..b2dc13d
--- /dev/null
+++ b/casic-metering-dao/src/main/java/com/casic/missiles/mapper/MeterFixedAssetsMapper.java
@@ -0,0 +1,16 @@
+package com.casic.missiles.mapper;
+
+import com.baomidou.mybatisplus.core.mapper.BaseMapper;
+import com.casic.missiles.model.MeterFixedAssets;
+
+/**
+ *
+ * Mapper 接口
+ *
+ *
+ * @author cuicheng
+ * @since 2022-12-07
+ */
+public interface MeterFixedAssetsMapper extends BaseMapper {
+ Long selectMaxNo();
+}
diff --git a/casic-metering-dao/src/main/resources/mapper/MeterFixedAssetsMapper.xml b/casic-metering-dao/src/main/resources/mapper/MeterFixedAssetsMapper.xml
new file mode 100644
index 0000000..39f6510
--- /dev/null
+++ b/casic-metering-dao/src/main/resources/mapper/MeterFixedAssetsMapper.xml
@@ -0,0 +1,7 @@
+
+
+
+
+
diff --git a/casic-metering-api/src/main/java/com/casic/missiles/controller/MeterFixedAssetsController.java b/casic-metering-api/src/main/java/com/casic/missiles/controller/MeterFixedAssetsController.java
new file mode 100644
index 0000000..a5dc19f
--- /dev/null
+++ b/casic-metering-api/src/main/java/com/casic/missiles/controller/MeterFixedAssetsController.java
@@ -0,0 +1,80 @@
+package com.casic.missiles.controller;
+
+import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
+import com.casic.missiles.core.base.controller.ExportController;
+import com.casic.missiles.core.page.PageFactory;
+import com.casic.missiles.core.page.PageInfoBT;
+import com.casic.missiles.dto.IdDTO;
+import com.casic.missiles.dto.ReturnDTO;
+import com.casic.missiles.dto.ReturnUtil;
+import com.casic.missiles.dto.meter.FixedAssetRequest;
+import com.casic.missiles.model.MeterFixedAssets;
+import com.casic.missiles.service.IMeterFixedAssetsService;
+import com.casic.missiles.utils.DictCodeUtils;
+import io.swagger.annotations.Api;
+import io.swagger.annotations.ApiOperation;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.web.bind.annotation.*;
+
+import javax.validation.Valid;
+
+/**
+ *
+ * 固定资产Controller
+ *
+ *
+ * @author cuicheng
+ * @since 2022-12-07
+ */
+@Api(tags = "固定资产管理接口")
+@RestController
+@RequestMapping("/meter/assets")
+public class MeterFixedAssetsController extends ExportController {
+
+ /**
+ * 固定资产service
+ */
+ @Autowired
+ private IMeterFixedAssetsService iMeterFixedAssetsService;
+ /**
+ * 计量组织列表
+ */
+ @ApiOperation("固定资产(分页)")
+ @PostMapping("/listPage")
+ @ResponseBody
+ public ReturnDTO> listPage(@RequestBody @Valid FixedAssetRequest request) throws Exception {
+ Page page = PageFactory.defaultPage();
+ DictCodeUtils.validDictCode(request);
+ return ReturnUtil.success(super.packForBT(iMeterFixedAssetsService.listPage(page, request)));
+ }
+ /**
+ * 固定资产更新
+ */
+ @ApiOperation("固定资产更新")
+ @PostMapping("/update")
+ @ResponseBody
+ public ReturnDTO update(@RequestBody @Valid MeterFixedAssets meterFixedAssets) {
+ return iMeterFixedAssetsService.updateFixedAsset(meterFixedAssets);
+ }
+ /**
+ * 固定资产详情
+ */
+ @ApiOperation("固定资产详情")
+ @PostMapping("/detail")
+ @ResponseBody
+ public ReturnDTO detail(@RequestBody @Valid IdDTO idDTO) {
+ return ReturnUtil.success(iMeterFixedAssetsService.getById(idDTO.getId()));
+ }
+
+ /**
+ * 刪除固定资产
+ */
+ @ApiOperation("删除固定资产")
+ @PostMapping("/delete")
+ @ResponseBody
+ public ReturnDTO delete(@RequestBody @Valid IdDTO idDTO) {
+ return iMeterFixedAssetsService.deleteByFixedAssetId(idDTO.getId());
+ }
+
+
+}
diff --git a/casic-metering-common/src/main/java/com/casic/missiles/enums/BusinessExceptionEnum.java b/casic-metering-common/src/main/java/com/casic/missiles/enums/BusinessExceptionEnum.java
index 1207389..048d1ae 100644
--- a/casic-metering-common/src/main/java/com/casic/missiles/enums/BusinessExceptionEnum.java
+++ b/casic-metering-common/src/main/java/com/casic/missiles/enums/BusinessExceptionEnum.java
@@ -33,7 +33,8 @@
OPERATOR_DISCOUNT_PERMISSION_NOT_EXISTENCE(2300, "业务员折扣权限不存在;"),
DIRECTOR_DISCOUNT_PERMISSION_NOT_EXISTENCE(2300, "负责人折扣权限不存在;"),
TRACE_SUPPLIER_ID_NULL(2400, "培训记录主键不能为空"),
- DUPLICATE_NUMBER(2401, "编号生成重复,请重新提交");
+ DUPLICATE_NUMBER(2401, "编号生成重复,请重新提交"),
+ DUPLICATE_MANUFACTURE_NUMBER(2401, "出厂编号重复");
private Integer code;
diff --git a/casic-metering-common/src/main/java/com/casic/missiles/utils/DictCodeUtils.java b/casic-metering-common/src/main/java/com/casic/missiles/utils/DictCodeUtils.java
new file mode 100644
index 0000000..f91602e
--- /dev/null
+++ b/casic-metering-common/src/main/java/com/casic/missiles/utils/DictCodeUtils.java
@@ -0,0 +1,77 @@
+package com.casic.missiles.utils;
+
+import com.casic.missiles.annotation.DictCodeField;
+import com.casic.missiles.core.application.service.AbstractDictService;
+import com.casic.missiles.exception.BusinessException;
+import org.apache.commons.lang3.StringUtils;
+
+import java.lang.reflect.Field;
+
+/**
+ * 字典utils
+ */
+public class DictCodeUtils {
+ /**
+ * 字典code转换成名称
+ */
+ public static void convertDictCodeToName(Object object) throws Exception{
+ Field[] fields = object.getClass().getDeclaredFields();
+ for (Field field:fields) {
+ if (!field.isAccessible()) {
+ field.setAccessible(true);
+ }
+ if (field.isAnnotationPresent(DictCodeField.class) && field.get(object) != null) {
+ DictCodeField dictCodeField = field.getAnnotationsByType(DictCodeField.class)[0];
+ if (StringUtils.isEmpty(dictCodeField.cacheName())) {
+ throw new BusinessException(500, "缓存名不能为空");
+ }
+ AbstractDictService dictService = SpringContextUtil.getBean(AbstractDictService.class);
+ String name = dictService.getDictNameByCode(dictCodeField.cacheName(), field.get(object).toString());
+ if (StringUtils.isEmpty(name)) {
+ throw new BusinessException(500, dictCodeField.message());
+ }
+ String destFieldName = field.getName() + "Name";
+ Field destField = object.getClass().getDeclaredField(destFieldName);
+ if (destField == null) {
+ throw new BusinessException(500, "字典名称字段不存在");
+ }
+ if(!destField.isAccessible()) {
+ destField.setAccessible(true);
+ }
+ destField.set(object, name);
+ }
+ }
+ }
+
+ /**
+ * 校验字典code是否合法
+ * @param object
+ * @return
+ */
+ public static boolean validDictCode(Object object) throws Exception{
+ Field[] fields = object.getClass().getDeclaredFields();
+ for (Field field:fields) {
+ if (!field.isAccessible()) {
+ field.setAccessible(true);
+ }
+ if (field.isAnnotationPresent(DictCodeField.class) && field.get(object) != null) {
+ DictCodeField dictCodeField = field.getAnnotationsByType(DictCodeField.class)[0];
+ // 判断字典code是否需要校验
+ if(!dictCodeField.needValid()){
+ continue;
+ }
+ AbstractDictService dictService = SpringContextUtil.getBean(AbstractDictService.class);
+ if (StringUtils.isEmpty(dictCodeField.cacheName())) {
+ throw new BusinessException(500, "缓存名不能为空");
+ }
+ String name = dictService.getDictNameByCode(dictCodeField.cacheName(), field.get(object).toString());
+ if (StringUtils.isEmpty(name)) {
+ throw new BusinessException(500, dictCodeField.message());
+ }
+ dictCodeField.message();
+ }
+ }
+ return true;
+ }
+
+}
\ No newline at end of file
diff --git a/casic-metering-dao/src/main/java/com/casic/missiles/mapper/MeterFixedAssetsMapper.java b/casic-metering-dao/src/main/java/com/casic/missiles/mapper/MeterFixedAssetsMapper.java
new file mode 100644
index 0000000..b2dc13d
--- /dev/null
+++ b/casic-metering-dao/src/main/java/com/casic/missiles/mapper/MeterFixedAssetsMapper.java
@@ -0,0 +1,16 @@
+package com.casic.missiles.mapper;
+
+import com.baomidou.mybatisplus.core.mapper.BaseMapper;
+import com.casic.missiles.model.MeterFixedAssets;
+
+/**
+ *
+ * Mapper 接口
+ *
+ *
+ * @author cuicheng
+ * @since 2022-12-07
+ */
+public interface MeterFixedAssetsMapper extends BaseMapper {
+ Long selectMaxNo();
+}
diff --git a/casic-metering-dao/src/main/resources/mapper/MeterFixedAssetsMapper.xml b/casic-metering-dao/src/main/resources/mapper/MeterFixedAssetsMapper.xml
new file mode 100644
index 0000000..39f6510
--- /dev/null
+++ b/casic-metering-dao/src/main/resources/mapper/MeterFixedAssetsMapper.xml
@@ -0,0 +1,7 @@
+
+
+
+
+
diff --git a/casic-metering-model/src/main/java/com/casic/missiles/annotation/DictCodeField.java b/casic-metering-model/src/main/java/com/casic/missiles/annotation/DictCodeField.java
new file mode 100644
index 0000000..91ef6ac
--- /dev/null
+++ b/casic-metering-model/src/main/java/com/casic/missiles/annotation/DictCodeField.java
@@ -0,0 +1,29 @@
+package com.casic.missiles.annotation;
+
+import java.lang.annotation.*;
+
+/**
+ * 字典字段注解,放在字段上边,用于字典字段的合法性校验,以及字典字段转名字
+ */
+@Target({ElementType.FIELD})
+@Retention(RetentionPolicy.RUNTIME)
+@Documented
+public @interface DictCodeField {
+
+ /**
+ * 校验错误信息
+ * @return
+ */
+ String message();
+
+ /**
+ * cacheName
+ */
+ String cacheName();
+
+ /**
+ * 是否校验字典code,默认校验
+ * @return
+ */
+ boolean needValid() default true;
+}
diff --git a/casic-metering-api/src/main/java/com/casic/missiles/controller/MeterFixedAssetsController.java b/casic-metering-api/src/main/java/com/casic/missiles/controller/MeterFixedAssetsController.java
new file mode 100644
index 0000000..a5dc19f
--- /dev/null
+++ b/casic-metering-api/src/main/java/com/casic/missiles/controller/MeterFixedAssetsController.java
@@ -0,0 +1,80 @@
+package com.casic.missiles.controller;
+
+import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
+import com.casic.missiles.core.base.controller.ExportController;
+import com.casic.missiles.core.page.PageFactory;
+import com.casic.missiles.core.page.PageInfoBT;
+import com.casic.missiles.dto.IdDTO;
+import com.casic.missiles.dto.ReturnDTO;
+import com.casic.missiles.dto.ReturnUtil;
+import com.casic.missiles.dto.meter.FixedAssetRequest;
+import com.casic.missiles.model.MeterFixedAssets;
+import com.casic.missiles.service.IMeterFixedAssetsService;
+import com.casic.missiles.utils.DictCodeUtils;
+import io.swagger.annotations.Api;
+import io.swagger.annotations.ApiOperation;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.web.bind.annotation.*;
+
+import javax.validation.Valid;
+
+/**
+ *
+ * 固定资产Controller
+ *
+ *
+ * @author cuicheng
+ * @since 2022-12-07
+ */
+@Api(tags = "固定资产管理接口")
+@RestController
+@RequestMapping("/meter/assets")
+public class MeterFixedAssetsController extends ExportController {
+
+ /**
+ * 固定资产service
+ */
+ @Autowired
+ private IMeterFixedAssetsService iMeterFixedAssetsService;
+ /**
+ * 计量组织列表
+ */
+ @ApiOperation("固定资产(分页)")
+ @PostMapping("/listPage")
+ @ResponseBody
+ public ReturnDTO> listPage(@RequestBody @Valid FixedAssetRequest request) throws Exception {
+ Page page = PageFactory.defaultPage();
+ DictCodeUtils.validDictCode(request);
+ return ReturnUtil.success(super.packForBT(iMeterFixedAssetsService.listPage(page, request)));
+ }
+ /**
+ * 固定资产更新
+ */
+ @ApiOperation("固定资产更新")
+ @PostMapping("/update")
+ @ResponseBody
+ public ReturnDTO update(@RequestBody @Valid MeterFixedAssets meterFixedAssets) {
+ return iMeterFixedAssetsService.updateFixedAsset(meterFixedAssets);
+ }
+ /**
+ * 固定资产详情
+ */
+ @ApiOperation("固定资产详情")
+ @PostMapping("/detail")
+ @ResponseBody
+ public ReturnDTO detail(@RequestBody @Valid IdDTO idDTO) {
+ return ReturnUtil.success(iMeterFixedAssetsService.getById(idDTO.getId()));
+ }
+
+ /**
+ * 刪除固定资产
+ */
+ @ApiOperation("删除固定资产")
+ @PostMapping("/delete")
+ @ResponseBody
+ public ReturnDTO delete(@RequestBody @Valid IdDTO idDTO) {
+ return iMeterFixedAssetsService.deleteByFixedAssetId(idDTO.getId());
+ }
+
+
+}
diff --git a/casic-metering-common/src/main/java/com/casic/missiles/enums/BusinessExceptionEnum.java b/casic-metering-common/src/main/java/com/casic/missiles/enums/BusinessExceptionEnum.java
index 1207389..048d1ae 100644
--- a/casic-metering-common/src/main/java/com/casic/missiles/enums/BusinessExceptionEnum.java
+++ b/casic-metering-common/src/main/java/com/casic/missiles/enums/BusinessExceptionEnum.java
@@ -33,7 +33,8 @@
OPERATOR_DISCOUNT_PERMISSION_NOT_EXISTENCE(2300, "业务员折扣权限不存在;"),
DIRECTOR_DISCOUNT_PERMISSION_NOT_EXISTENCE(2300, "负责人折扣权限不存在;"),
TRACE_SUPPLIER_ID_NULL(2400, "培训记录主键不能为空"),
- DUPLICATE_NUMBER(2401, "编号生成重复,请重新提交");
+ DUPLICATE_NUMBER(2401, "编号生成重复,请重新提交"),
+ DUPLICATE_MANUFACTURE_NUMBER(2401, "出厂编号重复");
private Integer code;
diff --git a/casic-metering-common/src/main/java/com/casic/missiles/utils/DictCodeUtils.java b/casic-metering-common/src/main/java/com/casic/missiles/utils/DictCodeUtils.java
new file mode 100644
index 0000000..f91602e
--- /dev/null
+++ b/casic-metering-common/src/main/java/com/casic/missiles/utils/DictCodeUtils.java
@@ -0,0 +1,77 @@
+package com.casic.missiles.utils;
+
+import com.casic.missiles.annotation.DictCodeField;
+import com.casic.missiles.core.application.service.AbstractDictService;
+import com.casic.missiles.exception.BusinessException;
+import org.apache.commons.lang3.StringUtils;
+
+import java.lang.reflect.Field;
+
+/**
+ * 字典utils
+ */
+public class DictCodeUtils {
+ /**
+ * 字典code转换成名称
+ */
+ public static void convertDictCodeToName(Object object) throws Exception{
+ Field[] fields = object.getClass().getDeclaredFields();
+ for (Field field:fields) {
+ if (!field.isAccessible()) {
+ field.setAccessible(true);
+ }
+ if (field.isAnnotationPresent(DictCodeField.class) && field.get(object) != null) {
+ DictCodeField dictCodeField = field.getAnnotationsByType(DictCodeField.class)[0];
+ if (StringUtils.isEmpty(dictCodeField.cacheName())) {
+ throw new BusinessException(500, "缓存名不能为空");
+ }
+ AbstractDictService dictService = SpringContextUtil.getBean(AbstractDictService.class);
+ String name = dictService.getDictNameByCode(dictCodeField.cacheName(), field.get(object).toString());
+ if (StringUtils.isEmpty(name)) {
+ throw new BusinessException(500, dictCodeField.message());
+ }
+ String destFieldName = field.getName() + "Name";
+ Field destField = object.getClass().getDeclaredField(destFieldName);
+ if (destField == null) {
+ throw new BusinessException(500, "字典名称字段不存在");
+ }
+ if(!destField.isAccessible()) {
+ destField.setAccessible(true);
+ }
+ destField.set(object, name);
+ }
+ }
+ }
+
+ /**
+ * 校验字典code是否合法
+ * @param object
+ * @return
+ */
+ public static boolean validDictCode(Object object) throws Exception{
+ Field[] fields = object.getClass().getDeclaredFields();
+ for (Field field:fields) {
+ if (!field.isAccessible()) {
+ field.setAccessible(true);
+ }
+ if (field.isAnnotationPresent(DictCodeField.class) && field.get(object) != null) {
+ DictCodeField dictCodeField = field.getAnnotationsByType(DictCodeField.class)[0];
+ // 判断字典code是否需要校验
+ if(!dictCodeField.needValid()){
+ continue;
+ }
+ AbstractDictService dictService = SpringContextUtil.getBean(AbstractDictService.class);
+ if (StringUtils.isEmpty(dictCodeField.cacheName())) {
+ throw new BusinessException(500, "缓存名不能为空");
+ }
+ String name = dictService.getDictNameByCode(dictCodeField.cacheName(), field.get(object).toString());
+ if (StringUtils.isEmpty(name)) {
+ throw new BusinessException(500, dictCodeField.message());
+ }
+ dictCodeField.message();
+ }
+ }
+ return true;
+ }
+
+}
\ No newline at end of file
diff --git a/casic-metering-dao/src/main/java/com/casic/missiles/mapper/MeterFixedAssetsMapper.java b/casic-metering-dao/src/main/java/com/casic/missiles/mapper/MeterFixedAssetsMapper.java
new file mode 100644
index 0000000..b2dc13d
--- /dev/null
+++ b/casic-metering-dao/src/main/java/com/casic/missiles/mapper/MeterFixedAssetsMapper.java
@@ -0,0 +1,16 @@
+package com.casic.missiles.mapper;
+
+import com.baomidou.mybatisplus.core.mapper.BaseMapper;
+import com.casic.missiles.model.MeterFixedAssets;
+
+/**
+ *
+ * Mapper 接口
+ *
+ *
+ * @author cuicheng
+ * @since 2022-12-07
+ */
+public interface MeterFixedAssetsMapper extends BaseMapper {
+ Long selectMaxNo();
+}
diff --git a/casic-metering-dao/src/main/resources/mapper/MeterFixedAssetsMapper.xml b/casic-metering-dao/src/main/resources/mapper/MeterFixedAssetsMapper.xml
new file mode 100644
index 0000000..39f6510
--- /dev/null
+++ b/casic-metering-dao/src/main/resources/mapper/MeterFixedAssetsMapper.xml
@@ -0,0 +1,7 @@
+
+
+
+
+
diff --git a/casic-metering-model/src/main/java/com/casic/missiles/annotation/DictCodeField.java b/casic-metering-model/src/main/java/com/casic/missiles/annotation/DictCodeField.java
new file mode 100644
index 0000000..91ef6ac
--- /dev/null
+++ b/casic-metering-model/src/main/java/com/casic/missiles/annotation/DictCodeField.java
@@ -0,0 +1,29 @@
+package com.casic.missiles.annotation;
+
+import java.lang.annotation.*;
+
+/**
+ * 字典字段注解,放在字段上边,用于字典字段的合法性校验,以及字典字段转名字
+ */
+@Target({ElementType.FIELD})
+@Retention(RetentionPolicy.RUNTIME)
+@Documented
+public @interface DictCodeField {
+
+ /**
+ * 校验错误信息
+ * @return
+ */
+ String message();
+
+ /**
+ * cacheName
+ */
+ String cacheName();
+
+ /**
+ * 是否校验字典code,默认校验
+ * @return
+ */
+ boolean needValid() default true;
+}
diff --git a/casic-metering-model/src/main/java/com/casic/missiles/constants/MeterDictCode.java b/casic-metering-model/src/main/java/com/casic/missiles/constants/MeterDictCode.java
new file mode 100644
index 0000000..b4501b1
--- /dev/null
+++ b/casic-metering-model/src/main/java/com/casic/missiles/constants/MeterDictCode.java
@@ -0,0 +1,53 @@
+package com.casic.missiles.constants;
+
+/**
+ * @Description: 字典名枚举
+ * @Author: wangpeng
+ * @Date: 2022/11/27 10:41
+ */
+public interface MeterDictCode {
+ //审批状态
+ String APPROVAL_STATUS = "approvalStatus";
+ //实施状态
+ String EFFECTIVE_STATUS = "effectiveStatus";
+ //文件类别
+ String FILE_TYPE = "fileType";
+ //行政职务
+ String ADMINISTRATION_JOB = "administrationJob";
+ //技术职称
+ String TECHNOLOGY_JOB = "technologyJob";
+ //文化程度
+ String EDUCATION = "education";
+ //校验类型
+ String CHECK_TYPE = "checkType";
+ //价格类别
+ String PRICE_TYPE = "priceType";
+ //项目
+ String PRICE_ITEM = "priceItem";
+ //业务员折扣权限
+ String OPERATOR_DISCOUNT_PERMISSION = "operatorDiscountPermission";
+ //负责人折扣权限
+ String DIRECTOR_DISCOUNT_PERMISSION = "directorDiscountPermission";
+ //资产类型
+ String ASSET_TYPE = "assetType";
+ //检定方式
+ String MESURE_TYPE = "mesureType";
+ //管理状态
+ String MANAGER_STATE = "managerState";
+ //ABC 设备级别
+ String ABC = "ABC";
+ // 检定周期
+ String MESURE_CYCLE = "mesureCycle";
+ //专业分类
+ String MAJOR_CATEGORY = "majorCategory";
+ //检定结果
+ String MESURE_RESULT = "mesureResult";
+ //设备类别
+ String EQUIPMENT_CATEGORY = "equipmentCategory";
+ //设备类型
+ String EQUIPMENT_TYPE = "equipmentType";
+ //管理级别
+ String MANAGER_LEVEL = "managerLevel";
+ //折旧方法
+ String dePRECIATION_METHOD = "depreciationMethod";
+}
diff --git a/casic-metering-api/src/main/java/com/casic/missiles/controller/MeterFixedAssetsController.java b/casic-metering-api/src/main/java/com/casic/missiles/controller/MeterFixedAssetsController.java
new file mode 100644
index 0000000..a5dc19f
--- /dev/null
+++ b/casic-metering-api/src/main/java/com/casic/missiles/controller/MeterFixedAssetsController.java
@@ -0,0 +1,80 @@
+package com.casic.missiles.controller;
+
+import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
+import com.casic.missiles.core.base.controller.ExportController;
+import com.casic.missiles.core.page.PageFactory;
+import com.casic.missiles.core.page.PageInfoBT;
+import com.casic.missiles.dto.IdDTO;
+import com.casic.missiles.dto.ReturnDTO;
+import com.casic.missiles.dto.ReturnUtil;
+import com.casic.missiles.dto.meter.FixedAssetRequest;
+import com.casic.missiles.model.MeterFixedAssets;
+import com.casic.missiles.service.IMeterFixedAssetsService;
+import com.casic.missiles.utils.DictCodeUtils;
+import io.swagger.annotations.Api;
+import io.swagger.annotations.ApiOperation;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.web.bind.annotation.*;
+
+import javax.validation.Valid;
+
+/**
+ *
+ * 固定资产Controller
+ *
+ *
+ * @author cuicheng
+ * @since 2022-12-07
+ */
+@Api(tags = "固定资产管理接口")
+@RestController
+@RequestMapping("/meter/assets")
+public class MeterFixedAssetsController extends ExportController {
+
+ /**
+ * 固定资产service
+ */
+ @Autowired
+ private IMeterFixedAssetsService iMeterFixedAssetsService;
+ /**
+ * 计量组织列表
+ */
+ @ApiOperation("固定资产(分页)")
+ @PostMapping("/listPage")
+ @ResponseBody
+ public ReturnDTO> listPage(@RequestBody @Valid FixedAssetRequest request) throws Exception {
+ Page page = PageFactory.defaultPage();
+ DictCodeUtils.validDictCode(request);
+ return ReturnUtil.success(super.packForBT(iMeterFixedAssetsService.listPage(page, request)));
+ }
+ /**
+ * 固定资产更新
+ */
+ @ApiOperation("固定资产更新")
+ @PostMapping("/update")
+ @ResponseBody
+ public ReturnDTO update(@RequestBody @Valid MeterFixedAssets meterFixedAssets) {
+ return iMeterFixedAssetsService.updateFixedAsset(meterFixedAssets);
+ }
+ /**
+ * 固定资产详情
+ */
+ @ApiOperation("固定资产详情")
+ @PostMapping("/detail")
+ @ResponseBody
+ public ReturnDTO detail(@RequestBody @Valid IdDTO idDTO) {
+ return ReturnUtil.success(iMeterFixedAssetsService.getById(idDTO.getId()));
+ }
+
+ /**
+ * 刪除固定资产
+ */
+ @ApiOperation("删除固定资产")
+ @PostMapping("/delete")
+ @ResponseBody
+ public ReturnDTO delete(@RequestBody @Valid IdDTO idDTO) {
+ return iMeterFixedAssetsService.deleteByFixedAssetId(idDTO.getId());
+ }
+
+
+}
diff --git a/casic-metering-common/src/main/java/com/casic/missiles/enums/BusinessExceptionEnum.java b/casic-metering-common/src/main/java/com/casic/missiles/enums/BusinessExceptionEnum.java
index 1207389..048d1ae 100644
--- a/casic-metering-common/src/main/java/com/casic/missiles/enums/BusinessExceptionEnum.java
+++ b/casic-metering-common/src/main/java/com/casic/missiles/enums/BusinessExceptionEnum.java
@@ -33,7 +33,8 @@
OPERATOR_DISCOUNT_PERMISSION_NOT_EXISTENCE(2300, "业务员折扣权限不存在;"),
DIRECTOR_DISCOUNT_PERMISSION_NOT_EXISTENCE(2300, "负责人折扣权限不存在;"),
TRACE_SUPPLIER_ID_NULL(2400, "培训记录主键不能为空"),
- DUPLICATE_NUMBER(2401, "编号生成重复,请重新提交");
+ DUPLICATE_NUMBER(2401, "编号生成重复,请重新提交"),
+ DUPLICATE_MANUFACTURE_NUMBER(2401, "出厂编号重复");
private Integer code;
diff --git a/casic-metering-common/src/main/java/com/casic/missiles/utils/DictCodeUtils.java b/casic-metering-common/src/main/java/com/casic/missiles/utils/DictCodeUtils.java
new file mode 100644
index 0000000..f91602e
--- /dev/null
+++ b/casic-metering-common/src/main/java/com/casic/missiles/utils/DictCodeUtils.java
@@ -0,0 +1,77 @@
+package com.casic.missiles.utils;
+
+import com.casic.missiles.annotation.DictCodeField;
+import com.casic.missiles.core.application.service.AbstractDictService;
+import com.casic.missiles.exception.BusinessException;
+import org.apache.commons.lang3.StringUtils;
+
+import java.lang.reflect.Field;
+
+/**
+ * 字典utils
+ */
+public class DictCodeUtils {
+ /**
+ * 字典code转换成名称
+ */
+ public static void convertDictCodeToName(Object object) throws Exception{
+ Field[] fields = object.getClass().getDeclaredFields();
+ for (Field field:fields) {
+ if (!field.isAccessible()) {
+ field.setAccessible(true);
+ }
+ if (field.isAnnotationPresent(DictCodeField.class) && field.get(object) != null) {
+ DictCodeField dictCodeField = field.getAnnotationsByType(DictCodeField.class)[0];
+ if (StringUtils.isEmpty(dictCodeField.cacheName())) {
+ throw new BusinessException(500, "缓存名不能为空");
+ }
+ AbstractDictService dictService = SpringContextUtil.getBean(AbstractDictService.class);
+ String name = dictService.getDictNameByCode(dictCodeField.cacheName(), field.get(object).toString());
+ if (StringUtils.isEmpty(name)) {
+ throw new BusinessException(500, dictCodeField.message());
+ }
+ String destFieldName = field.getName() + "Name";
+ Field destField = object.getClass().getDeclaredField(destFieldName);
+ if (destField == null) {
+ throw new BusinessException(500, "字典名称字段不存在");
+ }
+ if(!destField.isAccessible()) {
+ destField.setAccessible(true);
+ }
+ destField.set(object, name);
+ }
+ }
+ }
+
+ /**
+ * 校验字典code是否合法
+ * @param object
+ * @return
+ */
+ public static boolean validDictCode(Object object) throws Exception{
+ Field[] fields = object.getClass().getDeclaredFields();
+ for (Field field:fields) {
+ if (!field.isAccessible()) {
+ field.setAccessible(true);
+ }
+ if (field.isAnnotationPresent(DictCodeField.class) && field.get(object) != null) {
+ DictCodeField dictCodeField = field.getAnnotationsByType(DictCodeField.class)[0];
+ // 判断字典code是否需要校验
+ if(!dictCodeField.needValid()){
+ continue;
+ }
+ AbstractDictService dictService = SpringContextUtil.getBean(AbstractDictService.class);
+ if (StringUtils.isEmpty(dictCodeField.cacheName())) {
+ throw new BusinessException(500, "缓存名不能为空");
+ }
+ String name = dictService.getDictNameByCode(dictCodeField.cacheName(), field.get(object).toString());
+ if (StringUtils.isEmpty(name)) {
+ throw new BusinessException(500, dictCodeField.message());
+ }
+ dictCodeField.message();
+ }
+ }
+ return true;
+ }
+
+}
\ No newline at end of file
diff --git a/casic-metering-dao/src/main/java/com/casic/missiles/mapper/MeterFixedAssetsMapper.java b/casic-metering-dao/src/main/java/com/casic/missiles/mapper/MeterFixedAssetsMapper.java
new file mode 100644
index 0000000..b2dc13d
--- /dev/null
+++ b/casic-metering-dao/src/main/java/com/casic/missiles/mapper/MeterFixedAssetsMapper.java
@@ -0,0 +1,16 @@
+package com.casic.missiles.mapper;
+
+import com.baomidou.mybatisplus.core.mapper.BaseMapper;
+import com.casic.missiles.model.MeterFixedAssets;
+
+/**
+ *
+ * Mapper 接口
+ *
+ *
+ * @author cuicheng
+ * @since 2022-12-07
+ */
+public interface MeterFixedAssetsMapper extends BaseMapper {
+ Long selectMaxNo();
+}
diff --git a/casic-metering-dao/src/main/resources/mapper/MeterFixedAssetsMapper.xml b/casic-metering-dao/src/main/resources/mapper/MeterFixedAssetsMapper.xml
new file mode 100644
index 0000000..39f6510
--- /dev/null
+++ b/casic-metering-dao/src/main/resources/mapper/MeterFixedAssetsMapper.xml
@@ -0,0 +1,7 @@
+
+
+
+
+
diff --git a/casic-metering-model/src/main/java/com/casic/missiles/annotation/DictCodeField.java b/casic-metering-model/src/main/java/com/casic/missiles/annotation/DictCodeField.java
new file mode 100644
index 0000000..91ef6ac
--- /dev/null
+++ b/casic-metering-model/src/main/java/com/casic/missiles/annotation/DictCodeField.java
@@ -0,0 +1,29 @@
+package com.casic.missiles.annotation;
+
+import java.lang.annotation.*;
+
+/**
+ * 字典字段注解,放在字段上边,用于字典字段的合法性校验,以及字典字段转名字
+ */
+@Target({ElementType.FIELD})
+@Retention(RetentionPolicy.RUNTIME)
+@Documented
+public @interface DictCodeField {
+
+ /**
+ * 校验错误信息
+ * @return
+ */
+ String message();
+
+ /**
+ * cacheName
+ */
+ String cacheName();
+
+ /**
+ * 是否校验字典code,默认校验
+ * @return
+ */
+ boolean needValid() default true;
+}
diff --git a/casic-metering-model/src/main/java/com/casic/missiles/constants/MeterDictCode.java b/casic-metering-model/src/main/java/com/casic/missiles/constants/MeterDictCode.java
new file mode 100644
index 0000000..b4501b1
--- /dev/null
+++ b/casic-metering-model/src/main/java/com/casic/missiles/constants/MeterDictCode.java
@@ -0,0 +1,53 @@
+package com.casic.missiles.constants;
+
+/**
+ * @Description: 字典名枚举
+ * @Author: wangpeng
+ * @Date: 2022/11/27 10:41
+ */
+public interface MeterDictCode {
+ //审批状态
+ String APPROVAL_STATUS = "approvalStatus";
+ //实施状态
+ String EFFECTIVE_STATUS = "effectiveStatus";
+ //文件类别
+ String FILE_TYPE = "fileType";
+ //行政职务
+ String ADMINISTRATION_JOB = "administrationJob";
+ //技术职称
+ String TECHNOLOGY_JOB = "technologyJob";
+ //文化程度
+ String EDUCATION = "education";
+ //校验类型
+ String CHECK_TYPE = "checkType";
+ //价格类别
+ String PRICE_TYPE = "priceType";
+ //项目
+ String PRICE_ITEM = "priceItem";
+ //业务员折扣权限
+ String OPERATOR_DISCOUNT_PERMISSION = "operatorDiscountPermission";
+ //负责人折扣权限
+ String DIRECTOR_DISCOUNT_PERMISSION = "directorDiscountPermission";
+ //资产类型
+ String ASSET_TYPE = "assetType";
+ //检定方式
+ String MESURE_TYPE = "mesureType";
+ //管理状态
+ String MANAGER_STATE = "managerState";
+ //ABC 设备级别
+ String ABC = "ABC";
+ // 检定周期
+ String MESURE_CYCLE = "mesureCycle";
+ //专业分类
+ String MAJOR_CATEGORY = "majorCategory";
+ //检定结果
+ String MESURE_RESULT = "mesureResult";
+ //设备类别
+ String EQUIPMENT_CATEGORY = "equipmentCategory";
+ //设备类型
+ String EQUIPMENT_TYPE = "equipmentType";
+ //管理级别
+ String MANAGER_LEVEL = "managerLevel";
+ //折旧方法
+ String dePRECIATION_METHOD = "depreciationMethod";
+}
diff --git a/casic-metering-model/src/main/java/com/casic/missiles/dto/IdDTO.java b/casic-metering-model/src/main/java/com/casic/missiles/dto/IdDTO.java
index 2e9ff86..61168a9 100644
--- a/casic-metering-model/src/main/java/com/casic/missiles/dto/IdDTO.java
+++ b/casic-metering-model/src/main/java/com/casic/missiles/dto/IdDTO.java
@@ -3,6 +3,10 @@
import io.swagger.annotations.ApiModelProperty;
import lombok.Data;
+import javax.validation.constraints.NotBlank;
+import javax.validation.constraints.NotEmpty;
+import javax.validation.constraints.NotNull;
+
/**
* @Description: for delete/detail use
* @Author: wangpeng
@@ -10,6 +14,7 @@
*/
@Data
public class IdDTO {
+ @NotNull(message = "主键ID不能为空")
@ApiModelProperty(value = "主键id", dataType = "Long", required = true)
private Long id;
}
diff --git a/casic-metering-api/src/main/java/com/casic/missiles/controller/MeterFixedAssetsController.java b/casic-metering-api/src/main/java/com/casic/missiles/controller/MeterFixedAssetsController.java
new file mode 100644
index 0000000..a5dc19f
--- /dev/null
+++ b/casic-metering-api/src/main/java/com/casic/missiles/controller/MeterFixedAssetsController.java
@@ -0,0 +1,80 @@
+package com.casic.missiles.controller;
+
+import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
+import com.casic.missiles.core.base.controller.ExportController;
+import com.casic.missiles.core.page.PageFactory;
+import com.casic.missiles.core.page.PageInfoBT;
+import com.casic.missiles.dto.IdDTO;
+import com.casic.missiles.dto.ReturnDTO;
+import com.casic.missiles.dto.ReturnUtil;
+import com.casic.missiles.dto.meter.FixedAssetRequest;
+import com.casic.missiles.model.MeterFixedAssets;
+import com.casic.missiles.service.IMeterFixedAssetsService;
+import com.casic.missiles.utils.DictCodeUtils;
+import io.swagger.annotations.Api;
+import io.swagger.annotations.ApiOperation;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.web.bind.annotation.*;
+
+import javax.validation.Valid;
+
+/**
+ *
+ * 固定资产Controller
+ *
+ *
+ * @author cuicheng
+ * @since 2022-12-07
+ */
+@Api(tags = "固定资产管理接口")
+@RestController
+@RequestMapping("/meter/assets")
+public class MeterFixedAssetsController extends ExportController {
+
+ /**
+ * 固定资产service
+ */
+ @Autowired
+ private IMeterFixedAssetsService iMeterFixedAssetsService;
+ /**
+ * 计量组织列表
+ */
+ @ApiOperation("固定资产(分页)")
+ @PostMapping("/listPage")
+ @ResponseBody
+ public ReturnDTO> listPage(@RequestBody @Valid FixedAssetRequest request) throws Exception {
+ Page page = PageFactory.defaultPage();
+ DictCodeUtils.validDictCode(request);
+ return ReturnUtil.success(super.packForBT(iMeterFixedAssetsService.listPage(page, request)));
+ }
+ /**
+ * 固定资产更新
+ */
+ @ApiOperation("固定资产更新")
+ @PostMapping("/update")
+ @ResponseBody
+ public ReturnDTO update(@RequestBody @Valid MeterFixedAssets meterFixedAssets) {
+ return iMeterFixedAssetsService.updateFixedAsset(meterFixedAssets);
+ }
+ /**
+ * 固定资产详情
+ */
+ @ApiOperation("固定资产详情")
+ @PostMapping("/detail")
+ @ResponseBody
+ public ReturnDTO detail(@RequestBody @Valid IdDTO idDTO) {
+ return ReturnUtil.success(iMeterFixedAssetsService.getById(idDTO.getId()));
+ }
+
+ /**
+ * 刪除固定资产
+ */
+ @ApiOperation("删除固定资产")
+ @PostMapping("/delete")
+ @ResponseBody
+ public ReturnDTO delete(@RequestBody @Valid IdDTO idDTO) {
+ return iMeterFixedAssetsService.deleteByFixedAssetId(idDTO.getId());
+ }
+
+
+}
diff --git a/casic-metering-common/src/main/java/com/casic/missiles/enums/BusinessExceptionEnum.java b/casic-metering-common/src/main/java/com/casic/missiles/enums/BusinessExceptionEnum.java
index 1207389..048d1ae 100644
--- a/casic-metering-common/src/main/java/com/casic/missiles/enums/BusinessExceptionEnum.java
+++ b/casic-metering-common/src/main/java/com/casic/missiles/enums/BusinessExceptionEnum.java
@@ -33,7 +33,8 @@
OPERATOR_DISCOUNT_PERMISSION_NOT_EXISTENCE(2300, "业务员折扣权限不存在;"),
DIRECTOR_DISCOUNT_PERMISSION_NOT_EXISTENCE(2300, "负责人折扣权限不存在;"),
TRACE_SUPPLIER_ID_NULL(2400, "培训记录主键不能为空"),
- DUPLICATE_NUMBER(2401, "编号生成重复,请重新提交");
+ DUPLICATE_NUMBER(2401, "编号生成重复,请重新提交"),
+ DUPLICATE_MANUFACTURE_NUMBER(2401, "出厂编号重复");
private Integer code;
diff --git a/casic-metering-common/src/main/java/com/casic/missiles/utils/DictCodeUtils.java b/casic-metering-common/src/main/java/com/casic/missiles/utils/DictCodeUtils.java
new file mode 100644
index 0000000..f91602e
--- /dev/null
+++ b/casic-metering-common/src/main/java/com/casic/missiles/utils/DictCodeUtils.java
@@ -0,0 +1,77 @@
+package com.casic.missiles.utils;
+
+import com.casic.missiles.annotation.DictCodeField;
+import com.casic.missiles.core.application.service.AbstractDictService;
+import com.casic.missiles.exception.BusinessException;
+import org.apache.commons.lang3.StringUtils;
+
+import java.lang.reflect.Field;
+
+/**
+ * 字典utils
+ */
+public class DictCodeUtils {
+ /**
+ * 字典code转换成名称
+ */
+ public static void convertDictCodeToName(Object object) throws Exception{
+ Field[] fields = object.getClass().getDeclaredFields();
+ for (Field field:fields) {
+ if (!field.isAccessible()) {
+ field.setAccessible(true);
+ }
+ if (field.isAnnotationPresent(DictCodeField.class) && field.get(object) != null) {
+ DictCodeField dictCodeField = field.getAnnotationsByType(DictCodeField.class)[0];
+ if (StringUtils.isEmpty(dictCodeField.cacheName())) {
+ throw new BusinessException(500, "缓存名不能为空");
+ }
+ AbstractDictService dictService = SpringContextUtil.getBean(AbstractDictService.class);
+ String name = dictService.getDictNameByCode(dictCodeField.cacheName(), field.get(object).toString());
+ if (StringUtils.isEmpty(name)) {
+ throw new BusinessException(500, dictCodeField.message());
+ }
+ String destFieldName = field.getName() + "Name";
+ Field destField = object.getClass().getDeclaredField(destFieldName);
+ if (destField == null) {
+ throw new BusinessException(500, "字典名称字段不存在");
+ }
+ if(!destField.isAccessible()) {
+ destField.setAccessible(true);
+ }
+ destField.set(object, name);
+ }
+ }
+ }
+
+ /**
+ * 校验字典code是否合法
+ * @param object
+ * @return
+ */
+ public static boolean validDictCode(Object object) throws Exception{
+ Field[] fields = object.getClass().getDeclaredFields();
+ for (Field field:fields) {
+ if (!field.isAccessible()) {
+ field.setAccessible(true);
+ }
+ if (field.isAnnotationPresent(DictCodeField.class) && field.get(object) != null) {
+ DictCodeField dictCodeField = field.getAnnotationsByType(DictCodeField.class)[0];
+ // 判断字典code是否需要校验
+ if(!dictCodeField.needValid()){
+ continue;
+ }
+ AbstractDictService dictService = SpringContextUtil.getBean(AbstractDictService.class);
+ if (StringUtils.isEmpty(dictCodeField.cacheName())) {
+ throw new BusinessException(500, "缓存名不能为空");
+ }
+ String name = dictService.getDictNameByCode(dictCodeField.cacheName(), field.get(object).toString());
+ if (StringUtils.isEmpty(name)) {
+ throw new BusinessException(500, dictCodeField.message());
+ }
+ dictCodeField.message();
+ }
+ }
+ return true;
+ }
+
+}
\ No newline at end of file
diff --git a/casic-metering-dao/src/main/java/com/casic/missiles/mapper/MeterFixedAssetsMapper.java b/casic-metering-dao/src/main/java/com/casic/missiles/mapper/MeterFixedAssetsMapper.java
new file mode 100644
index 0000000..b2dc13d
--- /dev/null
+++ b/casic-metering-dao/src/main/java/com/casic/missiles/mapper/MeterFixedAssetsMapper.java
@@ -0,0 +1,16 @@
+package com.casic.missiles.mapper;
+
+import com.baomidou.mybatisplus.core.mapper.BaseMapper;
+import com.casic.missiles.model.MeterFixedAssets;
+
+/**
+ *
+ * Mapper 接口
+ *
+ *
+ * @author cuicheng
+ * @since 2022-12-07
+ */
+public interface MeterFixedAssetsMapper extends BaseMapper {
+ Long selectMaxNo();
+}
diff --git a/casic-metering-dao/src/main/resources/mapper/MeterFixedAssetsMapper.xml b/casic-metering-dao/src/main/resources/mapper/MeterFixedAssetsMapper.xml
new file mode 100644
index 0000000..39f6510
--- /dev/null
+++ b/casic-metering-dao/src/main/resources/mapper/MeterFixedAssetsMapper.xml
@@ -0,0 +1,7 @@
+
+
+
+
+
diff --git a/casic-metering-model/src/main/java/com/casic/missiles/annotation/DictCodeField.java b/casic-metering-model/src/main/java/com/casic/missiles/annotation/DictCodeField.java
new file mode 100644
index 0000000..91ef6ac
--- /dev/null
+++ b/casic-metering-model/src/main/java/com/casic/missiles/annotation/DictCodeField.java
@@ -0,0 +1,29 @@
+package com.casic.missiles.annotation;
+
+import java.lang.annotation.*;
+
+/**
+ * 字典字段注解,放在字段上边,用于字典字段的合法性校验,以及字典字段转名字
+ */
+@Target({ElementType.FIELD})
+@Retention(RetentionPolicy.RUNTIME)
+@Documented
+public @interface DictCodeField {
+
+ /**
+ * 校验错误信息
+ * @return
+ */
+ String message();
+
+ /**
+ * cacheName
+ */
+ String cacheName();
+
+ /**
+ * 是否校验字典code,默认校验
+ * @return
+ */
+ boolean needValid() default true;
+}
diff --git a/casic-metering-model/src/main/java/com/casic/missiles/constants/MeterDictCode.java b/casic-metering-model/src/main/java/com/casic/missiles/constants/MeterDictCode.java
new file mode 100644
index 0000000..b4501b1
--- /dev/null
+++ b/casic-metering-model/src/main/java/com/casic/missiles/constants/MeterDictCode.java
@@ -0,0 +1,53 @@
+package com.casic.missiles.constants;
+
+/**
+ * @Description: 字典名枚举
+ * @Author: wangpeng
+ * @Date: 2022/11/27 10:41
+ */
+public interface MeterDictCode {
+ //审批状态
+ String APPROVAL_STATUS = "approvalStatus";
+ //实施状态
+ String EFFECTIVE_STATUS = "effectiveStatus";
+ //文件类别
+ String FILE_TYPE = "fileType";
+ //行政职务
+ String ADMINISTRATION_JOB = "administrationJob";
+ //技术职称
+ String TECHNOLOGY_JOB = "technologyJob";
+ //文化程度
+ String EDUCATION = "education";
+ //校验类型
+ String CHECK_TYPE = "checkType";
+ //价格类别
+ String PRICE_TYPE = "priceType";
+ //项目
+ String PRICE_ITEM = "priceItem";
+ //业务员折扣权限
+ String OPERATOR_DISCOUNT_PERMISSION = "operatorDiscountPermission";
+ //负责人折扣权限
+ String DIRECTOR_DISCOUNT_PERMISSION = "directorDiscountPermission";
+ //资产类型
+ String ASSET_TYPE = "assetType";
+ //检定方式
+ String MESURE_TYPE = "mesureType";
+ //管理状态
+ String MANAGER_STATE = "managerState";
+ //ABC 设备级别
+ String ABC = "ABC";
+ // 检定周期
+ String MESURE_CYCLE = "mesureCycle";
+ //专业分类
+ String MAJOR_CATEGORY = "majorCategory";
+ //检定结果
+ String MESURE_RESULT = "mesureResult";
+ //设备类别
+ String EQUIPMENT_CATEGORY = "equipmentCategory";
+ //设备类型
+ String EQUIPMENT_TYPE = "equipmentType";
+ //管理级别
+ String MANAGER_LEVEL = "managerLevel";
+ //折旧方法
+ String dePRECIATION_METHOD = "depreciationMethod";
+}
diff --git a/casic-metering-model/src/main/java/com/casic/missiles/dto/IdDTO.java b/casic-metering-model/src/main/java/com/casic/missiles/dto/IdDTO.java
index 2e9ff86..61168a9 100644
--- a/casic-metering-model/src/main/java/com/casic/missiles/dto/IdDTO.java
+++ b/casic-metering-model/src/main/java/com/casic/missiles/dto/IdDTO.java
@@ -3,6 +3,10 @@
import io.swagger.annotations.ApiModelProperty;
import lombok.Data;
+import javax.validation.constraints.NotBlank;
+import javax.validation.constraints.NotEmpty;
+import javax.validation.constraints.NotNull;
+
/**
* @Description: for delete/detail use
* @Author: wangpeng
@@ -10,6 +14,7 @@
*/
@Data
public class IdDTO {
+ @NotNull(message = "主键ID不能为空")
@ApiModelProperty(value = "主键id", dataType = "Long", required = true)
private Long id;
}
diff --git a/casic-metering-model/src/main/java/com/casic/missiles/dto/meter/FixedAssetRequest.java b/casic-metering-model/src/main/java/com/casic/missiles/dto/meter/FixedAssetRequest.java
new file mode 100644
index 0000000..9ac72e1
--- /dev/null
+++ b/casic-metering-model/src/main/java/com/casic/missiles/dto/meter/FixedAssetRequest.java
@@ -0,0 +1,90 @@
+package com.casic.missiles.dto.meter;
+
+import com.casic.missiles.annotation.DictCodeField;
+import com.casic.missiles.constants.MeterDictCode;
+import io.swagger.annotations.ApiModel;
+import io.swagger.annotations.ApiModelProperty;
+import lombok.Data;
+
+/**
+ * 固定资产请求
+ */
+@ApiModel
+@Data
+public class FixedAssetRequest {
+ /**
+ * 资产编号
+ */
+ @ApiModelProperty(value = "资产编号", dataType = "String")
+ private String assetNo;
+ /**
+ * 资产类型
+ */
+ @DictCodeField(message = "资产类型不合法", cacheName = MeterDictCode.ASSET_TYPE)
+// @DictCodeField(message = "资产类型不合法", cacheName = "accountStatus")
+ @ApiModelProperty(value = "资产类型", dataType = "Integer")
+ private Integer assetType;
+ /**
+ * 设备编号
+ */
+ @ApiModelProperty(value = "设备编号", dataType = "String")
+ private String equipmentNo;
+ /**
+ * 设备名称
+ */
+ @ApiModelProperty(value = "设备名称", dataType = "String")
+ private String equipmentName;
+ /**
+ * 检定方式
+ */
+ @DictCodeField(message = "检定方式不合法", cacheName = MeterDictCode.MESURE_TYPE)
+ @ApiModelProperty(value = "检定方式", dataType = "Integer")
+ private Integer mesureType;
+ /**
+ * 管理状态
+ */
+ @DictCodeField(message = "管理状态不合法", cacheName = MeterDictCode.MANAGER_STATE)
+ @ApiModelProperty(value = "管理状态", dataType = "Integer")
+ private Integer managerState;
+ /**
+ * 使用部门
+ */
+ @ApiModelProperty(value = "使用部门", dataType = "Long")
+ private Long useDept;
+ /**
+ * 有效日期
+ */
+ @ApiModelProperty(value = "有效日期", dataType = "String")
+ private String validDate;
+ /**
+ * ABC 值 A,B,C
+ */
+ @DictCodeField(message = "ABC不合法", cacheName = MeterDictCode.ABC)
+ @ApiModelProperty(value = "ABC", dataType = "String")
+ private String abc;
+ /**
+ * 型号
+ */
+ @ApiModelProperty(value = "型号", dataType = "String")
+ private String modelNo;
+
+ /**
+ * 设备规格
+ */
+ @ApiModelProperty(value = "设备规格", dataType = "String")
+ private String equipmentSpecifications;
+
+ /**
+ * 设备类别
+ */
+ @DictCodeField(message = "设备类别不合法", cacheName = MeterDictCode.EQUIPMENT_CATEGORY)
+ @ApiModelProperty(value = "设备类别", dataType = "Integer")
+ private Integer equipmentCategory;
+
+ /**
+ * 出厂编号
+ */
+ @ApiModelProperty(value = "出厂编号", dataType = "String")
+ private String manufacturingNo;
+
+}
diff --git a/casic-metering-api/src/main/java/com/casic/missiles/controller/MeterFixedAssetsController.java b/casic-metering-api/src/main/java/com/casic/missiles/controller/MeterFixedAssetsController.java
new file mode 100644
index 0000000..a5dc19f
--- /dev/null
+++ b/casic-metering-api/src/main/java/com/casic/missiles/controller/MeterFixedAssetsController.java
@@ -0,0 +1,80 @@
+package com.casic.missiles.controller;
+
+import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
+import com.casic.missiles.core.base.controller.ExportController;
+import com.casic.missiles.core.page.PageFactory;
+import com.casic.missiles.core.page.PageInfoBT;
+import com.casic.missiles.dto.IdDTO;
+import com.casic.missiles.dto.ReturnDTO;
+import com.casic.missiles.dto.ReturnUtil;
+import com.casic.missiles.dto.meter.FixedAssetRequest;
+import com.casic.missiles.model.MeterFixedAssets;
+import com.casic.missiles.service.IMeterFixedAssetsService;
+import com.casic.missiles.utils.DictCodeUtils;
+import io.swagger.annotations.Api;
+import io.swagger.annotations.ApiOperation;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.web.bind.annotation.*;
+
+import javax.validation.Valid;
+
+/**
+ *
+ * 固定资产Controller
+ *
+ *
+ * @author cuicheng
+ * @since 2022-12-07
+ */
+@Api(tags = "固定资产管理接口")
+@RestController
+@RequestMapping("/meter/assets")
+public class MeterFixedAssetsController extends ExportController {
+
+ /**
+ * 固定资产service
+ */
+ @Autowired
+ private IMeterFixedAssetsService iMeterFixedAssetsService;
+ /**
+ * 计量组织列表
+ */
+ @ApiOperation("固定资产(分页)")
+ @PostMapping("/listPage")
+ @ResponseBody
+ public ReturnDTO> listPage(@RequestBody @Valid FixedAssetRequest request) throws Exception {
+ Page page = PageFactory.defaultPage();
+ DictCodeUtils.validDictCode(request);
+ return ReturnUtil.success(super.packForBT(iMeterFixedAssetsService.listPage(page, request)));
+ }
+ /**
+ * 固定资产更新
+ */
+ @ApiOperation("固定资产更新")
+ @PostMapping("/update")
+ @ResponseBody
+ public ReturnDTO update(@RequestBody @Valid MeterFixedAssets meterFixedAssets) {
+ return iMeterFixedAssetsService.updateFixedAsset(meterFixedAssets);
+ }
+ /**
+ * 固定资产详情
+ */
+ @ApiOperation("固定资产详情")
+ @PostMapping("/detail")
+ @ResponseBody
+ public ReturnDTO detail(@RequestBody @Valid IdDTO idDTO) {
+ return ReturnUtil.success(iMeterFixedAssetsService.getById(idDTO.getId()));
+ }
+
+ /**
+ * 刪除固定资产
+ */
+ @ApiOperation("删除固定资产")
+ @PostMapping("/delete")
+ @ResponseBody
+ public ReturnDTO delete(@RequestBody @Valid IdDTO idDTO) {
+ return iMeterFixedAssetsService.deleteByFixedAssetId(idDTO.getId());
+ }
+
+
+}
diff --git a/casic-metering-common/src/main/java/com/casic/missiles/enums/BusinessExceptionEnum.java b/casic-metering-common/src/main/java/com/casic/missiles/enums/BusinessExceptionEnum.java
index 1207389..048d1ae 100644
--- a/casic-metering-common/src/main/java/com/casic/missiles/enums/BusinessExceptionEnum.java
+++ b/casic-metering-common/src/main/java/com/casic/missiles/enums/BusinessExceptionEnum.java
@@ -33,7 +33,8 @@
OPERATOR_DISCOUNT_PERMISSION_NOT_EXISTENCE(2300, "业务员折扣权限不存在;"),
DIRECTOR_DISCOUNT_PERMISSION_NOT_EXISTENCE(2300, "负责人折扣权限不存在;"),
TRACE_SUPPLIER_ID_NULL(2400, "培训记录主键不能为空"),
- DUPLICATE_NUMBER(2401, "编号生成重复,请重新提交");
+ DUPLICATE_NUMBER(2401, "编号生成重复,请重新提交"),
+ DUPLICATE_MANUFACTURE_NUMBER(2401, "出厂编号重复");
private Integer code;
diff --git a/casic-metering-common/src/main/java/com/casic/missiles/utils/DictCodeUtils.java b/casic-metering-common/src/main/java/com/casic/missiles/utils/DictCodeUtils.java
new file mode 100644
index 0000000..f91602e
--- /dev/null
+++ b/casic-metering-common/src/main/java/com/casic/missiles/utils/DictCodeUtils.java
@@ -0,0 +1,77 @@
+package com.casic.missiles.utils;
+
+import com.casic.missiles.annotation.DictCodeField;
+import com.casic.missiles.core.application.service.AbstractDictService;
+import com.casic.missiles.exception.BusinessException;
+import org.apache.commons.lang3.StringUtils;
+
+import java.lang.reflect.Field;
+
+/**
+ * 字典utils
+ */
+public class DictCodeUtils {
+ /**
+ * 字典code转换成名称
+ */
+ public static void convertDictCodeToName(Object object) throws Exception{
+ Field[] fields = object.getClass().getDeclaredFields();
+ for (Field field:fields) {
+ if (!field.isAccessible()) {
+ field.setAccessible(true);
+ }
+ if (field.isAnnotationPresent(DictCodeField.class) && field.get(object) != null) {
+ DictCodeField dictCodeField = field.getAnnotationsByType(DictCodeField.class)[0];
+ if (StringUtils.isEmpty(dictCodeField.cacheName())) {
+ throw new BusinessException(500, "缓存名不能为空");
+ }
+ AbstractDictService dictService = SpringContextUtil.getBean(AbstractDictService.class);
+ String name = dictService.getDictNameByCode(dictCodeField.cacheName(), field.get(object).toString());
+ if (StringUtils.isEmpty(name)) {
+ throw new BusinessException(500, dictCodeField.message());
+ }
+ String destFieldName = field.getName() + "Name";
+ Field destField = object.getClass().getDeclaredField(destFieldName);
+ if (destField == null) {
+ throw new BusinessException(500, "字典名称字段不存在");
+ }
+ if(!destField.isAccessible()) {
+ destField.setAccessible(true);
+ }
+ destField.set(object, name);
+ }
+ }
+ }
+
+ /**
+ * 校验字典code是否合法
+ * @param object
+ * @return
+ */
+ public static boolean validDictCode(Object object) throws Exception{
+ Field[] fields = object.getClass().getDeclaredFields();
+ for (Field field:fields) {
+ if (!field.isAccessible()) {
+ field.setAccessible(true);
+ }
+ if (field.isAnnotationPresent(DictCodeField.class) && field.get(object) != null) {
+ DictCodeField dictCodeField = field.getAnnotationsByType(DictCodeField.class)[0];
+ // 判断字典code是否需要校验
+ if(!dictCodeField.needValid()){
+ continue;
+ }
+ AbstractDictService dictService = SpringContextUtil.getBean(AbstractDictService.class);
+ if (StringUtils.isEmpty(dictCodeField.cacheName())) {
+ throw new BusinessException(500, "缓存名不能为空");
+ }
+ String name = dictService.getDictNameByCode(dictCodeField.cacheName(), field.get(object).toString());
+ if (StringUtils.isEmpty(name)) {
+ throw new BusinessException(500, dictCodeField.message());
+ }
+ dictCodeField.message();
+ }
+ }
+ return true;
+ }
+
+}
\ No newline at end of file
diff --git a/casic-metering-dao/src/main/java/com/casic/missiles/mapper/MeterFixedAssetsMapper.java b/casic-metering-dao/src/main/java/com/casic/missiles/mapper/MeterFixedAssetsMapper.java
new file mode 100644
index 0000000..b2dc13d
--- /dev/null
+++ b/casic-metering-dao/src/main/java/com/casic/missiles/mapper/MeterFixedAssetsMapper.java
@@ -0,0 +1,16 @@
+package com.casic.missiles.mapper;
+
+import com.baomidou.mybatisplus.core.mapper.BaseMapper;
+import com.casic.missiles.model.MeterFixedAssets;
+
+/**
+ *
+ * Mapper 接口
+ *
+ *
+ * @author cuicheng
+ * @since 2022-12-07
+ */
+public interface MeterFixedAssetsMapper extends BaseMapper {
+ Long selectMaxNo();
+}
diff --git a/casic-metering-dao/src/main/resources/mapper/MeterFixedAssetsMapper.xml b/casic-metering-dao/src/main/resources/mapper/MeterFixedAssetsMapper.xml
new file mode 100644
index 0000000..39f6510
--- /dev/null
+++ b/casic-metering-dao/src/main/resources/mapper/MeterFixedAssetsMapper.xml
@@ -0,0 +1,7 @@
+
+
+
+
+
diff --git a/casic-metering-model/src/main/java/com/casic/missiles/annotation/DictCodeField.java b/casic-metering-model/src/main/java/com/casic/missiles/annotation/DictCodeField.java
new file mode 100644
index 0000000..91ef6ac
--- /dev/null
+++ b/casic-metering-model/src/main/java/com/casic/missiles/annotation/DictCodeField.java
@@ -0,0 +1,29 @@
+package com.casic.missiles.annotation;
+
+import java.lang.annotation.*;
+
+/**
+ * 字典字段注解,放在字段上边,用于字典字段的合法性校验,以及字典字段转名字
+ */
+@Target({ElementType.FIELD})
+@Retention(RetentionPolicy.RUNTIME)
+@Documented
+public @interface DictCodeField {
+
+ /**
+ * 校验错误信息
+ * @return
+ */
+ String message();
+
+ /**
+ * cacheName
+ */
+ String cacheName();
+
+ /**
+ * 是否校验字典code,默认校验
+ * @return
+ */
+ boolean needValid() default true;
+}
diff --git a/casic-metering-model/src/main/java/com/casic/missiles/constants/MeterDictCode.java b/casic-metering-model/src/main/java/com/casic/missiles/constants/MeterDictCode.java
new file mode 100644
index 0000000..b4501b1
--- /dev/null
+++ b/casic-metering-model/src/main/java/com/casic/missiles/constants/MeterDictCode.java
@@ -0,0 +1,53 @@
+package com.casic.missiles.constants;
+
+/**
+ * @Description: 字典名枚举
+ * @Author: wangpeng
+ * @Date: 2022/11/27 10:41
+ */
+public interface MeterDictCode {
+ //审批状态
+ String APPROVAL_STATUS = "approvalStatus";
+ //实施状态
+ String EFFECTIVE_STATUS = "effectiveStatus";
+ //文件类别
+ String FILE_TYPE = "fileType";
+ //行政职务
+ String ADMINISTRATION_JOB = "administrationJob";
+ //技术职称
+ String TECHNOLOGY_JOB = "technologyJob";
+ //文化程度
+ String EDUCATION = "education";
+ //校验类型
+ String CHECK_TYPE = "checkType";
+ //价格类别
+ String PRICE_TYPE = "priceType";
+ //项目
+ String PRICE_ITEM = "priceItem";
+ //业务员折扣权限
+ String OPERATOR_DISCOUNT_PERMISSION = "operatorDiscountPermission";
+ //负责人折扣权限
+ String DIRECTOR_DISCOUNT_PERMISSION = "directorDiscountPermission";
+ //资产类型
+ String ASSET_TYPE = "assetType";
+ //检定方式
+ String MESURE_TYPE = "mesureType";
+ //管理状态
+ String MANAGER_STATE = "managerState";
+ //ABC 设备级别
+ String ABC = "ABC";
+ // 检定周期
+ String MESURE_CYCLE = "mesureCycle";
+ //专业分类
+ String MAJOR_CATEGORY = "majorCategory";
+ //检定结果
+ String MESURE_RESULT = "mesureResult";
+ //设备类别
+ String EQUIPMENT_CATEGORY = "equipmentCategory";
+ //设备类型
+ String EQUIPMENT_TYPE = "equipmentType";
+ //管理级别
+ String MANAGER_LEVEL = "managerLevel";
+ //折旧方法
+ String dePRECIATION_METHOD = "depreciationMethod";
+}
diff --git a/casic-metering-model/src/main/java/com/casic/missiles/dto/IdDTO.java b/casic-metering-model/src/main/java/com/casic/missiles/dto/IdDTO.java
index 2e9ff86..61168a9 100644
--- a/casic-metering-model/src/main/java/com/casic/missiles/dto/IdDTO.java
+++ b/casic-metering-model/src/main/java/com/casic/missiles/dto/IdDTO.java
@@ -3,6 +3,10 @@
import io.swagger.annotations.ApiModelProperty;
import lombok.Data;
+import javax.validation.constraints.NotBlank;
+import javax.validation.constraints.NotEmpty;
+import javax.validation.constraints.NotNull;
+
/**
* @Description: for delete/detail use
* @Author: wangpeng
@@ -10,6 +14,7 @@
*/
@Data
public class IdDTO {
+ @NotNull(message = "主键ID不能为空")
@ApiModelProperty(value = "主键id", dataType = "Long", required = true)
private Long id;
}
diff --git a/casic-metering-model/src/main/java/com/casic/missiles/dto/meter/FixedAssetRequest.java b/casic-metering-model/src/main/java/com/casic/missiles/dto/meter/FixedAssetRequest.java
new file mode 100644
index 0000000..9ac72e1
--- /dev/null
+++ b/casic-metering-model/src/main/java/com/casic/missiles/dto/meter/FixedAssetRequest.java
@@ -0,0 +1,90 @@
+package com.casic.missiles.dto.meter;
+
+import com.casic.missiles.annotation.DictCodeField;
+import com.casic.missiles.constants.MeterDictCode;
+import io.swagger.annotations.ApiModel;
+import io.swagger.annotations.ApiModelProperty;
+import lombok.Data;
+
+/**
+ * 固定资产请求
+ */
+@ApiModel
+@Data
+public class FixedAssetRequest {
+ /**
+ * 资产编号
+ */
+ @ApiModelProperty(value = "资产编号", dataType = "String")
+ private String assetNo;
+ /**
+ * 资产类型
+ */
+ @DictCodeField(message = "资产类型不合法", cacheName = MeterDictCode.ASSET_TYPE)
+// @DictCodeField(message = "资产类型不合法", cacheName = "accountStatus")
+ @ApiModelProperty(value = "资产类型", dataType = "Integer")
+ private Integer assetType;
+ /**
+ * 设备编号
+ */
+ @ApiModelProperty(value = "设备编号", dataType = "String")
+ private String equipmentNo;
+ /**
+ * 设备名称
+ */
+ @ApiModelProperty(value = "设备名称", dataType = "String")
+ private String equipmentName;
+ /**
+ * 检定方式
+ */
+ @DictCodeField(message = "检定方式不合法", cacheName = MeterDictCode.MESURE_TYPE)
+ @ApiModelProperty(value = "检定方式", dataType = "Integer")
+ private Integer mesureType;
+ /**
+ * 管理状态
+ */
+ @DictCodeField(message = "管理状态不合法", cacheName = MeterDictCode.MANAGER_STATE)
+ @ApiModelProperty(value = "管理状态", dataType = "Integer")
+ private Integer managerState;
+ /**
+ * 使用部门
+ */
+ @ApiModelProperty(value = "使用部门", dataType = "Long")
+ private Long useDept;
+ /**
+ * 有效日期
+ */
+ @ApiModelProperty(value = "有效日期", dataType = "String")
+ private String validDate;
+ /**
+ * ABC 值 A,B,C
+ */
+ @DictCodeField(message = "ABC不合法", cacheName = MeterDictCode.ABC)
+ @ApiModelProperty(value = "ABC", dataType = "String")
+ private String abc;
+ /**
+ * 型号
+ */
+ @ApiModelProperty(value = "型号", dataType = "String")
+ private String modelNo;
+
+ /**
+ * 设备规格
+ */
+ @ApiModelProperty(value = "设备规格", dataType = "String")
+ private String equipmentSpecifications;
+
+ /**
+ * 设备类别
+ */
+ @DictCodeField(message = "设备类别不合法", cacheName = MeterDictCode.EQUIPMENT_CATEGORY)
+ @ApiModelProperty(value = "设备类别", dataType = "Integer")
+ private Integer equipmentCategory;
+
+ /**
+ * 出厂编号
+ */
+ @ApiModelProperty(value = "出厂编号", dataType = "String")
+ private String manufacturingNo;
+
+}
diff --git a/casic-metering-model/src/main/java/com/casic/missiles/model/MeterFixedAssets.java b/casic-metering-model/src/main/java/com/casic/missiles/model/MeterFixedAssets.java
new file mode 100644
index 0000000..5c0fb5e
--- /dev/null
+++ b/casic-metering-model/src/main/java/com/casic/missiles/model/MeterFixedAssets.java
@@ -0,0 +1,508 @@
+package com.casic.missiles.model;
+
+import com.alibaba.excel.annotation.ExcelIgnoreUnannotated;
+import com.alibaba.excel.annotation.write.style.ColumnWidth;
+import com.alibaba.excel.annotation.write.style.ContentRowHeight;
+import com.alibaba.excel.annotation.write.style.ContentStyle;
+import com.alibaba.excel.annotation.write.style.HeadRowHeight;
+import com.alibaba.excel.enums.poi.BorderStyleEnum;
+import com.baomidou.mybatisplus.annotation.TableField;
+import com.baomidou.mybatisplus.annotation.TableId;
+import com.baomidou.mybatisplus.annotation.TableName;
+import com.casic.missiles.annotation.DictCodeField;
+import com.casic.missiles.constants.MeterDictCode;
+import io.swagger.annotations.ApiModel;
+import io.swagger.annotations.ApiModelProperty;
+import lombok.Data;
+
+import javax.validation.constraints.NotBlank;
+import javax.validation.constraints.NotNull;
+import java.io.Serializable;
+import java.math.BigDecimal;
+
+/**
+ *
+ *
+ *
+ *
+ * @author cuicheng
+ * @since 2022-12-07
+ */
+@ColumnWidth(30)
+@HeadRowHeight(15)
+@ContentRowHeight(20)
+@ContentStyle(borderLeft = BorderStyleEnum.THIN, borderBottom = BorderStyleEnum.THIN, borderTop = BorderStyleEnum.THIN, borderRight = BorderStyleEnum.THIN)
+@ExcelIgnoreUnannotated
+@ApiModel
+@TableName("meter_fixed_assets")
+@Data
+public class MeterFixedAssets implements Serializable {
+
+ private static final long serialVersionUID = 1L;
+
+ /**
+ * 主键
+ */
+ @TableId("id")
+ @ApiModelProperty(value = "主键", dataType = "Long", required = true)
+ private Long id;
+
+ /**
+ * 资产编号
+ */
+ @TableField("asset_no")
+ @ApiModelProperty(value = "资产编号", dataType = "String", required = true)
+ private String assetNo;
+
+ /**
+ * 资产类型-字典code
+ */
+ @NotNull(message = "资产类型不能为空")
+ @TableField("asset_type")
+ @ApiModelProperty(value = "资产类型", dataType = "Integer", required = true)
+ @DictCodeField(message = "资产类型不合法", cacheName = MeterDictCode.ASSET_TYPE)
+ private Integer assetType;
+
+ /**
+ * 资产类型名称
+ */
+ @TableField(exist = false)
+ @ApiModelProperty(value = "资产类型名称", dataType = "String", required = true)
+ private String assetTypeName;
+
+ /**
+ * 设备名称
+ */
+ @NotBlank(message = "设备名称不能为空")
+ @TableField("equipment_name")
+ @ApiModelProperty(value = "设备名称", dataType = "String", required = true)
+ private String equipmentName;
+
+ /**
+ * 设备编号
+ */
+ @TableField("equipment_no")
+ @ApiModelProperty(value = "设备编号", dataType = "String", required = true)
+ private String equipmentNo;
+
+ /**
+ * 是否加入固定资产台账
+ */
+ @TableField("is_fixed_assets")
+ @ApiModelProperty(value = "是否加入固定资产台账", dataType = "Integer", required = true)
+ private Integer isFixedAssets;
+
+ /**
+ * 生产厂家
+ */
+ @NotBlank(message = "生产厂家不能为空")
+ @TableField("manufacturer")
+ @ApiModelProperty(value = "生产厂家", dataType = "String", required = true)
+ private String manufacturer;
+
+ /**
+ * 厂家国别
+ */
+ @TableField("manufacturer_country")
+ @ApiModelProperty(value = "厂家国别", dataType = "String", required = false)
+ private String manufacturerCountry;
+
+ /**
+ * 出厂编号
+ */
+ @NotBlank(message = "出厂编号不能为空")
+ @TableField("manufacturing_no")
+ @ApiModelProperty(value = "出厂编号", dataType = "String", required = false)
+ private String manufacturingNo;
+
+ /**
+ * 出厂年月
+ */
+ @TableField("manufacturing_date")
+ @ApiModelProperty(value = "出厂年月", dataType = "String", required = false)
+ private String manufacturingDate;
+
+ /**
+ * 型号
+ */
+ @NotBlank(message = "型号不能为空")
+ @TableField("model_no")
+ @ApiModelProperty(value = "型号", dataType = "String", required = true)
+ private String modelNo;
+
+ /**
+ * 管理状态-字典code
+ */
+ @TableField("manager_state")
+ @ApiModelProperty(value = "管理状态", dataType = "Integer", required = false)
+ private Integer managerState;
+ /**
+ * 管理状态名称
+ */
+ @TableField(exist = false)
+ @ApiModelProperty(value = "管理状态名称", dataType = "String", required = false)
+ private String managerStateName;
+
+ /**
+ * ABC-字典code
+ */
+ @TableField("ABC")
+ @ApiModelProperty(value = "ABC", dataType = "String", required = false)
+ private String abc;
+
+ /**
+ * 标签绑定
+ */
+ @TableField("label_bind")
+ @ApiModelProperty(value = "标签绑定", dataType = "String", required = false)
+ private String labelBind;
+
+ /**
+ * 立卡年月
+ */
+ @TableField("card_establishment_date")
+ @ApiModelProperty(value = "立卡年月", dataType = "String", required = false)
+ private String cardEstablishmentDate;
+
+ /**
+ * 启用日期
+ */
+ @TableField("enable_date")
+ @ApiModelProperty(value = "启用日期", dataType = "String", required = false)
+ private String enableDate;
+
+ /**
+ * 检定方式-字典code
+ */
+ @TableField("mesure_type")
+ @ApiModelProperty(value = "检定方式", dataType = "Integer", required = false)
+ private Integer mesureType;
+
+ /**
+ * 检定方式名称
+ */
+ @TableField(exist = false)
+ @ApiModelProperty(value = "检定方式名称", dataType = "String", required = false)
+ private String mesureTypeName;
+
+ /**
+ * 检定周期-字典code
+ */
+ @TableField("mesure_cycle")
+ @ApiModelProperty(value = "检定周期", dataType = "Integer", required = false)
+ private Integer mesureCycle;
+
+ /**
+ * 检定周期名称
+ */
+ @TableField(exist = false)
+ @ApiModelProperty(value = "检定周期名称", dataType = "String", required = false)
+ private String mesureCycleName;
+
+ /**
+ * 测量范围
+ */
+ @TableField("mesure_range")
+ @ApiModelProperty(value = "测量范围", dataType = "String", required = false)
+ private String mesureRange;
+
+ /**
+ * 不确定度
+ */
+ @TableField("uncertainty")
+ @ApiModelProperty(value = "不确定度", dataType = "String", required = false)
+ private String uncertainty;
+
+ /**
+ * 使用部门
+ */
+ @TableField("use_dept")
+ @ApiModelProperty(value = "使用部门", dataType = "Long", required = false)
+ private Long useDept;
+
+ /**
+ * 使用人
+ */
+ @TableField("use_person")
+ @ApiModelProperty(value = "使用人", dataType = "Long", required = false)
+ private Long usePerson;
+
+ /**
+ * 专业分类-字典code
+ */
+ @TableField("major_category")
+ @ApiModelProperty(value = "专业分类", dataType = "Integer", required = false)
+ private Integer majorCategory;
+ /**
+ * 专业分类名称
+ */
+ @TableField(exist = false)
+ @ApiModelProperty(value = "专业分类名称", dataType = "String", required = false)
+ private String majorCategoryName;
+
+ /**
+ * 检定部门
+ */
+ @TableField("mesure_dept")
+ @ApiModelProperty(value = "检定部门", dataType = "Long", required = false)
+ private Long mesureDept;
+
+ /**
+ * 检定日期
+ */
+ @TableField("mesure_date")
+ @ApiModelProperty(value = "检定日期", dataType = "String", required = false)
+ private String mesureDate;
+
+ /**
+ * 有效日期
+ */
+ @TableField("valid_date")
+ @ApiModelProperty(value = "有效日期", dataType = "String", required = false)
+ private String validDate;
+
+ /**
+ * 检定结果-字典code
+ */
+ @TableField("mesure_result")
+ @ApiModelProperty(value = "有效日期", dataType = "Integer", required = false)
+ private Integer mesureResult;
+
+ /**
+ * 检定结果名称
+ */
+ @TableField(exist = false)
+ @ApiModelProperty(value = "有效日期", dataType = "String", required = false)
+ private String mesureResultfName;
+
+ /**
+ * 是否是技术指标需要校准检定的设备
+ */
+ @TableField("is_calibration_test_equipment")
+ @ApiModelProperty(value = "是否是技术指标需要校准检定的设备", dataType = "Integer", required = false)
+ private Integer isCalibrationTestEquipment;
+
+ /**
+ * 是否是测量工装台账
+ */
+ @TableField("is_measure_account")
+ @ApiModelProperty(value = "是否是测量工装台账", dataType = "Integer", required = false)
+ private Integer isMeasureAccount;
+
+ /**
+ * 是否标准配套设备
+ */
+ @TableField("is_standard_support_equipment")
+ @ApiModelProperty(value = "是否标准配套设备", dataType = "Integer", required = false)
+ private Integer isStandardSupportEquipment;
+
+ /**
+ * 资产来源
+ */
+ @TableField("asset_source")
+ @ApiModelProperty(value = "资产来源", dataType = "String", required = false)
+ private String assetSource;
+
+ /**
+ * 设备规格
+ */
+ @TableField("equipment_specifications")
+ @ApiModelProperty(value = "设备规格", dataType = "String", required = false)
+ private String equipmentSpecifications;
+
+ /**
+ * 设备类别-字典code
+ */
+ @TableField("equipment_category")
+ @ApiModelProperty(value = "设备类别", dataType = "Integer", required = false)
+ private Integer equipmentCategory;
+
+ /**
+ * 设备类别名称
+ */
+ @TableField(exist = false)
+ @ApiModelProperty(value = "设备类别名称", dataType = "String", required = false)
+ private String equipmentCategoryName;
+
+ /**
+ * 设备类型-字典code
+ */
+ @TableField("equipment_type")
+ @ApiModelProperty(value = "设备类型", dataType = "Integer", required = false)
+ private Integer equipmentType;
+
+ /**
+ * 设备类型名称
+ */
+ @TableField(exist = false)
+ @ApiModelProperty(value = "设备类型名称", dataType = "String", required = false)
+ private String equipmentTypeName;
+
+ /**
+ * 资本来源
+ */
+ @TableField("capital_source")
+ @ApiModelProperty(value = "资本来源", dataType = "Integer", required = false)
+ private Integer capitalSource;
+
+ /**
+ * 资本来源名称
+ */
+ @TableField(exist = false)
+ @ApiModelProperty(value = "资本来源", dataType = "String", required = false)
+ private String capitalSourceName;
+
+ /**
+ * 管理级别-字典code
+ */
+ @TableField("manager_level")
+ @ApiModelProperty(value = "管理级别", dataType = "Integer", required = false)
+ private Integer managerLevel;
+
+ /**
+ * 管理级别名称
+ */
+ @TableField(exist = false)
+ @ApiModelProperty(value = "管理级别名称", dataType = "String", required = false)
+ private String managerLevelName;
+
+ /**
+ * 用途
+ */
+ @TableField("purpose")
+ @ApiModelProperty(value = "用途", dataType = "String", required = false)
+ private String purpose;
+
+ /**
+ * 技术水平
+ */
+ @TableField("technical_level")
+ @ApiModelProperty(value = "技术水平", dataType = "String", required = false)
+ private String technicalLevel;
+
+ /**
+ * 完好状态
+ */
+ @TableField("intact_state")
+ @ApiModelProperty(value = "完好状态", dataType = "Integer", required = false)
+ private Integer intactState;
+
+ /**
+ * 外形尺寸
+ */
+ @TableField("overall_dimension")
+ @ApiModelProperty(value = "外形尺寸", dataType = "String", required = false)
+ private String overallDimension;
+
+ /**
+ * 重量(吨)
+ */
+ @TableField("weight")
+ @ApiModelProperty(value = "重量(吨)", dataType = "Integer", required = false)
+ private Integer weight;
+
+ /**
+ * 单价
+ */
+ @TableField("single_price")
+ @ApiModelProperty(value = "单价", dataType = "BigDecimal", required = false)
+ private BigDecimal singlePrice;
+
+ /**
+ * 安装及杂费
+ */
+ @TableField("install_incidental_expenses")
+ @ApiModelProperty(value = "安装及杂费", dataType = "String", required = false)
+ private String installIncidentalExpenses;
+
+ /**
+ * 安装地点
+ */
+ @TableField("install_place")
+ @ApiModelProperty(value = "安装地点", dataType = "String", required = false)
+ private String installPlace;
+
+ /**
+ * 原值
+ */
+ @TableField("origin_value")
+ @ApiModelProperty(value = "原值", dataType = "BigDecimal", required = false)
+ private BigDecimal originValue;
+
+ /**
+ * 目前原值
+ */
+ @TableField("present_origin_value")
+ @ApiModelProperty(value = "目前原值", dataType = "BigDecimal", required = false)
+ private BigDecimal presentOriginValue;
+
+ /**
+ * 折旧年限
+ */
+ @TableField("depreciation_period")
+ @ApiModelProperty(value = "折旧年限", dataType = "Integer", required = false)
+ private Integer depreciationPeriod;
+
+ /**
+ * 折旧方法-字典code
+ */
+ @TableField("depreciation_method")
+ @ApiModelProperty(value = "折旧方法", dataType = "Integer", required = false)
+ private Integer depreciationMethod;
+
+ /**
+ * 折旧方法名称
+ */
+ @TableField(exist = false)
+ @ApiModelProperty(value = "折旧方法名称", dataType = "String", required = false)
+ private String depreciationMethodName;
+ /**
+ * 属性
+ */
+ @TableField("attribute")
+ @ApiModelProperty(value = "属性", dataType = "String", required = false)
+ private String attribute;
+
+ /**
+ * 版本号
+ */
+ @TableField("version")
+ @ApiModelProperty(value = "版本号", dataType = "Integer", required = false)
+ private Integer version;
+
+ /**
+ * 备注
+ */
+ @TableField("remark")
+ @ApiModelProperty(value = "备注", dataType = "String", required = false)
+ private String remark;
+
+ /**
+ * 创建人
+ */
+ @TableField("create_user")
+ @ApiModelProperty(value = "创建人", dataType = "Long", required = false)
+ private Long createUser;
+
+ /**
+ * 删除标记
+ */
+ @TableField("is_del")
+ @ApiModelProperty(value = "删除标记", dataType = "Integer", required = false)
+ private Integer isDel;
+
+ /**
+ * 创建时间
+ */
+ @TableField("create_time")
+ @ApiModelProperty(value = "创建时间", dataType = "String", required = false)
+ private String createTime;
+
+ /**
+ * 更新时间
+ */
+ @TableField("update_time")
+ @ApiModelProperty(value = "更新时间", dataType = "String", required = false)
+ private String updateTime;
+
+}
diff --git a/casic-metering-api/src/main/java/com/casic/missiles/controller/MeterFixedAssetsController.java b/casic-metering-api/src/main/java/com/casic/missiles/controller/MeterFixedAssetsController.java
new file mode 100644
index 0000000..a5dc19f
--- /dev/null
+++ b/casic-metering-api/src/main/java/com/casic/missiles/controller/MeterFixedAssetsController.java
@@ -0,0 +1,80 @@
+package com.casic.missiles.controller;
+
+import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
+import com.casic.missiles.core.base.controller.ExportController;
+import com.casic.missiles.core.page.PageFactory;
+import com.casic.missiles.core.page.PageInfoBT;
+import com.casic.missiles.dto.IdDTO;
+import com.casic.missiles.dto.ReturnDTO;
+import com.casic.missiles.dto.ReturnUtil;
+import com.casic.missiles.dto.meter.FixedAssetRequest;
+import com.casic.missiles.model.MeterFixedAssets;
+import com.casic.missiles.service.IMeterFixedAssetsService;
+import com.casic.missiles.utils.DictCodeUtils;
+import io.swagger.annotations.Api;
+import io.swagger.annotations.ApiOperation;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.web.bind.annotation.*;
+
+import javax.validation.Valid;
+
+/**
+ *
+ * 固定资产Controller
+ *
+ *
+ * @author cuicheng
+ * @since 2022-12-07
+ */
+@Api(tags = "固定资产管理接口")
+@RestController
+@RequestMapping("/meter/assets")
+public class MeterFixedAssetsController extends ExportController {
+
+ /**
+ * 固定资产service
+ */
+ @Autowired
+ private IMeterFixedAssetsService iMeterFixedAssetsService;
+ /**
+ * 计量组织列表
+ */
+ @ApiOperation("固定资产(分页)")
+ @PostMapping("/listPage")
+ @ResponseBody
+ public ReturnDTO> listPage(@RequestBody @Valid FixedAssetRequest request) throws Exception {
+ Page page = PageFactory.defaultPage();
+ DictCodeUtils.validDictCode(request);
+ return ReturnUtil.success(super.packForBT(iMeterFixedAssetsService.listPage(page, request)));
+ }
+ /**
+ * 固定资产更新
+ */
+ @ApiOperation("固定资产更新")
+ @PostMapping("/update")
+ @ResponseBody
+ public ReturnDTO update(@RequestBody @Valid MeterFixedAssets meterFixedAssets) {
+ return iMeterFixedAssetsService.updateFixedAsset(meterFixedAssets);
+ }
+ /**
+ * 固定资产详情
+ */
+ @ApiOperation("固定资产详情")
+ @PostMapping("/detail")
+ @ResponseBody
+ public ReturnDTO detail(@RequestBody @Valid IdDTO idDTO) {
+ return ReturnUtil.success(iMeterFixedAssetsService.getById(idDTO.getId()));
+ }
+
+ /**
+ * 刪除固定资产
+ */
+ @ApiOperation("删除固定资产")
+ @PostMapping("/delete")
+ @ResponseBody
+ public ReturnDTO delete(@RequestBody @Valid IdDTO idDTO) {
+ return iMeterFixedAssetsService.deleteByFixedAssetId(idDTO.getId());
+ }
+
+
+}
diff --git a/casic-metering-common/src/main/java/com/casic/missiles/enums/BusinessExceptionEnum.java b/casic-metering-common/src/main/java/com/casic/missiles/enums/BusinessExceptionEnum.java
index 1207389..048d1ae 100644
--- a/casic-metering-common/src/main/java/com/casic/missiles/enums/BusinessExceptionEnum.java
+++ b/casic-metering-common/src/main/java/com/casic/missiles/enums/BusinessExceptionEnum.java
@@ -33,7 +33,8 @@
OPERATOR_DISCOUNT_PERMISSION_NOT_EXISTENCE(2300, "业务员折扣权限不存在;"),
DIRECTOR_DISCOUNT_PERMISSION_NOT_EXISTENCE(2300, "负责人折扣权限不存在;"),
TRACE_SUPPLIER_ID_NULL(2400, "培训记录主键不能为空"),
- DUPLICATE_NUMBER(2401, "编号生成重复,请重新提交");
+ DUPLICATE_NUMBER(2401, "编号生成重复,请重新提交"),
+ DUPLICATE_MANUFACTURE_NUMBER(2401, "出厂编号重复");
private Integer code;
diff --git a/casic-metering-common/src/main/java/com/casic/missiles/utils/DictCodeUtils.java b/casic-metering-common/src/main/java/com/casic/missiles/utils/DictCodeUtils.java
new file mode 100644
index 0000000..f91602e
--- /dev/null
+++ b/casic-metering-common/src/main/java/com/casic/missiles/utils/DictCodeUtils.java
@@ -0,0 +1,77 @@
+package com.casic.missiles.utils;
+
+import com.casic.missiles.annotation.DictCodeField;
+import com.casic.missiles.core.application.service.AbstractDictService;
+import com.casic.missiles.exception.BusinessException;
+import org.apache.commons.lang3.StringUtils;
+
+import java.lang.reflect.Field;
+
+/**
+ * 字典utils
+ */
+public class DictCodeUtils {
+ /**
+ * 字典code转换成名称
+ */
+ public static void convertDictCodeToName(Object object) throws Exception{
+ Field[] fields = object.getClass().getDeclaredFields();
+ for (Field field:fields) {
+ if (!field.isAccessible()) {
+ field.setAccessible(true);
+ }
+ if (field.isAnnotationPresent(DictCodeField.class) && field.get(object) != null) {
+ DictCodeField dictCodeField = field.getAnnotationsByType(DictCodeField.class)[0];
+ if (StringUtils.isEmpty(dictCodeField.cacheName())) {
+ throw new BusinessException(500, "缓存名不能为空");
+ }
+ AbstractDictService dictService = SpringContextUtil.getBean(AbstractDictService.class);
+ String name = dictService.getDictNameByCode(dictCodeField.cacheName(), field.get(object).toString());
+ if (StringUtils.isEmpty(name)) {
+ throw new BusinessException(500, dictCodeField.message());
+ }
+ String destFieldName = field.getName() + "Name";
+ Field destField = object.getClass().getDeclaredField(destFieldName);
+ if (destField == null) {
+ throw new BusinessException(500, "字典名称字段不存在");
+ }
+ if(!destField.isAccessible()) {
+ destField.setAccessible(true);
+ }
+ destField.set(object, name);
+ }
+ }
+ }
+
+ /**
+ * 校验字典code是否合法
+ * @param object
+ * @return
+ */
+ public static boolean validDictCode(Object object) throws Exception{
+ Field[] fields = object.getClass().getDeclaredFields();
+ for (Field field:fields) {
+ if (!field.isAccessible()) {
+ field.setAccessible(true);
+ }
+ if (field.isAnnotationPresent(DictCodeField.class) && field.get(object) != null) {
+ DictCodeField dictCodeField = field.getAnnotationsByType(DictCodeField.class)[0];
+ // 判断字典code是否需要校验
+ if(!dictCodeField.needValid()){
+ continue;
+ }
+ AbstractDictService dictService = SpringContextUtil.getBean(AbstractDictService.class);
+ if (StringUtils.isEmpty(dictCodeField.cacheName())) {
+ throw new BusinessException(500, "缓存名不能为空");
+ }
+ String name = dictService.getDictNameByCode(dictCodeField.cacheName(), field.get(object).toString());
+ if (StringUtils.isEmpty(name)) {
+ throw new BusinessException(500, dictCodeField.message());
+ }
+ dictCodeField.message();
+ }
+ }
+ return true;
+ }
+
+}
\ No newline at end of file
diff --git a/casic-metering-dao/src/main/java/com/casic/missiles/mapper/MeterFixedAssetsMapper.java b/casic-metering-dao/src/main/java/com/casic/missiles/mapper/MeterFixedAssetsMapper.java
new file mode 100644
index 0000000..b2dc13d
--- /dev/null
+++ b/casic-metering-dao/src/main/java/com/casic/missiles/mapper/MeterFixedAssetsMapper.java
@@ -0,0 +1,16 @@
+package com.casic.missiles.mapper;
+
+import com.baomidou.mybatisplus.core.mapper.BaseMapper;
+import com.casic.missiles.model.MeterFixedAssets;
+
+/**
+ *
+ * Mapper 接口
+ *
+ *
+ * @author cuicheng
+ * @since 2022-12-07
+ */
+public interface MeterFixedAssetsMapper extends BaseMapper {
+ Long selectMaxNo();
+}
diff --git a/casic-metering-dao/src/main/resources/mapper/MeterFixedAssetsMapper.xml b/casic-metering-dao/src/main/resources/mapper/MeterFixedAssetsMapper.xml
new file mode 100644
index 0000000..39f6510
--- /dev/null
+++ b/casic-metering-dao/src/main/resources/mapper/MeterFixedAssetsMapper.xml
@@ -0,0 +1,7 @@
+
+
+
+
+
diff --git a/casic-metering-model/src/main/java/com/casic/missiles/annotation/DictCodeField.java b/casic-metering-model/src/main/java/com/casic/missiles/annotation/DictCodeField.java
new file mode 100644
index 0000000..91ef6ac
--- /dev/null
+++ b/casic-metering-model/src/main/java/com/casic/missiles/annotation/DictCodeField.java
@@ -0,0 +1,29 @@
+package com.casic.missiles.annotation;
+
+import java.lang.annotation.*;
+
+/**
+ * 字典字段注解,放在字段上边,用于字典字段的合法性校验,以及字典字段转名字
+ */
+@Target({ElementType.FIELD})
+@Retention(RetentionPolicy.RUNTIME)
+@Documented
+public @interface DictCodeField {
+
+ /**
+ * 校验错误信息
+ * @return
+ */
+ String message();
+
+ /**
+ * cacheName
+ */
+ String cacheName();
+
+ /**
+ * 是否校验字典code,默认校验
+ * @return
+ */
+ boolean needValid() default true;
+}
diff --git a/casic-metering-model/src/main/java/com/casic/missiles/constants/MeterDictCode.java b/casic-metering-model/src/main/java/com/casic/missiles/constants/MeterDictCode.java
new file mode 100644
index 0000000..b4501b1
--- /dev/null
+++ b/casic-metering-model/src/main/java/com/casic/missiles/constants/MeterDictCode.java
@@ -0,0 +1,53 @@
+package com.casic.missiles.constants;
+
+/**
+ * @Description: 字典名枚举
+ * @Author: wangpeng
+ * @Date: 2022/11/27 10:41
+ */
+public interface MeterDictCode {
+ //审批状态
+ String APPROVAL_STATUS = "approvalStatus";
+ //实施状态
+ String EFFECTIVE_STATUS = "effectiveStatus";
+ //文件类别
+ String FILE_TYPE = "fileType";
+ //行政职务
+ String ADMINISTRATION_JOB = "administrationJob";
+ //技术职称
+ String TECHNOLOGY_JOB = "technologyJob";
+ //文化程度
+ String EDUCATION = "education";
+ //校验类型
+ String CHECK_TYPE = "checkType";
+ //价格类别
+ String PRICE_TYPE = "priceType";
+ //项目
+ String PRICE_ITEM = "priceItem";
+ //业务员折扣权限
+ String OPERATOR_DISCOUNT_PERMISSION = "operatorDiscountPermission";
+ //负责人折扣权限
+ String DIRECTOR_DISCOUNT_PERMISSION = "directorDiscountPermission";
+ //资产类型
+ String ASSET_TYPE = "assetType";
+ //检定方式
+ String MESURE_TYPE = "mesureType";
+ //管理状态
+ String MANAGER_STATE = "managerState";
+ //ABC 设备级别
+ String ABC = "ABC";
+ // 检定周期
+ String MESURE_CYCLE = "mesureCycle";
+ //专业分类
+ String MAJOR_CATEGORY = "majorCategory";
+ //检定结果
+ String MESURE_RESULT = "mesureResult";
+ //设备类别
+ String EQUIPMENT_CATEGORY = "equipmentCategory";
+ //设备类型
+ String EQUIPMENT_TYPE = "equipmentType";
+ //管理级别
+ String MANAGER_LEVEL = "managerLevel";
+ //折旧方法
+ String dePRECIATION_METHOD = "depreciationMethod";
+}
diff --git a/casic-metering-model/src/main/java/com/casic/missiles/dto/IdDTO.java b/casic-metering-model/src/main/java/com/casic/missiles/dto/IdDTO.java
index 2e9ff86..61168a9 100644
--- a/casic-metering-model/src/main/java/com/casic/missiles/dto/IdDTO.java
+++ b/casic-metering-model/src/main/java/com/casic/missiles/dto/IdDTO.java
@@ -3,6 +3,10 @@
import io.swagger.annotations.ApiModelProperty;
import lombok.Data;
+import javax.validation.constraints.NotBlank;
+import javax.validation.constraints.NotEmpty;
+import javax.validation.constraints.NotNull;
+
/**
* @Description: for delete/detail use
* @Author: wangpeng
@@ -10,6 +14,7 @@
*/
@Data
public class IdDTO {
+ @NotNull(message = "主键ID不能为空")
@ApiModelProperty(value = "主键id", dataType = "Long", required = true)
private Long id;
}
diff --git a/casic-metering-model/src/main/java/com/casic/missiles/dto/meter/FixedAssetRequest.java b/casic-metering-model/src/main/java/com/casic/missiles/dto/meter/FixedAssetRequest.java
new file mode 100644
index 0000000..9ac72e1
--- /dev/null
+++ b/casic-metering-model/src/main/java/com/casic/missiles/dto/meter/FixedAssetRequest.java
@@ -0,0 +1,90 @@
+package com.casic.missiles.dto.meter;
+
+import com.casic.missiles.annotation.DictCodeField;
+import com.casic.missiles.constants.MeterDictCode;
+import io.swagger.annotations.ApiModel;
+import io.swagger.annotations.ApiModelProperty;
+import lombok.Data;
+
+/**
+ * 固定资产请求
+ */
+@ApiModel
+@Data
+public class FixedAssetRequest {
+ /**
+ * 资产编号
+ */
+ @ApiModelProperty(value = "资产编号", dataType = "String")
+ private String assetNo;
+ /**
+ * 资产类型
+ */
+ @DictCodeField(message = "资产类型不合法", cacheName = MeterDictCode.ASSET_TYPE)
+// @DictCodeField(message = "资产类型不合法", cacheName = "accountStatus")
+ @ApiModelProperty(value = "资产类型", dataType = "Integer")
+ private Integer assetType;
+ /**
+ * 设备编号
+ */
+ @ApiModelProperty(value = "设备编号", dataType = "String")
+ private String equipmentNo;
+ /**
+ * 设备名称
+ */
+ @ApiModelProperty(value = "设备名称", dataType = "String")
+ private String equipmentName;
+ /**
+ * 检定方式
+ */
+ @DictCodeField(message = "检定方式不合法", cacheName = MeterDictCode.MESURE_TYPE)
+ @ApiModelProperty(value = "检定方式", dataType = "Integer")
+ private Integer mesureType;
+ /**
+ * 管理状态
+ */
+ @DictCodeField(message = "管理状态不合法", cacheName = MeterDictCode.MANAGER_STATE)
+ @ApiModelProperty(value = "管理状态", dataType = "Integer")
+ private Integer managerState;
+ /**
+ * 使用部门
+ */
+ @ApiModelProperty(value = "使用部门", dataType = "Long")
+ private Long useDept;
+ /**
+ * 有效日期
+ */
+ @ApiModelProperty(value = "有效日期", dataType = "String")
+ private String validDate;
+ /**
+ * ABC 值 A,B,C
+ */
+ @DictCodeField(message = "ABC不合法", cacheName = MeterDictCode.ABC)
+ @ApiModelProperty(value = "ABC", dataType = "String")
+ private String abc;
+ /**
+ * 型号
+ */
+ @ApiModelProperty(value = "型号", dataType = "String")
+ private String modelNo;
+
+ /**
+ * 设备规格
+ */
+ @ApiModelProperty(value = "设备规格", dataType = "String")
+ private String equipmentSpecifications;
+
+ /**
+ * 设备类别
+ */
+ @DictCodeField(message = "设备类别不合法", cacheName = MeterDictCode.EQUIPMENT_CATEGORY)
+ @ApiModelProperty(value = "设备类别", dataType = "Integer")
+ private Integer equipmentCategory;
+
+ /**
+ * 出厂编号
+ */
+ @ApiModelProperty(value = "出厂编号", dataType = "String")
+ private String manufacturingNo;
+
+}
diff --git a/casic-metering-model/src/main/java/com/casic/missiles/model/MeterFixedAssets.java b/casic-metering-model/src/main/java/com/casic/missiles/model/MeterFixedAssets.java
new file mode 100644
index 0000000..5c0fb5e
--- /dev/null
+++ b/casic-metering-model/src/main/java/com/casic/missiles/model/MeterFixedAssets.java
@@ -0,0 +1,508 @@
+package com.casic.missiles.model;
+
+import com.alibaba.excel.annotation.ExcelIgnoreUnannotated;
+import com.alibaba.excel.annotation.write.style.ColumnWidth;
+import com.alibaba.excel.annotation.write.style.ContentRowHeight;
+import com.alibaba.excel.annotation.write.style.ContentStyle;
+import com.alibaba.excel.annotation.write.style.HeadRowHeight;
+import com.alibaba.excel.enums.poi.BorderStyleEnum;
+import com.baomidou.mybatisplus.annotation.TableField;
+import com.baomidou.mybatisplus.annotation.TableId;
+import com.baomidou.mybatisplus.annotation.TableName;
+import com.casic.missiles.annotation.DictCodeField;
+import com.casic.missiles.constants.MeterDictCode;
+import io.swagger.annotations.ApiModel;
+import io.swagger.annotations.ApiModelProperty;
+import lombok.Data;
+
+import javax.validation.constraints.NotBlank;
+import javax.validation.constraints.NotNull;
+import java.io.Serializable;
+import java.math.BigDecimal;
+
+/**
+ *
+ *
+ *
+ *
+ * @author cuicheng
+ * @since 2022-12-07
+ */
+@ColumnWidth(30)
+@HeadRowHeight(15)
+@ContentRowHeight(20)
+@ContentStyle(borderLeft = BorderStyleEnum.THIN, borderBottom = BorderStyleEnum.THIN, borderTop = BorderStyleEnum.THIN, borderRight = BorderStyleEnum.THIN)
+@ExcelIgnoreUnannotated
+@ApiModel
+@TableName("meter_fixed_assets")
+@Data
+public class MeterFixedAssets implements Serializable {
+
+ private static final long serialVersionUID = 1L;
+
+ /**
+ * 主键
+ */
+ @TableId("id")
+ @ApiModelProperty(value = "主键", dataType = "Long", required = true)
+ private Long id;
+
+ /**
+ * 资产编号
+ */
+ @TableField("asset_no")
+ @ApiModelProperty(value = "资产编号", dataType = "String", required = true)
+ private String assetNo;
+
+ /**
+ * 资产类型-字典code
+ */
+ @NotNull(message = "资产类型不能为空")
+ @TableField("asset_type")
+ @ApiModelProperty(value = "资产类型", dataType = "Integer", required = true)
+ @DictCodeField(message = "资产类型不合法", cacheName = MeterDictCode.ASSET_TYPE)
+ private Integer assetType;
+
+ /**
+ * 资产类型名称
+ */
+ @TableField(exist = false)
+ @ApiModelProperty(value = "资产类型名称", dataType = "String", required = true)
+ private String assetTypeName;
+
+ /**
+ * 设备名称
+ */
+ @NotBlank(message = "设备名称不能为空")
+ @TableField("equipment_name")
+ @ApiModelProperty(value = "设备名称", dataType = "String", required = true)
+ private String equipmentName;
+
+ /**
+ * 设备编号
+ */
+ @TableField("equipment_no")
+ @ApiModelProperty(value = "设备编号", dataType = "String", required = true)
+ private String equipmentNo;
+
+ /**
+ * 是否加入固定资产台账
+ */
+ @TableField("is_fixed_assets")
+ @ApiModelProperty(value = "是否加入固定资产台账", dataType = "Integer", required = true)
+ private Integer isFixedAssets;
+
+ /**
+ * 生产厂家
+ */
+ @NotBlank(message = "生产厂家不能为空")
+ @TableField("manufacturer")
+ @ApiModelProperty(value = "生产厂家", dataType = "String", required = true)
+ private String manufacturer;
+
+ /**
+ * 厂家国别
+ */
+ @TableField("manufacturer_country")
+ @ApiModelProperty(value = "厂家国别", dataType = "String", required = false)
+ private String manufacturerCountry;
+
+ /**
+ * 出厂编号
+ */
+ @NotBlank(message = "出厂编号不能为空")
+ @TableField("manufacturing_no")
+ @ApiModelProperty(value = "出厂编号", dataType = "String", required = false)
+ private String manufacturingNo;
+
+ /**
+ * 出厂年月
+ */
+ @TableField("manufacturing_date")
+ @ApiModelProperty(value = "出厂年月", dataType = "String", required = false)
+ private String manufacturingDate;
+
+ /**
+ * 型号
+ */
+ @NotBlank(message = "型号不能为空")
+ @TableField("model_no")
+ @ApiModelProperty(value = "型号", dataType = "String", required = true)
+ private String modelNo;
+
+ /**
+ * 管理状态-字典code
+ */
+ @TableField("manager_state")
+ @ApiModelProperty(value = "管理状态", dataType = "Integer", required = false)
+ private Integer managerState;
+ /**
+ * 管理状态名称
+ */
+ @TableField(exist = false)
+ @ApiModelProperty(value = "管理状态名称", dataType = "String", required = false)
+ private String managerStateName;
+
+ /**
+ * ABC-字典code
+ */
+ @TableField("ABC")
+ @ApiModelProperty(value = "ABC", dataType = "String", required = false)
+ private String abc;
+
+ /**
+ * 标签绑定
+ */
+ @TableField("label_bind")
+ @ApiModelProperty(value = "标签绑定", dataType = "String", required = false)
+ private String labelBind;
+
+ /**
+ * 立卡年月
+ */
+ @TableField("card_establishment_date")
+ @ApiModelProperty(value = "立卡年月", dataType = "String", required = false)
+ private String cardEstablishmentDate;
+
+ /**
+ * 启用日期
+ */
+ @TableField("enable_date")
+ @ApiModelProperty(value = "启用日期", dataType = "String", required = false)
+ private String enableDate;
+
+ /**
+ * 检定方式-字典code
+ */
+ @TableField("mesure_type")
+ @ApiModelProperty(value = "检定方式", dataType = "Integer", required = false)
+ private Integer mesureType;
+
+ /**
+ * 检定方式名称
+ */
+ @TableField(exist = false)
+ @ApiModelProperty(value = "检定方式名称", dataType = "String", required = false)
+ private String mesureTypeName;
+
+ /**
+ * 检定周期-字典code
+ */
+ @TableField("mesure_cycle")
+ @ApiModelProperty(value = "检定周期", dataType = "Integer", required = false)
+ private Integer mesureCycle;
+
+ /**
+ * 检定周期名称
+ */
+ @TableField(exist = false)
+ @ApiModelProperty(value = "检定周期名称", dataType = "String", required = false)
+ private String mesureCycleName;
+
+ /**
+ * 测量范围
+ */
+ @TableField("mesure_range")
+ @ApiModelProperty(value = "测量范围", dataType = "String", required = false)
+ private String mesureRange;
+
+ /**
+ * 不确定度
+ */
+ @TableField("uncertainty")
+ @ApiModelProperty(value = "不确定度", dataType = "String", required = false)
+ private String uncertainty;
+
+ /**
+ * 使用部门
+ */
+ @TableField("use_dept")
+ @ApiModelProperty(value = "使用部门", dataType = "Long", required = false)
+ private Long useDept;
+
+ /**
+ * 使用人
+ */
+ @TableField("use_person")
+ @ApiModelProperty(value = "使用人", dataType = "Long", required = false)
+ private Long usePerson;
+
+ /**
+ * 专业分类-字典code
+ */
+ @TableField("major_category")
+ @ApiModelProperty(value = "专业分类", dataType = "Integer", required = false)
+ private Integer majorCategory;
+ /**
+ * 专业分类名称
+ */
+ @TableField(exist = false)
+ @ApiModelProperty(value = "专业分类名称", dataType = "String", required = false)
+ private String majorCategoryName;
+
+ /**
+ * 检定部门
+ */
+ @TableField("mesure_dept")
+ @ApiModelProperty(value = "检定部门", dataType = "Long", required = false)
+ private Long mesureDept;
+
+ /**
+ * 检定日期
+ */
+ @TableField("mesure_date")
+ @ApiModelProperty(value = "检定日期", dataType = "String", required = false)
+ private String mesureDate;
+
+ /**
+ * 有效日期
+ */
+ @TableField("valid_date")
+ @ApiModelProperty(value = "有效日期", dataType = "String", required = false)
+ private String validDate;
+
+ /**
+ * 检定结果-字典code
+ */
+ @TableField("mesure_result")
+ @ApiModelProperty(value = "有效日期", dataType = "Integer", required = false)
+ private Integer mesureResult;
+
+ /**
+ * 检定结果名称
+ */
+ @TableField(exist = false)
+ @ApiModelProperty(value = "有效日期", dataType = "String", required = false)
+ private String mesureResultfName;
+
+ /**
+ * 是否是技术指标需要校准检定的设备
+ */
+ @TableField("is_calibration_test_equipment")
+ @ApiModelProperty(value = "是否是技术指标需要校准检定的设备", dataType = "Integer", required = false)
+ private Integer isCalibrationTestEquipment;
+
+ /**
+ * 是否是测量工装台账
+ */
+ @TableField("is_measure_account")
+ @ApiModelProperty(value = "是否是测量工装台账", dataType = "Integer", required = false)
+ private Integer isMeasureAccount;
+
+ /**
+ * 是否标准配套设备
+ */
+ @TableField("is_standard_support_equipment")
+ @ApiModelProperty(value = "是否标准配套设备", dataType = "Integer", required = false)
+ private Integer isStandardSupportEquipment;
+
+ /**
+ * 资产来源
+ */
+ @TableField("asset_source")
+ @ApiModelProperty(value = "资产来源", dataType = "String", required = false)
+ private String assetSource;
+
+ /**
+ * 设备规格
+ */
+ @TableField("equipment_specifications")
+ @ApiModelProperty(value = "设备规格", dataType = "String", required = false)
+ private String equipmentSpecifications;
+
+ /**
+ * 设备类别-字典code
+ */
+ @TableField("equipment_category")
+ @ApiModelProperty(value = "设备类别", dataType = "Integer", required = false)
+ private Integer equipmentCategory;
+
+ /**
+ * 设备类别名称
+ */
+ @TableField(exist = false)
+ @ApiModelProperty(value = "设备类别名称", dataType = "String", required = false)
+ private String equipmentCategoryName;
+
+ /**
+ * 设备类型-字典code
+ */
+ @TableField("equipment_type")
+ @ApiModelProperty(value = "设备类型", dataType = "Integer", required = false)
+ private Integer equipmentType;
+
+ /**
+ * 设备类型名称
+ */
+ @TableField(exist = false)
+ @ApiModelProperty(value = "设备类型名称", dataType = "String", required = false)
+ private String equipmentTypeName;
+
+ /**
+ * 资本来源
+ */
+ @TableField("capital_source")
+ @ApiModelProperty(value = "资本来源", dataType = "Integer", required = false)
+ private Integer capitalSource;
+
+ /**
+ * 资本来源名称
+ */
+ @TableField(exist = false)
+ @ApiModelProperty(value = "资本来源", dataType = "String", required = false)
+ private String capitalSourceName;
+
+ /**
+ * 管理级别-字典code
+ */
+ @TableField("manager_level")
+ @ApiModelProperty(value = "管理级别", dataType = "Integer", required = false)
+ private Integer managerLevel;
+
+ /**
+ * 管理级别名称
+ */
+ @TableField(exist = false)
+ @ApiModelProperty(value = "管理级别名称", dataType = "String", required = false)
+ private String managerLevelName;
+
+ /**
+ * 用途
+ */
+ @TableField("purpose")
+ @ApiModelProperty(value = "用途", dataType = "String", required = false)
+ private String purpose;
+
+ /**
+ * 技术水平
+ */
+ @TableField("technical_level")
+ @ApiModelProperty(value = "技术水平", dataType = "String", required = false)
+ private String technicalLevel;
+
+ /**
+ * 完好状态
+ */
+ @TableField("intact_state")
+ @ApiModelProperty(value = "完好状态", dataType = "Integer", required = false)
+ private Integer intactState;
+
+ /**
+ * 外形尺寸
+ */
+ @TableField("overall_dimension")
+ @ApiModelProperty(value = "外形尺寸", dataType = "String", required = false)
+ private String overallDimension;
+
+ /**
+ * 重量(吨)
+ */
+ @TableField("weight")
+ @ApiModelProperty(value = "重量(吨)", dataType = "Integer", required = false)
+ private Integer weight;
+
+ /**
+ * 单价
+ */
+ @TableField("single_price")
+ @ApiModelProperty(value = "单价", dataType = "BigDecimal", required = false)
+ private BigDecimal singlePrice;
+
+ /**
+ * 安装及杂费
+ */
+ @TableField("install_incidental_expenses")
+ @ApiModelProperty(value = "安装及杂费", dataType = "String", required = false)
+ private String installIncidentalExpenses;
+
+ /**
+ * 安装地点
+ */
+ @TableField("install_place")
+ @ApiModelProperty(value = "安装地点", dataType = "String", required = false)
+ private String installPlace;
+
+ /**
+ * 原值
+ */
+ @TableField("origin_value")
+ @ApiModelProperty(value = "原值", dataType = "BigDecimal", required = false)
+ private BigDecimal originValue;
+
+ /**
+ * 目前原值
+ */
+ @TableField("present_origin_value")
+ @ApiModelProperty(value = "目前原值", dataType = "BigDecimal", required = false)
+ private BigDecimal presentOriginValue;
+
+ /**
+ * 折旧年限
+ */
+ @TableField("depreciation_period")
+ @ApiModelProperty(value = "折旧年限", dataType = "Integer", required = false)
+ private Integer depreciationPeriod;
+
+ /**
+ * 折旧方法-字典code
+ */
+ @TableField("depreciation_method")
+ @ApiModelProperty(value = "折旧方法", dataType = "Integer", required = false)
+ private Integer depreciationMethod;
+
+ /**
+ * 折旧方法名称
+ */
+ @TableField(exist = false)
+ @ApiModelProperty(value = "折旧方法名称", dataType = "String", required = false)
+ private String depreciationMethodName;
+ /**
+ * 属性
+ */
+ @TableField("attribute")
+ @ApiModelProperty(value = "属性", dataType = "String", required = false)
+ private String attribute;
+
+ /**
+ * 版本号
+ */
+ @TableField("version")
+ @ApiModelProperty(value = "版本号", dataType = "Integer", required = false)
+ private Integer version;
+
+ /**
+ * 备注
+ */
+ @TableField("remark")
+ @ApiModelProperty(value = "备注", dataType = "String", required = false)
+ private String remark;
+
+ /**
+ * 创建人
+ */
+ @TableField("create_user")
+ @ApiModelProperty(value = "创建人", dataType = "Long", required = false)
+ private Long createUser;
+
+ /**
+ * 删除标记
+ */
+ @TableField("is_del")
+ @ApiModelProperty(value = "删除标记", dataType = "Integer", required = false)
+ private Integer isDel;
+
+ /**
+ * 创建时间
+ */
+ @TableField("create_time")
+ @ApiModelProperty(value = "创建时间", dataType = "String", required = false)
+ private String createTime;
+
+ /**
+ * 更新时间
+ */
+ @TableField("update_time")
+ @ApiModelProperty(value = "更新时间", dataType = "String", required = false)
+ private String updateTime;
+
+}
diff --git a/casic-metering-service/src/main/java/com/casic/missiles/service/IMeterFixedAssetsService.java b/casic-metering-service/src/main/java/com/casic/missiles/service/IMeterFixedAssetsService.java
new file mode 100644
index 0000000..f13d318
--- /dev/null
+++ b/casic-metering-service/src/main/java/com/casic/missiles/service/IMeterFixedAssetsService.java
@@ -0,0 +1,25 @@
+package com.casic.missiles.service;
+
+import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
+import com.baomidou.mybatisplus.extension.service.IService;
+import com.casic.missiles.dto.ReturnDTO;
+import com.casic.missiles.dto.meter.FixedAssetRequest;
+import com.casic.missiles.model.MeterFixedAssets;
+
+/**
+ *
+ * 服务类
+ *
+ *
+ * @author cuicheng
+ * @since 2022-12-07
+ */
+public interface IMeterFixedAssetsService extends IService {
+ Page listPage(Page page, FixedAssetRequest request) throws Exception;
+
+ ReturnDTO addFixedAsset(MeterFixedAssets dept);
+
+ ReturnDTO deleteByFixedAssetId(Long id);
+
+ ReturnDTO updateFixedAsset(MeterFixedAssets meterFixedAssets);
+}
diff --git a/casic-metering-api/src/main/java/com/casic/missiles/controller/MeterFixedAssetsController.java b/casic-metering-api/src/main/java/com/casic/missiles/controller/MeterFixedAssetsController.java
new file mode 100644
index 0000000..a5dc19f
--- /dev/null
+++ b/casic-metering-api/src/main/java/com/casic/missiles/controller/MeterFixedAssetsController.java
@@ -0,0 +1,80 @@
+package com.casic.missiles.controller;
+
+import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
+import com.casic.missiles.core.base.controller.ExportController;
+import com.casic.missiles.core.page.PageFactory;
+import com.casic.missiles.core.page.PageInfoBT;
+import com.casic.missiles.dto.IdDTO;
+import com.casic.missiles.dto.ReturnDTO;
+import com.casic.missiles.dto.ReturnUtil;
+import com.casic.missiles.dto.meter.FixedAssetRequest;
+import com.casic.missiles.model.MeterFixedAssets;
+import com.casic.missiles.service.IMeterFixedAssetsService;
+import com.casic.missiles.utils.DictCodeUtils;
+import io.swagger.annotations.Api;
+import io.swagger.annotations.ApiOperation;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.web.bind.annotation.*;
+
+import javax.validation.Valid;
+
+/**
+ *
+ * 固定资产Controller
+ *
+ *
+ * @author cuicheng
+ * @since 2022-12-07
+ */
+@Api(tags = "固定资产管理接口")
+@RestController
+@RequestMapping("/meter/assets")
+public class MeterFixedAssetsController extends ExportController {
+
+ /**
+ * 固定资产service
+ */
+ @Autowired
+ private IMeterFixedAssetsService iMeterFixedAssetsService;
+ /**
+ * 计量组织列表
+ */
+ @ApiOperation("固定资产(分页)")
+ @PostMapping("/listPage")
+ @ResponseBody
+ public ReturnDTO> listPage(@RequestBody @Valid FixedAssetRequest request) throws Exception {
+ Page page = PageFactory.defaultPage();
+ DictCodeUtils.validDictCode(request);
+ return ReturnUtil.success(super.packForBT(iMeterFixedAssetsService.listPage(page, request)));
+ }
+ /**
+ * 固定资产更新
+ */
+ @ApiOperation("固定资产更新")
+ @PostMapping("/update")
+ @ResponseBody
+ public ReturnDTO update(@RequestBody @Valid MeterFixedAssets meterFixedAssets) {
+ return iMeterFixedAssetsService.updateFixedAsset(meterFixedAssets);
+ }
+ /**
+ * 固定资产详情
+ */
+ @ApiOperation("固定资产详情")
+ @PostMapping("/detail")
+ @ResponseBody
+ public ReturnDTO detail(@RequestBody @Valid IdDTO idDTO) {
+ return ReturnUtil.success(iMeterFixedAssetsService.getById(idDTO.getId()));
+ }
+
+ /**
+ * 刪除固定资产
+ */
+ @ApiOperation("删除固定资产")
+ @PostMapping("/delete")
+ @ResponseBody
+ public ReturnDTO delete(@RequestBody @Valid IdDTO idDTO) {
+ return iMeterFixedAssetsService.deleteByFixedAssetId(idDTO.getId());
+ }
+
+
+}
diff --git a/casic-metering-common/src/main/java/com/casic/missiles/enums/BusinessExceptionEnum.java b/casic-metering-common/src/main/java/com/casic/missiles/enums/BusinessExceptionEnum.java
index 1207389..048d1ae 100644
--- a/casic-metering-common/src/main/java/com/casic/missiles/enums/BusinessExceptionEnum.java
+++ b/casic-metering-common/src/main/java/com/casic/missiles/enums/BusinessExceptionEnum.java
@@ -33,7 +33,8 @@
OPERATOR_DISCOUNT_PERMISSION_NOT_EXISTENCE(2300, "业务员折扣权限不存在;"),
DIRECTOR_DISCOUNT_PERMISSION_NOT_EXISTENCE(2300, "负责人折扣权限不存在;"),
TRACE_SUPPLIER_ID_NULL(2400, "培训记录主键不能为空"),
- DUPLICATE_NUMBER(2401, "编号生成重复,请重新提交");
+ DUPLICATE_NUMBER(2401, "编号生成重复,请重新提交"),
+ DUPLICATE_MANUFACTURE_NUMBER(2401, "出厂编号重复");
private Integer code;
diff --git a/casic-metering-common/src/main/java/com/casic/missiles/utils/DictCodeUtils.java b/casic-metering-common/src/main/java/com/casic/missiles/utils/DictCodeUtils.java
new file mode 100644
index 0000000..f91602e
--- /dev/null
+++ b/casic-metering-common/src/main/java/com/casic/missiles/utils/DictCodeUtils.java
@@ -0,0 +1,77 @@
+package com.casic.missiles.utils;
+
+import com.casic.missiles.annotation.DictCodeField;
+import com.casic.missiles.core.application.service.AbstractDictService;
+import com.casic.missiles.exception.BusinessException;
+import org.apache.commons.lang3.StringUtils;
+
+import java.lang.reflect.Field;
+
+/**
+ * 字典utils
+ */
+public class DictCodeUtils {
+ /**
+ * 字典code转换成名称
+ */
+ public static void convertDictCodeToName(Object object) throws Exception{
+ Field[] fields = object.getClass().getDeclaredFields();
+ for (Field field:fields) {
+ if (!field.isAccessible()) {
+ field.setAccessible(true);
+ }
+ if (field.isAnnotationPresent(DictCodeField.class) && field.get(object) != null) {
+ DictCodeField dictCodeField = field.getAnnotationsByType(DictCodeField.class)[0];
+ if (StringUtils.isEmpty(dictCodeField.cacheName())) {
+ throw new BusinessException(500, "缓存名不能为空");
+ }
+ AbstractDictService dictService = SpringContextUtil.getBean(AbstractDictService.class);
+ String name = dictService.getDictNameByCode(dictCodeField.cacheName(), field.get(object).toString());
+ if (StringUtils.isEmpty(name)) {
+ throw new BusinessException(500, dictCodeField.message());
+ }
+ String destFieldName = field.getName() + "Name";
+ Field destField = object.getClass().getDeclaredField(destFieldName);
+ if (destField == null) {
+ throw new BusinessException(500, "字典名称字段不存在");
+ }
+ if(!destField.isAccessible()) {
+ destField.setAccessible(true);
+ }
+ destField.set(object, name);
+ }
+ }
+ }
+
+ /**
+ * 校验字典code是否合法
+ * @param object
+ * @return
+ */
+ public static boolean validDictCode(Object object) throws Exception{
+ Field[] fields = object.getClass().getDeclaredFields();
+ for (Field field:fields) {
+ if (!field.isAccessible()) {
+ field.setAccessible(true);
+ }
+ if (field.isAnnotationPresent(DictCodeField.class) && field.get(object) != null) {
+ DictCodeField dictCodeField = field.getAnnotationsByType(DictCodeField.class)[0];
+ // 判断字典code是否需要校验
+ if(!dictCodeField.needValid()){
+ continue;
+ }
+ AbstractDictService dictService = SpringContextUtil.getBean(AbstractDictService.class);
+ if (StringUtils.isEmpty(dictCodeField.cacheName())) {
+ throw new BusinessException(500, "缓存名不能为空");
+ }
+ String name = dictService.getDictNameByCode(dictCodeField.cacheName(), field.get(object).toString());
+ if (StringUtils.isEmpty(name)) {
+ throw new BusinessException(500, dictCodeField.message());
+ }
+ dictCodeField.message();
+ }
+ }
+ return true;
+ }
+
+}
\ No newline at end of file
diff --git a/casic-metering-dao/src/main/java/com/casic/missiles/mapper/MeterFixedAssetsMapper.java b/casic-metering-dao/src/main/java/com/casic/missiles/mapper/MeterFixedAssetsMapper.java
new file mode 100644
index 0000000..b2dc13d
--- /dev/null
+++ b/casic-metering-dao/src/main/java/com/casic/missiles/mapper/MeterFixedAssetsMapper.java
@@ -0,0 +1,16 @@
+package com.casic.missiles.mapper;
+
+import com.baomidou.mybatisplus.core.mapper.BaseMapper;
+import com.casic.missiles.model.MeterFixedAssets;
+
+/**
+ *
+ * Mapper 接口
+ *
+ *
+ * @author cuicheng
+ * @since 2022-12-07
+ */
+public interface MeterFixedAssetsMapper extends BaseMapper {
+ Long selectMaxNo();
+}
diff --git a/casic-metering-dao/src/main/resources/mapper/MeterFixedAssetsMapper.xml b/casic-metering-dao/src/main/resources/mapper/MeterFixedAssetsMapper.xml
new file mode 100644
index 0000000..39f6510
--- /dev/null
+++ b/casic-metering-dao/src/main/resources/mapper/MeterFixedAssetsMapper.xml
@@ -0,0 +1,7 @@
+
+
+
+
+
diff --git a/casic-metering-model/src/main/java/com/casic/missiles/annotation/DictCodeField.java b/casic-metering-model/src/main/java/com/casic/missiles/annotation/DictCodeField.java
new file mode 100644
index 0000000..91ef6ac
--- /dev/null
+++ b/casic-metering-model/src/main/java/com/casic/missiles/annotation/DictCodeField.java
@@ -0,0 +1,29 @@
+package com.casic.missiles.annotation;
+
+import java.lang.annotation.*;
+
+/**
+ * 字典字段注解,放在字段上边,用于字典字段的合法性校验,以及字典字段转名字
+ */
+@Target({ElementType.FIELD})
+@Retention(RetentionPolicy.RUNTIME)
+@Documented
+public @interface DictCodeField {
+
+ /**
+ * 校验错误信息
+ * @return
+ */
+ String message();
+
+ /**
+ * cacheName
+ */
+ String cacheName();
+
+ /**
+ * 是否校验字典code,默认校验
+ * @return
+ */
+ boolean needValid() default true;
+}
diff --git a/casic-metering-model/src/main/java/com/casic/missiles/constants/MeterDictCode.java b/casic-metering-model/src/main/java/com/casic/missiles/constants/MeterDictCode.java
new file mode 100644
index 0000000..b4501b1
--- /dev/null
+++ b/casic-metering-model/src/main/java/com/casic/missiles/constants/MeterDictCode.java
@@ -0,0 +1,53 @@
+package com.casic.missiles.constants;
+
+/**
+ * @Description: 字典名枚举
+ * @Author: wangpeng
+ * @Date: 2022/11/27 10:41
+ */
+public interface MeterDictCode {
+ //审批状态
+ String APPROVAL_STATUS = "approvalStatus";
+ //实施状态
+ String EFFECTIVE_STATUS = "effectiveStatus";
+ //文件类别
+ String FILE_TYPE = "fileType";
+ //行政职务
+ String ADMINISTRATION_JOB = "administrationJob";
+ //技术职称
+ String TECHNOLOGY_JOB = "technologyJob";
+ //文化程度
+ String EDUCATION = "education";
+ //校验类型
+ String CHECK_TYPE = "checkType";
+ //价格类别
+ String PRICE_TYPE = "priceType";
+ //项目
+ String PRICE_ITEM = "priceItem";
+ //业务员折扣权限
+ String OPERATOR_DISCOUNT_PERMISSION = "operatorDiscountPermission";
+ //负责人折扣权限
+ String DIRECTOR_DISCOUNT_PERMISSION = "directorDiscountPermission";
+ //资产类型
+ String ASSET_TYPE = "assetType";
+ //检定方式
+ String MESURE_TYPE = "mesureType";
+ //管理状态
+ String MANAGER_STATE = "managerState";
+ //ABC 设备级别
+ String ABC = "ABC";
+ // 检定周期
+ String MESURE_CYCLE = "mesureCycle";
+ //专业分类
+ String MAJOR_CATEGORY = "majorCategory";
+ //检定结果
+ String MESURE_RESULT = "mesureResult";
+ //设备类别
+ String EQUIPMENT_CATEGORY = "equipmentCategory";
+ //设备类型
+ String EQUIPMENT_TYPE = "equipmentType";
+ //管理级别
+ String MANAGER_LEVEL = "managerLevel";
+ //折旧方法
+ String dePRECIATION_METHOD = "depreciationMethod";
+}
diff --git a/casic-metering-model/src/main/java/com/casic/missiles/dto/IdDTO.java b/casic-metering-model/src/main/java/com/casic/missiles/dto/IdDTO.java
index 2e9ff86..61168a9 100644
--- a/casic-metering-model/src/main/java/com/casic/missiles/dto/IdDTO.java
+++ b/casic-metering-model/src/main/java/com/casic/missiles/dto/IdDTO.java
@@ -3,6 +3,10 @@
import io.swagger.annotations.ApiModelProperty;
import lombok.Data;
+import javax.validation.constraints.NotBlank;
+import javax.validation.constraints.NotEmpty;
+import javax.validation.constraints.NotNull;
+
/**
* @Description: for delete/detail use
* @Author: wangpeng
@@ -10,6 +14,7 @@
*/
@Data
public class IdDTO {
+ @NotNull(message = "主键ID不能为空")
@ApiModelProperty(value = "主键id", dataType = "Long", required = true)
private Long id;
}
diff --git a/casic-metering-model/src/main/java/com/casic/missiles/dto/meter/FixedAssetRequest.java b/casic-metering-model/src/main/java/com/casic/missiles/dto/meter/FixedAssetRequest.java
new file mode 100644
index 0000000..9ac72e1
--- /dev/null
+++ b/casic-metering-model/src/main/java/com/casic/missiles/dto/meter/FixedAssetRequest.java
@@ -0,0 +1,90 @@
+package com.casic.missiles.dto.meter;
+
+import com.casic.missiles.annotation.DictCodeField;
+import com.casic.missiles.constants.MeterDictCode;
+import io.swagger.annotations.ApiModel;
+import io.swagger.annotations.ApiModelProperty;
+import lombok.Data;
+
+/**
+ * 固定资产请求
+ */
+@ApiModel
+@Data
+public class FixedAssetRequest {
+ /**
+ * 资产编号
+ */
+ @ApiModelProperty(value = "资产编号", dataType = "String")
+ private String assetNo;
+ /**
+ * 资产类型
+ */
+ @DictCodeField(message = "资产类型不合法", cacheName = MeterDictCode.ASSET_TYPE)
+// @DictCodeField(message = "资产类型不合法", cacheName = "accountStatus")
+ @ApiModelProperty(value = "资产类型", dataType = "Integer")
+ private Integer assetType;
+ /**
+ * 设备编号
+ */
+ @ApiModelProperty(value = "设备编号", dataType = "String")
+ private String equipmentNo;
+ /**
+ * 设备名称
+ */
+ @ApiModelProperty(value = "设备名称", dataType = "String")
+ private String equipmentName;
+ /**
+ * 检定方式
+ */
+ @DictCodeField(message = "检定方式不合法", cacheName = MeterDictCode.MESURE_TYPE)
+ @ApiModelProperty(value = "检定方式", dataType = "Integer")
+ private Integer mesureType;
+ /**
+ * 管理状态
+ */
+ @DictCodeField(message = "管理状态不合法", cacheName = MeterDictCode.MANAGER_STATE)
+ @ApiModelProperty(value = "管理状态", dataType = "Integer")
+ private Integer managerState;
+ /**
+ * 使用部门
+ */
+ @ApiModelProperty(value = "使用部门", dataType = "Long")
+ private Long useDept;
+ /**
+ * 有效日期
+ */
+ @ApiModelProperty(value = "有效日期", dataType = "String")
+ private String validDate;
+ /**
+ * ABC 值 A,B,C
+ */
+ @DictCodeField(message = "ABC不合法", cacheName = MeterDictCode.ABC)
+ @ApiModelProperty(value = "ABC", dataType = "String")
+ private String abc;
+ /**
+ * 型号
+ */
+ @ApiModelProperty(value = "型号", dataType = "String")
+ private String modelNo;
+
+ /**
+ * 设备规格
+ */
+ @ApiModelProperty(value = "设备规格", dataType = "String")
+ private String equipmentSpecifications;
+
+ /**
+ * 设备类别
+ */
+ @DictCodeField(message = "设备类别不合法", cacheName = MeterDictCode.EQUIPMENT_CATEGORY)
+ @ApiModelProperty(value = "设备类别", dataType = "Integer")
+ private Integer equipmentCategory;
+
+ /**
+ * 出厂编号
+ */
+ @ApiModelProperty(value = "出厂编号", dataType = "String")
+ private String manufacturingNo;
+
+}
diff --git a/casic-metering-model/src/main/java/com/casic/missiles/model/MeterFixedAssets.java b/casic-metering-model/src/main/java/com/casic/missiles/model/MeterFixedAssets.java
new file mode 100644
index 0000000..5c0fb5e
--- /dev/null
+++ b/casic-metering-model/src/main/java/com/casic/missiles/model/MeterFixedAssets.java
@@ -0,0 +1,508 @@
+package com.casic.missiles.model;
+
+import com.alibaba.excel.annotation.ExcelIgnoreUnannotated;
+import com.alibaba.excel.annotation.write.style.ColumnWidth;
+import com.alibaba.excel.annotation.write.style.ContentRowHeight;
+import com.alibaba.excel.annotation.write.style.ContentStyle;
+import com.alibaba.excel.annotation.write.style.HeadRowHeight;
+import com.alibaba.excel.enums.poi.BorderStyleEnum;
+import com.baomidou.mybatisplus.annotation.TableField;
+import com.baomidou.mybatisplus.annotation.TableId;
+import com.baomidou.mybatisplus.annotation.TableName;
+import com.casic.missiles.annotation.DictCodeField;
+import com.casic.missiles.constants.MeterDictCode;
+import io.swagger.annotations.ApiModel;
+import io.swagger.annotations.ApiModelProperty;
+import lombok.Data;
+
+import javax.validation.constraints.NotBlank;
+import javax.validation.constraints.NotNull;
+import java.io.Serializable;
+import java.math.BigDecimal;
+
+/**
+ *
+ *
+ *
+ *
+ * @author cuicheng
+ * @since 2022-12-07
+ */
+@ColumnWidth(30)
+@HeadRowHeight(15)
+@ContentRowHeight(20)
+@ContentStyle(borderLeft = BorderStyleEnum.THIN, borderBottom = BorderStyleEnum.THIN, borderTop = BorderStyleEnum.THIN, borderRight = BorderStyleEnum.THIN)
+@ExcelIgnoreUnannotated
+@ApiModel
+@TableName("meter_fixed_assets")
+@Data
+public class MeterFixedAssets implements Serializable {
+
+ private static final long serialVersionUID = 1L;
+
+ /**
+ * 主键
+ */
+ @TableId("id")
+ @ApiModelProperty(value = "主键", dataType = "Long", required = true)
+ private Long id;
+
+ /**
+ * 资产编号
+ */
+ @TableField("asset_no")
+ @ApiModelProperty(value = "资产编号", dataType = "String", required = true)
+ private String assetNo;
+
+ /**
+ * 资产类型-字典code
+ */
+ @NotNull(message = "资产类型不能为空")
+ @TableField("asset_type")
+ @ApiModelProperty(value = "资产类型", dataType = "Integer", required = true)
+ @DictCodeField(message = "资产类型不合法", cacheName = MeterDictCode.ASSET_TYPE)
+ private Integer assetType;
+
+ /**
+ * 资产类型名称
+ */
+ @TableField(exist = false)
+ @ApiModelProperty(value = "资产类型名称", dataType = "String", required = true)
+ private String assetTypeName;
+
+ /**
+ * 设备名称
+ */
+ @NotBlank(message = "设备名称不能为空")
+ @TableField("equipment_name")
+ @ApiModelProperty(value = "设备名称", dataType = "String", required = true)
+ private String equipmentName;
+
+ /**
+ * 设备编号
+ */
+ @TableField("equipment_no")
+ @ApiModelProperty(value = "设备编号", dataType = "String", required = true)
+ private String equipmentNo;
+
+ /**
+ * 是否加入固定资产台账
+ */
+ @TableField("is_fixed_assets")
+ @ApiModelProperty(value = "是否加入固定资产台账", dataType = "Integer", required = true)
+ private Integer isFixedAssets;
+
+ /**
+ * 生产厂家
+ */
+ @NotBlank(message = "生产厂家不能为空")
+ @TableField("manufacturer")
+ @ApiModelProperty(value = "生产厂家", dataType = "String", required = true)
+ private String manufacturer;
+
+ /**
+ * 厂家国别
+ */
+ @TableField("manufacturer_country")
+ @ApiModelProperty(value = "厂家国别", dataType = "String", required = false)
+ private String manufacturerCountry;
+
+ /**
+ * 出厂编号
+ */
+ @NotBlank(message = "出厂编号不能为空")
+ @TableField("manufacturing_no")
+ @ApiModelProperty(value = "出厂编号", dataType = "String", required = false)
+ private String manufacturingNo;
+
+ /**
+ * 出厂年月
+ */
+ @TableField("manufacturing_date")
+ @ApiModelProperty(value = "出厂年月", dataType = "String", required = false)
+ private String manufacturingDate;
+
+ /**
+ * 型号
+ */
+ @NotBlank(message = "型号不能为空")
+ @TableField("model_no")
+ @ApiModelProperty(value = "型号", dataType = "String", required = true)
+ private String modelNo;
+
+ /**
+ * 管理状态-字典code
+ */
+ @TableField("manager_state")
+ @ApiModelProperty(value = "管理状态", dataType = "Integer", required = false)
+ private Integer managerState;
+ /**
+ * 管理状态名称
+ */
+ @TableField(exist = false)
+ @ApiModelProperty(value = "管理状态名称", dataType = "String", required = false)
+ private String managerStateName;
+
+ /**
+ * ABC-字典code
+ */
+ @TableField("ABC")
+ @ApiModelProperty(value = "ABC", dataType = "String", required = false)
+ private String abc;
+
+ /**
+ * 标签绑定
+ */
+ @TableField("label_bind")
+ @ApiModelProperty(value = "标签绑定", dataType = "String", required = false)
+ private String labelBind;
+
+ /**
+ * 立卡年月
+ */
+ @TableField("card_establishment_date")
+ @ApiModelProperty(value = "立卡年月", dataType = "String", required = false)
+ private String cardEstablishmentDate;
+
+ /**
+ * 启用日期
+ */
+ @TableField("enable_date")
+ @ApiModelProperty(value = "启用日期", dataType = "String", required = false)
+ private String enableDate;
+
+ /**
+ * 检定方式-字典code
+ */
+ @TableField("mesure_type")
+ @ApiModelProperty(value = "检定方式", dataType = "Integer", required = false)
+ private Integer mesureType;
+
+ /**
+ * 检定方式名称
+ */
+ @TableField(exist = false)
+ @ApiModelProperty(value = "检定方式名称", dataType = "String", required = false)
+ private String mesureTypeName;
+
+ /**
+ * 检定周期-字典code
+ */
+ @TableField("mesure_cycle")
+ @ApiModelProperty(value = "检定周期", dataType = "Integer", required = false)
+ private Integer mesureCycle;
+
+ /**
+ * 检定周期名称
+ */
+ @TableField(exist = false)
+ @ApiModelProperty(value = "检定周期名称", dataType = "String", required = false)
+ private String mesureCycleName;
+
+ /**
+ * 测量范围
+ */
+ @TableField("mesure_range")
+ @ApiModelProperty(value = "测量范围", dataType = "String", required = false)
+ private String mesureRange;
+
+ /**
+ * 不确定度
+ */
+ @TableField("uncertainty")
+ @ApiModelProperty(value = "不确定度", dataType = "String", required = false)
+ private String uncertainty;
+
+ /**
+ * 使用部门
+ */
+ @TableField("use_dept")
+ @ApiModelProperty(value = "使用部门", dataType = "Long", required = false)
+ private Long useDept;
+
+ /**
+ * 使用人
+ */
+ @TableField("use_person")
+ @ApiModelProperty(value = "使用人", dataType = "Long", required = false)
+ private Long usePerson;
+
+ /**
+ * 专业分类-字典code
+ */
+ @TableField("major_category")
+ @ApiModelProperty(value = "专业分类", dataType = "Integer", required = false)
+ private Integer majorCategory;
+ /**
+ * 专业分类名称
+ */
+ @TableField(exist = false)
+ @ApiModelProperty(value = "专业分类名称", dataType = "String", required = false)
+ private String majorCategoryName;
+
+ /**
+ * 检定部门
+ */
+ @TableField("mesure_dept")
+ @ApiModelProperty(value = "检定部门", dataType = "Long", required = false)
+ private Long mesureDept;
+
+ /**
+ * 检定日期
+ */
+ @TableField("mesure_date")
+ @ApiModelProperty(value = "检定日期", dataType = "String", required = false)
+ private String mesureDate;
+
+ /**
+ * 有效日期
+ */
+ @TableField("valid_date")
+ @ApiModelProperty(value = "有效日期", dataType = "String", required = false)
+ private String validDate;
+
+ /**
+ * 检定结果-字典code
+ */
+ @TableField("mesure_result")
+ @ApiModelProperty(value = "有效日期", dataType = "Integer", required = false)
+ private Integer mesureResult;
+
+ /**
+ * 检定结果名称
+ */
+ @TableField(exist = false)
+ @ApiModelProperty(value = "有效日期", dataType = "String", required = false)
+ private String mesureResultfName;
+
+ /**
+ * 是否是技术指标需要校准检定的设备
+ */
+ @TableField("is_calibration_test_equipment")
+ @ApiModelProperty(value = "是否是技术指标需要校准检定的设备", dataType = "Integer", required = false)
+ private Integer isCalibrationTestEquipment;
+
+ /**
+ * 是否是测量工装台账
+ */
+ @TableField("is_measure_account")
+ @ApiModelProperty(value = "是否是测量工装台账", dataType = "Integer", required = false)
+ private Integer isMeasureAccount;
+
+ /**
+ * 是否标准配套设备
+ */
+ @TableField("is_standard_support_equipment")
+ @ApiModelProperty(value = "是否标准配套设备", dataType = "Integer", required = false)
+ private Integer isStandardSupportEquipment;
+
+ /**
+ * 资产来源
+ */
+ @TableField("asset_source")
+ @ApiModelProperty(value = "资产来源", dataType = "String", required = false)
+ private String assetSource;
+
+ /**
+ * 设备规格
+ */
+ @TableField("equipment_specifications")
+ @ApiModelProperty(value = "设备规格", dataType = "String", required = false)
+ private String equipmentSpecifications;
+
+ /**
+ * 设备类别-字典code
+ */
+ @TableField("equipment_category")
+ @ApiModelProperty(value = "设备类别", dataType = "Integer", required = false)
+ private Integer equipmentCategory;
+
+ /**
+ * 设备类别名称
+ */
+ @TableField(exist = false)
+ @ApiModelProperty(value = "设备类别名称", dataType = "String", required = false)
+ private String equipmentCategoryName;
+
+ /**
+ * 设备类型-字典code
+ */
+ @TableField("equipment_type")
+ @ApiModelProperty(value = "设备类型", dataType = "Integer", required = false)
+ private Integer equipmentType;
+
+ /**
+ * 设备类型名称
+ */
+ @TableField(exist = false)
+ @ApiModelProperty(value = "设备类型名称", dataType = "String", required = false)
+ private String equipmentTypeName;
+
+ /**
+ * 资本来源
+ */
+ @TableField("capital_source")
+ @ApiModelProperty(value = "资本来源", dataType = "Integer", required = false)
+ private Integer capitalSource;
+
+ /**
+ * 资本来源名称
+ */
+ @TableField(exist = false)
+ @ApiModelProperty(value = "资本来源", dataType = "String", required = false)
+ private String capitalSourceName;
+
+ /**
+ * 管理级别-字典code
+ */
+ @TableField("manager_level")
+ @ApiModelProperty(value = "管理级别", dataType = "Integer", required = false)
+ private Integer managerLevel;
+
+ /**
+ * 管理级别名称
+ */
+ @TableField(exist = false)
+ @ApiModelProperty(value = "管理级别名称", dataType = "String", required = false)
+ private String managerLevelName;
+
+ /**
+ * 用途
+ */
+ @TableField("purpose")
+ @ApiModelProperty(value = "用途", dataType = "String", required = false)
+ private String purpose;
+
+ /**
+ * 技术水平
+ */
+ @TableField("technical_level")
+ @ApiModelProperty(value = "技术水平", dataType = "String", required = false)
+ private String technicalLevel;
+
+ /**
+ * 完好状态
+ */
+ @TableField("intact_state")
+ @ApiModelProperty(value = "完好状态", dataType = "Integer", required = false)
+ private Integer intactState;
+
+ /**
+ * 外形尺寸
+ */
+ @TableField("overall_dimension")
+ @ApiModelProperty(value = "外形尺寸", dataType = "String", required = false)
+ private String overallDimension;
+
+ /**
+ * 重量(吨)
+ */
+ @TableField("weight")
+ @ApiModelProperty(value = "重量(吨)", dataType = "Integer", required = false)
+ private Integer weight;
+
+ /**
+ * 单价
+ */
+ @TableField("single_price")
+ @ApiModelProperty(value = "单价", dataType = "BigDecimal", required = false)
+ private BigDecimal singlePrice;
+
+ /**
+ * 安装及杂费
+ */
+ @TableField("install_incidental_expenses")
+ @ApiModelProperty(value = "安装及杂费", dataType = "String", required = false)
+ private String installIncidentalExpenses;
+
+ /**
+ * 安装地点
+ */
+ @TableField("install_place")
+ @ApiModelProperty(value = "安装地点", dataType = "String", required = false)
+ private String installPlace;
+
+ /**
+ * 原值
+ */
+ @TableField("origin_value")
+ @ApiModelProperty(value = "原值", dataType = "BigDecimal", required = false)
+ private BigDecimal originValue;
+
+ /**
+ * 目前原值
+ */
+ @TableField("present_origin_value")
+ @ApiModelProperty(value = "目前原值", dataType = "BigDecimal", required = false)
+ private BigDecimal presentOriginValue;
+
+ /**
+ * 折旧年限
+ */
+ @TableField("depreciation_period")
+ @ApiModelProperty(value = "折旧年限", dataType = "Integer", required = false)
+ private Integer depreciationPeriod;
+
+ /**
+ * 折旧方法-字典code
+ */
+ @TableField("depreciation_method")
+ @ApiModelProperty(value = "折旧方法", dataType = "Integer", required = false)
+ private Integer depreciationMethod;
+
+ /**
+ * 折旧方法名称
+ */
+ @TableField(exist = false)
+ @ApiModelProperty(value = "折旧方法名称", dataType = "String", required = false)
+ private String depreciationMethodName;
+ /**
+ * 属性
+ */
+ @TableField("attribute")
+ @ApiModelProperty(value = "属性", dataType = "String", required = false)
+ private String attribute;
+
+ /**
+ * 版本号
+ */
+ @TableField("version")
+ @ApiModelProperty(value = "版本号", dataType = "Integer", required = false)
+ private Integer version;
+
+ /**
+ * 备注
+ */
+ @TableField("remark")
+ @ApiModelProperty(value = "备注", dataType = "String", required = false)
+ private String remark;
+
+ /**
+ * 创建人
+ */
+ @TableField("create_user")
+ @ApiModelProperty(value = "创建人", dataType = "Long", required = false)
+ private Long createUser;
+
+ /**
+ * 删除标记
+ */
+ @TableField("is_del")
+ @ApiModelProperty(value = "删除标记", dataType = "Integer", required = false)
+ private Integer isDel;
+
+ /**
+ * 创建时间
+ */
+ @TableField("create_time")
+ @ApiModelProperty(value = "创建时间", dataType = "String", required = false)
+ private String createTime;
+
+ /**
+ * 更新时间
+ */
+ @TableField("update_time")
+ @ApiModelProperty(value = "更新时间", dataType = "String", required = false)
+ private String updateTime;
+
+}
diff --git a/casic-metering-service/src/main/java/com/casic/missiles/service/IMeterFixedAssetsService.java b/casic-metering-service/src/main/java/com/casic/missiles/service/IMeterFixedAssetsService.java
new file mode 100644
index 0000000..f13d318
--- /dev/null
+++ b/casic-metering-service/src/main/java/com/casic/missiles/service/IMeterFixedAssetsService.java
@@ -0,0 +1,25 @@
+package com.casic.missiles.service;
+
+import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
+import com.baomidou.mybatisplus.extension.service.IService;
+import com.casic.missiles.dto.ReturnDTO;
+import com.casic.missiles.dto.meter.FixedAssetRequest;
+import com.casic.missiles.model.MeterFixedAssets;
+
+/**
+ *
+ * 服务类
+ *
+ *
+ * @author cuicheng
+ * @since 2022-12-07
+ */
+public interface IMeterFixedAssetsService extends IService {
+ Page listPage(Page page, FixedAssetRequest request) throws Exception;
+
+ ReturnDTO addFixedAsset(MeterFixedAssets dept);
+
+ ReturnDTO deleteByFixedAssetId(Long id);
+
+ ReturnDTO updateFixedAsset(MeterFixedAssets meterFixedAssets);
+}
diff --git a/casic-metering-service/src/main/java/com/casic/missiles/service/Impl/MeterFixedAssetsServiceImpl.java b/casic-metering-service/src/main/java/com/casic/missiles/service/Impl/MeterFixedAssetsServiceImpl.java
new file mode 100644
index 0000000..c9c5600
--- /dev/null
+++ b/casic-metering-service/src/main/java/com/casic/missiles/service/Impl/MeterFixedAssetsServiceImpl.java
@@ -0,0 +1,134 @@
+package com.casic.missiles.service.Impl;
+
+import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
+import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
+import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
+import com.casic.missiles.dto.ReturnDTO;
+import com.casic.missiles.dto.ReturnUtil;
+import com.casic.missiles.dto.meter.FixedAssetRequest;
+import com.casic.missiles.enums.BusinessExceptionEnum;
+import com.casic.missiles.exception.BusinessException;
+import com.casic.missiles.mapper.MeterFixedAssetsMapper;
+import com.casic.missiles.model.MeterFixedAssets;
+import com.casic.missiles.service.IMeterFixedAssetsService;
+import com.casic.missiles.utils.DictCodeUtils;
+import com.casic.missiles.utils.NumberGeneratorUtil;
+import lombok.extern.slf4j.Slf4j;
+import org.apache.commons.lang3.StringUtils;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.stereotype.Service;
+import org.springframework.transaction.annotation.Transactional;
+
+/**
+ *
+ * 固定资产service
+ *
+ *
+ * @author cuicheng
+ * @since 2022-12-07
+ */
+@Slf4j
+@Service
+public class MeterFixedAssetsServiceImpl extends ServiceImpl implements IMeterFixedAssetsService {
+
+ @Autowired(required = false)
+ private MeterFixedAssetsMapper meterFixedAssetsMapper;
+
+ /**
+ * 分页查询
+ * @param page
+ * @param request
+ * @return
+ * @throws Exception
+ */
+ @Override
+ public Page listPage(Page page, FixedAssetRequest request) throws Exception {
+ QueryWrapper wrapper = getWrapper(request);
+ Page meterFixedAssetsPage = meterFixedAssetsMapper.selectPage(page, wrapper);
+ for (MeterFixedAssets meterFixedAssets:meterFixedAssetsPage.getRecords()) {
+ // TODO 走guava本地缓存,减少跟redis的IO交互
+ DictCodeUtils.convertDictCodeToName(meterFixedAssets);
+ }
+ return meterFixedAssetsPage;
+ }
+
+
+ /**
+ * 添加固定资产
+ * @param meterFixedAssets
+ * @return
+ */
+ @Override
+ @Transactional
+ public ReturnDTO addFixedAsset(MeterFixedAssets meterFixedAssets) {
+ //需要根据出厂编号判重
+ QueryWrapper wrapper = new QueryWrapper<>();
+ wrapper.eq(StringUtils.isNotEmpty(meterFixedAssets.getManufacturingNo()), "manufacturing_no", meterFixedAssets.getModelNo());
+ MeterFixedAssets result = meterFixedAssetsMapper.selectOne(wrapper);
+ if (result != null) {
+ log.error("出厂编号:{},重复",result.getManufacturingNo());
+ throw new BusinessException(BusinessExceptionEnum.DUPLICATE_MANUFACTURE_NUMBER);
+ }
+ //生成资产编号
+ Long maxNo = meterFixedAssetsMapper.selectMaxNo();
+ String asset_no = NumberGeneratorUtil.getContactNo("gdzc", maxNo);
+ meterFixedAssets.setAssetNo(asset_no);
+ meterFixedAssets.setEquipmentNo(asset_no);
+ meterFixedAssetsMapper.insert(meterFixedAssets);
+ return ReturnUtil.success();
+ }
+
+ /**
+ * 更新固定资产
+ * @param meterFixedAssets
+ * @return
+ */
+ @Override
+ public ReturnDTO updateFixedAsset(MeterFixedAssets meterFixedAssets) {
+ int updateFlag = meterFixedAssetsMapper.updateById(meterFixedAssets);
+ if (updateFlag > 0) {
+ return ReturnUtil.success();
+ }
+ return ReturnUtil.failed("更新失败");
+ }
+
+ /**
+ * 删除资产
+ * @param id
+ * @return
+ */
+ @Override
+ public ReturnDTO deleteByFixedAssetId(Long id) {
+ int deleteFlag = meterFixedAssetsMapper.deleteById(id);
+ if (deleteFlag > 0) {
+ return ReturnUtil.success();
+ }
+ return ReturnUtil.failed("删除失败");
+ }
+
+ /**
+ * 转换字典code
+ * @param request
+ * @return
+ */
+ private QueryWrapper getWrapper(FixedAssetRequest request) {
+ QueryWrapper wrapper = new QueryWrapper<>();
+ wrapper.like(StringUtils.isNotBlank(request.getAssetNo()), "asset_no", request.getAssetNo());
+ wrapper.eq(request.getAssetType() != null, "asset_type", request.getAssetType());
+ wrapper.like(StringUtils.isNotBlank(request.getEquipmentName()), "equipment_name", request.getEquipmentName());
+ wrapper.like(StringUtils.isNotBlank(request.getEquipmentNo()), "equipment_no", request.getEquipmentNo());
+ wrapper.eq(request.getMesureType() != null, "mesure_type", request.getMesureType());
+ wrapper.eq(request.getManagerState() != null, "manager_state", request.getManagerState());
+ wrapper.eq(request.getUseDept() != null, "use_dept", request.getUseDept());
+ wrapper.eq(StringUtils.isNotEmpty(request.getAbc()), "ABC", request.getAbc());
+ wrapper.like(StringUtils.isNotEmpty(request.getModelNo()), "model_no", request.getModelNo());
+ wrapper.eq(StringUtils.isNotEmpty(request.getEquipmentSpecifications()), "equipment_specifications", request.getEquipmentSpecifications());
+ wrapper.eq(request.getEquipmentCategory() != null, "equipment_category", request.getEquipmentCategory());
+ wrapper.apply(StringUtils.isNotBlank(request.getValidDate()),
+ "{0} = DATE_FORMAT(valid_date,'%Y-%m-%d')", request.getValidDate());
+ wrapper.eq(StringUtils.isNotEmpty(request.getManufacturingNo()), "manufacturing_no", request.getModelNo());
+ wrapper.eq("is_del", 0);
+ wrapper.orderByDesc("create_time");
+ return wrapper;
+ }
+}