Merge branch 'dev' of http://47.97.8.94:19527/yj/zn-cloud into dev
This commit is contained in:
commit
7391de6ca6
@ -32,6 +32,7 @@ public interface ErrorCodeConstants {
|
||||
ErrorCode OA_SECOND_NOT_EXISTS = new ErrorCode(1_009_001_108, "借调申请不存在");
|
||||
ErrorCode OA_IMPREST_NOT_EXISTS = new ErrorCode(1_009_001_109, "备用金申请不存在");
|
||||
ErrorCode OA_INCENTIVE_NOT_EXISTS = new ErrorCode(1_009_001_110, "奖惩申请不存在");
|
||||
ErrorCode OA_WORK_TASK_NOT_EXISTS = new ErrorCode(1_009_001_110, "工作任务不存在");
|
||||
|
||||
// ========== 流程模型 1-009-002-000 ==========
|
||||
ErrorCode MODEL_KEY_EXISTS = new ErrorCode(1_009_002_000, "已经存在流程标识为【{}】的流程");
|
||||
|
@ -19,8 +19,8 @@ public enum BpmTaskRuleScriptEnum {
|
||||
LEADER_X2(21L, "流程发起人的二级领导"),
|
||||
LEADER_X3(22L, "流程发起人的三级领导"),
|
||||
LEADER_X4(23L, "审批人的一级领导"),
|
||||
LEADER_X5(24L, "调岗部门领导");
|
||||
|
||||
LEADER_X5(24L, "调岗部门领导"),
|
||||
LEADER_X6(25L, "分配任务的责任人");
|
||||
|
||||
/**
|
||||
* 脚本编号
|
||||
|
@ -7,9 +7,9 @@ import cn.iocoder.yudao.module.bpm.controller.admin.definition.vo.process.BpmPro
|
||||
import cn.iocoder.yudao.module.bpm.controller.admin.definition.vo.process.BpmProcessDefinitionPageReqVO;
|
||||
import cn.iocoder.yudao.module.bpm.controller.admin.definition.vo.process.BpmProcessDefinitionRespVO;
|
||||
import cn.iocoder.yudao.module.bpm.service.definition.BpmProcessDefinitionService;
|
||||
import io.swagger.v3.oas.annotations.tags.Tag;
|
||||
import io.swagger.v3.oas.annotations.Parameter;
|
||||
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.GetMapping;
|
||||
@ -18,8 +18,8 @@ import org.springframework.web.bind.annotation.RequestParam;
|
||||
import org.springframework.web.bind.annotation.RestController;
|
||||
|
||||
import javax.annotation.Resource;
|
||||
|
||||
import java.util.List;
|
||||
import java.util.stream.Collectors;
|
||||
|
||||
import static cn.iocoder.yudao.framework.common.pojo.CommonResult.success;
|
||||
|
||||
@ -45,7 +45,10 @@ public class BpmProcessDefinitionController {
|
||||
// @PreAuthorize("@ss.hasPermission('bpm:process-definition:query')")
|
||||
public CommonResult<List<BpmProcessDefinitionRespVO>> getProcessDefinitionList(
|
||||
BpmProcessDefinitionListReqVO listReqVO) {
|
||||
return success(bpmDefinitionService.getProcessDefinitionList(listReqVO));
|
||||
|
||||
List<BpmProcessDefinitionRespVO> respVOS = bpmDefinitionService.getProcessDefinitionList(listReqVO);
|
||||
respVOS = respVOS.stream().filter(data -> !data.getId().contains("work_task")).collect(Collectors.toList());
|
||||
return success(respVOS);
|
||||
}
|
||||
|
||||
@GetMapping ("/get-bpmn-xml")
|
||||
|
@ -0,0 +1,121 @@
|
||||
package cn.iocoder.yudao.module.bpm.controller.admin.oa;
|
||||
|
||||
import cn.iocoder.yudao.framework.common.pojo.CommonResult;
|
||||
import cn.iocoder.yudao.framework.common.pojo.PageResult;
|
||||
import cn.iocoder.yudao.module.bpm.controller.admin.oa.vo.worktask.BpmOAWorkTaskPageReqVO;
|
||||
import cn.iocoder.yudao.module.bpm.controller.admin.oa.vo.worktask.BpmOAWorkTaskReqVO;
|
||||
import cn.iocoder.yudao.module.bpm.controller.admin.oa.vo.worktask.BpmOAWorkTaskRespVO;
|
||||
import cn.iocoder.yudao.module.bpm.convert.oa.BpmOAWorkTaskConvert;
|
||||
import cn.iocoder.yudao.module.bpm.dal.dataobject.oa.BpmOAWorkTaskDO;
|
||||
import cn.iocoder.yudao.module.bpm.service.oa.BpmOAWorkTaskService;
|
||||
import cn.iocoder.yudao.module.bpm.service.task.BpmTaskService;
|
||||
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.user.AdminUserApi;
|
||||
import cn.iocoder.yudao.module.system.api.user.dto.AdminUserRespDTO;
|
||||
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.validation.annotation.Validated;
|
||||
import org.springframework.web.bind.annotation.*;
|
||||
|
||||
import javax.annotation.Resource;
|
||||
import javax.validation.Valid;
|
||||
|
||||
import static cn.iocoder.yudao.framework.common.pojo.CommonResult.success;
|
||||
import static cn.iocoder.yudao.framework.security.core.util.SecurityFrameworkUtils.getLoginUserId;
|
||||
|
||||
/**
|
||||
* OA 任务分配 Controller
|
||||
*
|
||||
* @author 姚君
|
||||
|
||||
*/
|
||||
@Tag(name = "管理后台 - OA 任务分配")
|
||||
@RestController
|
||||
@RequestMapping("/bpm/oa/worktask")
|
||||
@Validated
|
||||
public class BpmOAWorkTaskController {
|
||||
|
||||
@Resource
|
||||
private BpmOAWorkTaskService workTaskService;
|
||||
|
||||
@Resource
|
||||
private AdminUserApi userApi;
|
||||
|
||||
@Resource
|
||||
private DeptApi deptApi;
|
||||
|
||||
@Resource
|
||||
private BpmTaskService taskService;
|
||||
|
||||
@PostMapping("/create")
|
||||
@Operation(summary = "创建任务分配")
|
||||
public CommonResult<Long> createLeave(@Valid @RequestBody BpmOAWorkTaskReqVO createReqVO) {
|
||||
return success(workTaskService.createWorkTask(getLoginUserId(), createReqVO));
|
||||
}
|
||||
|
||||
@GetMapping("/get")
|
||||
@Operation(summary = "获得任务分配")
|
||||
@Parameter(name = "id", description = "编号", required = true, example = "1024")
|
||||
public CommonResult<BpmOAWorkTaskRespVO> getTask(@RequestParam("id") Long id) {
|
||||
|
||||
BpmOAWorkTaskDO workTask = workTaskService.getWorkTask(id);
|
||||
//获得 责任人用户信息
|
||||
AdminUserRespDTO userRespDTO = userApi.getUser(workTask.getReceiverUserId()).getCheckedData();
|
||||
//获得 责任人部门信息
|
||||
DeptRespDTO deptRespDTO = deptApi.getDept(userRespDTO.getDeptId()).getCheckedData();
|
||||
|
||||
String taskId = null;
|
||||
if (workTask.getWorkTaskStatus() != 3) {
|
||||
|
||||
//获得TASK
|
||||
taskId = taskService.getCurrentTaskIdByProcessInstanceId(workTask.getProcessInstanceId());
|
||||
}
|
||||
|
||||
return success(BpmOAWorkTaskConvert.INSTANCE.convert(workTask, userRespDTO, deptRespDTO, taskId));
|
||||
}
|
||||
|
||||
@GetMapping("/getByProcessInstanceId")
|
||||
@Operation(summary = "获得任务分配")
|
||||
@Parameter(name = "id", description = "编号", required = true, example = "1024")
|
||||
public CommonResult<BpmOAWorkTaskDO> getTask(@RequestParam("id") String processInstanceId) {
|
||||
|
||||
BpmOAWorkTaskDO workTask = workTaskService.getWorkTaskByProcessInstanceId(processInstanceId);
|
||||
|
||||
return success(workTask);
|
||||
}
|
||||
|
||||
@PutMapping("/add")
|
||||
@Operation(summary = "添加任务跟踪数据【全量传】")
|
||||
public CommonResult<Boolean> addTrackInfo(@RequestBody BpmOAWorkTaskReqVO updateReqVO) {
|
||||
|
||||
workTaskService.addTrackInfo(updateReqVO) ;
|
||||
return success(true);
|
||||
}
|
||||
|
||||
@PostMapping("/update")
|
||||
@Operation(summary = "更新工作任务的状态和进度")
|
||||
public CommonResult<Boolean> updateWorkTask(@RequestBody BpmOAWorkTaskReqVO createReqVO) {
|
||||
|
||||
workTaskService.updateWorkTask(createReqVO) ;
|
||||
return success(true);
|
||||
}
|
||||
|
||||
@GetMapping("/page")
|
||||
@Operation(summary = "获得工作任务分页")
|
||||
public CommonResult<PageResult<BpmOAWorkTaskRespVO>> getPage(@Valid BpmOAWorkTaskPageReqVO pageVO) {
|
||||
|
||||
PageResult<BpmOAWorkTaskRespVO> pageResult = workTaskService.getPage(getLoginUserId(), pageVO);
|
||||
return success(pageResult);
|
||||
}
|
||||
|
||||
@GetMapping("/my-page")
|
||||
@Operation(summary = "获得我的任务分页")
|
||||
public CommonResult<PageResult<BpmOAWorkTaskRespVO>> getMyPage(@Valid BpmOAWorkTaskPageReqVO pageVO) {
|
||||
|
||||
PageResult<BpmOAWorkTaskRespVO> pageResult = workTaskService.getMyPage(getLoginUserId(), pageVO);
|
||||
return success(pageResult);
|
||||
}
|
||||
|
||||
}
|
@ -0,0 +1,45 @@
|
||||
package cn.iocoder.yudao.module.bpm.controller.admin.oa.vo.worktask;
|
||||
|
||||
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 BpmOAWorkTaskPageReqVO extends PageParam {
|
||||
|
||||
@Schema(description = "发起人用户ID")
|
||||
private Long fromUserId;
|
||||
|
||||
@Schema(description = "用户ID")
|
||||
private Long userId;
|
||||
|
||||
@Schema(description = "部门编号")
|
||||
private Long deptId;
|
||||
|
||||
@Schema(description = "用户ID列表")
|
||||
private List<Long> userIdList;
|
||||
|
||||
@Schema(description = "状态")
|
||||
private Integer workTaskStatus;
|
||||
|
||||
@Schema(description = "任务名称")
|
||||
private String taskName;
|
||||
|
||||
@Schema(description = "是否查看我的任务分配标识 | 1:我的 2:全部")
|
||||
private Integer isMyTask;
|
||||
|
||||
@DateTimeFormat(pattern = FORMAT_YEAR_MONTH_DAY_HOUR_MINUTE_SECOND)
|
||||
@Schema(description = "申请时间")
|
||||
private LocalDateTime[] createTime;
|
||||
}
|
@ -0,0 +1,74 @@
|
||||
package cn.iocoder.yudao.module.bpm.controller.admin.oa.vo.worktask;
|
||||
|
||||
import cn.iocoder.yudao.module.bpm.controller.admin.upload.UploadUserFile;
|
||||
import io.swagger.v3.oas.annotations.media.Schema;
|
||||
import lombok.Data;
|
||||
import org.springframework.format.annotation.DateTimeFormat;
|
||||
|
||||
import javax.validation.constraints.NotNull;
|
||||
import java.time.LocalDate;
|
||||
import java.util.List;
|
||||
|
||||
import static cn.iocoder.yudao.framework.common.util.date.DateUtils.FORMAT_YEAR_MONTH_DAY;
|
||||
|
||||
/**
|
||||
* 工作任务 创建 Request VO
|
||||
*
|
||||
* @author yj
|
||||
*/
|
||||
@Schema(description = "管理后台 - 工作任务分配 Request VO")
|
||||
@Data
|
||||
public class BpmOAWorkTaskReqVO {
|
||||
|
||||
@Schema(description = "id", requiredMode = Schema.RequiredMode.REQUIRED)
|
||||
private Long id;
|
||||
|
||||
@Schema(description = "任务名称", requiredMode = Schema.RequiredMode.REQUIRED)
|
||||
@NotNull(message = "任务名称不能为空")
|
||||
private String taskName;
|
||||
|
||||
@Schema(description = "任务内容", requiredMode = Schema.RequiredMode.REQUIRED)
|
||||
@NotNull(message = "任务内容不能为空")
|
||||
private String taskContent;
|
||||
|
||||
@Schema(description = "任务级别", requiredMode = Schema.RequiredMode.REQUIRED)
|
||||
@NotNull(message = "任务级别不能为空")
|
||||
private Integer level;
|
||||
|
||||
@Schema(description = "任务的开始时间", requiredMode = Schema.RequiredMode.REQUIRED)
|
||||
@NotNull(message = "截止时间不能为空")
|
||||
@DateTimeFormat(pattern = FORMAT_YEAR_MONTH_DAY)
|
||||
private LocalDate startTime;
|
||||
|
||||
@Schema(description = "任务的截止时间", requiredMode = Schema.RequiredMode.REQUIRED)
|
||||
@NotNull(message = "截止时间不能为空")
|
||||
@DateTimeFormat(pattern = FORMAT_YEAR_MONTH_DAY)
|
||||
private LocalDate endTime;
|
||||
|
||||
@Schema(description = "责任人ID", requiredMode = Schema.RequiredMode.REQUIRED)
|
||||
@NotNull(message = "责任人不能为空")
|
||||
private Long userId;
|
||||
|
||||
@Schema(description = "任务进度百分比", requiredMode = Schema.RequiredMode.REQUIRED)
|
||||
private Long schedule ;
|
||||
|
||||
@Schema(description = "工作任务状态", requiredMode = Schema.RequiredMode.REQUIRED, example = "1:待启动,2:进行中,3.已完成,4.延期, 5.搁置")
|
||||
private Integer workTaskStatus ;
|
||||
|
||||
@Schema(description = "搁置或延期原因")
|
||||
private String reason;
|
||||
|
||||
@Schema(description = "搁置后 任务开始日期")
|
||||
@DateTimeFormat(pattern = FORMAT_YEAR_MONTH_DAY)
|
||||
private LocalDate shelveStartTime;
|
||||
|
||||
@Schema(description = "搁置后 任务结束日期")
|
||||
@DateTimeFormat(pattern = FORMAT_YEAR_MONTH_DAY)
|
||||
private LocalDate shelveEndTime;
|
||||
|
||||
@Schema(description = "上传文件", requiredMode = Schema.RequiredMode.REQUIRED)
|
||||
private List<UploadUserFile> fileItems;
|
||||
|
||||
@Schema(description = "跟踪内容集合")
|
||||
private BpmOAWorkTaskTrackInfo trackInfos;
|
||||
}
|
@ -0,0 +1,94 @@
|
||||
package cn.iocoder.yudao.module.bpm.controller.admin.oa.vo.worktask;
|
||||
|
||||
import cn.iocoder.yudao.module.bpm.controller.admin.oa.vo.BpmOABaseRespVO;
|
||||
import io.swagger.v3.oas.annotations.media.Schema;
|
||||
import lombok.Data;
|
||||
import lombok.EqualsAndHashCode;
|
||||
import lombok.ToString;
|
||||
import org.springframework.format.annotation.DateTimeFormat;
|
||||
|
||||
import javax.validation.constraints.NotNull;
|
||||
import java.time.LocalDate;
|
||||
import java.time.LocalDateTime;
|
||||
import java.util.List;
|
||||
|
||||
import static cn.iocoder.yudao.framework.common.util.date.DateUtils.FORMAT_YEAR_MONTH_DAY;
|
||||
import static cn.iocoder.yudao.framework.common.util.date.DateUtils.FORMAT_YEAR_MONTH_DAY_HOUR_MINUTE_SECOND;
|
||||
|
||||
@Schema(description = "管理后台 - 报销响应数据 Response VO")
|
||||
@Data
|
||||
@EqualsAndHashCode(callSuper = true)
|
||||
@ToString(callSuper = true)
|
||||
public class BpmOAWorkTaskRespVO extends BpmOABaseRespVO {
|
||||
|
||||
@Schema(description = "任务名称", requiredMode = Schema.RequiredMode.REQUIRED)
|
||||
@NotNull(message = "任务名称不能为空")
|
||||
private String taskName;
|
||||
|
||||
@Schema(description = "任务内容", requiredMode = Schema.RequiredMode.REQUIRED)
|
||||
@NotNull(message = "任务内容不能为空")
|
||||
private String taskContent;
|
||||
|
||||
@Schema(description = "任务级别", requiredMode = Schema.RequiredMode.REQUIRED)
|
||||
@NotNull(message = "任务级别不能为空")
|
||||
private Integer level;
|
||||
|
||||
@Schema(description = "任务的开始时间", requiredMode = Schema.RequiredMode.REQUIRED)
|
||||
@NotNull(message = "截止时间不能为空")
|
||||
@DateTimeFormat(pattern = FORMAT_YEAR_MONTH_DAY)
|
||||
private LocalDate startTime;
|
||||
|
||||
@Schema(description = "任务的截止时间", requiredMode = Schema.RequiredMode.REQUIRED)
|
||||
@NotNull(message = "截止时间不能为空")
|
||||
@DateTimeFormat(pattern = FORMAT_YEAR_MONTH_DAY)
|
||||
private LocalDate endTime;
|
||||
|
||||
@Schema(description = "发起人用户ID", requiredMode = Schema.RequiredMode.REQUIRED)
|
||||
@NotNull(message = "责任名称不能为空")
|
||||
private Long fromUserId;
|
||||
|
||||
@Schema(description = "发起人名称", requiredMode = Schema.RequiredMode.REQUIRED)
|
||||
@NotNull(message = "责任名称不能为空")
|
||||
private String fromUserName;
|
||||
|
||||
@Schema(description = "责任人用户ID", requiredMode = Schema.RequiredMode.REQUIRED)
|
||||
@NotNull(message = "责任名称不能为空")
|
||||
private Long receiverUserId;
|
||||
|
||||
@Schema(description = "责任人名称", requiredMode = Schema.RequiredMode.REQUIRED)
|
||||
@NotNull(message = "责任名称不能为空")
|
||||
private String userName;
|
||||
|
||||
@Schema(description = "责任人部门名称", requiredMode = Schema.RequiredMode.REQUIRED)
|
||||
@NotNull(message = "部门名称不能为空")
|
||||
private String deptName;
|
||||
|
||||
@Schema(description = "任务进度百分比", requiredMode = Schema.RequiredMode.REQUIRED)
|
||||
@NotNull(message = "任务进度百分比")
|
||||
private Long schedule ;
|
||||
|
||||
@Schema(description = "工作任务状态", requiredMode = Schema.RequiredMode.REQUIRED, example = "1:待启动,2:进行中,3.已完成,4.延期, 5.搁置")
|
||||
@NotNull(message = "工作任务状态")
|
||||
private Integer workTaskStatus ;
|
||||
|
||||
@Schema(description = "搁置或延期原因")
|
||||
private String reason;
|
||||
|
||||
@Schema(description = "搁置后 任务开始日期")
|
||||
@DateTimeFormat(pattern = FORMAT_YEAR_MONTH_DAY)
|
||||
private LocalDate shelveStartTime;
|
||||
|
||||
@Schema(description = "搁置后 任务结束日期")
|
||||
@DateTimeFormat(pattern = FORMAT_YEAR_MONTH_DAY)
|
||||
private LocalDate shelveEndTime;
|
||||
|
||||
@Schema(description = "跟踪内容集合")
|
||||
private List<BpmOAWorkTaskTrackInfo> trackInfo;
|
||||
|
||||
@Schema(description = "更新时间")
|
||||
@DateTimeFormat(pattern = FORMAT_YEAR_MONTH_DAY_HOUR_MINUTE_SECOND)
|
||||
private LocalDateTime updateTime;
|
||||
|
||||
@Schema(description = "TaskId")
|
||||
private String taskId;
|
||||
}
|
@ -0,0 +1,15 @@
|
||||
package cn.iocoder.yudao.module.bpm.controller.admin.oa.vo.worktask;
|
||||
|
||||
import io.swagger.v3.oas.annotations.media.Schema;
|
||||
import lombok.Data;
|
||||
|
||||
@Schema(description = "管理后台 - 跟踪内容集合 VO")
|
||||
@Data
|
||||
public class BpmOAWorkTaskTrackInfo {
|
||||
|
||||
@Schema(description = "跟踪内容", example = "11111112122222")
|
||||
private String trackContent;
|
||||
|
||||
@Schema(description = "跟踪内容提交时间", example = "2024-05-12 12:00:44")
|
||||
private String trackTime;
|
||||
}
|
@ -6,17 +6,24 @@ import cn.iocoder.yudao.framework.datapermission.core.annotation.DataPermission;
|
||||
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.task.vo.instance.*;
|
||||
import cn.iocoder.yudao.module.bpm.controller.admin.task.vo.task.BpmTaskRespVO;
|
||||
import cn.iocoder.yudao.module.bpm.convert.task.BpmTaskConvert;
|
||||
import cn.iocoder.yudao.module.bpm.service.message.BpmMessageService;
|
||||
import cn.iocoder.yudao.module.bpm.service.task.BpmProcessInstanceService;
|
||||
import io.swagger.v3.oas.annotations.tags.Tag;
|
||||
import io.swagger.v3.oas.annotations.Parameter;
|
||||
import cn.iocoder.yudao.module.bpm.service.task.BpmTaskService;
|
||||
import cn.iocoder.yudao.module.system.api.user.AdminUserApi;
|
||||
import cn.iocoder.yudao.module.system.api.user.dto.AdminUserRespDTO;
|
||||
import io.swagger.v3.oas.annotations.Operation;
|
||||
import io.swagger.v3.oas.annotations.Parameter;
|
||||
import io.swagger.v3.oas.annotations.tags.Tag;
|
||||
import org.flowable.engine.runtime.ProcessInstance;
|
||||
import org.flowable.task.api.Task;
|
||||
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.validation.Valid;
|
||||
|
||||
import java.util.List;
|
||||
|
||||
import static cn.iocoder.yudao.framework.common.pojo.CommonResult.success;
|
||||
@ -31,6 +38,15 @@ public class BpmProcessInstanceController {
|
||||
@Resource
|
||||
private BpmProcessInstanceService processInstanceService;
|
||||
|
||||
@Resource
|
||||
private BpmTaskService bpmTaskService;
|
||||
|
||||
@Resource
|
||||
private AdminUserApi adminUserApi;
|
||||
|
||||
@Resource
|
||||
private BpmMessageService messageService;
|
||||
|
||||
@GetMapping("/my-page")
|
||||
@Operation(summary = "获得我的实例分页列表", description = "在【我的流程】菜单中,进行调用")
|
||||
@PreAuthorize("@ss.hasPermission('bpm:process-instance:query')")
|
||||
@ -57,6 +73,28 @@ public class BpmProcessInstanceController {
|
||||
return success(processInstanceService.getProcessInstanceVO(id));
|
||||
}
|
||||
|
||||
@GetMapping("/urge-approve")
|
||||
@Operation(summary = "审批提醒", description = "在【流程详细】界面中,进行调用")
|
||||
@Parameter(name = "id", description = "流程实例的编号", required = true)
|
||||
@PreAuthorize("@ss.hasPermission('bpm:process-instance:query')")
|
||||
@DataPermission(enable = false)
|
||||
public CommonResult<Boolean> urgeApprove(@RequestParam("id") String id) {
|
||||
|
||||
//获得流程实例
|
||||
ProcessInstance processInstance = processInstanceService.getProcessInstance(id);
|
||||
if (processInstance != null) {
|
||||
// 获得任务列表
|
||||
List<BpmTaskRespVO> BpmTaskRespVOs = bpmTaskService.getTaskListByProcessInstanceId(id);
|
||||
AdminUserRespDTO startUser = adminUserApi.getUser(Long.valueOf(processInstance.getStartUserId())).getCheckedData();
|
||||
Task task = bpmTaskService.getTasksByProcessInstanceId(id).get(0);
|
||||
//发送信息通知
|
||||
messageService.sendMessageWhenTaskAssigned(
|
||||
BpmTaskConvert.INSTANCE.convert(processInstance, startUser, task, BpmTaskRespVOs));
|
||||
}
|
||||
|
||||
return success(true);
|
||||
}
|
||||
|
||||
@DeleteMapping("/cancel")
|
||||
@Operation(summary = "取消流程实例", description = "撤回发起的流程")
|
||||
@PreAuthorize("@ss.hasPermission('bpm:process-instance:cancel')")
|
||||
|
@ -1,6 +1,7 @@
|
||||
package cn.iocoder.yudao.module.bpm.convert.message;
|
||||
|
||||
import cn.iocoder.yudao.framework.common.util.date.DateUtils;
|
||||
import cn.iocoder.yudao.module.bpm.dal.dataobject.oa.BpmOAWorkTaskDO;
|
||||
import cn.iocoder.yudao.module.system.api.notify.dto.NotifySendSingleToUserReqDTO;
|
||||
import cn.iocoder.yudao.module.system.api.sms.dto.send.SmsSendSingleToUserReqDTO;
|
||||
import cn.iocoder.yudao.module.system.api.subscribe.dto.MsgData;
|
||||
@ -37,7 +38,8 @@ public interface BpmMessageConvert {
|
||||
* @param miniProgramState 小程序的状态
|
||||
* @return
|
||||
*/
|
||||
default SubscribeMessageReqDTO convertApprovalResultNotification(String openId, String processInstanceName, String time, String result, String reason, String processInstanceId,
|
||||
default SubscribeMessageReqDTO convertApprovalResultNotification(String openId, String processInstanceName,
|
||||
String time, String result, String reason, String processInstanceId,
|
||||
String miniProgramState) {
|
||||
SubscribeMessageReqDTO message = new SubscribeMessageReqDTO();
|
||||
message.setToUser(openId);
|
||||
@ -91,7 +93,8 @@ public interface BpmMessageConvert {
|
||||
* @param miniProgramState 小程序的状态
|
||||
* @return
|
||||
*/
|
||||
default SubscribeMessageReqDTO convertProcessToDoReminder(String openId, String processInstanceName, String startUserNickname, String time, String schedule, String processInstanceId, String miniProgramState) {
|
||||
default SubscribeMessageReqDTO convertProcessToDoReminder(String openId, String processInstanceName,
|
||||
String startUserNickname, String time, String schedule, String processInstanceId, String miniProgramState) {
|
||||
SubscribeMessageReqDTO message = new SubscribeMessageReqDTO();
|
||||
message.setToUser(openId);
|
||||
message.setTemplateId("3cP4btlFSSiZk65qVewN_WoT_bh0OfUkYzzTsADOrR4");
|
||||
@ -123,4 +126,56 @@ public interface BpmMessageConvert {
|
||||
message.setPage("pages/bpm/task/todo/examineApprove?id=" + processInstanceId);
|
||||
return message;
|
||||
}
|
||||
|
||||
/**
|
||||
* @param openId 微信小程序唯一id
|
||||
* @param workTaskDO 任务对象
|
||||
* @param nickname 发布人姓名
|
||||
* @param miniProgramState 小程序的状态
|
||||
* @return
|
||||
*/
|
||||
default SubscribeMessageReqDTO convertWorkTask(String openId, String processInstanceName, BpmOAWorkTaskDO workTaskDO,
|
||||
String nickname, String time, String miniProgramState, Boolean isFlag) {
|
||||
|
||||
SubscribeMessageReqDTO message = new SubscribeMessageReqDTO();
|
||||
message.setToUser(openId);
|
||||
message.setTemplateId("fH29xjNb8pe-7onQ-wE3QrBAC-y8aaC_oosYZKNMtzM");
|
||||
|
||||
//消息类型
|
||||
MsgData noticeType = new MsgData();
|
||||
noticeType.setName("phrase8");
|
||||
noticeType.setValue(processInstanceName);
|
||||
message.addData(noticeType);
|
||||
|
||||
//发送人
|
||||
MsgData publishMan = new MsgData();
|
||||
publishMan.setName("thing16");
|
||||
publishMan.setValue(nickname);
|
||||
message.addData(publishMan);
|
||||
|
||||
//发送时间
|
||||
MsgData createTime = new MsgData();
|
||||
createTime.setName("time3");
|
||||
createTime.setValue(time);
|
||||
message.addData(createTime);
|
||||
|
||||
//消息内容
|
||||
MsgData content = new MsgData();
|
||||
content.setName("thing2");
|
||||
if (isFlag) {
|
||||
content.setValue("你分配的任务已完成!");
|
||||
}else {
|
||||
content.setValue("你收到了一个新的任务!");
|
||||
}
|
||||
message.addData(content);
|
||||
|
||||
message.setMiniprogramState(miniProgramState);
|
||||
if (isFlag) {
|
||||
message.setPage("subPages/task/taskAssignment?userId=" + workTaskDO.getReceiverUserId());
|
||||
}else {
|
||||
message.setPage("subPages/task/taskDispose?id=" + workTaskDO.getId());
|
||||
}
|
||||
|
||||
return message;
|
||||
}
|
||||
}
|
||||
|
@ -0,0 +1,34 @@
|
||||
package cn.iocoder.yudao.module.bpm.convert.oa;
|
||||
|
||||
import cn.iocoder.yudao.framework.common.util.object.BeanUtils;
|
||||
import cn.iocoder.yudao.module.bpm.controller.admin.oa.vo.worktask.BpmOAWorkTaskReqVO;
|
||||
import cn.iocoder.yudao.module.bpm.controller.admin.oa.vo.worktask.BpmOAWorkTaskRespVO;
|
||||
import cn.iocoder.yudao.module.bpm.dal.dataobject.oa.BpmOAWorkTaskDO;
|
||||
import cn.iocoder.yudao.module.system.api.dept.dto.DeptRespDTO;
|
||||
import cn.iocoder.yudao.module.system.api.user.dto.AdminUserRespDTO;
|
||||
import org.mapstruct.Mapper;
|
||||
import org.mapstruct.factory.Mappers;
|
||||
|
||||
/**
|
||||
* 分配任务 Convert
|
||||
*
|
||||
* @author 芋艿
|
||||
*/
|
||||
@Mapper
|
||||
public interface BpmOAWorkTaskConvert {
|
||||
|
||||
BpmOAWorkTaskConvert INSTANCE = Mappers.getMapper(BpmOAWorkTaskConvert.class);
|
||||
|
||||
BpmOAWorkTaskDO convert(BpmOAWorkTaskReqVO bean);
|
||||
|
||||
default BpmOAWorkTaskRespVO convert(BpmOAWorkTaskDO workTask, AdminUserRespDTO userRespDTO, DeptRespDTO deptRespDTO, String taskId) {
|
||||
|
||||
BpmOAWorkTaskRespVO respVO = BeanUtils.toBean(workTask, BpmOAWorkTaskRespVO.class);
|
||||
|
||||
respVO.setUserName(userRespDTO.getNickname());
|
||||
respVO.setDeptName(deptRespDTO.getName());
|
||||
respVO.setTaskId(taskId);
|
||||
|
||||
return respVO;
|
||||
}
|
||||
}
|
@ -0,0 +1,122 @@
|
||||
package cn.iocoder.yudao.module.bpm.dal.dataobject.oa;
|
||||
|
||||
import cn.iocoder.yudao.framework.mybatis.core.dataobject.BaseDO;
|
||||
import cn.iocoder.yudao.module.bpm.controller.admin.oa.vo.worktask.BpmOAWorkTaskTrackInfo;
|
||||
import cn.iocoder.yudao.module.bpm.controller.admin.upload.UploadUserFile;
|
||||
import cn.iocoder.yudao.module.bpm.enums.task.BpmProcessInstanceResultEnum;
|
||||
import com.baomidou.mybatisplus.annotation.TableField;
|
||||
import com.baomidou.mybatisplus.annotation.TableId;
|
||||
import com.baomidou.mybatisplus.annotation.TableName;
|
||||
import com.baomidou.mybatisplus.extension.handlers.JacksonTypeHandler;
|
||||
import lombok.*;
|
||||
|
||||
import java.time.LocalDate;
|
||||
import java.util.List;
|
||||
|
||||
/**
|
||||
* OA 分配任务 DO
|
||||
*
|
||||
* @author 姚君
|
||||
|
||||
*/
|
||||
@TableName(value ="bpm_oa_work_task", autoResultMap = true)
|
||||
@Data
|
||||
@EqualsAndHashCode(callSuper = true)
|
||||
@ToString(callSuper = true)
|
||||
@Builder
|
||||
@NoArgsConstructor
|
||||
@AllArgsConstructor
|
||||
public class BpmOAWorkTaskDO extends BaseDO {
|
||||
|
||||
/**
|
||||
* 工作任务表单主键
|
||||
*/
|
||||
@TableId
|
||||
private Long id;
|
||||
|
||||
/**
|
||||
* 发起人
|
||||
*/
|
||||
private Long fromUserId;
|
||||
|
||||
/**
|
||||
* 发起人部门编号
|
||||
*/
|
||||
private Long fromDeptId;
|
||||
|
||||
/**
|
||||
* 接受人
|
||||
*/
|
||||
private Long receiverUserId;
|
||||
|
||||
/**
|
||||
* 任务名称
|
||||
*/
|
||||
private String taskName;
|
||||
/**
|
||||
* 任务内容
|
||||
*/
|
||||
private String taskContent;
|
||||
/**
|
||||
* 任务级别
|
||||
* 字典值 参考 bpm_oa_work_task_type
|
||||
*/
|
||||
private Integer level;
|
||||
/**
|
||||
* 开始时间
|
||||
*/
|
||||
private LocalDate startTime;
|
||||
/**
|
||||
* 截止时间
|
||||
*/
|
||||
private LocalDate endTime;
|
||||
/**
|
||||
* 任务进度 百分比
|
||||
*/
|
||||
private Long schedule;
|
||||
/**
|
||||
* 任务的状态 任务自身的状态 1:待启动,2:进行中,3.已完成,4.延期, 5.搁置
|
||||
* 字典值 参考 bpm_oa_work_task_status
|
||||
*/
|
||||
private Integer workTaskStatus ;
|
||||
/**
|
||||
* 搁置或延期 原因
|
||||
*/
|
||||
private String reason;
|
||||
/**
|
||||
* 搁置后 任务开始日期
|
||||
*/
|
||||
private LocalDate shelveStartTime;
|
||||
/**
|
||||
* 搁置后 任务结束日期
|
||||
*/
|
||||
private LocalDate shelveEndTime;
|
||||
|
||||
/**
|
||||
* 任务分配BPM流程的结果
|
||||
*
|
||||
* 枚举 {@link BpmProcessInstanceResultEnum}
|
||||
* 考虑到简单,所以直接复用了 BpmProcessInstanceResultEnum 枚举,也可以自己定义一个枚举哈
|
||||
*/
|
||||
private Integer result;
|
||||
|
||||
/**
|
||||
* 对应的流程编号
|
||||
*
|
||||
* 关联 ProcessInstance 的 id 属性
|
||||
*/
|
||||
private String processInstanceId;
|
||||
|
||||
/**
|
||||
* 附件基本信息
|
||||
*/
|
||||
@TableField(typeHandler = JacksonTypeHandler.class)
|
||||
private List<UploadUserFile> fileItems ;
|
||||
|
||||
/**
|
||||
* 任务跟踪信息
|
||||
*/
|
||||
@TableField(typeHandler = JacksonTypeHandler.class)
|
||||
private List<BpmOAWorkTaskTrackInfo> trackInfo;
|
||||
|
||||
}
|
@ -0,0 +1,46 @@
|
||||
package cn.iocoder.yudao.module.bpm.dal.mysql.oa;
|
||||
|
||||
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.oa.vo.worktask.BpmOAWorkTaskPageReqVO;
|
||||
import cn.iocoder.yudao.module.bpm.dal.dataobject.oa.BpmOAWorkTaskDO;
|
||||
import org.apache.ibatis.annotations.Mapper;
|
||||
|
||||
/**
|
||||
* 分配任务 Mapper
|
||||
*
|
||||
* @author yj
|
||||
|
||||
*/
|
||||
@Mapper
|
||||
public interface BpmOAWorkTaskMapper extends BaseMapperX<BpmOAWorkTaskDO> {
|
||||
|
||||
default PageResult<BpmOAWorkTaskDO> selectPage(Long userId, BpmOAWorkTaskPageReqVO reqVO) {
|
||||
|
||||
if (reqVO.getIsMyTask() == 2) {
|
||||
userId = null;
|
||||
}
|
||||
|
||||
return selectPage(reqVO, new LambdaQueryWrapperX<BpmOAWorkTaskDO>()
|
||||
.eqIfPresent(BpmOAWorkTaskDO::getFromUserId, reqVO.getFromUserId())
|
||||
.inIfPresent(BpmOAWorkTaskDO::getReceiverUserId, reqVO.getUserIdList())
|
||||
.eqIfPresent(BpmOAWorkTaskDO::getReceiverUserId, reqVO.getUserId())
|
||||
.likeIfPresent(BpmOAWorkTaskDO::getTaskName, reqVO.getTaskName())
|
||||
.eqIfPresent(BpmOAWorkTaskDO::getWorkTaskStatus, reqVO.getWorkTaskStatus())
|
||||
.betweenIfPresent(BpmOAWorkTaskDO::getCreateTime, reqVO.getCreateTime())
|
||||
.eqIfPresent(BpmOAWorkTaskDO::getFromUserId, userId)
|
||||
.orderByDesc(BpmOAWorkTaskDO::getId));
|
||||
}
|
||||
|
||||
default PageResult<BpmOAWorkTaskDO> selectMyPage(Long userId, BpmOAWorkTaskPageReqVO reqVO) {
|
||||
|
||||
return selectPage(reqVO, new LambdaQueryWrapperX<BpmOAWorkTaskDO>()
|
||||
.eqIfPresent(BpmOAWorkTaskDO::getFromUserId, reqVO.getFromUserId())
|
||||
.likeIfPresent(BpmOAWorkTaskDO::getTaskName, reqVO.getTaskName())
|
||||
.eqIfPresent(BpmOAWorkTaskDO::getWorkTaskStatus, reqVO.getWorkTaskStatus())
|
||||
.betweenIfPresent(BpmOAWorkTaskDO::getCreateTime, reqVO.getCreateTime())
|
||||
.eq(BpmOAWorkTaskDO::getReceiverUserId, userId)
|
||||
.orderByDesc(BpmOAWorkTaskDO::getId));
|
||||
}
|
||||
}
|
@ -18,6 +18,8 @@ public interface BpmProcessInstanceExtMapper extends BaseMapperX<BpmProcessInsta
|
||||
default PageResult<BpmProcessInstanceExtDO> selectCCPage(Long userId, BpmProcessInstanceMyPageReqVO reqVO) {
|
||||
return selectPage(reqVO, new LambdaQueryWrapperX<BpmProcessInstanceExtDO>()
|
||||
// .eqIfPresent(BpmProcessInstanceExtDO::getStartUserId, userId)
|
||||
//只能查询流程标识定义为oa开头的流程
|
||||
.likeIfPresent(BpmProcessInstanceExtDO::getProcessDefinitionId, "oa_")
|
||||
.likeIfPresent(BpmProcessInstanceExtDO::getCcids, "[" + userId + "]")
|
||||
.eqIfPresent(BpmProcessInstanceExtDO::getProcessDefinitionId, reqVO.getProcessDefinitionId())
|
||||
.eqIfPresent(BpmProcessInstanceExtDO::getCategory, reqVO.getCategory())
|
||||
@ -30,6 +32,8 @@ public interface BpmProcessInstanceExtMapper extends BaseMapperX<BpmProcessInsta
|
||||
|
||||
default PageResult<BpmProcessInstanceExtDO> selectPage(Long userId, BpmProcessInstanceMyPageReqVO reqVO) {
|
||||
return selectPage(reqVO, new LambdaQueryWrapperX<BpmProcessInstanceExtDO>()
|
||||
//只能查询流程标识定义为oa开头的流程
|
||||
.likeIfPresent(BpmProcessInstanceExtDO::getProcessDefinitionId, "oa_")
|
||||
.eqIfPresent(BpmProcessInstanceExtDO::getStartUserId, userId)
|
||||
.likeIfPresent(BpmProcessInstanceExtDO::getName, reqVO.getName())
|
||||
.eqIfPresent(BpmProcessInstanceExtDO::getProcessDefinitionId, reqVO.getProcessDefinitionId())
|
||||
@ -57,6 +61,8 @@ public interface BpmProcessInstanceExtMapper extends BaseMapperX<BpmProcessInsta
|
||||
default PageResult<BpmProcessInstanceExtDO> selectStatisticePage(BpmProcessInstanceMyPageReqVO reqVO) {
|
||||
//如果为空,那么查询全部
|
||||
return selectPage(reqVO, new LambdaQueryWrapperX<BpmProcessInstanceExtDO>()
|
||||
//只能查询流程标识定义为oa开头的流程
|
||||
.likeIfPresent(BpmProcessInstanceExtDO::getProcessDefinitionId, "oa_")
|
||||
.likeIfPresent(BpmProcessInstanceExtDO::getName, reqVO.getName())
|
||||
.eqIfPresent(BpmProcessInstanceExtDO::getProcessDefinitionId, reqVO.getProcessDefinitionId())
|
||||
.eqIfPresent(BpmProcessInstanceExtDO::getCategory, reqVO.getCategory())
|
||||
|
@ -44,4 +44,11 @@ public interface BpmTaskExtMapper extends BaseMapperX<BpmTaskExtDO> {
|
||||
.eq(BpmTaskExtDO::getProcessInstanceId, processInstanceId)
|
||||
.eq(BpmTaskExtDO::getResult, BpmProcessInstanceResultEnum.APPROVE.getResult()));
|
||||
}
|
||||
|
||||
default List<BpmTaskExtDO> selectTask(List<String> processInstanceId, Integer result) {
|
||||
|
||||
return selectList(new LambdaQueryWrapperX<BpmTaskExtDO>()
|
||||
.inIfPresent(BpmTaskExtDO::getProcessInstanceId, processInstanceId)
|
||||
.eqIfPresent(BpmTaskExtDO::getResult, result));
|
||||
}
|
||||
}
|
||||
|
@ -0,0 +1,54 @@
|
||||
package cn.iocoder.yudao.module.bpm.framework.flowable.core.behavior.script.impl;
|
||||
|
||||
import cn.hutool.core.collection.CollUtil;
|
||||
import cn.iocoder.yudao.framework.common.util.collection.SetUtils;
|
||||
import cn.iocoder.yudao.module.bpm.controller.admin.task.vo.task.BpmTaskRespVO;
|
||||
import cn.iocoder.yudao.module.bpm.enums.definition.BpmTaskRuleScriptEnum;
|
||||
import cn.iocoder.yudao.module.bpm.framework.flowable.core.behavior.script.BpmTaskAssignScript;
|
||||
import cn.iocoder.yudao.module.bpm.service.task.BpmProcessInstanceService;
|
||||
import cn.iocoder.yudao.module.bpm.service.task.BpmTaskService;
|
||||
import org.flowable.engine.delegate.DelegateExecution;
|
||||
import org.flowable.engine.runtime.ProcessInstance;
|
||||
import org.springframework.context.annotation.Lazy;
|
||||
import org.springframework.stereotype.Component;
|
||||
|
||||
import javax.annotation.Resource;
|
||||
import javax.servlet.http.HttpSession;
|
||||
import java.util.List;
|
||||
import java.util.Set;
|
||||
|
||||
import static cn.iocoder.yudao.framework.security.core.util.SecurityFrameworkUtils.getLoginUserId;
|
||||
import static java.util.Collections.emptySet;
|
||||
|
||||
@Component
|
||||
public class BpmTaskWorkTaskReceiverUserScript implements BpmTaskAssignScript {
|
||||
|
||||
@Resource
|
||||
@Lazy // 解决循环依赖
|
||||
private BpmProcessInstanceService bpmProcessInstanceService;
|
||||
|
||||
@Resource
|
||||
@Lazy // 解决循环依赖
|
||||
private BpmTaskService bpmTaskService ;
|
||||
|
||||
@Resource
|
||||
private HttpSession session;
|
||||
|
||||
@Override
|
||||
public Set<Long> calculateTaskCandidateUsers(DelegateExecution execution) {
|
||||
|
||||
// 获得发起人
|
||||
ProcessInstance processInstance = bpmProcessInstanceService.getProcessInstance(execution.getProcessInstanceId());
|
||||
List<BpmTaskRespVO> bpmTaskRespVOs = bpmTaskService.getTaskListByProcessInstanceId(processInstance.getProcessInstanceId());
|
||||
if (CollUtil.isEmpty(bpmTaskRespVOs)) {
|
||||
return emptySet();
|
||||
}
|
||||
|
||||
return SetUtils.asSet((Long) session.getAttribute(getLoginUserId().toString()));
|
||||
}
|
||||
|
||||
@Override
|
||||
public BpmTaskRuleScriptEnum getEnum() {
|
||||
return BpmTaskRuleScriptEnum.LEADER_X6;
|
||||
}
|
||||
}
|
@ -2,15 +2,16 @@ package cn.iocoder.yudao.module.bpm.service.message;
|
||||
|
||||
import cn.iocoder.yudao.framework.web.config.WebProperties;
|
||||
import cn.iocoder.yudao.module.bpm.convert.message.BpmMessageConvert;
|
||||
import cn.iocoder.yudao.module.bpm.dal.dataobject.oa.BpmOAWorkTaskDO;
|
||||
import cn.iocoder.yudao.module.bpm.dal.dataobject.task.BpmProcessInstanceExtDO;
|
||||
import cn.iocoder.yudao.module.bpm.enums.message.BpmMessageEnum;
|
||||
import cn.iocoder.yudao.module.bpm.enums.task.BpmProcessInstanceResultEnum;
|
||||
import cn.iocoder.yudao.module.bpm.service.message.dto.BpmMessageSendWhenProcessInstanceApproveReqDTO;
|
||||
import cn.iocoder.yudao.module.bpm.service.message.dto.BpmMessageSendWhenProcessInstanceRejectReqDTO;
|
||||
import cn.iocoder.yudao.module.bpm.service.message.dto.BpmMessageSendWhenTaskCreatedReqDTO;
|
||||
import cn.iocoder.yudao.module.bpm.service.oa.BpmOAWorkTaskService;
|
||||
import cn.iocoder.yudao.module.bpm.service.task.BpmProcessInstanceService;
|
||||
import cn.iocoder.yudao.module.system.api.notify.NotifyMessageSendApi;
|
||||
import cn.iocoder.yudao.module.system.api.sms.SmsSendApi;
|
||||
import cn.iocoder.yudao.module.system.api.subscribe.SubscribeMessageSendApi;
|
||||
import cn.iocoder.yudao.module.system.api.user.AdminUserApi;
|
||||
import cn.iocoder.yudao.module.system.api.user.dto.AdminUserRespDTO;
|
||||
@ -36,7 +37,7 @@ import java.util.regex.Pattern;
|
||||
public class BpmMessageServiceImpl implements BpmMessageService {
|
||||
|
||||
@Resource
|
||||
private SmsSendApi smsSendApi;
|
||||
private AdminUserApi userApi;
|
||||
|
||||
@Resource
|
||||
private NotifyMessageSendApi notifyMessageSendApi;
|
||||
@ -51,6 +52,9 @@ public class BpmMessageServiceImpl implements BpmMessageService {
|
||||
@Lazy // 解决循环依赖
|
||||
private BpmProcessInstanceService bpmProcessInstanceService;
|
||||
|
||||
@Resource
|
||||
private BpmOAWorkTaskService workTaskService;
|
||||
|
||||
@Override
|
||||
public void sendMessageWhenProcessInstanceApprove(BpmMessageSendWhenProcessInstanceApproveReqDTO reqDTO) {
|
||||
//审批通过
|
||||
@ -67,14 +71,27 @@ public class BpmMessageServiceImpl implements BpmMessageService {
|
||||
//发送审批结果通知至微信
|
||||
String openId = getUserOpenId(reqDTO.getStartUserId());
|
||||
if (openId != null) {
|
||||
subscribeMessageSendApi.sendApprovalResultNotification(
|
||||
BpmMessageConvert.INSTANCE.convertApprovalResultNotification(
|
||||
openId, reqDTO.getProcessInstanceName(), reqDTO.getCreateTime(), "通过", reqDTO.getReason(),
|
||||
reqDTO.getProcessInstanceId(),
|
||||
/**
|
||||
* 跳转小程序类型:developer为开发版;trial为体验版;formal为正式版;默认为正式版
|
||||
*/
|
||||
"formal"));
|
||||
|
||||
// 获得任务分配数据
|
||||
BpmOAWorkTaskDO workTaskDO = workTaskService.getWorkTaskByProcessInstanceId(reqDTO.getProcessInstanceId());
|
||||
if (workTaskDO != null) {
|
||||
|
||||
String nickName = userApi.getUser(workTaskDO.getReceiverUserId()).getCheckedData().getNickname();
|
||||
|
||||
subscribeMessageSendApi.sendWorkLogComment(BpmMessageConvert.INSTANCE.convertWorkTask(
|
||||
openId, reqDTO.getProcessInstanceName(), workTaskDO, nickName, reqDTO.getCreateTime(),
|
||||
"formal", true));
|
||||
}else {
|
||||
|
||||
subscribeMessageSendApi.sendApprovalResultNotification(
|
||||
BpmMessageConvert.INSTANCE.convertApprovalResultNotification(
|
||||
openId, reqDTO.getProcessInstanceName(), reqDTO.getCreateTime(), "通过", reqDTO.getReason(),
|
||||
reqDTO.getProcessInstanceId(),
|
||||
/**
|
||||
* 跳转小程序类型:developer为开发版;trial为体验版;formal为正式版;默认为正式版
|
||||
*/
|
||||
"formal"));
|
||||
}
|
||||
}
|
||||
|
||||
//当流程全部审批通过
|
||||
@ -147,6 +164,7 @@ public class BpmMessageServiceImpl implements BpmMessageService {
|
||||
// templateParams.put("taskName", reqDTO.getTaskName());
|
||||
templateParams.put("startUserNickname", reqDTO.getStartUserNickname());
|
||||
templateParams.put("detailUrl", getProcessInstanceDetailUrl(reqDTO.getProcessInstanceId()));
|
||||
|
||||
//短信
|
||||
// smsSendApi.sendSingleSmsToAdmin(BpmMessageConvert.INSTANCE.convert(reqDTO.getAssigneeUserId(),
|
||||
// BpmMessageEnum.TASK_ASSIGNED.getSmsTemplateCode(), templateParams));
|
||||
@ -158,10 +176,21 @@ public class BpmMessageServiceImpl implements BpmMessageService {
|
||||
//发送OA流程待办提醒
|
||||
String openId = getUserOpenId(assigneeUserId); //只有在微信小程序登陆过用户才会有openid
|
||||
if (openId != null) {
|
||||
subscribeMessageSendApi.sendProcessToDoReminder(BpmMessageConvert.INSTANCE.convertProcessToDoReminder(
|
||||
openId, reqDTO.getProcessInstanceName(), reqDTO.getStartUserNickname(), reqDTO.getCreateTime(), reqDTO.getSchedule(),
|
||||
reqDTO.getProcessInstanceId(),
|
||||
"formal"));
|
||||
|
||||
// 获得任务分配数据
|
||||
BpmOAWorkTaskDO workTaskDO = workTaskService.getWorkTaskByProcessInstanceId(reqDTO.getProcessInstanceId());
|
||||
if (workTaskDO != null) {
|
||||
|
||||
subscribeMessageSendApi.sendWorkLogComment(BpmMessageConvert.INSTANCE.convertWorkTask(
|
||||
openId, reqDTO.getProcessInstanceName(), workTaskDO, reqDTO.getStartUserNickname(), reqDTO.getCreateTime(),
|
||||
"formal", false));
|
||||
}else {
|
||||
|
||||
subscribeMessageSendApi.sendProcessToDoReminder(BpmMessageConvert.INSTANCE.convertProcessToDoReminder(
|
||||
openId, reqDTO.getProcessInstanceName(), reqDTO.getStartUserNickname(), reqDTO.getCreateTime(), reqDTO.getSchedule(),
|
||||
reqDTO.getProcessInstanceId(),
|
||||
"formal"));
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
@ -0,0 +1,78 @@
|
||||
package cn.iocoder.yudao.module.bpm.service.oa;
|
||||
|
||||
|
||||
import cn.iocoder.yudao.framework.common.pojo.PageResult;
|
||||
import cn.iocoder.yudao.module.bpm.controller.admin.oa.vo.worktask.BpmOAWorkTaskPageReqVO;
|
||||
import cn.iocoder.yudao.module.bpm.controller.admin.oa.vo.worktask.BpmOAWorkTaskReqVO;
|
||||
import cn.iocoder.yudao.module.bpm.controller.admin.oa.vo.worktask.BpmOAWorkTaskRespVO;
|
||||
import cn.iocoder.yudao.module.bpm.dal.dataobject.oa.BpmOAWorkTaskDO;
|
||||
|
||||
import javax.validation.Valid;
|
||||
|
||||
/**
|
||||
* 任务分配 Service 接口
|
||||
*
|
||||
* @author jason
|
||||
|
||||
*/
|
||||
public interface BpmOAWorkTaskService {
|
||||
|
||||
/**
|
||||
* 创建工作任务
|
||||
*
|
||||
* @param userId 用户编号
|
||||
* @param createReqVO 创建信息
|
||||
* @return 编号
|
||||
*/
|
||||
Long createWorkTask(Long userId, @Valid BpmOAWorkTaskReqVO createReqVO);
|
||||
|
||||
/**
|
||||
* 更新工作任务的状态
|
||||
*
|
||||
* @param id 编号
|
||||
* @param result 结果
|
||||
*/
|
||||
void updateWorkTaskResult(Long id, Integer result);
|
||||
|
||||
/**
|
||||
* 获得工作任务详情
|
||||
*
|
||||
* @param id 编号
|
||||
* @return 任务分配
|
||||
*/
|
||||
BpmOAWorkTaskDO getWorkTask(Long id);
|
||||
|
||||
/**
|
||||
* 获得工作任务详情
|
||||
*
|
||||
* @param processInstanceId 流程实例编号
|
||||
* @return 任务分配
|
||||
*/
|
||||
BpmOAWorkTaskDO getWorkTaskByProcessInstanceId(String processInstanceId);
|
||||
|
||||
/**
|
||||
* 更新 工作跟踪日志数据
|
||||
* 因为是所有数据是存储在一个字段,所以是全量更新
|
||||
* @param updateReqVO
|
||||
*
|
||||
*/
|
||||
void addTrackInfo(BpmOAWorkTaskReqVO updateReqVO) ;
|
||||
|
||||
void updateWorkTask(BpmOAWorkTaskReqVO createReqVO) ;
|
||||
|
||||
/**
|
||||
* 获得 任务分配分页
|
||||
* @param loginUserId 用户编号
|
||||
* @param pageVO 分页条件
|
||||
* @return 任务分配分页
|
||||
*/
|
||||
PageResult<BpmOAWorkTaskRespVO> getPage(Long loginUserId, BpmOAWorkTaskPageReqVO pageVO);
|
||||
|
||||
/**
|
||||
* 获得 我的任务分页
|
||||
* @param loginUserId 用户编号
|
||||
* @param pageVO 分页条件
|
||||
* @return 任务分配分页
|
||||
*/
|
||||
PageResult<BpmOAWorkTaskRespVO> getMyPage(Long loginUserId, BpmOAWorkTaskPageReqVO pageVO);
|
||||
}
|
@ -0,0 +1,228 @@
|
||||
package cn.iocoder.yudao.module.bpm.service.oa;
|
||||
|
||||
import cn.iocoder.yudao.framework.common.pojo.PageResult;
|
||||
import cn.iocoder.yudao.framework.common.util.object.BeanUtils;
|
||||
import cn.iocoder.yudao.module.bpm.api.task.BpmProcessInstanceApi;
|
||||
import cn.iocoder.yudao.module.bpm.api.task.dto.BpmProcessInstanceCreateReqDTO;
|
||||
import cn.iocoder.yudao.module.bpm.controller.admin.oa.vo.worktask.BpmOAWorkTaskPageReqVO;
|
||||
import cn.iocoder.yudao.module.bpm.controller.admin.oa.vo.worktask.BpmOAWorkTaskReqVO;
|
||||
import cn.iocoder.yudao.module.bpm.controller.admin.oa.vo.worktask.BpmOAWorkTaskRespVO;
|
||||
import cn.iocoder.yudao.module.bpm.controller.admin.oa.vo.worktask.BpmOAWorkTaskTrackInfo;
|
||||
import cn.iocoder.yudao.module.bpm.controller.admin.upload.UploadUserFile;
|
||||
import cn.iocoder.yudao.module.bpm.convert.oa.BpmOAWorkTaskConvert;
|
||||
import cn.iocoder.yudao.module.bpm.dal.dataobject.oa.BpmOAWorkTaskDO;
|
||||
import cn.iocoder.yudao.module.bpm.dal.dataobject.task.BpmTaskExtDO;
|
||||
import cn.iocoder.yudao.module.bpm.dal.mysql.oa.BpmOAWorkTaskMapper;
|
||||
import cn.iocoder.yudao.module.bpm.enums.task.BpmProcessInstanceResultEnum;
|
||||
import cn.iocoder.yudao.module.bpm.service.task.BpmTaskService;
|
||||
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.user.AdminUserApi;
|
||||
import cn.iocoder.yudao.module.system.api.user.dto.AdminUserRespDTO;
|
||||
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.servlet.http.HttpSession;
|
||||
import java.time.LocalDate;
|
||||
import java.time.LocalDateTime;
|
||||
import java.time.format.DateTimeFormatter;
|
||||
import java.time.temporal.ChronoUnit;
|
||||
import java.util.ArrayList;
|
||||
import java.util.HashMap;
|
||||
import java.util.List;
|
||||
import java.util.Map;
|
||||
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.convertMap;
|
||||
import static cn.iocoder.yudao.module.bpm.enums.ErrorCodeConstants.OA_WORK_TASK_NOT_EXISTS;
|
||||
|
||||
/**
|
||||
* OA 请假申请 Service 实现类
|
||||
*
|
||||
* @author jason
|
||||
|
||||
*/
|
||||
@Service
|
||||
@Validated
|
||||
public class BpmOAWorkTaskServiceImpl extends BpmOABaseService implements BpmOAWorkTaskService {
|
||||
|
||||
/**
|
||||
* OA 请假对应的流程定义 KEY
|
||||
*/
|
||||
public static final String PROCESS_KEY = "work_task";
|
||||
|
||||
@Resource
|
||||
private BpmOAWorkTaskMapper workTaskMapper;
|
||||
|
||||
@Resource
|
||||
private BpmProcessInstanceApi processInstanceApi;
|
||||
|
||||
@Resource
|
||||
private HttpSession session;
|
||||
|
||||
@Resource
|
||||
private AdminUserApi userApi;
|
||||
|
||||
@Resource
|
||||
private DeptApi deptApi;
|
||||
|
||||
@Resource
|
||||
@Lazy
|
||||
private BpmTaskService taskService;
|
||||
|
||||
@Override
|
||||
@Transactional(rollbackFor = Exception.class)
|
||||
public Long createWorkTask(Long userId, BpmOAWorkTaskReqVO createReqVO) {
|
||||
|
||||
//设置 责任人Id
|
||||
session.setAttribute(userId.toString(), createReqVO.getUserId());
|
||||
|
||||
// 获取当前登录用户得信息
|
||||
AdminUserRespDTO userRespDTO = userApi.getUser(userId).getCheckedData();
|
||||
|
||||
BpmOAWorkTaskDO workTask = BpmOAWorkTaskConvert.INSTANCE.convert(createReqVO)
|
||||
.setFromUserId(userId)
|
||||
.setFromDeptId(userRespDTO.getDeptId())
|
||||
.setWorkTaskStatus(1) //默认待启动状态
|
||||
.setReceiverUserId(createReqVO.getUserId())
|
||||
.setResult(BpmProcessInstanceResultEnum.PROCESS.getResult());
|
||||
workTaskMapper.insert(workTask);
|
||||
|
||||
// 发起 BPM 流程
|
||||
Map<String, Object> processInstanceVariables = new HashMap<>();
|
||||
String processInstanceId = processInstanceApi.createProcessInstance(userId,
|
||||
new BpmProcessInstanceCreateReqDTO().setProcessDefinitionKey(PROCESS_KEY)
|
||||
.setVariables(processInstanceVariables).setBusinessKey(String.valueOf(workTask.getId()))).getCheckedData();
|
||||
|
||||
// 将工作流的编号,更新到 OA 请假单中
|
||||
workTaskMapper.updateById(new BpmOAWorkTaskDO().setId(workTask.getId()).setProcessInstanceId(processInstanceId));
|
||||
|
||||
List<UploadUserFile> fileItems = createReqVO.getFileItems() ;
|
||||
//这里的逻辑,如果fileItems不为空,且有数据,那么说明是上传了附件的,则需要更工作流文件表对应的实例Id
|
||||
if (fileItems != null && !fileItems.isEmpty()) {
|
||||
uploadBpmFileProcessInstanceId(processInstanceId,fileItems) ;
|
||||
}
|
||||
return workTask.getId();
|
||||
}
|
||||
|
||||
@Override
|
||||
public void updateWorkTaskResult(Long id, Integer result) {
|
||||
validateLeaveExists(id);
|
||||
//bpm流程设置成已完成,需要将任务自生的状态设置成已完成
|
||||
workTaskMapper.updateById(new BpmOAWorkTaskDO().setId(id).setResult(result).setWorkTaskStatus(3).setSchedule(100L));
|
||||
}
|
||||
|
||||
private BpmOAWorkTaskDO validateLeaveExists(Long id) {
|
||||
|
||||
BpmOAWorkTaskDO taskDO = workTaskMapper.selectById(id);
|
||||
if (taskDO == null) {
|
||||
throw exception(OA_WORK_TASK_NOT_EXISTS);
|
||||
}
|
||||
|
||||
return taskDO;
|
||||
}
|
||||
|
||||
@Override
|
||||
public BpmOAWorkTaskDO getWorkTask(Long id) {
|
||||
return workTaskMapper.selectById(id);
|
||||
}
|
||||
|
||||
@Override
|
||||
public BpmOAWorkTaskDO getWorkTaskByProcessInstanceId(String processInstanceId) {
|
||||
|
||||
return workTaskMapper.selectOne(BpmOAWorkTaskDO::getProcessInstanceId, processInstanceId);
|
||||
}
|
||||
|
||||
@Override
|
||||
public void addTrackInfo(BpmOAWorkTaskReqVO updateReqVO) {
|
||||
|
||||
//设置 跟踪任务创建时间
|
||||
BpmOAWorkTaskTrackInfo taskTrackInfo = updateReqVO.getTrackInfos();
|
||||
taskTrackInfo.setTrackTime(LocalDateTime.now().format(DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss")));
|
||||
|
||||
BpmOAWorkTaskDO taskDO = validateLeaveExists(updateReqVO.getId());
|
||||
List<BpmOAWorkTaskTrackInfo> info = taskDO.getTrackInfo();
|
||||
if (info == null) {
|
||||
info = new ArrayList<>();
|
||||
}
|
||||
info.add(taskTrackInfo);
|
||||
|
||||
BpmOAWorkTaskDO updateDo = new BpmOAWorkTaskDO();
|
||||
updateDo.setId(updateReqVO.getId());
|
||||
updateDo.setTrackInfo(info);
|
||||
workTaskMapper.updateById(updateDo);
|
||||
}
|
||||
|
||||
@Override
|
||||
public void updateWorkTask(BpmOAWorkTaskReqVO createReqVO) {
|
||||
BpmOAWorkTaskDO taskDO = validateLeaveExists(createReqVO.getId());
|
||||
|
||||
if (taskDO.getWorkTaskStatus() == 5 && createReqVO.getWorkTaskStatus() == 2) {
|
||||
|
||||
Long daysDifference = ChronoUnit.DAYS.between(taskDO.getStartTime(), taskDO.getEndTime());
|
||||
createReqVO.setShelveStartTime(LocalDate.now());
|
||||
createReqVO.setShelveEndTime(LocalDate.now().plusDays(daysDifference));
|
||||
}
|
||||
|
||||
taskDO = BeanUtils.toBean(createReqVO, BpmOAWorkTaskDO.class);
|
||||
|
||||
//更新任务进度 和 任务状态
|
||||
workTaskMapper.updateById(taskDO);
|
||||
}
|
||||
|
||||
@Override
|
||||
public PageResult<BpmOAWorkTaskRespVO> getPage(Long loginUserId, BpmOAWorkTaskPageReqVO pageVO) {
|
||||
|
||||
PageResult<BpmOAWorkTaskDO> pageResult = workTaskMapper.selectPage(loginUserId, pageVO);
|
||||
// 获得责任人 用户Id
|
||||
List<Long> userIds = pageResult.getList().stream().map(BpmOAWorkTaskDO::getReceiverUserId).collect(Collectors.toList());
|
||||
// 获得责任人用户信息列表
|
||||
List<AdminUserRespDTO> userRespDTOS = userApi.getUserList(userIds).getCheckedData();
|
||||
Map<Long, AdminUserRespDTO> userMap = convertMap(userRespDTOS, AdminUserRespDTO::getId);
|
||||
|
||||
//获得部门信息map
|
||||
Map<Long, DeptRespDTO> deptMap = deptApi.getDeptMap(userRespDTOS.stream().map(AdminUserRespDTO::getDeptId).collect(Collectors.toSet()));
|
||||
|
||||
//获得发起人用户信息列表
|
||||
List<Long> fromUserIds = pageResult.getList().stream().map(BpmOAWorkTaskDO::getFromUserId).collect(Collectors.toList());
|
||||
Map<Long, AdminUserRespDTO> fromUserMap = userApi.getUserMap(fromUserIds);
|
||||
|
||||
PageResult<BpmOAWorkTaskRespVO> dataPage = BeanUtils.toBean(pageResult, BpmOAWorkTaskRespVO.class);
|
||||
dataPage.getList().forEach(data -> {
|
||||
|
||||
data.setFromUserName(fromUserMap.get(data.getFromUserId()).getNickname());
|
||||
data.setUserName(userMap.get(data.getReceiverUserId()).getNickname());
|
||||
data.setDeptName(deptMap.get(userMap.get(data.getReceiverUserId()).getDeptId()).getName());
|
||||
});
|
||||
|
||||
return dataPage;
|
||||
}
|
||||
|
||||
@Override
|
||||
public PageResult<BpmOAWorkTaskRespVO> getMyPage(Long loginUserId, BpmOAWorkTaskPageReqVO pageVO) {
|
||||
|
||||
PageResult<BpmOAWorkTaskDO> pageResult = workTaskMapper.selectMyPage(loginUserId, pageVO);
|
||||
|
||||
//获得发起人用户信息列表
|
||||
List<Long> fromUserIds = pageResult.getList().stream().map(BpmOAWorkTaskDO::getFromUserId).collect(Collectors.toList());
|
||||
Map<Long, AdminUserRespDTO> fromUserMap = userApi.getUserMap(fromUserIds);
|
||||
|
||||
//获得任务分配processInstanceId
|
||||
List<String> processInstanceIds = pageResult.getList().stream().map(BpmOAWorkTaskDO::getProcessInstanceId).collect(Collectors.toList());
|
||||
List<BpmTaskExtDO> taskExtDOS = taskService.getTaskByProcessInstanceIdAndResult(processInstanceIds, BpmProcessInstanceResultEnum.PROCESS.getResult());
|
||||
Map<String, BpmTaskExtDO> taskExtDOMap = convertMap(taskExtDOS, BpmTaskExtDO::getProcessInstanceId);
|
||||
|
||||
PageResult<BpmOAWorkTaskRespVO> dataPage = BeanUtils.toBean(pageResult, BpmOAWorkTaskRespVO.class);
|
||||
dataPage.getList().forEach(data -> {
|
||||
|
||||
data.setFromUserName(fromUserMap.get(data.getFromUserId()).getNickname());
|
||||
data.setTaskId(taskExtDOMap.get(data.getProcessInstanceId()) != null ? taskExtDOMap.get(data.getProcessInstanceId()).getTaskId() : null);
|
||||
});
|
||||
|
||||
return dataPage;
|
||||
}
|
||||
}
|
@ -0,0 +1,32 @@
|
||||
package cn.iocoder.yudao.module.bpm.service.oa.listener;
|
||||
|
||||
import cn.iocoder.yudao.module.bpm.framework.bpm.core.event.BpmProcessInstanceResultEvent;
|
||||
import cn.iocoder.yudao.module.bpm.framework.bpm.core.event.BpmProcessInstanceResultEventListener;
|
||||
import cn.iocoder.yudao.module.bpm.service.oa.BpmOAWorkTaskService;
|
||||
import cn.iocoder.yudao.module.bpm.service.oa.BpmOAWorkTaskServiceImpl;
|
||||
import org.springframework.stereotype.Component;
|
||||
|
||||
import javax.annotation.Resource;
|
||||
|
||||
/**
|
||||
* OA 分配工作 的结果的监听器实现类
|
||||
*
|
||||
* @author 姚君
|
||||
*/
|
||||
@Component
|
||||
public class BpmOAWorkTaskResultListener extends BpmProcessInstanceResultEventListener {
|
||||
|
||||
@Resource
|
||||
private BpmOAWorkTaskService workTaskService;
|
||||
|
||||
@Override
|
||||
protected String getProcessDefinitionKey() {
|
||||
|
||||
return BpmOAWorkTaskServiceImpl.PROCESS_KEY;
|
||||
}
|
||||
|
||||
@Override
|
||||
protected void onEvent(BpmProcessInstanceResultEvent event) {
|
||||
workTaskService.updateWorkTaskResult(Long.parseLong(event.getBusinessKey()), event.getResult());
|
||||
}
|
||||
}
|
File diff suppressed because one or more lines are too long
@ -64,6 +64,14 @@ public interface BpmTaskService {
|
||||
*/
|
||||
List<Task> getTasksByProcessInstanceIds(List<String> processInstanceIds);
|
||||
|
||||
/**
|
||||
* 获得流程任务列表
|
||||
*
|
||||
* @param processInstanceId 流程实例的编号
|
||||
* @return 流程任务列表
|
||||
*/
|
||||
List<Task> getTasksByProcessInstanceId(String processInstanceId);
|
||||
|
||||
/**
|
||||
* 获得指令流程实例的流程任务列表,包括所有状态的
|
||||
*
|
||||
@ -196,4 +204,6 @@ public interface BpmTaskService {
|
||||
* @return 当前任务的taskId
|
||||
*/
|
||||
String getCurrentTaskIdByProcessInstanceId(String processInstanceId) ;
|
||||
|
||||
List<BpmTaskExtDO> getTaskByProcessInstanceIdAndResult(List<String> processInstanceId, Integer result);
|
||||
}
|
||||
|
@ -24,7 +24,6 @@ import cn.iocoder.yudao.module.bpm.service.definition.BpmModelService;
|
||||
import cn.iocoder.yudao.module.bpm.service.definition.BpmProcessDefinitionService;
|
||||
import cn.iocoder.yudao.module.bpm.service.message.BpmMessageService;
|
||||
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.dept.dto.DeptRespDTO;
|
||||
import cn.iocoder.yudao.module.system.api.user.AdminUserApi;
|
||||
import cn.iocoder.yudao.module.system.api.user.dto.AdminUserRespDTO;
|
||||
@ -91,9 +90,6 @@ public class BpmTaskServiceImpl implements BpmTaskService {
|
||||
@Resource
|
||||
private DeptApi deptApi;
|
||||
|
||||
@Resource
|
||||
private PostApi postApi;
|
||||
|
||||
@Resource
|
||||
private BpmTaskExtMapper taskExtMapper;
|
||||
|
||||
@ -122,8 +118,7 @@ public class BpmTaskServiceImpl implements BpmTaskService {
|
||||
Map<String, BpmTaskExtDO> bpmTaskExtDOMap = convertMap(bpmTaskExtDOs, BpmTaskExtDO::getTaskId);
|
||||
|
||||
// 获得 ProcessInstance Map
|
||||
Set<String> ids = new HashSet<>();
|
||||
ids.addAll(processInstanceIds);
|
||||
Set<String> ids = new HashSet<>(processInstanceIds);
|
||||
|
||||
Map<String, HistoricProcessInstance> historicProcessInstanceMap =
|
||||
processInstanceService.getHistoricProcessInstanceMap(ids);
|
||||
@ -138,10 +133,13 @@ public class BpmTaskServiceImpl implements BpmTaskService {
|
||||
public PageResult<BpmTaskTodoPageItemRespVO> getTodoTaskPage(Long userId, BpmTaskTodoPageReqVO pageVO) {
|
||||
// 查询待办任务
|
||||
TaskQuery taskQuery = taskService.createTaskQuery().taskAssignee(String.valueOf(userId)) // 分配给自己
|
||||
//只能查询流程标识定义为oa开头的流程
|
||||
.processDefinitionKeyLike("oa_%")
|
||||
.orderByTaskCreateTime().desc(); // 创建时间倒序
|
||||
if (StrUtil.isNotBlank(pageVO.getName())) {
|
||||
//流程定义的名称
|
||||
taskQuery.processDefinitionName(pageVO.getName());
|
||||
|
||||
// taskQuery.taskNameLike("%" + pageVO.getName() + "%");
|
||||
}
|
||||
if (ArrayUtil.get(pageVO.getCreateTime(), 0) != null) {
|
||||
@ -178,6 +176,8 @@ public class BpmTaskServiceImpl implements BpmTaskService {
|
||||
queryWrapperX.eq(BpmTaskExtDO::getDeleted, false);
|
||||
queryWrapperX.groupBy(BpmTaskExtDO::getName);
|
||||
queryWrapperX.select(BpmTaskExtDO::getName);
|
||||
//只能查询流程标识定义为oa开头的流程
|
||||
queryWrapperX.likeIfPresent(BpmTaskExtDO::getProcessDefinitionId,"oa_");
|
||||
List<BpmTaskExtDO> list = taskExtMapper.selectList(queryWrapperX);
|
||||
List<String> taskNames = list.stream().map(BpmTaskExtDO::getName)
|
||||
.collect(Collectors.toList());
|
||||
@ -185,6 +185,7 @@ public class BpmTaskServiceImpl implements BpmTaskService {
|
||||
// 查询已办任务
|
||||
HistoricTaskInstanceQuery taskQuery = historyService.createHistoricTaskInstanceQuery().finished() // 已完成
|
||||
.taskAssignee(String.valueOf(userId)) // 分配给自己
|
||||
.processDefinitionKeyLike("oa_%")
|
||||
.orderByHistoricTaskInstanceEndTime().desc(); // 审批时间倒序
|
||||
if (taskNames != null && !taskNames.isEmpty()) {
|
||||
/**
|
||||
@ -283,6 +284,12 @@ public class BpmTaskServiceImpl implements BpmTaskService {
|
||||
return taskService.createTaskQuery().processInstanceIdIn(processInstanceIds).list();
|
||||
}
|
||||
|
||||
@Override
|
||||
public List<Task> getTasksByProcessInstanceId(String processInstanceId) {
|
||||
|
||||
return taskService.createTaskQuery().processInstanceId(processInstanceId).orderByTaskCreateTime().desc().list();
|
||||
}
|
||||
|
||||
@Override
|
||||
public List<BpmTaskRespVO> getTaskListByProcessInstanceId(String processInstanceId) {
|
||||
// 获得任务列表
|
||||
@ -1220,4 +1227,10 @@ public class BpmTaskServiceImpl implements BpmTaskService {
|
||||
throw exception(TASK_NOT_EXISTS);
|
||||
}
|
||||
}
|
||||
|
||||
@Override
|
||||
public List<BpmTaskExtDO> getTaskByProcessInstanceIdAndResult(List<String> processInstanceId, Integer result) {
|
||||
|
||||
return taskExtMapper.selectTask(processInstanceId, result);
|
||||
}
|
||||
}
|
||||
|
@ -19,6 +19,7 @@
|
||||
#{id}
|
||||
</foreach>
|
||||
</if>
|
||||
AND process_definition_id like 'oa_%'
|
||||
GROUP BY name
|
||||
</select>
|
||||
|
||||
@ -42,6 +43,7 @@
|
||||
#{id}
|
||||
</foreach>
|
||||
</if>
|
||||
AND process_definition_id like 'oa_%'
|
||||
GROUP BY result
|
||||
</select>
|
||||
|
||||
@ -55,6 +57,7 @@
|
||||
WHERE end_time IS NOT NULL
|
||||
AND reason != '自动审批'
|
||||
AND deleted = FALSE
|
||||
AND process_definition_id like 'oa_%'
|
||||
GROUP BY assignee_user_id order by userTime desc limit 0, 10
|
||||
</select>
|
||||
|
||||
@ -72,6 +75,7 @@
|
||||
#{id}
|
||||
</foreach>
|
||||
</if>
|
||||
AND process_definition_id like 'oa_%'
|
||||
GROUP BY assignee_user_id
|
||||
</select>
|
||||
|
||||
|
@ -9,6 +9,8 @@ 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.PostMapping;
|
||||
import org.springframework.web.bind.annotation.RequestBody;
|
||||
import org.springframework.web.bind.annotation.RequestParam;
|
||||
|
||||
import java.util.Collection;
|
||||
@ -46,6 +48,24 @@ public interface DeptApi {
|
||||
@Operation(summary = "获取所有部门信息")
|
||||
CommonResult<List<DeptRespDTO>> getDeptList();
|
||||
|
||||
@PostMapping(PREFIX + "/create")
|
||||
@Operation(summary = "创建部门")
|
||||
CommonResult<Long> createDept(@RequestBody DeptRespDTO deptRespDTO);
|
||||
|
||||
@PostMapping(PREFIX + "/update")
|
||||
@Operation(summary = "修改部门信息")
|
||||
void updateDept(@RequestBody DeptRespDTO deptRespDTO);
|
||||
|
||||
@PostMapping(PREFIX + "/delete")
|
||||
@Operation(summary = "删除部门信息")
|
||||
@Parameter(name = "factoryId", description = "工厂编号", example = "100001", required = true)
|
||||
void deleteDept(@RequestParam("factoryId") Long factoryId);
|
||||
|
||||
@PostMapping(PREFIX + "/getByFactoryId")
|
||||
@Operation(summary = "根据工厂ID获得部门信息")
|
||||
@Parameter(name = "factoryId", description = "工厂编号", example = "100001", required = true)
|
||||
CommonResult<DeptRespDTO> getDeptByFactoryId(@RequestParam("factoryId") Long factoryId);
|
||||
|
||||
/**
|
||||
* 获得指定编号的部门 Map
|
||||
*
|
||||
|
@ -22,6 +22,9 @@ public class DeptRespDTO {
|
||||
@Schema(description = "负责人的用户编号", requiredMode = Schema.RequiredMode.REQUIRED, example = "1")
|
||||
private Long leaderUserId;
|
||||
|
||||
@Schema(description = "工厂编号", requiredMode = Schema.RequiredMode.REQUIRED, example = "1")
|
||||
private Long factoryId;
|
||||
|
||||
@Schema(description = "部门标识", requiredMode = Schema.RequiredMode.REQUIRED, example = "1")
|
||||
private String flag;
|
||||
|
||||
|
@ -26,4 +26,8 @@ public interface SubscribeMessageSendApi {
|
||||
@PostMapping(PREFIX + "/send-company-notice")
|
||||
@Operation(summary = "发送公司公告通知")
|
||||
CommonResult<Long> sendCompanyNotice(@RequestBody SubscribeMessageReqDTO reqDTO);
|
||||
|
||||
@PostMapping(PREFIX + "/send-worklog-comment")
|
||||
@Operation(summary = "发送日志评论、回复通知")
|
||||
CommonResult<Long> sendWorkLogComment(@RequestBody SubscribeMessageReqDTO reqDTO);
|
||||
}
|
||||
|
@ -6,6 +6,7 @@ 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.dept.dto.DeptRespDTO;
|
||||
import cn.iocoder.yudao.module.system.controller.admin.dept.vo.dept.DeptListReqVO;
|
||||
import cn.iocoder.yudao.module.system.controller.admin.dept.vo.dept.DeptSaveReqVO;
|
||||
import cn.iocoder.yudao.module.system.dal.dataobject.dept.DeptDO;
|
||||
import cn.iocoder.yudao.module.system.service.dept.DeptService;
|
||||
import org.springframework.validation.annotation.Validated;
|
||||
@ -61,4 +62,43 @@ public class DeptApiImpl implements DeptApi {
|
||||
return success(BeanUtils.toBean(deptDOs, DeptRespDTO.class));
|
||||
}
|
||||
|
||||
@Override
|
||||
public CommonResult<Long> createDept(DeptRespDTO deptRespDTO) {
|
||||
|
||||
DeptSaveReqVO deptSaveReqVO = BeanUtils.toBean(deptRespDTO, DeptSaveReqVO.class);
|
||||
|
||||
return success(deptService.createDept(deptSaveReqVO));
|
||||
}
|
||||
|
||||
@Override
|
||||
public void updateDept(DeptRespDTO deptRespDTO) {
|
||||
|
||||
DeptDO deptDO = deptService.getDeptByFactoryId(deptRespDTO.getFactoryId());
|
||||
|
||||
if (deptDO != null) {
|
||||
|
||||
DeptSaveReqVO deptSaveReqVO = BeanUtils.toBean(deptDO, DeptSaveReqVO.class);
|
||||
deptSaveReqVO.setLeaderUserId(deptRespDTO.getLeaderUserId());
|
||||
deptSaveReqVO.setName(deptRespDTO.getName());
|
||||
|
||||
deptService.updateDept(deptSaveReqVO);
|
||||
}
|
||||
}
|
||||
|
||||
@Override
|
||||
public void deleteDept(Long factoryId) {
|
||||
|
||||
DeptDO deptDO = deptService.getDeptByFactoryId(factoryId);
|
||||
if (deptDO != null) {
|
||||
|
||||
deptService.deleteDept(deptDO.getId());
|
||||
}
|
||||
}
|
||||
|
||||
@Override
|
||||
public CommonResult<DeptRespDTO> getDeptByFactoryId(Long factoryId) {
|
||||
|
||||
DeptDO deptDO = deptService.getDeptByFactoryId(factoryId);
|
||||
return success(BeanUtils.toBean(deptDO, DeptRespDTO.class));
|
||||
}
|
||||
}
|
||||
|
@ -48,6 +48,13 @@ public class SubscribeMessageSendApiImpl implements SubscribeMessageSendApi {
|
||||
return success(1L);
|
||||
}
|
||||
|
||||
@SneakyThrows
|
||||
@Override
|
||||
public CommonResult<Long> sendWorkLogComment(SubscribeMessageReqDTO reqDTO) {
|
||||
socialClientService.getWxMaService().getMsgService().sendSubscribeMsg(initWxMaSubscribeMessage(reqDTO));
|
||||
return success(1L);
|
||||
}
|
||||
|
||||
private WxMaSubscribeMessage initWxMaSubscribeMessage(SubscribeMessageReqDTO reqDTO) {
|
||||
WxMaSubscribeMessage message = WxMaSubscribeMessage.builder()
|
||||
.toUser(reqDTO.getToUser())
|
||||
|
@ -24,6 +24,9 @@ public class DeptRespVO {
|
||||
@Schema(description = "负责人的用户编号", example = "2048")
|
||||
private Long leaderUserId;
|
||||
|
||||
@Schema(description = "工厂编号", example = "2048")
|
||||
private Long factoryId;
|
||||
|
||||
@Schema(description = "联系电话", example = "15601691000")
|
||||
private String phone;
|
||||
|
||||
|
@ -32,6 +32,9 @@ public class DeptSaveReqVO {
|
||||
@Schema(description = "负责人的用户编号", example = "2048")
|
||||
private Long leaderUserId;
|
||||
|
||||
@Schema(description = "工厂编号", example = "1")
|
||||
private Long factoryId;
|
||||
|
||||
@Schema(description = "联系电话", example = "15601691000")
|
||||
@Size(max = 11, message = "联系电话长度不能超过11个字符")
|
||||
private String phone;
|
||||
|
@ -7,6 +7,7 @@ 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.datapermission.core.annotation.DataPermission;
|
||||
import cn.iocoder.yudao.framework.excel.core.util.ExcelUtils;
|
||||
import cn.iocoder.yudao.framework.operatelog.core.annotations.OperateLog;
|
||||
import cn.iocoder.yudao.module.system.controller.admin.user.vo.user.*;
|
||||
@ -21,9 +22,7 @@ import io.swagger.v3.oas.annotations.Operation;
|
||||
import io.swagger.v3.oas.annotations.Parameter;
|
||||
import io.swagger.v3.oas.annotations.Parameters;
|
||||
import io.swagger.v3.oas.annotations.tags.Tag;
|
||||
import org.springframework.context.annotation.Bean;
|
||||
import org.springframework.security.access.prepost.PreAuthorize;
|
||||
import org.springframework.util.StringUtils;
|
||||
import org.springframework.validation.annotation.Validated;
|
||||
import org.springframework.web.bind.annotation.*;
|
||||
import org.springframework.web.multipart.MultipartFile;
|
||||
@ -120,6 +119,17 @@ public class UserController {
|
||||
return success(UserConvert.INSTANCE.convertSimpleList(list, deptMap));
|
||||
}
|
||||
|
||||
@GetMapping({"/list-all"})
|
||||
@Operation(summary = "获取用户精简信息列表", description = "只包含被开启的用户,主要用于前端的下拉选项,无数据权限")
|
||||
@DataPermission(enable = false)
|
||||
public CommonResult<List<UserSimpleRespVO>> getAllUserList() {
|
||||
List<AdminUserDO> list = userService.getUserListByStatus(CommonStatusEnum.ENABLE.getStatus());
|
||||
// 拼接数据
|
||||
Map<Long, DeptDO> deptMap = deptService.getDeptMap(
|
||||
convertList(list, AdminUserDO::getDeptId));
|
||||
return success(UserConvert.INSTANCE.convertSimpleList(list, deptMap));
|
||||
}
|
||||
|
||||
@GetMapping("/get")
|
||||
@Operation(summary = "获得用户详情")
|
||||
@Parameter(name = "id", description = "编号", required = true, example = "1024")
|
||||
|
@ -0,0 +1,66 @@
|
||||
package cn.iocoder.yudao.module.system.convert.worklog;
|
||||
|
||||
import cn.iocoder.yudao.framework.common.util.date.DateUtils;
|
||||
import cn.iocoder.yudao.module.system.api.subscribe.dto.MsgData;
|
||||
import cn.iocoder.yudao.module.system.api.subscribe.dto.SubscribeMessageReqDTO;
|
||||
import cn.iocoder.yudao.module.system.dal.dataobject.comment.WorkLogCommentDO;
|
||||
import org.mapstruct.Mapper;
|
||||
import org.mapstruct.factory.Mappers;
|
||||
|
||||
import java.util.Date;
|
||||
|
||||
@Mapper
|
||||
public interface LogCommentConvert {
|
||||
|
||||
LogCommentConvert INSTANCE = Mappers.getMapper(LogCommentConvert.class);
|
||||
|
||||
/**
|
||||
* @param openId 微信小程序唯一id
|
||||
* @param logCommentDO 评论对象
|
||||
* @param nickname 发布人姓名
|
||||
* @param miniProgramState 小程序的状态
|
||||
* @return
|
||||
*/
|
||||
default SubscribeMessageReqDTO convertLogComment(String openId, WorkLogCommentDO logCommentDO, String nickname, String miniProgramState) {
|
||||
|
||||
SubscribeMessageReqDTO message = new SubscribeMessageReqDTO();
|
||||
message.setToUser(openId);
|
||||
message.setTemplateId("fH29xjNb8pe-7onQ-wE3QrBAC-y8aaC_oosYZKNMtzM");
|
||||
|
||||
//消息类型
|
||||
MsgData noticeType = new MsgData();
|
||||
noticeType.setName("phrase8");
|
||||
if (logCommentDO.getType()) {
|
||||
noticeType.setValue("评论回复");
|
||||
}else {
|
||||
noticeType.setValue("日志评论");
|
||||
}
|
||||
message.addData(noticeType);
|
||||
|
||||
//发送人
|
||||
MsgData publishMan = new MsgData();
|
||||
publishMan.setName("thing16");
|
||||
publishMan.setValue(nickname);
|
||||
message.addData(publishMan);
|
||||
|
||||
//发送时间
|
||||
MsgData createTime = new MsgData();
|
||||
createTime.setName("time3");
|
||||
createTime.setValue(DateUtils.dateFormat(new Date(), DateUtils.FORMAT_YEAR_MONTH_DAY_HOUR_MINUTE_SECOND));
|
||||
message.addData(createTime);
|
||||
|
||||
//消息内容
|
||||
MsgData content = new MsgData();
|
||||
String comment = logCommentDO.getComment();
|
||||
content.setName("thing2");
|
||||
if (comment.length() > 10) {
|
||||
comment = comment.substring(0,10) + ". . . . ";
|
||||
}
|
||||
content.setValue(comment);
|
||||
message.addData(content);
|
||||
|
||||
message.setMiniprogramState(miniProgramState);
|
||||
message.setPage("/subPages/workLogDetail/workLogDetail?id=" + logCommentDO.getWorkLogId());
|
||||
return message;
|
||||
}
|
||||
}
|
@ -52,6 +52,10 @@ public class DeptDO extends TenantBaseDO {
|
||||
* 关联 {@link AdminUserDO#getId()}
|
||||
*/
|
||||
private Long leaderUserId;
|
||||
/**
|
||||
* 工厂编号
|
||||
*/
|
||||
private Long factoryId;
|
||||
/**
|
||||
* 联系电话
|
||||
*/
|
||||
|
@ -92,6 +92,11 @@ public class AdminUserDO extends TenantBaseDO {
|
||||
* 枚举 {@link CommonStatusEnum}
|
||||
*/
|
||||
private Integer status;
|
||||
/**
|
||||
* 用户类型
|
||||
* 1:公司用户 2:工厂用户
|
||||
*/
|
||||
private Integer userType;
|
||||
/**
|
||||
* 最后登录IP
|
||||
*/
|
||||
|
@ -39,6 +39,7 @@ public interface AdminUserMapper extends BaseMapperX<AdminUserDO> {
|
||||
.eqIfPresent(AdminUserDO::getStatus, reqVO.getStatus())
|
||||
.betweenIfPresent(AdminUserDO::getCreateTime, reqVO.getCreateTime())
|
||||
.inIfPresent(AdminUserDO::getDeptId, deptIds)
|
||||
.eq(AdminUserDO::getUserType, 1) //查询公司用户
|
||||
.orderByDesc(AdminUserDO::getId));
|
||||
}
|
||||
|
||||
@ -47,17 +48,24 @@ public interface AdminUserMapper extends BaseMapperX<AdminUserDO> {
|
||||
}
|
||||
|
||||
default List<AdminUserDO> selectListByStatus(Integer status) {
|
||||
return selectList(AdminUserDO::getStatus, status);
|
||||
|
||||
return selectList(new LambdaQueryWrapperX<AdminUserDO>()
|
||||
.eq(AdminUserDO::getStatus, status)
|
||||
.eq(AdminUserDO::getUserType, 1));
|
||||
}
|
||||
|
||||
default List<AdminUserDO> selectListByDeptIds(Collection<Long> deptIds) {
|
||||
return selectList(AdminUserDO::getDeptId, deptIds);
|
||||
|
||||
return selectList(new LambdaQueryWrapperX<AdminUserDO>()
|
||||
.in(AdminUserDO::getDeptId, deptIds)
|
||||
.eq(AdminUserDO::getUserType, 1));
|
||||
}
|
||||
|
||||
default List<AdminUserDO> selectListByDeptId(Long deptId, Long userId) {
|
||||
return selectList(new LambdaQueryWrapperX<AdminUserDO>()
|
||||
.eq(AdminUserDO::getDeptId, deptId)
|
||||
.ne(AdminUserDO::getId, userId));
|
||||
.ne(AdminUserDO::getId, userId)
|
||||
.eq(AdminUserDO::getUserType , 1));
|
||||
}
|
||||
|
||||
void emptyOpenId(@Param("openId") String openId);
|
||||
|
@ -281,6 +281,12 @@ public class AdminAuthServiceImpl implements AdminAuthService {
|
||||
createLoginLog(user.getId(), phoneNumber, logTypeEnum, LoginResultEnum.USER_DISABLED);
|
||||
throw exception(AUTH_LOGIN_USER_DISABLED);
|
||||
}
|
||||
// 校验账号是否为工厂用户
|
||||
if (user.getUserType() == 2) {
|
||||
createLoginLog(null, phoneNumber, logTypeEnum, LoginResultEnum.BAD_CREDENTIALS);
|
||||
throw exception(AUTH_MOBILE_NOT_EXISTS);
|
||||
}
|
||||
|
||||
//清空openId
|
||||
userService.emptyOpenId(reqVO.getOpenId());
|
||||
//绑定用户openId
|
||||
|
@ -5,15 +5,21 @@ import cn.hutool.json.JSONObject;
|
||||
import cn.iocoder.yudao.framework.common.pojo.PageResult;
|
||||
import cn.iocoder.yudao.framework.common.util.object.BeanUtils;
|
||||
import cn.iocoder.yudao.framework.web.core.util.WebFrameworkUtils;
|
||||
import cn.iocoder.yudao.module.system.api.subscribe.SubscribeMessageSendApi;
|
||||
import cn.iocoder.yudao.module.system.controller.admin.worklog.vo.loginstance.LogInstanceRespVO;
|
||||
import cn.iocoder.yudao.module.system.controller.app.comment.dto.CommentDTO;
|
||||
import cn.iocoder.yudao.module.system.controller.app.comment.vo.CommentPageListVO;
|
||||
import cn.iocoder.yudao.module.system.controller.app.comment.vo.CommentTypeCountVO;
|
||||
import cn.iocoder.yudao.module.system.controller.app.comment.vo.WorkLogCommentPageReqVO;
|
||||
import cn.iocoder.yudao.module.system.controller.app.comment.vo.WorkLogCommentSaveReqVO;
|
||||
import cn.iocoder.yudao.module.system.convert.worklog.LogCommentConvert;
|
||||
import cn.iocoder.yudao.module.system.dal.dataobject.comment.WorkLogCommentDO;
|
||||
import cn.iocoder.yudao.module.system.dal.dataobject.user.AdminUserDO;
|
||||
import cn.iocoder.yudao.module.system.dal.dataobject.worklog.LogFormDO;
|
||||
import cn.iocoder.yudao.module.system.dal.mysql.comment.WorkLogCommentMapper;
|
||||
import cn.iocoder.yudao.module.system.service.user.AdminUserService;
|
||||
import cn.iocoder.yudao.module.system.service.worklog.LogFormService;
|
||||
import cn.iocoder.yudao.module.system.service.worklog.LogInstanceService;
|
||||
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
|
||||
import com.baomidou.mybatisplus.core.metadata.IPage;
|
||||
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
|
||||
@ -21,6 +27,7 @@ import org.springframework.stereotype.Service;
|
||||
import org.springframework.validation.annotation.Validated;
|
||||
|
||||
import javax.annotation.Resource;
|
||||
import java.util.Arrays;
|
||||
import java.util.List;
|
||||
import java.util.Map;
|
||||
import java.util.stream.Collectors;
|
||||
@ -39,6 +46,15 @@ public class WorkLogCommentServiceImpl implements WorkLogCommentService {
|
||||
@Resource
|
||||
private LogFormService logFormService;
|
||||
|
||||
@Resource
|
||||
private AdminUserService userService;
|
||||
|
||||
@Resource
|
||||
private LogInstanceService logInstanceService;
|
||||
|
||||
@Resource
|
||||
private SubscribeMessageSendApi subscribeMessageSendApi;
|
||||
|
||||
@Override
|
||||
public Long createWorkLogComment(WorkLogCommentSaveReqVO createReqVO) {
|
||||
// 插入
|
||||
@ -46,6 +62,10 @@ public class WorkLogCommentServiceImpl implements WorkLogCommentService {
|
||||
Long userId = WebFrameworkUtils.getLoginUserId();
|
||||
workLogComment.setUserId(userId);
|
||||
workLogCommentMapper.insert(workLogComment);
|
||||
|
||||
//创建评论、回复后, 发送消息通知
|
||||
sendMessage(workLogComment);
|
||||
|
||||
// 返回
|
||||
return workLogComment.getId();
|
||||
}
|
||||
@ -134,4 +154,26 @@ public class WorkLogCommentServiceImpl implements WorkLogCommentService {
|
||||
return vo;
|
||||
}
|
||||
|
||||
/**
|
||||
* 评论或回复 发送消息通知
|
||||
*/
|
||||
private void sendMessage(WorkLogCommentDO workLogComment) {
|
||||
|
||||
//获得日志详情
|
||||
LogInstanceRespVO instanceDO = logInstanceService.getLogInstance(workLogComment.getWorkLogId());
|
||||
|
||||
//获得 用户信息Map
|
||||
Map<Long, AdminUserDO> userMap = userService.getUserMap(Arrays.asList(instanceDO.getStartUserId(), workLogComment.getUserId()));
|
||||
|
||||
String openId = userMap.get(instanceDO.getStartUserId()).getOpenId();
|
||||
|
||||
if (openId != null) {
|
||||
|
||||
//发送消息通知
|
||||
subscribeMessageSendApi.sendWorkLogComment(LogCommentConvert.INSTANCE.convertLogComment(
|
||||
openId, workLogComment, userMap.get(workLogComment.getUserId()).getNickname(),
|
||||
"formal"));
|
||||
}
|
||||
|
||||
}
|
||||
}
|
@ -103,4 +103,6 @@ public interface DeptService {
|
||||
List<DeptDO> getDeptByLeaderId(Long leaderUserId);
|
||||
|
||||
List<DeptDO> getDeptTree();
|
||||
|
||||
DeptDO getDeptByFactoryId(Long factoryId);
|
||||
}
|
||||
|
@ -278,4 +278,10 @@ public class DeptServiceImpl implements DeptService {
|
||||
|
||||
return deptMapper.selectTree();
|
||||
}
|
||||
|
||||
@Override
|
||||
public DeptDO getDeptByFactoryId(Long factoryId) {
|
||||
|
||||
return deptMapper.selectOne(DeptDO::getFactoryId, factoryId);
|
||||
}
|
||||
}
|
||||
|
@ -33,12 +33,10 @@ import org.springframework.context.annotation.Lazy;
|
||||
import org.springframework.security.crypto.password.PasswordEncoder;
|
||||
import org.springframework.stereotype.Service;
|
||||
import org.springframework.transaction.annotation.Transactional;
|
||||
import org.springframework.util.StringUtils;
|
||||
|
||||
import javax.annotation.Resource;
|
||||
import java.io.IOException;
|
||||
import java.io.InputStream;
|
||||
import java.time.LocalDate;
|
||||
import java.time.LocalDateTime;
|
||||
import java.util.*;
|
||||
import java.util.stream.Collectors;
|
||||
@ -544,21 +542,6 @@ public class AdminUserServiceImpl implements AdminUserService {
|
||||
return passwordEncoder.encode(password);
|
||||
}
|
||||
|
||||
private void IdCardAnalysis(AdminUserDO updateUser) {
|
||||
|
||||
LocalDate nowDate = LocalDate.now();
|
||||
|
||||
String idCard = updateUser.getIdcard();
|
||||
|
||||
//通过身份证号码 获得出生日期
|
||||
LocalDate date = LocalDate.parse(idCard.substring(6, 14));
|
||||
//通过身份证号码 获得性别
|
||||
Integer sex = Integer.parseInt(idCard.substring(16, 17)) % 2 == 0 ? 2 : 1;
|
||||
//通过身份证号码 获得年龄
|
||||
Integer age = nowDate.getYear() - date.getYear();
|
||||
|
||||
}
|
||||
|
||||
@Override
|
||||
public String getSignImgPath(Long userId) {
|
||||
//2L 用户签名
|
||||
|
@ -17,11 +17,14 @@
|
||||
|
||||
<select id="selectByDeptIds" resultType="cn.iocoder.yudao.module.system.controller.admin.user.vo.user.UserRespVO">
|
||||
select a.*, b.name deptName FROM system_users a, system_dept b
|
||||
where a.dept_id = b.id
|
||||
and a.dept_id in
|
||||
<foreach collection="list" item="deptIds" open="(" close=")" separator=",">
|
||||
#{deptIds}
|
||||
</foreach>
|
||||
where
|
||||
a.dept_id = b.id
|
||||
and a.status = 0
|
||||
and a.user_type = 1
|
||||
and a.dept_id in
|
||||
<foreach collection="list" item="deptIds" open="(" close=")" separator=",">
|
||||
#{deptIds}
|
||||
</foreach>
|
||||
</select>
|
||||
|
||||
<select id="selectUserByBoss">
|
||||
|
@ -12,4 +12,16 @@ public interface ErrorCodeConstants {
|
||||
ErrorCode FACTORY_INFO_NOT_EXISTS = new ErrorCode(1_000_000_001, "工厂信息不存在");
|
||||
|
||||
ErrorCode CAMERA_DEVICE_NOT_EXISTS = new ErrorCode(1_000_000_002, "监控摄像头不存在");
|
||||
|
||||
ErrorCode FACTOYRY_EXISTS_STAFF = new ErrorCode(1_000_000_003, "工厂下存在员工,不能删除工厂");
|
||||
|
||||
ErrorCode SIZE_NOT_EXISTS = new ErrorCode(1_000_000_004, "规格不存在");
|
||||
|
||||
//打包线模块
|
||||
ErrorCode PACKAGE_NOT_EXISTS = new ErrorCode(1_000_001_001, "打包线信息不存在");
|
||||
ErrorCode PACKAGE_DATA_EXISTS = new ErrorCode(1_000_001_001, "当前日期的数据已存在");
|
||||
|
||||
//出入库数据模块
|
||||
ErrorCode SIZEDATA_NOT_EXISTS = new ErrorCode(1_000_002_001, "不能操作非当天录入得数据");
|
||||
|
||||
}
|
||||
|
@ -22,8 +22,8 @@ public class SfFactoryInfoPageReqVO extends PageParam {
|
||||
@Schema(description = "工厂简称", example = "王五")
|
||||
private String shortName;
|
||||
|
||||
@Schema(description = "工厂代号")
|
||||
private String code;
|
||||
@Schema(description = "工厂类型")
|
||||
private String type;
|
||||
|
||||
@Schema(description = "工厂简介", example = "你猜")
|
||||
private String description;
|
||||
|
@ -26,9 +26,9 @@ public class SfFactoryInfoRespVO {
|
||||
@ExcelProperty("工厂简称")
|
||||
private String shortName;
|
||||
|
||||
@Schema(description = "工厂代号")
|
||||
@ExcelProperty("工厂代号")
|
||||
private String code;
|
||||
@Schema(description = "工厂类型")
|
||||
@ExcelProperty("工厂类型")
|
||||
private String type;
|
||||
|
||||
@Schema(description = "工厂简介", example = "你猜")
|
||||
@ExcelProperty("工厂简介")
|
||||
|
@ -22,8 +22,8 @@ public class SfFactoryInfoSaveReqVO {
|
||||
@NotEmpty(message = "工厂简称不能为空")
|
||||
private String shortName;
|
||||
|
||||
@Schema(description = "工厂代号")
|
||||
private String code;
|
||||
@Schema(description = "工厂类型")
|
||||
private String type;
|
||||
|
||||
@Schema(description = "工厂简介", example = "你猜")
|
||||
private String description;
|
||||
|
@ -3,14 +3,14 @@ package cn.iocoder.yudao.module.smartfactory.controller.admin.factorydata;
|
||||
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.factorydata.vo.FactoryDataDetailRespVO;
|
||||
import cn.iocoder.yudao.module.smartfactory.controller.admin.factorydata.vo.FactoryDataPageReqVO;
|
||||
import cn.iocoder.yudao.module.smartfactory.controller.admin.factorydata.vo.FactoryDataRespVO;
|
||||
import cn.iocoder.yudao.module.smartfactory.controller.admin.factorydata.vo.FactoryDataSaveReqVO;
|
||||
import cn.iocoder.yudao.module.smartfactory.dal.dataobject.factorydata.FactoryDataDO;
|
||||
import cn.iocoder.yudao.module.smartfactory.controller.admin.factorydata.vo.FactoryDataTotalVO;
|
||||
import cn.iocoder.yudao.module.smartfactory.controller.admin.factorydata.vo.sizeData.FactoryDataSizeCreateReqVO;
|
||||
import cn.iocoder.yudao.module.smartfactory.service.factorydata.FactoryDataService;
|
||||
import cn.iocoder.yudao.module.smartfactory.service.factorydata.FactoryDataSizeService;
|
||||
import io.swagger.v3.oas.annotations.Operation;
|
||||
import io.swagger.v3.oas.annotations.Parameter;
|
||||
import io.swagger.v3.oas.annotations.tags.Tag;
|
||||
@ -29,65 +29,80 @@ import static cn.iocoder.yudao.framework.operatelog.core.enums.OperateTypeEnum.E
|
||||
|
||||
@Tag(name = "管理后台 - 工厂出库入库数据")
|
||||
@RestController
|
||||
@RequestMapping("/factory/data")
|
||||
@RequestMapping("/smartfactory/factory-data")
|
||||
@Validated
|
||||
public class FactoryDataController {
|
||||
|
||||
@Resource
|
||||
private FactoryDataService dataService;
|
||||
|
||||
@PostMapping("/create")
|
||||
@Operation(summary = "创建工厂出库入库数据")
|
||||
@PreAuthorize("@ss.hasPermission('factory:data:create')")
|
||||
public CommonResult<Long> createData(@Valid @RequestBody FactoryDataSaveReqVO createReqVO) {
|
||||
return success(dataService.createData(createReqVO));
|
||||
@Resource
|
||||
private FactoryDataSizeService factoryDataSizeService;
|
||||
|
||||
@PostMapping("/create-size")
|
||||
@Operation(summary = "创建工厂出库入库规格数据")
|
||||
@PreAuthorize("@ss.hasPermission('smartfactory:factory-data:create')")
|
||||
public CommonResult<Long> createSizeData(@Valid @RequestBody FactoryDataSizeCreateReqVO createReqVO) {
|
||||
|
||||
return success(factoryDataSizeService.createData(createReqVO));
|
||||
}
|
||||
|
||||
@PutMapping("/update")
|
||||
@Operation(summary = "更新工厂出库入库数据")
|
||||
@PreAuthorize("@ss.hasPermission('factory:data:update')")
|
||||
public CommonResult<Boolean> updateData(@Valid @RequestBody FactoryDataSaveReqVO updateReqVO) {
|
||||
@PreAuthorize("@ss.hasPermission('smartfactory:factory-data:update')")
|
||||
public CommonResult<Boolean> updateData(@Valid @RequestBody FactoryDataSizeCreateReqVO updateReqVO) {
|
||||
|
||||
dataService.updateData(updateReqVO);
|
||||
return success(true);
|
||||
}
|
||||
|
||||
@DeleteMapping("/delete")
|
||||
@Operation(summary = "删除工厂出库入库数据")
|
||||
@Parameter(name = "id", description = "编号", required = true)
|
||||
@PreAuthorize("@ss.hasPermission('factory:data:delete')")
|
||||
public CommonResult<Boolean> deleteData(@RequestParam("id") Long id) {
|
||||
dataService.deleteData(id);
|
||||
@Parameter(name = "factoryId", description = "工厂编号", required = true, example = "1000078")
|
||||
@Parameter(name = "date", description = "日期", required = true, example = "2024-05-17")
|
||||
@PreAuthorize("@ss.hasPermission('smartfactory:factory-data:delete')")
|
||||
public CommonResult<Boolean> deleteData(@RequestParam("factoryId") Long factoryId, @RequestParam("date") String date) {
|
||||
|
||||
dataService.deleteData(factoryId, date);
|
||||
return success(true);
|
||||
}
|
||||
|
||||
@GetMapping("/get")
|
||||
@Operation(summary = "获得工厂出库入库数据")
|
||||
@Parameter(name = "id", description = "编号", required = true, example = "1024")
|
||||
@PreAuthorize("@ss.hasPermission('factory:data:query')")
|
||||
public CommonResult<FactoryDataRespVO> getData(@RequestParam("id") Long id) {
|
||||
FactoryDataDO data = dataService.getData(id);
|
||||
return success(BeanUtils.toBean(data, FactoryDataRespVO.class));
|
||||
@Parameter(name = "factoryId", description = "工厂编号", required = true, example = "1000078")
|
||||
@Parameter(name = "date", description = "日期", required = true, example = "2024-05-17")
|
||||
@PreAuthorize("@ss.hasPermission('smartfactory:factory-data:query')")
|
||||
public CommonResult<FactoryDataDetailRespVO> getData(@RequestParam("factoryId") Long factoryId, @RequestParam("date") String date) {
|
||||
|
||||
return success(dataService.getData(factoryId, date));
|
||||
}
|
||||
|
||||
@GetMapping("/get-total")
|
||||
@Operation(summary = "获得出入库数据总数 | 入库总数、出库总数、破损总数")
|
||||
@PreAuthorize("@ss.hasPermission('smartfactory:factory-data:query')")
|
||||
public CommonResult<FactoryDataTotalVO> getDataTotal() {
|
||||
|
||||
return success(dataService.getDataTotal());
|
||||
}
|
||||
|
||||
@GetMapping("/page")
|
||||
@Operation(summary = "获得工厂出库入库数据分页")
|
||||
@PreAuthorize("@ss.hasPermission('factory:data:query')")
|
||||
public CommonResult<PageResult<FactoryDataRespVO>> getDataPage(@Valid FactoryDataPageReqVO pageReqVO) {
|
||||
PageResult<FactoryDataDO> pageResult = dataService.getDataPage(pageReqVO);
|
||||
return success(BeanUtils.toBean(pageResult, FactoryDataRespVO.class));
|
||||
@PreAuthorize("@ss.hasPermission('smartfactory:factory-data:query')")
|
||||
public CommonResult<PageResult<FactoryDataDetailRespVO>> getDataPage(@Valid FactoryDataPageReqVO pageReqVO) {
|
||||
PageResult<FactoryDataDetailRespVO> pageResult = dataService.getDataPage(pageReqVO);
|
||||
return success(pageResult);
|
||||
}
|
||||
|
||||
@GetMapping("/export-excel")
|
||||
@Operation(summary = "导出工厂出库入库数据 Excel")
|
||||
@PreAuthorize("@ss.hasPermission('factory:data:export')")
|
||||
@PreAuthorize("@ss.hasPermission('smartfactory:factory-data:export')")
|
||||
@OperateLog(type = EXPORT)
|
||||
public void exportDataExcel(@Valid FactoryDataPageReqVO pageReqVO,
|
||||
HttpServletResponse response) throws IOException {
|
||||
pageReqVO.setPageSize(PageParam.PAGE_SIZE_NONE);
|
||||
List<FactoryDataDO> list = dataService.getDataPage(pageReqVO).getList();
|
||||
List<FactoryDataDetailRespVO> list = dataService.getDataPage(pageReqVO).getList();
|
||||
// 导出 Excel
|
||||
ExcelUtils.write(response, "工厂出库入库数据.xls", "数据", FactoryDataRespVO.class,
|
||||
BeanUtils.toBean(list, FactoryDataRespVO.class));
|
||||
ExcelUtils.write(response, "工厂出库入库数据.xls", "数据", FactoryDataDetailRespVO.class,
|
||||
list);
|
||||
}
|
||||
|
||||
}
|
@ -0,0 +1,42 @@
|
||||
package cn.iocoder.yudao.module.smartfactory.controller.admin.factorydata.vo;
|
||||
|
||||
import io.swagger.v3.oas.annotations.media.Schema;
|
||||
import lombok.Data;
|
||||
|
||||
import java.math.BigDecimal;
|
||||
import java.time.LocalDate;
|
||||
import java.util.List;
|
||||
|
||||
@Schema(description = "管理后台 - 工厂出库入库 规格详情数据 Response VO")
|
||||
@Data
|
||||
public class FactoryDataDetailRespVO {
|
||||
|
||||
@Schema(description = "工厂id", requiredMode = Schema.RequiredMode.REQUIRED, example = "1000078")
|
||||
private Long factoryId;
|
||||
|
||||
@Schema(description = "工厂名称", requiredMode = Schema.RequiredMode.REQUIRED, example = "新景象")
|
||||
private String factoryName;
|
||||
|
||||
@Schema(description = "日期", requiredMode = Schema.RequiredMode.REQUIRED, example = "2024-05-14")
|
||||
private LocalDate date;
|
||||
|
||||
@Schema(description = "入库总箱数")
|
||||
private Integer inTotalNum;
|
||||
|
||||
@Schema(description = "入库总平方数")
|
||||
private BigDecimal squareNum;
|
||||
|
||||
@Schema(description = "出库总箱数")
|
||||
private Integer outTotalNum;
|
||||
|
||||
@Schema(description = "破损总数")
|
||||
private Integer damageNum;
|
||||
|
||||
@Schema(description = "是否可编辑 | 1可 ")
|
||||
private Integer isEdit;
|
||||
|
||||
/**
|
||||
* 规格明细
|
||||
*/
|
||||
private List<FactoryDataInfoRespVO> items;
|
||||
}
|
@ -0,0 +1,66 @@
|
||||
package cn.iocoder.yudao.module.smartfactory.controller.admin.factorydata.vo;
|
||||
|
||||
import io.swagger.v3.oas.annotations.media.Schema;
|
||||
import lombok.Data;
|
||||
|
||||
import java.math.BigDecimal;
|
||||
import java.time.LocalDate;
|
||||
|
||||
@Schema(description = "规格明细")
|
||||
@Data
|
||||
public class FactoryDataInfoRespVO {
|
||||
|
||||
@Schema(description = "打包线数据id")
|
||||
private Long id;
|
||||
|
||||
@Schema(description = "工厂id")
|
||||
private Long factoryId;
|
||||
|
||||
@Schema(description = "打包线名称")
|
||||
private String packageName;
|
||||
|
||||
@Schema(description = "日期")
|
||||
private LocalDate date;
|
||||
|
||||
@Schema(description = "规格id")
|
||||
private Long sizeId;
|
||||
|
||||
@Schema(description = "规格名称")
|
||||
private String sizeName;
|
||||
|
||||
@Schema(description = "规格片数")
|
||||
private Integer sizePieces;
|
||||
|
||||
@Schema(description = "手动打包数")
|
||||
private Integer num;
|
||||
|
||||
@Schema(description = "自动打包数")
|
||||
private Integer autoNum;
|
||||
|
||||
@Schema(description = "入库数量")
|
||||
private Integer inNum;
|
||||
|
||||
@Schema(description = "入库平方数")
|
||||
private BigDecimal squareNum;
|
||||
|
||||
@Schema(description = "打包破损数")
|
||||
private Integer damageNum;
|
||||
|
||||
@Schema(description = "入库破损数id")
|
||||
private Long inDamageNumId;
|
||||
|
||||
@Schema(description = "入库破损数")
|
||||
private Integer inDamageNum;
|
||||
|
||||
@Schema(description = "出库数id")
|
||||
private Long outNumId;
|
||||
|
||||
@Schema(description = "出库数量")
|
||||
private Integer outNum;
|
||||
|
||||
@Schema(description = "出库破损数id")
|
||||
private Long outDamageNumId;
|
||||
|
||||
@Schema(description = "出库破损数")
|
||||
private Integer outDamageNum;
|
||||
}
|
@ -1,15 +1,17 @@
|
||||
package cn.iocoder.yudao.module.smartfactory.controller.admin.factorydata.vo;
|
||||
|
||||
import lombok.*;
|
||||
|
||||
import java.time.LocalDate;
|
||||
import java.util.*;
|
||||
import io.swagger.v3.oas.annotations.media.Schema;
|
||||
import cn.iocoder.yudao.framework.common.pojo.PageParam;
|
||||
import java.math.BigDecimal;
|
||||
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.math.BigDecimal;
|
||||
import java.time.LocalDate;
|
||||
import java.time.LocalDateTime;
|
||||
|
||||
import static cn.iocoder.yudao.framework.common.util.date.DateUtils.FORMAT_YEAR_MONTH_DAY;
|
||||
import static cn.iocoder.yudao.framework.common.util.date.DateUtils.FORMAT_YEAR_MONTH_DAY_HOUR_MINUTE_SECOND;
|
||||
|
||||
@Schema(description = "管理后台 - 工厂出库入库数据分页 Request VO")
|
||||
@ -18,36 +20,24 @@ import static cn.iocoder.yudao.framework.common.util.date.DateUtils.FORMAT_YEAR_
|
||||
@ToString(callSuper = true)
|
||||
public class FactoryDataPageReqVO extends PageParam {
|
||||
|
||||
@Schema(description = "工厂id", example = "7606")
|
||||
@Schema(description = "工厂id", example = "1000078")
|
||||
private Long factoryId;
|
||||
|
||||
@Schema(description = "进出库类型 1出库 2进库", example = "1")
|
||||
@Schema(description = "进出库类型 1出库 2入库", example = "1")
|
||||
private Integer dataType;
|
||||
|
||||
@Schema(description = "日期")
|
||||
@DateTimeFormat(pattern = FORMAT_YEAR_MONTH_DAY_HOUR_MINUTE_SECOND)
|
||||
@Schema(description = "日期", example = "2024-05-14")
|
||||
@DateTimeFormat(pattern = FORMAT_YEAR_MONTH_DAY)
|
||||
private LocalDate[] date;
|
||||
|
||||
@Schema(description = "搬运工姓名", example = "张三")
|
||||
private String porterName;
|
||||
|
||||
@Schema(description = "叉车司机姓名", example = "芋艿")
|
||||
private String dirverName;
|
||||
|
||||
@Schema(description = "仓库看管员姓名", example = "李四")
|
||||
private String keeperName;
|
||||
|
||||
@Schema(description = "总数量")
|
||||
@Schema(description = "总箱数")
|
||||
private Integer totalNum;
|
||||
|
||||
@Schema(description = "总金额")
|
||||
private BigDecimal totalAmount;
|
||||
@Schema(description = "总平方数")
|
||||
private BigDecimal squareNum;
|
||||
|
||||
@Schema(description = "总车数")
|
||||
private Integer totalTruck;
|
||||
|
||||
@Schema(description = "搬运总数")
|
||||
private Integer moveNum;
|
||||
@Schema(description = "破损片数")
|
||||
private Integer damageNum;
|
||||
|
||||
@Schema(description = "创建时间")
|
||||
@DateTimeFormat(pattern = FORMAT_YEAR_MONTH_DAY_HOUR_MINUTE_SECOND)
|
||||
|
@ -1,67 +0,0 @@
|
||||
package cn.iocoder.yudao.module.smartfactory.controller.admin.factorydata.vo;
|
||||
|
||||
import io.swagger.v3.oas.annotations.media.Schema;
|
||||
import lombok.*;
|
||||
|
||||
import java.time.LocalDate;
|
||||
import java.util.*;
|
||||
import java.util.*;
|
||||
import java.math.BigDecimal;
|
||||
import org.springframework.format.annotation.DateTimeFormat;
|
||||
import java.time.LocalDateTime;
|
||||
import com.alibaba.excel.annotation.*;
|
||||
|
||||
@Schema(description = "管理后台 - 工厂出库入库数据 Response VO")
|
||||
@Data
|
||||
@ExcelIgnoreUnannotated
|
||||
public class FactoryDataRespVO {
|
||||
|
||||
@Schema(description = "主键id", requiredMode = Schema.RequiredMode.REQUIRED, example = "17120")
|
||||
@ExcelProperty("主键id")
|
||||
private Long id;
|
||||
|
||||
@Schema(description = "工厂id", requiredMode = Schema.RequiredMode.REQUIRED, example = "7606")
|
||||
@ExcelProperty("工厂id")
|
||||
private Long factoryId;
|
||||
|
||||
@Schema(description = "进出库类型 1出库 2进库", requiredMode = Schema.RequiredMode.REQUIRED, example = "1")
|
||||
@ExcelProperty("进出库类型 1出库 2进库")
|
||||
private Integer dataType;
|
||||
|
||||
@Schema(description = "日期", requiredMode = Schema.RequiredMode.REQUIRED)
|
||||
@ExcelProperty("日期")
|
||||
private LocalDate date;
|
||||
|
||||
@Schema(description = "搬运工姓名", example = "张三")
|
||||
@ExcelProperty("搬运工姓名")
|
||||
private String porterName;
|
||||
|
||||
@Schema(description = "叉车司机姓名", example = "芋艿")
|
||||
@ExcelProperty("叉车司机姓名")
|
||||
private String dirverName;
|
||||
|
||||
@Schema(description = "仓库看管员姓名", example = "李四")
|
||||
@ExcelProperty("仓库看管员姓名")
|
||||
private String keeperName;
|
||||
|
||||
@Schema(description = "总数量")
|
||||
@ExcelProperty("总数量")
|
||||
private Integer totalNum;
|
||||
|
||||
@Schema(description = "总金额")
|
||||
@ExcelProperty("总金额")
|
||||
private BigDecimal totalAmount;
|
||||
|
||||
@Schema(description = "总车数")
|
||||
@ExcelProperty("总车数")
|
||||
private Integer totalTruck;
|
||||
|
||||
@Schema(description = "搬运总数")
|
||||
@ExcelProperty("搬运总数")
|
||||
private Integer moveNum;
|
||||
|
||||
@Schema(description = "创建时间", requiredMode = Schema.RequiredMode.REQUIRED)
|
||||
@ExcelProperty("创建时间")
|
||||
private LocalDateTime createTime;
|
||||
|
||||
}
|
@ -1,52 +1,38 @@
|
||||
package cn.iocoder.yudao.module.smartfactory.controller.admin.factorydata.vo;
|
||||
|
||||
import io.swagger.v3.oas.annotations.media.Schema;
|
||||
import lombok.*;
|
||||
import lombok.Data;
|
||||
|
||||
import java.time.LocalDate;
|
||||
import java.util.*;
|
||||
import javax.validation.constraints.*;
|
||||
import java.util.*;
|
||||
import javax.validation.constraints.NotNull;
|
||||
import java.math.BigDecimal;
|
||||
import java.time.LocalDate;
|
||||
|
||||
@Schema(description = "管理后台 - 工厂出库入库数据新增/修改 Request VO")
|
||||
@Data
|
||||
public class FactoryDataSaveReqVO {
|
||||
|
||||
@Schema(description = "主键id", requiredMode = Schema.RequiredMode.REQUIRED, example = "17120")
|
||||
@Schema(description = "主键id", requiredMode = Schema.RequiredMode.REQUIRED, example = "1")
|
||||
private Long id;
|
||||
|
||||
@Schema(description = "工厂id", requiredMode = Schema.RequiredMode.REQUIRED, example = "7606")
|
||||
@Schema(description = "工厂id", requiredMode = Schema.RequiredMode.REQUIRED, example = "1000078")
|
||||
@NotNull(message = "工厂id不能为空")
|
||||
private Long factoryId;
|
||||
|
||||
@Schema(description = "进出库类型 1出库 2进库", requiredMode = Schema.RequiredMode.REQUIRED, example = "1")
|
||||
@NotNull(message = "进出库类型 1出库 2进库不能为空")
|
||||
@Schema(description = "进出库类型 1出库 2入库", requiredMode = Schema.RequiredMode.REQUIRED, example = "1")
|
||||
@NotNull(message = "进出库类型 1出库 2入库不能为空")
|
||||
private Integer dataType;
|
||||
|
||||
@Schema(description = "日期", requiredMode = Schema.RequiredMode.REQUIRED)
|
||||
@Schema(description = "日期", requiredMode = Schema.RequiredMode.REQUIRED, example = "2024-05-14")
|
||||
@NotNull(message = "日期不能为空")
|
||||
private LocalDate date;
|
||||
|
||||
@Schema(description = "搬运工姓名", example = "张三")
|
||||
private String porterName;
|
||||
|
||||
@Schema(description = "叉车司机姓名", example = "芋艿")
|
||||
private String dirverName;
|
||||
|
||||
@Schema(description = "仓库看管员姓名", example = "李四")
|
||||
private String keeperName;
|
||||
|
||||
@Schema(description = "总数量")
|
||||
@Schema(description = "总箱数")
|
||||
private Integer totalNum;
|
||||
|
||||
@Schema(description = "总金额")
|
||||
private BigDecimal totalAmount;
|
||||
@Schema(description = "总平方数")
|
||||
private BigDecimal squareNum;
|
||||
|
||||
@Schema(description = "总车数")
|
||||
private Integer totalTruck;
|
||||
|
||||
@Schema(description = "搬运总数")
|
||||
private Integer moveNum;
|
||||
@Schema(description = "破损片数")
|
||||
private Integer damageNum;
|
||||
|
||||
}
|
@ -0,0 +1,18 @@
|
||||
package cn.iocoder.yudao.module.smartfactory.controller.admin.factorydata.vo;
|
||||
|
||||
import io.swagger.v3.oas.annotations.media.Schema;
|
||||
import lombok.Data;
|
||||
|
||||
@Schema(description = "管理后台 - 工厂出库入库数据 总览 Request VO")
|
||||
@Data
|
||||
public class FactoryDataTotalVO {
|
||||
|
||||
@Schema(description = "入库总数")
|
||||
private Integer inTotal;
|
||||
|
||||
@Schema(description = "出库总数")
|
||||
private Integer outTotal;
|
||||
|
||||
@Schema(description = "破损总数")
|
||||
private Integer damageNum;
|
||||
}
|
@ -0,0 +1,32 @@
|
||||
package cn.iocoder.yudao.module.smartfactory.controller.admin.factorydata.vo.sizeData;
|
||||
|
||||
import cn.iocoder.yudao.module.smartfactory.controller.admin.packagedata.vo.PackageDataSaveReqVO;
|
||||
import io.swagger.v3.oas.annotations.media.Schema;
|
||||
import lombok.Data;
|
||||
import org.springframework.format.annotation.DateTimeFormat;
|
||||
|
||||
import javax.validation.constraints.NotNull;
|
||||
import java.time.LocalDate;
|
||||
import java.util.List;
|
||||
|
||||
import static cn.iocoder.yudao.framework.common.util.date.DateUtils.FORMAT_YEAR_MONTH_DAY;
|
||||
|
||||
@Schema(description = "管理后台 - 工厂规格数据新增 Request VO")
|
||||
@Data
|
||||
public class FactoryDataSizeCreateReqVO {
|
||||
|
||||
@Schema(description = "打包线数据信息")
|
||||
private List<PackageDataSaveReqVO> packageData;
|
||||
|
||||
@Schema(description = "规格信息", requiredMode = Schema.RequiredMode.REQUIRED)
|
||||
private List<FactoryDataSizeSaveReqVO> items;
|
||||
|
||||
@Schema(description = "工厂编号", requiredMode = Schema.RequiredMode.REQUIRED, example = "1000078")
|
||||
@NotNull(message = "工厂编号不能为空")
|
||||
private Long factoryId;
|
||||
|
||||
@Schema(description = "日期", requiredMode = Schema.RequiredMode.REQUIRED)
|
||||
@NotNull(message = "日期不能为空")
|
||||
@DateTimeFormat(pattern = FORMAT_YEAR_MONTH_DAY)
|
||||
private LocalDate date;
|
||||
}
|
@ -0,0 +1,45 @@
|
||||
package cn.iocoder.yudao.module.smartfactory.controller.admin.factorydata.vo.sizeData;
|
||||
|
||||
import io.swagger.v3.oas.annotations.media.Schema;
|
||||
import lombok.Data;
|
||||
import org.springframework.format.annotation.DateTimeFormat;
|
||||
|
||||
import java.time.LocalDate;
|
||||
import java.time.LocalDateTime;
|
||||
|
||||
import static cn.iocoder.yudao.framework.common.util.date.DateUtils.FORMAT_YEAR_MONTH_DAY;
|
||||
import static cn.iocoder.yudao.framework.common.util.date.DateUtils.FORMAT_YEAR_MONTH_DAY_HOUR_MINUTE_SECOND;
|
||||
|
||||
@Schema(description = "管理后台 - 工厂规格数据 Response VO")
|
||||
@Data
|
||||
public class FactoryDataSizeRespVO {
|
||||
|
||||
@Schema(description = "主键id", requiredMode = Schema.RequiredMode.REQUIRED, example = "1")
|
||||
private Long id;
|
||||
|
||||
@Schema(description = "工厂编号", requiredMode = Schema.RequiredMode.REQUIRED, example = "1000078")
|
||||
private Long factoryId;
|
||||
|
||||
@Schema(description = "规格编号", requiredMode = Schema.RequiredMode.REQUIRED, example = "1")
|
||||
private Long sizeId;
|
||||
|
||||
@Schema(description = "规格名称", requiredMode = Schema.RequiredMode.REQUIRED, example = "300*300")
|
||||
private String sizeName;
|
||||
|
||||
@Schema(description = "规格片数", requiredMode = Schema.RequiredMode.REQUIRED, example = "4")
|
||||
private Integer sizePieces;
|
||||
|
||||
@Schema(description = "数据类型 | 1:入库破损 2:出库数 3:出库破损", requiredMode = Schema.RequiredMode.REQUIRED)
|
||||
private Integer type;
|
||||
|
||||
@Schema(description = "数量", requiredMode = Schema.RequiredMode.REQUIRED)
|
||||
private Integer num;
|
||||
|
||||
@Schema(description = "日期", requiredMode = Schema.RequiredMode.REQUIRED)
|
||||
@DateTimeFormat(pattern = FORMAT_YEAR_MONTH_DAY)
|
||||
private LocalDate date;
|
||||
|
||||
@Schema(description = "创建时间", requiredMode = Schema.RequiredMode.REQUIRED)
|
||||
@DateTimeFormat(pattern = FORMAT_YEAR_MONTH_DAY_HOUR_MINUTE_SECOND)
|
||||
private LocalDateTime createTime;
|
||||
}
|
@ -0,0 +1,41 @@
|
||||
package cn.iocoder.yudao.module.smartfactory.controller.admin.factorydata.vo.sizeData;
|
||||
|
||||
import io.swagger.v3.oas.annotations.media.Schema;
|
||||
import lombok.Data;
|
||||
|
||||
import javax.validation.constraints.NotNull;
|
||||
|
||||
@Schema(description = "管理后台 - 工厂规格数据修改 Request VO")
|
||||
@Data
|
||||
public class FactoryDataSizeSaveReqVO {
|
||||
|
||||
@Schema(description = "规格编号", requiredMode = Schema.RequiredMode.REQUIRED, example = "1")
|
||||
@NotNull(message = "规格编号不能为空")
|
||||
private Long sizeId;
|
||||
|
||||
@Schema(description = "规格名称", requiredMode = Schema.RequiredMode.REQUIRED, example = "300*300")
|
||||
@NotNull(message = "规格名称不能为空")
|
||||
private String sizeName;
|
||||
|
||||
@Schema(description = "规格片数", requiredMode = Schema.RequiredMode.REQUIRED, example = "4")
|
||||
@NotNull(message = "规格片数不能为空")
|
||||
private Integer sizePieces;
|
||||
|
||||
@Schema(description = "入库破损数量Id")
|
||||
private Long inDamageNumId;
|
||||
|
||||
@Schema(description = "入库破损数量")
|
||||
private Integer inDamageNum;
|
||||
|
||||
@Schema(description = "出库数量Id")
|
||||
private Long outNumId;
|
||||
|
||||
@Schema(description = "出库数量")
|
||||
private Integer outNum;
|
||||
|
||||
@Schema(description = "出库破损数量Id")
|
||||
private Long outDamageNumId;
|
||||
|
||||
@Schema(description = "出库破损数量")
|
||||
private Integer outDamageNum;
|
||||
}
|
@ -9,6 +9,7 @@ import cn.iocoder.yudao.framework.operatelog.core.annotations.OperateLog;
|
||||
import cn.iocoder.yudao.module.smartfactory.controller.admin.factoryinfo.vo.FactoryInfoPageReqVO;
|
||||
import cn.iocoder.yudao.module.smartfactory.controller.admin.factoryinfo.vo.FactoryInfoRespVO;
|
||||
import cn.iocoder.yudao.module.smartfactory.controller.admin.factoryinfo.vo.FactoryInfoSaveReqVO;
|
||||
import cn.iocoder.yudao.module.smartfactory.controller.admin.factoryinfo.vo.FactorySimpleRespVO;
|
||||
import cn.iocoder.yudao.module.smartfactory.dal.dataobject.factoryinfo.FactoryInfoDO;
|
||||
import cn.iocoder.yudao.module.smartfactory.service.factoryinfo.FactoryInfoService;
|
||||
import io.swagger.v3.oas.annotations.Operation;
|
||||
@ -69,6 +70,15 @@ public class FactoryInfoController {
|
||||
return success(factoryInfo);
|
||||
}
|
||||
|
||||
@GetMapping("/simple-list")
|
||||
@Operation(summary = "获得工厂列表 | 用于前端下拉框")
|
||||
@PreAuthorize("@ss.hasPermission('smartfactory:factory-info:query')")
|
||||
public CommonResult<List<FactorySimpleRespVO>> getFactoryList() {
|
||||
|
||||
List<FactoryInfoDO> factoryInfo = factoryInfoService.getFactoryListByType();
|
||||
return success(BeanUtils.toBean(factoryInfo, FactorySimpleRespVO.class));
|
||||
}
|
||||
|
||||
@GetMapping("/page")
|
||||
@Operation(summary = "获得工厂信息分页")
|
||||
@PreAuthorize("@ss.hasPermission('smartfactory:factory-info:query')")
|
||||
|
@ -22,8 +22,8 @@ public class FactoryInfoPageReqVO extends PageParam {
|
||||
@Schema(description = "工厂简称", example = "第一工厂")
|
||||
private String shortName;
|
||||
|
||||
@Schema(description = "工厂代码", example = "10000")
|
||||
private String code;
|
||||
@Schema(description = "工厂类型", example = "1")
|
||||
private String type;
|
||||
|
||||
@Schema(description = "状态", example = "1")
|
||||
private Integer status;
|
||||
|
@ -28,9 +28,9 @@ public class FactoryInfoRespVO {
|
||||
@ExcelProperty("工厂简称")
|
||||
private String shortName;
|
||||
|
||||
@Schema(description = "工厂代码", requiredMode = Schema.RequiredMode.REQUIRED, example = "10000")
|
||||
@ExcelProperty("工厂代码")
|
||||
private String code;
|
||||
@Schema(description = "工厂类型", requiredMode = Schema.RequiredMode.REQUIRED, example = "1")
|
||||
@ExcelProperty("工厂类型")
|
||||
private String type;
|
||||
|
||||
@Schema(description = "工厂简介", example = "这是一个工厂简介")
|
||||
@ExcelProperty("工厂简介")
|
||||
@ -61,4 +61,6 @@ public class FactoryInfoRespVO {
|
||||
@ExcelProperty("创建时间")
|
||||
private LocalDateTime createTime;
|
||||
|
||||
@Schema(description = "负责人编号", example = "126")
|
||||
private Long leaderUserId;
|
||||
}
|
@ -22,9 +22,9 @@ public class FactoryInfoSaveReqVO {
|
||||
@NotEmpty(message = "工厂简称不能为空")
|
||||
private String shortName;
|
||||
|
||||
@Schema(description = "工厂代码", requiredMode = Schema.RequiredMode.REQUIRED, example = "10000")
|
||||
@NotEmpty(message = "工厂代码不能为空")
|
||||
private String code;
|
||||
@Schema(description = "工厂类型", requiredMode = Schema.RequiredMode.REQUIRED, example = "1")
|
||||
@NotEmpty(message = "工厂类型不能为空")
|
||||
private String type;
|
||||
|
||||
@Schema(description = "工厂简介", example = "这是一个工厂简介")
|
||||
private String description;
|
||||
@ -39,7 +39,7 @@ public class FactoryInfoSaveReqVO {
|
||||
|
||||
@Schema(description = "区县id", requiredMode = Schema.RequiredMode.REQUIRED, example = "22761")
|
||||
@NotNull(message = "区县id不能为空")
|
||||
private Long districtId;
|
||||
private Long adCode;
|
||||
|
||||
@Schema(description = "省名称", requiredMode = Schema.RequiredMode.REQUIRED, example = "江西省")
|
||||
@NotEmpty(message = "省名称不能为空")
|
||||
@ -70,4 +70,6 @@ public class FactoryInfoSaveReqVO {
|
||||
@NotNull(message = "状态不能为空")
|
||||
private Integer status;
|
||||
|
||||
@Schema(description = "负责人编号", example = "126")
|
||||
private Long leaderUserId;
|
||||
}
|
@ -0,0 +1,20 @@
|
||||
package cn.iocoder.yudao.module.smartfactory.controller.admin.factoryinfo.vo;
|
||||
|
||||
import com.alibaba.excel.annotation.ExcelIgnoreUnannotated;
|
||||
import io.swagger.v3.oas.annotations.media.Schema;
|
||||
import lombok.Data;
|
||||
|
||||
@Schema(description = "管理后台 - 工厂信息 Response VO")
|
||||
@Data
|
||||
@ExcelIgnoreUnannotated
|
||||
public class FactorySimpleRespVO {
|
||||
|
||||
@Schema(description = "编号", requiredMode = Schema.RequiredMode.REQUIRED, example = "28794")
|
||||
private Long id;
|
||||
|
||||
@Schema(description = "工厂名字", requiredMode = Schema.RequiredMode.REQUIRED, example = "江西省南昌市第一工厂")
|
||||
private String name;
|
||||
|
||||
@Schema(description = "工厂简称", requiredMode = Schema.RequiredMode.REQUIRED, example = "第一工厂")
|
||||
private String shortName;
|
||||
}
|
@ -0,0 +1,95 @@
|
||||
package cn.iocoder.yudao.module.smartfactory.controller.admin.packageInfo;
|
||||
|
||||
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.module.smartfactory.controller.admin.packageInfo.vo.PackagePageReqVO;
|
||||
import cn.iocoder.yudao.module.smartfactory.controller.admin.packageInfo.vo.PackageRespVO;
|
||||
import cn.iocoder.yudao.module.smartfactory.controller.admin.packageInfo.vo.PackageSaveReqVO;
|
||||
import cn.iocoder.yudao.module.smartfactory.dal.dataobject.packageInfo.PackageDO;
|
||||
import cn.iocoder.yudao.module.smartfactory.dal.dataobject.size.SizeDO;
|
||||
import cn.iocoder.yudao.module.smartfactory.service.packageInfo.PackageService;
|
||||
import cn.iocoder.yudao.module.smartfactory.service.size.SizeService;
|
||||
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.validation.Valid;
|
||||
import java.util.List;
|
||||
|
||||
import static cn.iocoder.yudao.framework.common.pojo.CommonResult.success;
|
||||
|
||||
@Tag(name = "管理后台 - 打包线")
|
||||
@RestController
|
||||
@RequestMapping("/smartfactory/package")
|
||||
@Validated
|
||||
public class PackageController {
|
||||
|
||||
@Resource
|
||||
private PackageService packageService;
|
||||
|
||||
@Resource
|
||||
private SizeService sizeService;
|
||||
|
||||
@PostMapping("/create")
|
||||
@Operation(summary = "创建打包线")
|
||||
@PreAuthorize("@ss.hasPermission('smartfactory:package:create')")
|
||||
public CommonResult<Long> createPackage(@Valid @RequestBody PackageSaveReqVO createReqVO) {
|
||||
return success(packageService.createPackage(createReqVO));
|
||||
}
|
||||
|
||||
@PutMapping("/update")
|
||||
@Operation(summary = "更新打包线")
|
||||
@PreAuthorize("@ss.hasPermission('smartfactory:package:update')")
|
||||
public CommonResult<Boolean> updatePackage(@Valid @RequestBody PackageSaveReqVO updateReqVO) {
|
||||
packageService.updatePackage(updateReqVO);
|
||||
return success(true);
|
||||
}
|
||||
|
||||
@DeleteMapping("/delete")
|
||||
@Operation(summary = "删除打包线")
|
||||
@Parameter(name = "id", description = "编号", required = true)
|
||||
@PreAuthorize("@ss.hasPermission('smartfactory:package:delete')")
|
||||
public CommonResult<Boolean> deletePackage(@RequestParam("id") Long id) {
|
||||
packageService.deletePackage(id);
|
||||
return success(true);
|
||||
}
|
||||
|
||||
@GetMapping("/get")
|
||||
@Operation(summary = "获得打包线")
|
||||
@Parameter(name = "id", description = "编号", required = true, example = "1024")
|
||||
@PreAuthorize("@ss.hasPermission('smartfactory:package:query')")
|
||||
public CommonResult<PackageRespVO> getPackage(@RequestParam("id") Long id) {
|
||||
|
||||
PackageDO packageDO = packageService.getPackage(id);
|
||||
|
||||
//获得规格信息
|
||||
SizeDO sizeDo = sizeService.getSize(packageDO.getSizeId());
|
||||
|
||||
PackageRespVO respVO = BeanUtils.toBean(packageDO, PackageRespVO.class);
|
||||
respVO.setSizeName(sizeDo.getName());
|
||||
|
||||
return success(respVO);
|
||||
}
|
||||
|
||||
@GetMapping("/get-list")
|
||||
@Operation(summary = "获得指定工厂的打包线列表")
|
||||
@Parameter(name = "factoryId", description = "工厂编号", required = true, example = "1000078")
|
||||
@PreAuthorize("@ss.hasPermission('smartfactory:package:query')")
|
||||
public CommonResult<List<PackageRespVO>> getPackageByFactoryId(@RequestParam("factoryId") Long factoryId) {
|
||||
|
||||
return success(packageService.getPackageByFactoryId(factoryId));
|
||||
}
|
||||
|
||||
@GetMapping("/page")
|
||||
@Operation(summary = "获得打包线分页")
|
||||
@PreAuthorize("@ss.hasPermission('smartfactory:package:query')")
|
||||
public CommonResult<PageResult<PackageRespVO>> getPackagePage(@Valid PackagePageReqVO pageReqVO) {
|
||||
|
||||
return success(packageService.getPackagePage(pageReqVO));
|
||||
}
|
||||
}
|
@ -0,0 +1,39 @@
|
||||
package cn.iocoder.yudao.module.smartfactory.controller.admin.packageInfo.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 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 PackagePageReqVO extends PageParam {
|
||||
|
||||
@Schema(description = "工厂id", example = "10000078")
|
||||
private Long factoryId;
|
||||
|
||||
@Schema(description = "规格id", example = "100")
|
||||
private Long sizeId;
|
||||
|
||||
@Schema(description = "规格片数", example = "3")
|
||||
private Integer sizePieces;
|
||||
|
||||
@Schema(description = "打包线名称", example = "1线")
|
||||
private String name;
|
||||
|
||||
@Schema(description = "设备名称", example = "芋艿")
|
||||
private String deviceName;
|
||||
|
||||
@Schema(description = "创建时间")
|
||||
@DateTimeFormat(pattern = FORMAT_YEAR_MONTH_DAY_HOUR_MINUTE_SECOND)
|
||||
private LocalDateTime[] createTime;
|
||||
|
||||
}
|
@ -0,0 +1,50 @@
|
||||
package cn.iocoder.yudao.module.smartfactory.controller.admin.packageInfo.vo;
|
||||
|
||||
import com.alibaba.excel.annotation.ExcelIgnoreUnannotated;
|
||||
import com.alibaba.excel.annotation.ExcelProperty;
|
||||
import io.swagger.v3.oas.annotations.media.Schema;
|
||||
import lombok.Data;
|
||||
|
||||
import java.time.LocalDateTime;
|
||||
|
||||
@Schema(description = "管理后台 - 打包线 Response VO")
|
||||
@Data
|
||||
@ExcelIgnoreUnannotated
|
||||
public class PackageRespVO {
|
||||
|
||||
@Schema(description = "主键id", requiredMode = Schema.RequiredMode.REQUIRED, example = "10")
|
||||
@ExcelProperty("主键id")
|
||||
private Long id;
|
||||
|
||||
@Schema(description = "工厂id", requiredMode = Schema.RequiredMode.REQUIRED, example = "10000078")
|
||||
@ExcelProperty("工厂id")
|
||||
private Long factoryId;
|
||||
|
||||
@Schema(description = "工厂名称", requiredMode = Schema.RequiredMode.REQUIRED, example = "新景象")
|
||||
@ExcelProperty("工厂名称")
|
||||
private String factoryName;
|
||||
|
||||
@Schema(description = "规格id", requiredMode = Schema.RequiredMode.REQUIRED, example = "100")
|
||||
@ExcelProperty("规格id")
|
||||
private Long sizeId;
|
||||
|
||||
@Schema(description = "规格名称", requiredMode = Schema.RequiredMode.REQUIRED, example = "300*300")
|
||||
@ExcelProperty("规格名称")
|
||||
private String sizeName;
|
||||
|
||||
@Schema(description = "规格片数", requiredMode = Schema.RequiredMode.REQUIRED, example = "3")
|
||||
@ExcelProperty("规格片数")
|
||||
private Integer sizePieces;
|
||||
|
||||
@Schema(description = "打包线名称", requiredMode = Schema.RequiredMode.REQUIRED, example = "1线")
|
||||
@ExcelProperty("打包线名称")
|
||||
private String name;
|
||||
|
||||
@Schema(description = "设备名称", example = "芋艿")
|
||||
@ExcelProperty("设备名称")
|
||||
private String deviceName;
|
||||
|
||||
@Schema(description = "创建时间", requiredMode = Schema.RequiredMode.REQUIRED)
|
||||
@ExcelProperty("创建时间")
|
||||
private LocalDateTime createTime;
|
||||
}
|
@ -0,0 +1,35 @@
|
||||
package cn.iocoder.yudao.module.smartfactory.controller.admin.packageInfo.vo;
|
||||
|
||||
import io.swagger.v3.oas.annotations.media.Schema;
|
||||
import lombok.Data;
|
||||
|
||||
import javax.validation.constraints.NotEmpty;
|
||||
import javax.validation.constraints.NotNull;
|
||||
|
||||
@Schema(description = "管理后台 - 打包线新增/修改 Request VO")
|
||||
@Data
|
||||
public class PackageSaveReqVO {
|
||||
|
||||
@Schema(description = "主键id", requiredMode = Schema.RequiredMode.REQUIRED, example = "10")
|
||||
private Long id;
|
||||
|
||||
@Schema(description = "工厂id", requiredMode = Schema.RequiredMode.REQUIRED, example = "10000078")
|
||||
@NotNull(message = "工厂id不能为空")
|
||||
private Long factoryId;
|
||||
|
||||
@Schema(description = "规格id", requiredMode = Schema.RequiredMode.REQUIRED, example = "100")
|
||||
@NotNull(message = "规格id不能为空")
|
||||
private Long sizeId;
|
||||
|
||||
@Schema(description = "规格片数", requiredMode = Schema.RequiredMode.REQUIRED, example = "3")
|
||||
@NotNull(message = "规格片数不能为空")
|
||||
private Integer sizePieces;
|
||||
|
||||
@Schema(description = "打包线名称", requiredMode = Schema.RequiredMode.REQUIRED, example = "1线")
|
||||
@NotEmpty(message = "打包线名称不能为空")
|
||||
private String name;
|
||||
|
||||
@Schema(description = "设备名称", example = "芋艿")
|
||||
private String deviceName;
|
||||
|
||||
}
|
@ -6,9 +6,11 @@ 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.packagedata.vo.PackageDataCreateReqVO;
|
||||
import cn.iocoder.yudao.module.smartfactory.controller.admin.packagedata.vo.PackageDataPageReqVO;
|
||||
import cn.iocoder.yudao.module.smartfactory.controller.admin.packagedata.vo.PackageDataRespVO;
|
||||
import cn.iocoder.yudao.module.smartfactory.controller.admin.packagedata.vo.PackageDataSaveReqVO;
|
||||
import cn.iocoder.yudao.module.smartfactory.controller.admin.packagedata.vo.PackagePageDataRespVO;
|
||||
import cn.iocoder.yudao.module.smartfactory.convert.packageData.PackageDataConvert;
|
||||
import cn.iocoder.yudao.module.smartfactory.dal.dataobject.packagedata.PackageDataDO;
|
||||
import cn.iocoder.yudao.module.smartfactory.service.packagedata.PackageDataService;
|
||||
import io.swagger.v3.oas.annotations.Operation;
|
||||
@ -29,7 +31,7 @@ import static cn.iocoder.yudao.framework.operatelog.core.enums.OperateTypeEnum.E
|
||||
|
||||
@Tag(name = "管理后台 - 打包线数据")
|
||||
@RestController
|
||||
@RequestMapping("/factory/package-data")
|
||||
@RequestMapping("/smartfactory/package-data")
|
||||
@Validated
|
||||
public class PackageDataController {
|
||||
|
||||
@ -38,56 +40,64 @@ public class PackageDataController {
|
||||
|
||||
@PostMapping("/create")
|
||||
@Operation(summary = "创建打包线数据")
|
||||
@PreAuthorize("@ss.hasPermission('factory:package-data:create')")
|
||||
public CommonResult<Long> createPackageData(@Valid @RequestBody PackageDataSaveReqVO createReqVO) {
|
||||
@PreAuthorize("@ss.hasPermission('smartfactory:package-data:create')")
|
||||
public CommonResult<Long> createPackageData(@Valid @RequestBody PackageDataCreateReqVO createReqVO) {
|
||||
return success(packageDataService.createPackageData(createReqVO));
|
||||
}
|
||||
|
||||
@PutMapping("/update")
|
||||
@Operation(summary = "更新打包线数据")
|
||||
@PreAuthorize("@ss.hasPermission('factory:package-data:update')")
|
||||
public CommonResult<Boolean> updatePackageData(@Valid @RequestBody PackageDataSaveReqVO updateReqVO) {
|
||||
@PreAuthorize("@ss.hasPermission('smartfactory:package-data:update')")
|
||||
public CommonResult<Boolean> updatePackageData(@Valid @RequestBody PackageDataCreateReqVO updateReqVO) {
|
||||
packageDataService.updatePackageData(updateReqVO);
|
||||
return success(true);
|
||||
}
|
||||
|
||||
@DeleteMapping("/delete")
|
||||
@Operation(summary = "删除打包线数据")
|
||||
@Parameter(name = "id", description = "编号", required = true)
|
||||
@PreAuthorize("@ss.hasPermission('factory:package-data:delete')")
|
||||
public CommonResult<Boolean> deletePackageData(@RequestParam("id") Long id) {
|
||||
packageDataService.deletePackageData(id);
|
||||
@Parameter(name = "factoryId", description = "工厂编号", required = true, example = "1000078")
|
||||
@Parameter(name = "date", description = "打包日期", required = true, example = "2024-05-14")
|
||||
@PreAuthorize("@ss.hasPermission('smartfactory:package-data:delete')")
|
||||
public CommonResult<Boolean> deletePackageData(@RequestParam("factoryId") Long factoryId, @RequestParam("date") String date) {
|
||||
|
||||
packageDataService.deletePackageData(factoryId, date);
|
||||
return success(true);
|
||||
}
|
||||
|
||||
@GetMapping("/get")
|
||||
@Operation(summary = "获得打包线数据")
|
||||
@Parameter(name = "id", description = "编号", required = true, example = "1024")
|
||||
@PreAuthorize("@ss.hasPermission('factory:package-data:query')")
|
||||
public CommonResult<PackageDataRespVO> getPackageData(@RequestParam("id") Long id) {
|
||||
PackageDataDO packageData = packageDataService.getPackageData(id);
|
||||
@GetMapping("/get-list")
|
||||
@Operation(summary = "获得指定 工厂和打包日期的 打包线数据列表")
|
||||
@Parameter(name = "factoryId", description = "工厂编号", required = true, example = "1000078")
|
||||
@Parameter(name = "date", description = "打包日期", required = true, example = "2024-05-14")
|
||||
@PreAuthorize("@ss.hasPermission('smartfactory:package-data:query')")
|
||||
public CommonResult<List<PackageDataRespVO>> getListByFactoryIdAndDate(@RequestParam("factoryId") Long factoryId, @RequestParam("date") String date) {
|
||||
|
||||
List<PackageDataDO> packageData = packageDataService.getListByFactoryIdAndDate(factoryId, date);
|
||||
|
||||
return success(BeanUtils.toBean(packageData, PackageDataRespVO.class));
|
||||
}
|
||||
|
||||
@GetMapping("/page")
|
||||
@Operation(summary = "获得打包线数据分页")
|
||||
@PreAuthorize("@ss.hasPermission('factory:package-data:query')")
|
||||
public CommonResult<PageResult<PackageDataRespVO>> getPackageDataPage(@Valid PackageDataPageReqVO pageReqVO) {
|
||||
PageResult<PackageDataDO> pageResult = packageDataService.getPackageDataPage(pageReqVO);
|
||||
return success(BeanUtils.toBean(pageResult, PackageDataRespVO.class));
|
||||
@PreAuthorize("@ss.hasPermission('smartfactory:package-data:query')")
|
||||
public CommonResult<PageResult<PackagePageDataRespVO>> getPackageDataPage(@Valid PackageDataPageReqVO pageReqVO) {
|
||||
|
||||
PageResult<PackageDataRespVO> pageResult = packageDataService.getPackageDataPage(pageReqVO);
|
||||
|
||||
List<PackagePageDataRespVO> dataRespVOS = PackageDataConvert.INSTANCE.convertList1(pageResult.getList());
|
||||
return success(new PageResult<>(dataRespVOS, pageResult.getTotal()));
|
||||
}
|
||||
|
||||
@GetMapping("/export-excel")
|
||||
@Operation(summary = "导出打包线数据 Excel")
|
||||
@PreAuthorize("@ss.hasPermission('factory:package-data:export')")
|
||||
@PreAuthorize("@ss.hasPermission('smartfactory:package-data:export')")
|
||||
@OperateLog(type = EXPORT)
|
||||
public void exportPackageDataExcel(@Valid PackageDataPageReqVO pageReqVO,
|
||||
HttpServletResponse response) throws IOException {
|
||||
|
||||
pageReqVO.setPageSize(PageParam.PAGE_SIZE_NONE);
|
||||
List<PackageDataDO> list = packageDataService.getPackageDataPage(pageReqVO).getList();
|
||||
List<PackageDataRespVO> list = packageDataService.getPackageDataPage(pageReqVO).getList();
|
||||
// 导出 Excel
|
||||
ExcelUtils.write(response, "打包线数据.xls", "数据", PackageDataRespVO.class,
|
||||
BeanUtils.toBean(list, PackageDataRespVO.class));
|
||||
ExcelUtils.write(response, "打包线数据.xls", "数据", PackageDataRespVO.class, list);
|
||||
}
|
||||
|
||||
}
|
@ -0,0 +1,28 @@
|
||||
package cn.iocoder.yudao.module.smartfactory.controller.admin.packagedata.vo;
|
||||
|
||||
import io.swagger.v3.oas.annotations.media.Schema;
|
||||
import lombok.Data;
|
||||
import org.springframework.format.annotation.DateTimeFormat;
|
||||
|
||||
import javax.validation.constraints.NotNull;
|
||||
import java.time.LocalDate;
|
||||
import java.util.List;
|
||||
|
||||
import static cn.iocoder.yudao.framework.common.util.date.DateUtils.FORMAT_YEAR_MONTH_DAY;
|
||||
|
||||
@Schema(description = "管理后台 - 打包线数据新增 Request VO")
|
||||
@Data
|
||||
public class PackageDataCreateReqVO {
|
||||
|
||||
@Schema(description = "工厂编号", requiredMode = Schema.RequiredMode.REQUIRED)
|
||||
@NotNull(message = "工厂编号不能为空")
|
||||
private Long factoryId;
|
||||
|
||||
@Schema(description = "打包线信息", requiredMode = Schema.RequiredMode.REQUIRED)
|
||||
private List<PackageDataSaveReqVO> packageData;
|
||||
|
||||
@Schema(description = "打包日期", requiredMode = Schema.RequiredMode.REQUIRED)
|
||||
@NotNull(message = "打包日期不能为空")
|
||||
@DateTimeFormat(pattern = FORMAT_YEAR_MONTH_DAY)
|
||||
private LocalDate packageDate;
|
||||
}
|
@ -1,12 +1,16 @@
|
||||
package cn.iocoder.yudao.module.smartfactory.controller.admin.packagedata.vo;
|
||||
|
||||
import lombok.*;
|
||||
import java.util.*;
|
||||
import io.swagger.v3.oas.annotations.media.Schema;
|
||||
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.LocalDate;
|
||||
import java.time.LocalDateTime;
|
||||
|
||||
import static cn.iocoder.yudao.framework.common.util.date.DateUtils.FORMAT_YEAR_MONTH_DAY;
|
||||
import static cn.iocoder.yudao.framework.common.util.date.DateUtils.FORMAT_YEAR_MONTH_DAY_HOUR_MINUTE_SECOND;
|
||||
|
||||
@Schema(description = "管理后台 - 打包线数据分页 Request VO")
|
||||
@ -15,24 +19,34 @@ import static cn.iocoder.yudao.framework.common.util.date.DateUtils.FORMAT_YEAR_
|
||||
@ToString(callSuper = true)
|
||||
public class PackageDataPageReqVO extends PageParam {
|
||||
|
||||
@Schema(description = "工厂id", example = "29256")
|
||||
private Long factoryId;
|
||||
|
||||
@Schema(description = "规格id", example = "5911")
|
||||
private Long sizeId;
|
||||
|
||||
@Schema(description = "规格名称", example = "王五")
|
||||
private String sizeName;
|
||||
|
||||
@Schema(description = "打包线id", example = "31120")
|
||||
@Schema(description = "打包线id", example = "12")
|
||||
private Long packageId;
|
||||
|
||||
@Schema(description = "打包线名称", example = "李四")
|
||||
@Schema(description = "打包线名称", example = "1线")
|
||||
private String packageName;
|
||||
|
||||
@Schema(description = "打包数量")
|
||||
@Schema(description = "工厂id", example = "1000078")
|
||||
private Long factoryId;
|
||||
|
||||
@Schema(description = "规格名称", example = "300*300")
|
||||
private String sizeName;
|
||||
|
||||
@Schema(description = "规格片数", example = "1")
|
||||
private Integer sizePieces;
|
||||
|
||||
@Schema(description = "设备名称", example = "三星")
|
||||
private String deviceName;
|
||||
|
||||
@Schema(description = "打包日期", example = "2024-05-14")
|
||||
@DateTimeFormat(pattern = FORMAT_YEAR_MONTH_DAY)
|
||||
private LocalDate packageDate;
|
||||
|
||||
@Schema(description = "手动打包数量")
|
||||
private Integer num;
|
||||
|
||||
@Schema(description = "自动打包数量")
|
||||
private Integer autoNum;
|
||||
|
||||
@Schema(description = "创建时间")
|
||||
@DateTimeFormat(pattern = FORMAT_YEAR_MONTH_DAY_HOUR_MINUTE_SECOND)
|
||||
private LocalDateTime[] createTime;
|
||||
|
@ -1,48 +1,78 @@
|
||||
package cn.iocoder.yudao.module.smartfactory.controller.admin.packagedata.vo;
|
||||
|
||||
import com.alibaba.excel.annotation.ExcelIgnoreUnannotated;
|
||||
import com.alibaba.excel.annotation.ExcelProperty;
|
||||
import io.swagger.v3.oas.annotations.media.Schema;
|
||||
import lombok.*;
|
||||
import java.util.*;
|
||||
import java.util.*;
|
||||
import lombok.Data;
|
||||
import org.springframework.format.annotation.DateTimeFormat;
|
||||
|
||||
import java.math.BigDecimal;
|
||||
import java.time.LocalDate;
|
||||
import java.time.LocalDateTime;
|
||||
import com.alibaba.excel.annotation.*;
|
||||
|
||||
import static cn.iocoder.yudao.framework.common.util.date.DateUtils.FORMAT_YEAR_MONTH_DAY;
|
||||
|
||||
@Schema(description = "管理后台 - 打包线数据 Response VO")
|
||||
@Data
|
||||
@ExcelIgnoreUnannotated
|
||||
public class PackageDataRespVO {
|
||||
|
||||
@Schema(description = "主键id", requiredMode = Schema.RequiredMode.REQUIRED, example = "18914")
|
||||
@ExcelProperty("主键id")
|
||||
@Schema(description = "主键id", requiredMode = Schema.RequiredMode.REQUIRED, example = "1")
|
||||
@ExcelProperty("编号")
|
||||
private Long id;
|
||||
|
||||
@Schema(description = "工厂id", requiredMode = Schema.RequiredMode.REQUIRED, example = "29256")
|
||||
@ExcelProperty("工厂id")
|
||||
@Schema(description = "工厂id", requiredMode = Schema.RequiredMode.REQUIRED, example = "1000078")
|
||||
@ExcelProperty("工厂编号")
|
||||
private Long factoryId;
|
||||
|
||||
@Schema(description = "规格id", requiredMode = Schema.RequiredMode.REQUIRED, example = "5911")
|
||||
@ExcelProperty("规格id")
|
||||
private Long sizeId;
|
||||
@Schema(description = "工厂名称", requiredMode = Schema.RequiredMode.REQUIRED, example = "新景象")
|
||||
@ExcelProperty("工厂名称")
|
||||
private String factoryName;
|
||||
|
||||
@Schema(description = "规格名称", requiredMode = Schema.RequiredMode.REQUIRED, example = "王五")
|
||||
@ExcelProperty("规格名称")
|
||||
private String sizeName;
|
||||
|
||||
@Schema(description = "打包线id", requiredMode = Schema.RequiredMode.REQUIRED, example = "31120")
|
||||
@ExcelProperty("打包线id")
|
||||
@Schema(description = "打包线id", requiredMode = Schema.RequiredMode.REQUIRED, example = "12")
|
||||
private Long packageId;
|
||||
|
||||
@Schema(description = "打包线名称", requiredMode = Schema.RequiredMode.REQUIRED, example = "李四")
|
||||
@Schema(description = "打包线名称", requiredMode = Schema.RequiredMode.REQUIRED, example = "1线")
|
||||
@ExcelProperty("打包线名称")
|
||||
private String packageName;
|
||||
|
||||
@Schema(description = "打包数量", requiredMode = Schema.RequiredMode.REQUIRED)
|
||||
@ExcelProperty("打包数量")
|
||||
@Schema(description = "规格编号", requiredMode = Schema.RequiredMode.REQUIRED, example = "1")
|
||||
private Long sizeId;
|
||||
|
||||
@Schema(description = "规格名称", requiredMode = Schema.RequiredMode.REQUIRED, example = "300*300")
|
||||
@ExcelProperty("规格名称")
|
||||
private String sizeName;
|
||||
|
||||
@Schema(description = "规格片数", requiredMode = Schema.RequiredMode.REQUIRED, example = "1")
|
||||
@ExcelProperty("规格片数")
|
||||
private Integer sizePieces;
|
||||
|
||||
@Schema(description = "设备名称", example = "三星")
|
||||
@ExcelProperty("设备名称")
|
||||
private String deviceName;
|
||||
|
||||
@Schema(description = "打包日期", requiredMode = Schema.RequiredMode.REQUIRED)
|
||||
@DateTimeFormat(pattern = FORMAT_YEAR_MONTH_DAY)
|
||||
@ExcelProperty("打包日期")
|
||||
private LocalDate packageDate;
|
||||
|
||||
@Schema(description = "手动打包数量", requiredMode = Schema.RequiredMode.REQUIRED)
|
||||
@ExcelProperty("手动打包数量")
|
||||
private Integer num;
|
||||
|
||||
@Schema(description = "自动打包数量", requiredMode = Schema.RequiredMode.REQUIRED)
|
||||
@ExcelProperty("自动打包数量")
|
||||
private Integer autoNum;
|
||||
|
||||
@Schema(description = "平方数", requiredMode = Schema.RequiredMode.REQUIRED)
|
||||
@ExcelProperty("平方数")
|
||||
private BigDecimal squareNum;
|
||||
|
||||
@Schema(description = "破损数量", requiredMode = Schema.RequiredMode.REQUIRED)
|
||||
@ExcelProperty("破损数量")
|
||||
private Integer damageNum;
|
||||
|
||||
@Schema(description = "创建时间", requiredMode = Schema.RequiredMode.REQUIRED)
|
||||
@ExcelProperty("创建时间")
|
||||
private LocalDateTime createTime;
|
||||
|
||||
}
|
@ -1,40 +1,59 @@
|
||||
package cn.iocoder.yudao.module.smartfactory.controller.admin.packagedata.vo;
|
||||
|
||||
import io.swagger.v3.oas.annotations.media.Schema;
|
||||
import lombok.*;
|
||||
import java.util.*;
|
||||
import javax.validation.constraints.*;
|
||||
import java.util.*;
|
||||
import lombok.Data;
|
||||
|
||||
@Schema(description = "管理后台 - 打包线数据新增/修改 Request VO")
|
||||
import javax.validation.constraints.NotEmpty;
|
||||
import javax.validation.constraints.NotNull;
|
||||
import java.time.LocalDate;
|
||||
|
||||
@Schema(description = "管理后台 - 打包线数据修改 Request VO")
|
||||
@Data
|
||||
public class PackageDataSaveReqVO {
|
||||
|
||||
@Schema(description = "主键id", requiredMode = Schema.RequiredMode.REQUIRED, example = "18914")
|
||||
@Schema(description = "主键id", requiredMode = Schema.RequiredMode.REQUIRED, example = "1")
|
||||
private Long id;
|
||||
|
||||
@Schema(description = "工厂id", requiredMode = Schema.RequiredMode.REQUIRED, example = "29256")
|
||||
@NotNull(message = "工厂id不能为空")
|
||||
private Long factoryId;
|
||||
|
||||
@Schema(description = "规格id", requiredMode = Schema.RequiredMode.REQUIRED, example = "5911")
|
||||
@NotNull(message = "规格id不能为空")
|
||||
private Long sizeId;
|
||||
|
||||
@Schema(description = "规格名称", requiredMode = Schema.RequiredMode.REQUIRED, example = "王五")
|
||||
@NotEmpty(message = "规格名称不能为空")
|
||||
private String sizeName;
|
||||
|
||||
@Schema(description = "打包线id", requiredMode = Schema.RequiredMode.REQUIRED, example = "31120")
|
||||
@Schema(description = "打包线id", requiredMode = Schema.RequiredMode.REQUIRED, example = "12")
|
||||
@NotNull(message = "打包线id不能为空")
|
||||
private Long packageId;
|
||||
|
||||
@Schema(description = "打包线名称", requiredMode = Schema.RequiredMode.REQUIRED, example = "李四")
|
||||
@Schema(description = "打包线名称", requiredMode = Schema.RequiredMode.REQUIRED, example = "1线")
|
||||
@NotEmpty(message = "打包线名称不能为空")
|
||||
private String packageName;
|
||||
|
||||
@Schema(description = "打包数量", requiredMode = Schema.RequiredMode.REQUIRED)
|
||||
@NotNull(message = "打包数量不能为空")
|
||||
@Schema(description = "工厂id", requiredMode = Schema.RequiredMode.REQUIRED, example = "1000078")
|
||||
@NotNull(message = "工厂id不能为空")
|
||||
private Long factoryId;
|
||||
|
||||
@Schema(description = "规格编号", requiredMode = Schema.RequiredMode.REQUIRED, example = "1")
|
||||
@NotEmpty(message = "规格编号不能为空")
|
||||
private Long sizeId;
|
||||
|
||||
@Schema(description = "规格名称", requiredMode = Schema.RequiredMode.REQUIRED, example = "300*300")
|
||||
@NotEmpty(message = "规格名称不能为空")
|
||||
private String sizeName;
|
||||
|
||||
@Schema(description = "规格片数", requiredMode = Schema.RequiredMode.REQUIRED, example = "1")
|
||||
@NotNull(message = "规格片数不能为空")
|
||||
private Integer sizePieces;
|
||||
|
||||
@Schema(description = "设备名称", example = "三星")
|
||||
private String deviceName;
|
||||
|
||||
@Schema(description = "打包日期", requiredMode = Schema.RequiredMode.REQUIRED)
|
||||
private LocalDate packageDate;
|
||||
|
||||
@Schema(description = "手动打包数量", requiredMode = Schema.RequiredMode.REQUIRED)
|
||||
@NotNull(message = "手动打包数量不能为空")
|
||||
private Integer num;
|
||||
|
||||
@Schema(description = "自动打包数量", requiredMode = Schema.RequiredMode.REQUIRED)
|
||||
@NotNull(message = "打包数量不能为空")
|
||||
private Integer autoNum;
|
||||
|
||||
@Schema(description = "破损数量", requiredMode = Schema.RequiredMode.REQUIRED)
|
||||
@NotNull(message = "破损数量不能为空")
|
||||
private Integer damageNum;
|
||||
|
||||
}
|
@ -0,0 +1,27 @@
|
||||
package cn.iocoder.yudao.module.smartfactory.controller.admin.packagedata.vo;
|
||||
|
||||
import io.swagger.v3.oas.annotations.media.Schema;
|
||||
import lombok.Data;
|
||||
import org.springframework.format.annotation.DateTimeFormat;
|
||||
|
||||
import java.util.List;
|
||||
|
||||
import static cn.iocoder.yudao.framework.common.util.date.DateUtils.FORMAT_YEAR_MONTH_DAY;
|
||||
|
||||
@Schema(description = "管理后台 - 打包线分页数据 Response VO")
|
||||
@Data
|
||||
public class PackagePageDataRespVO {
|
||||
|
||||
@Schema(description = "工厂id", requiredMode = Schema.RequiredMode.REQUIRED, example = "1000078")
|
||||
private Long factoryId;
|
||||
|
||||
@Schema(description = "工厂名称", requiredMode = Schema.RequiredMode.REQUIRED, example = "新景象")
|
||||
private String factoryName;
|
||||
|
||||
@Schema(description = "打包日期", requiredMode = Schema.RequiredMode.REQUIRED)
|
||||
@DateTimeFormat(pattern = FORMAT_YEAR_MONTH_DAY)
|
||||
private String packageDate;
|
||||
|
||||
@Schema(description = "打包线数据集", requiredMode = Schema.RequiredMode.REQUIRED)
|
||||
private List<PackageDataRespVO> packageDataS;
|
||||
}
|
@ -0,0 +1,82 @@
|
||||
package cn.iocoder.yudao.module.smartfactory.controller.admin.size;
|
||||
|
||||
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.module.smartfactory.controller.admin.size.vo.SizePageReqVO;
|
||||
import cn.iocoder.yudao.module.smartfactory.controller.admin.size.vo.SizeRespVO;
|
||||
import cn.iocoder.yudao.module.smartfactory.controller.admin.size.vo.SizeSaveReqVO;
|
||||
import cn.iocoder.yudao.module.smartfactory.dal.dataobject.size.SizeDO;
|
||||
import cn.iocoder.yudao.module.smartfactory.service.size.SizeService;
|
||||
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.validation.Valid;
|
||||
import java.util.List;
|
||||
|
||||
import static cn.iocoder.yudao.framework.common.pojo.CommonResult.success;
|
||||
|
||||
@Tag(name = "管理后台 - 规格")
|
||||
@RestController
|
||||
@RequestMapping("/smartfactory/size")
|
||||
@Validated
|
||||
public class SizeController {
|
||||
|
||||
@Resource
|
||||
private SizeService sizeService;
|
||||
|
||||
@PostMapping("/create")
|
||||
@Operation(summary = "创建规格")
|
||||
@PreAuthorize("@ss.hasPermission('smartfactory:size:create')")
|
||||
public CommonResult<Long> createSize(@Valid @RequestBody SizeSaveReqVO createReqVO) {
|
||||
return success(sizeService.createSize(createReqVO));
|
||||
}
|
||||
|
||||
@PutMapping("/update")
|
||||
@Operation(summary = "更新规格")
|
||||
@PreAuthorize("@ss.hasPermission('smartfactory:size:update')")
|
||||
public CommonResult<Boolean> updateSize(@Valid @RequestBody SizeSaveReqVO updateReqVO) {
|
||||
sizeService.updateSize(updateReqVO);
|
||||
return success(true);
|
||||
}
|
||||
|
||||
@DeleteMapping("/delete")
|
||||
@Operation(summary = "删除规格")
|
||||
@Parameter(name = "id", description = "编号", required = true)
|
||||
@PreAuthorize("@ss.hasPermission('smartfactory:size:delete')")
|
||||
public CommonResult<Boolean> deleteSize(@RequestParam("id") Long id) {
|
||||
sizeService.deleteSize(id);
|
||||
return success(true);
|
||||
}
|
||||
|
||||
@GetMapping("/get")
|
||||
@Operation(summary = "获得规格")
|
||||
@Parameter(name = "id", description = "编号", required = true, example = "1024")
|
||||
@PreAuthorize("@ss.hasPermission('smartfactory:size:query')")
|
||||
public CommonResult<SizeRespVO> getSize(@RequestParam("id") Long id) {
|
||||
SizeDO size = sizeService.getSize(id);
|
||||
return success(BeanUtils.toBean(size, SizeRespVO.class));
|
||||
}
|
||||
|
||||
@GetMapping("/page")
|
||||
@Operation(summary = "获得规格分页")
|
||||
@PreAuthorize("@ss.hasPermission('smartfactory:size:query')")
|
||||
public CommonResult<PageResult<SizeRespVO>> getSizePage(@Valid SizePageReqVO pageReqVO) {
|
||||
PageResult<SizeDO> pageResult = sizeService.getSizePage(pageReqVO);
|
||||
return success(BeanUtils.toBean(pageResult, SizeRespVO.class));
|
||||
}
|
||||
|
||||
@GetMapping("/simple-list")
|
||||
@Operation(summary = "获得规格列表 | 用于前端下拉框")
|
||||
@PreAuthorize("@ss.hasPermission('smartfactory:size:query')")
|
||||
public CommonResult<List<SizeRespVO>> getSize() {
|
||||
|
||||
List<SizeDO> sizes = sizeService.getListSize();
|
||||
return success(BeanUtils.toBean(sizes, SizeRespVO.class));
|
||||
}
|
||||
}
|
@ -0,0 +1,27 @@
|
||||
package cn.iocoder.yudao.module.smartfactory.controller.admin.size.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 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 SizePageReqVO extends PageParam {
|
||||
|
||||
@Schema(description = "规格名称", example = "300*300")
|
||||
private String name;
|
||||
|
||||
@Schema(description = "创建时间")
|
||||
@DateTimeFormat(pattern = FORMAT_YEAR_MONTH_DAY_HOUR_MINUTE_SECOND)
|
||||
private LocalDateTime[] createTime;
|
||||
|
||||
}
|
@ -0,0 +1,27 @@
|
||||
package cn.iocoder.yudao.module.smartfactory.controller.admin.size.vo;
|
||||
|
||||
import com.alibaba.excel.annotation.ExcelIgnoreUnannotated;
|
||||
import com.alibaba.excel.annotation.ExcelProperty;
|
||||
import io.swagger.v3.oas.annotations.media.Schema;
|
||||
import lombok.Data;
|
||||
|
||||
import java.time.LocalDateTime;
|
||||
|
||||
@Schema(description = "管理后台 - 规格 Response VO")
|
||||
@Data
|
||||
@ExcelIgnoreUnannotated
|
||||
public class SizeRespVO {
|
||||
|
||||
@Schema(description = "主键id", requiredMode = Schema.RequiredMode.REQUIRED, example = "1")
|
||||
@ExcelProperty("主键id")
|
||||
private Long id;
|
||||
|
||||
@Schema(description = "规格名称", requiredMode = Schema.RequiredMode.REQUIRED, example = "300*300")
|
||||
@ExcelProperty("规格名称")
|
||||
private String name;
|
||||
|
||||
@Schema(description = "创建时间", requiredMode = Schema.RequiredMode.REQUIRED)
|
||||
@ExcelProperty("创建时间")
|
||||
private LocalDateTime createTime;
|
||||
|
||||
}
|
@ -0,0 +1,19 @@
|
||||
package cn.iocoder.yudao.module.smartfactory.controller.admin.size.vo;
|
||||
|
||||
import io.swagger.v3.oas.annotations.media.Schema;
|
||||
import lombok.Data;
|
||||
|
||||
import javax.validation.constraints.NotEmpty;
|
||||
|
||||
@Schema(description = "管理后台 - 规格新增/修改 Request VO")
|
||||
@Data
|
||||
public class SizeSaveReqVO {
|
||||
|
||||
@Schema(description = "主键id", requiredMode = Schema.RequiredMode.REQUIRED, example = "1")
|
||||
private Long id;
|
||||
|
||||
@Schema(description = "规格名称", requiredMode = Schema.RequiredMode.REQUIRED, example = "300*300")
|
||||
@NotEmpty(message = "规格名称不能为空")
|
||||
private String name;
|
||||
|
||||
}
|
@ -0,0 +1,75 @@
|
||||
package cn.iocoder.yudao.module.smartfactory.convert.packageData;
|
||||
|
||||
import cn.iocoder.yudao.framework.common.util.object.BeanUtils;
|
||||
import cn.iocoder.yudao.module.smartfactory.controller.admin.packagedata.vo.PackageDataCreateReqVO;
|
||||
import cn.iocoder.yudao.module.smartfactory.controller.admin.packagedata.vo.PackageDataRespVO;
|
||||
import cn.iocoder.yudao.module.smartfactory.controller.admin.packagedata.vo.PackageDataSaveReqVO;
|
||||
import cn.iocoder.yudao.module.smartfactory.controller.admin.packagedata.vo.PackagePageDataRespVO;
|
||||
import cn.iocoder.yudao.module.smartfactory.dal.dataobject.packagedata.PackageDataDO;
|
||||
import org.mapstruct.Mapper;
|
||||
import org.mapstruct.factory.Mappers;
|
||||
|
||||
import java.math.BigDecimal;
|
||||
import java.time.LocalDate;
|
||||
import java.util.ArrayList;
|
||||
import java.util.List;
|
||||
import java.util.Map;
|
||||
import java.util.stream.Collectors;
|
||||
|
||||
@Mapper
|
||||
public interface PackageDataConvert {
|
||||
|
||||
PackageDataConvert INSTANCE = Mappers.getMapper(PackageDataConvert.class);
|
||||
|
||||
default List<PackageDataDO> convertList(PackageDataCreateReqVO createReqVO) {
|
||||
|
||||
List<PackageDataDO> packageDataDOS = new ArrayList<>();
|
||||
|
||||
for (PackageDataSaveReqVO respVO : createReqVO.getPackageData()) {
|
||||
|
||||
PackageDataDO dataDO = BeanUtils.toBean(respVO, PackageDataDO.class);
|
||||
|
||||
String[] size = dataDO.getSizeName().split("\\*");
|
||||
//计算平方数
|
||||
BigDecimal squareNum = BigDecimal.valueOf((double) Integer.parseInt(size[0]) / 1000)
|
||||
.multiply(BigDecimal.valueOf((double) Integer.parseInt(size[1]) / 1000))
|
||||
.multiply(BigDecimal.valueOf(dataDO.getSizePieces()))
|
||||
.multiply(BigDecimal.valueOf(Integer.sum(dataDO.getNum(), dataDO.getAutoNum())));
|
||||
|
||||
//设置平方数
|
||||
dataDO.setSquareNum(squareNum);
|
||||
dataDO.setPackageDate(createReqVO.getPackageDate());
|
||||
|
||||
packageDataDOS.add(dataDO);
|
||||
}
|
||||
|
||||
return packageDataDOS;
|
||||
}
|
||||
|
||||
default List<PackagePageDataRespVO> convertList1(List<PackageDataRespVO> dataRespVOS) {
|
||||
|
||||
List<PackagePageDataRespVO> pageDataRespVOS = new ArrayList<>();
|
||||
|
||||
// 按 工厂id和日期 进行分组
|
||||
Map<Long, Map<LocalDate, List<PackageDataRespVO>>> groupedByFactoryIdAndDate = dataRespVOS.stream()
|
||||
.collect(Collectors.groupingBy(PackageDataRespVO::getFactoryId,
|
||||
Collectors.groupingBy(PackageDataRespVO::getPackageDate)));
|
||||
|
||||
groupedByFactoryIdAndDate.forEach((factoryId, dateMap) -> {
|
||||
|
||||
dateMap.entrySet().stream().sorted(Map.Entry.<LocalDate, List<PackageDataRespVO>>comparingByKey().reversed())
|
||||
.forEach((data) -> {
|
||||
|
||||
PackagePageDataRespVO dataRespVO = new PackagePageDataRespVO();
|
||||
dataRespVO.setFactoryId(factoryId);
|
||||
dataRespVO.setFactoryName(data.getValue().get(0).getFactoryName());
|
||||
dataRespVO.setPackageDate(data.getKey().toString());
|
||||
dataRespVO.setPackageDataS(BeanUtils.toBean(data.getValue(), PackageDataRespVO.class));
|
||||
|
||||
pageDataRespVOS.add(dataRespVO);
|
||||
});
|
||||
});
|
||||
|
||||
return pageDataRespVOS;
|
||||
}
|
||||
}
|
@ -16,7 +16,6 @@ import cn.iocoder.yudao.framework.mybatis.core.dataobject.BaseDO;
|
||||
* @author 艾楷
|
||||
*/
|
||||
@TableName("sf_factory_info")
|
||||
@KeySequence("sf_factory_info_seq") // 用于 Oracle、PostgreSQL、Kingbase、DB2、H2 数据库的主键自增。如果是 MySQL 等数据库,可不写。
|
||||
@Data
|
||||
@EqualsAndHashCode(callSuper = true)
|
||||
@ToString(callSuper = true)
|
||||
@ -39,9 +38,9 @@ public class SfFactoryInfoDO extends BaseDO {
|
||||
*/
|
||||
private String shortName;
|
||||
/**
|
||||
* 工厂代号
|
||||
* 工厂类型
|
||||
*/
|
||||
private String code;
|
||||
private String type;
|
||||
/**
|
||||
* 工厂简介
|
||||
*/
|
||||
|
@ -1,14 +1,12 @@
|
||||
package cn.iocoder.yudao.module.smartfactory.dal.dataobject.factorydata;
|
||||
|
||||
import cn.iocoder.yudao.framework.mybatis.core.dataobject.BaseDO;
|
||||
import com.baomidou.mybatisplus.annotation.TableId;
|
||||
import com.baomidou.mybatisplus.annotation.TableName;
|
||||
import lombok.*;
|
||||
|
||||
import java.time.LocalDate;
|
||||
import java.util.*;
|
||||
import java.math.BigDecimal;
|
||||
import java.time.LocalDateTime;
|
||||
import java.time.LocalDateTime;
|
||||
import com.baomidou.mybatisplus.annotation.*;
|
||||
import cn.iocoder.yudao.framework.mybatis.core.dataobject.BaseDO;
|
||||
import java.time.LocalDate;
|
||||
|
||||
/**
|
||||
* 工厂出库入库数据 DO
|
||||
@ -16,7 +14,6 @@ import cn.iocoder.yudao.framework.mybatis.core.dataobject.BaseDO;
|
||||
* @author 艾楷
|
||||
*/
|
||||
@TableName("sf_factory_data")
|
||||
@KeySequence("sf_factory_data_seq") // 用于 Oracle、PostgreSQL、Kingbase、DB2、H2 数据库的主键自增。如果是 MySQL 等数据库,可不写。
|
||||
@Data
|
||||
@EqualsAndHashCode(callSuper = true)
|
||||
@ToString(callSuper = true)
|
||||
@ -35,7 +32,7 @@ public class FactoryDataDO extends BaseDO {
|
||||
*/
|
||||
private Long factoryId;
|
||||
/**
|
||||
* 进出库类型 1出库 2进库
|
||||
* 进出库类型 1出库 2入库
|
||||
*/
|
||||
private Integer dataType;
|
||||
/**
|
||||
@ -43,32 +40,15 @@ public class FactoryDataDO extends BaseDO {
|
||||
*/
|
||||
private LocalDate date;
|
||||
/**
|
||||
* 搬运工姓名
|
||||
*/
|
||||
private String porterName;
|
||||
/**
|
||||
* 叉车司机姓名
|
||||
*/
|
||||
private String dirverName;
|
||||
/**
|
||||
* 仓库看管员姓名
|
||||
*/
|
||||
private String keeperName;
|
||||
/**
|
||||
* 总数量
|
||||
* 总箱数
|
||||
*/
|
||||
private Integer totalNum;
|
||||
/**
|
||||
* 总金额
|
||||
* 总平方数
|
||||
*/
|
||||
private BigDecimal totalAmount;
|
||||
private BigDecimal squareNum;
|
||||
/**
|
||||
* 总车数
|
||||
* 破损片数
|
||||
*/
|
||||
private Integer totalTruck;
|
||||
/**
|
||||
* 搬运总数
|
||||
*/
|
||||
private Integer moveNum;
|
||||
|
||||
private Integer damageNum;
|
||||
}
|
@ -0,0 +1,65 @@
|
||||
package cn.iocoder.yudao.module.smartfactory.dal.dataobject.factorydata;
|
||||
|
||||
import cn.iocoder.yudao.framework.mybatis.core.dataobject.BaseDO;
|
||||
import com.baomidou.mybatisplus.annotation.TableId;
|
||||
import com.baomidou.mybatisplus.annotation.TableName;
|
||||
import lombok.*;
|
||||
|
||||
import java.time.LocalDate;
|
||||
|
||||
/**
|
||||
* 工厂出库入库规格数据 DO
|
||||
*
|
||||
* @author 符溶馨
|
||||
*/
|
||||
@TableName("sf_factory_data_size")
|
||||
@Data
|
||||
@EqualsAndHashCode(callSuper = true)
|
||||
@ToString(callSuper = true)
|
||||
@Builder
|
||||
@NoArgsConstructor
|
||||
@AllArgsConstructor
|
||||
public class FactoryDataSizeDO extends BaseDO {
|
||||
|
||||
/**
|
||||
* 主键id
|
||||
*/
|
||||
@TableId
|
||||
private Long id;
|
||||
|
||||
/**
|
||||
* 工厂ID
|
||||
*/
|
||||
private Long factoryId;
|
||||
|
||||
/**
|
||||
* 规格ID
|
||||
*/
|
||||
private Long sizeId;
|
||||
|
||||
/**
|
||||
* 规格名称
|
||||
*/
|
||||
private String sizeName;
|
||||
|
||||
/**
|
||||
* 规格片数
|
||||
*/
|
||||
private Integer sizePieces;
|
||||
|
||||
/**
|
||||
* 数据类型
|
||||
* 1:入库破损 2:出库数 3:出库破损
|
||||
*/
|
||||
private Integer type;
|
||||
|
||||
/**
|
||||
* 数量
|
||||
*/
|
||||
private Integer num;
|
||||
|
||||
/**
|
||||
* 日期
|
||||
*/
|
||||
private LocalDate date;
|
||||
}
|
@ -1,7 +1,7 @@
|
||||
package cn.iocoder.yudao.module.smartfactory.dal.dataobject.factoryinfo;
|
||||
|
||||
import cn.iocoder.yudao.framework.common.enums.CommonStatusEnum;
|
||||
import cn.iocoder.yudao.framework.mybatis.core.dataobject.BaseDO;
|
||||
import com.baomidou.mybatisplus.annotation.KeySequence;
|
||||
import com.baomidou.mybatisplus.annotation.TableField;
|
||||
import com.baomidou.mybatisplus.annotation.TableId;
|
||||
import com.baomidou.mybatisplus.annotation.TableName;
|
||||
@ -15,7 +15,6 @@ import java.math.BigDecimal;
|
||||
* @author 姚君
|
||||
*/
|
||||
@TableName("sf_factory_info")
|
||||
@KeySequence("sf_factory_info_seq") // 用于 Oracle、PostgreSQL、Kingbase、DB2、H2 数据库的主键自增。如果是 MySQL 等数据库,可不写。
|
||||
@Data
|
||||
@EqualsAndHashCode(callSuper = true)
|
||||
@ToString(callSuper = true)
|
||||
@ -47,9 +46,9 @@ public class FactoryInfoDO extends BaseDO {
|
||||
*/
|
||||
private String shortName;
|
||||
/**
|
||||
* 工厂代码
|
||||
* 工厂类型
|
||||
*/
|
||||
private String code;
|
||||
private String type;
|
||||
/**
|
||||
* 工厂简介
|
||||
*/
|
||||
@ -104,15 +103,8 @@ public class FactoryInfoDO extends BaseDO {
|
||||
/**
|
||||
* 状态
|
||||
* <p>
|
||||
* 枚举 {@link TODO common_status 对应的类}
|
||||
* 枚举 {@link CommonStatusEnum 枚举类}
|
||||
*/
|
||||
private Integer status;
|
||||
|
||||
public void setId(Long id) {
|
||||
//由于 直接在数据库中改了 id 所以这里要加一层判断
|
||||
if (id == 1L){
|
||||
id = 10000078L;
|
||||
}
|
||||
this.id = id;
|
||||
}
|
||||
}
|
@ -0,0 +1,51 @@
|
||||
package cn.iocoder.yudao.module.smartfactory.dal.dataobject.packageInfo;
|
||||
|
||||
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_package")
|
||||
@KeySequence("sf_package_seq") // 用于 Oracle、PostgreSQL、Kingbase、DB2、H2 数据库的主键自增。如果是 MySQL 等数据库,可不写。
|
||||
@Data
|
||||
@EqualsAndHashCode(callSuper = true)
|
||||
@ToString(callSuper = true)
|
||||
@Builder
|
||||
@NoArgsConstructor
|
||||
@AllArgsConstructor
|
||||
public class PackageDO extends BaseDO {
|
||||
|
||||
/**
|
||||
* 主键id
|
||||
*/
|
||||
@TableId
|
||||
private Long id;
|
||||
/**
|
||||
* 工厂id
|
||||
*/
|
||||
private Long factoryId;
|
||||
/**
|
||||
* 规格id
|
||||
*/
|
||||
private Long sizeId;
|
||||
/**
|
||||
* 规格片数
|
||||
*/
|
||||
private Integer sizePieces;
|
||||
/**
|
||||
* 打包线名称
|
||||
*/
|
||||
private String name;
|
||||
/**
|
||||
* 设备名称
|
||||
*/
|
||||
private String deviceName;
|
||||
|
||||
}
|
@ -1,11 +1,12 @@
|
||||
package cn.iocoder.yudao.module.smartfactory.dal.dataobject.packagedata;
|
||||
|
||||
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;
|
||||
import com.baomidou.mybatisplus.annotation.TableId;
|
||||
import com.baomidou.mybatisplus.annotation.TableName;
|
||||
import lombok.*;
|
||||
|
||||
import java.math.BigDecimal;
|
||||
import java.time.LocalDate;
|
||||
|
||||
/**
|
||||
* 打包线数据 DO
|
||||
@ -13,7 +14,6 @@ import cn.iocoder.yudao.framework.mybatis.core.dataobject.BaseDO;
|
||||
* @author 艾楷
|
||||
*/
|
||||
@TableName("sf_package_data")
|
||||
@KeySequence("sf_package_data_seq") // 用于 Oracle、PostgreSQL、Kingbase、DB2、H2 数据库的主键自增。如果是 MySQL 等数据库,可不写。
|
||||
@Data
|
||||
@EqualsAndHashCode(callSuper = true)
|
||||
@ToString(callSuper = true)
|
||||
@ -27,18 +27,6 @@ public class PackageDataDO extends BaseDO {
|
||||
*/
|
||||
@TableId
|
||||
private Long id;
|
||||
/**
|
||||
* 工厂id
|
||||
*/
|
||||
private Long factoryId;
|
||||
/**
|
||||
* 规格id
|
||||
*/
|
||||
private Long sizeId;
|
||||
/**
|
||||
* 规格名称
|
||||
*/
|
||||
private String sizeName;
|
||||
/**
|
||||
* 打包线id
|
||||
*/
|
||||
@ -48,8 +36,43 @@ public class PackageDataDO extends BaseDO {
|
||||
*/
|
||||
private String packageName;
|
||||
/**
|
||||
* 打包数量
|
||||
* 工厂id
|
||||
*/
|
||||
private Long factoryId;
|
||||
/**
|
||||
* 规格编号
|
||||
*/
|
||||
private Long sizeId;
|
||||
/**
|
||||
* 规格名称
|
||||
*/
|
||||
private String sizeName;
|
||||
/**
|
||||
* 规格片数
|
||||
*/
|
||||
private Integer sizePieces;
|
||||
/**
|
||||
* 设备名称
|
||||
*/
|
||||
private String deviceName;
|
||||
/**
|
||||
* 打包日期
|
||||
*/
|
||||
private LocalDate packageDate;
|
||||
/**
|
||||
* 手动打包数量
|
||||
*/
|
||||
private Integer num;
|
||||
|
||||
/**
|
||||
* 自动打包数量
|
||||
*/
|
||||
private Integer autoNum;
|
||||
/**
|
||||
* 平方数
|
||||
*/
|
||||
private BigDecimal squareNum;
|
||||
/**
|
||||
* 破损数量
|
||||
*/
|
||||
private Integer damageNum;
|
||||
}
|
@ -0,0 +1,32 @@
|
||||
package cn.iocoder.yudao.module.smartfactory.dal.dataobject.size;
|
||||
|
||||
import cn.iocoder.yudao.framework.mybatis.core.dataobject.BaseDO;
|
||||
import com.baomidou.mybatisplus.annotation.TableId;
|
||||
import com.baomidou.mybatisplus.annotation.TableName;
|
||||
import lombok.*;
|
||||
|
||||
/**
|
||||
* 规格 DO
|
||||
*
|
||||
* @author 符溶馨
|
||||
*/
|
||||
@TableName("sf_size")
|
||||
@Data
|
||||
@EqualsAndHashCode(callSuper = true)
|
||||
@ToString(callSuper = true)
|
||||
@Builder
|
||||
@NoArgsConstructor
|
||||
@AllArgsConstructor
|
||||
public class SizeDO extends BaseDO {
|
||||
|
||||
/**
|
||||
* 主键id
|
||||
*/
|
||||
@TableId
|
||||
private Long id;
|
||||
/**
|
||||
* 规格名称
|
||||
*/
|
||||
private String name;
|
||||
|
||||
}
|
@ -19,7 +19,7 @@ public interface SfFactoryInfoMapper extends BaseMapperX<SfFactoryInfoDO> {
|
||||
return selectPage(reqVO, new LambdaQueryWrapperX<SfFactoryInfoDO>()
|
||||
.likeIfPresent(SfFactoryInfoDO::getFullName, reqVO.getFullName())
|
||||
.likeIfPresent(SfFactoryInfoDO::getShortName, reqVO.getShortName())
|
||||
.eqIfPresent(SfFactoryInfoDO::getCode, reqVO.getCode())
|
||||
.eqIfPresent(SfFactoryInfoDO::getType, reqVO.getType())
|
||||
.eqIfPresent(SfFactoryInfoDO::getDescription, reqVO.getDescription())
|
||||
.eqIfPresent(SfFactoryInfoDO::getProvinceId, reqVO.getProvinceId())
|
||||
.likeIfPresent(SfFactoryInfoDO::getProvinceName, reqVO.getProvinceName())
|
||||
|
@ -1,34 +1,42 @@
|
||||
package cn.iocoder.yudao.module.smartfactory.dal.mysql.factorydata;
|
||||
|
||||
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.smartfactory.controller.admin.factorydata.vo.FactoryDataDetailRespVO;
|
||||
import cn.iocoder.yudao.module.smartfactory.controller.admin.factorydata.vo.FactoryDataPageReqVO;
|
||||
import cn.iocoder.yudao.module.smartfactory.controller.admin.factorydata.vo.FactoryDataTotalVO;
|
||||
import cn.iocoder.yudao.module.smartfactory.dal.dataobject.factorydata.FactoryDataDO;
|
||||
import com.baomidou.mybatisplus.core.metadata.IPage;
|
||||
import org.apache.ibatis.annotations.Mapper;
|
||||
import org.apache.ibatis.annotations.Param;
|
||||
|
||||
import java.time.LocalDate;
|
||||
import java.util.List;
|
||||
|
||||
/**
|
||||
* 工厂出库入库数据 Mapper
|
||||
*
|
||||
* @author 艾楷
|
||||
* @author 符溶馨
|
||||
*/
|
||||
@Mapper
|
||||
public interface FactoryDataMapper extends BaseMapperX<FactoryDataDO> {
|
||||
|
||||
default PageResult<FactoryDataDO> selectPage(FactoryDataPageReqVO reqVO) {
|
||||
return selectPage(reqVO, new LambdaQueryWrapperX<FactoryDataDO>()
|
||||
.eqIfPresent(FactoryDataDO::getFactoryId, reqVO.getFactoryId())
|
||||
.eqIfPresent(FactoryDataDO::getDataType, reqVO.getDataType())
|
||||
.betweenIfPresent(FactoryDataDO::getDate, reqVO.getDate())
|
||||
.likeIfPresent(FactoryDataDO::getPorterName, reqVO.getPorterName())
|
||||
.likeIfPresent(FactoryDataDO::getDirverName, reqVO.getDirverName())
|
||||
.likeIfPresent(FactoryDataDO::getKeeperName, reqVO.getKeeperName())
|
||||
.eqIfPresent(FactoryDataDO::getTotalNum, reqVO.getTotalNum())
|
||||
.eqIfPresent(FactoryDataDO::getTotalAmount, reqVO.getTotalAmount())
|
||||
.eqIfPresent(FactoryDataDO::getTotalTruck, reqVO.getTotalTruck())
|
||||
.eqIfPresent(FactoryDataDO::getMoveNum, reqVO.getMoveNum())
|
||||
.betweenIfPresent(FactoryDataDO::getCreateTime, reqVO.getCreateTime())
|
||||
.orderByDesc(FactoryDataDO::getId));
|
||||
IPage<FactoryDataDetailRespVO> selectDetailPage(@Param("page") IPage<FactoryDataDetailRespVO> mpPage, @Param("reqVO") FactoryDataPageReqVO pageReqVO);
|
||||
|
||||
default FactoryDataDO selectListByType(Long factoryId, LocalDate date, Integer type) {
|
||||
|
||||
return selectOne(new LambdaQueryWrapperX<FactoryDataDO>()
|
||||
.eq(FactoryDataDO::getFactoryId, factoryId)
|
||||
.eq(FactoryDataDO::getDate, date)
|
||||
.eq(FactoryDataDO::getDataType, type));
|
||||
}
|
||||
|
||||
default List<FactoryDataDO> selectListByFactoryAndDate(Long factoryId, String date) {
|
||||
|
||||
return selectList(new LambdaQueryWrapperX<FactoryDataDO>()
|
||||
.eq(FactoryDataDO::getFactoryId, factoryId)
|
||||
.eq(FactoryDataDO::getDate, date));
|
||||
}
|
||||
|
||||
FactoryDataTotalVO selectDataSum();
|
||||
}
|
@ -0,0 +1,49 @@
|
||||
package cn.iocoder.yudao.module.smartfactory.dal.mysql.factorydata;
|
||||
|
||||
import cn.iocoder.yudao.framework.mybatis.core.mapper.BaseMapperX;
|
||||
import cn.iocoder.yudao.framework.mybatis.core.query.LambdaQueryWrapperX;
|
||||
import cn.iocoder.yudao.module.smartfactory.controller.admin.factorydata.vo.FactoryDataInfoRespVO;
|
||||
import cn.iocoder.yudao.module.smartfactory.dal.dataobject.factorydata.FactoryDataSizeDO;
|
||||
import org.apache.ibatis.annotations.Mapper;
|
||||
import org.apache.ibatis.annotations.Param;
|
||||
|
||||
import java.time.LocalDate;
|
||||
import java.time.LocalDateTime;
|
||||
import java.util.Collection;
|
||||
import java.util.List;
|
||||
|
||||
/**
|
||||
* 工厂出库入库规格数据 Mapper
|
||||
*
|
||||
* @author 符溶馨
|
||||
*/
|
||||
@Mapper
|
||||
public interface FactoryDataSizeMapper extends BaseMapperX<FactoryDataSizeDO> {
|
||||
|
||||
List<FactoryDataInfoRespVO> selectDetailList(@Param("factoryId") Long factoryId, @Param("date") LocalDate[] date);
|
||||
|
||||
default void deleteByFactoryId(Long factoryId, String date) {
|
||||
|
||||
delete(new LambdaQueryWrapperX<FactoryDataSizeDO>()
|
||||
.eq(FactoryDataSizeDO::getFactoryId, factoryId)
|
||||
.eq(FactoryDataSizeDO::getDate, date));
|
||||
}
|
||||
|
||||
default Long selectCountByFactoryId(Long factoryId, String date, LocalDateTime[] dateTimes) {
|
||||
|
||||
return selectCount(new LambdaQueryWrapperX<FactoryDataSizeDO>()
|
||||
.eq(FactoryDataSizeDO::getFactoryId, factoryId)
|
||||
.eq(FactoryDataSizeDO::getDate, date)
|
||||
.betweenIfPresent(FactoryDataSizeDO::getCreateTime, dateTimes));
|
||||
}
|
||||
|
||||
default Long selectCountByType(Long factoryId, LocalDate date, Collection<Integer> types) {
|
||||
|
||||
return selectCount(new LambdaQueryWrapperX<FactoryDataSizeDO>()
|
||||
.eq(FactoryDataSizeDO::getFactoryId, factoryId)
|
||||
.eq(FactoryDataSizeDO::getDate, date)
|
||||
.in(FactoryDataSizeDO::getType, types));
|
||||
}
|
||||
|
||||
List<FactoryDataInfoRespVO> selectSUMByDateTimes(@Param("dateTime") LocalDateTime[] dateTimes);
|
||||
}
|
@ -23,10 +23,10 @@ public interface FactoryInfoMapper extends BaseMapperX<FactoryInfoDO> {
|
||||
return selectPage(reqVO, new LambdaQueryWrapperX<FactoryInfoDO>()
|
||||
.likeIfPresent(FactoryInfoDO::getName, reqVO.getName())
|
||||
.likeIfPresent(FactoryInfoDO::getShortName, reqVO.getShortName())
|
||||
.likeIfPresent(FactoryInfoDO::getCode, reqVO.getCode())
|
||||
.likeIfPresent(FactoryInfoDO::getType, reqVO.getType())
|
||||
.eqIfPresent(FactoryInfoDO::getStatus, reqVO.getStatus())
|
||||
.betweenIfPresent(FactoryInfoDO::getCreateTime, reqVO.getCreateTime())
|
||||
.orderByDesc(FactoryInfoDO::getSort));
|
||||
.orderByAsc(FactoryInfoDO::getSort));
|
||||
}
|
||||
|
||||
/**
|
||||
|
@ -0,0 +1,20 @@
|
||||
package cn.iocoder.yudao.module.smartfactory.dal.mysql.packageInfo;
|
||||
|
||||
import cn.iocoder.yudao.framework.mybatis.core.mapper.BaseMapperX;
|
||||
import cn.iocoder.yudao.module.smartfactory.controller.admin.packageInfo.vo.PackagePageReqVO;
|
||||
import cn.iocoder.yudao.module.smartfactory.controller.admin.packageInfo.vo.PackageRespVO;
|
||||
import cn.iocoder.yudao.module.smartfactory.dal.dataobject.packageInfo.PackageDO;
|
||||
import com.baomidou.mybatisplus.core.metadata.IPage;
|
||||
import org.apache.ibatis.annotations.Mapper;
|
||||
import org.apache.ibatis.annotations.Param;
|
||||
|
||||
/**
|
||||
* 打包线 Mapper
|
||||
*
|
||||
* @author 符溶馨
|
||||
*/
|
||||
@Mapper
|
||||
public interface PackageMapper extends BaseMapperX<PackageDO> {
|
||||
|
||||
IPage<PackageRespVO> selectPackagePage(@Param("page") IPage<PackageRespVO> mpPage, @Param("reqVO") PackagePageReqVO pageReqVO);
|
||||
}
|
@ -1,11 +1,18 @@
|
||||
package cn.iocoder.yudao.module.smartfactory.dal.mysql.packagedata;
|
||||
|
||||
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.smartfactory.controller.admin.packagedata.vo.PackageDataPageReqVO;
|
||||
import cn.iocoder.yudao.module.smartfactory.controller.admin.packagedata.vo.PackageDataRespVO;
|
||||
import cn.iocoder.yudao.module.smartfactory.dal.dataobject.factorydata.FactoryDataDO;
|
||||
import cn.iocoder.yudao.module.smartfactory.dal.dataobject.packagedata.PackageDataDO;
|
||||
import com.baomidou.mybatisplus.core.metadata.IPage;
|
||||
import org.apache.ibatis.annotations.Mapper;
|
||||
import org.apache.ibatis.annotations.Param;
|
||||
|
||||
import java.time.LocalDate;
|
||||
import java.time.LocalDateTime;
|
||||
import java.util.List;
|
||||
|
||||
/**
|
||||
* 打包线数据 Mapper
|
||||
@ -15,16 +22,29 @@ import org.apache.ibatis.annotations.Mapper;
|
||||
@Mapper
|
||||
public interface PackageDataMapper extends BaseMapperX<PackageDataDO> {
|
||||
|
||||
default PageResult<PackageDataDO> selectPage(PackageDataPageReqVO reqVO) {
|
||||
return selectPage(reqVO, new LambdaQueryWrapperX<PackageDataDO>()
|
||||
.eqIfPresent(PackageDataDO::getFactoryId, reqVO.getFactoryId())
|
||||
.eqIfPresent(PackageDataDO::getSizeId, reqVO.getSizeId())
|
||||
.likeIfPresent(PackageDataDO::getSizeName, reqVO.getSizeName())
|
||||
.eqIfPresent(PackageDataDO::getPackageId, reqVO.getPackageId())
|
||||
.likeIfPresent(PackageDataDO::getPackageName, reqVO.getPackageName())
|
||||
.eqIfPresent(PackageDataDO::getNum, reqVO.getNum())
|
||||
.betweenIfPresent(PackageDataDO::getCreateTime, reqVO.getCreateTime())
|
||||
.orderByDesc(PackageDataDO::getId));
|
||||
IPage<PackageDataRespVO> selectPackagePage(@Param("page") IPage<PackageDataRespVO> mpPage, @Param("reqVO") PackageDataPageReqVO pageReqVO);
|
||||
|
||||
List<FactoryDataDO> selectDataListByDateTime(@Param("dateTime") LocalDateTime[] dateTimes);
|
||||
|
||||
default List<PackageDataDO> selectListByFactoryIdAndDate(Long factoryId, String date) {
|
||||
|
||||
return selectList(new LambdaQueryWrapperX<PackageDataDO>()
|
||||
.eq(PackageDataDO::getFactoryId, factoryId)
|
||||
.eq(PackageDataDO::getPackageDate, date));
|
||||
}
|
||||
|
||||
default Long selectCountByDateTime(Long factoryId, LocalDate date, LocalDateTime[] dateTimes) {
|
||||
|
||||
return selectCount(new LambdaQueryWrapperX<PackageDataDO>()
|
||||
.eq(PackageDataDO::getFactoryId, factoryId)
|
||||
.eq(PackageDataDO::getPackageDate, date)
|
||||
.betweenIfPresent(PackageDataDO::getCreateTime, dateTimes));
|
||||
}
|
||||
|
||||
default void delectData(Long factoryId, String date) {
|
||||
|
||||
delete(new LambdaQueryWrapperX<PackageDataDO>()
|
||||
.eq(PackageDataDO::getFactoryId, factoryId)
|
||||
.eq(PackageDataDO::getPackageDate, date));
|
||||
}
|
||||
}
|
@ -0,0 +1,25 @@
|
||||
package cn.iocoder.yudao.module.smartfactory.dal.mysql.size;
|
||||
|
||||
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.smartfactory.controller.admin.size.vo.SizePageReqVO;
|
||||
import cn.iocoder.yudao.module.smartfactory.dal.dataobject.size.SizeDO;
|
||||
import org.apache.ibatis.annotations.Mapper;
|
||||
|
||||
/**
|
||||
* 规格 Mapper
|
||||
*
|
||||
* @author 符溶馨
|
||||
*/
|
||||
@Mapper
|
||||
public interface SizeMapper extends BaseMapperX<SizeDO> {
|
||||
|
||||
default PageResult<SizeDO> selectPage(SizePageReqVO reqVO) {
|
||||
return selectPage(reqVO, new LambdaQueryWrapperX<SizeDO>()
|
||||
.likeIfPresent(SizeDO::getName, reqVO.getName())
|
||||
.betweenIfPresent(SizeDO::getCreateTime, reqVO.getCreateTime())
|
||||
.orderByDesc(SizeDO::getId));
|
||||
}
|
||||
|
||||
}
|
@ -0,0 +1,116 @@
|
||||
package cn.iocoder.yudao.module.smartfactory.framework.job.factoryData;
|
||||
|
||||
import cn.iocoder.yudao.framework.tenant.core.job.TenantJob;
|
||||
import cn.iocoder.yudao.module.smartfactory.controller.admin.factorydata.vo.FactoryDataInfoRespVO;
|
||||
import cn.iocoder.yudao.module.smartfactory.dal.dataobject.factorydata.FactoryDataDO;
|
||||
import cn.iocoder.yudao.module.smartfactory.service.factorydata.FactoryDataService;
|
||||
import cn.iocoder.yudao.module.smartfactory.service.factorydata.FactoryDataSizeService;
|
||||
import cn.iocoder.yudao.module.smartfactory.service.packagedata.PackageDataService;
|
||||
import com.xxl.job.core.biz.model.ReturnT;
|
||||
import com.xxl.job.core.handler.annotation.XxlJob;
|
||||
import lombok.extern.slf4j.Slf4j;
|
||||
import org.springframework.stereotype.Component;
|
||||
|
||||
import javax.annotation.Resource;
|
||||
import java.time.LocalDateTime;
|
||||
import java.time.LocalTime;
|
||||
import java.util.ArrayList;
|
||||
import java.util.List;
|
||||
import java.util.Objects;
|
||||
import java.util.stream.Collectors;
|
||||
|
||||
import static cn.iocoder.yudao.framework.security.core.util.SecurityFrameworkUtils.getLoginUserId;
|
||||
|
||||
/**
|
||||
* 工厂 出入库数据统计 定时任务
|
||||
*/
|
||||
@Component
|
||||
@Slf4j
|
||||
public class FactoryDataJob {
|
||||
|
||||
@Resource
|
||||
private FactoryDataSizeService dataSizeService;
|
||||
|
||||
@Resource
|
||||
private PackageDataService packageDataService;
|
||||
|
||||
@Resource
|
||||
private FactoryDataService factoryDataService;
|
||||
|
||||
@XxlJob("factoryDataJob")
|
||||
@TenantJob // --- ⚠️ 这个注解 会将租户列表拉出来 完了后逐个租户执行 定时任务需要注意
|
||||
public ReturnT<String> execute() throws Exception {
|
||||
|
||||
LocalDateTime[] dateTimes = {LocalDateTime.now().minusDays(1).with(LocalTime.MIN), LocalDateTime.now().minusDays(1).with(LocalTime.MAX)};
|
||||
|
||||
//查询 当前统计时间前一天的的打包线数据
|
||||
List<FactoryDataDO> factoryDataDOS = packageDataService.getDataListByDateTime(dateTimes);
|
||||
|
||||
//查询 当前统计时间前一天的的出入库规格数据
|
||||
List<FactoryDataInfoRespVO> infoRespVOS = dataSizeService.getSUMByDateTimes(dateTimes);
|
||||
|
||||
List<FactoryDataDO> outFactoryDataDOs = new ArrayList<>();
|
||||
|
||||
//处理入库数据
|
||||
factoryDataDOS.forEach(data -> {
|
||||
|
||||
//设置 出入库类型为 入库
|
||||
data.setDataType(2);
|
||||
data.setCreator(Objects.requireNonNull(getLoginUserId()).toString());
|
||||
|
||||
//取出 同一个工厂和日期的数据
|
||||
List<FactoryDataInfoRespVO> infos = infoRespVOS.stream()
|
||||
.filter(info -> info.getFactoryId().equals(data.getFactoryId()) && info.getDate().equals(data.getDate()))
|
||||
.collect(Collectors.toList());
|
||||
|
||||
if (!infos.isEmpty()) {
|
||||
|
||||
if (infos.get(0).getInDamageNum() != null) {
|
||||
|
||||
// 设置 入库破损数
|
||||
data.setDamageNum(data.getDamageNum() + infos.get(0).getInDamageNum());
|
||||
}
|
||||
|
||||
// 如果存在出库数时
|
||||
if (infos.get(0).getOutNum() != null) {
|
||||
|
||||
FactoryDataDO dataDO = new FactoryDataDO();
|
||||
|
||||
dataDO.setFactoryId(data.getFactoryId());
|
||||
dataDO.setDate(data.getDate());
|
||||
dataDO.setDataType(1);
|
||||
dataDO.setTotalNum(infos.get(0).getOutNum());
|
||||
dataDO.setDamageNum(infos.get(0).getOutDamageNum());
|
||||
dataDO.setCreator(Objects.requireNonNull(getLoginUserId()).toString());
|
||||
|
||||
outFactoryDataDOs.add(dataDO);
|
||||
}
|
||||
}
|
||||
|
||||
// 移除已处理过的 入库数据
|
||||
infoRespVOS.removeAll(infos);
|
||||
});
|
||||
|
||||
// 插入 出库数据
|
||||
for (FactoryDataInfoRespVO infoRespVO : infoRespVOS) {
|
||||
|
||||
FactoryDataDO dataDO = new FactoryDataDO();
|
||||
|
||||
dataDO.setFactoryId(infoRespVO.getFactoryId());
|
||||
dataDO.setDate(infoRespVO.getDate());
|
||||
dataDO.setDataType(1);
|
||||
dataDO.setTotalNum(infoRespVO.getOutNum());
|
||||
dataDO.setDamageNum(infoRespVO.getOutDamageNum());
|
||||
dataDO.setCreator(Objects.requireNonNull(getLoginUserId()).toString());
|
||||
|
||||
outFactoryDataDOs.add(dataDO);
|
||||
}
|
||||
|
||||
// 插入
|
||||
factoryDataDOS.addAll(outFactoryDataDOs);
|
||||
factoryDataService.createData(factoryDataDOS);
|
||||
|
||||
// 返回执行成功
|
||||
return ReturnT.SUCCESS;
|
||||
}
|
||||
}
|
@ -0,0 +1 @@
|
||||
package cn.iocoder.yudao.module.smartfactory.framework.job;
|
@ -1,11 +1,14 @@
|
||||
package cn.iocoder.yudao.module.smartfactory.service.factorydata;
|
||||
|
||||
import cn.iocoder.yudao.framework.common.pojo.PageResult;
|
||||
import cn.iocoder.yudao.module.smartfactory.controller.admin.factorydata.vo.FactoryDataDetailRespVO;
|
||||
import cn.iocoder.yudao.module.smartfactory.controller.admin.factorydata.vo.FactoryDataPageReqVO;
|
||||
import cn.iocoder.yudao.module.smartfactory.controller.admin.factorydata.vo.FactoryDataSaveReqVO;
|
||||
import cn.iocoder.yudao.module.smartfactory.controller.admin.factorydata.vo.FactoryDataTotalVO;
|
||||
import cn.iocoder.yudao.module.smartfactory.controller.admin.factorydata.vo.sizeData.FactoryDataSizeCreateReqVO;
|
||||
import cn.iocoder.yudao.module.smartfactory.dal.dataobject.factorydata.FactoryDataDO;
|
||||
|
||||
import javax.validation.Valid;
|
||||
import java.time.LocalDate;
|
||||
import java.util.Date;
|
||||
import java.util.List;
|
||||
|
||||
@ -19,32 +22,34 @@ public interface FactoryDataService {
|
||||
/**
|
||||
* 创建工厂出库入库数据
|
||||
*
|
||||
* @param createReqVO 创建信息
|
||||
* @param factoryDataDOS 创建信息
|
||||
* @return 编号
|
||||
*/
|
||||
Long createData(@Valid FactoryDataSaveReqVO createReqVO);
|
||||
Long createData(List<FactoryDataDO> factoryDataDOS);
|
||||
|
||||
/**
|
||||
* 更新工厂出库入库数据
|
||||
*
|
||||
* @param updateReqVO 更新信息
|
||||
*/
|
||||
void updateData(@Valid FactoryDataSaveReqVO updateReqVO);
|
||||
void updateData(@Valid FactoryDataSizeCreateReqVO updateReqVO);
|
||||
|
||||
/**
|
||||
* 删除工厂出库入库数据
|
||||
*
|
||||
* @param id 编号
|
||||
* @param factoryId 工厂编号
|
||||
* @param date 日期
|
||||
*/
|
||||
void deleteData(Long id);
|
||||
void deleteData(Long factoryId, String date);
|
||||
|
||||
/**
|
||||
* 获得工厂出库入库数据
|
||||
*
|
||||
* @param id 编号
|
||||
* @param factoryId 工厂编号
|
||||
* @param date 日期
|
||||
* @return 工厂出库入库数据
|
||||
*/
|
||||
FactoryDataDO getData(Long id);
|
||||
FactoryDataDetailRespVO getData(Long factoryId, String date);
|
||||
|
||||
/**
|
||||
* 获得工厂出库入库数据分页
|
||||
@ -52,7 +57,13 @@ public interface FactoryDataService {
|
||||
* @param pageReqVO 分页查询
|
||||
* @return 工厂出库入库数据分页
|
||||
*/
|
||||
PageResult<FactoryDataDO> getDataPage(FactoryDataPageReqVO pageReqVO);
|
||||
PageResult<FactoryDataDetailRespVO> getDataPage(FactoryDataPageReqVO pageReqVO);
|
||||
|
||||
/**
|
||||
* 获得工厂总数 总览
|
||||
* @return
|
||||
*/
|
||||
FactoryDataTotalVO getDataTotal();
|
||||
|
||||
/**
|
||||
* 获取当天的所有数据
|
||||
@ -70,4 +81,14 @@ public interface FactoryDataService {
|
||||
* @return
|
||||
*/
|
||||
List<FactoryDataDO> getByTimeAndFactoryId(Long factoryId, Date beginDay, Date endDay);
|
||||
|
||||
/**
|
||||
* 根据日期和工厂过滤
|
||||
*
|
||||
* @param factoryId 工厂编号
|
||||
* @param date 日期
|
||||
* @param type 出入库类型
|
||||
* @return 出入库数据
|
||||
*/
|
||||
FactoryDataDO getListByType(Long factoryId, LocalDate date, Integer type);
|
||||
}
|
@ -2,18 +2,37 @@ package cn.iocoder.yudao.module.smartfactory.service.factorydata;
|
||||
|
||||
import cn.iocoder.yudao.framework.common.pojo.PageResult;
|
||||
import cn.iocoder.yudao.framework.common.util.date.DateUtils;
|
||||
import cn.iocoder.yudao.framework.common.util.object.BeanUtils;
|
||||
import cn.iocoder.yudao.framework.mybatis.core.query.LambdaQueryWrapperX;
|
||||
import cn.iocoder.yudao.framework.mybatis.core.util.MyBatisUtils;
|
||||
import cn.iocoder.yudao.module.smartfactory.controller.admin.factorydata.vo.FactoryDataDetailRespVO;
|
||||
import cn.iocoder.yudao.module.smartfactory.controller.admin.factorydata.vo.FactoryDataInfoRespVO;
|
||||
import cn.iocoder.yudao.module.smartfactory.controller.admin.factorydata.vo.FactoryDataPageReqVO;
|
||||
import cn.iocoder.yudao.module.smartfactory.controller.admin.factorydata.vo.FactoryDataSaveReqVO;
|
||||
import cn.iocoder.yudao.module.smartfactory.controller.admin.factorydata.vo.FactoryDataTotalVO;
|
||||
import cn.iocoder.yudao.module.smartfactory.controller.admin.factorydata.vo.sizeData.FactoryDataSizeCreateReqVO;
|
||||
import cn.iocoder.yudao.module.smartfactory.controller.admin.factorydata.vo.sizeData.FactoryDataSizeSaveReqVO;
|
||||
import cn.iocoder.yudao.module.smartfactory.controller.admin.packagedata.vo.PackageDataCreateReqVO;
|
||||
import cn.iocoder.yudao.module.smartfactory.convert.packageData.PackageDataConvert;
|
||||
import cn.iocoder.yudao.module.smartfactory.dal.dataobject.factorydata.FactoryDataDO;
|
||||
import cn.iocoder.yudao.module.smartfactory.dal.dataobject.factoryinfo.FactoryInfoDO;
|
||||
import cn.iocoder.yudao.module.smartfactory.dal.dataobject.packagedata.PackageDataDO;
|
||||
import cn.iocoder.yudao.module.smartfactory.dal.mysql.factorydata.FactoryDataMapper;
|
||||
import cn.iocoder.yudao.module.smartfactory.service.factoryinfo.FactoryInfoService;
|
||||
import com.baomidou.mybatisplus.core.metadata.IPage;
|
||||
import org.springframework.context.annotation.Lazy;
|
||||
import org.springframework.stereotype.Service;
|
||||
import org.springframework.validation.annotation.Validated;
|
||||
|
||||
import javax.annotation.Resource;
|
||||
import java.math.BigDecimal;
|
||||
import java.time.LocalDate;
|
||||
import java.time.format.DateTimeFormatter;
|
||||
import java.util.Date;
|
||||
import java.util.List;
|
||||
import java.util.Map;
|
||||
import java.util.Objects;
|
||||
import java.util.stream.Collectors;
|
||||
|
||||
import static cn.iocoder.yudao.framework.common.util.collection.CollectionUtils.convertMap;
|
||||
|
||||
|
||||
/**
|
||||
@ -28,36 +47,185 @@ public class FactoryDataServiceImpl implements FactoryDataService {
|
||||
@Resource
|
||||
private FactoryDataMapper dataMapper;
|
||||
|
||||
@Resource
|
||||
@Lazy // 循环依赖,避免报错
|
||||
private FactoryDataSizeService dataSizeService;
|
||||
|
||||
@Resource
|
||||
private FactoryInfoService factoryInfoService;
|
||||
|
||||
@Override
|
||||
public Long createData(FactoryDataSaveReqVO createReqVO) {
|
||||
// 插入
|
||||
FactoryDataDO data = BeanUtils.toBean(createReqVO, FactoryDataDO.class);
|
||||
dataMapper.insert(data);
|
||||
public Long createData(List<FactoryDataDO> factoryDataDOS) {
|
||||
|
||||
dataMapper.insertBatch(factoryDataDOS);
|
||||
|
||||
// 返回
|
||||
return data.getId();
|
||||
return (long) factoryDataDOS.size();
|
||||
}
|
||||
|
||||
@Override
|
||||
public void updateData(FactoryDataSaveReqVO updateReqVO) {
|
||||
// 更新
|
||||
FactoryDataDO updateObj = BeanUtils.toBean(updateReqVO, FactoryDataDO.class);
|
||||
dataMapper.updateById(updateObj);
|
||||
public void updateData(FactoryDataSizeCreateReqVO updateReqVO) {
|
||||
|
||||
// 修改 规格明细数据
|
||||
dataSizeService.updateData(updateReqVO);
|
||||
|
||||
//校验 出入库统计数据是否存在
|
||||
List<FactoryDataDO> factoryDataDOS = dataMapper.selectListByFactoryAndDate(updateReqVO.getFactoryId(), updateReqVO.getDate().format(DateTimeFormatter.ofPattern("yyyy-MM-dd")));
|
||||
if (factoryDataDOS != null && !factoryDataDOS.isEmpty()) {
|
||||
|
||||
PackageDataCreateReqVO createReqVO = new PackageDataCreateReqVO();
|
||||
createReqVO.setPackageData(updateReqVO.getPackageData());
|
||||
createReqVO.setFactoryId(updateReqVO.getFactoryId());
|
||||
createReqVO.setPackageDate(updateReqVO.getDate());
|
||||
|
||||
//获得 打包线数据对象
|
||||
List<PackageDataDO> packageDataDOS = PackageDataConvert.INSTANCE.convertList(createReqVO);
|
||||
// 更新
|
||||
factoryDataDOS.forEach(data -> {
|
||||
|
||||
switch (data.getDataType()) {
|
||||
|
||||
//出库数据
|
||||
case 1:
|
||||
data.setTotalNum(updateReqVO.getItems().stream().mapToInt(FactoryDataSizeSaveReqVO::getOutNum).sum());
|
||||
data.setDamageNum(updateReqVO.getItems().stream().mapToInt(FactoryDataSizeSaveReqVO::getOutDamageNum).sum());
|
||||
break;
|
||||
//入库数据
|
||||
case 2:
|
||||
Integer damageNum = packageDataDOS.stream().mapToInt(PackageDataDO::getDamageNum).sum()
|
||||
+ updateReqVO.getItems().stream().mapToInt(FactoryDataSizeSaveReqVO::getInDamageNum).sum();
|
||||
|
||||
data.setTotalNum(packageDataDOS.stream().mapToInt(info -> info.getNum() + info.getAutoNum()).sum());
|
||||
data.setDamageNum(damageNum);
|
||||
data.setSquareNum(packageDataDOS.stream().map(PackageDataDO::getSquareNum).reduce(BigDecimal.ZERO, BigDecimal::add));
|
||||
}
|
||||
});
|
||||
|
||||
//更新 出入库统计数据
|
||||
dataMapper.updateBatch(factoryDataDOS);
|
||||
}
|
||||
}
|
||||
|
||||
@Override
|
||||
public void deleteData(Long id) {
|
||||
// 删除
|
||||
dataMapper.deleteById(id);
|
||||
public void deleteData(Long factoryId, String date) {
|
||||
|
||||
//删除出入库 规格数据
|
||||
dataSizeService.deleteData(factoryId, date);
|
||||
}
|
||||
|
||||
@Override
|
||||
public FactoryDataDO getData(Long id) {
|
||||
return dataMapper.selectById(id);
|
||||
public FactoryDataDetailRespVO getData(Long factoryId, String date) {
|
||||
|
||||
FactoryDataDetailRespVO respVO = new FactoryDataDetailRespVO();
|
||||
respVO.setFactoryId(factoryId);
|
||||
respVO.setDate(LocalDate.parse(date));
|
||||
respVO.setDamageNum(0);
|
||||
|
||||
// 获得 指定工厂和日期的出入库统计数据
|
||||
List<FactoryDataDO> factoryDataDOS = dataMapper.selectListByFactoryAndDate(factoryId, date);
|
||||
for (FactoryDataDO factoryDataDO : factoryDataDOS) {
|
||||
|
||||
switch (factoryDataDO.getDataType()) {
|
||||
|
||||
//出库数据
|
||||
case 1:
|
||||
respVO.setOutTotalNum(factoryDataDO.getTotalNum());
|
||||
respVO.setDamageNum(respVO.getDamageNum() + factoryDataDO.getDamageNum());
|
||||
break;
|
||||
//入库数据
|
||||
case 2:
|
||||
respVO.setInTotalNum(factoryDataDO.getTotalNum());
|
||||
respVO.setSquareNum(factoryDataDO.getSquareNum());
|
||||
respVO.setDamageNum(respVO.getDamageNum() + factoryDataDO.getDamageNum());
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
//获得 规则明细数据
|
||||
List<FactoryDataInfoRespVO> infoRespVOS = dataSizeService.getDetailList(factoryId, new LocalDate[]{LocalDate.parse(date), LocalDate.parse(date)});
|
||||
respVO.setItems(infoRespVOS);
|
||||
|
||||
return respVO;
|
||||
}
|
||||
|
||||
@Override
|
||||
public PageResult<FactoryDataDO> getDataPage(FactoryDataPageReqVO pageReqVO) {
|
||||
return dataMapper.selectPage(pageReqVO);
|
||||
public PageResult<FactoryDataDetailRespVO> getDataPage(FactoryDataPageReqVO pageReqVO) {
|
||||
|
||||
//获得 出入库数据分页列表
|
||||
IPage<FactoryDataDetailRespVO> mpPage = MyBatisUtils.buildPage(pageReqVO);
|
||||
IPage<FactoryDataDetailRespVO> page = dataMapper.selectDetailPage(mpPage, pageReqVO);
|
||||
PageResult<FactoryDataDetailRespVO> dataPage = new PageResult<>(page.getRecords(), page.getTotal());
|
||||
|
||||
List<FactoryDataDetailRespVO> respVOS = dataPage.getList();
|
||||
if (!respVOS.isEmpty()) {
|
||||
|
||||
//获得工厂信息列表
|
||||
List<Long> factoryIdS = respVOS.stream().map(FactoryDataDetailRespVO::getFactoryId).collect(Collectors.toList());
|
||||
List<FactoryInfoDO> factoryInfoDOS = factoryInfoService.getFactoryList(factoryIdS);
|
||||
Map<Long, FactoryInfoDO> factoryMap = convertMap(factoryInfoDOS, FactoryInfoDO::getId);
|
||||
|
||||
//获得 入库数、打包破损、入库破损、出库数、出库破损的工厂规格数据
|
||||
List<FactoryDataInfoRespVO> infoDatas = dataSizeService.getDetailList(pageReqVO.getFactoryId(), pageReqVO.getDate());
|
||||
|
||||
respVOS.forEach(items -> {
|
||||
|
||||
//规格明细数据
|
||||
List<FactoryDataInfoRespVO> infoList = infoDatas.stream()
|
||||
.filter(data -> data.getFactoryId().equals(items.getFactoryId()) && data.getDate().equals(items.getDate()))
|
||||
.collect(Collectors.toList());
|
||||
|
||||
items.setItems(infoList);
|
||||
items.setFactoryName(factoryMap.get(items.getFactoryId()).getName());
|
||||
|
||||
//移除 已处理过的数据
|
||||
infoDatas.removeAll(infoList);
|
||||
});
|
||||
|
||||
// 展示当天录入的数据
|
||||
if (!infoDatas.isEmpty()) {
|
||||
|
||||
// 按 工厂id和日期 进行分组
|
||||
Map<Long, Map<LocalDate, List<FactoryDataInfoRespVO>>> groupedByFactoryIdAndDate = infoDatas.stream()
|
||||
.collect(Collectors.groupingBy(FactoryDataInfoRespVO::getFactoryId,
|
||||
Collectors.groupingBy(FactoryDataInfoRespVO::getDate)));
|
||||
|
||||
groupedByFactoryIdAndDate.forEach((factoryId, dateMap) -> {
|
||||
|
||||
//按日期倒叙 并遍历
|
||||
dateMap.entrySet().stream().sorted(Map.Entry.comparingByKey())
|
||||
.forEach((date) -> {
|
||||
|
||||
FactoryDataDetailRespVO dataDetailRespVO = new FactoryDataDetailRespVO();
|
||||
|
||||
dataDetailRespVO.setFactoryId(factoryId);
|
||||
dataDetailRespVO.setFactoryName(factoryMap.get(factoryId).getName());
|
||||
dataDetailRespVO.setDate(date.getKey());
|
||||
//设置入库总数
|
||||
dataDetailRespVO.setInTotalNum(date.getValue().stream().filter(info -> info.getInNum() != null).mapToInt(FactoryDataInfoRespVO::getInNum).sum());
|
||||
//设置入库平方数
|
||||
dataDetailRespVO.setSquareNum(date.getValue().stream().map(FactoryDataInfoRespVO::getSquareNum).filter(Objects::nonNull).reduce(BigDecimal.ZERO, BigDecimal::add));
|
||||
//设置出库总数
|
||||
dataDetailRespVO.setOutTotalNum(infoDatas.stream().filter(info -> info.getOutNum() != null).mapToInt(FactoryDataInfoRespVO::getOutNum).sum());
|
||||
//设置 出入库破损总数
|
||||
dataDetailRespVO.setDamageNum(infoDatas.stream().filter(info -> info.getInDamageNum() != null).mapToInt(info -> info.getInDamageNum() + info.getOutDamageNum()).sum());
|
||||
dataDetailRespVO.setItems(date.getValue());
|
||||
//设置 可编辑状态
|
||||
dataDetailRespVO.setIsEdit(1);
|
||||
|
||||
respVOS.add(0, dataDetailRespVO);
|
||||
});
|
||||
});
|
||||
dataPage.setTotal((long) respVOS.size());
|
||||
}
|
||||
}
|
||||
|
||||
return dataPage;
|
||||
}
|
||||
|
||||
@Override
|
||||
public FactoryDataTotalVO getDataTotal() {
|
||||
|
||||
return dataMapper.selectDataSum();
|
||||
}
|
||||
|
||||
@Override
|
||||
@ -78,4 +246,9 @@ public class FactoryDataServiceImpl implements FactoryDataService {
|
||||
.eq(FactoryDataDO::getFactoryId, factoryId));
|
||||
}
|
||||
|
||||
@Override
|
||||
public FactoryDataDO getListByType(Long factoryId, LocalDate date, Integer type) {
|
||||
|
||||
return dataMapper.selectListByType(factoryId, date, type);
|
||||
}
|
||||
}
|
@ -0,0 +1,53 @@
|
||||
package cn.iocoder.yudao.module.smartfactory.service.factorydata;
|
||||
|
||||
import cn.iocoder.yudao.module.smartfactory.controller.admin.factorydata.vo.FactoryDataInfoRespVO;
|
||||
import cn.iocoder.yudao.module.smartfactory.controller.admin.factorydata.vo.sizeData.FactoryDataSizeCreateReqVO;
|
||||
|
||||
import javax.validation.Valid;
|
||||
import java.time.LocalDate;
|
||||
import java.time.LocalDateTime;
|
||||
import java.util.List;
|
||||
|
||||
/**
|
||||
* 工厂出库入库规格数据 Service 接口
|
||||
*
|
||||
* @author 符溶馨
|
||||
*/
|
||||
public interface FactoryDataSizeService {
|
||||
|
||||
/**
|
||||
* 创建工厂规格数据
|
||||
*
|
||||
* @param createReqVO 创建信息
|
||||
* @return 编号
|
||||
*/
|
||||
Long createData(@Valid FactoryDataSizeCreateReqVO createReqVO);
|
||||
|
||||
/**
|
||||
* 更新工厂规格数据
|
||||
*
|
||||
* @param updateReqVO 更新信息
|
||||
*/
|
||||
void updateData(@Valid FactoryDataSizeCreateReqVO updateReqVO);
|
||||
|
||||
/**
|
||||
* 删除工厂规格数据
|
||||
*
|
||||
* @param factoryId 工厂编号
|
||||
* @param date 日期
|
||||
*/
|
||||
void deleteData(Long factoryId, String date);
|
||||
|
||||
/**
|
||||
* 获得出入库规格数据 列表
|
||||
* @return 出入库规格数据
|
||||
*/
|
||||
List<FactoryDataInfoRespVO> getDetailList(Long factoryId, LocalDate[] date);
|
||||
|
||||
/**
|
||||
* 获得指定时间段内 出入库规格数据之和
|
||||
* @param dateTimes 时间区间
|
||||
* @return 出入库规格数据之和
|
||||
*/
|
||||
List<FactoryDataInfoRespVO> getSUMByDateTimes(LocalDateTime[] dateTimes);
|
||||
}
|
@ -0,0 +1,213 @@
|
||||
package cn.iocoder.yudao.module.smartfactory.service.factorydata;
|
||||
|
||||
import cn.iocoder.yudao.framework.common.util.object.BeanUtils;
|
||||
import cn.iocoder.yudao.module.smartfactory.controller.admin.factorydata.vo.FactoryDataInfoRespVO;
|
||||
import cn.iocoder.yudao.module.smartfactory.controller.admin.factorydata.vo.sizeData.FactoryDataSizeCreateReqVO;
|
||||
import cn.iocoder.yudao.module.smartfactory.controller.admin.factorydata.vo.sizeData.FactoryDataSizeSaveReqVO;
|
||||
import cn.iocoder.yudao.module.smartfactory.controller.admin.packagedata.vo.PackageDataCreateReqVO;
|
||||
import cn.iocoder.yudao.module.smartfactory.dal.dataobject.factorydata.FactoryDataDO;
|
||||
import cn.iocoder.yudao.module.smartfactory.dal.dataobject.factorydata.FactoryDataSizeDO;
|
||||
import cn.iocoder.yudao.module.smartfactory.dal.mysql.factorydata.FactoryDataSizeMapper;
|
||||
import cn.iocoder.yudao.module.smartfactory.service.packagedata.PackageDataService;
|
||||
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 java.time.LocalDate;
|
||||
import java.time.LocalDateTime;
|
||||
import java.time.LocalTime;
|
||||
import java.util.ArrayList;
|
||||
import java.util.Arrays;
|
||||
import java.util.Collection;
|
||||
import java.util.List;
|
||||
|
||||
import static cn.iocoder.yudao.framework.common.exception.util.ServiceExceptionUtil.exception;
|
||||
import static cn.iocoder.yudao.module.smartfactory.enums.ErrorCodeConstants.PACKAGE_DATA_EXISTS;
|
||||
import static cn.iocoder.yudao.module.smartfactory.enums.ErrorCodeConstants.SIZEDATA_NOT_EXISTS;
|
||||
|
||||
/**
|
||||
* 工厂出库入库规格数据 Service 实现类
|
||||
*
|
||||
* @author 符溶馨
|
||||
*/
|
||||
@Service
|
||||
@Validated
|
||||
public class FactoryDataSizeServiceImpl implements FactoryDataSizeService{
|
||||
|
||||
@Resource
|
||||
private FactoryDataSizeMapper factoryDataSizeMapper;
|
||||
|
||||
@Resource
|
||||
private PackageDataService packageDataService;
|
||||
|
||||
@Resource
|
||||
@Lazy // 循环依赖,避免报错
|
||||
private FactoryDataService factoryDataService;
|
||||
|
||||
@Override
|
||||
@Transactional(rollbackFor = Exception.class)
|
||||
public Long createData(FactoryDataSizeCreateReqVO createReqVO) {
|
||||
|
||||
//校验 当前日期得数据是否已经录入
|
||||
Collection<Integer> types = Arrays.asList(1,2,3);
|
||||
Long count = factoryDataSizeMapper.selectCountByType(createReqVO.getFactoryId(), createReqVO.getDate(), types);
|
||||
if (count > 0L) {
|
||||
throw exception(PACKAGE_DATA_EXISTS);
|
||||
}
|
||||
|
||||
//校验 当前日期的出库数据是否已经统计过
|
||||
FactoryDataDO factoryDataDO = factoryDataService.getListByType(createReqVO.getFactoryId(), createReqVO.getDate(), 1);
|
||||
if (factoryDataDO != null) {
|
||||
throw exception(PACKAGE_DATA_EXISTS);
|
||||
}
|
||||
|
||||
//插入
|
||||
List<FactoryDataSizeDO> factoryDataSizeDOs = new ArrayList<>();
|
||||
for (FactoryDataSizeSaveReqVO reqVO : createReqVO.getItems()) {
|
||||
|
||||
if (reqVO.getInDamageNum() != null) {
|
||||
|
||||
FactoryDataSizeDO dataSizeDO = BeanUtils.toBean(reqVO, FactoryDataSizeDO.class);
|
||||
|
||||
//设置工厂和日期
|
||||
dataSizeDO.setFactoryId(createReqVO.getFactoryId());
|
||||
dataSizeDO.setDate(createReqVO.getDate());
|
||||
//设置入库破损数
|
||||
dataSizeDO.setType(1);
|
||||
dataSizeDO.setNum(reqVO.getInDamageNum());
|
||||
|
||||
factoryDataSizeDOs.add(dataSizeDO);
|
||||
}
|
||||
|
||||
if (reqVO.getOutNum() != null) {
|
||||
|
||||
FactoryDataSizeDO dataSizeDO = BeanUtils.toBean(reqVO, FactoryDataSizeDO.class);
|
||||
|
||||
//设置工厂和日期
|
||||
dataSizeDO.setFactoryId(createReqVO.getFactoryId());
|
||||
dataSizeDO.setDate(createReqVO.getDate());
|
||||
//设置出库数
|
||||
dataSizeDO.setType(2);
|
||||
dataSizeDO.setNum(reqVO.getOutNum());
|
||||
|
||||
factoryDataSizeDOs.add(dataSizeDO);
|
||||
}
|
||||
|
||||
if (reqVO.getOutDamageNum() != null) {
|
||||
|
||||
FactoryDataSizeDO dataSizeDO = BeanUtils.toBean(reqVO, FactoryDataSizeDO.class);
|
||||
|
||||
//设置工厂和日期
|
||||
dataSizeDO.setFactoryId(createReqVO.getFactoryId());
|
||||
dataSizeDO.setDate(createReqVO.getDate());
|
||||
//设置出库破损数
|
||||
dataSizeDO.setType(3);
|
||||
dataSizeDO.setNum(reqVO.getOutDamageNum());
|
||||
|
||||
factoryDataSizeDOs.add(dataSizeDO);
|
||||
}
|
||||
}
|
||||
|
||||
factoryDataSizeMapper.insertBatch(factoryDataSizeDOs);
|
||||
|
||||
// 判断打包线数据不为空时, 同步插入打包线数据
|
||||
if (!createReqVO.getPackageData().isEmpty()) {
|
||||
|
||||
PackageDataCreateReqVO packCreateReqVO = new PackageDataCreateReqVO();
|
||||
packCreateReqVO.setFactoryId(createReqVO.getPackageData().get(0).getFactoryId());
|
||||
packCreateReqVO.setPackageData(createReqVO.getPackageData());
|
||||
packCreateReqVO.setPackageDate(createReqVO.getDate());
|
||||
|
||||
//插入打包线数据
|
||||
packageDataService.createPackageData(packCreateReqVO);
|
||||
}
|
||||
|
||||
return (long) factoryDataSizeDOs.size();
|
||||
}
|
||||
|
||||
@Override
|
||||
@Transactional(rollbackFor = Exception.class)
|
||||
public void updateData(FactoryDataSizeCreateReqVO updateReqVO) {
|
||||
|
||||
// 更新
|
||||
List<FactoryDataSizeDO> factoryDataSizeDOs = new ArrayList<>();
|
||||
for (FactoryDataSizeSaveReqVO reqVO : updateReqVO.getItems()) {
|
||||
|
||||
if (reqVO.getInDamageNum() != null) {
|
||||
|
||||
FactoryDataSizeDO dataSizeDO = new FactoryDataSizeDO();
|
||||
|
||||
//设置入库破损数
|
||||
dataSizeDO.setId(reqVO.getInDamageNumId());
|
||||
dataSizeDO.setNum(reqVO.getInDamageNum());
|
||||
|
||||
factoryDataSizeDOs.add(dataSizeDO);
|
||||
}
|
||||
|
||||
if (reqVO.getOutNum() != null) {
|
||||
|
||||
FactoryDataSizeDO dataSizeDO = new FactoryDataSizeDO();
|
||||
|
||||
//设置出库数
|
||||
dataSizeDO.setId(reqVO.getOutNumId());
|
||||
dataSizeDO.setNum(reqVO.getOutNum());
|
||||
|
||||
factoryDataSizeDOs.add(dataSizeDO);
|
||||
}
|
||||
|
||||
if (reqVO.getOutDamageNum() != null) {
|
||||
|
||||
FactoryDataSizeDO dataSizeDO = new FactoryDataSizeDO();
|
||||
|
||||
//设置出库破损数
|
||||
dataSizeDO.setId(reqVO.getOutDamageNumId());
|
||||
dataSizeDO.setNum(reqVO.getOutDamageNum());
|
||||
|
||||
factoryDataSizeDOs.add(dataSizeDO);
|
||||
}
|
||||
}
|
||||
|
||||
factoryDataSizeMapper.updateBatch(factoryDataSizeDOs);
|
||||
|
||||
// 判断 是否有打包线数据
|
||||
if (!updateReqVO.getPackageData().isEmpty()) {
|
||||
|
||||
PackageDataCreateReqVO packCreateReqVO = new PackageDataCreateReqVO();
|
||||
packCreateReqVO.setFactoryId(updateReqVO.getFactoryId());
|
||||
packCreateReqVO.setPackageDate(updateReqVO.getDate());
|
||||
packCreateReqVO.setPackageData(updateReqVO.getPackageData());
|
||||
|
||||
//插入打包线数据
|
||||
packageDataService.updatePackageData(packCreateReqVO);
|
||||
}
|
||||
}
|
||||
|
||||
@Override
|
||||
public void deleteData(Long factoryId, String date) {
|
||||
|
||||
LocalDateTime[] dateTimes = {LocalDateTime.now().with(LocalTime.MIN), LocalDateTime.now().with(LocalTime.MAX)};
|
||||
|
||||
//校验是否 为当天数据
|
||||
Long count = factoryDataSizeMapper.selectCountByFactoryId(factoryId, date, dateTimes);
|
||||
if (count == 0L) {
|
||||
throw exception(SIZEDATA_NOT_EXISTS);
|
||||
}
|
||||
|
||||
// 删除
|
||||
factoryDataSizeMapper.deleteByFactoryId(factoryId, date);
|
||||
}
|
||||
|
||||
@Override
|
||||
public List<FactoryDataInfoRespVO> getDetailList(Long factoryId, LocalDate[] date) {
|
||||
|
||||
return factoryDataSizeMapper.selectDetailList(factoryId, date);
|
||||
}
|
||||
|
||||
@Override
|
||||
public List<FactoryDataInfoRespVO> getSUMByDateTimes(LocalDateTime[] dateTimes) {
|
||||
|
||||
return factoryDataSizeMapper.selectSUMByDateTimes(dateTimes);
|
||||
}
|
||||
}
|
@ -8,6 +8,7 @@ import cn.iocoder.yudao.module.smartfactory.controller.admin.screendata.factory.
|
||||
import cn.iocoder.yudao.module.smartfactory.dal.dataobject.factoryinfo.FactoryInfoDO;
|
||||
|
||||
import javax.validation.Valid;
|
||||
import java.util.Collection;
|
||||
import java.util.List;
|
||||
|
||||
/**
|
||||
@ -47,6 +48,20 @@ public interface FactoryInfoService {
|
||||
*/
|
||||
FactoryInfoDO getFactoryInfo(Long id);
|
||||
|
||||
/**
|
||||
* 获得工厂信息列表
|
||||
*
|
||||
* @param ids 编号
|
||||
* @return 工厂信息
|
||||
*/
|
||||
List<FactoryInfoDO> getFactoryList(Collection<Long> ids);
|
||||
|
||||
/**
|
||||
* 获得类型为工厂的工厂信息列表
|
||||
* @return 工厂列表
|
||||
*/
|
||||
List<FactoryInfoDO> getFactoryListByType();
|
||||
|
||||
/**
|
||||
* 获得工厂信息分页
|
||||
*
|
||||
|
@ -1,5 +1,6 @@
|
||||
package cn.iocoder.yudao.module.smartfactory.service.factoryinfo;
|
||||
|
||||
import cn.iocoder.yudao.framework.common.enums.CommonStatusEnum;
|
||||
import cn.iocoder.yudao.framework.common.pojo.PageResult;
|
||||
import cn.iocoder.yudao.framework.common.util.object.BeanUtils;
|
||||
import cn.iocoder.yudao.framework.ip.core.Area;
|
||||
@ -11,18 +12,20 @@ import cn.iocoder.yudao.module.smartfactory.controller.admin.screendata.factory.
|
||||
import cn.iocoder.yudao.module.smartfactory.controller.admin.screendata.factory.vo.ProvincesDataRespVO;
|
||||
import cn.iocoder.yudao.module.smartfactory.dal.dataobject.factoryinfo.FactoryInfoDO;
|
||||
import cn.iocoder.yudao.module.smartfactory.dal.mysql.factoryinfo.FactoryInfoMapper;
|
||||
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.user.AdminUserApi;
|
||||
import cn.iocoder.yudao.module.system.api.user.dto.AdminUserRespDTO;
|
||||
import org.springframework.stereotype.Service;
|
||||
import org.springframework.validation.annotation.Validated;
|
||||
|
||||
import javax.annotation.Resource;
|
||||
import java.util.ArrayList;
|
||||
import java.util.HashMap;
|
||||
import java.util.List;
|
||||
import java.util.Map;
|
||||
import java.util.*;
|
||||
import java.util.stream.Collectors;
|
||||
|
||||
import static cn.iocoder.yudao.framework.common.exception.util.ServiceExceptionUtil.exception;
|
||||
import static cn.iocoder.yudao.module.smartfactory.enums.ErrorCodeConstants.FACTORY_INFO_NOT_EXISTS;
|
||||
import static cn.iocoder.yudao.module.smartfactory.enums.ErrorCodeConstants.FACTOYRY_EXISTS_STAFF;
|
||||
|
||||
/**
|
||||
* 工厂信息 Service 实现类
|
||||
@ -36,11 +39,27 @@ public class FactoryInfoServiceImpl implements FactoryInfoService {
|
||||
@Resource
|
||||
private FactoryInfoMapper factoryInfoMapper;
|
||||
|
||||
@Resource
|
||||
private DeptApi deptApi;
|
||||
|
||||
@Resource
|
||||
private AdminUserApi userApi;
|
||||
|
||||
@Override
|
||||
public Long createFactoryInfo(FactoryInfoSaveReqVO createReqVO) {
|
||||
// 插入
|
||||
FactoryInfoDO factoryInfo = BeanUtils.toBean(createReqVO, FactoryInfoDO.class);
|
||||
factoryInfoMapper.insert(factoryInfo);
|
||||
|
||||
//同步插入对应 生产部的下级部门
|
||||
DeptRespDTO deptRespDTO = new DeptRespDTO();
|
||||
deptRespDTO.setFactoryId(factoryInfo.getId());
|
||||
deptRespDTO.setName(createReqVO.getShortName());
|
||||
deptRespDTO.setParentId(130L); //这里设置上级部门为 生产部
|
||||
deptRespDTO.setLeaderUserId(createReqVO.getLeaderUserId());
|
||||
deptRespDTO.setStatus(CommonStatusEnum.ENABLE.getStatus());
|
||||
deptApi.createDept(deptRespDTO);
|
||||
|
||||
// 返回
|
||||
return factoryInfo.getId();
|
||||
}
|
||||
@ -52,14 +71,36 @@ public class FactoryInfoServiceImpl implements FactoryInfoService {
|
||||
// 更新
|
||||
FactoryInfoDO updateObj = BeanUtils.toBean(updateReqVO, FactoryInfoDO.class);
|
||||
factoryInfoMapper.updateById(updateObj);
|
||||
|
||||
//同步更新 部门信息
|
||||
DeptRespDTO deptRespDTO = new DeptRespDTO();
|
||||
deptRespDTO.setName(updateReqVO.getShortName());
|
||||
deptRespDTO.setLeaderUserId(updateReqVO.getLeaderUserId());
|
||||
deptRespDTO.setFactoryId(updateReqVO.getId());
|
||||
deptApi.updateDept(deptRespDTO);
|
||||
}
|
||||
|
||||
@Override
|
||||
public void deleteFactoryInfo(Long id) {
|
||||
// 校验存在
|
||||
validateFactoryInfoExists(id);
|
||||
|
||||
//校验工厂下是否存在 员工
|
||||
DeptRespDTO deptRespDTO = deptApi.getDeptByFactoryId(id).getCheckedData();
|
||||
|
||||
List<Long> deptId = new ArrayList<>();
|
||||
deptId.add(deptRespDTO.getId());
|
||||
List<AdminUserRespDTO> userRespDTOS = userApi.getUserListByDeptIds(deptId).getCheckedData();
|
||||
|
||||
if (userRespDTOS != null && !userRespDTOS.isEmpty()) {
|
||||
throw exception(FACTOYRY_EXISTS_STAFF);
|
||||
}
|
||||
|
||||
// 删除
|
||||
factoryInfoMapper.deleteById(id);
|
||||
|
||||
//同步删除部门
|
||||
deptApi.deleteDept(id);
|
||||
}
|
||||
|
||||
private void validateFactoryInfoExists(Long id) {
|
||||
@ -70,9 +111,22 @@ public class FactoryInfoServiceImpl implements FactoryInfoService {
|
||||
|
||||
@Override
|
||||
public FactoryInfoDO getFactoryInfo(Long id) {
|
||||
|
||||
return factoryInfoMapper.selectById(id);
|
||||
}
|
||||
|
||||
@Override
|
||||
public List<FactoryInfoDO> getFactoryList(Collection<Long> ids) {
|
||||
|
||||
return factoryInfoMapper.selectList(FactoryInfoDO::getId, ids);
|
||||
}
|
||||
|
||||
@Override
|
||||
public List<FactoryInfoDO> getFactoryListByType() {
|
||||
|
||||
return factoryInfoMapper.selectList(FactoryInfoDO::getType, 3);
|
||||
}
|
||||
|
||||
@Override
|
||||
public PageResult<FactoryInfoDO> getFactoryInfoPage(FactoryInfoPageReqVO pageReqVO) {
|
||||
return factoryInfoMapper.selectPage(pageReqVO);
|
||||
@ -132,5 +186,4 @@ public class FactoryInfoServiceImpl implements FactoryInfoService {
|
||||
public String getWeatherCodeByFactoryId(Long factoryId, String areaCode) {
|
||||
return factoryInfoMapper.getWeatherCodeByFactoryId(factoryId, areaCode);
|
||||
}
|
||||
|
||||
}
|
@ -0,0 +1,63 @@
|
||||
package cn.iocoder.yudao.module.smartfactory.service.packageInfo;
|
||||
|
||||
import cn.iocoder.yudao.framework.common.pojo.PageResult;
|
||||
import cn.iocoder.yudao.module.smartfactory.controller.admin.packageInfo.vo.PackagePageReqVO;
|
||||
import cn.iocoder.yudao.module.smartfactory.controller.admin.packageInfo.vo.PackageRespVO;
|
||||
import cn.iocoder.yudao.module.smartfactory.controller.admin.packageInfo.vo.PackageSaveReqVO;
|
||||
import cn.iocoder.yudao.module.smartfactory.dal.dataobject.packageInfo.PackageDO;
|
||||
|
||||
import javax.validation.Valid;
|
||||
import java.util.List;
|
||||
|
||||
/**
|
||||
* 打包线 Service 接口
|
||||
*
|
||||
* @author 符溶馨
|
||||
*/
|
||||
public interface PackageService {
|
||||
|
||||
/**
|
||||
* 创建打包线
|
||||
*
|
||||
* @param createReqVO 创建信息
|
||||
* @return 编号
|
||||
*/
|
||||
Long createPackage(@Valid PackageSaveReqVO createReqVO);
|
||||
|
||||
/**
|
||||
* 更新打包线
|
||||
*
|
||||
* @param updateReqVO 更新信息
|
||||
*/
|
||||
void updatePackage(@Valid PackageSaveReqVO updateReqVO);
|
||||
|
||||
/**
|
||||
* 删除打包线
|
||||
*
|
||||
* @param id 编号
|
||||
*/
|
||||
void deletePackage(Long id);
|
||||
|
||||
/**
|
||||
* 获得打包线
|
||||
*
|
||||
* @param id 编号
|
||||
* @return 打包线
|
||||
*/
|
||||
PackageDO getPackage(Long id);
|
||||
|
||||
/**
|
||||
* 获得指定工厂的打包线列表
|
||||
* @param factoryId 工厂编号
|
||||
* @return 打包线信息列表
|
||||
*/
|
||||
List<PackageRespVO> getPackageByFactoryId(Long factoryId);
|
||||
|
||||
/**
|
||||
* 获得打包线分页
|
||||
*
|
||||
* @param pageReqVO 分页查询
|
||||
* @return 打包线分页
|
||||
*/
|
||||
PageResult<PackageRespVO> getPackagePage(PackagePageReqVO pageReqVO);
|
||||
}
|
@ -0,0 +1,116 @@
|
||||
package cn.iocoder.yudao.module.smartfactory.service.packageInfo;
|
||||
|
||||
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.packageInfo.vo.PackagePageReqVO;
|
||||
import cn.iocoder.yudao.module.smartfactory.controller.admin.packageInfo.vo.PackageRespVO;
|
||||
import cn.iocoder.yudao.module.smartfactory.controller.admin.packageInfo.vo.PackageSaveReqVO;
|
||||
import cn.iocoder.yudao.module.smartfactory.dal.dataobject.factoryinfo.FactoryInfoDO;
|
||||
import cn.iocoder.yudao.module.smartfactory.dal.dataobject.packageInfo.PackageDO;
|
||||
import cn.iocoder.yudao.module.smartfactory.dal.dataobject.size.SizeDO;
|
||||
import cn.iocoder.yudao.module.smartfactory.dal.mysql.packageInfo.PackageMapper;
|
||||
import cn.iocoder.yudao.module.smartfactory.service.factoryinfo.FactoryInfoService;
|
||||
import cn.iocoder.yudao.module.smartfactory.service.size.SizeService;
|
||||
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;
|
||||
import java.util.Map;
|
||||
|
||||
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.convertMap;
|
||||
import static cn.iocoder.yudao.module.smartfactory.enums.ErrorCodeConstants.PACKAGE_NOT_EXISTS;
|
||||
|
||||
/**
|
||||
* 打包线 Service 实现类
|
||||
*
|
||||
* @author 符溶馨
|
||||
*/
|
||||
@Service
|
||||
@Validated
|
||||
public class PackageServiceImpl implements PackageService {
|
||||
|
||||
@Resource
|
||||
private PackageMapper packageMapper;
|
||||
|
||||
@Resource
|
||||
private FactoryInfoService factoryService;
|
||||
|
||||
@Resource
|
||||
private SizeService sizeService;
|
||||
|
||||
@Override
|
||||
public Long createPackage(PackageSaveReqVO createReqVO) {
|
||||
// 插入
|
||||
PackageDO packDO = BeanUtils.toBean(createReqVO, PackageDO.class);
|
||||
packageMapper.insert(packDO);
|
||||
// 返回
|
||||
return packDO.getId();
|
||||
}
|
||||
|
||||
@Override
|
||||
public void updatePackage(PackageSaveReqVO updateReqVO) {
|
||||
// 校验存在
|
||||
validatePackageExists(updateReqVO.getId());
|
||||
// 更新
|
||||
PackageDO updateObj = BeanUtils.toBean(updateReqVO, PackageDO.class);
|
||||
packageMapper.updateById(updateObj);
|
||||
}
|
||||
|
||||
@Override
|
||||
public void deletePackage(Long id) {
|
||||
// 校验存在
|
||||
validatePackageExists(id);
|
||||
// 删除
|
||||
packageMapper.deleteById(id);
|
||||
}
|
||||
|
||||
private void validatePackageExists(Long id) {
|
||||
if (packageMapper.selectById(id) == null) {
|
||||
throw exception(PACKAGE_NOT_EXISTS);
|
||||
}
|
||||
}
|
||||
|
||||
@Override
|
||||
public PackageDO getPackage(Long id) {
|
||||
|
||||
return packageMapper.selectById(id);
|
||||
}
|
||||
|
||||
@Override
|
||||
public List<PackageRespVO> getPackageByFactoryId(Long factoryId) {
|
||||
|
||||
//获得工厂信息
|
||||
FactoryInfoDO factoryInfoDO = factoryService.getFactoryInfo(factoryId);
|
||||
|
||||
//获得打包线信息列表
|
||||
List<PackageDO> packageDOS = packageMapper.selectList(PackageDO::getFactoryId, factoryId);
|
||||
//获得 规格信息
|
||||
List<Long> sizeIds = convertList(packageDOS, PackageDO::getSizeId);
|
||||
List<SizeDO> sizeDOS = sizeService.getSizes(sizeIds);
|
||||
|
||||
//获得规格信息Map
|
||||
Map<Long, SizeDO> sizeMap = convertMap(sizeDOS, SizeDO::getId);
|
||||
|
||||
List<PackageRespVO> respVOS = BeanUtils.toBean(packageDOS, PackageRespVO.class);
|
||||
respVOS.forEach(data -> {
|
||||
|
||||
data.setFactoryName(factoryInfoDO.getName());
|
||||
data.setSizeName(sizeMap.get(data.getSizeId()).getName());
|
||||
});
|
||||
|
||||
return respVOS;
|
||||
}
|
||||
|
||||
@Override
|
||||
public PageResult<PackageRespVO> getPackagePage(PackagePageReqVO pageReqVO) {
|
||||
|
||||
IPage<PackageRespVO> mpPage = MyBatisUtils.buildPage(pageReqVO);
|
||||
IPage<PackageRespVO> page = packageMapper.selectPackagePage(mpPage, pageReqVO);
|
||||
return new PageResult<>(page.getRecords(), page.getTotal());
|
||||
}
|
||||
}
|
Some files were not shown because too many files have changed in this diff Show More
Loading…
Reference in New Issue
Block a user