From 667bfd371170732d05f3cbffa205d9dfbb11d7f1 Mon Sep 17 00:00:00 2001 From: aikai Date: Wed, 4 Sep 2024 11:28:20 +0800 Subject: [PATCH] =?UTF-8?q?1.=E6=96=B0=E5=A2=9E=E6=8E=A5=E5=8F=A3=E6=A0=B9?= =?UTF-8?q?=E6=8D=AE=E6=B5=81=E7=A8=8B=E7=8A=B6=E6=80=81=EF=BC=88=E5=A4=84?= =?UTF-8?q?=E7=90=86=E4=B8=AD=EF=BC=8C=E9=80=9A=E8=BF=87=EF=BC=8C=E4=B8=8D?= =?UTF-8?q?=E9=80=9A=E8=BF=87=EF=BC=8C=E5=8F=96=E6=B6=88=EF=BC=89=EF=BC=8C?= =?UTF-8?q?=E7=BB=9F=E8=AE=A1=E5=90=84=E4=B8=AA=E7=8A=B6=E6=80=81=E7=9A=84?= =?UTF-8?q?=E6=95=B0=E6=8D=AE=E9=87=8F=20=E6=A0=B9=E6=8D=AE=E6=97=A5?= =?UTF-8?q?=E6=9C=9F=E5=88=86=E7=BB=84?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../common/enums/AssetsTypeCodeEnum.java | 18 ++++ .../task/BpmProcessInstanceController.java | 14 +++ ...anceResultStatusStatisticsGroupTimeVO.java | 24 +++++ .../BpmProcessInstanceStatisticsReqVO.java | 3 + .../task/BpmProcessInstanceExtMapper.java | 11 ++- .../task/BpmProcessInstanceService.java | 9 ++ .../task/BpmProcessInstanceServiceImpl.java | 2 +- .../task/BpmProcessInstanceExtMapper.xml | 29 +++++- .../system/api/assets/AssetsTypeApi.java | 26 +++++ .../system/api/assets/AssetsTypeApiImpl.java | 37 ++++++++ .../admin/assets/vo/AssetsTypePageReqVO.java | 5 +- .../admin/assets/vo/AssetsTypeRespVO.java | 6 +- .../admin/assets/vo/AssetsTypeSaveReqVO.java | 8 +- .../controller/admin/user/UserController.java | 8 ++ .../dal/dataobject/assets/AssetsTypeDO.java | 6 +- .../service/assets/AssetsTypeService.java | 9 +- .../service/assets/AssetsTypeServiceImpl.java | 14 ++- .../system/service/user/AdminUserService.java | 2 + .../service/user/AdminUserServiceImpl.java | 37 +++++++- .../FactoryForkliftController.java | 93 ++++++++++++++++++ .../vo/FactoryForkliftPageReqVO.java | 56 +++++++++++ .../vo/FactoryForkliftRespVO.java | 73 ++++++++++++++ .../vo/FactoryForkliftSaveReqVO.java | 45 +++++++++ .../factoryinfo/vo/FactoryInfoPageReqVO.java | 5 +- .../factoryinfo/vo/FactoryInfoRespVO.java | 6 +- .../factoryinfo/vo/FactoryInfoSaveReqVO.java | 6 +- .../factorykiln/FactoryKilnController.java | 95 +++++++++++++++++++ .../factorykiln/vo/FactoryKilnPageReqVO.java | 31 ++++++ .../factorykiln/vo/FactoryKilnRespVO.java | 36 +++++++ .../factorykiln/vo/FactoryKilnSaveReqVO.java | 26 +++++ .../FactoryPackingLineController.java | 95 +++++++++++++++++++ .../vo/FactoryPackingLinePageReqVO.java | 34 +++++++ .../vo/FactoryPackingLineRespVO.java | 40 ++++++++ .../vo/FactoryPackingLineSaveReqVO.java | 29 ++++++ .../factoryforklift/FactoryForkliftDO.java | 67 +++++++++++++ .../dataobject/factoryinfo/FactoryInfoDO.java | 7 +- .../dataobject/factorykiln/FactoryKilnDO.java | 43 +++++++++ .../FactoryPackingLineDO.java | 47 +++++++++ .../FactoryForkliftMapper.java | 46 +++++++++ .../mysql/factorykiln/FactoryKilnMapper.java | 29 ++++++ .../FactoryPackingLineMapper.java | 30 ++++++ .../rpc/config/RpcConfiguration.java | 5 +- .../FactoryForkliftService.java | 55 +++++++++++ .../FactoryForkliftServiceImpl.java | 71 ++++++++++++++ .../factorykiln/FactoryKilnService.java | 55 +++++++++++ .../factorykiln/FactoryKilnServiceImpl.java | 58 +++++++++++ .../FactoryPackingLineService.java | 55 +++++++++++ .../FactoryPackingLineServiceImpl.java | 58 +++++++++++ .../factoryforklift/FactoryForkliftMapper.xml | 32 +++++++ .../mapper/factorykiln/FactoryKilnMapper.xml | 12 +++ .../FactoryPackingLineMapper.xml | 12 +++ 51 files changed, 1600 insertions(+), 20 deletions(-) create mode 100644 yudao-framework/yudao-common/src/main/java/cn/iocoder/yudao/framework/common/enums/AssetsTypeCodeEnum.java create mode 100644 yudao-module-bpm/yudao-module-bpm-biz/src/main/java/cn/iocoder/yudao/module/bpm/controller/admin/task/vo/instance/BpmProcessInstanceResultStatusStatisticsGroupTimeVO.java create mode 100644 yudao-module-system/yudao-module-system-api/src/main/java/cn/iocoder/yudao/module/system/api/assets/AssetsTypeApi.java create mode 100644 yudao-module-system/yudao-module-system-biz/src/main/java/cn/iocoder/yudao/module/system/api/assets/AssetsTypeApiImpl.java create mode 100644 zn-module-smartfactory/zn-module-smartfactory-biz/src/main/java/cn/iocoder/yudao/module/smartfactory/controller/admin/factoryforklift/FactoryForkliftController.java create mode 100644 zn-module-smartfactory/zn-module-smartfactory-biz/src/main/java/cn/iocoder/yudao/module/smartfactory/controller/admin/factoryforklift/vo/FactoryForkliftPageReqVO.java create mode 100644 zn-module-smartfactory/zn-module-smartfactory-biz/src/main/java/cn/iocoder/yudao/module/smartfactory/controller/admin/factoryforklift/vo/FactoryForkliftRespVO.java create mode 100644 zn-module-smartfactory/zn-module-smartfactory-biz/src/main/java/cn/iocoder/yudao/module/smartfactory/controller/admin/factoryforklift/vo/FactoryForkliftSaveReqVO.java create mode 100644 zn-module-smartfactory/zn-module-smartfactory-biz/src/main/java/cn/iocoder/yudao/module/smartfactory/controller/admin/factorykiln/FactoryKilnController.java create mode 100644 zn-module-smartfactory/zn-module-smartfactory-biz/src/main/java/cn/iocoder/yudao/module/smartfactory/controller/admin/factorykiln/vo/FactoryKilnPageReqVO.java create mode 100644 zn-module-smartfactory/zn-module-smartfactory-biz/src/main/java/cn/iocoder/yudao/module/smartfactory/controller/admin/factorykiln/vo/FactoryKilnRespVO.java create mode 100644 zn-module-smartfactory/zn-module-smartfactory-biz/src/main/java/cn/iocoder/yudao/module/smartfactory/controller/admin/factorykiln/vo/FactoryKilnSaveReqVO.java create mode 100644 zn-module-smartfactory/zn-module-smartfactory-biz/src/main/java/cn/iocoder/yudao/module/smartfactory/controller/admin/factorypackingline/FactoryPackingLineController.java create mode 100644 zn-module-smartfactory/zn-module-smartfactory-biz/src/main/java/cn/iocoder/yudao/module/smartfactory/controller/admin/factorypackingline/vo/FactoryPackingLinePageReqVO.java create mode 100644 zn-module-smartfactory/zn-module-smartfactory-biz/src/main/java/cn/iocoder/yudao/module/smartfactory/controller/admin/factorypackingline/vo/FactoryPackingLineRespVO.java create mode 100644 zn-module-smartfactory/zn-module-smartfactory-biz/src/main/java/cn/iocoder/yudao/module/smartfactory/controller/admin/factorypackingline/vo/FactoryPackingLineSaveReqVO.java create mode 100644 zn-module-smartfactory/zn-module-smartfactory-biz/src/main/java/cn/iocoder/yudao/module/smartfactory/dal/dataobject/factoryforklift/FactoryForkliftDO.java create mode 100644 zn-module-smartfactory/zn-module-smartfactory-biz/src/main/java/cn/iocoder/yudao/module/smartfactory/dal/dataobject/factorykiln/FactoryKilnDO.java create mode 100644 zn-module-smartfactory/zn-module-smartfactory-biz/src/main/java/cn/iocoder/yudao/module/smartfactory/dal/dataobject/factorypackingline/FactoryPackingLineDO.java create mode 100644 zn-module-smartfactory/zn-module-smartfactory-biz/src/main/java/cn/iocoder/yudao/module/smartfactory/dal/mysql/factoryforklift/FactoryForkliftMapper.java create mode 100644 zn-module-smartfactory/zn-module-smartfactory-biz/src/main/java/cn/iocoder/yudao/module/smartfactory/dal/mysql/factorykiln/FactoryKilnMapper.java create mode 100644 zn-module-smartfactory/zn-module-smartfactory-biz/src/main/java/cn/iocoder/yudao/module/smartfactory/dal/mysql/factorypackingline/FactoryPackingLineMapper.java create mode 100644 zn-module-smartfactory/zn-module-smartfactory-biz/src/main/java/cn/iocoder/yudao/module/smartfactory/service/factoryforklift/FactoryForkliftService.java create mode 100644 zn-module-smartfactory/zn-module-smartfactory-biz/src/main/java/cn/iocoder/yudao/module/smartfactory/service/factoryforklift/FactoryForkliftServiceImpl.java create mode 100644 zn-module-smartfactory/zn-module-smartfactory-biz/src/main/java/cn/iocoder/yudao/module/smartfactory/service/factorykiln/FactoryKilnService.java create mode 100644 zn-module-smartfactory/zn-module-smartfactory-biz/src/main/java/cn/iocoder/yudao/module/smartfactory/service/factorykiln/FactoryKilnServiceImpl.java create mode 100644 zn-module-smartfactory/zn-module-smartfactory-biz/src/main/java/cn/iocoder/yudao/module/smartfactory/service/factorypackingline/FactoryPackingLineService.java create mode 100644 zn-module-smartfactory/zn-module-smartfactory-biz/src/main/java/cn/iocoder/yudao/module/smartfactory/service/factorypackingline/FactoryPackingLineServiceImpl.java create mode 100644 zn-module-smartfactory/zn-module-smartfactory-biz/src/main/resources/mapper/factoryforklift/FactoryForkliftMapper.xml create mode 100644 zn-module-smartfactory/zn-module-smartfactory-biz/src/main/resources/mapper/factorykiln/FactoryKilnMapper.xml create mode 100644 zn-module-smartfactory/zn-module-smartfactory-biz/src/main/resources/mapper/factorypackingline/FactoryPackingLineMapper.xml diff --git a/yudao-framework/yudao-common/src/main/java/cn/iocoder/yudao/framework/common/enums/AssetsTypeCodeEnum.java b/yudao-framework/yudao-common/src/main/java/cn/iocoder/yudao/framework/common/enums/AssetsTypeCodeEnum.java new file mode 100644 index 00000000..1a87f657 --- /dev/null +++ b/yudao-framework/yudao-common/src/main/java/cn/iocoder/yudao/framework/common/enums/AssetsTypeCodeEnum.java @@ -0,0 +1,18 @@ +package cn.iocoder.yudao.framework.common.enums; + +import lombok.AllArgsConstructor; +import lombok.Getter; + +/** + * 全局用户类型枚举 + */ +@AllArgsConstructor +@Getter +public class AssetsTypeCodeEnum { + + /** + * 叉车 + */ + public static final String FORKLIFT = "FORKLIFT"; + +} diff --git a/yudao-module-bpm/yudao-module-bpm-biz/src/main/java/cn/iocoder/yudao/module/bpm/controller/admin/task/BpmProcessInstanceController.java b/yudao-module-bpm/yudao-module-bpm-biz/src/main/java/cn/iocoder/yudao/module/bpm/controller/admin/task/BpmProcessInstanceController.java index e8c6b5ee..dc774589 100644 --- a/yudao-module-bpm/yudao-module-bpm-biz/src/main/java/cn/iocoder/yudao/module/bpm/controller/admin/task/BpmProcessInstanceController.java +++ b/yudao-module-bpm/yudao-module-bpm-biz/src/main/java/cn/iocoder/yudao/module/bpm/controller/admin/task/BpmProcessInstanceController.java @@ -25,6 +25,7 @@ import org.springframework.web.bind.annotation.*; import javax.annotation.Resource; import javax.validation.Valid; import java.util.List; +import java.util.Map; import static cn.iocoder.yudao.framework.common.pojo.CommonResult.success; import static cn.iocoder.yudao.framework.security.core.util.SecurityFrameworkUtils.getLoginUserId; @@ -129,6 +130,19 @@ public class BpmProcessInstanceController { return success(list); } + + /** + * 流程实例的状态统计查询 + * 根据流程状态(处理中,通过,不通过,取消),统计各个状态的数据量 + */ + @GetMapping("/process_instance_result_status_statistics_group_time") + @Operation(summary = "流程实例的状态统计查询", description = "根据流程状态(处理中,通过,不通过,取消),统计各个状态的数据量") + @DataPermission(enable = false) + public CommonResult>> getProcessInstanceResultStatusStatisticsGroupTime(@Valid BpmProcessInstanceStatisticsReqVO reqVO) { + Map> list = processInstanceService.getProcessInstanceResultStatusStatisticsGroupTime(reqVO); + return success(list); + } + @GetMapping("/getAll") @Operation(summary = "获得所有实例分页列表", description = "在【统计查询】菜单中,进行调用") @PreAuthorize("@ss.hasPermission('bpm:process-instance:query')") diff --git a/yudao-module-bpm/yudao-module-bpm-biz/src/main/java/cn/iocoder/yudao/module/bpm/controller/admin/task/vo/instance/BpmProcessInstanceResultStatusStatisticsGroupTimeVO.java b/yudao-module-bpm/yudao-module-bpm-biz/src/main/java/cn/iocoder/yudao/module/bpm/controller/admin/task/vo/instance/BpmProcessInstanceResultStatusStatisticsGroupTimeVO.java new file mode 100644 index 00000000..c13d6467 --- /dev/null +++ b/yudao-module-bpm/yudao-module-bpm-biz/src/main/java/cn/iocoder/yudao/module/bpm/controller/admin/task/vo/instance/BpmProcessInstanceResultStatusStatisticsGroupTimeVO.java @@ -0,0 +1,24 @@ +package cn.iocoder.yudao.module.bpm.controller.admin.task.vo.instance; + +import io.swagger.v3.oas.annotations.media.Schema; +import lombok.Data; +import lombok.ToString; + +@Schema(description = "管理后台 - 流程实例统计查询 Item Response VO") +@Data +@ToString(callSuper = true) +public class BpmProcessInstanceResultStatusStatisticsGroupTimeVO { + + @Schema(description = "流程名称", example = "请假流程") + private String name; + + @Schema(description = "流程实例统计数量", example = "1") + private int totalCount; + + @Schema(description = "流程实例的状态", example = "1") + private int result ; + + @Schema(description = "时间", example = "1") + private String time ; + +} diff --git a/yudao-module-bpm/yudao-module-bpm-biz/src/main/java/cn/iocoder/yudao/module/bpm/controller/admin/task/vo/instance/BpmProcessInstanceStatisticsReqVO.java b/yudao-module-bpm/yudao-module-bpm-biz/src/main/java/cn/iocoder/yudao/module/bpm/controller/admin/task/vo/instance/BpmProcessInstanceStatisticsReqVO.java index 67ded96d..4b3d4078 100644 --- a/yudao-module-bpm/yudao-module-bpm-biz/src/main/java/cn/iocoder/yudao/module/bpm/controller/admin/task/vo/instance/BpmProcessInstanceStatisticsReqVO.java +++ b/yudao-module-bpm/yudao-module-bpm-biz/src/main/java/cn/iocoder/yudao/module/bpm/controller/admin/task/vo/instance/BpmProcessInstanceStatisticsReqVO.java @@ -24,6 +24,9 @@ public class BpmProcessInstanceStatisticsReqVO extends PageParam { @Schema(description = "流程名称", example = "请假流程") private String name; + @Schema(description = "近几天 (默认7天)", example = "近几天") + private Integer recentDays; + @Schema(description = "流程分类-参见 bpm_model_category 数据字典", example = "1") private String category; diff --git a/yudao-module-bpm/yudao-module-bpm-biz/src/main/java/cn/iocoder/yudao/module/bpm/dal/mysql/task/BpmProcessInstanceExtMapper.java b/yudao-module-bpm/yudao-module-bpm-biz/src/main/java/cn/iocoder/yudao/module/bpm/dal/mysql/task/BpmProcessInstanceExtMapper.java index 9347b5f9..38d6518e 100644 --- a/yudao-module-bpm/yudao-module-bpm-biz/src/main/java/cn/iocoder/yudao/module/bpm/dal/mysql/task/BpmProcessInstanceExtMapper.java +++ b/yudao-module-bpm/yudao-module-bpm-biz/src/main/java/cn/iocoder/yudao/module/bpm/dal/mysql/task/BpmProcessInstanceExtMapper.java @@ -3,10 +3,7 @@ package cn.iocoder.yudao.module.bpm.dal.mysql.task; import cn.iocoder.yudao.framework.common.pojo.PageResult; import cn.iocoder.yudao.framework.mybatis.core.mapper.BaseMapperX; import cn.iocoder.yudao.framework.mybatis.core.query.LambdaQueryWrapperX; -import cn.iocoder.yudao.module.bpm.controller.admin.task.vo.instance.BpmProcessFinishStatisticsRespVO; -import cn.iocoder.yudao.module.bpm.controller.admin.task.vo.instance.BpmProcessInstanceMyPageReqVO; -import cn.iocoder.yudao.module.bpm.controller.admin.task.vo.instance.BpmProcessInstanceStatisticsReqVO; -import cn.iocoder.yudao.module.bpm.controller.admin.task.vo.instance.BpmProcessInstanceStatisticsRespVO; +import cn.iocoder.yudao.module.bpm.controller.admin.task.vo.instance.*; import cn.iocoder.yudao.module.bpm.dal.dataobject.task.BpmProcessInstanceExtDO; import org.apache.ibatis.annotations.Mapper; @@ -77,4 +74,10 @@ public interface BpmProcessInstanceExtMapper extends BaseMapperX selectUnfinishProcessCount(BpmProcessInstanceStatisticsReqVO reqVO); + /** + * + * @param pageReqVO + * @return + */ + List getProcessInstanceResultStatusStatisticsGroupTime(BpmProcessInstanceStatisticsReqVO pageReqVO); } diff --git a/yudao-module-bpm/yudao-module-bpm-biz/src/main/java/cn/iocoder/yudao/module/bpm/service/task/BpmProcessInstanceService.java b/yudao-module-bpm/yudao-module-bpm-biz/src/main/java/cn/iocoder/yudao/module/bpm/service/task/BpmProcessInstanceService.java index 00839ff4..6b5530f9 100644 --- a/yudao-module-bpm/yudao-module-bpm-biz/src/main/java/cn/iocoder/yudao/module/bpm/service/task/BpmProcessInstanceService.java +++ b/yudao-module-bpm/yudao-module-bpm-biz/src/main/java/cn/iocoder/yudao/module/bpm/service/task/BpmProcessInstanceService.java @@ -197,4 +197,13 @@ public interface BpmProcessInstanceService { * @return */ BpmProcessInstancePrintDataRespVO getOAReportPrintData(BpmProcessInstancePrintDataReqVO reqVO); + + /** + * 流程实例的状态统计查询 + * 根据流程状态(处理中,通过,不通过,取消),统计各个状态的数据量 日期分组 + * + * @param reqVO + * @return + */ + Map> getProcessInstanceResultStatusStatisticsGroupTime(BpmProcessInstanceStatisticsReqVO reqVO); } diff --git a/yudao-module-bpm/yudao-module-bpm-biz/src/main/java/cn/iocoder/yudao/module/bpm/service/task/BpmProcessInstanceServiceImpl.java b/yudao-module-bpm/yudao-module-bpm-biz/src/main/java/cn/iocoder/yudao/module/bpm/service/task/BpmProcessInstanceServiceImpl.java index b4cea8a4..c6f896e0 100644 --- a/yudao-module-bpm/yudao-module-bpm-biz/src/main/java/cn/iocoder/yudao/module/bpm/service/task/BpmProcessInstanceServiceImpl.java +++ b/yudao-module-bpm/yudao-module-bpm-biz/src/main/java/cn/iocoder/yudao/module/bpm/service/task/BpmProcessInstanceServiceImpl.java @@ -1 +1 @@ -package cn.iocoder.yudao.module.bpm.service.task; import cn.hutool.core.collection.CollUtil; import cn.hutool.core.lang.Assert; import cn.hutool.core.util.StrUtil; import cn.iocoder.yudao.framework.common.pojo.PageResult; import cn.iocoder.yudao.framework.common.util.number.NumberUtils; import cn.iocoder.yudao.framework.flowable.core.util.FlowableUtils; import cn.iocoder.yudao.framework.security.core.util.SecurityFrameworkUtils; import cn.iocoder.yudao.framework.web.core.util.WebFrameworkUtils; import cn.iocoder.yudao.module.bpm.api.task.dto.BpmProcessInstanceCreateReqDTO; import cn.iocoder.yudao.module.bpm.controller.admin.oa.vo.cash.BpmOACashRespVO; import cn.iocoder.yudao.module.bpm.controller.admin.oa.vo.print.BpmOACashPrintDataRespVO; import cn.iocoder.yudao.module.bpm.controller.admin.oa.vo.print.BpmOAReimbursementPrintDataRespVO; import cn.iocoder.yudao.module.bpm.controller.admin.oa.vo.print.BpmProcessInstancePrintDataReqVO; import cn.iocoder.yudao.module.bpm.controller.admin.oa.vo.print.BpmProcessInstancePrintDataRespVO; import cn.iocoder.yudao.module.bpm.controller.admin.oa.vo.reimbursement.BpmOAReimbursementRespVO; import cn.iocoder.yudao.module.bpm.controller.admin.task.vo.instance.*; import cn.iocoder.yudao.module.bpm.controller.admin.task.vo.task.BpmTaskApproveReqVO; import cn.iocoder.yudao.module.bpm.controller.admin.task.vo.task.BpmTaskRespVO; import cn.iocoder.yudao.module.bpm.convert.task.BpmProcessInstanceConvert; import cn.iocoder.yudao.module.bpm.dal.dataobject.definition.BpmProcessDefinitionExtDO; import cn.iocoder.yudao.module.bpm.dal.dataobject.definition.BpmTaskAssignRuleDO; import cn.iocoder.yudao.module.bpm.dal.dataobject.definition.BpmUserGroupDO; import cn.iocoder.yudao.module.bpm.dal.dataobject.oa.BpmOACashDO; import cn.iocoder.yudao.module.bpm.dal.dataobject.oa.BpmOAImprestDO; import cn.iocoder.yudao.module.bpm.dal.dataobject.oa.BpmOAReimbursementDO; import cn.iocoder.yudao.module.bpm.dal.dataobject.task.BpmProcessInstanceExtDO; import cn.iocoder.yudao.module.bpm.dal.mysql.definition.BpmTaskAssignRuleMapper; import cn.iocoder.yudao.module.bpm.dal.mysql.task.BpmProcessInstanceExtMapper; import cn.iocoder.yudao.module.bpm.dal.mysql.task.BpmTaskExtMapper; import cn.iocoder.yudao.module.bpm.enums.task.BpmConstants; import cn.iocoder.yudao.module.bpm.enums.task.BpmProcessInstanceDeleteReasonEnum; import cn.iocoder.yudao.module.bpm.enums.task.BpmProcessInstanceResultEnum; import cn.iocoder.yudao.module.bpm.enums.task.BpmProcessInstanceStatusEnum; import cn.iocoder.yudao.module.bpm.framework.bpm.core.event.BpmProcessInstanceResultEventPublisher; import cn.iocoder.yudao.module.bpm.service.definition.BpmProcessDefinitionService; import cn.iocoder.yudao.module.bpm.service.definition.BpmUserGroupService; import cn.iocoder.yudao.module.bpm.service.message.BpmMessageService; import cn.iocoder.yudao.module.bpm.service.oa.BpmOACashService; import cn.iocoder.yudao.module.bpm.service.oa.BpmOAImprestService; import cn.iocoder.yudao.module.bpm.service.oa.BpmOAProcureServiceImpl; import cn.iocoder.yudao.module.bpm.service.oa.BpmOAReimbursementService; import cn.iocoder.yudao.module.infra.api.config.ConfigApi; import cn.iocoder.yudao.module.infra.api.file.FileApi; import cn.iocoder.yudao.module.system.api.bank.BankApi; import cn.iocoder.yudao.module.system.api.dept.DeptApi; import cn.iocoder.yudao.module.system.api.dept.dto.DeptRespDTO; import cn.iocoder.yudao.module.system.api.permission.PermissionApi; import cn.iocoder.yudao.module.system.api.permission.dto.DeptDataPermissionRespDTO; import cn.iocoder.yudao.module.system.api.user.AdminUserApi; import cn.iocoder.yudao.module.system.api.user.dto.AdminUserRespDTO; import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; import lombok.extern.slf4j.Slf4j; import org.flowable.engine.HistoryService; import org.flowable.engine.RuntimeService; import org.flowable.engine.TaskService; import org.flowable.engine.delegate.event.FlowableCancelledEvent; import org.flowable.engine.history.HistoricProcessInstance; import org.flowable.engine.repository.ProcessDefinition; import org.flowable.engine.runtime.ProcessInstance; import org.flowable.task.api.Task; import org.springframework.context.annotation.Lazy; import org.springframework.stereotype.Service; import org.springframework.transaction.annotation.Transactional; import org.springframework.validation.annotation.Validated; import javax.annotation.Resource; import javax.validation.Valid; import java.lang.reflect.Field; import java.text.DecimalFormat; import java.time.LocalDateTime; import java.util.*; import java.util.regex.Matcher; import java.util.regex.Pattern; import java.util.stream.Collectors; import static cn.iocoder.yudao.framework.common.exception.util.ServiceExceptionUtil.exception; import static cn.iocoder.yudao.framework.common.util.collection.CollectionUtils.convertList; import static cn.iocoder.yudao.framework.common.util.collection.CollectionUtils.convertSet; import static cn.iocoder.yudao.framework.web.core.util.WebFrameworkUtils.getLoginUserId; import static cn.iocoder.yudao.module.bpm.enums.ErrorCodeConstants.*; /** * 流程实例 Service 实现类 *

* ProcessDefinition & ProcessInstance & Execution & Task 的关系: * 1. *

* HistoricProcessInstance & ProcessInstance 的关系: * 1. *

* 简单来说,前者 = 历史 + 运行中的流程实例,后者仅是运行中的流程实例 */ @Service @Validated @Slf4j public class BpmProcessInstanceServiceImpl implements BpmProcessInstanceService { @Resource private TaskService engineTaskService; @Resource private BpmTaskAssignRuleMapper taskRuleMapper; @Resource private BpmUserGroupService userGroupService; @Resource private RuntimeService runtimeService; @Resource private BpmProcessInstanceExtMapper processInstanceExtMapper; @Resource @Lazy // 解决循环依赖 private BpmTaskService taskService; @Resource private BpmProcessDefinitionService processDefinitionService; @Resource private HistoryService historyService; @Resource private AdminUserApi adminUserApi; @Resource private DeptApi deptApi; @Resource private BpmProcessInstanceResultEventPublisher processInstanceResultEventPublisher; @Resource @Lazy // 解决循环依赖 private BpmMessageService messageService; @Resource private ConfigApi configApi; @Override public ProcessInstance getProcessInstance(String id) { return runtimeService.createProcessInstanceQuery().processInstanceId(id).singleResult(); } @Override public List getProcessInstances(Set ids) { return runtimeService.createProcessInstanceQuery().processInstanceIds(ids).list(); } @Override public PageResult getMyProcessInstancePage(Long userId, BpmProcessInstanceMyPageReqVO pageReqVO) { // 通过 BpmProcessInstanceExtDO 表,先查询到对应的分页 PageResult pageResult = processInstanceExtMapper.selectPage(userId, pageReqVO); if (CollUtil.isEmpty(pageResult.getList())) { return new PageResult<>(pageResult.getTotal()); } // 获得流程 Task Map List processInstanceIds = convertList(pageResult.getList(), BpmProcessInstanceExtDO::getProcessInstanceId); Map> taskMap = taskService.getTaskMapByProcessInstanceIds(processInstanceIds); List ids = taskMap.values().stream() .flatMap(Collection::stream) .map(Task::getAssignee) .collect(Collectors.toList()); Iterator iterator = ids.iterator(); while (iterator.hasNext()) { String id = iterator.next(); if (id == null) { iterator.remove(); } } List longIds = ids.stream() .map(Long::valueOf) .collect(Collectors.toList()); // 获得 User Map Map userMap = adminUserApi.getUserMap(longIds); // 转换返回 return BpmProcessInstanceConvert.INSTANCE.convertPage(pageResult, taskMap, userMap); } @Override @Transactional(rollbackFor = Exception.class) public String createProcessInstance(Long userId, @Valid BpmProcessInstanceCreateReqVO createReqVO) { // 获得流程定义 ProcessDefinition definition = processDefinitionService.getProcessDefinition(createReqVO.getProcessDefinitionId()); // 发起流程 return createProcessInstance0(userId, definition, createReqVO.getVariables(), null); } @Override public String createProcessInstance(Long userId, @Valid BpmProcessInstanceCreateReqDTO createReqDTO) { // 获得流程定义 ProcessDefinition definition = processDefinitionService.getActiveProcessDefinition(createReqDTO.getProcessDefinitionKey()); // 发起流程 return createProcessInstance0(userId, definition, createReqDTO.getVariables(), createReqDTO.getBusinessKey()); } @Override public BpmProcessInstanceRespVO getProcessInstanceVO(String id) { // 获得流程实例 HistoricProcessInstance processInstance = getHistoricProcessInstance(id); if (processInstance == null) { return null; } BpmProcessInstanceExtDO processInstanceExt = processInstanceExtMapper.selectByProcessInstanceId(id); Assert.notNull(processInstanceExt, "流程实例拓展({}) 不存在", id); // 获得流程定义 ProcessDefinition processDefinition = processDefinitionService .getProcessDefinition(processInstance.getProcessDefinitionId()); Assert.notNull(processDefinition, "流程定义({}) 不存在", processInstance.getProcessDefinitionId()); BpmProcessDefinitionExtDO processDefinitionExt = processDefinitionService.getProcessDefinitionExt( processInstance.getProcessDefinitionId()); Assert.notNull(processDefinitionExt, "流程定义拓展({}) 不存在", id); String bpmnXml = processDefinitionService.getProcessDefinitionBpmnXML(processInstance.getProcessDefinitionId()); // 获得 User AdminUserRespDTO startUser = adminUserApi.getUser(NumberUtils.parseLong(processInstance.getStartUserId())).getCheckedData(); DeptRespDTO dept = null; if (startUser != null) { dept = deptApi.getDept(startUser.getDeptId()).getCheckedData(); } // 拼接结果 return BpmProcessInstanceConvert.INSTANCE.convert2(processInstance, processInstanceExt, processDefinition, processDefinitionExt, bpmnXml, startUser, dept); } @Override public void cancelProcessInstance(Long userId, @Valid BpmProcessInstanceCancelReqVO cancelReqVO) { // 校验流程实例存在 ProcessInstance instance = getProcessInstance(cancelReqVO.getId()); if (instance == null) { throw exception(PROCESS_INSTANCE_CANCEL_FAIL_NOT_EXISTS); } // 只能取消自己的 if (!Objects.equals(instance.getStartUserId(), String.valueOf(userId))) { throw exception(PROCESS_INSTANCE_CANCEL_FAIL_NOT_SELF); } // 通过删除流程实例,实现流程实例的取消, // 删除流程实例,正则执行任务 ACT_RU_TASK. 任务会被删除。通过历史表查询 deleteProcessInstance(cancelReqVO.getId(), BpmProcessInstanceDeleteReasonEnum.CANCEL_TASK.format(cancelReqVO.getReason())); } /** * 获得历史的流程实例 * * @param id 流程实例的编号 * @return 历史的流程实例 */ @Override public HistoricProcessInstance getHistoricProcessInstance(String id) { return historyService.createHistoricProcessInstanceQuery().processInstanceId(id).singleResult(); } @Override public List getHistoricProcessInstances(Set ids) { return historyService.createHistoricProcessInstanceQuery().processInstanceIds(ids).list(); } @Override public void createProcessInstanceExt(ProcessInstance instance) { // 获得流程定义 ProcessDefinition definition = processDefinitionService.getProcessDefinition2(instance.getProcessDefinitionId()); // 插入 BpmProcessInstanceExtDO 对象 BpmProcessInstanceExtDO instanceExtDO = new BpmProcessInstanceExtDO() .setProcessInstanceId(instance.getId()) .setProcessDefinitionId(definition.getId()) .setName(instance.getProcessDefinitionName()) .setStartUserId(Long.valueOf(instance.getStartUserId())) .setCategory(definition.getCategory()) .setStatus(BpmProcessInstanceStatusEnum.RUNNING.getStatus()) .setResult(BpmProcessInstanceResultEnum.PROCESS.getResult()); processInstanceExtMapper.insert(instanceExtDO); } @Override public void updateProcessInstanceExtCancel(FlowableCancelledEvent event) { // 判断是否为 Reject 不通过。如果是,则不进行更新. // 因为,updateProcessInstanceExtReject 方法,已经进行更新了 if (BpmProcessInstanceDeleteReasonEnum.isRejectReason((String) event.getCause())) { return; } // 需要主动查询,因为 instance 只有 id 属性 // 另外,此时如果去查询 ProcessInstance 的话,字段是不全的,所以去查询了 HistoricProcessInstance HistoricProcessInstance processInstance = getHistoricProcessInstance(event.getProcessInstanceId()); // 更新拓展表 BpmProcessInstanceExtDO instanceExtDO = new BpmProcessInstanceExtDO() .setProcessInstanceId(event.getProcessInstanceId()) .setEndTime(LocalDateTime.now()) // 由于 ProcessInstance 里没有办法拿到 endTime,所以这里设置 .setStatus(BpmProcessInstanceStatusEnum.FINISH.getStatus()) .setResult(BpmProcessInstanceResultEnum.CANCEL.getResult()); processInstanceExtMapper.updateByProcessInstanceId(instanceExtDO); // 发送流程实例的状态事件 processInstanceResultEventPublisher.sendProcessInstanceResultEvent( BpmProcessInstanceConvert.INSTANCE.convert(this, processInstance, instanceExtDO.getResult())); } @Override public void updateProcessInstanceExtComplete(ProcessInstance instance) { // 需要主动查询,因为 instance 只有 id 属性 // 另外,此时如果去查询 ProcessInstance 的话,字段是不全的,所以去查询了 HistoricProcessInstance HistoricProcessInstance processInstance = getHistoricProcessInstance(instance.getId()); // 更新拓展表 BpmProcessInstanceExtDO instanceExtDO = new BpmProcessInstanceExtDO() .setProcessInstanceId(instance.getProcessInstanceId()) .setEndTime(LocalDateTime.now()) // 由于 ProcessInstance 里没有办法拿到 endTime,所以这里设置 .setStatus(BpmProcessInstanceStatusEnum.FINISH.getStatus()) .setResult(BpmProcessInstanceResultEnum.APPROVE.getResult()); // 如果正常完全,说明审批通过 processInstanceExtMapper.updateByProcessInstanceId(instanceExtDO); Map processVariables = runtimeService.getVariables(instance.getProcessInstanceId()); String reason = (String) processVariables.get("approve_reason"); // 发送流程被通过的消息 messageService.sendMessageWhenProcessInstanceApprove(BpmProcessInstanceConvert.INSTANCE.convert2ApprovedReq(instance, reason)); // 发送流程实例的状态事件 processInstanceResultEventPublisher.sendProcessInstanceResultEvent( BpmProcessInstanceConvert.INSTANCE.convert(this, processInstance, instanceExtDO.getResult())); } @Override @Transactional(rollbackFor = Exception.class) public void updateProcessInstanceExtReject(String id, String reason) { // 需要主动查询,因为 instance 只有 id 属性 ProcessInstance processInstance = getProcessInstance(id); // 删除流程实例,以实现驳回任务时,取消整个审批流程 deleteProcessInstance(id, StrUtil.format(BpmProcessInstanceDeleteReasonEnum.REJECT_TASK.format(reason))); // 更新 status + result // 注意,不能和上面的逻辑更换位置。因为 deleteProcessInstance 会触发流程的取消,进而调用 updateProcessInstanceExtCancel 方法, // 设置 result 为 BpmProcessInstanceStatusEnum.CANCEL,显然和 result 不一定是一致的 BpmProcessInstanceExtDO instanceExtDO = new BpmProcessInstanceExtDO() .setProcessInstanceId(id) .setEndTime(LocalDateTime.now()) // 由于 ProcessInstance 里没有办法拿到 endTime,所以这里设置 .setStatus(BpmProcessInstanceStatusEnum.FINISH.getStatus()) .setResult(BpmProcessInstanceResultEnum.REJECT.getResult()); processInstanceExtMapper.updateByProcessInstanceId(instanceExtDO); // 发送流程被不通过的消息 messageService.sendMessageWhenProcessInstanceReject(BpmProcessInstanceConvert.INSTANCE.convert2RejectReq(processInstance, reason)); // 发送流程实例的状态事件 processInstanceResultEventPublisher.sendProcessInstanceResultEvent( BpmProcessInstanceConvert.INSTANCE.convert(this, processInstance, instanceExtDO.getResult())); } private void deleteProcessInstance(String id, String reason) { runtimeService.deleteProcessInstance(id, reason); } private String createProcessInstance0(Long userId, ProcessDefinition definition, Map variables, String businessKey) { // 校验流程定义 if (definition == null) { throw exception(PROCESS_DEFINITION_NOT_EXISTS); } if (definition.isSuspended()) { throw exception(PROCESS_DEFINITION_IS_SUSPENDED); } // 设置当前用户 FlowableUtils.setAuthenticatedUserId(userId); // 创建流程实例 ProcessInstance instance = runtimeService.createProcessInstanceBuilder() .processDefinitionId(definition.getId()) .businessKey(businessKey) .name(definition.getName().trim()) .variables(variables) .start(); // 设置流程名字 runtimeService.setProcessInstanceName(instance.getId(), definition.getName()); // 补全流程实例的拓展表 processInstanceExtMapper.updateByProcessInstanceId(new BpmProcessInstanceExtDO().setProcessInstanceId(instance.getId()) .setFormVariables(variables)); /** 创建流程后,添加抄送人 End add by yj 2024.1.4 */ processCCToUsers(definition, instance); /** 通过自己发起的流程 */ // approveSelfTask(instance.getId()) ; return instance.getId(); } private void approveSelfTask(String processInstanceId) { List tasks = engineTaskService.createTaskQuery().processInstanceId(processInstanceId).list(); if (tasks != null && tasks.size() > 0) { Task task = tasks.get(0); String assigneeId = task.getAssignee(); //如果当前登陆用户是审批人,那么自动审批通过 if (assigneeId.equals(SecurityFrameworkUtils.getLoginUserId().toString())) { BpmTaskApproveReqVO reqVO = new BpmTaskApproveReqVO(); reqVO.setId(task.getId()); reqVO.setReason(BpmConstants.AUTO_APPRAVAL); taskService.approveTask(getLoginUserId(), reqVO); } } } /** * 获得抄送我的流程实例的分页 * * @param userId 用户编号 * @param pageReqVO 分页请求 * @return 流程实例的分页 */ public PageResult getMyCCProcessInstancePage(Long userId, BpmProcessInstanceMyPageReqVO pageReqVO) { // 通过 BpmProcessInstanceExtDO 表,先查询到对应的分页 PageResult pageResult = processInstanceExtMapper.selectCCPage(userId, pageReqVO); if (CollUtil.isEmpty(pageResult.getList())) { return new PageResult<>(pageResult.getTotal()); } // 获得流程 Task Map List processInstanceIds = convertList(pageResult.getList(), BpmProcessInstanceExtDO::getProcessInstanceId); Map> taskMap = taskService.getTaskMapByProcessInstanceIds(processInstanceIds); // 转换返回 return BpmProcessInstanceConvert.INSTANCE.convertPage(pageResult, taskMap, null); } public List getProcessInstancesGroupByModelName(BpmProcessInstanceStatisticsReqVO pageReqVO) { pageReqVO = getUserids(pageReqVO); return processInstanceExtMapper.getProcessInstancesGroupByModelName(pageReqVO); } public List getProcessInstancesGroupByResultStatus(BpmProcessInstanceStatisticsReqVO pageReqVO) { pageReqVO = getUserids(pageReqVO); return processInstanceExtMapper.getProcessInstancesGroupByResultStatus(pageReqVO); } public PageResult getStatisticsProcessInstancePage(@Valid BpmProcessInstanceMyPageReqVO pageReqVO) { // 通过 BpmProcessInstanceExtDO 表,先查询到对应的分页 PageResult pageResult = processInstanceExtMapper.selectStatisticePage(pageReqVO); if (CollUtil.isEmpty(pageResult.getList())) { return new PageResult<>(pageResult.getTotal()); } // 获得流程 Task Map List processInstanceIds = convertList(pageResult.getList(), BpmProcessInstanceExtDO::getProcessInstanceId); Map> taskMap = taskService.getTaskMapByProcessInstanceIds(processInstanceIds); List ids = taskMap.values().stream() .flatMap(Collection::stream) .map(Task::getAssignee) .collect(Collectors.toList()); Iterator iterator = ids.iterator(); while (iterator.hasNext()) { String id = iterator.next(); if (id == null) { iterator.remove(); } } List longIds = ids.stream() .map(Long::valueOf) .collect(Collectors.toList()); //获得 审批人 User Map Map assigneeUserMap = adminUserApi.getUserMap(longIds); //获得 发起人 User Map List bpieDOs = pageResult.getList(); longIds = new ArrayList<>(); for (BpmProcessInstanceExtDO bpieDO : bpieDOs) { longIds.add(bpieDO.getStartUserId()); } Map startUserMap = adminUserApi.getUserMap(longIds); // 转换返回 return BpmProcessInstanceConvert.INSTANCE.convertStatisticsPage(pageResult, taskMap, assigneeUserMap, startUserMap); } @Resource PermissionApi permissionApi; /** * 根据数据权限,查询关联操作的用户IDS * * @param pageReqVO * @param * @return */ private T getUserids(T pageReqVO) { try { Class clazz = (Class) pageReqVO.getClass(); Field idField = clazz.getDeclaredField("userIds"); idField.setAccessible(true); // 设置可访问性 Long[] userIds = null; Long userId = WebFrameworkUtils.getLoginUserId(); DeptDataPermissionRespDTO deptDataPermission = permissionApi.getDeptDataPermission(userId).getCheckedData(); //查询全部 if (deptDataPermission.getAll()) { //idField.set(pageReqVO, null); // 设置属性值 return pageReqVO; } // 情况二,即不能查看部门,又不能查看自己,则说明 100% 无权限 if (CollUtil.isEmpty(deptDataPermission.getDeptIds()) && Boolean.FALSE.equals(deptDataPermission.getSelf())) { //设置成0,一个不存在的用户Id,就查询不到数据了。 userIds = new Long[]{0L}; idField.set(pageReqVO, userIds); return pageReqVO; } //情况三 至查询自己 if (deptDataPermission.getSelf()) { userIds = new Long[]{userId}; idField.set(pageReqVO, userIds); return pageReqVO; } Set deptIds = deptDataPermission.getDeptIds(); //查询部门关联的用户Id List users = adminUserApi.getUserListByDeptIds(deptIds).getCheckedData(); List tempList = new ArrayList<>(); for (AdminUserRespDTO user : users) { Long id = user.getId(); tempList.add(id); } tempList.add(userId); userIds = tempList.stream().toArray(Long[]::new); //将临时的List集合转换成数组集合 idField.set(pageReqVO, userIds); return pageReqVO; } catch (Exception exception) { exception.printStackTrace(); throw exception(BPM_SYSTEM_BUG); } } /** * /创建流程后,添加抄送人 Begin add by yj 2024.1.4 * 在设计流程的时候,需要添加一个任务块 名字必须叫Activity_cc 分配权限的时候,需要选择用户组。 * * @param definition * @param instance */ private void processCCToUsers(ProcessDefinition definition, ProcessInstance instance) { //获取bpm_task_assign_reule (Bpm 任务规则表)的流程中有没有配置抄送节点 固定抄送名称为:Activity_cc String processDefinitionId = definition.getId(); List rules = taskRuleMapper.selectListByProcessDefinitionId(processDefinitionId, null); for (BpmTaskAssignRuleDO rule : rules) { String key = rule.getTaskDefinitionKey(); //任务名称 Integer type = rule.getType(); if (!key.isEmpty() && key.equals(BpmConstants.CC_NAME) && type == 40) { StringBuffer str = new StringBuffer(); Set options = rule.getOptions(); List list = new ArrayList(options); for (Long groupId : list) { //需要根据这个groupId,查询这个组中的用户id BpmUserGroupDO userGroup = userGroupService.getUserGroup(groupId); Set userIds = userGroup.getMemberUserIds(); List userIdList = new ArrayList(userIds); for (Long user_id : userIdList) { str.append("[").append(user_id).append("]"); } } //流程是采购计划时 if (definition.getKey().equals(BpmOAProcureServiceImpl.PROCESS_KEY)) { AdminUserRespDTO userRespDTO = adminUserApi.getUser(Long.valueOf(instance.getStartUserId())).getCheckedData(); DeptRespDTO deptRespDTO = deptApi.getDept(userRespDTO.getDeptId()).getCheckedData(); //发起人部门为 生产部及以下时 if (deptRespDTO.getFlag().contains("130")) { //添加 供应部抄送 BpmUserGroupDO userGroup = userGroupService.getUserGroup(121L); Set userIds = userGroup.getMemberUserIds(); List userIdList = new ArrayList(userIds); for (Long user_id : userIdList) { str.append("[").append(user_id).append("]"); } } } String ccids = str.toString(); //根据processDefinitionId 将ccids保存到bpm_process_instance_ext中的ccids字段 BpmProcessInstanceExtDO instanceExtDO = new BpmProcessInstanceExtDO().setProcessDefinitionId(processDefinitionId) .setCcids(ccids).setProcessInstanceId(instance.getProcessInstanceId()); processInstanceExtMapper.updateByProcessInstanceId(instanceExtDO); break; } } } @Resource private BpmTaskExtMapper taskExtMapper; @Override public List getUserProcessTpo10(BpmProcessInstanceStatisticsReqVO pageReqVO) { //按审核人分组查询,统计已完成流程数量及平均耗时间 List respVOS = processInstanceExtMapper.getUserProcessTpo10(pageReqVO); if (respVOS == null || respVOS.size() == 0) { return null; } List idList = respVOS.stream() .map(BpmProcessFinishStatisticsRespVO::getUserId) .collect(Collectors.toList()); //根据userId,查询UserMap Map userMap = adminUserApi.getUserMap(idList); Long[] idsArray = new Long[userMap.size()]; // 使用 map 的 keySet() 方法获取键集合 Set keys = userMap.keySet(); // 遍历键集合,将每个键添加到数组中 int index = 0; for (Long key : keys) { idsArray[index++] = key; } pageReqVO.setUserIds(idsArray); //按审核人分组查询,未审批完成的流程数量 List bpmTaskExtDOs = processInstanceExtMapper.selectUnfinishProcessCount(pageReqVO); //按审核人分组查询,未完成的记录数 Map unFinfishCountCountMap = new HashMap<>(); for (BpmProcessFinishStatisticsRespVO item : bpmTaskExtDOs) { unFinfishCountCountMap.put(item.getUserId(), item.getUnFinfishCount()); } respVOS.forEach(respVO -> respVO.setName(userMap.get(respVO.getUserId()).getNickname())); respVOS.forEach(respVO -> respVO.setUnFinfishCount(unFinfishCountCountMap.get(respVO.getUserId()))); //获取排行榜第一记录的耗时,作为基础数据 double num = Double.parseDouble(respVOS.get(0).getUserTime()); // 先将字符串转换为双精度浮点数 int baseNumber = (int) num; // 再通过类型转换操作符将其转换为整数 DecimalFormat df = new DecimalFormat("#.00"); respVOS.forEach(respVO -> { //格式化流程完成率 float finfishCount = (float) respVO.getFinfishCount(); float unFinfishCount = respVO.getUnFinfishCount() == null ? 0 : respVO.getUnFinfishCount(); float all = finfishCount + unFinfishCount; float result = finfishCount / all; float rate = result * 100; respVO.setCompletionRate(df.format(rate) + "%"); double dValue = Double.parseDouble(respVO.getUserTime()); // 将字符串转换为double类型 int roundedValue = (int) Math.round(dValue); // 使用Math.round()进行四舍五入,并转换为int类型 respVO.setUserTime(roundedValue + ""); //格式化进度百度比, 参照最高的数据进行百分比显示 double percentage = ((int) Double.parseDouble(respVO.getUserTime()) / (double) baseNumber) * 100; respVO.setPercentage((int) Math.round(percentage)); //设置未完成 respVO.setUnFinfishCount(Integer.valueOf((int) unFinfishCount)); }); return respVOS; } @Override public BpmProcessInstanceExtDO getProcessInstanceDO(String id) { return processInstanceExtMapper.selectByProcessInstanceId(id); } @Resource private FileApi fileApi; @Resource private BankApi bankApi; @Resource @Lazy // 解决循环依赖 private BpmOAReimbursementService reimbursementService; @Resource @Lazy // 解决循环依赖 private BpmOACashService cashService; @Resource @Lazy // 解决循环依赖 private BpmOAImprestService imprestService; @Override public BpmProcessInstancePrintDataRespVO getOAReportPrintData(BpmProcessInstancePrintDataReqVO reqVO) { BpmProcessInstancePrintDataRespVO bpmProcessInstancePrintDataRespVO = new BpmProcessInstancePrintDataRespVO(); String key = reqVO.getKey(); //流程标识 String processInstanceId = reqVO.getId(); //流程实例ID bpmProcessInstancePrintDataRespVO.setId(processInstanceId); bpmProcessInstancePrintDataRespVO.setKey(key); BpmProcessInstanceRespVO bpmProcessInstance = getProcessInstanceVO(processInstanceId); Long businessKey = Long.valueOf(bpmProcessInstance.getBusinessKey()); //流程业务表-主键ID // 判断是否可见外勤人员信息 List userIds = new ArrayList<>(); String type = configApi.getConfigKey("sys.user.type").getCheckedData(); if ("1".equals(type)) { //不可见时 // 获取所有外勤人员 用户编号 userIds = adminUserApi.getUserIdsByUserNature(4).getCheckedData(); } // 获得流程审批信息 List taskRespVOList = taskService.getTaskListByProcessInstanceId(processInstanceId); // 移除外勤人员信息 List finalUserIds = userIds; taskRespVOList.removeIf(data -> finalUserIds.contains(data.getAssigneeUser().getId())); //给User添加签名地址 taskRespVOList.forEach(taskRespVO -> taskRespVO.getAssigneeUser().setSignURL( fileApi.getUserSignImgPath( taskRespVO.getAssigneeUser().getId() ).getData() ) ); //获取流程抄送用户编号 BpmProcessInstanceExtDO processInstanceExtDO = getProcessInstanceDO(processInstanceId); //获取流程抄送用户信息 List ccUserIds = new ArrayList<>(); if (processInstanceExtDO.getCcids() != null && !processInstanceExtDO.getCcids().isEmpty()) { Pattern pattern = Pattern.compile("\\[(\\d+)]"); Matcher matcher = pattern.matcher(processInstanceExtDO.getCcids()); while (matcher.find()) { ccUserIds.add(Long.parseLong(matcher.group(1))); } // 移除 外勤人员信息 ccUserIds.removeAll(userIds); } List userRespDTOS = adminUserApi.getUserList(ccUserIds).getCheckedData(); //获取抄送用户部门信息 Map deptMapDTO = deptApi.getDeptMap(convertSet(userRespDTOS, AdminUserRespDTO::getDeptId)); if ("oa_reimbursement".equals(key)) { //报销流程 BpmOAReimbursementDO reimbursement = reimbursementService.getReimbursement(businessKey); BpmOAReimbursementRespVO bpmOAReimbursementRespVO = reimbursementService.convert(reimbursement); //报销业务数据 // 移除自己得审批节点 taskRespVOList.removeIf(data -> data.getAssigneeUser().getId().equals(reimbursement.getUserId())); //备用金信息查询 BpmOAImprestDO bpmOAImprestDO = imprestService.getImprestByReimbursementId(reimbursement.getId()); if (bpmOAImprestDO != null) { //设置备用金 金额 bpmOAReimbursementRespVO.setAmount(bpmOAImprestDO.getAmount()); } // 设置抄送人信息 List ccUsers = userRespDTOS.stream().map(user -> { BpmOAReimbursementPrintDataRespVO.CCUser cc = new BpmOAReimbursementPrintDataRespVO.CCUser(); cc.setCcUserId(user.getId()); cc.setCcUserName(user.getNickname()); cc.setCcDeptName(deptMapDTO.get(user.getDeptId()).getName()); return cc; }).collect(Collectors.toList()); BpmOAReimbursementPrintDataRespVO reimbursementPrintData = new BpmOAReimbursementPrintDataRespVO(); reimbursementPrintData.setBpmOAReimbursementRespVO(bpmOAReimbursementRespVO); reimbursementPrintData.setProcessTasks(taskRespVOList); reimbursementPrintData.setCcUsers(ccUsers); bpmProcessInstancePrintDataRespVO.setBpmOAReimbursementPrintDataRespVO(reimbursementPrintData); } if ("oa_cash".equals(key)) { BpmOACashDO cashDO = cashService.getCash(businessKey); BpmOACashRespVO cashRespVO = cashService.convertCash(cashDO); // 移除自己得审批节点 taskRespVOList.removeIf(data -> data.getAssigneeUser().getId().equals(cashDO.getUserId())); // 设置抄送人信息 List ccUsers = userRespDTOS.stream().map(user -> { BpmOACashPrintDataRespVO.CCUser cc = new BpmOACashPrintDataRespVO.CCUser(); cc.setCcUserId(user.getId()); cc.setCcUserName(user.getNickname()); cc.setCcDeptName(deptMapDTO.get(user.getDeptId()).getName()); return cc; }).collect(Collectors.toList()); BpmOACashPrintDataRespVO cashPrintData = new BpmOACashPrintDataRespVO(); cashPrintData.setBpmOACashRespVO(cashRespVO); cashPrintData.setProcessTasks(taskRespVOList); cashPrintData.setCcUsers(ccUsers); bpmProcessInstancePrintDataRespVO.setBpmOACashPrintDataRespVO(cashPrintData); } return bpmProcessInstancePrintDataRespVO; } } \ No newline at end of file +package cn.iocoder.yudao.module.bpm.service.task; import cn.hutool.core.collection.CollUtil; import cn.hutool.core.collection.CollectionUtil; import cn.hutool.core.date.LocalDateTimeUtil; import cn.hutool.core.lang.Assert; import cn.hutool.core.util.StrUtil; import cn.iocoder.yudao.framework.common.pojo.PageResult; import cn.iocoder.yudao.framework.common.util.date.DateUtils; import cn.iocoder.yudao.framework.common.util.number.NumberUtils; import cn.iocoder.yudao.framework.flowable.core.util.FlowableUtils; import cn.iocoder.yudao.framework.security.core.util.SecurityFrameworkUtils; import cn.iocoder.yudao.framework.web.core.util.WebFrameworkUtils; import cn.iocoder.yudao.module.bpm.api.task.dto.BpmProcessInstanceCreateReqDTO; import cn.iocoder.yudao.module.bpm.controller.admin.oa.vo.cash.BpmOACashRespVO; import cn.iocoder.yudao.module.bpm.controller.admin.oa.vo.print.BpmOACashPrintDataRespVO; import cn.iocoder.yudao.module.bpm.controller.admin.oa.vo.print.BpmOAReimbursementPrintDataRespVO; import cn.iocoder.yudao.module.bpm.controller.admin.oa.vo.print.BpmProcessInstancePrintDataReqVO; import cn.iocoder.yudao.module.bpm.controller.admin.oa.vo.print.BpmProcessInstancePrintDataRespVO; import cn.iocoder.yudao.module.bpm.controller.admin.oa.vo.reimbursement.BpmOAReimbursementRespVO; import cn.iocoder.yudao.module.bpm.controller.admin.task.vo.instance.*; import cn.iocoder.yudao.module.bpm.controller.admin.task.vo.task.BpmTaskApproveReqVO; import cn.iocoder.yudao.module.bpm.controller.admin.task.vo.task.BpmTaskRespVO; import cn.iocoder.yudao.module.bpm.convert.task.BpmProcessInstanceConvert; import cn.iocoder.yudao.module.bpm.dal.dataobject.definition.BpmProcessDefinitionExtDO; import cn.iocoder.yudao.module.bpm.dal.dataobject.definition.BpmTaskAssignRuleDO; import cn.iocoder.yudao.module.bpm.dal.dataobject.definition.BpmUserGroupDO; import cn.iocoder.yudao.module.bpm.dal.dataobject.oa.BpmOACashDO; import cn.iocoder.yudao.module.bpm.dal.dataobject.oa.BpmOAImprestDO; import cn.iocoder.yudao.module.bpm.dal.dataobject.oa.BpmOAReimbursementDO; import cn.iocoder.yudao.module.bpm.dal.dataobject.task.BpmProcessInstanceExtDO; import cn.iocoder.yudao.module.bpm.dal.mysql.definition.BpmTaskAssignRuleMapper; import cn.iocoder.yudao.module.bpm.dal.mysql.task.BpmProcessInstanceExtMapper; import cn.iocoder.yudao.module.bpm.dal.mysql.task.BpmTaskExtMapper; import cn.iocoder.yudao.module.bpm.enums.task.BpmConstants; import cn.iocoder.yudao.module.bpm.enums.task.BpmProcessInstanceDeleteReasonEnum; import cn.iocoder.yudao.module.bpm.enums.task.BpmProcessInstanceResultEnum; import cn.iocoder.yudao.module.bpm.enums.task.BpmProcessInstanceStatusEnum; import cn.iocoder.yudao.module.bpm.framework.bpm.core.event.BpmProcessInstanceResultEventPublisher; import cn.iocoder.yudao.module.bpm.service.definition.BpmProcessDefinitionService; import cn.iocoder.yudao.module.bpm.service.definition.BpmUserGroupService; import cn.iocoder.yudao.module.bpm.service.message.BpmMessageService; import cn.iocoder.yudao.module.bpm.service.oa.BpmOACashService; import cn.iocoder.yudao.module.bpm.service.oa.BpmOAImprestService; import cn.iocoder.yudao.module.bpm.service.oa.BpmOAProcureServiceImpl; import cn.iocoder.yudao.module.bpm.service.oa.BpmOAReimbursementService; import cn.iocoder.yudao.module.infra.api.config.ConfigApi; import cn.iocoder.yudao.module.infra.api.file.FileApi; import cn.iocoder.yudao.module.system.api.bank.BankApi; import cn.iocoder.yudao.module.system.api.dept.DeptApi; import cn.iocoder.yudao.module.system.api.dept.dto.DeptRespDTO; import cn.iocoder.yudao.module.system.api.permission.PermissionApi; import cn.iocoder.yudao.module.system.api.permission.dto.DeptDataPermissionRespDTO; import cn.iocoder.yudao.module.system.api.user.AdminUserApi; import cn.iocoder.yudao.module.system.api.user.dto.AdminUserRespDTO; import lombok.extern.slf4j.Slf4j; import org.flowable.engine.HistoryService; import org.flowable.engine.RuntimeService; import org.flowable.engine.TaskService; import org.flowable.engine.delegate.event.FlowableCancelledEvent; import org.flowable.engine.history.HistoricProcessInstance; import org.flowable.engine.repository.ProcessDefinition; import org.flowable.engine.runtime.ProcessInstance; import org.flowable.task.api.Task; import org.springframework.context.annotation.Lazy; import org.springframework.stereotype.Service; import org.springframework.transaction.annotation.Transactional; import org.springframework.validation.annotation.Validated; import javax.annotation.Resource; import javax.validation.Valid; import java.lang.reflect.Field; import java.text.DecimalFormat; import java.time.LocalDateTime; import java.time.temporal.ChronoUnit; import java.util.*; import java.util.regex.Matcher; import java.util.regex.Pattern; import java.util.stream.Collectors; import static cn.iocoder.yudao.framework.common.exception.util.ServiceExceptionUtil.exception; import static cn.iocoder.yudao.framework.common.util.collection.CollectionUtils.convertList; import static cn.iocoder.yudao.framework.common.util.collection.CollectionUtils.convertSet; import static cn.iocoder.yudao.framework.web.core.util.WebFrameworkUtils.getLoginUserId; import static cn.iocoder.yudao.module.bpm.enums.ErrorCodeConstants.*; /** * 流程实例 Service 实现类 *

* ProcessDefinition & ProcessInstance & Execution & Task 的关系: * 1. *

* HistoricProcessInstance & ProcessInstance 的关系: * 1. *

* 简单来说,前者 = 历史 + 运行中的流程实例,后者仅是运行中的流程实例 */ @Service @Validated @Slf4j public class BpmProcessInstanceServiceImpl implements BpmProcessInstanceService { @Resource private TaskService engineTaskService; @Resource private BpmTaskAssignRuleMapper taskRuleMapper; @Resource private BpmUserGroupService userGroupService; @Resource private RuntimeService runtimeService; @Resource private BpmProcessInstanceExtMapper processInstanceExtMapper; @Resource @Lazy // 解决循环依赖 private BpmTaskService taskService; @Resource private BpmProcessDefinitionService processDefinitionService; @Resource private HistoryService historyService; @Resource private AdminUserApi adminUserApi; @Resource private DeptApi deptApi; @Resource private BpmProcessInstanceResultEventPublisher processInstanceResultEventPublisher; @Resource @Lazy // 解决循环依赖 private BpmMessageService messageService; @Resource private ConfigApi configApi; @Override public ProcessInstance getProcessInstance(String id) { return runtimeService.createProcessInstanceQuery().processInstanceId(id).singleResult(); } @Override public List getProcessInstances(Set ids) { return runtimeService.createProcessInstanceQuery().processInstanceIds(ids).list(); } @Override public PageResult getMyProcessInstancePage(Long userId, BpmProcessInstanceMyPageReqVO pageReqVO) { // 通过 BpmProcessInstanceExtDO 表,先查询到对应的分页 PageResult pageResult = processInstanceExtMapper.selectPage(userId, pageReqVO); if (CollUtil.isEmpty(pageResult.getList())) { return new PageResult<>(pageResult.getTotal()); } // 获得流程 Task Map List processInstanceIds = convertList(pageResult.getList(), BpmProcessInstanceExtDO::getProcessInstanceId); Map> taskMap = taskService.getTaskMapByProcessInstanceIds(processInstanceIds); List ids = taskMap.values().stream() .flatMap(Collection::stream) .map(Task::getAssignee) .collect(Collectors.toList()); Iterator iterator = ids.iterator(); while (iterator.hasNext()) { String id = iterator.next(); if (id == null) { iterator.remove(); } } List longIds = ids.stream() .map(Long::valueOf) .collect(Collectors.toList()); // 获得 User Map Map userMap = adminUserApi.getUserMap(longIds); // 转换返回 return BpmProcessInstanceConvert.INSTANCE.convertPage(pageResult, taskMap, userMap); } @Override @Transactional(rollbackFor = Exception.class) public String createProcessInstance(Long userId, @Valid BpmProcessInstanceCreateReqVO createReqVO) { // 获得流程定义 ProcessDefinition definition = processDefinitionService.getProcessDefinition(createReqVO.getProcessDefinitionId()); // 发起流程 return createProcessInstance0(userId, definition, createReqVO.getVariables(), null); } @Override public String createProcessInstance(Long userId, @Valid BpmProcessInstanceCreateReqDTO createReqDTO) { // 获得流程定义 ProcessDefinition definition = processDefinitionService.getActiveProcessDefinition(createReqDTO.getProcessDefinitionKey()); // 发起流程 return createProcessInstance0(userId, definition, createReqDTO.getVariables(), createReqDTO.getBusinessKey()); } @Override public BpmProcessInstanceRespVO getProcessInstanceVO(String id) { // 获得流程实例 HistoricProcessInstance processInstance = getHistoricProcessInstance(id); if (processInstance == null) { return null; } BpmProcessInstanceExtDO processInstanceExt = processInstanceExtMapper.selectByProcessInstanceId(id); Assert.notNull(processInstanceExt, "流程实例拓展({}) 不存在", id); // 获得流程定义 ProcessDefinition processDefinition = processDefinitionService .getProcessDefinition(processInstance.getProcessDefinitionId()); Assert.notNull(processDefinition, "流程定义({}) 不存在", processInstance.getProcessDefinitionId()); BpmProcessDefinitionExtDO processDefinitionExt = processDefinitionService.getProcessDefinitionExt( processInstance.getProcessDefinitionId()); Assert.notNull(processDefinitionExt, "流程定义拓展({}) 不存在", id); String bpmnXml = processDefinitionService.getProcessDefinitionBpmnXML(processInstance.getProcessDefinitionId()); // 获得 User AdminUserRespDTO startUser = adminUserApi.getUser(NumberUtils.parseLong(processInstance.getStartUserId())).getCheckedData(); DeptRespDTO dept = null; if (startUser != null) { dept = deptApi.getDept(startUser.getDeptId()).getCheckedData(); } // 拼接结果 return BpmProcessInstanceConvert.INSTANCE.convert2(processInstance, processInstanceExt, processDefinition, processDefinitionExt, bpmnXml, startUser, dept); } @Override public void cancelProcessInstance(Long userId, @Valid BpmProcessInstanceCancelReqVO cancelReqVO) { // 校验流程实例存在 ProcessInstance instance = getProcessInstance(cancelReqVO.getId()); if (instance == null) { throw exception(PROCESS_INSTANCE_CANCEL_FAIL_NOT_EXISTS); } // 只能取消自己的 if (!Objects.equals(instance.getStartUserId(), String.valueOf(userId))) { throw exception(PROCESS_INSTANCE_CANCEL_FAIL_NOT_SELF); } // 通过删除流程实例,实现流程实例的取消, // 删除流程实例,正则执行任务 ACT_RU_TASK. 任务会被删除。通过历史表查询 deleteProcessInstance(cancelReqVO.getId(), BpmProcessInstanceDeleteReasonEnum.CANCEL_TASK.format(cancelReqVO.getReason())); } /** * 获得历史的流程实例 * * @param id 流程实例的编号 * @return 历史的流程实例 */ @Override public HistoricProcessInstance getHistoricProcessInstance(String id) { return historyService.createHistoricProcessInstanceQuery().processInstanceId(id).singleResult(); } @Override public List getHistoricProcessInstances(Set ids) { return historyService.createHistoricProcessInstanceQuery().processInstanceIds(ids).list(); } @Override public void createProcessInstanceExt(ProcessInstance instance) { // 获得流程定义 ProcessDefinition definition = processDefinitionService.getProcessDefinition2(instance.getProcessDefinitionId()); // 插入 BpmProcessInstanceExtDO 对象 BpmProcessInstanceExtDO instanceExtDO = new BpmProcessInstanceExtDO() .setProcessInstanceId(instance.getId()) .setProcessDefinitionId(definition.getId()) .setName(instance.getProcessDefinitionName()) .setStartUserId(Long.valueOf(instance.getStartUserId())) .setCategory(definition.getCategory()) .setStatus(BpmProcessInstanceStatusEnum.RUNNING.getStatus()) .setResult(BpmProcessInstanceResultEnum.PROCESS.getResult()); processInstanceExtMapper.insert(instanceExtDO); } @Override public void updateProcessInstanceExtCancel(FlowableCancelledEvent event) { // 判断是否为 Reject 不通过。如果是,则不进行更新. // 因为,updateProcessInstanceExtReject 方法,已经进行更新了 if (BpmProcessInstanceDeleteReasonEnum.isRejectReason((String) event.getCause())) { return; } // 需要主动查询,因为 instance 只有 id 属性 // 另外,此时如果去查询 ProcessInstance 的话,字段是不全的,所以去查询了 HistoricProcessInstance HistoricProcessInstance processInstance = getHistoricProcessInstance(event.getProcessInstanceId()); // 更新拓展表 BpmProcessInstanceExtDO instanceExtDO = new BpmProcessInstanceExtDO() .setProcessInstanceId(event.getProcessInstanceId()) .setEndTime(LocalDateTime.now()) // 由于 ProcessInstance 里没有办法拿到 endTime,所以这里设置 .setStatus(BpmProcessInstanceStatusEnum.FINISH.getStatus()) .setResult(BpmProcessInstanceResultEnum.CANCEL.getResult()); processInstanceExtMapper.updateByProcessInstanceId(instanceExtDO); // 发送流程实例的状态事件 processInstanceResultEventPublisher.sendProcessInstanceResultEvent( BpmProcessInstanceConvert.INSTANCE.convert(this, processInstance, instanceExtDO.getResult())); } @Override public void updateProcessInstanceExtComplete(ProcessInstance instance) { // 需要主动查询,因为 instance 只有 id 属性 // 另外,此时如果去查询 ProcessInstance 的话,字段是不全的,所以去查询了 HistoricProcessInstance HistoricProcessInstance processInstance = getHistoricProcessInstance(instance.getId()); // 更新拓展表 BpmProcessInstanceExtDO instanceExtDO = new BpmProcessInstanceExtDO() .setProcessInstanceId(instance.getProcessInstanceId()) .setEndTime(LocalDateTime.now()) // 由于 ProcessInstance 里没有办法拿到 endTime,所以这里设置 .setStatus(BpmProcessInstanceStatusEnum.FINISH.getStatus()) .setResult(BpmProcessInstanceResultEnum.APPROVE.getResult()); // 如果正常完全,说明审批通过 processInstanceExtMapper.updateByProcessInstanceId(instanceExtDO); Map processVariables = runtimeService.getVariables(instance.getProcessInstanceId()); String reason = (String) processVariables.get("approve_reason"); // 发送流程被通过的消息 messageService.sendMessageWhenProcessInstanceApprove(BpmProcessInstanceConvert.INSTANCE.convert2ApprovedReq(instance, reason)); // 发送流程实例的状态事件 processInstanceResultEventPublisher.sendProcessInstanceResultEvent( BpmProcessInstanceConvert.INSTANCE.convert(this, processInstance, instanceExtDO.getResult())); } @Override @Transactional(rollbackFor = Exception.class) public void updateProcessInstanceExtReject(String id, String reason) { // 需要主动查询,因为 instance 只有 id 属性 ProcessInstance processInstance = getProcessInstance(id); // 删除流程实例,以实现驳回任务时,取消整个审批流程 deleteProcessInstance(id, StrUtil.format(BpmProcessInstanceDeleteReasonEnum.REJECT_TASK.format(reason))); // 更新 status + result // 注意,不能和上面的逻辑更换位置。因为 deleteProcessInstance 会触发流程的取消,进而调用 updateProcessInstanceExtCancel 方法, // 设置 result 为 BpmProcessInstanceStatusEnum.CANCEL,显然和 result 不一定是一致的 BpmProcessInstanceExtDO instanceExtDO = new BpmProcessInstanceExtDO() .setProcessInstanceId(id) .setEndTime(LocalDateTime.now()) // 由于 ProcessInstance 里没有办法拿到 endTime,所以这里设置 .setStatus(BpmProcessInstanceStatusEnum.FINISH.getStatus()) .setResult(BpmProcessInstanceResultEnum.REJECT.getResult()); processInstanceExtMapper.updateByProcessInstanceId(instanceExtDO); // 发送流程被不通过的消息 messageService.sendMessageWhenProcessInstanceReject(BpmProcessInstanceConvert.INSTANCE.convert2RejectReq(processInstance, reason)); // 发送流程实例的状态事件 processInstanceResultEventPublisher.sendProcessInstanceResultEvent( BpmProcessInstanceConvert.INSTANCE.convert(this, processInstance, instanceExtDO.getResult())); } private void deleteProcessInstance(String id, String reason) { runtimeService.deleteProcessInstance(id, reason); } private String createProcessInstance0(Long userId, ProcessDefinition definition, Map variables, String businessKey) { // 校验流程定义 if (definition == null) { throw exception(PROCESS_DEFINITION_NOT_EXISTS); } if (definition.isSuspended()) { throw exception(PROCESS_DEFINITION_IS_SUSPENDED); } // 设置当前用户 FlowableUtils.setAuthenticatedUserId(userId); // 创建流程实例 ProcessInstance instance = runtimeService.createProcessInstanceBuilder() .processDefinitionId(definition.getId()) .businessKey(businessKey) .name(definition.getName().trim()) .variables(variables) .start(); // 设置流程名字 runtimeService.setProcessInstanceName(instance.getId(), definition.getName()); // 补全流程实例的拓展表 processInstanceExtMapper.updateByProcessInstanceId(new BpmProcessInstanceExtDO().setProcessInstanceId(instance.getId()) .setFormVariables(variables)); /** 创建流程后,添加抄送人 End add by yj 2024.1.4 */ processCCToUsers(definition, instance); /** 通过自己发起的流程 */ // approveSelfTask(instance.getId()) ; return instance.getId(); } private void approveSelfTask(String processInstanceId) { List tasks = engineTaskService.createTaskQuery().processInstanceId(processInstanceId).list(); if (tasks != null && tasks.size() > 0) { Task task = tasks.get(0); String assigneeId = task.getAssignee(); //如果当前登陆用户是审批人,那么自动审批通过 if (assigneeId.equals(SecurityFrameworkUtils.getLoginUserId().toString())) { BpmTaskApproveReqVO reqVO = new BpmTaskApproveReqVO(); reqVO.setId(task.getId()); reqVO.setReason(BpmConstants.AUTO_APPRAVAL); taskService.approveTask(getLoginUserId(), reqVO); } } } /** * 获得抄送我的流程实例的分页 * * @param userId 用户编号 * @param pageReqVO 分页请求 * @return 流程实例的分页 */ public PageResult getMyCCProcessInstancePage(Long userId, BpmProcessInstanceMyPageReqVO pageReqVO) { // 通过 BpmProcessInstanceExtDO 表,先查询到对应的分页 PageResult pageResult = processInstanceExtMapper.selectCCPage(userId, pageReqVO); if (CollUtil.isEmpty(pageResult.getList())) { return new PageResult<>(pageResult.getTotal()); } // 获得流程 Task Map List processInstanceIds = convertList(pageResult.getList(), BpmProcessInstanceExtDO::getProcessInstanceId); Map> taskMap = taskService.getTaskMapByProcessInstanceIds(processInstanceIds); // 转换返回 return BpmProcessInstanceConvert.INSTANCE.convertPage(pageResult, taskMap, null); } public List getProcessInstancesGroupByModelName(BpmProcessInstanceStatisticsReqVO pageReqVO) { pageReqVO = getUserids(pageReqVO); return processInstanceExtMapper.getProcessInstancesGroupByModelName(pageReqVO); } public List getProcessInstancesGroupByResultStatus(BpmProcessInstanceStatisticsReqVO pageReqVO) { pageReqVO = getUserids(pageReqVO); return processInstanceExtMapper.getProcessInstancesGroupByResultStatus(pageReqVO); } public PageResult getStatisticsProcessInstancePage(@Valid BpmProcessInstanceMyPageReqVO pageReqVO) { // 通过 BpmProcessInstanceExtDO 表,先查询到对应的分页 PageResult pageResult = processInstanceExtMapper.selectStatisticePage(pageReqVO); if (CollUtil.isEmpty(pageResult.getList())) { return new PageResult<>(pageResult.getTotal()); } // 获得流程 Task Map List processInstanceIds = convertList(pageResult.getList(), BpmProcessInstanceExtDO::getProcessInstanceId); Map> taskMap = taskService.getTaskMapByProcessInstanceIds(processInstanceIds); List ids = taskMap.values().stream() .flatMap(Collection::stream) .map(Task::getAssignee) .collect(Collectors.toList()); Iterator iterator = ids.iterator(); while (iterator.hasNext()) { String id = iterator.next(); if (id == null) { iterator.remove(); } } List longIds = ids.stream() .map(Long::valueOf) .collect(Collectors.toList()); //获得 审批人 User Map Map assigneeUserMap = adminUserApi.getUserMap(longIds); //获得 发起人 User Map List bpieDOs = pageResult.getList(); longIds = new ArrayList<>(); for (BpmProcessInstanceExtDO bpieDO : bpieDOs) { longIds.add(bpieDO.getStartUserId()); } Map startUserMap = adminUserApi.getUserMap(longIds); // 转换返回 return BpmProcessInstanceConvert.INSTANCE.convertStatisticsPage(pageResult, taskMap, assigneeUserMap, startUserMap); } @Resource PermissionApi permissionApi; /** * 根据数据权限,查询关联操作的用户IDS * * @param pageReqVO * @param * @return */ private T getUserids(T pageReqVO) { try { Class clazz = (Class) pageReqVO.getClass(); Field idField = clazz.getDeclaredField("userIds"); idField.setAccessible(true); // 设置可访问性 Long[] userIds = null; Long userId = WebFrameworkUtils.getLoginUserId(); DeptDataPermissionRespDTO deptDataPermission = permissionApi.getDeptDataPermission(userId).getCheckedData(); //查询全部 if (deptDataPermission.getAll()) { //idField.set(pageReqVO, null); // 设置属性值 return pageReqVO; } // 情况二,即不能查看部门,又不能查看自己,则说明 100% 无权限 if (CollUtil.isEmpty(deptDataPermission.getDeptIds()) && Boolean.FALSE.equals(deptDataPermission.getSelf())) { //设置成0,一个不存在的用户Id,就查询不到数据了。 userIds = new Long[]{0L}; idField.set(pageReqVO, userIds); return pageReqVO; } //情况三 至查询自己 if (deptDataPermission.getSelf()) { userIds = new Long[]{userId}; idField.set(pageReqVO, userIds); return pageReqVO; } Set deptIds = deptDataPermission.getDeptIds(); //查询部门关联的用户Id List users = adminUserApi.getUserListByDeptIds(deptIds).getCheckedData(); List tempList = new ArrayList<>(); for (AdminUserRespDTO user : users) { Long id = user.getId(); tempList.add(id); } tempList.add(userId); userIds = tempList.stream().toArray(Long[]::new); //将临时的List集合转换成数组集合 idField.set(pageReqVO, userIds); return pageReqVO; } catch (Exception exception) { exception.printStackTrace(); throw exception(BPM_SYSTEM_BUG); } } /** * /创建流程后,添加抄送人 Begin add by yj 2024.1.4 * 在设计流程的时候,需要添加一个任务块 名字必须叫Activity_cc 分配权限的时候,需要选择用户组。 * * @param definition * @param instance */ private void processCCToUsers(ProcessDefinition definition, ProcessInstance instance) { //获取bpm_task_assign_reule (Bpm 任务规则表)的流程中有没有配置抄送节点 固定抄送名称为:Activity_cc String processDefinitionId = definition.getId(); List rules = taskRuleMapper.selectListByProcessDefinitionId(processDefinitionId, null); for (BpmTaskAssignRuleDO rule : rules) { String key = rule.getTaskDefinitionKey(); //任务名称 Integer type = rule.getType(); if (!key.isEmpty() && key.equals(BpmConstants.CC_NAME) && type == 40) { StringBuffer str = new StringBuffer(); Set options = rule.getOptions(); List list = new ArrayList(options); for (Long groupId : list) { //需要根据这个groupId,查询这个组中的用户id BpmUserGroupDO userGroup = userGroupService.getUserGroup(groupId); Set userIds = userGroup.getMemberUserIds(); List userIdList = new ArrayList(userIds); for (Long user_id : userIdList) { str.append("[").append(user_id).append("]"); } } //流程是采购计划时 if (definition.getKey().equals(BpmOAProcureServiceImpl.PROCESS_KEY)) { AdminUserRespDTO userRespDTO = adminUserApi.getUser(Long.valueOf(instance.getStartUserId())).getCheckedData(); DeptRespDTO deptRespDTO = deptApi.getDept(userRespDTO.getDeptId()).getCheckedData(); //发起人部门为 生产部及以下时 if (deptRespDTO.getFlag().contains("130")) { //添加 供应部抄送 BpmUserGroupDO userGroup = userGroupService.getUserGroup(121L); Set userIds = userGroup.getMemberUserIds(); List userIdList = new ArrayList(userIds); for (Long user_id : userIdList) { str.append("[").append(user_id).append("]"); } } } String ccids = str.toString(); //根据processDefinitionId 将ccids保存到bpm_process_instance_ext中的ccids字段 BpmProcessInstanceExtDO instanceExtDO = new BpmProcessInstanceExtDO().setProcessDefinitionId(processDefinitionId) .setCcids(ccids).setProcessInstanceId(instance.getProcessInstanceId()); processInstanceExtMapper.updateByProcessInstanceId(instanceExtDO); break; } } } @Resource private BpmTaskExtMapper taskExtMapper; @Override public List getUserProcessTpo10(BpmProcessInstanceStatisticsReqVO pageReqVO) { //按审核人分组查询,统计已完成流程数量及平均耗时间 List respVOS = processInstanceExtMapper.getUserProcessTpo10(pageReqVO); if (respVOS == null || respVOS.size() == 0) { return null; } List idList = respVOS.stream() .map(BpmProcessFinishStatisticsRespVO::getUserId) .collect(Collectors.toList()); //根据userId,查询UserMap Map userMap = adminUserApi.getUserMap(idList); Long[] idsArray = new Long[userMap.size()]; // 使用 map 的 keySet() 方法获取键集合 Set keys = userMap.keySet(); // 遍历键集合,将每个键添加到数组中 int index = 0; for (Long key : keys) { idsArray[index++] = key; } pageReqVO.setUserIds(idsArray); //按审核人分组查询,未审批完成的流程数量 List bpmTaskExtDOs = processInstanceExtMapper.selectUnfinishProcessCount(pageReqVO); //按审核人分组查询,未完成的记录数 Map unFinfishCountCountMap = new HashMap<>(); for (BpmProcessFinishStatisticsRespVO item : bpmTaskExtDOs) { unFinfishCountCountMap.put(item.getUserId(), item.getUnFinfishCount()); } respVOS.forEach(respVO -> respVO.setName(userMap.get(respVO.getUserId()).getNickname())); respVOS.forEach(respVO -> respVO.setUnFinfishCount(unFinfishCountCountMap.get(respVO.getUserId()))); //获取排行榜第一记录的耗时,作为基础数据 double num = Double.parseDouble(respVOS.get(0).getUserTime()); // 先将字符串转换为双精度浮点数 int baseNumber = (int) num; // 再通过类型转换操作符将其转换为整数 DecimalFormat df = new DecimalFormat("#.00"); respVOS.forEach(respVO -> { //格式化流程完成率 float finfishCount = (float) respVO.getFinfishCount(); float unFinfishCount = respVO.getUnFinfishCount() == null ? 0 : respVO.getUnFinfishCount(); float all = finfishCount + unFinfishCount; float result = finfishCount / all; float rate = result * 100; respVO.setCompletionRate(df.format(rate) + "%"); double dValue = Double.parseDouble(respVO.getUserTime()); // 将字符串转换为double类型 int roundedValue = (int) Math.round(dValue); // 使用Math.round()进行四舍五入,并转换为int类型 respVO.setUserTime(roundedValue + ""); //格式化进度百度比, 参照最高的数据进行百分比显示 double percentage = ((int) Double.parseDouble(respVO.getUserTime()) / (double) baseNumber) * 100; respVO.setPercentage((int) Math.round(percentage)); //设置未完成 respVO.setUnFinfishCount(Integer.valueOf((int) unFinfishCount)); }); return respVOS; } @Override public BpmProcessInstanceExtDO getProcessInstanceDO(String id) { return processInstanceExtMapper.selectByProcessInstanceId(id); } @Resource private FileApi fileApi; @Resource private BankApi bankApi; @Resource @Lazy // 解决循环依赖 private BpmOAReimbursementService reimbursementService; @Resource @Lazy // 解决循环依赖 private BpmOACashService cashService; @Resource @Lazy // 解决循环依赖 private BpmOAImprestService imprestService; @Override public BpmProcessInstancePrintDataRespVO getOAReportPrintData(BpmProcessInstancePrintDataReqVO reqVO) { BpmProcessInstancePrintDataRespVO bpmProcessInstancePrintDataRespVO = new BpmProcessInstancePrintDataRespVO(); String key = reqVO.getKey(); //流程标识 String processInstanceId = reqVO.getId(); //流程实例ID bpmProcessInstancePrintDataRespVO.setId(processInstanceId); bpmProcessInstancePrintDataRespVO.setKey(key); BpmProcessInstanceRespVO bpmProcessInstance = getProcessInstanceVO(processInstanceId); Long businessKey = Long.valueOf(bpmProcessInstance.getBusinessKey()); //流程业务表-主键ID // 判断是否可见外勤人员信息 List userIds = new ArrayList<>(); String type = configApi.getConfigKey("sys.user.type").getCheckedData(); if ("1".equals(type)) { //不可见时 // 获取所有外勤人员 用户编号 userIds = adminUserApi.getUserIdsByUserNature(4).getCheckedData(); } // 获得流程审批信息 List taskRespVOList = taskService.getTaskListByProcessInstanceId(processInstanceId); // 移除外勤人员信息 List finalUserIds = userIds; taskRespVOList.removeIf(data -> finalUserIds.contains(data.getAssigneeUser().getId())); //给User添加签名地址 taskRespVOList.forEach(taskRespVO -> taskRespVO.getAssigneeUser().setSignURL( fileApi.getUserSignImgPath( taskRespVO.getAssigneeUser().getId() ).getData() ) ); //获取流程抄送用户编号 BpmProcessInstanceExtDO processInstanceExtDO = getProcessInstanceDO(processInstanceId); //获取流程抄送用户信息 List ccUserIds = new ArrayList<>(); if (processInstanceExtDO.getCcids() != null && !processInstanceExtDO.getCcids().isEmpty()) { Pattern pattern = Pattern.compile("\\[(\\d+)]"); Matcher matcher = pattern.matcher(processInstanceExtDO.getCcids()); while (matcher.find()) { ccUserIds.add(Long.parseLong(matcher.group(1))); } // 移除 外勤人员信息 ccUserIds.removeAll(userIds); } List userRespDTOS = adminUserApi.getUserList(ccUserIds).getCheckedData(); //获取抄送用户部门信息 Map deptMapDTO = deptApi.getDeptMap(convertSet(userRespDTOS, AdminUserRespDTO::getDeptId)); if ("oa_reimbursement".equals(key)) { //报销流程 BpmOAReimbursementDO reimbursement = reimbursementService.getReimbursement(businessKey); BpmOAReimbursementRespVO bpmOAReimbursementRespVO = reimbursementService.convert(reimbursement); //报销业务数据 // 移除自己得审批节点 taskRespVOList.removeIf(data -> data.getAssigneeUser().getId().equals(reimbursement.getUserId())); //备用金信息查询 BpmOAImprestDO bpmOAImprestDO = imprestService.getImprestByReimbursementId(reimbursement.getId()); if (bpmOAImprestDO != null) { //设置备用金 金额 bpmOAReimbursementRespVO.setAmount(bpmOAImprestDO.getAmount()); } // 设置抄送人信息 List ccUsers = userRespDTOS.stream().map(user -> { BpmOAReimbursementPrintDataRespVO.CCUser cc = new BpmOAReimbursementPrintDataRespVO.CCUser(); cc.setCcUserId(user.getId()); cc.setCcUserName(user.getNickname()); cc.setCcDeptName(deptMapDTO.get(user.getDeptId()).getName()); return cc; }).collect(Collectors.toList()); BpmOAReimbursementPrintDataRespVO reimbursementPrintData = new BpmOAReimbursementPrintDataRespVO(); reimbursementPrintData.setBpmOAReimbursementRespVO(bpmOAReimbursementRespVO); reimbursementPrintData.setProcessTasks(taskRespVOList); reimbursementPrintData.setCcUsers(ccUsers); bpmProcessInstancePrintDataRespVO.setBpmOAReimbursementPrintDataRespVO(reimbursementPrintData); } if ("oa_cash".equals(key)) { BpmOACashDO cashDO = cashService.getCash(businessKey); BpmOACashRespVO cashRespVO = cashService.convertCash(cashDO); // 移除自己得审批节点 taskRespVOList.removeIf(data -> data.getAssigneeUser().getId().equals(cashDO.getUserId())); // 设置抄送人信息 List ccUsers = userRespDTOS.stream().map(user -> { BpmOACashPrintDataRespVO.CCUser cc = new BpmOACashPrintDataRespVO.CCUser(); cc.setCcUserId(user.getId()); cc.setCcUserName(user.getNickname()); cc.setCcDeptName(deptMapDTO.get(user.getDeptId()).getName()); return cc; }).collect(Collectors.toList()); BpmOACashPrintDataRespVO cashPrintData = new BpmOACashPrintDataRespVO(); cashPrintData.setBpmOACashRespVO(cashRespVO); cashPrintData.setProcessTasks(taskRespVOList); cashPrintData.setCcUsers(ccUsers); bpmProcessInstancePrintDataRespVO.setBpmOACashPrintDataRespVO(cashPrintData); } return bpmProcessInstancePrintDataRespVO; } @Override public Map> getProcessInstanceResultStatusStatisticsGroupTime(BpmProcessInstanceStatisticsReqVO pageReqVO) { pageReqVO = getUserids(pageReqVO); pageReqVO.setRecentDays(pageReqVO.getRecentDays() == null ? 7 : pageReqVO.getRecentDays()); List list = processInstanceExtMapper.getProcessInstanceResultStatusStatisticsGroupTime(pageReqVO); // -- 获取到日期列表 LocalDateTime now = LocalDateTimeUtil.now(); LocalDateTime offset = LocalDateTimeUtil.offset(LocalDateTimeUtil.now(), -1L * pageReqVO.getRecentDays(), ChronoUnit.DAYS); List dateList = DateUtils.betweenDayList(offset, now); //根据时间分组 Map> map = list.stream().collect(Collectors.groupingBy(BpmProcessInstanceResultStatusStatisticsGroupTimeVO::getTime)); List keys = new ArrayList<>(CollectionUtil.subtract(dateList, new ArrayList<>(map.keySet()))); if (CollectionUtil.isNotEmpty(keys)) { for (String key : keys) { map.put(key, new ArrayList<>()); } } List statusList = Arrays.asList(1, 2, 3, 4); for (Map.Entry> entry : map.entrySet()) { List items = entry.getValue(); List results = items.stream().map(BpmProcessInstanceResultStatusStatisticsGroupTimeVO::getResult).collect(Collectors.toList()); List saveList = new ArrayList<>(CollectionUtil.subtract(statusList, results)); // -- 如果没有的话组装上缺少的 if (CollectionUtil.isNotEmpty(saveList)) { for (Integer status : saveList) { items.add(new BpmProcessInstanceResultStatusStatisticsGroupTimeVO() .setTime(entry.getKey()) .setTotalCount(0) .setResult(status) .setName("")); } } } return map; } } \ No newline at end of file diff --git a/yudao-module-bpm/yudao-module-bpm-biz/src/main/resources/mapper/task/BpmProcessInstanceExtMapper.xml b/yudao-module-bpm/yudao-module-bpm-biz/src/main/resources/mapper/task/BpmProcessInstanceExtMapper.xml index 47175070..95b4ddf7 100644 --- a/yudao-module-bpm/yudao-module-bpm-biz/src/main/resources/mapper/task/BpmProcessInstanceExtMapper.xml +++ b/yudao-module-bpm/yudao-module-bpm-biz/src/main/resources/mapper/task/BpmProcessInstanceExtMapper.xml @@ -78,6 +78,33 @@ AND process_definition_id like 'oa_%' GROUP BY assignee_user_id + - \ No newline at end of file + diff --git a/yudao-module-system/yudao-module-system-api/src/main/java/cn/iocoder/yudao/module/system/api/assets/AssetsTypeApi.java b/yudao-module-system/yudao-module-system-api/src/main/java/cn/iocoder/yudao/module/system/api/assets/AssetsTypeApi.java new file mode 100644 index 00000000..bad71257 --- /dev/null +++ b/yudao-module-system/yudao-module-system-api/src/main/java/cn/iocoder/yudao/module/system/api/assets/AssetsTypeApi.java @@ -0,0 +1,26 @@ + +package cn.iocoder.yudao.module.system.api.assets; + +import cn.iocoder.yudao.framework.common.pojo.CommonResult; +import cn.iocoder.yudao.module.system.enums.ApiConstants; +import io.swagger.v3.oas.annotations.Operation; +import io.swagger.v3.oas.annotations.Parameter; +import io.swagger.v3.oas.annotations.tags.Tag; +import org.springframework.cloud.openfeign.FeignClient; +import org.springframework.web.bind.annotation.GetMapping; +import org.springframework.web.bind.annotation.RequestParam; + +import java.util.List; + +@FeignClient(name = ApiConstants.NAME) // TODO 芋艿:fallbackFactory = +@Tag(name = "RPC 服务 - 资产类型") +public interface AssetsTypeApi { + + String PREFIX = ApiConstants.PREFIX + "/assets_type"; + + @GetMapping(PREFIX + "/getAssetsTypeIdsByCode") + @Operation(summary = "通过资产类型code获取资产类型ids") + @Parameter(name = "code", description = "资产类型code", example = "1", required = true) + CommonResult> getAssetsTypeIdsByCode(@RequestParam("code") String code); + +} diff --git a/yudao-module-system/yudao-module-system-biz/src/main/java/cn/iocoder/yudao/module/system/api/assets/AssetsTypeApiImpl.java b/yudao-module-system/yudao-module-system-biz/src/main/java/cn/iocoder/yudao/module/system/api/assets/AssetsTypeApiImpl.java new file mode 100644 index 00000000..23f33764 --- /dev/null +++ b/yudao-module-system/yudao-module-system-biz/src/main/java/cn/iocoder/yudao/module/system/api/assets/AssetsTypeApiImpl.java @@ -0,0 +1,37 @@ +package cn.iocoder.yudao.module.system.api.assets; + +import cn.iocoder.yudao.framework.common.pojo.CommonResult; +import cn.iocoder.yudao.framework.common.util.object.BeanUtils; +import cn.iocoder.yudao.framework.datapermission.core.annotation.DataPermission; +import cn.iocoder.yudao.module.system.api.user.AdminUserApi; +import cn.iocoder.yudao.module.system.api.user.dto.AdminUserRespDTO; +import cn.iocoder.yudao.module.system.api.user.dto.UserSaveRespDTO; +import cn.iocoder.yudao.module.system.controller.admin.user.vo.user.UserSaveReqVO; +import cn.iocoder.yudao.module.system.dal.dataobject.user.AdminUserDO; +import cn.iocoder.yudao.module.system.service.assets.AssetsTypeService; +import cn.iocoder.yudao.module.system.service.user.AdminUserService; +import org.springframework.validation.annotation.Validated; +import org.springframework.web.bind.annotation.RestController; + +import javax.annotation.Resource; +import java.util.Collection; +import java.util.List; +import java.util.Set; + +import static cn.iocoder.yudao.framework.common.pojo.CommonResult.success; +import static cn.iocoder.yudao.framework.common.util.collection.CollectionUtils.convertList; + +@RestController // 提供 RESTful API 接口,给 Feign 调用 +@Validated +@DataPermission(enable = false) +public class AssetsTypeApiImpl implements AssetsTypeApi { + + @Resource + private AssetsTypeService assetsTypeService; + + @Override + public CommonResult> getAssetsTypeIdsByCode(String code) { + List ids = assetsTypeService.getAssetsTypeIdsByCode(code); + return success(ids); + } +} diff --git a/yudao-module-system/yudao-module-system-biz/src/main/java/cn/iocoder/yudao/module/system/controller/admin/assets/vo/AssetsTypePageReqVO.java b/yudao-module-system/yudao-module-system-biz/src/main/java/cn/iocoder/yudao/module/system/controller/admin/assets/vo/AssetsTypePageReqVO.java index d4e6331d..ef178cbd 100644 --- a/yudao-module-system/yudao-module-system-biz/src/main/java/cn/iocoder/yudao/module/system/controller/admin/assets/vo/AssetsTypePageReqVO.java +++ b/yudao-module-system/yudao-module-system-biz/src/main/java/cn/iocoder/yudao/module/system/controller/admin/assets/vo/AssetsTypePageReqVO.java @@ -24,8 +24,11 @@ public class AssetsTypePageReqVO extends PageParam { @Schema(description = "上级资产类型id", example = "27306") private Long pid; + @Schema(description = "类型编码(最后一级才有)", example = "27306") + private String code; + @Schema(description = "创建时间") @DateTimeFormat(pattern = FORMAT_YEAR_MONTH_DAY_HOUR_MINUTE_SECOND) private LocalDateTime[] createTime; -} \ No newline at end of file +} diff --git a/yudao-module-system/yudao-module-system-biz/src/main/java/cn/iocoder/yudao/module/system/controller/admin/assets/vo/AssetsTypeRespVO.java b/yudao-module-system/yudao-module-system-biz/src/main/java/cn/iocoder/yudao/module/system/controller/admin/assets/vo/AssetsTypeRespVO.java index 230d95b4..2a2fdf9e 100644 --- a/yudao-module-system/yudao-module-system-biz/src/main/java/cn/iocoder/yudao/module/system/controller/admin/assets/vo/AssetsTypeRespVO.java +++ b/yudao-module-system/yudao-module-system-biz/src/main/java/cn/iocoder/yudao/module/system/controller/admin/assets/vo/AssetsTypeRespVO.java @@ -21,6 +21,10 @@ public class AssetsTypeRespVO { @ExcelProperty("资产类型名称") private String name; + @Schema(description = "类型编码(最后一级才有)", example = "李四") + @ExcelProperty("类型编码(最后一级才有)") + private String code; + @Schema(description = "类型 0按量 1按单件", example = "1") @ExcelProperty("类型 0按量 1按单件") private Integer type; @@ -33,4 +37,4 @@ public class AssetsTypeRespVO { @ExcelProperty("创建时间") private LocalDateTime createTime; -} \ No newline at end of file +} diff --git a/yudao-module-system/yudao-module-system-biz/src/main/java/cn/iocoder/yudao/module/system/controller/admin/assets/vo/AssetsTypeSaveReqVO.java b/yudao-module-system/yudao-module-system-biz/src/main/java/cn/iocoder/yudao/module/system/controller/admin/assets/vo/AssetsTypeSaveReqVO.java index 97af8b18..a7279d87 100644 --- a/yudao-module-system/yudao-module-system-biz/src/main/java/cn/iocoder/yudao/module/system/controller/admin/assets/vo/AssetsTypeSaveReqVO.java +++ b/yudao-module-system/yudao-module-system-biz/src/main/java/cn/iocoder/yudao/module/system/controller/admin/assets/vo/AssetsTypeSaveReqVO.java @@ -22,4 +22,10 @@ public class AssetsTypeSaveReqVO { @Schema(description = "上级资产类型id", example = "27306") private Long pid; -} \ No newline at end of file + /** + * 类型编码(最后一级才有) + */ + @Schema(description = "类型编码(最后一级才有)", example = "27306") + private String code; + +} diff --git a/yudao-module-system/yudao-module-system-biz/src/main/java/cn/iocoder/yudao/module/system/controller/admin/user/UserController.java b/yudao-module-system/yudao-module-system-biz/src/main/java/cn/iocoder/yudao/module/system/controller/admin/user/UserController.java index d3626e12..e1a03300 100644 --- a/yudao-module-system/yudao-module-system-biz/src/main/java/cn/iocoder/yudao/module/system/controller/admin/user/UserController.java +++ b/yudao-module-system/yudao-module-system-biz/src/main/java/cn/iocoder/yudao/module/system/controller/admin/user/UserController.java @@ -101,6 +101,14 @@ public class UserController { userService.updateFieldwork(reqVO.getId(), reqVO.getFieldworkFlag()); return success(true); } + @GetMapping("/gpsPosition") + @Operation(summary = "GPS定位") + public CommonResult gpsPosition() { + userService.gpsPosition(); + return success(true); + } + + @GetMapping("/page") @Operation(summary = "获得用户分页列表") diff --git a/yudao-module-system/yudao-module-system-biz/src/main/java/cn/iocoder/yudao/module/system/dal/dataobject/assets/AssetsTypeDO.java b/yudao-module-system/yudao-module-system-biz/src/main/java/cn/iocoder/yudao/module/system/dal/dataobject/assets/AssetsTypeDO.java index 48515770..6deb4daf 100644 --- a/yudao-module-system/yudao-module-system-biz/src/main/java/cn/iocoder/yudao/module/system/dal/dataobject/assets/AssetsTypeDO.java +++ b/yudao-module-system/yudao-module-system-biz/src/main/java/cn/iocoder/yudao/module/system/dal/dataobject/assets/AssetsTypeDO.java @@ -38,6 +38,10 @@ public class AssetsTypeDO extends BaseDO { * 类型 0按量 1按单件 */ private Integer type; + /** + * 类型编码(最后一级才有) + */ + private String code; /** * 上级资产类型id */ @@ -45,4 +49,4 @@ public class AssetsTypeDO extends BaseDO { @TableField(exist = false) private Long assetsId; -} \ No newline at end of file +} diff --git a/yudao-module-system/yudao-module-system-biz/src/main/java/cn/iocoder/yudao/module/system/service/assets/AssetsTypeService.java b/yudao-module-system/yudao-module-system-biz/src/main/java/cn/iocoder/yudao/module/system/service/assets/AssetsTypeService.java index 8e0ca431..f3393eeb 100644 --- a/yudao-module-system/yudao-module-system-biz/src/main/java/cn/iocoder/yudao/module/system/service/assets/AssetsTypeService.java +++ b/yudao-module-system/yudao-module-system-biz/src/main/java/cn/iocoder/yudao/module/system/service/assets/AssetsTypeService.java @@ -74,4 +74,11 @@ public interface AssetsTypeService { * @return 资产类型 */ AssetsTypeDO getByName(String name); -} \ No newline at end of file + + /** + * 通过资产类型code获取资产类型ids + * @param code + * @return + */ + List getAssetsTypeIdsByCode(String code); +} diff --git a/yudao-module-system/yudao-module-system-biz/src/main/java/cn/iocoder/yudao/module/system/service/assets/AssetsTypeServiceImpl.java b/yudao-module-system/yudao-module-system-biz/src/main/java/cn/iocoder/yudao/module/system/service/assets/AssetsTypeServiceImpl.java index 7ac8d264..293ae090 100644 --- a/yudao-module-system/yudao-module-system-biz/src/main/java/cn/iocoder/yudao/module/system/service/assets/AssetsTypeServiceImpl.java +++ b/yudao-module-system/yudao-module-system-biz/src/main/java/cn/iocoder/yudao/module/system/service/assets/AssetsTypeServiceImpl.java @@ -11,7 +11,9 @@ import org.springframework.stereotype.Service; import org.springframework.validation.annotation.Validated; import javax.annotation.Resource; +import java.util.Collections; import java.util.List; +import java.util.stream.Collectors; /** * 资产类型 Service 实现类 @@ -72,4 +74,14 @@ public class AssetsTypeServiceImpl implements AssetsTypeService { return assetsTypeMapper.selectOne(AssetsTypeDO::getName, name); } -} \ No newline at end of file + + @Override + public List getAssetsTypeIdsByCode(String code) { + List assetsTypeDOS = assetsTypeMapper.selectList(new LambdaQueryWrapper() + .eq(AssetsTypeDO::getCode, code)); + if (assetsTypeDOS.isEmpty()) { + return Collections.emptyList(); + } + return assetsTypeDOS.stream().map(AssetsTypeDO::getId).collect(Collectors.toList()); + } +} diff --git a/yudao-module-system/yudao-module-system-biz/src/main/java/cn/iocoder/yudao/module/system/service/user/AdminUserService.java b/yudao-module-system/yudao-module-system-biz/src/main/java/cn/iocoder/yudao/module/system/service/user/AdminUserService.java index 87132535..3874f861 100644 --- a/yudao-module-system/yudao-module-system-biz/src/main/java/cn/iocoder/yudao/module/system/service/user/AdminUserService.java +++ b/yudao-module-system/yudao-module-system-biz/src/main/java/cn/iocoder/yudao/module/system/service/user/AdminUserService.java @@ -141,6 +141,8 @@ public interface AdminUserService { */ PageResult getUserPage(UserPageReqVO reqVO); + void gpsPosition(); + /** * 获得工厂用户分页列表 * diff --git a/yudao-module-system/yudao-module-system-biz/src/main/java/cn/iocoder/yudao/module/system/service/user/AdminUserServiceImpl.java b/yudao-module-system/yudao-module-system-biz/src/main/java/cn/iocoder/yudao/module/system/service/user/AdminUserServiceImpl.java index 1952ebd9..931ee4fd 100644 --- a/yudao-module-system/yudao-module-system-biz/src/main/java/cn/iocoder/yudao/module/system/service/user/AdminUserServiceImpl.java +++ b/yudao-module-system/yudao-module-system-biz/src/main/java/cn/iocoder/yudao/module/system/service/user/AdminUserServiceImpl.java @@ -4,6 +4,10 @@ import cn.hutool.core.collection.CollUtil; import cn.hutool.core.collection.CollectionUtil; import cn.hutool.core.io.IoUtil; import cn.hutool.core.util.StrUtil; +import cn.hutool.http.HttpRequest; +import cn.hutool.http.HttpResponse; +import cn.hutool.json.JSONObject; +import cn.hutool.json.JSONUtil; import cn.iocoder.yudao.framework.common.enums.CommonStatusEnum; import cn.iocoder.yudao.framework.common.exception.ServiceException; import cn.iocoder.yudao.framework.common.pojo.PageResult; @@ -31,7 +35,6 @@ import cn.iocoder.yudao.module.system.service.permission.PermissionService; import cn.iocoder.yudao.module.system.service.tenant.TenantService; import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; import com.baomidou.mybatisplus.core.metadata.IPage; -import com.baomidou.mybatisplus.extension.service.IService; import com.google.common.annotations.VisibleForTesting; import com.xingyuv.http.util.StringUtil; import lombok.extern.slf4j.Slf4j; @@ -178,7 +181,7 @@ public class AdminUserServiceImpl implements AdminUserService { IdCardDO idCardDO = StrUtils.IdCardAnalysis(reqVO.getIdcard()); //设置 性别、年龄、出生日期 - AdminUserDO adminUserDO = BeanUtils.toBean(reqVO, AdminUserDO.class).setId(id) ; + AdminUserDO adminUserDO = BeanUtils.toBean(reqVO, AdminUserDO.class).setId(id); adminUserDO.setSex(idCardDO.getSex()); adminUserDO.setAge(idCardDO.getAge()); adminUserDO.setBirthdayDay(idCardDO.getDate()); @@ -286,6 +289,36 @@ public class AdminUserServiceImpl implements AdminUserService { return userMapper.selectPage(reqVO, getDeptCondition(reqVO.getDeptId())); } + @Override + public void gpsPosition() { + // TODO: 2024/9/2 + Set deptCondition = getDeptCondition(130L); + List adminUserDOS = userMapper.selectList(new LambdaQueryWrapper() + .in(AdminUserDO::getDeptId, deptCondition)); + for (AdminUserDO adminUserDO : adminUserDOS) { + JSONObject object = new JSONObject().set("name", adminUserDO.getNickname()).set("uniqueId", adminUserDO.getMobile()); + + // 请求的 URL + String url = "http://127.0.0.1:8082/api/devices"; + // 发送 POST 请求 + HttpResponse response = HttpRequest.post(url) + .header("Accept", "*/*") + .header("Accept-Language", "zh-CN,zh;q=0.9") + .header("Connection", "keep-alive") + .header("Content-Type", "application/json") + .header("Cookie", "JSESSIONID=node07ayjwewvdr8q3ov9smy6m94c3668.node0") + .header("Origin", "http://47.97.8.94:8082") + .header("Referer", "http://47.97.8.94:8082/settings/device") + .header("User-Agent", "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/109.0.0.0 Safari/537.36") + .body(JSONUtil.toJsonStr(object)) + .timeout(20000) // 设置超时时间 + .execute(); // 执行请求并获取响应 + + // 打印响应结果 + System.out.println(response.body()); + } + } + @Override public PageResult getFactoryUserPage(FactoryUserPageReqVO reqVO) { diff --git a/zn-module-smartfactory/zn-module-smartfactory-biz/src/main/java/cn/iocoder/yudao/module/smartfactory/controller/admin/factoryforklift/FactoryForkliftController.java b/zn-module-smartfactory/zn-module-smartfactory-biz/src/main/java/cn/iocoder/yudao/module/smartfactory/controller/admin/factoryforklift/FactoryForkliftController.java new file mode 100644 index 00000000..5d24e4b2 --- /dev/null +++ b/zn-module-smartfactory/zn-module-smartfactory-biz/src/main/java/cn/iocoder/yudao/module/smartfactory/controller/admin/factoryforklift/FactoryForkliftController.java @@ -0,0 +1,93 @@ +package cn.iocoder.yudao.module.smartfactory.controller.admin.factoryforklift; + +import cn.iocoder.yudao.framework.common.pojo.CommonResult; +import cn.iocoder.yudao.framework.common.pojo.PageParam; +import cn.iocoder.yudao.framework.common.pojo.PageResult; +import cn.iocoder.yudao.framework.common.util.object.BeanUtils; +import cn.iocoder.yudao.framework.excel.core.util.ExcelUtils; +import cn.iocoder.yudao.framework.operatelog.core.annotations.OperateLog; +import cn.iocoder.yudao.module.smartfactory.controller.admin.factoryforklift.vo.FactoryForkliftPageReqVO; +import cn.iocoder.yudao.module.smartfactory.controller.admin.factoryforklift.vo.FactoryForkliftRespVO; +import cn.iocoder.yudao.module.smartfactory.controller.admin.factoryforklift.vo.FactoryForkliftSaveReqVO; +import cn.iocoder.yudao.module.smartfactory.dal.dataobject.factoryforklift.FactoryForkliftDO; +import cn.iocoder.yudao.module.smartfactory.service.factoryforklift.FactoryForkliftService; +import io.swagger.v3.oas.annotations.Operation; +import io.swagger.v3.oas.annotations.Parameter; +import io.swagger.v3.oas.annotations.tags.Tag; +import org.springframework.security.access.prepost.PreAuthorize; +import org.springframework.validation.annotation.Validated; +import org.springframework.web.bind.annotation.*; + +import javax.annotation.Resource; +import javax.servlet.http.HttpServletResponse; +import javax.validation.Valid; +import java.io.IOException; +import java.util.List; + +import static cn.iocoder.yudao.framework.common.pojo.CommonResult.success; +import static cn.iocoder.yudao.framework.operatelog.core.enums.OperateTypeEnum.EXPORT; + +@Tag(name = "管理后台 - 叉车管理") +@RestController +@RequestMapping("/smartfactory/factory-forklift") +@Validated +public class FactoryForkliftController { + + @Resource + private FactoryForkliftService factoryForkliftService; + + @PostMapping("/create") + @Operation(summary = "创建叉车管理") + @PreAuthorize("@ss.hasPermission('smartfactory:factory-forklift:create')") + public CommonResult createFactoryForklift(@Valid @RequestBody FactoryForkliftSaveReqVO createReqVO) { + return success(factoryForkliftService.createFactoryForklift(createReqVO)); + } + + @PutMapping("/update") + @Operation(summary = "更新叉车管理") + @PreAuthorize("@ss.hasPermission('smartfactory:factory-forklift:update')") + public CommonResult updateFactoryForklift(@Valid @RequestBody FactoryForkliftSaveReqVO updateReqVO) { + factoryForkliftService.updateFactoryForklift(updateReqVO); + return success(true); + } + + @DeleteMapping("/delete") + @Operation(summary = "删除叉车管理") + @Parameter(name = "id", description = "编号", required = true) + @PreAuthorize("@ss.hasPermission('smartfactory:factory-forklift:delete')") + public CommonResult deleteFactoryForklift(@RequestParam("id") Long id) { + factoryForkliftService.deleteFactoryForklift(id); + return success(true); + } + + @GetMapping("/get") + @Operation(summary = "获得叉车管理") + @Parameter(name = "id", description = "编号", required = true, example = "1024") + @PreAuthorize("@ss.hasPermission('smartfactory:factory-forklift:query')") + public CommonResult getFactoryForklift(@RequestParam("id") Long id) { + FactoryForkliftDO factoryForklift = factoryForkliftService.getFactoryForklift(id); + return success(BeanUtils.toBean(factoryForklift, FactoryForkliftRespVO.class)); + } + + @GetMapping("/page") + @Operation(summary = "获得叉车管理分页") + @PreAuthorize("@ss.hasPermission('smartfactory:factory-forklift:query')") + public CommonResult> getFactoryForkliftPage(@Valid FactoryForkliftPageReqVO pageReqVO) { + PageResult pageResult = factoryForkliftService.getFactoryForkliftPage(pageReqVO); + return success(pageResult); + } + + @GetMapping("/export-excel") + @Operation(summary = "导出叉车管理 Excel") + @PreAuthorize("@ss.hasPermission('smartfactory:factory-forklift:export')") + @OperateLog(type = EXPORT) + public void exportFactoryForkliftExcel(@Valid FactoryForkliftPageReqVO pageReqVO, + HttpServletResponse response) throws IOException { + pageReqVO.setPageSize(PageParam.PAGE_SIZE_NONE); + List list = factoryForkliftService.getFactoryForkliftPage(pageReqVO).getList(); + // 导出 Excel + ExcelUtils.write(response, "叉车管理.xls", "数据", FactoryForkliftRespVO.class, + list); + } + +} diff --git a/zn-module-smartfactory/zn-module-smartfactory-biz/src/main/java/cn/iocoder/yudao/module/smartfactory/controller/admin/factoryforklift/vo/FactoryForkliftPageReqVO.java b/zn-module-smartfactory/zn-module-smartfactory-biz/src/main/java/cn/iocoder/yudao/module/smartfactory/controller/admin/factoryforklift/vo/FactoryForkliftPageReqVO.java new file mode 100644 index 00000000..2aa90f05 --- /dev/null +++ b/zn-module-smartfactory/zn-module-smartfactory-biz/src/main/java/cn/iocoder/yudao/module/smartfactory/controller/admin/factoryforklift/vo/FactoryForkliftPageReqVO.java @@ -0,0 +1,56 @@ +package cn.iocoder.yudao.module.smartfactory.controller.admin.factoryforklift.vo; + +import cn.iocoder.yudao.framework.common.pojo.PageParam; +import io.swagger.v3.oas.annotations.media.Schema; +import lombok.Data; +import lombok.EqualsAndHashCode; +import lombok.ToString; +import org.springframework.format.annotation.DateTimeFormat; + +import java.time.LocalDateTime; +import java.util.List; + +import static cn.iocoder.yudao.framework.common.util.date.DateUtils.FORMAT_YEAR_MONTH_DAY_HOUR_MINUTE_SECOND; + +@Schema(description = "管理后台 - 叉车管理分页 Request VO") +@Data +@EqualsAndHashCode(callSuper = true) +@ToString(callSuper = true) +public class FactoryForkliftPageReqVO extends PageParam { + + @Schema(description = "资产编号") + private String assetsNo; + + @Schema(description = "工厂id", example = "1056") + private Long factoryId; + + @Schema(description = "部门id", example = "23631") + private Long deptId; + + @Schema(description = "叉车名称", example = "芋艿") + private String name; + + @Schema(description = "厂商") + private String manufacturer; + + @Schema(description = "型号") + private String modelNo; + + @Schema(description = "车牌") + private String licensePlate; + + @Schema(description = "铭牌日期") + @DateTimeFormat(pattern = FORMAT_YEAR_MONTH_DAY_HOUR_MINUTE_SECOND) + private String[] nameplateDate; + + @Schema(description = "用途类型 根据字典值来匹配", example = "1") + private Integer useType; + + @Schema(description = "创建时间") + @DateTimeFormat(pattern = FORMAT_YEAR_MONTH_DAY_HOUR_MINUTE_SECOND) + private LocalDateTime[] createTime; + + + @Schema(description = "资产类型ids", example = "1") + private List typeIds; +} diff --git a/zn-module-smartfactory/zn-module-smartfactory-biz/src/main/java/cn/iocoder/yudao/module/smartfactory/controller/admin/factoryforklift/vo/FactoryForkliftRespVO.java b/zn-module-smartfactory/zn-module-smartfactory-biz/src/main/java/cn/iocoder/yudao/module/smartfactory/controller/admin/factoryforklift/vo/FactoryForkliftRespVO.java new file mode 100644 index 00000000..c1147b95 --- /dev/null +++ b/zn-module-smartfactory/zn-module-smartfactory-biz/src/main/java/cn/iocoder/yudao/module/smartfactory/controller/admin/factoryforklift/vo/FactoryForkliftRespVO.java @@ -0,0 +1,73 @@ +package cn.iocoder.yudao.module.smartfactory.controller.admin.factoryforklift.vo; + +import io.swagger.v3.oas.annotations.media.Schema; +import lombok.*; +import java.util.*; +import java.util.*; +import org.springframework.format.annotation.DateTimeFormat; +import java.time.LocalDateTime; +import com.alibaba.excel.annotation.*; + +@Schema(description = "管理后台 - 叉车管理 Response VO") +@Data +@ExcelIgnoreUnannotated +public class FactoryForkliftRespVO { + + @Schema(description = "资产id", requiredMode = Schema.RequiredMode.REQUIRED, example = "25769") + @ExcelProperty("资产id") + private Long id; + + @Schema(description = "资产编号", requiredMode = Schema.RequiredMode.REQUIRED) + @ExcelProperty("资产编号") + private String assetsNo; + + @Schema(description = "工厂id", requiredMode = Schema.RequiredMode.REQUIRED, example = "1056") + @ExcelProperty("工厂id") + private Long factoryId; + + @Schema(description = "工厂名称", requiredMode = Schema.RequiredMode.REQUIRED, example = "1056") + @ExcelProperty("工厂名称") + private String factoryName; + + + @Schema(description = "叉车id", requiredMode = Schema.RequiredMode.REQUIRED, example = "25769") + @ExcelProperty("叉车id") + private Long forkliftId; +// +// @Schema(description = "部门id", example = "23631") +// @ExcelProperty("部门id") +// private Long deptId; +// +// @Schema(description = "部门名称", example = "23631") +// @ExcelProperty("部门名称") +// private String deptName; + + @Schema(description = "叉车名称", example = "芋艿") + @ExcelProperty("叉车名称") + private String name; + + @Schema(description = "厂商") + @ExcelProperty("厂商") + private String manufacturer; + + @Schema(description = "型号") + @ExcelProperty("型号") + private String modelNo; + + @Schema(description = "车牌") + @ExcelProperty("车牌") + private String licensePlate; + + @Schema(description = "铭牌日期") + @ExcelProperty("铭牌日期") + private String nameplateDate; + + @Schema(description = "用途类型 根据字典值来匹配", example = "1") + @ExcelProperty("用途类型 根据字典值来匹配") + private Integer useType; + + @Schema(description = "创建时间", requiredMode = Schema.RequiredMode.REQUIRED) + @ExcelProperty("创建时间") + private LocalDateTime createTime; + +} diff --git a/zn-module-smartfactory/zn-module-smartfactory-biz/src/main/java/cn/iocoder/yudao/module/smartfactory/controller/admin/factoryforklift/vo/FactoryForkliftSaveReqVO.java b/zn-module-smartfactory/zn-module-smartfactory-biz/src/main/java/cn/iocoder/yudao/module/smartfactory/controller/admin/factoryforklift/vo/FactoryForkliftSaveReqVO.java new file mode 100644 index 00000000..a80421b8 --- /dev/null +++ b/zn-module-smartfactory/zn-module-smartfactory-biz/src/main/java/cn/iocoder/yudao/module/smartfactory/controller/admin/factoryforklift/vo/FactoryForkliftSaveReqVO.java @@ -0,0 +1,45 @@ +package cn.iocoder.yudao.module.smartfactory.controller.admin.factoryforklift.vo; + +import io.swagger.v3.oas.annotations.media.Schema; +import lombok.*; +import java.util.*; +import javax.validation.constraints.*; +import java.util.*; + +@Schema(description = "管理后台 - 叉车管理新增/修改 Request VO") +@Data +public class FactoryForkliftSaveReqVO { + + @Schema(description = "主键id", requiredMode = Schema.RequiredMode.REQUIRED, example = "25769") + private Long id; + + @Schema(description = "资产编号", requiredMode = Schema.RequiredMode.REQUIRED) + @NotEmpty(message = "资产编号不能为空") + private String assetsNo; + + @Schema(description = "工厂id", requiredMode = Schema.RequiredMode.REQUIRED, example = "1056") + @NotNull(message = "工厂id不能为空") + private Long factoryId; + + @Schema(description = "部门id", example = "23631") + private Long deptId; + + @Schema(description = "叉车名称", example = "芋艿") + private String name; + + @Schema(description = "厂商") + private String manufacturer; + + @Schema(description = "型号") + private String modelNo; + + @Schema(description = "车牌") + private String licensePlate; + + @Schema(description = "铭牌日期") + private String nameplateDate; + + @Schema(description = "用途类型 根据字典值来匹配", example = "1") + private Integer useType; + +} \ No newline at end of file diff --git a/zn-module-smartfactory/zn-module-smartfactory-biz/src/main/java/cn/iocoder/yudao/module/smartfactory/controller/admin/factoryinfo/vo/FactoryInfoPageReqVO.java b/zn-module-smartfactory/zn-module-smartfactory-biz/src/main/java/cn/iocoder/yudao/module/smartfactory/controller/admin/factoryinfo/vo/FactoryInfoPageReqVO.java index 871bb512..eda826da 100644 --- a/zn-module-smartfactory/zn-module-smartfactory-biz/src/main/java/cn/iocoder/yudao/module/smartfactory/controller/admin/factoryinfo/vo/FactoryInfoPageReqVO.java +++ b/zn-module-smartfactory/zn-module-smartfactory-biz/src/main/java/cn/iocoder/yudao/module/smartfactory/controller/admin/factoryinfo/vo/FactoryInfoPageReqVO.java @@ -25,6 +25,9 @@ public class FactoryInfoPageReqVO extends PageParam { @Schema(description = "工厂类型", example = "1") private String type; + @Schema(description = "工厂业务类型 根据字典business_type来", example = "1") + private String businessType; + @Schema(description = "状态", example = "1") private Integer status; @@ -32,4 +35,4 @@ public class FactoryInfoPageReqVO extends PageParam { @DateTimeFormat(pattern = FORMAT_YEAR_MONTH_DAY_HOUR_MINUTE_SECOND) private LocalDateTime[] createTime; -} \ No newline at end of file +} diff --git a/zn-module-smartfactory/zn-module-smartfactory-biz/src/main/java/cn/iocoder/yudao/module/smartfactory/controller/admin/factoryinfo/vo/FactoryInfoRespVO.java b/zn-module-smartfactory/zn-module-smartfactory-biz/src/main/java/cn/iocoder/yudao/module/smartfactory/controller/admin/factoryinfo/vo/FactoryInfoRespVO.java index f90d9d4d..989add04 100644 --- a/zn-module-smartfactory/zn-module-smartfactory-biz/src/main/java/cn/iocoder/yudao/module/smartfactory/controller/admin/factoryinfo/vo/FactoryInfoRespVO.java +++ b/zn-module-smartfactory/zn-module-smartfactory-biz/src/main/java/cn/iocoder/yudao/module/smartfactory/controller/admin/factoryinfo/vo/FactoryInfoRespVO.java @@ -32,6 +32,10 @@ public class FactoryInfoRespVO { @ExcelProperty("工厂类型") private String type; + @Schema(description = "工厂业务类型 根据字典business_type来", example = "1") + @ExcelProperty("工厂业务类型") + private String businessType; + @Schema(description = "工厂简介", example = "这是一个工厂简介") @ExcelProperty("工厂简介") private String description; @@ -63,4 +67,4 @@ public class FactoryInfoRespVO { @Schema(description = "负责人编号", example = "126") private Long leaderUserId; -} \ No newline at end of file +} diff --git a/zn-module-smartfactory/zn-module-smartfactory-biz/src/main/java/cn/iocoder/yudao/module/smartfactory/controller/admin/factoryinfo/vo/FactoryInfoSaveReqVO.java b/zn-module-smartfactory/zn-module-smartfactory-biz/src/main/java/cn/iocoder/yudao/module/smartfactory/controller/admin/factoryinfo/vo/FactoryInfoSaveReqVO.java index 19716512..7f90241e 100644 --- a/zn-module-smartfactory/zn-module-smartfactory-biz/src/main/java/cn/iocoder/yudao/module/smartfactory/controller/admin/factoryinfo/vo/FactoryInfoSaveReqVO.java +++ b/zn-module-smartfactory/zn-module-smartfactory-biz/src/main/java/cn/iocoder/yudao/module/smartfactory/controller/admin/factoryinfo/vo/FactoryInfoSaveReqVO.java @@ -1,5 +1,6 @@ package cn.iocoder.yudao.module.smartfactory.controller.admin.factoryinfo.vo; +import com.alibaba.excel.annotation.ExcelProperty; import io.swagger.v3.oas.annotations.media.Schema; import lombok.Data; @@ -26,6 +27,9 @@ public class FactoryInfoSaveReqVO { @NotEmpty(message = "工厂类型不能为空") private String type; + @Schema(description = "工厂业务类型 根据字典business_type来", example = "1") + private String businessType; + @Schema(description = "工厂简介", example = "这是一个工厂简介") private String description; @@ -68,4 +72,4 @@ public class FactoryInfoSaveReqVO { @Schema(description = "负责人编号", example = "126") private Long leaderUserId; -} \ No newline at end of file +} diff --git a/zn-module-smartfactory/zn-module-smartfactory-biz/src/main/java/cn/iocoder/yudao/module/smartfactory/controller/admin/factorykiln/FactoryKilnController.java b/zn-module-smartfactory/zn-module-smartfactory-biz/src/main/java/cn/iocoder/yudao/module/smartfactory/controller/admin/factorykiln/FactoryKilnController.java new file mode 100644 index 00000000..b9565927 --- /dev/null +++ b/zn-module-smartfactory/zn-module-smartfactory-biz/src/main/java/cn/iocoder/yudao/module/smartfactory/controller/admin/factorykiln/FactoryKilnController.java @@ -0,0 +1,95 @@ +package cn.iocoder.yudao.module.smartfactory.controller.admin.factorykiln; + +import org.springframework.web.bind.annotation.*; +import javax.annotation.Resource; +import org.springframework.validation.annotation.Validated; +import org.springframework.security.access.prepost.PreAuthorize; +import io.swagger.v3.oas.annotations.tags.Tag; +import io.swagger.v3.oas.annotations.Parameter; +import io.swagger.v3.oas.annotations.Operation; + +import javax.validation.constraints.*; +import javax.validation.*; +import javax.servlet.http.*; +import java.util.*; +import java.io.IOException; + +import cn.iocoder.yudao.framework.common.pojo.PageParam; +import cn.iocoder.yudao.framework.common.pojo.PageResult; +import cn.iocoder.yudao.framework.common.pojo.CommonResult; +import cn.iocoder.yudao.framework.common.util.object.BeanUtils; +import static cn.iocoder.yudao.framework.common.pojo.CommonResult.success; + +import cn.iocoder.yudao.framework.excel.core.util.ExcelUtils; + +import cn.iocoder.yudao.framework.operatelog.core.annotations.OperateLog; +import static cn.iocoder.yudao.framework.operatelog.core.enums.OperateTypeEnum.*; + +import cn.iocoder.yudao.module.smartfactory.controller.admin.factorykiln.vo.*; +import cn.iocoder.yudao.module.smartfactory.dal.dataobject.factorykiln.FactoryKilnDO; +import cn.iocoder.yudao.module.smartfactory.service.factorykiln.FactoryKilnService; + +@Tag(name = "管理后台 - 工厂窑炉") +@RestController +@RequestMapping("/smartfactory/factory-kiln") +@Validated +public class FactoryKilnController { + + @Resource + private FactoryKilnService factoryKilnService; + + @PostMapping("/create") + @Operation(summary = "创建工厂窑炉") + @PreAuthorize("@ss.hasPermission('smartfactory:factory-kiln:create')") + public CommonResult createFactoryKiln(@Valid @RequestBody FactoryKilnSaveReqVO createReqVO) { + return success(factoryKilnService.createFactoryKiln(createReqVO)); + } + + @PutMapping("/update") + @Operation(summary = "更新工厂窑炉") + @PreAuthorize("@ss.hasPermission('smartfactory:factory-kiln:update')") + public CommonResult updateFactoryKiln(@Valid @RequestBody FactoryKilnSaveReqVO updateReqVO) { + factoryKilnService.updateFactoryKiln(updateReqVO); + return success(true); + } + + @DeleteMapping("/delete") + @Operation(summary = "删除工厂窑炉") + @Parameter(name = "id", description = "编号", required = true) + @PreAuthorize("@ss.hasPermission('smartfactory:factory-kiln:delete')") + public CommonResult deleteFactoryKiln(@RequestParam("id") Long id) { + factoryKilnService.deleteFactoryKiln(id); + return success(true); + } + + @GetMapping("/get") + @Operation(summary = "获得工厂窑炉") + @Parameter(name = "id", description = "编号", required = true, example = "1024") + @PreAuthorize("@ss.hasPermission('smartfactory:factory-kiln:query')") + public CommonResult getFactoryKiln(@RequestParam("id") Long id) { + FactoryKilnDO factoryKiln = factoryKilnService.getFactoryKiln(id); + return success(BeanUtils.toBean(factoryKiln, FactoryKilnRespVO.class)); + } + + @GetMapping("/page") + @Operation(summary = "获得工厂窑炉分页") + @PreAuthorize("@ss.hasPermission('smartfactory:factory-kiln:query')") + public CommonResult> getFactoryKilnPage(@Valid FactoryKilnPageReqVO pageReqVO) { + PageResult pageResult = factoryKilnService.getFactoryKilnPage(pageReqVO); + return success(BeanUtils.toBean(pageResult, FactoryKilnRespVO.class)); + } + + @GetMapping("/export-excel") + @Operation(summary = "导出工厂窑炉 Excel") + @PreAuthorize("@ss.hasPermission('smartfactory:factory-kiln:export')") + @OperateLog(type = EXPORT) + public void exportFactoryKilnExcel(@Valid FactoryKilnPageReqVO pageReqVO, + HttpServletResponse response) throws IOException { + pageReqVO.setPageSize(PageParam.PAGE_SIZE_NONE); + List list = factoryKilnService.getFactoryKilnPage(pageReqVO).getList(); + // 导出 Excel + ExcelUtils.write(response, "工厂窑炉.xls", "数据", FactoryKilnRespVO.class, + BeanUtils.toBean(list, FactoryKilnRespVO.class)); + } + +} \ No newline at end of file diff --git a/zn-module-smartfactory/zn-module-smartfactory-biz/src/main/java/cn/iocoder/yudao/module/smartfactory/controller/admin/factorykiln/vo/FactoryKilnPageReqVO.java b/zn-module-smartfactory/zn-module-smartfactory-biz/src/main/java/cn/iocoder/yudao/module/smartfactory/controller/admin/factorykiln/vo/FactoryKilnPageReqVO.java new file mode 100644 index 00000000..2b3c917e --- /dev/null +++ b/zn-module-smartfactory/zn-module-smartfactory-biz/src/main/java/cn/iocoder/yudao/module/smartfactory/controller/admin/factorykiln/vo/FactoryKilnPageReqVO.java @@ -0,0 +1,31 @@ +package cn.iocoder.yudao.module.smartfactory.controller.admin.factorykiln.vo; + +import lombok.*; +import java.util.*; +import io.swagger.v3.oas.annotations.media.Schema; +import cn.iocoder.yudao.framework.common.pojo.PageParam; +import org.springframework.format.annotation.DateTimeFormat; +import java.time.LocalDateTime; + +import static cn.iocoder.yudao.framework.common.util.date.DateUtils.FORMAT_YEAR_MONTH_DAY_HOUR_MINUTE_SECOND; + +@Schema(description = "管理后台 - 工厂窑炉分页 Request VO") +@Data +@EqualsAndHashCode(callSuper = true) +@ToString(callSuper = true) +public class FactoryKilnPageReqVO extends PageParam { + + @Schema(description = "工厂id", example = "25583") + private Long factoryId; + + @Schema(description = "名称", example = "赵六") + private String name; + + @Schema(description = "产能") + private Integer capacity; + + @Schema(description = "创建时间") + @DateTimeFormat(pattern = FORMAT_YEAR_MONTH_DAY_HOUR_MINUTE_SECOND) + private LocalDateTime[] createTime; + +} \ No newline at end of file diff --git a/zn-module-smartfactory/zn-module-smartfactory-biz/src/main/java/cn/iocoder/yudao/module/smartfactory/controller/admin/factorykiln/vo/FactoryKilnRespVO.java b/zn-module-smartfactory/zn-module-smartfactory-biz/src/main/java/cn/iocoder/yudao/module/smartfactory/controller/admin/factorykiln/vo/FactoryKilnRespVO.java new file mode 100644 index 00000000..c5d88e2f --- /dev/null +++ b/zn-module-smartfactory/zn-module-smartfactory-biz/src/main/java/cn/iocoder/yudao/module/smartfactory/controller/admin/factorykiln/vo/FactoryKilnRespVO.java @@ -0,0 +1,36 @@ +package cn.iocoder.yudao.module.smartfactory.controller.admin.factorykiln.vo; + +import io.swagger.v3.oas.annotations.media.Schema; +import lombok.*; +import java.util.*; +import java.util.*; +import org.springframework.format.annotation.DateTimeFormat; +import java.time.LocalDateTime; +import com.alibaba.excel.annotation.*; + +@Schema(description = "管理后台 - 工厂窑炉 Response VO") +@Data +@ExcelIgnoreUnannotated +public class FactoryKilnRespVO { + + @Schema(description = "主键id", requiredMode = Schema.RequiredMode.REQUIRED, example = "1055") + @ExcelProperty("主键id") + private Long id; + + @Schema(description = "工厂id", requiredMode = Schema.RequiredMode.REQUIRED, example = "25583") + @ExcelProperty("工厂id") + private Long factoryId; + + @Schema(description = "名称", example = "赵六") + @ExcelProperty("名称") + private String name; + + @Schema(description = "产能") + @ExcelProperty("产能") + private Integer capacity; + + @Schema(description = "创建时间", requiredMode = Schema.RequiredMode.REQUIRED) + @ExcelProperty("创建时间") + private LocalDateTime createTime; + +} \ No newline at end of file diff --git a/zn-module-smartfactory/zn-module-smartfactory-biz/src/main/java/cn/iocoder/yudao/module/smartfactory/controller/admin/factorykiln/vo/FactoryKilnSaveReqVO.java b/zn-module-smartfactory/zn-module-smartfactory-biz/src/main/java/cn/iocoder/yudao/module/smartfactory/controller/admin/factorykiln/vo/FactoryKilnSaveReqVO.java new file mode 100644 index 00000000..ee7014a9 --- /dev/null +++ b/zn-module-smartfactory/zn-module-smartfactory-biz/src/main/java/cn/iocoder/yudao/module/smartfactory/controller/admin/factorykiln/vo/FactoryKilnSaveReqVO.java @@ -0,0 +1,26 @@ +package cn.iocoder.yudao.module.smartfactory.controller.admin.factorykiln.vo; + +import io.swagger.v3.oas.annotations.media.Schema; +import lombok.*; +import java.util.*; +import javax.validation.constraints.*; +import java.util.*; + +@Schema(description = "管理后台 - 工厂窑炉新增/修改 Request VO") +@Data +public class FactoryKilnSaveReqVO { + + @Schema(description = "主键id", requiredMode = Schema.RequiredMode.REQUIRED, example = "1055") + private Long id; + + @Schema(description = "工厂id", requiredMode = Schema.RequiredMode.REQUIRED, example = "25583") + @NotNull(message = "工厂id不能为空") + private Long factoryId; + + @Schema(description = "名称", example = "赵六") + private String name; + + @Schema(description = "产能") + private Integer capacity; + +} \ No newline at end of file diff --git a/zn-module-smartfactory/zn-module-smartfactory-biz/src/main/java/cn/iocoder/yudao/module/smartfactory/controller/admin/factorypackingline/FactoryPackingLineController.java b/zn-module-smartfactory/zn-module-smartfactory-biz/src/main/java/cn/iocoder/yudao/module/smartfactory/controller/admin/factorypackingline/FactoryPackingLineController.java new file mode 100644 index 00000000..c6d4bfc6 --- /dev/null +++ b/zn-module-smartfactory/zn-module-smartfactory-biz/src/main/java/cn/iocoder/yudao/module/smartfactory/controller/admin/factorypackingline/FactoryPackingLineController.java @@ -0,0 +1,95 @@ +package cn.iocoder.yudao.module.smartfactory.controller.admin.factorypackingline; + +import org.springframework.web.bind.annotation.*; +import javax.annotation.Resource; +import org.springframework.validation.annotation.Validated; +import org.springframework.security.access.prepost.PreAuthorize; +import io.swagger.v3.oas.annotations.tags.Tag; +import io.swagger.v3.oas.annotations.Parameter; +import io.swagger.v3.oas.annotations.Operation; + +import javax.validation.constraints.*; +import javax.validation.*; +import javax.servlet.http.*; +import java.util.*; +import java.io.IOException; + +import cn.iocoder.yudao.framework.common.pojo.PageParam; +import cn.iocoder.yudao.framework.common.pojo.PageResult; +import cn.iocoder.yudao.framework.common.pojo.CommonResult; +import cn.iocoder.yudao.framework.common.util.object.BeanUtils; +import static cn.iocoder.yudao.framework.common.pojo.CommonResult.success; + +import cn.iocoder.yudao.framework.excel.core.util.ExcelUtils; + +import cn.iocoder.yudao.framework.operatelog.core.annotations.OperateLog; +import static cn.iocoder.yudao.framework.operatelog.core.enums.OperateTypeEnum.*; + +import cn.iocoder.yudao.module.smartfactory.controller.admin.factorypackingline.vo.*; +import cn.iocoder.yudao.module.smartfactory.dal.dataobject.factorypackingline.FactoryPackingLineDO; +import cn.iocoder.yudao.module.smartfactory.service.factorypackingline.FactoryPackingLineService; + +@Tag(name = "管理后台 - 打包线配置") +@RestController +@RequestMapping("/smartfactory/factory-packing-line") +@Validated +public class FactoryPackingLineController { + + @Resource + private FactoryPackingLineService factoryPackingLineService; + + @PostMapping("/create") + @Operation(summary = "创建打包线配置") + @PreAuthorize("@ss.hasPermission('smartfactory:factory-packing-line:create')") + public CommonResult createFactoryPackingLine(@Valid @RequestBody FactoryPackingLineSaveReqVO createReqVO) { + return success(factoryPackingLineService.createFactoryPackingLine(createReqVO)); + } + + @PutMapping("/update") + @Operation(summary = "更新打包线配置") + @PreAuthorize("@ss.hasPermission('smartfactory:factory-packing-line:update')") + public CommonResult updateFactoryPackingLine(@Valid @RequestBody FactoryPackingLineSaveReqVO updateReqVO) { + factoryPackingLineService.updateFactoryPackingLine(updateReqVO); + return success(true); + } + + @DeleteMapping("/delete") + @Operation(summary = "删除打包线配置") + @Parameter(name = "id", description = "编号", required = true) + @PreAuthorize("@ss.hasPermission('smartfactory:factory-packing-line:delete')") + public CommonResult deleteFactoryPackingLine(@RequestParam("id") Long id) { + factoryPackingLineService.deleteFactoryPackingLine(id); + return success(true); + } + + @GetMapping("/get") + @Operation(summary = "获得打包线配置") + @Parameter(name = "id", description = "编号", required = true, example = "1024") + @PreAuthorize("@ss.hasPermission('smartfactory:factory-packing-line:query')") + public CommonResult getFactoryPackingLine(@RequestParam("id") Long id) { + FactoryPackingLineDO factoryPackingLine = factoryPackingLineService.getFactoryPackingLine(id); + return success(BeanUtils.toBean(factoryPackingLine, FactoryPackingLineRespVO.class)); + } + + @GetMapping("/page") + @Operation(summary = "获得打包线配置分页") + @PreAuthorize("@ss.hasPermission('smartfactory:factory-packing-line:query')") + public CommonResult> getFactoryPackingLinePage(@Valid FactoryPackingLinePageReqVO pageReqVO) { + PageResult pageResult = factoryPackingLineService.getFactoryPackingLinePage(pageReqVO); + return success(BeanUtils.toBean(pageResult, FactoryPackingLineRespVO.class)); + } + + @GetMapping("/export-excel") + @Operation(summary = "导出打包线配置 Excel") + @PreAuthorize("@ss.hasPermission('smartfactory:factory-packing-line:export')") + @OperateLog(type = EXPORT) + public void exportFactoryPackingLineExcel(@Valid FactoryPackingLinePageReqVO pageReqVO, + HttpServletResponse response) throws IOException { + pageReqVO.setPageSize(PageParam.PAGE_SIZE_NONE); + List list = factoryPackingLineService.getFactoryPackingLinePage(pageReqVO).getList(); + // 导出 Excel + ExcelUtils.write(response, "打包线配置.xls", "数据", FactoryPackingLineRespVO.class, + BeanUtils.toBean(list, FactoryPackingLineRespVO.class)); + } + +} \ No newline at end of file diff --git a/zn-module-smartfactory/zn-module-smartfactory-biz/src/main/java/cn/iocoder/yudao/module/smartfactory/controller/admin/factorypackingline/vo/FactoryPackingLinePageReqVO.java b/zn-module-smartfactory/zn-module-smartfactory-biz/src/main/java/cn/iocoder/yudao/module/smartfactory/controller/admin/factorypackingline/vo/FactoryPackingLinePageReqVO.java new file mode 100644 index 00000000..fbc78526 --- /dev/null +++ b/zn-module-smartfactory/zn-module-smartfactory-biz/src/main/java/cn/iocoder/yudao/module/smartfactory/controller/admin/factorypackingline/vo/FactoryPackingLinePageReqVO.java @@ -0,0 +1,34 @@ +package cn.iocoder.yudao.module.smartfactory.controller.admin.factorypackingline.vo; + +import lombok.*; +import java.util.*; +import io.swagger.v3.oas.annotations.media.Schema; +import cn.iocoder.yudao.framework.common.pojo.PageParam; +import org.springframework.format.annotation.DateTimeFormat; +import java.time.LocalDateTime; + +import static cn.iocoder.yudao.framework.common.util.date.DateUtils.FORMAT_YEAR_MONTH_DAY_HOUR_MINUTE_SECOND; + +@Schema(description = "管理后台 - 打包线配置分页 Request VO") +@Data +@EqualsAndHashCode(callSuper = true) +@ToString(callSuper = true) +public class FactoryPackingLinePageReqVO extends PageParam { + + @Schema(description = "工厂id", example = "24676") + private Long factoryId; + + @Schema(description = "打包线名称", example = "王五") + private String name; + + @Schema(description = "是否公司承接 0否 1是", example = "2") + private Integer type; + + @Schema(description = "窑炉id", example = "15240") + private Long kilnId; + + @Schema(description = "创建时间") + @DateTimeFormat(pattern = FORMAT_YEAR_MONTH_DAY_HOUR_MINUTE_SECOND) + private LocalDateTime[] createTime; + +} \ No newline at end of file diff --git a/zn-module-smartfactory/zn-module-smartfactory-biz/src/main/java/cn/iocoder/yudao/module/smartfactory/controller/admin/factorypackingline/vo/FactoryPackingLineRespVO.java b/zn-module-smartfactory/zn-module-smartfactory-biz/src/main/java/cn/iocoder/yudao/module/smartfactory/controller/admin/factorypackingline/vo/FactoryPackingLineRespVO.java new file mode 100644 index 00000000..4a97405d --- /dev/null +++ b/zn-module-smartfactory/zn-module-smartfactory-biz/src/main/java/cn/iocoder/yudao/module/smartfactory/controller/admin/factorypackingline/vo/FactoryPackingLineRespVO.java @@ -0,0 +1,40 @@ +package cn.iocoder.yudao.module.smartfactory.controller.admin.factorypackingline.vo; + +import io.swagger.v3.oas.annotations.media.Schema; +import lombok.*; +import java.util.*; +import java.util.*; +import org.springframework.format.annotation.DateTimeFormat; +import java.time.LocalDateTime; +import com.alibaba.excel.annotation.*; + +@Schema(description = "管理后台 - 打包线配置 Response VO") +@Data +@ExcelIgnoreUnannotated +public class FactoryPackingLineRespVO { + + @Schema(description = "主键id", requiredMode = Schema.RequiredMode.REQUIRED, example = "21099") + @ExcelProperty("主键id") + private Long id; + + @Schema(description = "工厂id", requiredMode = Schema.RequiredMode.REQUIRED, example = "24676") + @ExcelProperty("工厂id") + private Long factoryId; + + @Schema(description = "打包线名称", example = "王五") + @ExcelProperty("打包线名称") + private String name; + + @Schema(description = "是否公司承接 0否 1是", example = "2") + @ExcelProperty("是否公司承接 0否 1是") + private Integer type; + + @Schema(description = "窑炉id", example = "15240") + @ExcelProperty("窑炉id") + private Long kilnId; + + @Schema(description = "创建时间", requiredMode = Schema.RequiredMode.REQUIRED) + @ExcelProperty("创建时间") + private LocalDateTime createTime; + +} \ No newline at end of file diff --git a/zn-module-smartfactory/zn-module-smartfactory-biz/src/main/java/cn/iocoder/yudao/module/smartfactory/controller/admin/factorypackingline/vo/FactoryPackingLineSaveReqVO.java b/zn-module-smartfactory/zn-module-smartfactory-biz/src/main/java/cn/iocoder/yudao/module/smartfactory/controller/admin/factorypackingline/vo/FactoryPackingLineSaveReqVO.java new file mode 100644 index 00000000..4f0cafbe --- /dev/null +++ b/zn-module-smartfactory/zn-module-smartfactory-biz/src/main/java/cn/iocoder/yudao/module/smartfactory/controller/admin/factorypackingline/vo/FactoryPackingLineSaveReqVO.java @@ -0,0 +1,29 @@ +package cn.iocoder.yudao.module.smartfactory.controller.admin.factorypackingline.vo; + +import io.swagger.v3.oas.annotations.media.Schema; +import lombok.*; +import java.util.*; +import javax.validation.constraints.*; +import java.util.*; + +@Schema(description = "管理后台 - 打包线配置新增/修改 Request VO") +@Data +public class FactoryPackingLineSaveReqVO { + + @Schema(description = "主键id", requiredMode = Schema.RequiredMode.REQUIRED, example = "21099") + private Long id; + + @Schema(description = "工厂id", requiredMode = Schema.RequiredMode.REQUIRED, example = "24676") + @NotNull(message = "工厂id不能为空") + private Long factoryId; + + @Schema(description = "打包线名称", example = "王五") + private String name; + + @Schema(description = "是否公司承接 0否 1是", example = "2") + private Integer type; + + @Schema(description = "窑炉id", example = "15240") + private Long kilnId; + +} \ No newline at end of file diff --git a/zn-module-smartfactory/zn-module-smartfactory-biz/src/main/java/cn/iocoder/yudao/module/smartfactory/dal/dataobject/factoryforklift/FactoryForkliftDO.java b/zn-module-smartfactory/zn-module-smartfactory-biz/src/main/java/cn/iocoder/yudao/module/smartfactory/dal/dataobject/factoryforklift/FactoryForkliftDO.java new file mode 100644 index 00000000..7a7036dc --- /dev/null +++ b/zn-module-smartfactory/zn-module-smartfactory-biz/src/main/java/cn/iocoder/yudao/module/smartfactory/dal/dataobject/factoryforklift/FactoryForkliftDO.java @@ -0,0 +1,67 @@ +package cn.iocoder.yudao.module.smartfactory.dal.dataobject.factoryforklift; + +import lombok.*; +import java.util.*; +import java.time.LocalDateTime; +import java.time.LocalDateTime; +import com.baomidou.mybatisplus.annotation.*; +import cn.iocoder.yudao.framework.mybatis.core.dataobject.BaseDO; + +/** + * 叉车管理 DO + * + * @author 姚君 + */ +@TableName("sf_factory_forklift") +@KeySequence("sf_factory_forklift_seq") // 用于 Oracle、PostgreSQL、Kingbase、DB2、H2 数据库的主键自增。如果是 MySQL 等数据库,可不写。 +@Data +@EqualsAndHashCode(callSuper = true) +@ToString(callSuper = true) +@Builder +@NoArgsConstructor +@AllArgsConstructor +public class FactoryForkliftDO extends BaseDO { + + /** + * 主键id + */ + @TableId + private Long id; + /** + * 资产编号 + */ + private String assetsNo; + /** + * 工厂id + */ + private Long factoryId; + /** + * 部门id + */ + private Long deptId; + /** + * 叉车名称 + */ + private String name; + /** + * 厂商 + */ + private String manufacturer; + /** + * 型号 + */ + private String modelNo; + /** + * 车牌 + */ + private String licensePlate; + /** + * 铭牌日期 + */ + private String nameplateDate; + /** + * 用途类型 根据字典值来匹配 + */ + private Integer useType; + +} \ No newline at end of file diff --git a/zn-module-smartfactory/zn-module-smartfactory-biz/src/main/java/cn/iocoder/yudao/module/smartfactory/dal/dataobject/factoryinfo/FactoryInfoDO.java b/zn-module-smartfactory/zn-module-smartfactory-biz/src/main/java/cn/iocoder/yudao/module/smartfactory/dal/dataobject/factoryinfo/FactoryInfoDO.java index 400ab5f9..1139411c 100644 --- a/zn-module-smartfactory/zn-module-smartfactory-biz/src/main/java/cn/iocoder/yudao/module/smartfactory/dal/dataobject/factoryinfo/FactoryInfoDO.java +++ b/zn-module-smartfactory/zn-module-smartfactory-biz/src/main/java/cn/iocoder/yudao/module/smartfactory/dal/dataobject/factoryinfo/FactoryInfoDO.java @@ -50,6 +50,11 @@ public class FactoryInfoDO extends BaseDO { * 字典值 参考 sf_factory_type */ private String type; + + /** + * 工厂业务类型 根据字典business_type来 + */ + private String businessType; /** * 工厂简介 */ @@ -104,4 +109,4 @@ public class FactoryInfoDO extends BaseDO { */ private Integer status; -} \ No newline at end of file +} diff --git a/zn-module-smartfactory/zn-module-smartfactory-biz/src/main/java/cn/iocoder/yudao/module/smartfactory/dal/dataobject/factorykiln/FactoryKilnDO.java b/zn-module-smartfactory/zn-module-smartfactory-biz/src/main/java/cn/iocoder/yudao/module/smartfactory/dal/dataobject/factorykiln/FactoryKilnDO.java new file mode 100644 index 00000000..c3df945d --- /dev/null +++ b/zn-module-smartfactory/zn-module-smartfactory-biz/src/main/java/cn/iocoder/yudao/module/smartfactory/dal/dataobject/factorykiln/FactoryKilnDO.java @@ -0,0 +1,43 @@ +package cn.iocoder.yudao.module.smartfactory.dal.dataobject.factorykiln; + +import lombok.*; +import java.util.*; +import java.time.LocalDateTime; +import java.time.LocalDateTime; +import com.baomidou.mybatisplus.annotation.*; +import cn.iocoder.yudao.framework.mybatis.core.dataobject.BaseDO; + +/** + * 工厂窑炉 DO + * + * @author 姚君 + */ +@TableName("sf_factory_kiln") +@KeySequence("sf_factory_kiln_seq") // 用于 Oracle、PostgreSQL、Kingbase、DB2、H2 数据库的主键自增。如果是 MySQL 等数据库,可不写。 +@Data +@EqualsAndHashCode(callSuper = true) +@ToString(callSuper = true) +@Builder +@NoArgsConstructor +@AllArgsConstructor +public class FactoryKilnDO extends BaseDO { + + /** + * 主键id + */ + @TableId + private Long id; + /** + * 工厂id + */ + private Long factoryId; + /** + * 名称 + */ + private String name; + /** + * 产能 + */ + private Integer capacity; + +} \ No newline at end of file diff --git a/zn-module-smartfactory/zn-module-smartfactory-biz/src/main/java/cn/iocoder/yudao/module/smartfactory/dal/dataobject/factorypackingline/FactoryPackingLineDO.java b/zn-module-smartfactory/zn-module-smartfactory-biz/src/main/java/cn/iocoder/yudao/module/smartfactory/dal/dataobject/factorypackingline/FactoryPackingLineDO.java new file mode 100644 index 00000000..79e659b6 --- /dev/null +++ b/zn-module-smartfactory/zn-module-smartfactory-biz/src/main/java/cn/iocoder/yudao/module/smartfactory/dal/dataobject/factorypackingline/FactoryPackingLineDO.java @@ -0,0 +1,47 @@ +package cn.iocoder.yudao.module.smartfactory.dal.dataobject.factorypackingline; + +import lombok.*; +import java.util.*; +import java.time.LocalDateTime; +import java.time.LocalDateTime; +import com.baomidou.mybatisplus.annotation.*; +import cn.iocoder.yudao.framework.mybatis.core.dataobject.BaseDO; + +/** + * 打包线配置 DO + * + * @author 姚君 + */ +@TableName("sf_factory_packing_line") +@KeySequence("sf_factory_packing_line_seq") // 用于 Oracle、PostgreSQL、Kingbase、DB2、H2 数据库的主键自增。如果是 MySQL 等数据库,可不写。 +@Data +@EqualsAndHashCode(callSuper = true) +@ToString(callSuper = true) +@Builder +@NoArgsConstructor +@AllArgsConstructor +public class FactoryPackingLineDO extends BaseDO { + + /** + * 主键id + */ + @TableId + private Long id; + /** + * 工厂id + */ + private Long factoryId; + /** + * 打包线名称 + */ + private String name; + /** + * 是否公司承接 0否 1是 + */ + private Integer type; + /** + * 窑炉id + */ + private Long kilnId; + +} \ No newline at end of file diff --git a/zn-module-smartfactory/zn-module-smartfactory-biz/src/main/java/cn/iocoder/yudao/module/smartfactory/dal/mysql/factoryforklift/FactoryForkliftMapper.java b/zn-module-smartfactory/zn-module-smartfactory-biz/src/main/java/cn/iocoder/yudao/module/smartfactory/dal/mysql/factoryforklift/FactoryForkliftMapper.java new file mode 100644 index 00000000..abb6b13e --- /dev/null +++ b/zn-module-smartfactory/zn-module-smartfactory-biz/src/main/java/cn/iocoder/yudao/module/smartfactory/dal/mysql/factoryforklift/FactoryForkliftMapper.java @@ -0,0 +1,46 @@ +package cn.iocoder.yudao.module.smartfactory.dal.mysql.factoryforklift; + +import java.util.*; + +import cn.iocoder.yudao.framework.common.pojo.PageResult; +import cn.iocoder.yudao.framework.mybatis.core.query.LambdaQueryWrapperX; +import cn.iocoder.yudao.framework.mybatis.core.mapper.BaseMapperX; +import cn.iocoder.yudao.module.smartfactory.dal.dataobject.factoryforklift.FactoryForkliftDO; +import com.baomidou.mybatisplus.core.metadata.IPage; +import com.baomidou.mybatisplus.extension.plugins.pagination.Page; +import org.apache.ibatis.annotations.Mapper; +import cn.iocoder.yudao.module.smartfactory.controller.admin.factoryforklift.vo.*; +import org.apache.ibatis.annotations.Param; + +/** + * 叉车管理 Mapper + * + * @author 姚君 + */ +@Mapper +public interface FactoryForkliftMapper extends BaseMapperX { + + default PageResult selectPage(FactoryForkliftPageReqVO reqVO) { + return selectPage(reqVO, new LambdaQueryWrapperX() + .eqIfPresent(FactoryForkliftDO::getAssetsNo, reqVO.getAssetsNo()) + .eqIfPresent(FactoryForkliftDO::getFactoryId, reqVO.getFactoryId()) + .eqIfPresent(FactoryForkliftDO::getDeptId, reqVO.getDeptId()) + .likeIfPresent(FactoryForkliftDO::getName, reqVO.getName()) + .eqIfPresent(FactoryForkliftDO::getManufacturer, reqVO.getManufacturer()) + .eqIfPresent(FactoryForkliftDO::getModelNo, reqVO.getModelNo()) + .eqIfPresent(FactoryForkliftDO::getLicensePlate, reqVO.getLicensePlate()) + .betweenIfPresent(FactoryForkliftDO::getNameplateDate, reqVO.getNameplateDate()) + .eqIfPresent(FactoryForkliftDO::getUseType, reqVO.getUseType()) + .betweenIfPresent(FactoryForkliftDO::getCreateTime, reqVO.getCreateTime()) + .orderByDesc(FactoryForkliftDO::getId)); + } + + /** + * 叉车列表 + * + * @param pageReqVO + * @param objectPage + * @return + */ + IPage getFactoryForkliftPage(@Param("vo") FactoryForkliftPageReqVO pageReqVO, @Param("page") Page objectPage); +} diff --git a/zn-module-smartfactory/zn-module-smartfactory-biz/src/main/java/cn/iocoder/yudao/module/smartfactory/dal/mysql/factorykiln/FactoryKilnMapper.java b/zn-module-smartfactory/zn-module-smartfactory-biz/src/main/java/cn/iocoder/yudao/module/smartfactory/dal/mysql/factorykiln/FactoryKilnMapper.java new file mode 100644 index 00000000..1468ed84 --- /dev/null +++ b/zn-module-smartfactory/zn-module-smartfactory-biz/src/main/java/cn/iocoder/yudao/module/smartfactory/dal/mysql/factorykiln/FactoryKilnMapper.java @@ -0,0 +1,29 @@ +package cn.iocoder.yudao.module.smartfactory.dal.mysql.factorykiln; + +import java.util.*; + +import cn.iocoder.yudao.framework.common.pojo.PageResult; +import cn.iocoder.yudao.framework.mybatis.core.query.LambdaQueryWrapperX; +import cn.iocoder.yudao.framework.mybatis.core.mapper.BaseMapperX; +import cn.iocoder.yudao.module.smartfactory.dal.dataobject.factorykiln.FactoryKilnDO; +import org.apache.ibatis.annotations.Mapper; +import cn.iocoder.yudao.module.smartfactory.controller.admin.factorykiln.vo.*; + +/** + * 工厂窑炉 Mapper + * + * @author 姚君 + */ +@Mapper +public interface FactoryKilnMapper extends BaseMapperX { + + default PageResult selectPage(FactoryKilnPageReqVO reqVO) { + return selectPage(reqVO, new LambdaQueryWrapperX() + .eqIfPresent(FactoryKilnDO::getFactoryId, reqVO.getFactoryId()) + .likeIfPresent(FactoryKilnDO::getName, reqVO.getName()) + .eqIfPresent(FactoryKilnDO::getCapacity, reqVO.getCapacity()) + .betweenIfPresent(FactoryKilnDO::getCreateTime, reqVO.getCreateTime()) + .orderByDesc(FactoryKilnDO::getId)); + } + +} \ No newline at end of file diff --git a/zn-module-smartfactory/zn-module-smartfactory-biz/src/main/java/cn/iocoder/yudao/module/smartfactory/dal/mysql/factorypackingline/FactoryPackingLineMapper.java b/zn-module-smartfactory/zn-module-smartfactory-biz/src/main/java/cn/iocoder/yudao/module/smartfactory/dal/mysql/factorypackingline/FactoryPackingLineMapper.java new file mode 100644 index 00000000..65f28189 --- /dev/null +++ b/zn-module-smartfactory/zn-module-smartfactory-biz/src/main/java/cn/iocoder/yudao/module/smartfactory/dal/mysql/factorypackingline/FactoryPackingLineMapper.java @@ -0,0 +1,30 @@ +package cn.iocoder.yudao.module.smartfactory.dal.mysql.factorypackingline; + +import java.util.*; + +import cn.iocoder.yudao.framework.common.pojo.PageResult; +import cn.iocoder.yudao.framework.mybatis.core.query.LambdaQueryWrapperX; +import cn.iocoder.yudao.framework.mybatis.core.mapper.BaseMapperX; +import cn.iocoder.yudao.module.smartfactory.dal.dataobject.factorypackingline.FactoryPackingLineDO; +import org.apache.ibatis.annotations.Mapper; +import cn.iocoder.yudao.module.smartfactory.controller.admin.factorypackingline.vo.*; + +/** + * 打包线配置 Mapper + * + * @author 姚君 + */ +@Mapper +public interface FactoryPackingLineMapper extends BaseMapperX { + + default PageResult selectPage(FactoryPackingLinePageReqVO reqVO) { + return selectPage(reqVO, new LambdaQueryWrapperX() + .eqIfPresent(FactoryPackingLineDO::getFactoryId, reqVO.getFactoryId()) + .likeIfPresent(FactoryPackingLineDO::getName, reqVO.getName()) + .eqIfPresent(FactoryPackingLineDO::getType, reqVO.getType()) + .eqIfPresent(FactoryPackingLineDO::getKilnId, reqVO.getKilnId()) + .betweenIfPresent(FactoryPackingLineDO::getCreateTime, reqVO.getCreateTime()) + .orderByDesc(FactoryPackingLineDO::getId)); + } + +} \ No newline at end of file diff --git a/zn-module-smartfactory/zn-module-smartfactory-biz/src/main/java/cn/iocoder/yudao/module/smartfactory/framework/rpc/config/RpcConfiguration.java b/zn-module-smartfactory/zn-module-smartfactory-biz/src/main/java/cn/iocoder/yudao/module/smartfactory/framework/rpc/config/RpcConfiguration.java index d625527f..b03e668a 100644 --- a/zn-module-smartfactory/zn-module-smartfactory-biz/src/main/java/cn/iocoder/yudao/module/smartfactory/framework/rpc/config/RpcConfiguration.java +++ b/zn-module-smartfactory/zn-module-smartfactory-biz/src/main/java/cn/iocoder/yudao/module/smartfactory/framework/rpc/config/RpcConfiguration.java @@ -2,6 +2,7 @@ package cn.iocoder.yudao.module.smartfactory.framework.rpc.config; import cn.iocoder.yudao.module.infra.api.config.ConfigApi; import cn.iocoder.yudao.module.infra.api.file.FileApi; +import cn.iocoder.yudao.module.system.api.assets.AssetsTypeApi; import cn.iocoder.yudao.module.system.api.dept.DeptApi; import cn.iocoder.yudao.module.system.api.dept.PostApi; import cn.iocoder.yudao.module.system.api.dict.DictDataApi; @@ -15,8 +16,8 @@ import org.springframework.cloud.openfeign.EnableFeignClients; import org.springframework.context.annotation.Configuration; @Configuration(proxyBeanMethods = false) -@EnableFeignClients(clients = {FileApi.class,RoleApi.class, DeptApi.class, PostApi.class, AdminUserApi.class, SmsSendApi.class, DictDataApi.class, NotifyMessageSendApi.class, - SubscribeMessageSendApi.class, ConfigApi.class, PermissionApi.class +@EnableFeignClients(clients = {FileApi.class, RoleApi.class, DeptApi.class, PostApi.class, AdminUserApi.class, SmsSendApi.class, DictDataApi.class, NotifyMessageSendApi.class, + SubscribeMessageSendApi.class, ConfigApi.class, PermissionApi.class, AssetsTypeApi.class }) public class RpcConfiguration { } diff --git a/zn-module-smartfactory/zn-module-smartfactory-biz/src/main/java/cn/iocoder/yudao/module/smartfactory/service/factoryforklift/FactoryForkliftService.java b/zn-module-smartfactory/zn-module-smartfactory-biz/src/main/java/cn/iocoder/yudao/module/smartfactory/service/factoryforklift/FactoryForkliftService.java new file mode 100644 index 00000000..0eb75685 --- /dev/null +++ b/zn-module-smartfactory/zn-module-smartfactory-biz/src/main/java/cn/iocoder/yudao/module/smartfactory/service/factoryforklift/FactoryForkliftService.java @@ -0,0 +1,55 @@ +package cn.iocoder.yudao.module.smartfactory.service.factoryforklift; + +import java.util.*; +import javax.validation.*; +import cn.iocoder.yudao.module.smartfactory.controller.admin.factoryforklift.vo.*; +import cn.iocoder.yudao.module.smartfactory.dal.dataobject.factoryforklift.FactoryForkliftDO; +import cn.iocoder.yudao.framework.common.pojo.PageResult; +import cn.iocoder.yudao.framework.common.pojo.PageParam; + +/** + * 叉车管理 Service 接口 + * + * @author 姚君 + */ +public interface FactoryForkliftService { + + /** + * 创建叉车管理 + * + * @param createReqVO 创建信息 + * @return 编号 + */ + Long createFactoryForklift(@Valid FactoryForkliftSaveReqVO createReqVO); + + /** + * 更新叉车管理 + * + * @param updateReqVO 更新信息 + */ + void updateFactoryForklift(@Valid FactoryForkliftSaveReqVO updateReqVO); + + /** + * 删除叉车管理 + * + * @param id 编号 + */ + void deleteFactoryForklift(Long id); + + /** + * 获得叉车管理 + * + * @param id 编号 + * @return 叉车管理 + */ + FactoryForkliftDO getFactoryForklift(Long id); + + /** + * 获得叉车管理分页 + * + * @param pageReqVO 分页查询 + * @return 叉车管理分页 + */ + PageResult getFactoryForkliftPage(FactoryForkliftPageReqVO pageReqVO); + +} diff --git a/zn-module-smartfactory/zn-module-smartfactory-biz/src/main/java/cn/iocoder/yudao/module/smartfactory/service/factoryforklift/FactoryForkliftServiceImpl.java b/zn-module-smartfactory/zn-module-smartfactory-biz/src/main/java/cn/iocoder/yudao/module/smartfactory/service/factoryforklift/FactoryForkliftServiceImpl.java new file mode 100644 index 00000000..27036706 --- /dev/null +++ b/zn-module-smartfactory/zn-module-smartfactory-biz/src/main/java/cn/iocoder/yudao/module/smartfactory/service/factoryforklift/FactoryForkliftServiceImpl.java @@ -0,0 +1,71 @@ +package cn.iocoder.yudao.module.smartfactory.service.factoryforklift; + +import cn.iocoder.yudao.framework.common.enums.AssetsTypeCodeEnum; +import cn.iocoder.yudao.framework.common.pojo.CommonResult; +import cn.iocoder.yudao.framework.common.pojo.PageResult; +import cn.iocoder.yudao.framework.common.util.object.BeanUtils; +import cn.iocoder.yudao.framework.mybatis.core.util.MyBatisUtils; +import cn.iocoder.yudao.module.smartfactory.controller.admin.factoryforklift.vo.FactoryForkliftPageReqVO; +import cn.iocoder.yudao.module.smartfactory.controller.admin.factoryforklift.vo.FactoryForkliftRespVO; +import cn.iocoder.yudao.module.smartfactory.controller.admin.factoryforklift.vo.FactoryForkliftSaveReqVO; +import cn.iocoder.yudao.module.smartfactory.dal.dataobject.factoryforklift.FactoryForkliftDO; +import cn.iocoder.yudao.module.smartfactory.dal.mysql.factoryforklift.FactoryForkliftMapper; +import cn.iocoder.yudao.module.system.api.assets.AssetsTypeApi; +import com.baomidou.mybatisplus.core.metadata.IPage; +import org.springframework.stereotype.Service; +import org.springframework.validation.annotation.Validated; + +import javax.annotation.Resource; +import java.util.List; + +/** + * 叉车管理 Service 实现类 + * + * @author 姚君 + */ +@Service +@Validated +public class FactoryForkliftServiceImpl implements FactoryForkliftService { + + @Resource + private FactoryForkliftMapper factoryForkliftMapper; + @Resource + private AssetsTypeApi assetsTypeApi; + + @Override + public Long createFactoryForklift(FactoryForkliftSaveReqVO createReqVO) { + // 插入 + FactoryForkliftDO factoryForklift = BeanUtils.toBean(createReqVO, FactoryForkliftDO.class); + factoryForkliftMapper.insert(factoryForklift); + // 返回 + return factoryForklift.getId(); + } + + @Override + public void updateFactoryForklift(FactoryForkliftSaveReqVO updateReqVO) { + // 更新 + FactoryForkliftDO updateObj = BeanUtils.toBean(updateReqVO, FactoryForkliftDO.class); + factoryForkliftMapper.updateById(updateObj); + } + + @Override + public void deleteFactoryForklift(Long id) { + // 删除 + factoryForkliftMapper.deleteById(id); + } + + @Override + public FactoryForkliftDO getFactoryForklift(Long id) { + return factoryForkliftMapper.selectById(id); + } + + @Override + public PageResult getFactoryForkliftPage(FactoryForkliftPageReqVO pageReqVO) { + // -- 通过资产类型中的code - 获取到资产类型的ids - 完了后当作参数传过去 + CommonResult> forklift = assetsTypeApi.getAssetsTypeIdsByCode(AssetsTypeCodeEnum.FORKLIFT); + pageReqVO.setTypeIds(forklift.getData()); + IPage vos = factoryForkliftMapper.getFactoryForkliftPage(pageReqVO, MyBatisUtils.buildPage(pageReqVO)); + return new PageResult<>(vos.getRecords(), vos.getTotal()); + } + +} diff --git a/zn-module-smartfactory/zn-module-smartfactory-biz/src/main/java/cn/iocoder/yudao/module/smartfactory/service/factorykiln/FactoryKilnService.java b/zn-module-smartfactory/zn-module-smartfactory-biz/src/main/java/cn/iocoder/yudao/module/smartfactory/service/factorykiln/FactoryKilnService.java new file mode 100644 index 00000000..b2f9279f --- /dev/null +++ b/zn-module-smartfactory/zn-module-smartfactory-biz/src/main/java/cn/iocoder/yudao/module/smartfactory/service/factorykiln/FactoryKilnService.java @@ -0,0 +1,55 @@ +package cn.iocoder.yudao.module.smartfactory.service.factorykiln; + +import java.util.*; +import javax.validation.*; +import cn.iocoder.yudao.module.smartfactory.controller.admin.factorykiln.vo.*; +import cn.iocoder.yudao.module.smartfactory.dal.dataobject.factorykiln.FactoryKilnDO; +import cn.iocoder.yudao.framework.common.pojo.PageResult; +import cn.iocoder.yudao.framework.common.pojo.PageParam; + +/** + * 工厂窑炉 Service 接口 + * + * @author 姚君 + */ +public interface FactoryKilnService { + + /** + * 创建工厂窑炉 + * + * @param createReqVO 创建信息 + * @return 编号 + */ + Long createFactoryKiln(@Valid FactoryKilnSaveReqVO createReqVO); + + /** + * 更新工厂窑炉 + * + * @param updateReqVO 更新信息 + */ + void updateFactoryKiln(@Valid FactoryKilnSaveReqVO updateReqVO); + + /** + * 删除工厂窑炉 + * + * @param id 编号 + */ + void deleteFactoryKiln(Long id); + + /** + * 获得工厂窑炉 + * + * @param id 编号 + * @return 工厂窑炉 + */ + FactoryKilnDO getFactoryKiln(Long id); + + /** + * 获得工厂窑炉分页 + * + * @param pageReqVO 分页查询 + * @return 工厂窑炉分页 + */ + PageResult getFactoryKilnPage(FactoryKilnPageReqVO pageReqVO); + +} \ No newline at end of file diff --git a/zn-module-smartfactory/zn-module-smartfactory-biz/src/main/java/cn/iocoder/yudao/module/smartfactory/service/factorykiln/FactoryKilnServiceImpl.java b/zn-module-smartfactory/zn-module-smartfactory-biz/src/main/java/cn/iocoder/yudao/module/smartfactory/service/factorykiln/FactoryKilnServiceImpl.java new file mode 100644 index 00000000..1813d5ca --- /dev/null +++ b/zn-module-smartfactory/zn-module-smartfactory-biz/src/main/java/cn/iocoder/yudao/module/smartfactory/service/factorykiln/FactoryKilnServiceImpl.java @@ -0,0 +1,58 @@ +package cn.iocoder.yudao.module.smartfactory.service.factorykiln; + +import cn.iocoder.yudao.framework.common.pojo.PageResult; +import cn.iocoder.yudao.framework.common.util.object.BeanUtils; +import cn.iocoder.yudao.module.smartfactory.controller.admin.factorykiln.vo.FactoryKilnPageReqVO; +import cn.iocoder.yudao.module.smartfactory.controller.admin.factorykiln.vo.FactoryKilnSaveReqVO; +import cn.iocoder.yudao.module.smartfactory.dal.dataobject.factorykiln.FactoryKilnDO; +import cn.iocoder.yudao.module.smartfactory.dal.mysql.factorykiln.FactoryKilnMapper; +import org.springframework.stereotype.Service; +import org.springframework.validation.annotation.Validated; + +import javax.annotation.Resource; + +/** + * 工厂窑炉 Service 实现类 + * + * @author 姚君 + */ +@Service +@Validated +public class FactoryKilnServiceImpl implements FactoryKilnService { + + @Resource + private FactoryKilnMapper factoryKilnMapper; + + @Override + public Long createFactoryKiln(FactoryKilnSaveReqVO createReqVO) { + // 插入 + FactoryKilnDO factoryKiln = BeanUtils.toBean(createReqVO, FactoryKilnDO.class); + factoryKilnMapper.insert(factoryKiln); + // 返回 + return factoryKiln.getId(); + } + + @Override + public void updateFactoryKiln(FactoryKilnSaveReqVO updateReqVO) { + // 更新 + FactoryKilnDO updateObj = BeanUtils.toBean(updateReqVO, FactoryKilnDO.class); + factoryKilnMapper.updateById(updateObj); + } + + @Override + public void deleteFactoryKiln(Long id) { + // 删除 + factoryKilnMapper.deleteById(id); + } + + @Override + public FactoryKilnDO getFactoryKiln(Long id) { + return factoryKilnMapper.selectById(id); + } + + @Override + public PageResult getFactoryKilnPage(FactoryKilnPageReqVO pageReqVO) { + return factoryKilnMapper.selectPage(pageReqVO); + } + +} diff --git a/zn-module-smartfactory/zn-module-smartfactory-biz/src/main/java/cn/iocoder/yudao/module/smartfactory/service/factorypackingline/FactoryPackingLineService.java b/zn-module-smartfactory/zn-module-smartfactory-biz/src/main/java/cn/iocoder/yudao/module/smartfactory/service/factorypackingline/FactoryPackingLineService.java new file mode 100644 index 00000000..4fba8daf --- /dev/null +++ b/zn-module-smartfactory/zn-module-smartfactory-biz/src/main/java/cn/iocoder/yudao/module/smartfactory/service/factorypackingline/FactoryPackingLineService.java @@ -0,0 +1,55 @@ +package cn.iocoder.yudao.module.smartfactory.service.factorypackingline; + +import java.util.*; +import javax.validation.*; +import cn.iocoder.yudao.module.smartfactory.controller.admin.factorypackingline.vo.*; +import cn.iocoder.yudao.module.smartfactory.dal.dataobject.factorypackingline.FactoryPackingLineDO; +import cn.iocoder.yudao.framework.common.pojo.PageResult; +import cn.iocoder.yudao.framework.common.pojo.PageParam; + +/** + * 打包线配置 Service 接口 + * + * @author 姚君 + */ +public interface FactoryPackingLineService { + + /** + * 创建打包线配置 + * + * @param createReqVO 创建信息 + * @return 编号 + */ + Long createFactoryPackingLine(@Valid FactoryPackingLineSaveReqVO createReqVO); + + /** + * 更新打包线配置 + * + * @param updateReqVO 更新信息 + */ + void updateFactoryPackingLine(@Valid FactoryPackingLineSaveReqVO updateReqVO); + + /** + * 删除打包线配置 + * + * @param id 编号 + */ + void deleteFactoryPackingLine(Long id); + + /** + * 获得打包线配置 + * + * @param id 编号 + * @return 打包线配置 + */ + FactoryPackingLineDO getFactoryPackingLine(Long id); + + /** + * 获得打包线配置分页 + * + * @param pageReqVO 分页查询 + * @return 打包线配置分页 + */ + PageResult getFactoryPackingLinePage(FactoryPackingLinePageReqVO pageReqVO); + +} \ No newline at end of file diff --git a/zn-module-smartfactory/zn-module-smartfactory-biz/src/main/java/cn/iocoder/yudao/module/smartfactory/service/factorypackingline/FactoryPackingLineServiceImpl.java b/zn-module-smartfactory/zn-module-smartfactory-biz/src/main/java/cn/iocoder/yudao/module/smartfactory/service/factorypackingline/FactoryPackingLineServiceImpl.java new file mode 100644 index 00000000..ff8ff044 --- /dev/null +++ b/zn-module-smartfactory/zn-module-smartfactory-biz/src/main/java/cn/iocoder/yudao/module/smartfactory/service/factorypackingline/FactoryPackingLineServiceImpl.java @@ -0,0 +1,58 @@ +package cn.iocoder.yudao.module.smartfactory.service.factorypackingline; + +import cn.iocoder.yudao.framework.common.pojo.PageResult; +import cn.iocoder.yudao.framework.common.util.object.BeanUtils; +import cn.iocoder.yudao.module.smartfactory.controller.admin.factorypackingline.vo.FactoryPackingLinePageReqVO; +import cn.iocoder.yudao.module.smartfactory.controller.admin.factorypackingline.vo.FactoryPackingLineSaveReqVO; +import cn.iocoder.yudao.module.smartfactory.dal.dataobject.factorypackingline.FactoryPackingLineDO; +import cn.iocoder.yudao.module.smartfactory.dal.mysql.factorypackingline.FactoryPackingLineMapper; +import org.springframework.stereotype.Service; +import org.springframework.validation.annotation.Validated; + +import javax.annotation.Resource; + +/** + * 打包线配置 Service 实现类 + * + * @author 姚君 + */ +@Service +@Validated +public class FactoryPackingLineServiceImpl implements FactoryPackingLineService { + + @Resource + private FactoryPackingLineMapper factoryPackingLineMapper; + + @Override + public Long createFactoryPackingLine(FactoryPackingLineSaveReqVO createReqVO) { + // 插入 + FactoryPackingLineDO factoryPackingLine = BeanUtils.toBean(createReqVO, FactoryPackingLineDO.class); + factoryPackingLineMapper.insert(factoryPackingLine); + // 返回 + return factoryPackingLine.getId(); + } + + @Override + public void updateFactoryPackingLine(FactoryPackingLineSaveReqVO updateReqVO) { + // 更新 + FactoryPackingLineDO updateObj = BeanUtils.toBean(updateReqVO, FactoryPackingLineDO.class); + factoryPackingLineMapper.updateById(updateObj); + } + + @Override + public void deleteFactoryPackingLine(Long id) { + // 删除 + factoryPackingLineMapper.deleteById(id); + } + + @Override + public FactoryPackingLineDO getFactoryPackingLine(Long id) { + return factoryPackingLineMapper.selectById(id); + } + + @Override + public PageResult getFactoryPackingLinePage(FactoryPackingLinePageReqVO pageReqVO) { + return factoryPackingLineMapper.selectPage(pageReqVO); + } + +} diff --git a/zn-module-smartfactory/zn-module-smartfactory-biz/src/main/resources/mapper/factoryforklift/FactoryForkliftMapper.xml b/zn-module-smartfactory/zn-module-smartfactory-biz/src/main/resources/mapper/factoryforklift/FactoryForkliftMapper.xml new file mode 100644 index 00000000..19fb319d --- /dev/null +++ b/zn-module-smartfactory/zn-module-smartfactory-biz/src/main/resources/mapper/factoryforklift/FactoryForkliftMapper.xml @@ -0,0 +1,32 @@ + + + + + + + + diff --git a/zn-module-smartfactory/zn-module-smartfactory-biz/src/main/resources/mapper/factorykiln/FactoryKilnMapper.xml b/zn-module-smartfactory/zn-module-smartfactory-biz/src/main/resources/mapper/factorykiln/FactoryKilnMapper.xml new file mode 100644 index 00000000..25a43041 --- /dev/null +++ b/zn-module-smartfactory/zn-module-smartfactory-biz/src/main/resources/mapper/factorykiln/FactoryKilnMapper.xml @@ -0,0 +1,12 @@ + + + + + + + \ No newline at end of file diff --git a/zn-module-smartfactory/zn-module-smartfactory-biz/src/main/resources/mapper/factorypackingline/FactoryPackingLineMapper.xml b/zn-module-smartfactory/zn-module-smartfactory-biz/src/main/resources/mapper/factorypackingline/FactoryPackingLineMapper.xml new file mode 100644 index 00000000..e1eefed0 --- /dev/null +++ b/zn-module-smartfactory/zn-module-smartfactory-biz/src/main/resources/mapper/factorypackingline/FactoryPackingLineMapper.xml @@ -0,0 +1,12 @@ + + + + + + + \ No newline at end of file