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; + } +}