From 79f612b789127e743fbfda9a4bd43e9986a65477 Mon Sep 17 00:00:00 2001 From: z Date: Wed, 6 May 2026 15:56:30 +0800 Subject: [PATCH] =?UTF-8?q?=E7=8F=AD=E6=AC=A1=E9=85=8D=E7=BD=AE=E9=A1=B5?= =?UTF-8?q?=E9=9D=A2?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- README.md | 3 - .../core/dataobject/BaseDOWithoutLogic.java | 51 ++++ .../core/handler/DefaultDBFieldHandler.java | 32 +- .../shiftconfig/ShiftConfigController.java | 191 ++++++------ .../shiftconfig/vo/ShiftConfigSaveReqVO.java | 6 +- .../shiftresult/ShiftResultController.java | 195 ++++++------ .../shiftresult/vo/ShiftResultPageReqVO.java | 14 +- .../dataobject/shiftconfig/ShiftConfigDO.java | 3 +- .../dataobject/shiftresult/ShiftResultDO.java | 3 +- .../mysql/shiftconfig/ShiftConfigMapper.java | 7 +- .../mysql/shiftresult/ShiftResultMapper.java | 16 +- .../shiftconfig/ShiftConfigService.java | 110 +++---- .../shiftconfig/ShiftConfigServiceImpl.java | 30 +- .../shiftresult/ShiftResultService.java | 113 +++---- .../shiftresult/ShiftResultServiceImpl.java | 110 +++++++ mes-module-infra/mes-module-infra-biz/pom.xml | 4 +- .../src/api/biz/shiftconfig/index.ts | 92 +++--- .../src/api/biz/shiftresult/index.ts | 91 +++--- mes-ui/mes-ui-admin-vue3/src/utils/dict.ts | 1 + .../mes-ui-admin-vue3/src/utils/formatTime.ts | 28 +- .../src/views/biz/customer/index.vue | 5 +- .../views/biz/shiftconfig/ShiftConfigForm.vue | 200 ++++++++++--- .../src/views/biz/shiftconfig/index.vue | 140 ++++----- .../src/views/biz/shiftresult/index.vue | 279 ++++++++---------- 24 files changed, 1000 insertions(+), 724 deletions(-) create mode 100644 mes-framework/mes-spring-boot-starter-mybatis/src/main/java/com/ningxia/yunxi/chemmes/framework/mybatis/core/dataobject/BaseDOWithoutLogic.java diff --git a/README.md b/README.md index eeacd9a..e69de29 100644 --- a/README.md +++ b/README.md @@ -1,3 +0,0 @@ -# mes-majoys - -美乐嘉mes \ No newline at end of file diff --git a/mes-framework/mes-spring-boot-starter-mybatis/src/main/java/com/ningxia/yunxi/chemmes/framework/mybatis/core/dataobject/BaseDOWithoutLogic.java b/mes-framework/mes-spring-boot-starter-mybatis/src/main/java/com/ningxia/yunxi/chemmes/framework/mybatis/core/dataobject/BaseDOWithoutLogic.java new file mode 100644 index 0000000..d16a3bc --- /dev/null +++ b/mes-framework/mes-spring-boot-starter-mybatis/src/main/java/com/ningxia/yunxi/chemmes/framework/mybatis/core/dataobject/BaseDOWithoutLogic.java @@ -0,0 +1,51 @@ +package com.ningxia.yunxi.chemmes.framework.mybatis.core.dataobject; + +import com.baomidou.mybatisplus.annotation.FieldFill; +import com.baomidou.mybatisplus.annotation.TableField; +import com.fasterxml.jackson.databind.annotation.JsonDeserialize; +import lombok.Data; +import org.apache.ibatis.type.JdbcType; + +import java.io.Serializable; +import java.time.LocalDateTime; + +/** + * 基础实体对象(不带逻辑删除) + * + * @author 芋道源码 + */ +@Data +public abstract class BaseDOWithoutLogic implements Serializable { + + /** + * 创建时间 + */ + @TableField(fill = FieldFill.INSERT) + + private LocalDateTime createTime; + /** + * 最后更新时间 + */ + @TableField(fill = FieldFill.INSERT_UPDATE) + + private LocalDateTime updateTime; + /** + * 创建者,目前使用 SysUser 的 id 编号 + * + * 使用 String 类型的原因是,未来可能会存在非数值的情况,留好拓展性。 + */ + @TableField(fill = FieldFill.INSERT, jdbcType = JdbcType.VARCHAR) + private String creator; + /** + * 更新者,目前使用 SysUser 的 id 编号 + * + * 使用 String 类型的原因是,未来可能会存在非数值的情况,留好拓展性。 + */ + @TableField(fill = FieldFill.INSERT_UPDATE, jdbcType = JdbcType.VARCHAR) + private String updater; + /** + * 是否删除 + */ + private Boolean deleted; + +} diff --git a/mes-framework/mes-spring-boot-starter-mybatis/src/main/java/com/ningxia/yunxi/chemmes/framework/mybatis/core/handler/DefaultDBFieldHandler.java b/mes-framework/mes-spring-boot-starter-mybatis/src/main/java/com/ningxia/yunxi/chemmes/framework/mybatis/core/handler/DefaultDBFieldHandler.java index 9b90bae..48eecc0 100644 --- a/mes-framework/mes-spring-boot-starter-mybatis/src/main/java/com/ningxia/yunxi/chemmes/framework/mybatis/core/handler/DefaultDBFieldHandler.java +++ b/mes-framework/mes-spring-boot-starter-mybatis/src/main/java/com/ningxia/yunxi/chemmes/framework/mybatis/core/handler/DefaultDBFieldHandler.java @@ -1,6 +1,7 @@ package com.ningxia.yunxi.chemmes.framework.mybatis.core.handler; import com.ningxia.yunxi.chemmes.framework.mybatis.core.dataobject.BaseDO; +import com.ningxia.yunxi.chemmes.framework.mybatis.core.dataobject.BaseDOWithoutLogic; import com.ningxia.yunxi.chemmes.framework.web.core.util.WebFrameworkUtils; import com.baomidou.mybatisplus.core.handlers.MetaObjectHandler; import org.apache.ibatis.reflection.MetaObject; @@ -19,10 +20,33 @@ public class DefaultDBFieldHandler implements MetaObjectHandler { @Override public void insertFill(MetaObject metaObject) { - if (Objects.nonNull(metaObject) && metaObject.getOriginalObject() instanceof BaseDO) { - BaseDO baseDO = (BaseDO) metaObject.getOriginalObject(); + if (Objects.isNull(metaObject)) { + return; + } - LocalDateTime current = LocalDateTime.now(); + LocalDateTime current = LocalDateTime.now(); + Long userId = WebFrameworkUtils.getLoginUserId(); + + if (metaObject.getOriginalObject() instanceof BaseDO) { + BaseDO baseDO = (BaseDO) metaObject.getOriginalObject(); + // 创建时间为空,则以当前时间为插入时间 + if (Objects.isNull(baseDO.getCreateTime())) { + baseDO.setCreateTime(current); + } + // 更新时间为空,则以当前时间为更新时间 + if (Objects.isNull(baseDO.getUpdateTime())) { + baseDO.setUpdateTime(current); + } + // 当前登录用户不为空,创建人为空,则当前登录用户为创建人 + if (Objects.nonNull(userId) && Objects.isNull(baseDO.getCreator())) { + baseDO.setCreator(userId.toString()); + } + // 当前登录用户不为空,更新人为空,则当前登录用户为更新人 + if (Objects.nonNull(userId) && Objects.isNull(baseDO.getUpdater())) { + baseDO.setUpdater(userId.toString()); + } + } else if (metaObject.getOriginalObject() instanceof BaseDOWithoutLogic) { + BaseDOWithoutLogic baseDO = (BaseDOWithoutLogic) metaObject.getOriginalObject(); // 创建时间为空,则以当前时间为插入时间 if (Objects.isNull(baseDO.getCreateTime())) { baseDO.setCreateTime(current); @@ -31,8 +55,6 @@ public class DefaultDBFieldHandler implements MetaObjectHandler { if (Objects.isNull(baseDO.getUpdateTime())) { baseDO.setUpdateTime(current); } - - Long userId = WebFrameworkUtils.getLoginUserId(); // 当前登录用户不为空,创建人为空,则当前登录用户为创建人 if (Objects.nonNull(userId) && Objects.isNull(baseDO.getCreator())) { baseDO.setCreator(userId.toString()); diff --git a/mes-module-chemmes/mes-module-chemmes-biz/src/main/java/com/ningxia/yunxi/chemmes/module/biz/controller/admin/shiftconfig/ShiftConfigController.java b/mes-module-chemmes/mes-module-chemmes-biz/src/main/java/com/ningxia/yunxi/chemmes/module/biz/controller/admin/shiftconfig/ShiftConfigController.java index b86c4a7..9965264 100644 --- a/mes-module-chemmes/mes-module-chemmes-biz/src/main/java/com/ningxia/yunxi/chemmes/module/biz/controller/admin/shiftconfig/ShiftConfigController.java +++ b/mes-module-chemmes/mes-module-chemmes-biz/src/main/java/com/ningxia/yunxi/chemmes/module/biz/controller/admin/shiftconfig/ShiftConfigController.java @@ -1,95 +1,96 @@ -package com.ningxia.yunxi.chemmes.module.biz.controller.admin.shiftconfig; - -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 com.ningxia.yunxi.chemmes.framework.common.pojo.PageParam; -import com.ningxia.yunxi.chemmes.framework.common.pojo.PageResult; -import com.ningxia.yunxi.chemmes.framework.common.pojo.CommonResult; -import com.ningxia.yunxi.chemmes.framework.common.util.object.BeanUtils; -import static com.ningxia.yunxi.chemmes.framework.common.pojo.CommonResult.success; - -import com.ningxia.yunxi.chemmes.framework.excel.core.util.ExcelUtils; - -import com.ningxia.yunxi.chemmes.framework.operatelog.core.annotations.OperateLog; -import static com.ningxia.yunxi.chemmes.framework.operatelog.core.enums.OperateTypeEnum.*; - -import com.ningxia.yunxi.chemmes.module.biz.controller.admin.shiftconfig.vo.*; -import com.ningxia.yunxi.chemmes.module.biz.dal.dataobject.shiftconfig.ShiftConfigDO; -import com.ningxia.yunxi.chemmes.module.biz.service.shiftconfig.ShiftConfigService; - -@Tag(name = "管理后台 - 班次循环配置") -@RestController -@RequestMapping("/biz/shift-config") -@Validated -public class ShiftConfigController { - - @Resource - private ShiftConfigService shiftConfigService; - - @PostMapping("/create") - @Operation(summary = "创建班次循环配置") - @PreAuthorize("@ss.hasPermission('biz:shift-config:create')") - public CommonResult createShiftConfig(@Valid @RequestBody ShiftConfigSaveReqVO createReqVO) { - return success(shiftConfigService.createShiftConfig(createReqVO)); - } - - @PutMapping("/update") - @Operation(summary = "更新班次循环配置") - @PreAuthorize("@ss.hasPermission('biz:shift-config:update')") - public CommonResult updateShiftConfig(@Valid @RequestBody ShiftConfigSaveReqVO updateReqVO) { - shiftConfigService.updateShiftConfig(updateReqVO); - return success(true); - } - - @DeleteMapping("/delete") - @Operation(summary = "删除班次循环配置") - @Parameter(name = "id", description = "编号", required = true) - @PreAuthorize("@ss.hasPermission('biz:shift-config:delete')") - public CommonResult deleteShiftConfig(@RequestParam("id") Integer id) { - shiftConfigService.deleteShiftConfig(id); - return success(true); - } - - @GetMapping("/get") - @Operation(summary = "获得班次循环配置") - @Parameter(name = "id", description = "编号", required = true, example = "1024") - @PreAuthorize("@ss.hasPermission('biz:shift-config:query')") - public CommonResult getShiftConfig(@RequestParam("id") Integer id) { - ShiftConfigDO shiftConfig = shiftConfigService.getShiftConfig(id); - return success(BeanUtils.toBean(shiftConfig, ShiftConfigRespVO.class)); - } - - @GetMapping("/page") - @Operation(summary = "获得班次循环配置分页") - @PreAuthorize("@ss.hasPermission('biz:shift-config:query')") - public CommonResult> getShiftConfigPage(@Valid ShiftConfigPageReqVO pageReqVO) { - PageResult pageResult = shiftConfigService.getShiftConfigPage(pageReqVO); - return success(BeanUtils.toBean(pageResult, ShiftConfigRespVO.class)); - } - - @GetMapping("/export-excel") - @Operation(summary = "导出班次循环配置 Excel") - @PreAuthorize("@ss.hasPermission('biz:shift-config:export')") - @OperateLog(type = EXPORT) - public void exportShiftConfigExcel(@Valid ShiftConfigPageReqVO pageReqVO, - HttpServletResponse response) throws IOException { - pageReqVO.setPageSize(PageParam.PAGE_SIZE_NONE); - List list = shiftConfigService.getShiftConfigPage(pageReqVO).getList(); - // 导出 Excel - ExcelUtils.write(response, "班次循环配置.xls", "数据", ShiftConfigRespVO.class, - BeanUtils.toBean(list, ShiftConfigRespVO.class)); - } - -} \ No newline at end of file +package com.ningxia.yunxi.chemmes.module.biz.controller.admin.shiftconfig; + +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 com.ningxia.yunxi.chemmes.framework.common.pojo.PageParam; +import com.ningxia.yunxi.chemmes.framework.common.pojo.PageResult; +import com.ningxia.yunxi.chemmes.framework.common.pojo.CommonResult; +import com.ningxia.yunxi.chemmes.framework.common.util.object.BeanUtils; +import static com.ningxia.yunxi.chemmes.framework.common.pojo.CommonResult.success; + +import com.ningxia.yunxi.chemmes.framework.excel.core.util.ExcelUtils; + +import com.ningxia.yunxi.chemmes.framework.operatelog.core.annotations.OperateLog; +import static com.ningxia.yunxi.chemmes.framework.operatelog.core.enums.OperateTypeEnum.*; + +import com.ningxia.yunxi.chemmes.module.biz.controller.admin.shiftconfig.vo.*; +import com.ningxia.yunxi.chemmes.module.biz.dal.dataobject.shiftconfig.ShiftConfigDO; +import com.ningxia.yunxi.chemmes.module.biz.service.shiftconfig.ShiftConfigService; + +@Tag(name = "管理后台 - 班次循环配置") +@RestController +@RequestMapping("/biz/shift-config") +@Validated +public class ShiftConfigController { + + @Resource + private ShiftConfigService shiftConfigService; + + @PostMapping("/create") + @Operation(summary = "创建班次循环配置") + @PreAuthorize("@ss.hasPermission('biz:shift-config:create')") + public CommonResult createShiftConfig(@Valid @RequestBody ShiftConfigSaveReqVO createReqVO) { + shiftConfigService.createShiftConfig(createReqVO); + return success(true); + } + + @PutMapping("/update") + @Operation(summary = "更新班次循环配置") + @PreAuthorize("@ss.hasPermission('biz:shift-config:update')") + public CommonResult updateShiftConfig(@Valid @RequestBody ShiftConfigSaveReqVO updateReqVO) { + shiftConfigService.updateShiftConfig(updateReqVO); + return success(true); + } + + @DeleteMapping("/delete") + @Operation(summary = "删除班次循环配置") + @Parameter(name = "id", description = "编号", required = true) + @PreAuthorize("@ss.hasPermission('biz:shift-config:delete')") + public CommonResult deleteShiftConfig(@RequestParam("chgClassType") String chgClassType) { + shiftConfigService.deleteShiftConfig(chgClassType); + return success(true); + } + + @GetMapping("/get") + @Operation(summary = "获得班次循环配置") + @Parameter(name = "id", description = "编号", required = true, example = "1024") + @PreAuthorize("@ss.hasPermission('biz:shift-config:query')") + public CommonResult getShiftConfig(@RequestParam("id") Integer id) { + ShiftConfigDO shiftConfig = shiftConfigService.getShiftConfig(id); + return success(BeanUtils.toBean(shiftConfig, ShiftConfigRespVO.class)); + } + + @GetMapping("/page") + @Operation(summary = "获得班次循环配置分页") + @PreAuthorize("@ss.hasPermission('biz:shift-config:query')") + public CommonResult> getShiftConfigPage(@Valid ShiftConfigPageReqVO pageReqVO) { + PageResult pageResult = shiftConfigService.getShiftConfigPage(pageReqVO); + return success(BeanUtils.toBean(pageResult, ShiftConfigRespVO.class)); + } + + @GetMapping("/export-excel") + @Operation(summary = "导出班次循环配置 Excel") + @PreAuthorize("@ss.hasPermission('biz:shift-config:export')") + @OperateLog(type = EXPORT) + public void exportShiftConfigExcel(@Valid ShiftConfigPageReqVO pageReqVO, + HttpServletResponse response) throws IOException { + pageReqVO.setPageSize(PageParam.PAGE_SIZE_NONE); + List list = shiftConfigService.getShiftConfigPage(pageReqVO).getList(); + // 导出 Excel + ExcelUtils.write(response, "班次循环配置.xls", "数据", ShiftConfigRespVO.class, + BeanUtils.toBean(list, ShiftConfigRespVO.class)); + } + +} diff --git a/mes-module-chemmes/mes-module-chemmes-biz/src/main/java/com/ningxia/yunxi/chemmes/module/biz/controller/admin/shiftconfig/vo/ShiftConfigSaveReqVO.java b/mes-module-chemmes/mes-module-chemmes-biz/src/main/java/com/ningxia/yunxi/chemmes/module/biz/controller/admin/shiftconfig/vo/ShiftConfigSaveReqVO.java index d49a9bc..13c71ac 100644 --- a/mes-module-chemmes/mes-module-chemmes-biz/src/main/java/com/ningxia/yunxi/chemmes/module/biz/controller/admin/shiftconfig/vo/ShiftConfigSaveReqVO.java +++ b/mes-module-chemmes/mes-module-chemmes-biz/src/main/java/com/ningxia/yunxi/chemmes/module/biz/controller/admin/shiftconfig/vo/ShiftConfigSaveReqVO.java @@ -1,10 +1,12 @@ package com.ningxia.yunxi.chemmes.module.biz.controller.admin.shiftconfig.vo; +import com.ningxia.yunxi.chemmes.module.biz.dal.dataobject.shiftconfig.ShiftConfigDO; import io.swagger.v3.oas.annotations.media.Schema; import lombok.Data; import javax.validation.constraints.NotNull; import java.time.LocalTime; +import java.util.List; @Schema(description = "管理后台 - 班次循环配置新增/修改 Request VO") @Data @@ -32,11 +34,11 @@ public class ShiftConfigSaveReqVO { private String chgClassType; @Schema(description = "开始时间", requiredMode = Schema.RequiredMode.REQUIRED) - @NotNull(message = "开始时间不能为空") private LocalTime bgnDtime; @Schema(description = "结束时间", requiredMode = Schema.RequiredMode.REQUIRED) - @NotNull(message = "结束时间不能为空") private LocalTime endDtime; + @Schema(description = "明细集合") + private List shiftConfigList; } diff --git a/mes-module-chemmes/mes-module-chemmes-biz/src/main/java/com/ningxia/yunxi/chemmes/module/biz/controller/admin/shiftresult/ShiftResultController.java b/mes-module-chemmes/mes-module-chemmes-biz/src/main/java/com/ningxia/yunxi/chemmes/module/biz/controller/admin/shiftresult/ShiftResultController.java index 17065ea..e89b363 100644 --- a/mes-module-chemmes/mes-module-chemmes-biz/src/main/java/com/ningxia/yunxi/chemmes/module/biz/controller/admin/shiftresult/ShiftResultController.java +++ b/mes-module-chemmes/mes-module-chemmes-biz/src/main/java/com/ningxia/yunxi/chemmes/module/biz/controller/admin/shiftresult/ShiftResultController.java @@ -1,95 +1,100 @@ -package com.ningxia.yunxi.chemmes.module.biz.controller.admin.shiftresult; - -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 com.ningxia.yunxi.chemmes.framework.common.pojo.PageParam; -import com.ningxia.yunxi.chemmes.framework.common.pojo.PageResult; -import com.ningxia.yunxi.chemmes.framework.common.pojo.CommonResult; -import com.ningxia.yunxi.chemmes.framework.common.util.object.BeanUtils; -import static com.ningxia.yunxi.chemmes.framework.common.pojo.CommonResult.success; - -import com.ningxia.yunxi.chemmes.framework.excel.core.util.ExcelUtils; - -import com.ningxia.yunxi.chemmes.framework.operatelog.core.annotations.OperateLog; -import static com.ningxia.yunxi.chemmes.framework.operatelog.core.enums.OperateTypeEnum.*; - -import com.ningxia.yunxi.chemmes.module.biz.controller.admin.shiftresult.vo.*; -import com.ningxia.yunxi.chemmes.module.biz.dal.dataobject.shiftresult.ShiftResultDO; -import com.ningxia.yunxi.chemmes.module.biz.service.shiftresult.ShiftResultService; - -@Tag(name = "管理后台 - 班次结果") -@RestController -@RequestMapping("/biz/shift-result") -@Validated -public class ShiftResultController { - - @Resource - private ShiftResultService shiftResultService; - - @PostMapping("/create") - @Operation(summary = "创建班次结果") - @PreAuthorize("@ss.hasPermission('biz:shift-result:create')") - public CommonResult createShiftResult(@Valid @RequestBody ShiftResultSaveReqVO createReqVO) { - return success(shiftResultService.createShiftResult(createReqVO)); - } - - @PutMapping("/update") - @Operation(summary = "更新班次结果") - @PreAuthorize("@ss.hasPermission('biz:shift-result:update')") - public CommonResult updateShiftResult(@Valid @RequestBody ShiftResultSaveReqVO updateReqVO) { - shiftResultService.updateShiftResult(updateReqVO); - return success(true); - } - - @DeleteMapping("/delete") - @Operation(summary = "删除班次结果") - @Parameter(name = "id", description = "编号", required = true) - @PreAuthorize("@ss.hasPermission('biz:shift-result:delete')") - public CommonResult deleteShiftResult(@RequestParam("id") Integer id) { - shiftResultService.deleteShiftResult(id); - return success(true); - } - - @GetMapping("/get") - @Operation(summary = "获得班次结果") - @Parameter(name = "id", description = "编号", required = true, example = "1024") - @PreAuthorize("@ss.hasPermission('biz:shift-result:query')") - public CommonResult getShiftResult(@RequestParam("id") Integer id) { - ShiftResultDO shiftResult = shiftResultService.getShiftResult(id); - return success(BeanUtils.toBean(shiftResult, ShiftResultRespVO.class)); - } - - @GetMapping("/page") - @Operation(summary = "获得班次结果分页") - @PreAuthorize("@ss.hasPermission('biz:shift-result:query')") - public CommonResult> getShiftResultPage(@Valid ShiftResultPageReqVO pageReqVO) { - PageResult pageResult = shiftResultService.getShiftResultPage(pageReqVO); - return success(BeanUtils.toBean(pageResult, ShiftResultRespVO.class)); - } - - @GetMapping("/export-excel") - @Operation(summary = "导出班次结果 Excel") - @PreAuthorize("@ss.hasPermission('biz:shift-result:export')") - @OperateLog(type = EXPORT) - public void exportShiftResultExcel(@Valid ShiftResultPageReqVO pageReqVO, - HttpServletResponse response) throws IOException { - pageReqVO.setPageSize(PageParam.PAGE_SIZE_NONE); - List list = shiftResultService.getShiftResultPage(pageReqVO).getList(); - // 导出 Excel - ExcelUtils.write(response, "班次结果.xls", "数据", ShiftResultRespVO.class, - BeanUtils.toBean(list, ShiftResultRespVO.class)); - } - -} \ No newline at end of file +package com.ningxia.yunxi.chemmes.module.biz.controller.admin.shiftresult; + +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 com.ningxia.yunxi.chemmes.framework.common.pojo.PageParam; +import com.ningxia.yunxi.chemmes.framework.common.pojo.PageResult; +import com.ningxia.yunxi.chemmes.framework.common.pojo.CommonResult; +import com.ningxia.yunxi.chemmes.framework.common.util.object.BeanUtils; +import static com.ningxia.yunxi.chemmes.framework.common.pojo.CommonResult.success; + +import com.ningxia.yunxi.chemmes.framework.excel.core.util.ExcelUtils; + +import com.ningxia.yunxi.chemmes.framework.operatelog.core.annotations.OperateLog; +import static com.ningxia.yunxi.chemmes.framework.operatelog.core.enums.OperateTypeEnum.*; + +import com.ningxia.yunxi.chemmes.module.biz.controller.admin.shiftresult.vo.*; +import com.ningxia.yunxi.chemmes.module.biz.dal.dataobject.shiftresult.ShiftResultDO; +import com.ningxia.yunxi.chemmes.module.biz.service.shiftresult.ShiftResultService; + +@Tag(name = "管理后台 - 班次结果") +@RestController +@RequestMapping("/biz/shift-result") +@Validated +public class ShiftResultController { + + @Resource + private ShiftResultService shiftResultService; + + @PostMapping("/create") + @Operation(summary = "创建班次结果") + @PreAuthorize("@ss.hasPermission('biz:shift-result:create')") + public CommonResult createShiftResult(@Valid @RequestBody ShiftResultSaveReqVO createReqVO) { + return success(shiftResultService.createShiftResult(createReqVO)); + } + + @PutMapping("/update") + @Operation(summary = "更新班次结果") + @PreAuthorize("@ss.hasPermission('biz:shift-result:update')") + public CommonResult updateShiftResult(@Valid @RequestBody ShiftResultSaveReqVO updateReqVO) { + shiftResultService.updateShiftResult(updateReqVO); + return success(true); + } + + @DeleteMapping("/delete") + @Operation(summary = "删除班次结果") + @Parameter(name = "id", description = "编号", required = true) + @PreAuthorize("@ss.hasPermission('biz:shift-result:delete')") + public CommonResult deleteShiftResult(@RequestParam("id") Integer id) { + shiftResultService.deleteShiftResult(id); + return success(true); + } + + @GetMapping("/get") + @Operation(summary = "获得班次结果") + @Parameter(name = "id", description = "编号", required = true, example = "1024") + @PreAuthorize("@ss.hasPermission('biz:shift-result:query')") + public CommonResult getShiftResult(@RequestParam("id") Integer id) { + ShiftResultDO shiftResult = shiftResultService.getShiftResult(id); + return success(BeanUtils.toBean(shiftResult, ShiftResultRespVO.class)); + } + + @GetMapping("/page") + @Operation(summary = "获得班次结果分页") + @PreAuthorize("@ss.hasPermission('biz:shift-result:query')") + public CommonResult> getShiftResultPage(@Valid ShiftResultPageReqVO pageReqVO) { + PageResult pageResult = shiftResultService.getShiftResultPage(pageReqVO); + return success(BeanUtils.toBean(pageResult, ShiftResultRespVO.class)); + } + + @GetMapping("/export-excel") + @Operation(summary = "导出班次结果 Excel") + @PreAuthorize("@ss.hasPermission('biz:shift-result:export')") + @OperateLog(type = EXPORT) + public void exportShiftResultExcel(@Valid ShiftResultPageReqVO pageReqVO, + HttpServletResponse response) throws IOException { + pageReqVO.setPageSize(PageParam.PAGE_SIZE_NONE); + List list = shiftResultService.getShiftResultPage(pageReqVO).getList(); + // 导出 Excel + ExcelUtils.write(response, "班次结果.xls", "数据", ShiftResultRespVO.class, + BeanUtils.toBean(list, ShiftResultRespVO.class)); + } + @PostMapping("/generate") + @Operation(summary = "生成班次结果") + @PreAuthorize("@ss.hasPermission('biz:shift-result:query')") + public CommonResult generate(@Valid ShiftResultPageReqVO pageReqVO) { + return shiftResultService.generate(pageReqVO); + } +} diff --git a/mes-module-chemmes/mes-module-chemmes-biz/src/main/java/com/ningxia/yunxi/chemmes/module/biz/controller/admin/shiftresult/vo/ShiftResultPageReqVO.java b/mes-module-chemmes/mes-module-chemmes-biz/src/main/java/com/ningxia/yunxi/chemmes/module/biz/controller/admin/shiftresult/vo/ShiftResultPageReqVO.java index acbadfe..42d86bc 100644 --- a/mes-module-chemmes/mes-module-chemmes-biz/src/main/java/com/ningxia/yunxi/chemmes/module/biz/controller/admin/shiftresult/vo/ShiftResultPageReqVO.java +++ b/mes-module-chemmes/mes-module-chemmes-biz/src/main/java/com/ningxia/yunxi/chemmes/module/biz/controller/admin/shiftresult/vo/ShiftResultPageReqVO.java @@ -1,5 +1,6 @@ package com.ningxia.yunxi.chemmes.module.biz.controller.admin.shiftresult.vo; +import com.fasterxml.jackson.annotation.JsonProperty; import com.ningxia.yunxi.chemmes.framework.common.pojo.PageParam; import io.swagger.v3.oas.annotations.media.Schema; import lombok.Data; @@ -9,6 +10,7 @@ import org.springframework.format.annotation.DateTimeFormat; import java.time.LocalDate; import java.time.LocalDateTime; +import java.util.Date; import static com.ningxia.yunxi.chemmes.framework.common.util.date.DateUtils.FORMAT_YEAR_MONTH_DAY_HOUR_MINUTE_SECOND; @@ -20,16 +22,22 @@ public class ShiftResultPageReqVO extends PageParam { @Schema(description = "状态(1启用 2 未启用)", example = "2") private Integer enabledStatus; + /** 年月 */ + @JsonProperty("years") + private Object years; @Schema(description = "开始时间") - @DateTimeFormat(pattern = FORMAT_YEAR_MONTH_DAY_HOUR_MINUTE_SECOND) - private LocalDateTime[] bgnDtime; + @DateTimeFormat(pattern = "yyyy-MM-dd") + private Date bgnDtime; @Schema(description = "结束时间") - @DateTimeFormat(pattern = FORMAT_YEAR_MONTH_DAY_HOUR_MINUTE_SECOND) private LocalDateTime[] endDtime; @Schema(description = "排班月份") private LocalDate month; + + @Schema(description = "班次代码") + private String chgClassType; + } diff --git a/mes-module-chemmes/mes-module-chemmes-biz/src/main/java/com/ningxia/yunxi/chemmes/module/biz/dal/dataobject/shiftconfig/ShiftConfigDO.java b/mes-module-chemmes/mes-module-chemmes-biz/src/main/java/com/ningxia/yunxi/chemmes/module/biz/dal/dataobject/shiftconfig/ShiftConfigDO.java index 301b2ac..8b2f4bb 100644 --- a/mes-module-chemmes/mes-module-chemmes-biz/src/main/java/com/ningxia/yunxi/chemmes/module/biz/dal/dataobject/shiftconfig/ShiftConfigDO.java +++ b/mes-module-chemmes/mes-module-chemmes-biz/src/main/java/com/ningxia/yunxi/chemmes/module/biz/dal/dataobject/shiftconfig/ShiftConfigDO.java @@ -4,6 +4,7 @@ import com.baomidou.mybatisplus.annotation.KeySequence; import com.baomidou.mybatisplus.annotation.TableId; import com.baomidou.mybatisplus.annotation.TableName; import com.ningxia.yunxi.chemmes.framework.mybatis.core.dataobject.BaseDO; +import com.ningxia.yunxi.chemmes.framework.mybatis.core.dataobject.BaseDOWithoutLogic; import com.sun.xml.bind.v2.TODO; import lombok.*; @@ -22,7 +23,7 @@ import java.time.LocalTime; @Builder @NoArgsConstructor @AllArgsConstructor -public class ShiftConfigDO extends BaseDO { +public class ShiftConfigDO extends BaseDOWithoutLogic { /** * 自增字段 diff --git a/mes-module-chemmes/mes-module-chemmes-biz/src/main/java/com/ningxia/yunxi/chemmes/module/biz/dal/dataobject/shiftresult/ShiftResultDO.java b/mes-module-chemmes/mes-module-chemmes-biz/src/main/java/com/ningxia/yunxi/chemmes/module/biz/dal/dataobject/shiftresult/ShiftResultDO.java index c015c63..1cb3819 100644 --- a/mes-module-chemmes/mes-module-chemmes-biz/src/main/java/com/ningxia/yunxi/chemmes/module/biz/dal/dataobject/shiftresult/ShiftResultDO.java +++ b/mes-module-chemmes/mes-module-chemmes-biz/src/main/java/com/ningxia/yunxi/chemmes/module/biz/dal/dataobject/shiftresult/ShiftResultDO.java @@ -4,6 +4,7 @@ import com.baomidou.mybatisplus.annotation.KeySequence; import com.baomidou.mybatisplus.annotation.TableId; import com.baomidou.mybatisplus.annotation.TableName; import com.ningxia.yunxi.chemmes.framework.mybatis.core.dataobject.BaseDO; +import com.ningxia.yunxi.chemmes.framework.mybatis.core.dataobject.BaseDOWithoutLogic; import com.sun.xml.bind.v2.TODO; import lombok.*; @@ -23,7 +24,7 @@ import java.time.LocalDateTime; @Builder @NoArgsConstructor @AllArgsConstructor -public class ShiftResultDO extends BaseDO { +public class ShiftResultDO extends BaseDOWithoutLogic { /** * 自增字段 diff --git a/mes-module-chemmes/mes-module-chemmes-biz/src/main/java/com/ningxia/yunxi/chemmes/module/biz/dal/mysql/shiftconfig/ShiftConfigMapper.java b/mes-module-chemmes/mes-module-chemmes-biz/src/main/java/com/ningxia/yunxi/chemmes/module/biz/dal/mysql/shiftconfig/ShiftConfigMapper.java index ea868bf..7efa9a1 100644 --- a/mes-module-chemmes/mes-module-chemmes-biz/src/main/java/com/ningxia/yunxi/chemmes/module/biz/dal/mysql/shiftconfig/ShiftConfigMapper.java +++ b/mes-module-chemmes/mes-module-chemmes-biz/src/main/java/com/ningxia/yunxi/chemmes/module/biz/dal/mysql/shiftconfig/ShiftConfigMapper.java @@ -1,6 +1,5 @@ package com.ningxia.yunxi.chemmes.module.biz.dal.mysql.shiftconfig; -import java.util.*; import com.ningxia.yunxi.chemmes.framework.common.pojo.PageResult; import com.ningxia.yunxi.chemmes.framework.mybatis.core.query.LambdaQueryWrapperX; @@ -21,7 +20,11 @@ public interface ShiftConfigMapper extends BaseMapperX { return selectPage(reqVO, new LambdaQueryWrapperX() .eqIfPresent(ShiftConfigDO::getEnabledStatus, reqVO.getEnabledStatus()) .eqIfPresent(ShiftConfigDO::getChgClassType, reqVO.getChgClassType()) - .orderByDesc(ShiftConfigDO::getId)); + .orderByAsc(ShiftConfigDO::getSeqNo)); } + default void deleteByChgClassType(String chgClassType) { + delete(new LambdaQueryWrapperX() + .eq(ShiftConfigDO::getChgClassType, chgClassType)); + } } \ No newline at end of file diff --git a/mes-module-chemmes/mes-module-chemmes-biz/src/main/java/com/ningxia/yunxi/chemmes/module/biz/dal/mysql/shiftresult/ShiftResultMapper.java b/mes-module-chemmes/mes-module-chemmes-biz/src/main/java/com/ningxia/yunxi/chemmes/module/biz/dal/mysql/shiftresult/ShiftResultMapper.java index 8f8d30a..617c55d 100644 --- a/mes-module-chemmes/mes-module-chemmes-biz/src/main/java/com/ningxia/yunxi/chemmes/module/biz/dal/mysql/shiftresult/ShiftResultMapper.java +++ b/mes-module-chemmes/mes-module-chemmes-biz/src/main/java/com/ningxia/yunxi/chemmes/module/biz/dal/mysql/shiftresult/ShiftResultMapper.java @@ -2,6 +2,8 @@ package com.ningxia.yunxi.chemmes.module.biz.dal.mysql.shiftresult; import java.util.*; +import cn.hutool.core.util.ObjectUtil; +import com.github.yulichang.wrapper.MPJLambdaWrapper; import com.ningxia.yunxi.chemmes.framework.common.pojo.PageResult; import com.ningxia.yunxi.chemmes.framework.mybatis.core.query.LambdaQueryWrapperX; import com.ningxia.yunxi.chemmes.framework.mybatis.core.mapper.BaseMapperX; @@ -18,12 +20,14 @@ import com.ningxia.yunxi.chemmes.module.biz.controller.admin.shiftresult.vo.*; public interface ShiftResultMapper extends BaseMapperX { default PageResult selectPage(ShiftResultPageReqVO reqVO) { - return selectPage(reqVO, new LambdaQueryWrapperX() - .eqIfPresent(ShiftResultDO::getEnabledStatus, reqVO.getEnabledStatus()) - .betweenIfPresent(ShiftResultDO::getBgnDtime, reqVO.getBgnDtime()) - .betweenIfPresent(ShiftResultDO::getEndDtime, reqVO.getEndDtime()) - .eqIfPresent(ShiftResultDO::getMonth, reqVO.getMonth()) - .orderByDesc(ShiftResultDO::getId)); + LambdaQueryWrapperX wrapper = new LambdaQueryWrapperX<>(); + wrapper.orderByAsc(ShiftResultDO::getBgnDtime); + + if (ObjectUtil.isNotEmpty(reqVO.getYears())) { + wrapper.likeRight(ShiftResultDO::getMonth, reqVO.getYears().toString()); + } + + return selectPage(reqVO, wrapper); } } \ No newline at end of file diff --git a/mes-module-chemmes/mes-module-chemmes-biz/src/main/java/com/ningxia/yunxi/chemmes/module/biz/service/shiftconfig/ShiftConfigService.java b/mes-module-chemmes/mes-module-chemmes-biz/src/main/java/com/ningxia/yunxi/chemmes/module/biz/service/shiftconfig/ShiftConfigService.java index e71a26d..ab981a7 100644 --- a/mes-module-chemmes/mes-module-chemmes-biz/src/main/java/com/ningxia/yunxi/chemmes/module/biz/service/shiftconfig/ShiftConfigService.java +++ b/mes-module-chemmes/mes-module-chemmes-biz/src/main/java/com/ningxia/yunxi/chemmes/module/biz/service/shiftconfig/ShiftConfigService.java @@ -1,55 +1,55 @@ -package com.ningxia.yunxi.chemmes.module.biz.service.shiftconfig; - -import java.util.*; -import javax.validation.*; -import com.ningxia.yunxi.chemmes.module.biz.controller.admin.shiftconfig.vo.*; -import com.ningxia.yunxi.chemmes.module.biz.dal.dataobject.shiftconfig.ShiftConfigDO; -import com.ningxia.yunxi.chemmes.framework.common.pojo.PageResult; -import com.ningxia.yunxi.chemmes.framework.common.pojo.PageParam; - -/** - * 班次循环配置 Service 接口 - * - * @author 管理员 - */ -public interface ShiftConfigService { - - /** - * 创建班次循环配置 - * - * @param createReqVO 创建信息 - * @return 编号 - */ - Integer createShiftConfig(@Valid ShiftConfigSaveReqVO createReqVO); - - /** - * 更新班次循环配置 - * - * @param updateReqVO 更新信息 - */ - void updateShiftConfig(@Valid ShiftConfigSaveReqVO updateReqVO); - - /** - * 删除班次循环配置 - * - * @param id 编号 - */ - void deleteShiftConfig(Integer id); - - /** - * 获得班次循环配置 - * - * @param id 编号 - * @return 班次循环配置 - */ - ShiftConfigDO getShiftConfig(Integer id); - - /** - * 获得班次循环配置分页 - * - * @param pageReqVO 分页查询 - * @return 班次循环配置分页 - */ - PageResult getShiftConfigPage(ShiftConfigPageReqVO pageReqVO); - -} \ No newline at end of file +package com.ningxia.yunxi.chemmes.module.biz.service.shiftconfig; + +import java.util.*; +import javax.validation.*; +import com.ningxia.yunxi.chemmes.module.biz.controller.admin.shiftconfig.vo.*; +import com.ningxia.yunxi.chemmes.module.biz.dal.dataobject.shiftconfig.ShiftConfigDO; +import com.ningxia.yunxi.chemmes.framework.common.pojo.PageResult; +import com.ningxia.yunxi.chemmes.framework.common.pojo.PageParam; + +/** + * 班次循环配置 Service 接口 + * + * @author 管理员 + */ +public interface ShiftConfigService { + + /** + * 创建班次循环配置 + * + * @param createReqVO 创建信息 + * @return 编号 + */ + void createShiftConfig(@Valid ShiftConfigSaveReqVO createReqVO); + + /** + * 更新班次循环配置 + * + * @param updateReqVO 更新信息 + */ + void updateShiftConfig(@Valid ShiftConfigSaveReqVO updateReqVO); + + /** + * 删除班次循环配置 + * + * @param chgClassType 类型 + */ + void deleteShiftConfig(String chgClassType); + + /** + * 获得班次循环配置 + * + * @param id 编号 + * @return 班次循环配置 + */ + ShiftConfigDO getShiftConfig(Integer id); + + /** + * 获得班次循环配置分页 + * + * @param pageReqVO 分页查询 + * @return 班次循环配置分页 + */ + PageResult getShiftConfigPage(ShiftConfigPageReqVO pageReqVO); + +} diff --git a/mes-module-chemmes/mes-module-chemmes-biz/src/main/java/com/ningxia/yunxi/chemmes/module/biz/service/shiftconfig/ShiftConfigServiceImpl.java b/mes-module-chemmes/mes-module-chemmes-biz/src/main/java/com/ningxia/yunxi/chemmes/module/biz/service/shiftconfig/ShiftConfigServiceImpl.java index a011e34..e7f5821 100644 --- a/mes-module-chemmes/mes-module-chemmes-biz/src/main/java/com/ningxia/yunxi/chemmes/module/biz/service/shiftconfig/ShiftConfigServiceImpl.java +++ b/mes-module-chemmes/mes-module-chemmes-biz/src/main/java/com/ningxia/yunxi/chemmes/module/biz/service/shiftconfig/ShiftConfigServiceImpl.java @@ -1,5 +1,7 @@ package com.ningxia.yunxi.chemmes.module.biz.service.shiftconfig; +import cn.hutool.core.util.ObjectUtil; +import com.baomidou.mybatisplus.core.conditions.update.LambdaUpdateWrapper; import com.ningxia.yunxi.chemmes.framework.common.pojo.PageResult; import com.ningxia.yunxi.chemmes.framework.common.util.object.BeanUtils; import com.ningxia.yunxi.chemmes.module.biz.controller.admin.shiftconfig.vo.ShiftConfigPageReqVO; @@ -10,6 +12,7 @@ import org.springframework.stereotype.Service; import org.springframework.validation.annotation.Validated; import javax.annotation.Resource; +import java.util.List; /** * 班次循环配置 Service 实现类 @@ -24,12 +27,21 @@ public class ShiftConfigServiceImpl implements ShiftConfigService { private ShiftConfigMapper shiftConfigMapper; @Override - public Integer createShiftConfig(ShiftConfigSaveReqVO createReqVO) { - // 插入 - ShiftConfigDO shiftConfig = BeanUtils.toBean(createReqVO, ShiftConfigDO.class); - shiftConfigMapper.insert(shiftConfig); + public void createShiftConfig(ShiftConfigSaveReqVO createReqVO) { + List entityList = createReqVO.getShiftConfigList(); + + if (ObjectUtil.isEmpty(entityList)) { + return; + } + //删除旧数据 + shiftConfigMapper.deleteByChgClassType(createReqVO.getChgClassType()); + // 批量设置属性并保存新数据 + entityList.forEach(entity -> { + entity.setChgClassType(createReqVO.getChgClassType()); + }); + shiftConfigMapper.insertBatch(entityList); // 返回 - return shiftConfig.getId(); + } @Override @@ -42,11 +54,9 @@ public class ShiftConfigServiceImpl implements ShiftConfigService { } @Override - public void deleteShiftConfig(Integer id) { - // 校验存在 - validateShiftConfigExists(id); - // 删除 - shiftConfigMapper.deleteById(id); + public void deleteShiftConfig(String chgClassType) { + + shiftConfigMapper.deleteByChgClassType(chgClassType); } private void validateShiftConfigExists(Integer id) { diff --git a/mes-module-chemmes/mes-module-chemmes-biz/src/main/java/com/ningxia/yunxi/chemmes/module/biz/service/shiftresult/ShiftResultService.java b/mes-module-chemmes/mes-module-chemmes-biz/src/main/java/com/ningxia/yunxi/chemmes/module/biz/service/shiftresult/ShiftResultService.java index 4931b5e..4afedf5 100644 --- a/mes-module-chemmes/mes-module-chemmes-biz/src/main/java/com/ningxia/yunxi/chemmes/module/biz/service/shiftresult/ShiftResultService.java +++ b/mes-module-chemmes/mes-module-chemmes-biz/src/main/java/com/ningxia/yunxi/chemmes/module/biz/service/shiftresult/ShiftResultService.java @@ -1,55 +1,58 @@ -package com.ningxia.yunxi.chemmes.module.biz.service.shiftresult; - -import java.util.*; -import javax.validation.*; -import com.ningxia.yunxi.chemmes.module.biz.controller.admin.shiftresult.vo.*; -import com.ningxia.yunxi.chemmes.module.biz.dal.dataobject.shiftresult.ShiftResultDO; -import com.ningxia.yunxi.chemmes.framework.common.pojo.PageResult; -import com.ningxia.yunxi.chemmes.framework.common.pojo.PageParam; - -/** - * 班次结果 Service 接口 - * - * @author 管理员 - */ -public interface ShiftResultService { - - /** - * 创建班次结果 - * - * @param createReqVO 创建信息 - * @return 编号 - */ - Integer createShiftResult(@Valid ShiftResultSaveReqVO createReqVO); - - /** - * 更新班次结果 - * - * @param updateReqVO 更新信息 - */ - void updateShiftResult(@Valid ShiftResultSaveReqVO updateReqVO); - - /** - * 删除班次结果 - * - * @param id 编号 - */ - void deleteShiftResult(Integer id); - - /** - * 获得班次结果 - * - * @param id 编号 - * @return 班次结果 - */ - ShiftResultDO getShiftResult(Integer id); - - /** - * 获得班次结果分页 - * - * @param pageReqVO 分页查询 - * @return 班次结果分页 - */ - PageResult getShiftResultPage(ShiftResultPageReqVO pageReqVO); - -} \ No newline at end of file +package com.ningxia.yunxi.chemmes.module.biz.service.shiftresult; + +import java.util.*; +import javax.validation.*; + +import com.ningxia.yunxi.chemmes.framework.common.pojo.CommonResult; +import com.ningxia.yunxi.chemmes.module.biz.controller.admin.shiftresult.vo.*; +import com.ningxia.yunxi.chemmes.module.biz.dal.dataobject.shiftresult.ShiftResultDO; +import com.ningxia.yunxi.chemmes.framework.common.pojo.PageResult; +import com.ningxia.yunxi.chemmes.framework.common.pojo.PageParam; + +/** + * 班次结果 Service 接口 + * + * @author 管理员 + */ +public interface ShiftResultService { + + /** + * 创建班次结果 + * + * @param createReqVO 创建信息 + * @return 编号 + */ + Integer createShiftResult(@Valid ShiftResultSaveReqVO createReqVO); + + /** + * 更新班次结果 + * + * @param updateReqVO 更新信息 + */ + void updateShiftResult(@Valid ShiftResultSaveReqVO updateReqVO); + + /** + * 删除班次结果 + * + * @param id 编号 + */ + void deleteShiftResult(Integer id); + + /** + * 获得班次结果 + * + * @param id 编号 + * @return 班次结果 + */ + ShiftResultDO getShiftResult(Integer id); + + /** + * 获得班次结果分页 + * + * @param pageReqVO 分页查询 + * @return 班次结果分页 + */ + PageResult getShiftResultPage(ShiftResultPageReqVO pageReqVO); + + CommonResult generate(ShiftResultPageReqVO pageReqVO); +} diff --git a/mes-module-chemmes/mes-module-chemmes-biz/src/main/java/com/ningxia/yunxi/chemmes/module/biz/service/shiftresult/ShiftResultServiceImpl.java b/mes-module-chemmes/mes-module-chemmes-biz/src/main/java/com/ningxia/yunxi/chemmes/module/biz/service/shiftresult/ShiftResultServiceImpl.java index cd19e4f..07fdce2 100644 --- a/mes-module-chemmes/mes-module-chemmes-biz/src/main/java/com/ningxia/yunxi/chemmes/module/biz/service/shiftresult/ShiftResultServiceImpl.java +++ b/mes-module-chemmes/mes-module-chemmes-biz/src/main/java/com/ningxia/yunxi/chemmes/module/biz/service/shiftresult/ShiftResultServiceImpl.java @@ -1,15 +1,31 @@ package com.ningxia.yunxi.chemmes.module.biz.service.shiftresult; +import cn.hutool.core.util.ObjectUtil; +import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; +import com.ningxia.yunxi.chemmes.framework.common.pojo.CommonResult; import com.ningxia.yunxi.chemmes.framework.common.pojo.PageResult; import com.ningxia.yunxi.chemmes.framework.common.util.object.BeanUtils; +import com.ningxia.yunxi.chemmes.framework.tenant.core.context.TenantContextHolder; import com.ningxia.yunxi.chemmes.module.biz.controller.admin.shiftresult.vo.ShiftResultPageReqVO; import com.ningxia.yunxi.chemmes.module.biz.controller.admin.shiftresult.vo.ShiftResultSaveReqVO; +import com.ningxia.yunxi.chemmes.module.biz.dal.dataobject.shiftconfig.ShiftConfigDO; import com.ningxia.yunxi.chemmes.module.biz.dal.dataobject.shiftresult.ShiftResultDO; +import com.ningxia.yunxi.chemmes.module.biz.dal.mysql.shiftconfig.ShiftConfigMapper; import com.ningxia.yunxi.chemmes.module.biz.dal.mysql.shiftresult.ShiftResultMapper; import org.springframework.stereotype.Service; import org.springframework.validation.annotation.Validated; import javax.annotation.Resource; +import javax.sql.DataSource; +import java.sql.Connection; +import java.sql.PreparedStatement; +import java.time.LocalDate; +import java.time.LocalDateTime; +import java.time.LocalTime; +import java.util.ArrayList; +import java.util.List; + +import static com.ningxia.yunxi.chemmes.framework.security.core.util.SecurityFrameworkUtils.getLoginUserId; /** * 班次结果 Service 实现类 @@ -22,6 +38,8 @@ public class ShiftResultServiceImpl implements ShiftResultService { @Resource private ShiftResultMapper shiftResultMapper; + @Resource + private ShiftConfigMapper shiftConfigMapper; @Override public Integer createShiftResult(ShiftResultSaveReqVO createReqVO) { @@ -65,4 +83,96 @@ public class ShiftResultServiceImpl implements ShiftResultService { return shiftResultMapper.selectPage(pageReqVO); } + @Resource + private DataSource dataSource; + + @Override + public CommonResult generate(ShiftResultPageReqVO pageReqVO) { + // 查询班次配置 + LambdaQueryWrapper queryWrapper = new LambdaQueryWrapper<>(); + queryWrapper.eq(ShiftConfigDO::getChgClassType, pageReqVO.getChgClassType()); + queryWrapper.orderByAsc(ShiftConfigDO::getSeqNo); + List configList = shiftConfigMapper.selectList(queryWrapper); + + if (ObjectUtil.isEmpty(configList)) { + return CommonResult.error(400, "该倒班类型" + ("1".equals(pageReqVO.getChgClassType()) ? "四班三倒" : "三班两倒") + "未配置班次信息"); + } + + // 确定每天的班次数量和工作小时数 + int shiftsPerDay = "1".equals(pageReqVO.getChgClassType()) ? 3 : ("2".equals(pageReqVO.getChgClassType()) ? 2 : 0); + int shiftHour = shiftsPerDay == 3 ? 8 : (shiftsPerDay == 2 ? 12 : 0); + if (shiftsPerDay == 0) { + return CommonResult.error(400, "不支持的班次类型"); + } + + // 删除全表数据 + shiftResultMapper.delete(null); + + Long userId = getLoginUserId(); // 用户ID + Long tenantId = TenantContextHolder.getTenantId(); // 租户ID + // 使用 JDBC 原生批量插入 + String sql = "INSERT INTO tba_shift_result (class_group, class_rate, bgn_dtime, end_dtime, month, shift_hour, create_time, update_time,creator,updater,tenant_id) VALUES (?, ?, ?, ?, ?, ?, NOW(), NOW(),?,?,?)"; + int batchSize = 1000; + int totalRecords = 366 * shiftsPerDay; + + try (Connection conn = dataSource.getConnection(); + PreparedStatement ps = conn.prepareStatement(sql)) { + conn.setAutoCommit(false); + + LocalDate startDate = pageReqVO.getBgnDtime().toInstant().atZone(java.time.ZoneOffset.systemDefault()).toLocalDate(); + int configSize = configList.size(); + int batchCount = 0; + + for (int day = 0; day < 366; day++) { + LocalDate currentDate = startDate.plusDays(day); + LocalDate month = currentDate.withDayOfMonth(1); + + for (int shiftIndex = 0; shiftIndex < shiftsPerDay; shiftIndex++) { + int configIndex = (day * shiftsPerDay + shiftIndex) % configSize; + ShiftConfigDO config = configList.get(configIndex); + + ps.setString(1, config.getClassGroup()); + ps.setString(2, config.getClassRate()); + ps.setObject(3, currentDate.atTime(config.getBgnDtime())); + ps.setObject(4, combineDateTime(currentDate, config.getEndDtime())); + ps.setObject(5, month); + ps.setInt(6, shiftHour); + ps.setLong(7, userId); // creator + ps.setLong(8, userId); // updater + ps.setLong(9, tenantId); // tenant_id + ps.addBatch(); + batchCount++; + + if (batchCount >= batchSize) { + ps.executeBatch(); + conn.commit(); + batchCount = 0; + } + } + } + + // 执行剩余的批次 + if (batchCount > 0) { + ps.executeBatch(); + conn.commit(); + } + + } catch (Exception e) { + return CommonResult.error(500, "批量插入失败: " + e.getMessage()); + } + + return CommonResult.success(true); + } + + /** + * 组合日期和时间,处理结束时间为0点的情况 + */ + private LocalDateTime combineDateTime(LocalDate date, LocalTime localTime) { + LocalDateTime result = date.atTime(localTime); + // 只有结束时间是 0 点时,日期才自动加一天 + if (localTime.getHour() == 0 && localTime.getMinute() == 0) { + result = result.plusDays(1); + } + return result; + } } diff --git a/mes-module-infra/mes-module-infra-biz/pom.xml b/mes-module-infra/mes-module-infra-biz/pom.xml index 770136b..8838792 100644 --- a/mes-module-infra/mes-module-infra-biz/pom.xml +++ b/mes-module-infra/mes-module-infra-biz/pom.xml @@ -13,8 +13,8 @@ org.apache.maven.plugins maven-compiler-plugin - 16 - 16 + 1.8 + 1.8 diff --git a/mes-ui/mes-ui-admin-vue3/src/api/biz/shiftconfig/index.ts b/mes-ui/mes-ui-admin-vue3/src/api/biz/shiftconfig/index.ts index 0af76e4..5357100 100644 --- a/mes-ui/mes-ui-admin-vue3/src/api/biz/shiftconfig/index.ts +++ b/mes-ui/mes-ui-admin-vue3/src/api/biz/shiftconfig/index.ts @@ -1,43 +1,49 @@ -import request from '@/config/axios' - -export interface ShiftConfigVO { - id: number - classGroup: string - classRate: string - enabledStatus: number - remark: string - seqNo: number - chgClassType: string - bgnDtime: localtime - endDtime: localtime -} - -// 查询班次循环配置分页 -export const getShiftConfigPage = async (params) => { - return await request.get({ url: `/biz/shift-config/page`, params }) -} - -// 查询班次循环配置详情 -export const getShiftConfig = async (id: number) => { - return await request.get({ url: `/biz/shift-config/get?id=` + id }) -} - -// 新增班次循环配置 -export const createShiftConfig = async (data: ShiftConfigVO) => { - return await request.post({ url: `/biz/shift-config/create`, data }) -} - -// 修改班次循环配置 -export const updateShiftConfig = async (data: ShiftConfigVO) => { - return await request.put({ url: `/biz/shift-config/update`, data }) -} - -// 删除班次循环配置 -export const deleteShiftConfig = async (id: number) => { - return await request.delete({ url: `/biz/shift-config/delete?id=` + id }) -} - -// 导出班次循环配置 Excel -export const exportShiftConfig = async (params) => { - return await request.download({ url: `/biz/shift-config/export-excel`, params }) -} \ No newline at end of file +import request from '@/config/axios' + +export interface ShiftConfigVO { + id: number + classGroup: string + classRate: string + enabledStatus: number + remark: string + seqNo: number + chgClassType: string + bgnDtime: Date + endDtime: Date + shiftConfigList:[] +} + +// 查询班次循环配置分页 +export const getShiftConfigPage = async (params) => { + return await request.get({ url: `/biz/shift-config/page`, params }) +} + +// 查询班次循环配置详情 +export const getShiftConfig = async (id: number) => { + return await request.get({ url: `/biz/shift-config/get?id=` + id }) +} + +// 新增班次循环配置 +export const createShiftConfig = async (data: ShiftConfigVO) => { + return await request.post({ url: `/biz/shift-config/create`, data }) +} + +// 修改班次循环配置 +export const updateShiftConfig = async (data: ShiftConfigVO) => { + return await request.put({ url: `/biz/shift-config/update`, data }) +} + +// 删除班次循环配置 +export const deleteShiftConfig = async (chgClassType: string) => { + return await request.delete({ url: `/biz/shift-config/delete?chgClassType=` + chgClassType }) +} + +// 导出班次循环配置 Excel +export const exportShiftConfig = async (params) => { + return await request.download({ url: `/biz/shift-config/export-excel`, params }) +} + +// 生成排班结果 +export const generateShiftSchedule = async (params) => { + return await request.post({ url: `/biz/shift-config/generate`, params }) +} diff --git a/mes-ui/mes-ui-admin-vue3/src/api/biz/shiftresult/index.ts b/mes-ui/mes-ui-admin-vue3/src/api/biz/shiftresult/index.ts index d5b5b07..f62110c 100644 --- a/mes-ui/mes-ui-admin-vue3/src/api/biz/shiftresult/index.ts +++ b/mes-ui/mes-ui-admin-vue3/src/api/biz/shiftresult/index.ts @@ -1,43 +1,48 @@ -import request from '@/config/axios' - -export interface ShiftResultVO { - id: number - classGroup: string - classRate: string - enabledStatus: number - remark: string - bgnDtime: Date - endDtime: Date - shiftHour: number - month: localdate -} - -// 查询班次结果分页 -export const getShiftResultPage = async (params) => { - return await request.get({ url: `/biz/shift-result/page`, params }) -} - -// 查询班次结果详情 -export const getShiftResult = async (id: number) => { - return await request.get({ url: `/biz/shift-result/get?id=` + id }) -} - -// 新增班次结果 -export const createShiftResult = async (data: ShiftResultVO) => { - return await request.post({ url: `/biz/shift-result/create`, data }) -} - -// 修改班次结果 -export const updateShiftResult = async (data: ShiftResultVO) => { - return await request.put({ url: `/biz/shift-result/update`, data }) -} - -// 删除班次结果 -export const deleteShiftResult = async (id: number) => { - return await request.delete({ url: `/biz/shift-result/delete?id=` + id }) -} - -// 导出班次结果 Excel -export const exportShiftResult = async (params) => { - return await request.download({ url: `/biz/shift-result/export-excel`, params }) -} \ No newline at end of file +import request from '@/config/axios' + +export interface ShiftResultVO { + id: number + classGroup: string + classRate: string + enabledStatus: number + remark: string + bgnDtime: Date + endDtime: Date + shiftHour: number + month: Date +} + +// 查询班次结果分页 +export const getShiftResultPage = async (params) => { + return await request.get({ url: `/biz/shift-result/page`, params }) +} + +// 查询班次结果详情 +export const getShiftResult = async (id: number) => { + return await request.get({ url: `/biz/shift-result/get?id=` + id }) +} + +// 新增班次结果 +export const createShiftResult = async (data: ShiftResultVO) => { + return await request.post({ url: `/biz/shift-result/create`, data }) +} + +// 修改班次结果 +export const updateShiftResult = async (data: ShiftResultVO) => { + return await request.put({ url: `/biz/shift-result/update`, data }) +} + +// 删除班次结果 +export const deleteShiftResult = async (id: number) => { + return await request.delete({ url: `/biz/shift-result/delete?id=` + id }) +} + +// 导出班次结果 Excel +export const exportShiftResult = async (params) => { + return await request.download({ url: `/biz/shift-result/export-excel`, params }) +} + +// 生成排班结果 +export const generateShiftSchedule = async (params) => { + return await request.post({ url: `/biz/shift-result/generate`, params }) +} diff --git a/mes-ui/mes-ui-admin-vue3/src/utils/dict.ts b/mes-ui/mes-ui-admin-vue3/src/utils/dict.ts index e699a1f..b19a8cb 100644 --- a/mes-ui/mes-ui-admin-vue3/src/utils/dict.ts +++ b/mes-ui/mes-ui-admin-vue3/src/utils/dict.ts @@ -228,6 +228,7 @@ export enum DICT_TYPE { MAT_TYPE='mat_type', // 物料类型 MAT_UNIT='mat_unit', // 物料单位 SHIFT_WORK_TYPE='shift_work_type', // 倒班类型 + SHIFT_SCHEDULE='shift_schedule', // 班组 TEAM_OR_GROUP='team_or_group', // 班组 DEVICE_TYPE='device_type', // 设备类型 DEVICE_STATUS='device_status', // 设备状态 diff --git a/mes-ui/mes-ui-admin-vue3/src/utils/formatTime.ts b/mes-ui/mes-ui-admin-vue3/src/utils/formatTime.ts index c436951..966e8ac 100644 --- a/mes-ui/mes-ui-admin-vue3/src/utils/formatTime.ts +++ b/mes-ui/mes-ui-admin-vue3/src/utils/formatTime.ts @@ -195,12 +195,11 @@ export function formatPast2(ms) { /** * element plus 的时间 Formatter 实现,使用 YYYY-MM-DD HH:mm:ss 格式 * - * @param row 行数据 - * @param column 字段 + * @param _row 行数据 + * @param _column 字段 * @param cellValue 字段值 */ -// @ts-ignore -export const dateFormatter = (row, column, cellValue): string => { +export const dateFormatter = (_row, _column, cellValue): string => { if (!cellValue) { return '' } @@ -210,12 +209,11 @@ export const dateFormatter = (row, column, cellValue): string => { /** * element plus 的时间 Formatter 实现,使用 YYYY-MM-DD 格式 * - * @param row 行数据 - * @param column 字段 + * @param _row 行数据 + * @param _column 字段 * @param cellValue 字段值 */ -// @ts-ignore -export const dateFormatter2 = (row, column, cellValue) => { +export const dateFormatter2 = (_row, _column, cellValue) => { if (!cellValue) { return } @@ -224,18 +222,24 @@ export const dateFormatter2 = (row, column, cellValue) => { /** * element plus 的时间 Formatter 实现,使用 YYYY-MM 格式 * - * @param row 行数据 - * @param column 字段 + * @param _row 行数据 + * @param _column 字段 * @param cellValue 字段值 */ -// @ts-ignore -export const dateFormatter3 = (row, column, cellValue) => { +export const dateFormatter3 = (_row, _column, cellValue) => { if (!cellValue) { return } return formatDate(cellValue, 'YYYY-MM') } +export const dateFormatter4 = (_row, _column, cellValue) => { + if (!cellValue) { + return + } + return formatDate(cellValue, 'YYYY-MM-DD HH:mm') +} + /** * 设置起始日期,时间为00:00:00 * @param param 传入日期 diff --git a/mes-ui/mes-ui-admin-vue3/src/views/biz/customer/index.vue b/mes-ui/mes-ui-admin-vue3/src/views/biz/customer/index.vue index 125c725..faac9df 100644 --- a/mes-ui/mes-ui-admin-vue3/src/views/biz/customer/index.vue +++ b/mes-ui/mes-ui-admin-vue3/src/views/biz/customer/index.vue @@ -106,7 +106,7 @@