### commit message
1. rpc接口新增 - 新增`AdminUserApi`接口,提供外勤用户查询功能。 - 在`AdminUserService`接口中添加`getFactoryUsers`方法,用于获取工厂用户列表。 - 在`BpmModelApi`接口中新增`getModelList`方法,用于获取流程模板列表。 2. 实体类创建与修改 - 创建`AdminUserRpcVO`类,用于RPC调用中传输用户信息。 - 创建`AssetsStockVO`类,用于展示工厂库存信息。 - 修改`CommonlyUsedDO`类,移除`routing`字段。 - 更新`DataOverviewVO`类,调整工厂数据总览视图结构。 3.服务与实现更新 - 在`CommonlyUsedService`接口及其实现类中新增批量操作方法。 - 在`DeptService`接口及其实现类中添加获取工厂部门列表的方法。 - 更新`CommonlyUsedController`,添加批量操作接口。 - 修改`CommonlyUsedMapper`,适配批量操作。 - 更新`CommonlyUsedVO`,包含流程列表信息。 4. 其他修改 - 在`AssetsTypeCodeEnum`中新增多个资产类型常量。 - 修改`gpsPosition`方法,调整GPS位置更新逻辑。 - 调整数据库操作,优化SQL查询条件。
This commit is contained in:
parent
16a6f35602
commit
b83c48f2b5
@ -14,5 +14,20 @@ public class AssetsTypeCodeEnum {
|
|||||||
* 叉车
|
* 叉车
|
||||||
*/
|
*/
|
||||||
public static final String FORKLIFT = "FORKLIFT";
|
public static final String FORKLIFT = "FORKLIFT";
|
||||||
|
/**
|
||||||
|
* 叉车 油
|
||||||
|
*/
|
||||||
|
public static final String FORKLIFT_OIL = "FORKLIFT_OIL";
|
||||||
|
/**
|
||||||
|
* 叉车 电
|
||||||
|
*/
|
||||||
|
public static final String FORKLIFT_ELECTRICITY = "FORKLIFT_ELECTRICITY";
|
||||||
|
/**
|
||||||
|
* 托盘
|
||||||
|
*/
|
||||||
|
public static final String TRAY = "TRAY";
|
||||||
|
/**
|
||||||
|
* 绑带
|
||||||
|
*/
|
||||||
|
public static final String STRAPS = "STRAPS";
|
||||||
}
|
}
|
||||||
|
@ -0,0 +1,23 @@
|
|||||||
|
package cn.iocoder.yudao.module.bpm.api.model;
|
||||||
|
|
||||||
|
import cn.iocoder.yudao.framework.common.pojo.CommonResult;
|
||||||
|
import cn.iocoder.yudao.module.bpm.api.model.vo.BpmModelRpcVO;
|
||||||
|
import cn.iocoder.yudao.module.bpm.enums.ApiConstants;
|
||||||
|
import io.swagger.v3.oas.annotations.Operation;
|
||||||
|
import io.swagger.v3.oas.annotations.tags.Tag;
|
||||||
|
import org.springframework.cloud.openfeign.FeignClient;
|
||||||
|
import org.springframework.web.bind.annotation.GetMapping;
|
||||||
|
|
||||||
|
import java.util.List;
|
||||||
|
|
||||||
|
@FeignClient(name = ApiConstants.NAME) // TODO 芋艿:fallbackFactory =
|
||||||
|
@Tag(name = "RPC 服务 - 流程实例")
|
||||||
|
public interface BpmModelApi {
|
||||||
|
|
||||||
|
String PREFIX = ApiConstants.PREFIX + "/oa/model";
|
||||||
|
|
||||||
|
@GetMapping(PREFIX + "/getModelList")
|
||||||
|
@Operation(summary = "获取流程模版列表")
|
||||||
|
CommonResult<List<BpmModelRpcVO>> getModelList();
|
||||||
|
|
||||||
|
}
|
@ -0,0 +1,18 @@
|
|||||||
|
package cn.iocoder.yudao.module.bpm.api.model.vo;
|
||||||
|
|
||||||
|
import io.swagger.v3.oas.annotations.media.Schema;
|
||||||
|
import lombok.Data;
|
||||||
|
|
||||||
|
@Data
|
||||||
|
public class BpmModelRpcVO {
|
||||||
|
@Schema(description = "id")
|
||||||
|
private String id;
|
||||||
|
@Schema(description = "名称")
|
||||||
|
private String name;
|
||||||
|
@Schema(description = "图标")
|
||||||
|
private String processImg;
|
||||||
|
@Schema(description = "路由")
|
||||||
|
private String formCustomCreatePath;
|
||||||
|
@Schema(description = "是否已选择 (用于常用菜单赛选 true 已选 false 未选)", example = "false")
|
||||||
|
private Boolean selectedFlag;
|
||||||
|
}
|
@ -0,0 +1,56 @@
|
|||||||
|
package cn.iocoder.yudao.module.bpm.api.model;
|
||||||
|
|
||||||
|
import cn.iocoder.yudao.framework.common.pojo.CommonResult;
|
||||||
|
import cn.iocoder.yudao.framework.common.util.json.JsonUtils;
|
||||||
|
import cn.iocoder.yudao.framework.tenant.core.context.TenantContextHolder;
|
||||||
|
import cn.iocoder.yudao.module.bpm.api.model.vo.BpmModelRpcVO;
|
||||||
|
import cn.iocoder.yudao.module.bpm.service.definition.dto.BpmModelMetaInfoRespDTO;
|
||||||
|
import org.flowable.engine.RepositoryService;
|
||||||
|
import org.flowable.engine.repository.Model;
|
||||||
|
import org.flowable.engine.repository.ModelQuery;
|
||||||
|
import org.springframework.validation.annotation.Validated;
|
||||||
|
import org.springframework.web.bind.annotation.RestController;
|
||||||
|
|
||||||
|
import javax.annotation.Resource;
|
||||||
|
import java.util.ArrayList;
|
||||||
|
import java.util.Arrays;
|
||||||
|
import java.util.List;
|
||||||
|
|
||||||
|
import static cn.iocoder.yudao.framework.common.pojo.CommonResult.success;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Flowable 流程实例 Api 实现类
|
||||||
|
*
|
||||||
|
* @author jason
|
||||||
|
*/
|
||||||
|
@RestController
|
||||||
|
@Validated
|
||||||
|
public class BpmModelApiImpl implements BpmModelApi {
|
||||||
|
|
||||||
|
@Resource
|
||||||
|
private RepositoryService repositoryService;
|
||||||
|
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public CommonResult<List<BpmModelRpcVO>> getModelList() {
|
||||||
|
ModelQuery modelQuery = repositoryService.createModelQuery();
|
||||||
|
/**对模型添加租户*/
|
||||||
|
modelQuery.modelTenantId(TenantContextHolder.getTenantId().toString());
|
||||||
|
// 执行查询
|
||||||
|
List<Model> models = modelQuery.orderByCreateTime().desc().list();
|
||||||
|
List<BpmModelRpcVO> list = new ArrayList<>();
|
||||||
|
// -- 需要过滤的 - 列表
|
||||||
|
List<String> filterList = Arrays.asList("work_task");
|
||||||
|
for (Model model : models) {
|
||||||
|
BpmModelMetaInfoRespDTO metaInfo = JsonUtils.parseObject(model.getMetaInfo(), BpmModelMetaInfoRespDTO.class);
|
||||||
|
if (filterList.contains(model.getKey()) || metaInfo == null) {
|
||||||
|
continue;
|
||||||
|
}
|
||||||
|
list.add(new BpmModelRpcVO().setId(model.getId())
|
||||||
|
.setName(model.getName())
|
||||||
|
.setProcessImg(metaInfo.getProcessImg())
|
||||||
|
.setFormCustomCreatePath(metaInfo.getFormCustomCreatePath()));
|
||||||
|
}
|
||||||
|
return success(list);
|
||||||
|
}
|
||||||
|
}
|
@ -4,10 +4,11 @@ import cn.iocoder.yudao.framework.common.pojo.CommonResult;
|
|||||||
import cn.iocoder.yudao.framework.common.util.collection.CollectionUtils;
|
import cn.iocoder.yudao.framework.common.util.collection.CollectionUtils;
|
||||||
import cn.iocoder.yudao.module.system.api.user.dto.AdminUserRespDTO;
|
import cn.iocoder.yudao.module.system.api.user.dto.AdminUserRespDTO;
|
||||||
import cn.iocoder.yudao.module.system.api.user.dto.UserSaveRespDTO;
|
import cn.iocoder.yudao.module.system.api.user.dto.UserSaveRespDTO;
|
||||||
|
import cn.iocoder.yudao.module.system.api.user.vo.AdminUserRpcVO;
|
||||||
import cn.iocoder.yudao.module.system.enums.ApiConstants;
|
import cn.iocoder.yudao.module.system.enums.ApiConstants;
|
||||||
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.Operation;
|
||||||
|
import io.swagger.v3.oas.annotations.Parameter;
|
||||||
|
import io.swagger.v3.oas.annotations.tags.Tag;
|
||||||
import org.springframework.cloud.openfeign.FeignClient;
|
import org.springframework.cloud.openfeign.FeignClient;
|
||||||
import org.springframework.web.bind.annotation.GetMapping;
|
import org.springframework.web.bind.annotation.GetMapping;
|
||||||
import org.springframework.web.bind.annotation.PostMapping;
|
import org.springframework.web.bind.annotation.PostMapping;
|
||||||
@ -75,4 +76,10 @@ public interface AdminUserApi {
|
|||||||
@Operation(summary = "获取所有用户性质为外勤的用户")
|
@Operation(summary = "获取所有用户性质为外勤的用户")
|
||||||
@Parameter(name = "userNature", description = "用户性质", example = "3", required = true)
|
@Parameter(name = "userNature", description = "用户性质", example = "3", required = true)
|
||||||
CommonResult<List<Long>> getUserIdsByUserNature(@RequestParam("userNature") Integer userNature);
|
CommonResult<List<Long>> getUserIdsByUserNature(@RequestParam("userNature") Integer userNature);
|
||||||
|
|
||||||
|
@GetMapping(PREFIX + "/getFactoryUsers")
|
||||||
|
@Operation(summary = "获取同部门所有用户id")
|
||||||
|
@Parameter(name = "factoryId", description = "工厂id", example = "1024", required = false)
|
||||||
|
CommonResult<List<AdminUserRpcVO>> getFactoryUsers(@RequestParam(name = "factoryId", required = false) Long factoryId);
|
||||||
|
|
||||||
}
|
}
|
||||||
|
@ -0,0 +1,105 @@
|
|||||||
|
package cn.iocoder.yudao.module.system.api.user.vo;
|
||||||
|
|
||||||
|
import cn.iocoder.yudao.framework.common.enums.CommonStatusEnum;
|
||||||
|
import cn.iocoder.yudao.module.system.enums.common.SexEnum;
|
||||||
|
import lombok.Data;
|
||||||
|
import org.springframework.security.crypto.bcrypt.BCryptPasswordEncoder;
|
||||||
|
|
||||||
|
import java.time.LocalDate;
|
||||||
|
import java.time.LocalDateTime;
|
||||||
|
|
||||||
|
@Data
|
||||||
|
public class AdminUserRpcVO {
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 用户ID
|
||||||
|
*/
|
||||||
|
private Long id;
|
||||||
|
/**
|
||||||
|
* 用户账号
|
||||||
|
*/
|
||||||
|
private String username;
|
||||||
|
/**
|
||||||
|
* 用户昵称
|
||||||
|
*/
|
||||||
|
private String nickname;
|
||||||
|
/**
|
||||||
|
* 部门 ID
|
||||||
|
*/
|
||||||
|
private Long deptId;
|
||||||
|
/**
|
||||||
|
* 用户邮箱
|
||||||
|
*/
|
||||||
|
private String email;
|
||||||
|
/**
|
||||||
|
* 手机号码
|
||||||
|
*/
|
||||||
|
private String mobile;
|
||||||
|
/**
|
||||||
|
* 身份证号码
|
||||||
|
*/
|
||||||
|
private String idcard;
|
||||||
|
/**
|
||||||
|
* 年龄
|
||||||
|
*/
|
||||||
|
private Integer age;
|
||||||
|
/**
|
||||||
|
* 生日日期
|
||||||
|
*/
|
||||||
|
private LocalDate birthdayDay;
|
||||||
|
/**
|
||||||
|
* 用户性别
|
||||||
|
* <p>
|
||||||
|
* 枚举类 {@link SexEnum}
|
||||||
|
*/
|
||||||
|
private Integer sex;
|
||||||
|
/**
|
||||||
|
* 用户头像
|
||||||
|
*/
|
||||||
|
private String avatar;
|
||||||
|
/**
|
||||||
|
* 帐号状态
|
||||||
|
* <p>
|
||||||
|
* 枚举 {@link CommonStatusEnum}
|
||||||
|
*/
|
||||||
|
private Integer status;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 是否允许外勤打卡 0否 1是
|
||||||
|
* <p>
|
||||||
|
* 枚举 {@link CommonStatusEnum}
|
||||||
|
*/
|
||||||
|
private Integer fieldworkFlag;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 用户类型
|
||||||
|
* 1:公司用户 2:工厂用户
|
||||||
|
*/
|
||||||
|
private Integer userType;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 用户性质
|
||||||
|
* 3:正式 4:外勤
|
||||||
|
*/
|
||||||
|
private Integer userNature;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 用户编制
|
||||||
|
* 5:试用 6:实习 7:在职 8:离职
|
||||||
|
*/
|
||||||
|
private Integer userStaffing;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 最后登录IP
|
||||||
|
*/
|
||||||
|
private String loginIp;
|
||||||
|
/**
|
||||||
|
* 最后登录时间
|
||||||
|
*/
|
||||||
|
private LocalDateTime loginDate;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 微信小程序openId
|
||||||
|
*/
|
||||||
|
private String openId;
|
||||||
|
}
|
@ -5,6 +5,7 @@ import cn.iocoder.yudao.framework.common.util.object.BeanUtils;
|
|||||||
import cn.iocoder.yudao.framework.datapermission.core.annotation.DataPermission;
|
import cn.iocoder.yudao.framework.datapermission.core.annotation.DataPermission;
|
||||||
import cn.iocoder.yudao.module.system.api.user.dto.AdminUserRespDTO;
|
import cn.iocoder.yudao.module.system.api.user.dto.AdminUserRespDTO;
|
||||||
import cn.iocoder.yudao.module.system.api.user.dto.UserSaveRespDTO;
|
import cn.iocoder.yudao.module.system.api.user.dto.UserSaveRespDTO;
|
||||||
|
import cn.iocoder.yudao.module.system.api.user.vo.AdminUserRpcVO;
|
||||||
import cn.iocoder.yudao.module.system.controller.admin.user.vo.user.UserSaveReqVO;
|
import cn.iocoder.yudao.module.system.controller.admin.user.vo.user.UserSaveReqVO;
|
||||||
import cn.iocoder.yudao.module.system.dal.dataobject.user.AdminUserDO;
|
import cn.iocoder.yudao.module.system.dal.dataobject.user.AdminUserDO;
|
||||||
import cn.iocoder.yudao.module.system.service.user.AdminUserService;
|
import cn.iocoder.yudao.module.system.service.user.AdminUserService;
|
||||||
@ -77,4 +78,10 @@ public class AdminUserApiImpl implements AdminUserApi {
|
|||||||
return success(convertList(userDOS, AdminUserDO::getId));
|
return success(convertList(userDOS, AdminUserDO::getId));
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public CommonResult<List<AdminUserRpcVO>> getFactoryUsers(Long factoryId) {
|
||||||
|
List<AdminUserDO> factoryUsers = userService.getFactoryUsers(factoryId);
|
||||||
|
return success(BeanUtils.toBean(factoryUsers, AdminUserRpcVO.class));
|
||||||
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
@ -1,33 +1,31 @@
|
|||||||
package cn.iocoder.yudao.module.system.controller.admin.commonlyused;
|
package cn.iocoder.yudao.module.system.controller.admin.commonlyused;
|
||||||
|
|
||||||
import org.springframework.web.bind.annotation.*;
|
|
||||||
import javax.annotation.Resource;
|
|
||||||
import org.springframework.validation.annotation.Validated;
|
|
||||||
import org.springframework.security.access.prepost.PreAuthorize;
|
|
||||||
import io.swagger.v3.oas.annotations.tags.Tag;
|
|
||||||
import io.swagger.v3.oas.annotations.Parameter;
|
|
||||||
import io.swagger.v3.oas.annotations.Operation;
|
|
||||||
|
|
||||||
import javax.validation.constraints.*;
|
|
||||||
import javax.validation.*;
|
|
||||||
import javax.servlet.http.*;
|
|
||||||
import java.util.*;
|
|
||||||
import java.io.IOException;
|
|
||||||
|
|
||||||
import cn.iocoder.yudao.framework.common.pojo.PageParam;
|
|
||||||
import cn.iocoder.yudao.framework.common.pojo.PageResult;
|
|
||||||
import cn.iocoder.yudao.framework.common.pojo.CommonResult;
|
import cn.iocoder.yudao.framework.common.pojo.CommonResult;
|
||||||
|
import cn.iocoder.yudao.framework.common.pojo.PageParam;
|
||||||
import cn.iocoder.yudao.framework.common.util.object.BeanUtils;
|
import cn.iocoder.yudao.framework.common.util.object.BeanUtils;
|
||||||
import static cn.iocoder.yudao.framework.common.pojo.CommonResult.success;
|
|
||||||
|
|
||||||
import cn.iocoder.yudao.framework.excel.core.util.ExcelUtils;
|
import cn.iocoder.yudao.framework.excel.core.util.ExcelUtils;
|
||||||
|
|
||||||
import cn.iocoder.yudao.framework.operatelog.core.annotations.OperateLog;
|
import cn.iocoder.yudao.framework.operatelog.core.annotations.OperateLog;
|
||||||
import static cn.iocoder.yudao.framework.operatelog.core.enums.OperateTypeEnum.*;
|
import cn.iocoder.yudao.module.system.controller.admin.commonlyused.vo.CommonlyUsedPageReqVO;
|
||||||
|
import cn.iocoder.yudao.module.system.controller.admin.commonlyused.vo.CommonlyUsedRespVO;
|
||||||
import cn.iocoder.yudao.module.system.controller.admin.commonlyused.vo.*;
|
import cn.iocoder.yudao.module.system.controller.admin.commonlyused.vo.CommonlyUsedSaveReqVO;
|
||||||
|
import cn.iocoder.yudao.module.system.controller.admin.commonlyused.vo.CommonlyUsedVO;
|
||||||
import cn.iocoder.yudao.module.system.dal.dataobject.commonlyused.CommonlyUsedDO;
|
import cn.iocoder.yudao.module.system.dal.dataobject.commonlyused.CommonlyUsedDO;
|
||||||
import cn.iocoder.yudao.module.system.service.commonlyused.CommonlyUsedService;
|
import cn.iocoder.yudao.module.system.service.commonlyused.CommonlyUsedService;
|
||||||
|
import io.swagger.v3.oas.annotations.Operation;
|
||||||
|
import io.swagger.v3.oas.annotations.Parameter;
|
||||||
|
import io.swagger.v3.oas.annotations.tags.Tag;
|
||||||
|
import org.springframework.security.access.prepost.PreAuthorize;
|
||||||
|
import org.springframework.validation.annotation.Validated;
|
||||||
|
import org.springframework.web.bind.annotation.*;
|
||||||
|
|
||||||
|
import javax.annotation.Resource;
|
||||||
|
import javax.servlet.http.HttpServletResponse;
|
||||||
|
import javax.validation.Valid;
|
||||||
|
import java.io.IOException;
|
||||||
|
import java.util.List;
|
||||||
|
|
||||||
|
import static cn.iocoder.yudao.framework.common.pojo.CommonResult.success;
|
||||||
|
import static cn.iocoder.yudao.framework.operatelog.core.enums.OperateTypeEnum.EXPORT;
|
||||||
|
|
||||||
@Tag(name = "管理后台 - 用户常用应用配置")
|
@Tag(name = "管理后台 - 用户常用应用配置")
|
||||||
@RestController
|
@RestController
|
||||||
@ -45,6 +43,14 @@ public class CommonlyUsedController {
|
|||||||
return success(commonlyUsedService.createCommonlyUsed(createReqVO));
|
return success(commonlyUsedService.createCommonlyUsed(createReqVO));
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@PostMapping("/batchCreate")
|
||||||
|
@Operation(summary = "批量创建用户常用应用配置")
|
||||||
|
@PreAuthorize("@ss.hasPermission('system:commonly-used:create')")
|
||||||
|
public CommonResult<?> batchCreate(@Valid @RequestBody List<CommonlyUsedSaveReqVO> list) {
|
||||||
|
commonlyUsedService.batchCreate(list);
|
||||||
|
return success(true);
|
||||||
|
}
|
||||||
|
|
||||||
@PutMapping("/update")
|
@PutMapping("/update")
|
||||||
@Operation(summary = "更新用户常用应用配置")
|
@Operation(summary = "更新用户常用应用配置")
|
||||||
@PreAuthorize("@ss.hasPermission('system:commonly-used:update')")
|
@PreAuthorize("@ss.hasPermission('system:commonly-used:update')")
|
||||||
@ -53,6 +59,14 @@ public class CommonlyUsedController {
|
|||||||
return success(true);
|
return success(true);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@PutMapping("/batchUpdate")
|
||||||
|
@Operation(summary = "批量更新用户常用应用配置")
|
||||||
|
@PreAuthorize("@ss.hasPermission('system:commonly-used:update')")
|
||||||
|
public CommonResult<Boolean> batchUpdate(@Valid @RequestBody List<CommonlyUsedSaveReqVO> list) {
|
||||||
|
commonlyUsedService.batchUpdate(list);
|
||||||
|
return success(true);
|
||||||
|
}
|
||||||
|
|
||||||
@DeleteMapping("/delete")
|
@DeleteMapping("/delete")
|
||||||
@Operation(summary = "删除用户常用应用配置")
|
@Operation(summary = "删除用户常用应用配置")
|
||||||
@Parameter(name = "id", description = "编号", required = true)
|
@Parameter(name = "id", description = "编号", required = true)
|
||||||
@ -62,6 +76,14 @@ public class CommonlyUsedController {
|
|||||||
return success(true);
|
return success(true);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@DeleteMapping("/batchDelete")
|
||||||
|
@Operation(summary = "批量删除用户常用应用配置")
|
||||||
|
@PreAuthorize("@ss.hasPermission('system:commonly-used:delete')")
|
||||||
|
public CommonResult<Boolean> batchDelete(@RequestBody List<Long> ids) {
|
||||||
|
commonlyUsedService.batchDelete(ids);
|
||||||
|
return success(true);
|
||||||
|
}
|
||||||
|
|
||||||
@GetMapping("/get")
|
@GetMapping("/get")
|
||||||
@Operation(summary = "获得用户常用应用配置")
|
@Operation(summary = "获得用户常用应用配置")
|
||||||
@Parameter(name = "id", description = "编号", required = true, example = "1024")
|
@Parameter(name = "id", description = "编号", required = true, example = "1024")
|
||||||
@ -84,12 +106,12 @@ public class CommonlyUsedController {
|
|||||||
@PreAuthorize("@ss.hasPermission('system:commonly-used:export')")
|
@PreAuthorize("@ss.hasPermission('system:commonly-used:export')")
|
||||||
@OperateLog(type = EXPORT)
|
@OperateLog(type = EXPORT)
|
||||||
public void exportCommonlyUsedExcel(@Valid CommonlyUsedPageReqVO pageReqVO,
|
public void exportCommonlyUsedExcel(@Valid CommonlyUsedPageReqVO pageReqVO,
|
||||||
HttpServletResponse response) throws IOException {
|
HttpServletResponse response) throws IOException {
|
||||||
pageReqVO.setPageSize(PageParam.PAGE_SIZE_NONE);
|
pageReqVO.setPageSize(PageParam.PAGE_SIZE_NONE);
|
||||||
List<CommonlyUsedDO> list = commonlyUsedService.getCommonlyUsedPage(pageReqVO).getList();
|
List<CommonlyUsedDO> list = commonlyUsedService.getCommonlyUsedPage(pageReqVO).getList();
|
||||||
// 导出 Excel
|
// 导出 Excel
|
||||||
ExcelUtils.write(response, "用户常用应用配置.xls", "数据", CommonlyUsedRespVO.class,
|
ExcelUtils.write(response, "用户常用应用配置.xls", "数据", CommonlyUsedRespVO.class,
|
||||||
BeanUtils.toBean(list, CommonlyUsedRespVO.class));
|
BeanUtils.toBean(list, CommonlyUsedRespVO.class));
|
||||||
}
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
@ -21,9 +21,6 @@ public class CommonlyUsedPageReqVO extends PageParam {
|
|||||||
@Schema(description = "类型 1流程 2菜单", example = "1")
|
@Schema(description = "类型 1流程 2菜单", example = "1")
|
||||||
private Integer type;
|
private Integer type;
|
||||||
|
|
||||||
@Schema(description = "路由地址")
|
|
||||||
private String routing;
|
|
||||||
|
|
||||||
@Schema(description = "菜单id或流程id 根据具体类型来", example = "11898")
|
@Schema(description = "菜单id或流程id 根据具体类型来", example = "11898")
|
||||||
private String objectId;
|
private String objectId;
|
||||||
|
|
||||||
@ -34,4 +31,4 @@ public class CommonlyUsedPageReqVO extends PageParam {
|
|||||||
@DateTimeFormat(pattern = FORMAT_YEAR_MONTH_DAY_HOUR_MINUTE_SECOND)
|
@DateTimeFormat(pattern = FORMAT_YEAR_MONTH_DAY_HOUR_MINUTE_SECOND)
|
||||||
private LocalDateTime[] createTime;
|
private LocalDateTime[] createTime;
|
||||||
|
|
||||||
}
|
}
|
||||||
|
@ -25,10 +25,6 @@ public class CommonlyUsedRespVO {
|
|||||||
@ExcelProperty("类型 1流程 2菜单")
|
@ExcelProperty("类型 1流程 2菜单")
|
||||||
private Integer type;
|
private Integer type;
|
||||||
|
|
||||||
@Schema(description = "路由地址")
|
|
||||||
@ExcelProperty("路由地址")
|
|
||||||
private String routing;
|
|
||||||
|
|
||||||
@Schema(description = "菜单id或流程id 根据具体类型来", example = "11898")
|
@Schema(description = "菜单id或流程id 根据具体类型来", example = "11898")
|
||||||
@ExcelProperty("菜单id或流程id 根据具体类型来")
|
@ExcelProperty("菜单id或流程id 根据具体类型来")
|
||||||
private String objectId;
|
private String objectId;
|
||||||
@ -49,4 +45,7 @@ public class CommonlyUsedRespVO {
|
|||||||
@ExcelProperty("图标")
|
@ExcelProperty("图标")
|
||||||
private String img;
|
private String img;
|
||||||
|
|
||||||
|
@Schema(description = "路由地址")
|
||||||
|
@ExcelProperty("路由地址")
|
||||||
|
private String routing;
|
||||||
}
|
}
|
||||||
|
@ -19,13 +19,10 @@ public class CommonlyUsedSaveReqVO {
|
|||||||
@Schema(description = "类型 1流程 2菜单", example = "1")
|
@Schema(description = "类型 1流程 2菜单", example = "1")
|
||||||
private Integer type;
|
private Integer type;
|
||||||
|
|
||||||
@Schema(description = "路由地址")
|
|
||||||
private String routing;
|
|
||||||
|
|
||||||
@Schema(description = "菜单id或流程id 根据具体类型来", example = "11898")
|
@Schema(description = "菜单id或流程id 根据具体类型来", example = "11898")
|
||||||
private String objectId;
|
private String objectId;
|
||||||
|
|
||||||
@Schema(description = "排序(从小到大)")
|
@Schema(description = "排序(从小到大)")
|
||||||
private Integer sort;
|
private Integer sort;
|
||||||
|
|
||||||
}
|
}
|
||||||
|
@ -1,5 +1,6 @@
|
|||||||
package cn.iocoder.yudao.module.system.controller.admin.commonlyused.vo;
|
package cn.iocoder.yudao.module.system.controller.admin.commonlyused.vo;
|
||||||
|
|
||||||
|
import cn.iocoder.yudao.module.bpm.api.model.vo.BpmModelRpcVO;
|
||||||
import cn.iocoder.yudao.module.system.controller.admin.auth.vo.AuthPermissionInfoRespVO;
|
import cn.iocoder.yudao.module.system.controller.admin.auth.vo.AuthPermissionInfoRespVO;
|
||||||
import io.swagger.v3.oas.annotations.media.Schema;
|
import io.swagger.v3.oas.annotations.media.Schema;
|
||||||
import lombok.Data;
|
import lombok.Data;
|
||||||
@ -15,4 +16,7 @@ public class CommonlyUsedVO {
|
|||||||
@Schema(description = "菜单树形列表")
|
@Schema(description = "菜单树形列表")
|
||||||
private List<AuthPermissionInfoRespVO.MenuVO> menus;
|
private List<AuthPermissionInfoRespVO.MenuVO> menus;
|
||||||
|
|
||||||
|
@Schema(description = "流程列表")
|
||||||
|
private List<BpmModelRpcVO> modelList;
|
||||||
|
|
||||||
}
|
}
|
||||||
|
@ -108,14 +108,12 @@ public class UserController {
|
|||||||
return success(true);
|
return success(true);
|
||||||
}
|
}
|
||||||
@GetMapping("/gpsPosition")
|
@GetMapping("/gpsPosition")
|
||||||
@Operation(summary = "GPS定位")
|
@Operation(summary = "GPS用户全量更新")
|
||||||
public CommonResult<Boolean> gpsPosition() {
|
public CommonResult<Boolean> gpsFullUserUpdate() {
|
||||||
userService.gpsPosition();
|
userService.gpsFullUserUpdate();
|
||||||
return success(true);
|
return success(true);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
@GetMapping("/page")
|
@GetMapping("/page")
|
||||||
@Operation(summary = "获得用户分页列表")
|
@Operation(summary = "获得用户分页列表")
|
||||||
@PreAuthorize("@ss.hasPermission('system:user:list')")
|
@PreAuthorize("@ss.hasPermission('system:user:list')")
|
||||||
|
@ -35,10 +35,7 @@ public class CommonlyUsedDO extends BaseDO {
|
|||||||
* 类型 1流程 2菜单
|
* 类型 1流程 2菜单
|
||||||
*/
|
*/
|
||||||
private Integer type;
|
private Integer type;
|
||||||
/**
|
|
||||||
* 路由地址
|
|
||||||
*/
|
|
||||||
private String routing;
|
|
||||||
/**
|
/**
|
||||||
* 菜单id或流程id 根据具体类型来
|
* 菜单id或流程id 根据具体类型来
|
||||||
*/
|
*/
|
||||||
@ -48,4 +45,4 @@ public class CommonlyUsedDO extends BaseDO {
|
|||||||
*/
|
*/
|
||||||
private Integer sort;
|
private Integer sort;
|
||||||
|
|
||||||
}
|
}
|
||||||
|
@ -21,11 +21,10 @@ public interface CommonlyUsedMapper extends BaseMapperX<CommonlyUsedDO> {
|
|||||||
return selectPage(reqVO, new LambdaQueryWrapperX<CommonlyUsedDO>()
|
return selectPage(reqVO, new LambdaQueryWrapperX<CommonlyUsedDO>()
|
||||||
.eqIfPresent(CommonlyUsedDO::getUserId, reqVO.getUserId())
|
.eqIfPresent(CommonlyUsedDO::getUserId, reqVO.getUserId())
|
||||||
.eqIfPresent(CommonlyUsedDO::getType, reqVO.getType())
|
.eqIfPresent(CommonlyUsedDO::getType, reqVO.getType())
|
||||||
.eqIfPresent(CommonlyUsedDO::getRouting, reqVO.getRouting())
|
|
||||||
.eqIfPresent(CommonlyUsedDO::getObjectId, reqVO.getObjectId())
|
.eqIfPresent(CommonlyUsedDO::getObjectId, reqVO.getObjectId())
|
||||||
.eqIfPresent(CommonlyUsedDO::getSort, reqVO.getSort())
|
.eqIfPresent(CommonlyUsedDO::getSort, reqVO.getSort())
|
||||||
.betweenIfPresent(CommonlyUsedDO::getCreateTime, reqVO.getCreateTime())
|
.betweenIfPresent(CommonlyUsedDO::getCreateTime, reqVO.getCreateTime())
|
||||||
.orderByDesc(CommonlyUsedDO::getId));
|
.orderByDesc(CommonlyUsedDO::getId));
|
||||||
}
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
@ -1,5 +1,6 @@
|
|||||||
package cn.iocoder.yudao.module.system.framework.rpc.config;
|
package cn.iocoder.yudao.module.system.framework.rpc.config;
|
||||||
|
|
||||||
|
import cn.iocoder.yudao.module.bpm.api.model.BpmModelApi;
|
||||||
import cn.iocoder.yudao.module.infra.api.file.FileApi;
|
import cn.iocoder.yudao.module.infra.api.file.FileApi;
|
||||||
import cn.iocoder.yudao.module.infra.api.websocket.WebSocketSenderApi;
|
import cn.iocoder.yudao.module.infra.api.websocket.WebSocketSenderApi;
|
||||||
import cn.iocoder.yudao.module.smartfactory.api.factoryInfo.FactoryInfoApi;
|
import cn.iocoder.yudao.module.smartfactory.api.factoryInfo.FactoryInfoApi;
|
||||||
@ -7,6 +8,6 @@ import org.springframework.cloud.openfeign.EnableFeignClients;
|
|||||||
import org.springframework.context.annotation.Configuration;
|
import org.springframework.context.annotation.Configuration;
|
||||||
|
|
||||||
@Configuration(proxyBeanMethods = false)
|
@Configuration(proxyBeanMethods = false)
|
||||||
@EnableFeignClients(clients = {FileApi.class, WebSocketSenderApi.class, FactoryInfoApi.class})
|
@EnableFeignClients(clients = {FileApi.class, WebSocketSenderApi.class, FactoryInfoApi.class, BpmModelApi.class})
|
||||||
public class RpcConfiguration {
|
public class RpcConfiguration {
|
||||||
}
|
}
|
||||||
|
@ -78,7 +78,7 @@ public class AssetsTypeServiceImpl implements AssetsTypeService {
|
|||||||
@Override
|
@Override
|
||||||
public List<Long> getAssetsTypeIdsByCode(String code) {
|
public List<Long> getAssetsTypeIdsByCode(String code) {
|
||||||
List<AssetsTypeDO> assetsTypeDOS = assetsTypeMapper.selectList(new LambdaQueryWrapper<AssetsTypeDO>()
|
List<AssetsTypeDO> assetsTypeDOS = assetsTypeMapper.selectList(new LambdaQueryWrapper<AssetsTypeDO>()
|
||||||
.eq(AssetsTypeDO::getCode, code));
|
.like(AssetsTypeDO::getCode, code));
|
||||||
if (assetsTypeDOS.isEmpty()) {
|
if (assetsTypeDOS.isEmpty()) {
|
||||||
return Collections.emptyList();
|
return Collections.emptyList();
|
||||||
}
|
}
|
||||||
|
@ -2,7 +2,6 @@ package cn.iocoder.yudao.module.system.service.commonlyused;
|
|||||||
|
|
||||||
import cn.iocoder.yudao.framework.common.pojo.PageResult;
|
import cn.iocoder.yudao.framework.common.pojo.PageResult;
|
||||||
import cn.iocoder.yudao.module.system.controller.admin.commonlyused.vo.CommonlyUsedPageReqVO;
|
import cn.iocoder.yudao.module.system.controller.admin.commonlyused.vo.CommonlyUsedPageReqVO;
|
||||||
import cn.iocoder.yudao.module.system.controller.admin.commonlyused.vo.CommonlyUsedRespVO;
|
|
||||||
import cn.iocoder.yudao.module.system.controller.admin.commonlyused.vo.CommonlyUsedSaveReqVO;
|
import cn.iocoder.yudao.module.system.controller.admin.commonlyused.vo.CommonlyUsedSaveReqVO;
|
||||||
import cn.iocoder.yudao.module.system.controller.admin.commonlyused.vo.CommonlyUsedVO;
|
import cn.iocoder.yudao.module.system.controller.admin.commonlyused.vo.CommonlyUsedVO;
|
||||||
import cn.iocoder.yudao.module.system.dal.dataobject.commonlyused.CommonlyUsedDO;
|
import cn.iocoder.yudao.module.system.dal.dataobject.commonlyused.CommonlyUsedDO;
|
||||||
@ -61,4 +60,25 @@ public interface CommonlyUsedService {
|
|||||||
* @return
|
* @return
|
||||||
*/
|
*/
|
||||||
CommonlyUsedVO getCommonlyUsedList();
|
CommonlyUsedVO getCommonlyUsedList();
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 批量新增
|
||||||
|
*
|
||||||
|
* @param list
|
||||||
|
*/
|
||||||
|
void batchCreate(List<CommonlyUsedSaveReqVO> list);
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 批量更新
|
||||||
|
*
|
||||||
|
* @param list
|
||||||
|
*/
|
||||||
|
void batchUpdate(List<CommonlyUsedSaveReqVO> list);
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 批量删除
|
||||||
|
*
|
||||||
|
* @param ids
|
||||||
|
*/
|
||||||
|
void batchDelete(List<Long> ids);
|
||||||
}
|
}
|
||||||
|
@ -1,10 +1,12 @@
|
|||||||
package cn.iocoder.yudao.module.system.service.commonlyused;
|
package cn.iocoder.yudao.module.system.service.commonlyused;
|
||||||
|
|
||||||
|
import cn.hutool.core.bean.BeanUtil;
|
||||||
import cn.hutool.core.collection.CollectionUtil;
|
import cn.hutool.core.collection.CollectionUtil;
|
||||||
import cn.iocoder.yudao.framework.common.enums.CommonStatusEnum;
|
|
||||||
import cn.iocoder.yudao.framework.common.pojo.PageResult;
|
import cn.iocoder.yudao.framework.common.pojo.PageResult;
|
||||||
import cn.iocoder.yudao.framework.common.util.object.BeanUtils;
|
import cn.iocoder.yudao.framework.common.util.object.BeanUtils;
|
||||||
import cn.iocoder.yudao.framework.security.core.util.SecurityFrameworkUtils;
|
import cn.iocoder.yudao.framework.security.core.util.SecurityFrameworkUtils;
|
||||||
|
import cn.iocoder.yudao.module.bpm.api.model.BpmModelApi;
|
||||||
|
import cn.iocoder.yudao.module.bpm.api.model.vo.BpmModelRpcVO;
|
||||||
import cn.iocoder.yudao.module.system.controller.admin.auth.vo.AuthPermissionInfoRespVO;
|
import cn.iocoder.yudao.module.system.controller.admin.auth.vo.AuthPermissionInfoRespVO;
|
||||||
import cn.iocoder.yudao.module.system.controller.admin.commonlyused.vo.CommonlyUsedPageReqVO;
|
import cn.iocoder.yudao.module.system.controller.admin.commonlyused.vo.CommonlyUsedPageReqVO;
|
||||||
import cn.iocoder.yudao.module.system.controller.admin.commonlyused.vo.CommonlyUsedRespVO;
|
import cn.iocoder.yudao.module.system.controller.admin.commonlyused.vo.CommonlyUsedRespVO;
|
||||||
@ -24,11 +26,8 @@ import javax.annotation.Resource;
|
|||||||
import java.util.ArrayList;
|
import java.util.ArrayList;
|
||||||
import java.util.List;
|
import java.util.List;
|
||||||
import java.util.Map;
|
import java.util.Map;
|
||||||
import java.util.Set;
|
|
||||||
import java.util.stream.Collectors;
|
import java.util.stream.Collectors;
|
||||||
|
|
||||||
import static cn.iocoder.yudao.framework.security.core.util.SecurityFrameworkUtils.getLoginUserId;
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* 用户常用应用配置 Service 实现类
|
* 用户常用应用配置 Service 实现类
|
||||||
*
|
*
|
||||||
@ -44,6 +43,8 @@ public class CommonlyUsedServiceImpl implements CommonlyUsedService {
|
|||||||
private PermissionService permissionService;
|
private PermissionService permissionService;
|
||||||
@Resource
|
@Resource
|
||||||
private MenuService menuService;
|
private MenuService menuService;
|
||||||
|
@Resource
|
||||||
|
private BpmModelApi bpmModelApi;
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public Long createCommonlyUsed(CommonlyUsedSaveReqVO createReqVO) {
|
public Long createCommonlyUsed(CommonlyUsedSaveReqVO createReqVO) {
|
||||||
@ -86,18 +87,11 @@ public class CommonlyUsedServiceImpl implements CommonlyUsedService {
|
|||||||
// -- 搜索我的常用
|
// -- 搜索我的常用
|
||||||
List<CommonlyUsedDO> list = commonlyUsedMapper.selectList(new LambdaQueryWrapper<CommonlyUsedDO>()
|
List<CommonlyUsedDO> list = commonlyUsedMapper.selectList(new LambdaQueryWrapper<CommonlyUsedDO>()
|
||||||
.eq(CommonlyUsedDO::getDeleted, 0).eq(CommonlyUsedDO::getUserId, userId).orderByAsc(CommonlyUsedDO::getSort));
|
.eq(CommonlyUsedDO::getDeleted, 0).eq(CommonlyUsedDO::getUserId, userId).orderByAsc(CommonlyUsedDO::getSort));
|
||||||
Map<Long, CommonlyUsedDO> map = list.stream().collect(Collectors.toMap(CommonlyUsedDO::getId, a -> a));
|
Map<String, List<CommonlyUsedDO>> map = list.stream().collect(Collectors.groupingBy(a -> a.getType() + "_" + a.getObjectId()));
|
||||||
List<CommonlyUsedRespVO> commonlyUsedRespVOS = new ArrayList<>();
|
|
||||||
// -- 获取菜单列表
|
// -- 获取菜单列表
|
||||||
List<MenuDO> menuList = new ArrayList<>();
|
List<MenuDO> menuList = menuService.getAvailableMenuListByRoleId();
|
||||||
Set<Long> roleIds = permissionService.getUserRoleIdListByUserId(getLoginUserId());
|
// -- 获取流程列表
|
||||||
if (CollectionUtil.isNotEmpty(roleIds)) {
|
List<BpmModelRpcVO> modelList = bpmModelApi.getModelList().getCheckedData();
|
||||||
Set<Long> menuIds = permissionService.getRoleMenuListByRoleId(roleIds);
|
|
||||||
if (CollectionUtil.isNotEmpty(menuIds)) {
|
|
||||||
menuList = menuService.getMenuList(menuIds);
|
|
||||||
menuList.removeIf(menu -> !CommonStatusEnum.ENABLE.getStatus().equals(menu.getStatus()));
|
|
||||||
}
|
|
||||||
}
|
|
||||||
List<String> menuIds = new ArrayList<>();
|
List<String> menuIds = new ArrayList<>();
|
||||||
List<String> processIds = new ArrayList<>();
|
List<String> processIds = new ArrayList<>();
|
||||||
if (!list.isEmpty()) {
|
if (!list.isEmpty()) {
|
||||||
@ -110,27 +104,59 @@ public class CommonlyUsedServiceImpl implements CommonlyUsedService {
|
|||||||
if (CollectionUtil.isNotEmpty(myMenuList)) {
|
if (CollectionUtil.isNotEmpty(myMenuList)) {
|
||||||
menuIds = myMenuList.stream().map(CommonlyUsedDO::getObjectId).collect(Collectors.toList());
|
menuIds = myMenuList.stream().map(CommonlyUsedDO::getObjectId).collect(Collectors.toList());
|
||||||
}
|
}
|
||||||
// -- 将菜单列表转树形
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
List<CommonlyUsedRespVO> commonlyUsedRespVOS = new ArrayList<>();
|
||||||
for (MenuDO menuDO : menuList) {
|
for (MenuDO menuDO : menuList) {
|
||||||
menuDO.setSelectedFlag(false);
|
menuDO.setSelectedFlag(false);
|
||||||
if (menuIds.contains(String.valueOf(menuDO.getId()))) {
|
if (menuIds.contains(String.valueOf(menuDO.getId()))) {
|
||||||
menuDO.setSelectedFlag(true);
|
menuDO.setSelectedFlag(true);
|
||||||
CommonlyUsedRespVO commonlyUsedRespVO = BeanUtils.toBean(menuDO, CommonlyUsedRespVO.class);
|
List<CommonlyUsedDO> menus = map.get("2" + "_" + menuDO.getId());
|
||||||
|
CommonlyUsedDO commonlyUsedDO = menus.get(0);
|
||||||
|
CommonlyUsedRespVO commonlyUsedRespVO = BeanUtil.copyProperties(commonlyUsedDO, CommonlyUsedRespVO.class);
|
||||||
commonlyUsedRespVO.setImg(menuDO.getIcon());
|
commonlyUsedRespVO.setImg(menuDO.getIcon());
|
||||||
commonlyUsedRespVO.setName(menuDO.getName());
|
commonlyUsedRespVO.setName(menuDO.getName());
|
||||||
|
commonlyUsedRespVO.setRouting(menuDO.getPath());
|
||||||
commonlyUsedRespVOS.add(commonlyUsedRespVO);
|
commonlyUsedRespVOS.add(commonlyUsedRespVO);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
// -- 获取流程列表
|
|
||||||
|
|
||||||
|
for (BpmModelRpcVO modelRpcVO : modelList) {
|
||||||
|
modelRpcVO.setSelectedFlag(false);
|
||||||
|
if (processIds.contains(String.valueOf(modelRpcVO.getId()))) {
|
||||||
|
modelRpcVO.setSelectedFlag(true);
|
||||||
|
List<CommonlyUsedDO> models = map.get("1" + "_" + modelRpcVO.getId());
|
||||||
|
CommonlyUsedDO commonlyUsedDO = models.get(0);
|
||||||
|
CommonlyUsedRespVO commonlyUsedRespVO = BeanUtils.toBean(commonlyUsedDO, CommonlyUsedRespVO.class);
|
||||||
|
commonlyUsedRespVO.setImg(modelRpcVO.getProcessImg());
|
||||||
|
commonlyUsedRespVO.setName(modelRpcVO.getName());
|
||||||
|
commonlyUsedRespVO.setRouting(modelRpcVO.getFormCustomCreatePath());
|
||||||
|
commonlyUsedRespVOS.add(commonlyUsedRespVO);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
List<AuthPermissionInfoRespVO.MenuVO> menus = AuthConvert.INSTANCE.buildMenuTree(menuList);
|
List<AuthPermissionInfoRespVO.MenuVO> menus = AuthConvert.INSTANCE.buildMenuTree(menuList);
|
||||||
vo.setMenus(menus);
|
vo.setMenus(menus);
|
||||||
vo.setCommonlyUsedRespVOS(commonlyUsedRespVOS);
|
vo.setCommonlyUsedRespVOS(commonlyUsedRespVOS);
|
||||||
|
vo.setModelList(modelList);
|
||||||
|
return vo;
|
||||||
|
}
|
||||||
|
|
||||||
// TODO: 2024/9/5 还差流程的实现
|
@Override
|
||||||
return null;
|
public void batchCreate(List<CommonlyUsedSaveReqVO> list) {
|
||||||
|
List<CommonlyUsedDO> saveList = BeanUtils.toBean(list, CommonlyUsedDO.class);
|
||||||
|
commonlyUsedMapper.insertBatch(saveList);
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public void batchUpdate(List<CommonlyUsedSaveReqVO> list) {
|
||||||
|
List<CommonlyUsedDO> updateList = BeanUtils.toBean(list, CommonlyUsedDO.class);
|
||||||
|
commonlyUsedMapper.updateBatch(updateList);
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public void batchDelete(List<Long> ids) {
|
||||||
|
commonlyUsedMapper.deleteBatchIds(ids);
|
||||||
}
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
@ -104,14 +104,30 @@ public interface DeptService {
|
|||||||
|
|
||||||
/**
|
/**
|
||||||
* 获得 部门树
|
* 获得 部门树
|
||||||
|
*
|
||||||
* @return 部门列表
|
* @return 部门列表
|
||||||
*/
|
*/
|
||||||
List<DeptDO> getDeptTree();
|
List<DeptDO> getDeptTree();
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* 获得指定部门信息
|
* 获得指定部门信息
|
||||||
|
*
|
||||||
* @param factoryId 工厂编号
|
* @param factoryId 工厂编号
|
||||||
* @return 部门信息
|
* @return 部门信息
|
||||||
*/
|
*/
|
||||||
DeptDO getDeptByFactoryId(Long factoryId);
|
DeptDO getDeptByFactoryId(Long factoryId);
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 获取所有工厂部门
|
||||||
|
*
|
||||||
|
* @return
|
||||||
|
*/
|
||||||
|
List<DeptDO> getFactoryDeptList();
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 获取所有工厂部门
|
||||||
|
*
|
||||||
|
* @return
|
||||||
|
*/
|
||||||
|
List<DeptDO> getFactoryDeptList(Long factoryId);
|
||||||
}
|
}
|
||||||
|
@ -10,6 +10,7 @@ import cn.iocoder.yudao.module.system.controller.admin.dept.vo.dept.DeptSaveReqV
|
|||||||
import cn.iocoder.yudao.module.system.dal.dataobject.dept.DeptDO;
|
import cn.iocoder.yudao.module.system.dal.dataobject.dept.DeptDO;
|
||||||
import cn.iocoder.yudao.module.system.dal.mysql.dept.DeptMapper;
|
import cn.iocoder.yudao.module.system.dal.mysql.dept.DeptMapper;
|
||||||
import cn.iocoder.yudao.module.system.dal.redis.RedisKeyConstants;
|
import cn.iocoder.yudao.module.system.dal.redis.RedisKeyConstants;
|
||||||
|
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
|
||||||
import com.google.common.annotations.VisibleForTesting;
|
import com.google.common.annotations.VisibleForTesting;
|
||||||
import lombok.extern.slf4j.Slf4j;
|
import lombok.extern.slf4j.Slf4j;
|
||||||
import org.springframework.cache.annotation.CacheEvict;
|
import org.springframework.cache.annotation.CacheEvict;
|
||||||
@ -284,4 +285,17 @@ public class DeptServiceImpl implements DeptService {
|
|||||||
|
|
||||||
return deptMapper.selectOne(DeptDO::getFactoryId, factoryId);
|
return deptMapper.selectOne(DeptDO::getFactoryId, factoryId);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public List<DeptDO> getFactoryDeptList() {
|
||||||
|
return this.getFactoryDeptList(null);
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public List<DeptDO> getFactoryDeptList(Long factoryId) {
|
||||||
|
return deptMapper.selectList(new LambdaQueryWrapper<DeptDO>()
|
||||||
|
.eq(factoryId != null, DeptDO::getFactoryId, factoryId)
|
||||||
|
.isNotNull(DeptDO::getFactoryId)
|
||||||
|
.eq(DeptDO::getStatus, CommonStatusEnum.ENABLE.getStatus()));
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
@ -9,8 +9,6 @@ import java.util.List;
|
|||||||
|
|
||||||
/**
|
/**
|
||||||
* 菜单 Service 接口
|
* 菜单 Service 接口
|
||||||
*
|
|
||||||
|
|
||||||
*/
|
*/
|
||||||
public interface MenuService {
|
public interface MenuService {
|
||||||
|
|
||||||
@ -84,4 +82,10 @@ public interface MenuService {
|
|||||||
*/
|
*/
|
||||||
List<MenuDO> getMenuList(Collection<Long> ids);
|
List<MenuDO> getMenuList(Collection<Long> ids);
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 通过当前登陆用户的角色,获得可用菜单列表
|
||||||
|
*
|
||||||
|
* @return
|
||||||
|
*/
|
||||||
|
List<MenuDO> getAvailableMenuListByRoleId();
|
||||||
}
|
}
|
||||||
|
@ -1,6 +1,8 @@
|
|||||||
package cn.iocoder.yudao.module.system.service.permission;
|
package cn.iocoder.yudao.module.system.service.permission;
|
||||||
|
|
||||||
import cn.hutool.core.collection.CollUtil;
|
import cn.hutool.core.collection.CollUtil;
|
||||||
|
import cn.hutool.core.collection.CollectionUtil;
|
||||||
|
import cn.iocoder.yudao.framework.common.enums.CommonStatusEnum;
|
||||||
import cn.iocoder.yudao.framework.common.util.object.BeanUtils;
|
import cn.iocoder.yudao.framework.common.util.object.BeanUtils;
|
||||||
import cn.iocoder.yudao.module.system.controller.admin.permission.vo.menu.MenuListReqVO;
|
import cn.iocoder.yudao.module.system.controller.admin.permission.vo.menu.MenuListReqVO;
|
||||||
import cn.iocoder.yudao.module.system.controller.admin.permission.vo.menu.MenuSaveVO;
|
import cn.iocoder.yudao.module.system.controller.admin.permission.vo.menu.MenuSaveVO;
|
||||||
@ -18,18 +20,19 @@ import org.springframework.stereotype.Service;
|
|||||||
import org.springframework.transaction.annotation.Transactional;
|
import org.springframework.transaction.annotation.Transactional;
|
||||||
|
|
||||||
import javax.annotation.Resource;
|
import javax.annotation.Resource;
|
||||||
|
import java.util.ArrayList;
|
||||||
import java.util.Collection;
|
import java.util.Collection;
|
||||||
import java.util.List;
|
import java.util.List;
|
||||||
|
import java.util.Set;
|
||||||
|
|
||||||
import static cn.iocoder.yudao.framework.common.exception.util.ServiceExceptionUtil.exception;
|
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.convertList;
|
||||||
|
import static cn.iocoder.yudao.framework.security.core.util.SecurityFrameworkUtils.getLoginUserId;
|
||||||
import static cn.iocoder.yudao.module.system.dal.dataobject.permission.MenuDO.ID_ROOT;
|
import static cn.iocoder.yudao.module.system.dal.dataobject.permission.MenuDO.ID_ROOT;
|
||||||
import static cn.iocoder.yudao.module.system.enums.ErrorCodeConstants.*;
|
import static cn.iocoder.yudao.module.system.enums.ErrorCodeConstants.*;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* 菜单 Service 实现
|
* 菜单 Service 实现
|
||||||
*
|
|
||||||
|
|
||||||
*/
|
*/
|
||||||
@Service
|
@Service
|
||||||
@Slf4j
|
@Slf4j
|
||||||
@ -133,6 +136,20 @@ public class MenuServiceImpl implements MenuService {
|
|||||||
return menuMapper.selectBatchIds(ids);
|
return menuMapper.selectBatchIds(ids);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public List<MenuDO> getAvailableMenuListByRoleId() {
|
||||||
|
List<MenuDO> menuList = new ArrayList<>();
|
||||||
|
Set<Long> roleIds = permissionService.getUserRoleIdListByUserId(getLoginUserId());
|
||||||
|
if (CollectionUtil.isNotEmpty(roleIds)) {
|
||||||
|
Set<Long> menuIds = permissionService.getRoleMenuListByRoleId(roleIds);
|
||||||
|
if (CollectionUtil.isNotEmpty(menuIds)) {
|
||||||
|
menuList = this.getMenuList(menuIds);
|
||||||
|
menuList.removeIf(menu -> !CommonStatusEnum.ENABLE.getStatus().equals(menu.getStatus()));
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return menuList;
|
||||||
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* 校验父菜单是否合法
|
* 校验父菜单是否合法
|
||||||
* <p>
|
* <p>
|
||||||
|
@ -97,7 +97,7 @@ public interface AdminUserService {
|
|||||||
/**
|
/**
|
||||||
* 修改外勤打卡状态
|
* 修改外勤打卡状态
|
||||||
*
|
*
|
||||||
* @param id 用户编号
|
* @param id 用户编号
|
||||||
* @param fieldworkFlag 状态
|
* @param fieldworkFlag 状态
|
||||||
*/
|
*/
|
||||||
void updateFieldwork(Long id, Integer fieldworkFlag);
|
void updateFieldwork(Long id, Integer fieldworkFlag);
|
||||||
@ -141,7 +141,25 @@ public interface AdminUserService {
|
|||||||
*/
|
*/
|
||||||
PageResult<AdminUserDO> getUserPage(UserPageReqVO reqVO);
|
PageResult<AdminUserDO> getUserPage(UserPageReqVO reqVO);
|
||||||
|
|
||||||
void gpsPosition();
|
/**
|
||||||
|
* gps用户全量更新
|
||||||
|
*/
|
||||||
|
void gpsFullUserUpdate();
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 获取工厂用户列表
|
||||||
|
*
|
||||||
|
* @param factoryId
|
||||||
|
* @return
|
||||||
|
*/
|
||||||
|
List<AdminUserDO> getFactoryUsers(Long factoryId);
|
||||||
|
|
||||||
|
/**
|
||||||
|
* gps用户增量更新
|
||||||
|
*
|
||||||
|
* @param adminUserDO
|
||||||
|
*/
|
||||||
|
void gpsIncrementalSynchronizationOfUsers(AdminUserDO adminUserDO);
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* 获得工厂用户分页列表
|
* 获得工厂用户分页列表
|
||||||
@ -321,6 +339,7 @@ public interface AdminUserService {
|
|||||||
|
|
||||||
/**
|
/**
|
||||||
* 获取指令性质得用户列表
|
* 获取指令性质得用户列表
|
||||||
|
*
|
||||||
* @param userNature 用户性质
|
* @param userNature 用户性质
|
||||||
* @return 用户列表
|
* @return 用户列表
|
||||||
*/
|
*/
|
||||||
|
@ -290,14 +290,32 @@ public class AdminUserServiceImpl implements AdminUserService {
|
|||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public void gpsPosition() {
|
public void gpsFullUserUpdate() {
|
||||||
// TODO: 2024/9/2
|
// 查询出所有带工厂id的部门ids
|
||||||
Set<Long> deptCondition = getDeptCondition(130L);
|
List<DeptDO> deptList = deptService.getFactoryDeptList();
|
||||||
|
List<Long> deptCondition = deptList.stream().map(DeptDO::getId).collect(Collectors.toList());
|
||||||
List<AdminUserDO> adminUserDOS = userMapper.selectList(new LambdaQueryWrapper<AdminUserDO>()
|
List<AdminUserDO> adminUserDOS = userMapper.selectList(new LambdaQueryWrapper<AdminUserDO>()
|
||||||
.in(AdminUserDO::getDeptId, deptCondition));
|
.in(AdminUserDO::getDeptId, deptCondition));
|
||||||
for (AdminUserDO adminUserDO : adminUserDOS) {
|
for (AdminUserDO adminUserDO : adminUserDOS) {
|
||||||
JSONObject object = new JSONObject().set("name", adminUserDO.getNickname()).set("uniqueId", adminUserDO.getMobile());
|
this.gpsIncrementalSynchronizationOfUsers(adminUserDO);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public List<AdminUserDO> getFactoryUsers(Long factoryId) {
|
||||||
|
List<DeptDO> deptList = deptService.getFactoryDeptList(factoryId);
|
||||||
|
List<Long> deptCondition = deptList.stream().map(DeptDO::getId).collect(Collectors.toList());
|
||||||
|
return userMapper.selectList(new LambdaQueryWrapper<AdminUserDO>()
|
||||||
|
.in(AdminUserDO::getDeptId, deptCondition)
|
||||||
|
.eq(AdminUserDO::getUserType, 1)
|
||||||
|
.eq(AdminUserDO::getStatus, 0));
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public void gpsIncrementalSynchronizationOfUsers(AdminUserDO adminUserDO) {
|
||||||
|
try {
|
||||||
|
JSONObject object = new JSONObject().set("name", adminUserDO.getNickname()).set("uniqueId", adminUserDO.getMobile());
|
||||||
// 请求的 URL
|
// 请求的 URL
|
||||||
String url = "http://127.0.0.1:8082/api/devices";
|
String url = "http://127.0.0.1:8082/api/devices";
|
||||||
// 发送 POST 请求
|
// 发送 POST 请求
|
||||||
@ -313,9 +331,9 @@ public class AdminUserServiceImpl implements AdminUserService {
|
|||||||
.body(JSONUtil.toJsonStr(object))
|
.body(JSONUtil.toJsonStr(object))
|
||||||
.timeout(20000) // 设置超时时间
|
.timeout(20000) // 设置超时时间
|
||||||
.execute(); // 执行请求并获取响应
|
.execute(); // 执行请求并获取响应
|
||||||
|
log.info(response.body());
|
||||||
// 打印响应结果
|
} catch (Exception e) {
|
||||||
System.out.println(response.body());
|
log.info("添加工厂用户到GPS系统中失败", e);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -43,6 +43,8 @@ public class FactoryUserServiceImpl implements FactoryUserService{
|
|||||||
|
|
||||||
@Resource
|
@Resource
|
||||||
private AdminUserMapper userMapper;
|
private AdminUserMapper userMapper;
|
||||||
|
@Resource
|
||||||
|
private AdminUserService adminUserService;
|
||||||
|
|
||||||
@Resource
|
@Resource
|
||||||
private PasswordEncoder passwordEncoder;
|
private PasswordEncoder passwordEncoder;
|
||||||
@ -100,7 +102,8 @@ public class FactoryUserServiceImpl implements FactoryUserService{
|
|||||||
usersExtDO.setDeptId(deptDO.getId());
|
usersExtDO.setDeptId(deptDO.getId());
|
||||||
usersExtDO.setAttendanceMachineNos(convertList(attendanceMachineDOS, AttendanceMachineDO::getDeviceNo));
|
usersExtDO.setAttendanceMachineNos(convertList(attendanceMachineDOS, AttendanceMachineDO::getDeviceNo));
|
||||||
usersExtService.createUsers(usersExtDO);
|
usersExtService.createUsers(usersExtDO);
|
||||||
|
// 工厂用户添加到GPS定位系统中
|
||||||
|
adminUserService.gpsIncrementalSynchronizationOfUsers(user);
|
||||||
try {
|
try {
|
||||||
|
|
||||||
for (AttendanceMachineDO machineDO : attendanceMachineDOS) {
|
for (AttendanceMachineDO machineDO : attendanceMachineDOS) {
|
||||||
|
@ -146,8 +146,8 @@ public class FactoryScreenDataController {
|
|||||||
@GetMapping("/getDataOverview")
|
@GetMapping("/getDataOverview")
|
||||||
@Operation(summary = "获取大屏数据总览")
|
@Operation(summary = "获取大屏数据总览")
|
||||||
@PermitAll
|
@PermitAll
|
||||||
public CommonResult<DataOverviewVO> getDataOverview() {
|
public CommonResult<DataOverviewVO> getDataOverview(@RequestParam(required = false) Long factoryId) {
|
||||||
DataOverviewVO data = screenDataService.getDataOverview();
|
DataOverviewVO data = screenDataService.getDataOverview(factoryId);
|
||||||
return success(data);
|
return success(data);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -0,0 +1,20 @@
|
|||||||
|
package cn.iocoder.yudao.module.smartfactory.controller.admin.screendata.factory.vo;
|
||||||
|
|
||||||
|
import io.swagger.v3.oas.annotations.media.Schema;
|
||||||
|
import lombok.Data;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 功能描述
|
||||||
|
*
|
||||||
|
* @author: yj
|
||||||
|
* @date: 2024年03月05日 13:55
|
||||||
|
*/
|
||||||
|
@Data
|
||||||
|
public class AssetsStockVO {
|
||||||
|
@Schema(description = "工厂id")
|
||||||
|
private Long factoryId;
|
||||||
|
@Schema(description = "工厂名称")
|
||||||
|
private String factoryName;
|
||||||
|
@Schema(description = "库存")
|
||||||
|
private Integer stock;
|
||||||
|
}
|
@ -1,8 +1,12 @@
|
|||||||
package cn.iocoder.yudao.module.smartfactory.controller.admin.screendata.factory.vo;
|
package cn.iocoder.yudao.module.smartfactory.controller.admin.screendata.factory.vo;
|
||||||
|
|
||||||
|
import cn.iocoder.yudao.module.smartfactory.dal.dataobject.factoryforklift.FactoryForkliftDO;
|
||||||
|
import cn.iocoder.yudao.module.system.api.user.vo.AdminUserRpcVO;
|
||||||
import io.swagger.v3.oas.annotations.media.Schema;
|
import io.swagger.v3.oas.annotations.media.Schema;
|
||||||
import lombok.Data;
|
import lombok.Data;
|
||||||
|
|
||||||
|
import java.util.List;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* 功能描述
|
* 功能描述
|
||||||
*
|
*
|
||||||
@ -14,20 +18,47 @@ import lombok.Data;
|
|||||||
public class DataOverviewVO {
|
public class DataOverviewVO {
|
||||||
@Schema(description = "员工数量")
|
@Schema(description = "员工数量")
|
||||||
private Integer total;
|
private Integer total;
|
||||||
|
@Schema(description = "男员工")
|
||||||
|
private Integer maleTotal;
|
||||||
|
@Schema(description = "女员工")
|
||||||
|
private Integer femaleTotal;
|
||||||
|
@Schema(description = "员工列表")
|
||||||
|
private List<AdminUserRpcVO> users;
|
||||||
|
|
||||||
|
|
||||||
@Schema(description = "窑炉数量")
|
@Schema(description = "窑炉数量")
|
||||||
private Integer ylNum;
|
private Integer ylNum;
|
||||||
@Schema(description = "叉车台数")
|
@Schema(description = "窑炉信息列表")
|
||||||
private Integer forkliftTotal;
|
private List<FactoryKilnVO> factoryKilnList;
|
||||||
@Schema(description = "叉车运行数量")
|
|
||||||
private Integer truckOnNum;
|
|
||||||
@Schema(description = "叉车未运行数量")
|
|
||||||
private Integer truckOffNum;
|
|
||||||
@Schema(description = "打包线数量")
|
@Schema(description = "打包线数量")
|
||||||
private Integer dbxNum;
|
private Integer dbxNum;
|
||||||
|
@Schema(description = "打包线信息")
|
||||||
|
private List<FactoryPackingLineVO> FactoryPackingLineList;
|
||||||
|
|
||||||
|
|
||||||
|
@Schema(description = "叉车台数")
|
||||||
|
private Integer forkliftTotal;
|
||||||
|
|
||||||
|
@Schema(description = "叉车信息")
|
||||||
|
private List<ForkliftVO> forkliftList;
|
||||||
|
|
||||||
|
@Schema(description = "工厂叉车列表")
|
||||||
|
private List<FactoryForkliftDO> factoryForkliftList;
|
||||||
|
|
||||||
|
|
||||||
@Schema(description = "托盘数")
|
@Schema(description = "托盘数")
|
||||||
private Integer tpNum;
|
private Integer tpNum;
|
||||||
|
@Schema(description = "托盘信息")
|
||||||
|
private List<AssetsStockVO> trayList;
|
||||||
|
|
||||||
|
|
||||||
@Schema(description = "绑带数")
|
@Schema(description = "绑带数")
|
||||||
private Integer bdNum;
|
private Integer bdNum;
|
||||||
|
@Schema(description = "托盘信息")
|
||||||
|
private List<AssetsStockVO> strapsList;
|
||||||
|
|
||||||
|
|
||||||
@Schema(description = "出库")
|
@Schema(description = "出库")
|
||||||
private Integer outTotalNum;
|
private Integer outTotalNum;
|
||||||
@Schema(description = "入库")
|
@Schema(description = "入库")
|
||||||
|
@ -0,0 +1,24 @@
|
|||||||
|
package cn.iocoder.yudao.module.smartfactory.controller.admin.screendata.factory.vo;
|
||||||
|
|
||||||
|
import io.swagger.v3.oas.annotations.media.Schema;
|
||||||
|
import lombok.Data;
|
||||||
|
|
||||||
|
import java.math.BigDecimal;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 功能描述
|
||||||
|
*
|
||||||
|
* @author: yj
|
||||||
|
* @date: 2024年03月05日 13:55
|
||||||
|
*/
|
||||||
|
@Data
|
||||||
|
public class FactoryKilnVO {
|
||||||
|
@Schema(description = "工厂id")
|
||||||
|
private Long factoryId;
|
||||||
|
@Schema(description = "工厂名称")
|
||||||
|
private String factoryName;
|
||||||
|
@Schema(description = "数量")
|
||||||
|
private Integer number;
|
||||||
|
@Schema(description = "产能")
|
||||||
|
private BigDecimal capacity;
|
||||||
|
}
|
@ -0,0 +1,22 @@
|
|||||||
|
package cn.iocoder.yudao.module.smartfactory.controller.admin.screendata.factory.vo;
|
||||||
|
|
||||||
|
import io.swagger.v3.oas.annotations.media.Schema;
|
||||||
|
import lombok.Data;
|
||||||
|
|
||||||
|
import java.math.BigDecimal;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 功能描述
|
||||||
|
*
|
||||||
|
* @author: yj
|
||||||
|
* @date: 2024年03月05日 13:55
|
||||||
|
*/
|
||||||
|
@Data
|
||||||
|
public class FactoryPackingLineVO {
|
||||||
|
@Schema(description = "工厂id")
|
||||||
|
private Long factoryId;
|
||||||
|
@Schema(description = "工厂名称")
|
||||||
|
private String factoryName;
|
||||||
|
@Schema(description = "数量")
|
||||||
|
private Integer number;
|
||||||
|
}
|
@ -0,0 +1,26 @@
|
|||||||
|
package cn.iocoder.yudao.module.smartfactory.controller.admin.screendata.factory.vo;
|
||||||
|
|
||||||
|
import io.swagger.v3.oas.annotations.media.Schema;
|
||||||
|
import lombok.Data;
|
||||||
|
|
||||||
|
import java.math.BigDecimal;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 功能描述
|
||||||
|
*
|
||||||
|
* @author: yj
|
||||||
|
* @date: 2024年03月05日 13:55
|
||||||
|
*/
|
||||||
|
@Data
|
||||||
|
public class ForkliftVO {
|
||||||
|
@Schema(description = "工厂id")
|
||||||
|
private Long factoryId;
|
||||||
|
@Schema(description = "工厂名称")
|
||||||
|
private String factoryName;
|
||||||
|
@Schema(description = "总数量")
|
||||||
|
private Integer totalNum;
|
||||||
|
@Schema(description = "油车数量")
|
||||||
|
private Integer oilNum;
|
||||||
|
@Schema(description = "电车数量")
|
||||||
|
private Integer electricityNum;
|
||||||
|
}
|
@ -1,17 +1,18 @@
|
|||||||
package cn.iocoder.yudao.module.smartfactory.dal.mysql.factoryforklift;
|
package cn.iocoder.yudao.module.smartfactory.dal.mysql.factoryforklift;
|
||||||
|
|
||||||
import java.util.*;
|
|
||||||
|
|
||||||
import cn.iocoder.yudao.framework.common.pojo.PageResult;
|
import cn.iocoder.yudao.framework.common.pojo.PageResult;
|
||||||
import cn.iocoder.yudao.framework.mybatis.core.query.LambdaQueryWrapperX;
|
|
||||||
import cn.iocoder.yudao.framework.mybatis.core.mapper.BaseMapperX;
|
import cn.iocoder.yudao.framework.mybatis.core.mapper.BaseMapperX;
|
||||||
|
import cn.iocoder.yudao.framework.mybatis.core.query.LambdaQueryWrapperX;
|
||||||
|
import cn.iocoder.yudao.module.smartfactory.controller.admin.factoryforklift.vo.FactoryForkliftPageReqVO;
|
||||||
|
import cn.iocoder.yudao.module.smartfactory.controller.admin.factoryforklift.vo.FactoryForkliftRespVO;
|
||||||
import cn.iocoder.yudao.module.smartfactory.dal.dataobject.factoryforklift.FactoryForkliftDO;
|
import cn.iocoder.yudao.module.smartfactory.dal.dataobject.factoryforklift.FactoryForkliftDO;
|
||||||
import com.baomidou.mybatisplus.core.metadata.IPage;
|
import com.baomidou.mybatisplus.core.metadata.IPage;
|
||||||
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
|
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
|
||||||
import org.apache.ibatis.annotations.Mapper;
|
import org.apache.ibatis.annotations.Mapper;
|
||||||
import cn.iocoder.yudao.module.smartfactory.controller.admin.factoryforklift.vo.*;
|
|
||||||
import org.apache.ibatis.annotations.Param;
|
import org.apache.ibatis.annotations.Param;
|
||||||
|
|
||||||
|
import java.util.List;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* 叉车管理 Mapper
|
* 叉车管理 Mapper
|
||||||
*
|
*
|
||||||
@ -43,4 +44,13 @@ public interface FactoryForkliftMapper extends BaseMapperX<FactoryForkliftDO> {
|
|||||||
* @return
|
* @return
|
||||||
*/
|
*/
|
||||||
IPage<FactoryForkliftRespVO> getFactoryForkliftPage(@Param("vo") FactoryForkliftPageReqVO pageReqVO, @Param("page") Page<Object> objectPage);
|
IPage<FactoryForkliftRespVO> getFactoryForkliftPage(@Param("vo") FactoryForkliftPageReqVO pageReqVO, @Param("page") Page<Object> objectPage);
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 通过工厂ids 和 资产类型ids 获取叉车列表
|
||||||
|
*
|
||||||
|
* @param factoryIds
|
||||||
|
* @param typeIds
|
||||||
|
* @return
|
||||||
|
*/
|
||||||
|
List<FactoryForkliftRespVO> getFactoryForkliftByFactoryIdAndTypeIds(@Param("factoryIds") List<Long> factoryIds, @Param("typeIds") List<Long> typeIds);
|
||||||
}
|
}
|
||||||
|
@ -0,0 +1,22 @@
|
|||||||
|
package cn.iocoder.yudao.module.smartfactory.dal.mysql.screendata;
|
||||||
|
|
||||||
|
import cn.iocoder.yudao.module.smartfactory.controller.admin.screendata.factory.vo.AssetsStockVO;
|
||||||
|
import org.apache.ibatis.annotations.Mapper;
|
||||||
|
import org.apache.ibatis.annotations.Param;
|
||||||
|
|
||||||
|
import java.util.List;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @author 艾楷
|
||||||
|
*/
|
||||||
|
@Mapper
|
||||||
|
public interface ScreenDataMapper {
|
||||||
|
/**
|
||||||
|
* 根工厂ids和资产类型id获取工厂资产数量
|
||||||
|
*
|
||||||
|
* @param factoryIds
|
||||||
|
* @param typeIds
|
||||||
|
* @return
|
||||||
|
*/
|
||||||
|
List<AssetsStockVO> getAssetsNumByFactoryIdAndTypeIds(@Param("factoryIds") List<Long> factoryIds, @Param("typeIds") List<Long> typeIds);
|
||||||
|
}
|
@ -1,5 +1,6 @@
|
|||||||
package cn.iocoder.yudao.module.smartfactory.service.factoryinfo;
|
package cn.iocoder.yudao.module.smartfactory.service.factoryinfo;
|
||||||
|
|
||||||
|
import cn.hutool.core.collection.CollectionUtil;
|
||||||
import cn.iocoder.yudao.framework.common.enums.CommonStatusEnum;
|
import cn.iocoder.yudao.framework.common.enums.CommonStatusEnum;
|
||||||
import cn.iocoder.yudao.framework.common.pojo.PageResult;
|
import cn.iocoder.yudao.framework.common.pojo.PageResult;
|
||||||
import cn.iocoder.yudao.framework.common.util.object.BeanUtils;
|
import cn.iocoder.yudao.framework.common.util.object.BeanUtils;
|
||||||
@ -19,6 +20,7 @@ import cn.iocoder.yudao.module.system.api.permission.PermissionApi;
|
|||||||
import cn.iocoder.yudao.module.system.api.permission.dto.DeptDataPermissionRespDTO;
|
import cn.iocoder.yudao.module.system.api.permission.dto.DeptDataPermissionRespDTO;
|
||||||
import cn.iocoder.yudao.module.system.api.user.AdminUserApi;
|
import cn.iocoder.yudao.module.system.api.user.AdminUserApi;
|
||||||
import cn.iocoder.yudao.module.system.api.user.dto.AdminUserRespDTO;
|
import cn.iocoder.yudao.module.system.api.user.dto.AdminUserRespDTO;
|
||||||
|
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
|
||||||
import org.springframework.stereotype.Service;
|
import org.springframework.stereotype.Service;
|
||||||
import org.springframework.validation.annotation.Validated;
|
import org.springframework.validation.annotation.Validated;
|
||||||
|
|
||||||
@ -135,8 +137,8 @@ public class FactoryInfoServiceImpl implements FactoryInfoService {
|
|||||||
|
|
||||||
@Override
|
@Override
|
||||||
public List<FactoryInfoDO> getFactoryList(Collection<Long> ids) {
|
public List<FactoryInfoDO> getFactoryList(Collection<Long> ids) {
|
||||||
|
return factoryInfoMapper.selectList(new LambdaQueryWrapper<FactoryInfoDO>()
|
||||||
return factoryInfoMapper.selectList(FactoryInfoDO::getId, ids);
|
.in(CollectionUtil.isNotEmpty(ids), FactoryInfoDO::getId, ids));
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
@ -229,7 +231,7 @@ public class FactoryInfoServiceImpl implements FactoryInfoService {
|
|||||||
if (deptRespDTO != null) {
|
if (deptRespDTO != null) {
|
||||||
|
|
||||||
factoryIds = convertList(deptRespDTO, DeptRespDTO::getFactoryId);
|
factoryIds = convertList(deptRespDTO, DeptRespDTO::getFactoryId);
|
||||||
}else {
|
} else {
|
||||||
|
|
||||||
DeptRespDTO respDTO = deptApi.getDept(userApi.getUser(getLoginUserId()).getCheckedData().getDeptId()).getCheckedData();
|
DeptRespDTO respDTO = deptApi.getDept(userApi.getUser(getLoginUserId()).getCheckedData().getDeptId()).getCheckedData();
|
||||||
factoryIds = Collections.singletonList(respDTO.getFactoryId());
|
factoryIds = Collections.singletonList(respDTO.getFactoryId());
|
||||||
@ -254,4 +256,4 @@ public class FactoryInfoServiceImpl implements FactoryInfoService {
|
|||||||
FactoryInfoDO updateObj = BeanUtils.toBean(updateReqVO, FactoryInfoDO.class);
|
FactoryInfoDO updateObj = BeanUtils.toBean(updateReqVO, FactoryInfoDO.class);
|
||||||
factoryInfoMapper.updateById(updateObj);
|
factoryInfoMapper.updateById(updateObj);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -1,11 +1,13 @@
|
|||||||
package cn.iocoder.yudao.module.smartfactory.service.factorykiln;
|
package cn.iocoder.yudao.module.smartfactory.service.factorykiln;
|
||||||
|
|
||||||
import java.util.*;
|
|
||||||
import javax.validation.*;
|
|
||||||
import cn.iocoder.yudao.module.smartfactory.controller.admin.factorykiln.vo.*;
|
|
||||||
import cn.iocoder.yudao.module.smartfactory.dal.dataobject.factorykiln.FactoryKilnDO;
|
|
||||||
import cn.iocoder.yudao.framework.common.pojo.PageResult;
|
import cn.iocoder.yudao.framework.common.pojo.PageResult;
|
||||||
import cn.iocoder.yudao.framework.common.pojo.PageParam;
|
import cn.iocoder.yudao.module.smartfactory.controller.admin.factorykiln.vo.FactoryKilnPageReqVO;
|
||||||
|
import cn.iocoder.yudao.module.smartfactory.controller.admin.factorykiln.vo.FactoryKilnRespVO;
|
||||||
|
import cn.iocoder.yudao.module.smartfactory.controller.admin.factorykiln.vo.FactoryKilnSaveReqVO;
|
||||||
|
import cn.iocoder.yudao.module.smartfactory.dal.dataobject.factorykiln.FactoryKilnDO;
|
||||||
|
|
||||||
|
import javax.validation.Valid;
|
||||||
|
import java.util.List;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* 工厂窑炉 Service 接口
|
* 工厂窑炉 Service 接口
|
||||||
@ -52,4 +54,11 @@ public interface FactoryKilnService {
|
|||||||
*/
|
*/
|
||||||
PageResult<FactoryKilnRespVO> getFactoryKilnPage(FactoryKilnPageReqVO pageReqVO);
|
PageResult<FactoryKilnRespVO> getFactoryKilnPage(FactoryKilnPageReqVO pageReqVO);
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 通过工厂id获取窑炉列表
|
||||||
|
*
|
||||||
|
* @param factoryId
|
||||||
|
* @return
|
||||||
|
*/
|
||||||
|
List<FactoryKilnDO> getFactoryKilnByFactoryId(Long factoryId);
|
||||||
}
|
}
|
||||||
|
@ -1,6 +1,5 @@
|
|||||||
package cn.iocoder.yudao.module.smartfactory.service.factorykiln;
|
package cn.iocoder.yudao.module.smartfactory.service.factorykiln;
|
||||||
|
|
||||||
import cn.hutool.core.util.ArrayUtil;
|
|
||||||
import cn.iocoder.yudao.framework.common.pojo.PageResult;
|
import cn.iocoder.yudao.framework.common.pojo.PageResult;
|
||||||
import cn.iocoder.yudao.framework.common.util.object.BeanUtils;
|
import cn.iocoder.yudao.framework.common.util.object.BeanUtils;
|
||||||
import cn.iocoder.yudao.framework.mybatis.core.util.MyBatisUtils;
|
import cn.iocoder.yudao.framework.mybatis.core.util.MyBatisUtils;
|
||||||
@ -9,11 +8,13 @@ import cn.iocoder.yudao.module.smartfactory.controller.admin.factorykiln.vo.Fact
|
|||||||
import cn.iocoder.yudao.module.smartfactory.controller.admin.factorykiln.vo.FactoryKilnSaveReqVO;
|
import cn.iocoder.yudao.module.smartfactory.controller.admin.factorykiln.vo.FactoryKilnSaveReqVO;
|
||||||
import cn.iocoder.yudao.module.smartfactory.dal.dataobject.factorykiln.FactoryKilnDO;
|
import cn.iocoder.yudao.module.smartfactory.dal.dataobject.factorykiln.FactoryKilnDO;
|
||||||
import cn.iocoder.yudao.module.smartfactory.dal.mysql.factorykiln.FactoryKilnMapper;
|
import cn.iocoder.yudao.module.smartfactory.dal.mysql.factorykiln.FactoryKilnMapper;
|
||||||
|
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
|
||||||
import com.baomidou.mybatisplus.core.metadata.IPage;
|
import com.baomidou.mybatisplus.core.metadata.IPage;
|
||||||
import org.springframework.stereotype.Service;
|
import org.springframework.stereotype.Service;
|
||||||
import org.springframework.validation.annotation.Validated;
|
import org.springframework.validation.annotation.Validated;
|
||||||
|
|
||||||
import javax.annotation.Resource;
|
import javax.annotation.Resource;
|
||||||
|
import java.util.List;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* 工厂窑炉 Service 实现类
|
* 工厂窑炉 Service 实现类
|
||||||
@ -56,8 +57,13 @@ public class FactoryKilnServiceImpl implements FactoryKilnService {
|
|||||||
|
|
||||||
@Override
|
@Override
|
||||||
public PageResult<FactoryKilnRespVO> getFactoryKilnPage(FactoryKilnPageReqVO pageReqVO) {
|
public PageResult<FactoryKilnRespVO> getFactoryKilnPage(FactoryKilnPageReqVO pageReqVO) {
|
||||||
IPage<FactoryKilnRespVO> pageResult = factoryKilnMapper.getFactoryKilnPage(pageReqVO,MyBatisUtils.buildPage(pageReqVO));
|
IPage<FactoryKilnRespVO> pageResult = factoryKilnMapper.getFactoryKilnPage(pageReqVO, MyBatisUtils.buildPage(pageReqVO));
|
||||||
return new PageResult<>(pageResult.getRecords(), pageResult.getTotal());
|
return new PageResult<>(pageResult.getRecords(), pageResult.getTotal());
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public List<FactoryKilnDO> getFactoryKilnByFactoryId(Long factoryId) {
|
||||||
|
return factoryKilnMapper.selectList(new LambdaQueryWrapper<FactoryKilnDO>().eq(factoryId != null, FactoryKilnDO::getFactoryId, factoryId));
|
||||||
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
@ -1,11 +1,13 @@
|
|||||||
package cn.iocoder.yudao.module.smartfactory.service.factorypackingline;
|
package cn.iocoder.yudao.module.smartfactory.service.factorypackingline;
|
||||||
|
|
||||||
import java.util.*;
|
|
||||||
import javax.validation.*;
|
|
||||||
import cn.iocoder.yudao.module.smartfactory.controller.admin.factorypackingline.vo.*;
|
|
||||||
import cn.iocoder.yudao.module.smartfactory.dal.dataobject.factorypackingline.FactoryPackingLineDO;
|
|
||||||
import cn.iocoder.yudao.framework.common.pojo.PageResult;
|
import cn.iocoder.yudao.framework.common.pojo.PageResult;
|
||||||
import cn.iocoder.yudao.framework.common.pojo.PageParam;
|
import cn.iocoder.yudao.module.smartfactory.controller.admin.factorypackingline.vo.FactoryPackingLinePageReqVO;
|
||||||
|
import cn.iocoder.yudao.module.smartfactory.controller.admin.factorypackingline.vo.FactoryPackingLineRespVO;
|
||||||
|
import cn.iocoder.yudao.module.smartfactory.controller.admin.factorypackingline.vo.FactoryPackingLineSaveReqVO;
|
||||||
|
import cn.iocoder.yudao.module.smartfactory.dal.dataobject.factorypackingline.FactoryPackingLineDO;
|
||||||
|
|
||||||
|
import javax.validation.Valid;
|
||||||
|
import java.util.List;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* 打包线配置 Service 接口
|
* 打包线配置 Service 接口
|
||||||
@ -52,4 +54,11 @@ public interface FactoryPackingLineService {
|
|||||||
*/
|
*/
|
||||||
PageResult<FactoryPackingLineRespVO> getFactoryPackingLinePage(FactoryPackingLinePageReqVO pageReqVO);
|
PageResult<FactoryPackingLineRespVO> getFactoryPackingLinePage(FactoryPackingLinePageReqVO pageReqVO);
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 通过工厂ids获取打包线列表
|
||||||
|
*
|
||||||
|
* @param factoryIds
|
||||||
|
* @return
|
||||||
|
*/
|
||||||
|
List<FactoryPackingLineDO> getFactoryPackingLineByFactoryId(List<Long> factoryIds);
|
||||||
}
|
}
|
||||||
|
@ -1,19 +1,21 @@
|
|||||||
package cn.iocoder.yudao.module.smartfactory.service.factorypackingline;
|
package cn.iocoder.yudao.module.smartfactory.service.factorypackingline;
|
||||||
|
|
||||||
|
import cn.hutool.core.collection.CollectionUtil;
|
||||||
import cn.iocoder.yudao.framework.common.pojo.PageResult;
|
import cn.iocoder.yudao.framework.common.pojo.PageResult;
|
||||||
import cn.iocoder.yudao.framework.common.util.object.BeanUtils;
|
import cn.iocoder.yudao.framework.common.util.object.BeanUtils;
|
||||||
import cn.iocoder.yudao.framework.mybatis.core.util.MyBatisUtils;
|
import cn.iocoder.yudao.framework.mybatis.core.util.MyBatisUtils;
|
||||||
import cn.iocoder.yudao.module.smartfactory.controller.admin.factorykiln.vo.FactoryKilnRespVO;
|
|
||||||
import cn.iocoder.yudao.module.smartfactory.controller.admin.factorypackingline.vo.FactoryPackingLinePageReqVO;
|
import cn.iocoder.yudao.module.smartfactory.controller.admin.factorypackingline.vo.FactoryPackingLinePageReqVO;
|
||||||
import cn.iocoder.yudao.module.smartfactory.controller.admin.factorypackingline.vo.FactoryPackingLineRespVO;
|
import cn.iocoder.yudao.module.smartfactory.controller.admin.factorypackingline.vo.FactoryPackingLineRespVO;
|
||||||
import cn.iocoder.yudao.module.smartfactory.controller.admin.factorypackingline.vo.FactoryPackingLineSaveReqVO;
|
import cn.iocoder.yudao.module.smartfactory.controller.admin.factorypackingline.vo.FactoryPackingLineSaveReqVO;
|
||||||
import cn.iocoder.yudao.module.smartfactory.dal.dataobject.factorypackingline.FactoryPackingLineDO;
|
import cn.iocoder.yudao.module.smartfactory.dal.dataobject.factorypackingline.FactoryPackingLineDO;
|
||||||
import cn.iocoder.yudao.module.smartfactory.dal.mysql.factorypackingline.FactoryPackingLineMapper;
|
import cn.iocoder.yudao.module.smartfactory.dal.mysql.factorypackingline.FactoryPackingLineMapper;
|
||||||
|
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
|
||||||
import com.baomidou.mybatisplus.core.metadata.IPage;
|
import com.baomidou.mybatisplus.core.metadata.IPage;
|
||||||
import org.springframework.stereotype.Service;
|
import org.springframework.stereotype.Service;
|
||||||
import org.springframework.validation.annotation.Validated;
|
import org.springframework.validation.annotation.Validated;
|
||||||
|
|
||||||
import javax.annotation.Resource;
|
import javax.annotation.Resource;
|
||||||
|
import java.util.List;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* 打包线配置 Service 实现类
|
* 打包线配置 Service 实现类
|
||||||
@ -61,4 +63,10 @@ public class FactoryPackingLineServiceImpl implements FactoryPackingLineService
|
|||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public List<FactoryPackingLineDO> getFactoryPackingLineByFactoryId(List<Long> factoryIds) {
|
||||||
|
return factoryPackingLineMapper.selectList(new LambdaQueryWrapper<FactoryPackingLineDO>()
|
||||||
|
.in(CollectionUtil.isNotEmpty(factoryIds), FactoryPackingLineDO::getFactoryId, factoryIds));
|
||||||
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
@ -92,7 +92,7 @@ public interface ScreenDataService {
|
|||||||
*
|
*
|
||||||
* @return
|
* @return
|
||||||
*/
|
*/
|
||||||
DataOverviewVO getDataOverview();
|
DataOverviewVO getDataOverview(Long factoryId);
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* 获取大屏出入库
|
* 获取大屏出入库
|
||||||
|
@ -1,36 +1,49 @@
|
|||||||
package cn.iocoder.yudao.module.smartfactory.service.screendata;
|
package cn.iocoder.yudao.module.smartfactory.service.screendata;
|
||||||
|
|
||||||
import cn.hutool.core.collection.CollUtil;
|
import cn.hutool.core.collection.CollUtil;
|
||||||
|
import cn.hutool.core.collection.CollectionUtil;
|
||||||
import cn.hutool.core.date.DateUtil;
|
import cn.hutool.core.date.DateUtil;
|
||||||
import cn.hutool.core.date.Month;
|
import cn.hutool.core.date.Month;
|
||||||
import cn.hutool.core.util.StrUtil;
|
import cn.hutool.core.util.StrUtil;
|
||||||
import cn.hutool.json.JSONObject;
|
import cn.hutool.json.JSONObject;
|
||||||
import cn.hutool.json.JSONUtil;
|
import cn.hutool.json.JSONUtil;
|
||||||
|
import cn.iocoder.yudao.framework.common.enums.AssetsTypeCodeEnum;
|
||||||
import cn.iocoder.yudao.framework.common.util.object.BeanUtils;
|
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.query.LambdaQueryWrapperX;
|
||||||
import cn.iocoder.yudao.module.smartfactory.controller.admin.factorydata.vo.FactoryDataTotalVO;
|
import cn.iocoder.yudao.module.smartfactory.controller.admin.factorydata.vo.FactoryDataTotalVO;
|
||||||
|
import cn.iocoder.yudao.module.smartfactory.controller.admin.factoryforklift.vo.FactoryForkliftRespVO;
|
||||||
import cn.iocoder.yudao.module.smartfactory.controller.admin.screendata.factory.vo.*;
|
import cn.iocoder.yudao.module.smartfactory.controller.admin.screendata.factory.vo.*;
|
||||||
import cn.iocoder.yudao.module.smartfactory.dal.dataobject.device.cameradevice.CameraDeviceDO;
|
import cn.iocoder.yudao.module.smartfactory.dal.dataobject.device.cameradevice.CameraDeviceDO;
|
||||||
import cn.iocoder.yudao.module.smartfactory.dal.dataobject.factorydata.FactoryDataDO;
|
import cn.iocoder.yudao.module.smartfactory.dal.dataobject.factorydata.FactoryDataDO;
|
||||||
import cn.iocoder.yudao.module.smartfactory.dal.dataobject.factorydataoverview.FactoryDataOverviewDO;
|
import cn.iocoder.yudao.module.smartfactory.dal.dataobject.factorydataoverview.FactoryDataOverviewDO;
|
||||||
|
import cn.iocoder.yudao.module.smartfactory.dal.dataobject.factoryforklift.FactoryForkliftDO;
|
||||||
import cn.iocoder.yudao.module.smartfactory.dal.dataobject.factoryinfo.FactoryInfoDO;
|
import cn.iocoder.yudao.module.smartfactory.dal.dataobject.factoryinfo.FactoryInfoDO;
|
||||||
|
import cn.iocoder.yudao.module.smartfactory.dal.dataobject.factorykiln.FactoryKilnDO;
|
||||||
|
import cn.iocoder.yudao.module.smartfactory.dal.dataobject.factorypackingline.FactoryPackingLineDO;
|
||||||
import cn.iocoder.yudao.module.smartfactory.dal.dataobject.packagedata.PackageDataDO;
|
import cn.iocoder.yudao.module.smartfactory.dal.dataobject.packagedata.PackageDataDO;
|
||||||
import cn.iocoder.yudao.module.smartfactory.dal.dataobject.screenfactoryextra.ScreenFactoryExtraDO;
|
|
||||||
import cn.iocoder.yudao.module.smartfactory.dal.mysql.factorydataoverview.FactoryDataOverviewMapper;
|
import cn.iocoder.yudao.module.smartfactory.dal.mysql.factorydataoverview.FactoryDataOverviewMapper;
|
||||||
|
import cn.iocoder.yudao.module.smartfactory.dal.mysql.factoryforklift.FactoryForkliftMapper;
|
||||||
|
import cn.iocoder.yudao.module.smartfactory.dal.mysql.screendata.ScreenDataMapper;
|
||||||
import cn.iocoder.yudao.module.smartfactory.framework.util.HttpUtil;
|
import cn.iocoder.yudao.module.smartfactory.framework.util.HttpUtil;
|
||||||
import cn.iocoder.yudao.module.smartfactory.service.device.cameradevice.CameraDeviceService;
|
import cn.iocoder.yudao.module.smartfactory.service.device.cameradevice.CameraDeviceService;
|
||||||
import cn.iocoder.yudao.module.smartfactory.service.factorydata.FactoryDataService;
|
import cn.iocoder.yudao.module.smartfactory.service.factorydata.FactoryDataService;
|
||||||
import cn.iocoder.yudao.module.smartfactory.service.factorydataoverview.FactoryDataOverviewService;
|
|
||||||
import cn.iocoder.yudao.module.smartfactory.service.factoryinfo.FactoryInfoService;
|
import cn.iocoder.yudao.module.smartfactory.service.factoryinfo.FactoryInfoService;
|
||||||
|
import cn.iocoder.yudao.module.smartfactory.service.factorykiln.FactoryKilnService;
|
||||||
|
import cn.iocoder.yudao.module.smartfactory.service.factorypackingline.FactoryPackingLineService;
|
||||||
import cn.iocoder.yudao.module.smartfactory.service.hik.HikService;
|
import cn.iocoder.yudao.module.smartfactory.service.hik.HikService;
|
||||||
import cn.iocoder.yudao.module.smartfactory.service.packagedata.PackageDataService;
|
import cn.iocoder.yudao.module.smartfactory.service.packagedata.PackageDataService;
|
||||||
import cn.iocoder.yudao.module.smartfactory.service.screenfactoryextra.ScreenFactoryExtraService;
|
import cn.iocoder.yudao.module.smartfactory.service.screenfactoryextra.ScreenFactoryExtraService;
|
||||||
import cn.iocoder.yudao.module.smartfactory.service.staff.StaffService;
|
import cn.iocoder.yudao.module.smartfactory.service.staff.StaffService;
|
||||||
|
import cn.iocoder.yudao.module.system.api.assets.AssetsTypeApi;
|
||||||
|
import cn.iocoder.yudao.module.system.api.user.AdminUserApi;
|
||||||
|
import cn.iocoder.yudao.module.system.api.user.vo.AdminUserRpcVO;
|
||||||
|
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
|
||||||
import jodd.util.StringUtil;
|
import jodd.util.StringUtil;
|
||||||
import org.springframework.stereotype.Service;
|
import org.springframework.stereotype.Service;
|
||||||
import org.springframework.validation.annotation.Validated;
|
import org.springframework.validation.annotation.Validated;
|
||||||
|
|
||||||
import javax.annotation.Resource;
|
import javax.annotation.Resource;
|
||||||
|
import java.math.BigDecimal;
|
||||||
import java.time.DayOfWeek;
|
import java.time.DayOfWeek;
|
||||||
import java.time.LocalDate;
|
import java.time.LocalDate;
|
||||||
import java.time.temporal.TemporalAdjusters;
|
import java.time.temporal.TemporalAdjusters;
|
||||||
@ -57,8 +70,6 @@ public class ScreenDataServiceImpl implements ScreenDataService {
|
|||||||
@Resource
|
@Resource
|
||||||
private FactoryDataService factoryDataService;
|
private FactoryDataService factoryDataService;
|
||||||
@Resource
|
@Resource
|
||||||
private FactoryDataOverviewService factoryDataOverviewService;
|
|
||||||
@Resource
|
|
||||||
private FactoryDataOverviewMapper factoryDataOverviewMapper;
|
private FactoryDataOverviewMapper factoryDataOverviewMapper;
|
||||||
|
|
||||||
@Resource
|
@Resource
|
||||||
@ -67,6 +78,19 @@ public class ScreenDataServiceImpl implements ScreenDataService {
|
|||||||
@Resource
|
@Resource
|
||||||
private HikService hikService;
|
private HikService hikService;
|
||||||
|
|
||||||
|
@Resource
|
||||||
|
private AdminUserApi adminUserApi;
|
||||||
|
@Resource
|
||||||
|
private FactoryKilnService factoryKilnService;
|
||||||
|
@Resource
|
||||||
|
private FactoryPackingLineService factoryPackingLineService;
|
||||||
|
@Resource
|
||||||
|
private AssetsTypeApi assetsTypeApi;
|
||||||
|
@Resource
|
||||||
|
private FactoryForkliftMapper factoryForkliftMapper;
|
||||||
|
@Resource
|
||||||
|
private ScreenDataMapper screenDataMapper;
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public List<ProvincesDataRespVO> getProvincesData(String code) {
|
public List<ProvincesDataRespVO> getProvincesData(String code) {
|
||||||
return factoryInfoService.getProvincesData(code);
|
return factoryInfoService.getProvincesData(code);
|
||||||
@ -257,20 +281,123 @@ public class ScreenDataServiceImpl implements ScreenDataService {
|
|||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public DataOverviewVO getDataOverview() {
|
public DataOverviewVO getDataOverview(Long factoryId) {
|
||||||
DataOverviewVO vo = new DataOverviewVO();
|
DataOverviewVO vo = new DataOverviewVO();
|
||||||
List<ScreenFactoryExtraDO> extras = screenFactoryExtraService.list();
|
// List<ScreenFactoryExtraDO> extras = screenFactoryExtraService.list();
|
||||||
List<FactoryDataOverviewDO> list = factoryDataOverviewService.list();
|
// List<FactoryDataOverviewDO> list = factoryDataOverviewService.list();
|
||||||
|
//获取工厂列表
|
||||||
|
|
||||||
vo.setTotal(list.stream().mapToInt(FactoryDataOverviewDO::getWorkerNum).sum());
|
List<FactoryInfoDO> factoryList = factoryInfoService.getFactoryList(Collections.singletonList(factoryId));
|
||||||
vo.setYlNum(extras.stream().mapToInt(ScreenFactoryExtraDO::getYlNum).sum());
|
Map<Long, FactoryInfoDO> factoryMap = factoryList.stream().collect(Collectors.toMap(FactoryInfoDO::getId, v -> v));
|
||||||
vo.setForkliftTotal(list.stream().mapToInt(FactoryDataOverviewDO::getTruckTotalNum).sum());
|
// ---------------------------------- 用户 ----------------------------------
|
||||||
vo.setTruckOnNum(extras.stream().mapToInt(ScreenFactoryExtraDO::getTruckOnNum).sum());
|
// -- 通过工厂id获取部门列表 -> 再通过部门列表获取用户列表
|
||||||
vo.setTruckOffNum(extras.stream().mapToInt(ScreenFactoryExtraDO::getTruckOffNum).sum());
|
List<AdminUserRpcVO> users = adminUserApi.getFactoryUsers(factoryId).getData();
|
||||||
vo.setDbxNum(list.stream().mapToInt(FactoryDataOverviewDO::getDbxNum).sum());
|
vo.setTotal(users.size());
|
||||||
|
int femaleTotal = (int) users.stream().filter(a -> a.getSex() == 2).count();
|
||||||
|
vo.setFemaleTotal(femaleTotal);
|
||||||
|
vo.setMaleTotal(users.size() - femaleTotal);
|
||||||
|
vo.setUsers(users);
|
||||||
|
// ---------------------------------- 窑炉 ----------------------------------
|
||||||
|
List<FactoryKilnDO> factoryKilnDOS = factoryKilnService.getFactoryKilnByFactoryId(factoryId);
|
||||||
|
vo.setYlNum(factoryKilnDOS.size());
|
||||||
|
Map<Long, List<FactoryKilnDO>> factoryKilnMap = factoryKilnDOS.stream().collect(Collectors.groupingBy(FactoryKilnDO::getFactoryId));
|
||||||
|
List<FactoryKilnVO> factoryKilnList = new ArrayList<>();
|
||||||
|
for (Map.Entry<Long, List<FactoryKilnDO>> entry : factoryKilnMap.entrySet()) {
|
||||||
|
FactoryKilnVO factoryKilnVO = new FactoryKilnVO();
|
||||||
|
factoryKilnVO.setFactoryId(entry.getKey());
|
||||||
|
factoryKilnVO.setFactoryName(factoryMap.get(entry.getKey()) == null ? "未分配到工厂部门" : factoryMap.get(entry.getKey()).getName());
|
||||||
|
factoryKilnVO.setNumber(entry.getValue().size());
|
||||||
|
BigDecimal totalCapacity = entry.getValue().stream()
|
||||||
|
.filter(f -> f.getCapacity() != null)
|
||||||
|
.map(FactoryKilnDO::getCapacity)
|
||||||
|
.reduce(BigDecimal.ZERO, BigDecimal::add);
|
||||||
|
factoryKilnVO.setCapacity(totalCapacity);
|
||||||
|
factoryKilnList.add(factoryKilnVO);
|
||||||
|
}
|
||||||
|
vo.setFactoryKilnList(factoryKilnList);
|
||||||
|
// ---------------------------------- 打包线 ----------------------------------
|
||||||
|
List<FactoryPackingLineDO> factoryPackingLineDOS = factoryPackingLineService.getFactoryPackingLineByFactoryId(Collections.singletonList(factoryId));
|
||||||
|
Map<Long, List<FactoryPackingLineDO>> factoryPackingLineMap = factoryPackingLineDOS.stream().collect(Collectors.groupingBy(FactoryPackingLineDO::getFactoryId));
|
||||||
|
vo.setDbxNum(factoryPackingLineDOS.size());
|
||||||
|
List<FactoryPackingLineVO> FactoryPackingLineList = new ArrayList<>();
|
||||||
|
for (Map.Entry<Long, List<FactoryPackingLineDO>> entry : factoryPackingLineMap.entrySet()) {
|
||||||
|
FactoryPackingLineVO factoryPackingLineVO = new FactoryPackingLineVO();
|
||||||
|
factoryPackingLineVO.setFactoryId(entry.getKey());
|
||||||
|
factoryPackingLineVO.setFactoryName(factoryMap.get(entry.getKey()).getName());
|
||||||
|
factoryPackingLineVO.setNumber(entry.getValue().size());
|
||||||
|
FactoryPackingLineList.add(factoryPackingLineVO);
|
||||||
|
}
|
||||||
|
vo.setFactoryPackingLineList(FactoryPackingLineList);
|
||||||
|
|
||||||
|
// ---------------------------------- 叉车 ----------------------------------
|
||||||
|
List<ForkliftVO> forkliftList = new ArrayList<>();
|
||||||
|
List<Long> forkliftOilTypeIds = assetsTypeApi.getAssetsTypeIdsByCode(AssetsTypeCodeEnum.FORKLIFT_OIL).getData();
|
||||||
|
List<Long> forkliftElectricityTypeIds = assetsTypeApi.getAssetsTypeIdsByCode(AssetsTypeCodeEnum.FORKLIFT_ELECTRICITY).getData();
|
||||||
|
List<FactoryForkliftRespVO> factoryForkliftOil = factoryForkliftMapper.getFactoryForkliftByFactoryIdAndTypeIds(Collections.singletonList(factoryId), forkliftOilTypeIds);
|
||||||
|
List<FactoryForkliftRespVO> forkliftElectricity = factoryForkliftMapper.getFactoryForkliftByFactoryIdAndTypeIds(Collections.singletonList(factoryId), forkliftElectricityTypeIds);
|
||||||
|
vo.setForkliftTotal(factoryForkliftOil.size() + forkliftElectricity.size());
|
||||||
|
|
||||||
|
// -- 插入未分配数量
|
||||||
|
List<FactoryForkliftRespVO> notAllocatedFactoryForkliftOil = factoryForkliftOil.stream().filter(a -> a.getFactoryId() == null).collect(Collectors.toList());
|
||||||
|
List<FactoryForkliftRespVO> notAllocatedForkliftElectricity = forkliftElectricity.stream().filter(a -> a.getFactoryId() == null).collect(Collectors.toList());
|
||||||
|
if (CollectionUtil.isNotEmpty(notAllocatedFactoryForkliftOil) || CollectionUtil.isNotEmpty(notAllocatedForkliftElectricity)) {
|
||||||
|
forkliftList.add(new ForkliftVO().setFactoryName("未分配")
|
||||||
|
.setTotalNum(notAllocatedFactoryForkliftOil.size() + notAllocatedForkliftElectricity.size())
|
||||||
|
.setOilNum(notAllocatedFactoryForkliftOil.size())
|
||||||
|
.setElectricityNum(notAllocatedForkliftElectricity.size()));
|
||||||
|
}
|
||||||
|
List<FactoryForkliftRespVO> allocatedFactoryForkliftOil = factoryForkliftOil.stream().filter(a -> a.getFactoryId() != null).collect(Collectors.toList());
|
||||||
|
List<FactoryForkliftRespVO> allocatedForkliftElectricity = forkliftElectricity.stream().filter(a -> a.getFactoryId() != null).collect(Collectors.toList());
|
||||||
|
Map<Long, List<FactoryForkliftRespVO>> allocatedFactoryForkliftOilMap = allocatedFactoryForkliftOil.stream().collect(Collectors.groupingBy(FactoryForkliftRespVO::getFactoryId));
|
||||||
|
Map<Long, List<FactoryForkliftRespVO>> allocatedForkliftElectricityMap = allocatedForkliftElectricity.stream().collect(Collectors.groupingBy(FactoryForkliftRespVO::getFactoryId));
|
||||||
|
|
||||||
|
|
||||||
|
List<Long> allocatedFactoryForkliftOilFactoryIdIds = allocatedFactoryForkliftOil.stream().map(FactoryForkliftRespVO::getFactoryId).collect(Collectors.toList());
|
||||||
|
List<Long> allocatedForkliftElectricityFactoryIdIds = allocatedForkliftElectricity.stream().map(FactoryForkliftRespVO::getFactoryId).collect(Collectors.toList());
|
||||||
|
Set<Long> mergeFactoryIdIds = CollectionUtil.unionDistinct(allocatedFactoryForkliftOilFactoryIdIds, allocatedForkliftElectricityFactoryIdIds);
|
||||||
|
|
||||||
|
for (Long mergeFactoryIdId : mergeFactoryIdIds) {
|
||||||
|
FactoryInfoDO factoryInfoDO = factoryMap.get(mergeFactoryIdId);
|
||||||
|
if (factoryInfoDO != null) {
|
||||||
|
List<FactoryForkliftRespVO> allocatedFactoryForkliftOilItems = allocatedFactoryForkliftOilMap.get(mergeFactoryIdId);
|
||||||
|
List<FactoryForkliftRespVO> allocatedForkliftElectricityItems = allocatedForkliftElectricityMap.get(mergeFactoryIdId);
|
||||||
|
Integer oilNum = CollectionUtil.isNotEmpty(allocatedFactoryForkliftOilItems) ? allocatedFactoryForkliftOilItems.size() : 0;
|
||||||
|
Integer electricityNum = CollectionUtil.isNotEmpty(allocatedForkliftElectricityItems) ? allocatedForkliftElectricityItems.size() : 0;
|
||||||
|
forkliftList.add(new ForkliftVO().setFactoryName(factoryInfoDO.getName())
|
||||||
|
.setTotalNum(oilNum + electricityNum)
|
||||||
|
.setOilNum(oilNum)
|
||||||
|
.setElectricityNum(electricityNum));
|
||||||
|
}
|
||||||
|
}
|
||||||
|
vo.setForkliftList(forkliftList);
|
||||||
|
// -- 工厂叉车列表
|
||||||
|
List<FactoryForkliftDO> factoryForkliftDOS = new ArrayList<>();
|
||||||
|
if (factoryId != null) {
|
||||||
|
factoryForkliftDOS = factoryForkliftMapper.selectList(new LambdaQueryWrapper<FactoryForkliftDO>().eq(FactoryForkliftDO::getFactoryId, factoryId));
|
||||||
|
}
|
||||||
|
vo.setFactoryForkliftList(factoryForkliftDOS);
|
||||||
|
|
||||||
|
// ---------------------------------- 托盘 ----------------------------------
|
||||||
|
List<Long> trayAssetsTypeIds = assetsTypeApi.getAssetsTypeIdsByCode(AssetsTypeCodeEnum.TRAY).getData();
|
||||||
|
List<AssetsStockVO> trayList = screenDataMapper.getAssetsNumByFactoryIdAndTypeIds(Collections.singletonList(factoryId), trayAssetsTypeIds);
|
||||||
|
vo.setTpNum(trayList.stream().mapToInt(AssetsStockVO::getStock).sum());
|
||||||
|
vo.setTrayList(trayList);
|
||||||
|
|
||||||
|
|
||||||
|
// ---------------------------------- 托盘 ----------------------------------
|
||||||
|
List<Long> strapsAssetsTypeIds = assetsTypeApi.getAssetsTypeIdsByCode(AssetsTypeCodeEnum.STRAPS).getData();
|
||||||
|
List<AssetsStockVO> strapsList = screenDataMapper.getAssetsNumByFactoryIdAndTypeIds(Collections.singletonList(factoryId), strapsAssetsTypeIds);
|
||||||
|
vo.setBdNum(strapsList.stream().mapToInt(AssetsStockVO::getStock).sum());
|
||||||
|
vo.setStrapsList(strapsList);
|
||||||
|
|
||||||
|
//
|
||||||
|
// vo.setForkliftTotal(list.stream().mapToInt(FactoryDataOverviewDO::getTruckTotalNum).sum());
|
||||||
|
// vo.setTruckOnNum(extras.stream().mapToInt(ScreenFactoryExtraDO::getTruckOnNum).sum());
|
||||||
|
// vo.setTruckOffNum(extras.stream().mapToInt(ScreenFactoryExtraDO::getTruckOffNum).sum());
|
||||||
|
//
|
||||||
|
// vo.setTpNum(list.stream().mapToInt(FactoryDataOverviewDO::getTpNum).sum());
|
||||||
|
// vo.setBdNum(list.stream().mapToInt(FactoryDataOverviewDO::getBdNum).sum());
|
||||||
|
|
||||||
vo.setTpNum(list.stream().mapToInt(FactoryDataOverviewDO::getTpNum).sum());
|
|
||||||
vo.setBdNum(list.stream().mapToInt(FactoryDataOverviewDO::getBdNum).sum());
|
|
||||||
|
|
||||||
List<FactoryDataDO> factoryDataDOS = factoryDataService.getTodayInboundAndOutboundOverview(null);
|
List<FactoryDataDO> factoryDataDOS = factoryDataService.getTodayInboundAndOutboundOverview(null);
|
||||||
Integer outTotalNum = factoryDataDOS.stream().filter(a -> a.getDataType() == 1).mapToInt(FactoryDataDO::getTotalNum).sum();
|
Integer outTotalNum = factoryDataDOS.stream().filter(a -> a.getDataType() == 1).mapToInt(FactoryDataDO::getTotalNum).sum();
|
||||||
|
@ -54,4 +54,33 @@
|
|||||||
</if>
|
</if>
|
||||||
</where>
|
</where>
|
||||||
</select>
|
</select>
|
||||||
|
<select id="getFactoryForkliftByFactoryIdAndTypeIds"
|
||||||
|
resultType="cn.iocoder.yudao.module.smartfactory.controller.admin.factoryforklift.vo.FactoryForkliftRespVO">
|
||||||
|
SELECT
|
||||||
|
a.id,
|
||||||
|
a.type_id,
|
||||||
|
a.assets_no AS assetsNo,
|
||||||
|
d.id AS factoryId,
|
||||||
|
d.NAME AS factoryName,
|
||||||
|
c.id AS forkliftId,
|
||||||
|
c.*
|
||||||
|
FROM
|
||||||
|
zc_assets AS a
|
||||||
|
LEFT JOIN sf_factory_forklift AS c ON a.assets_no = c.assets_no
|
||||||
|
LEFT JOIN sf_factory_info AS d ON c.factory_id = d.id
|
||||||
|
<where>
|
||||||
|
<if test="factoryIds != null and factoryIds.size() > 0">
|
||||||
|
and c.factory_id in
|
||||||
|
<foreach collection="factoryIds" open="(" item="factoryId" separator="," close=")">
|
||||||
|
#{factoryId}
|
||||||
|
</foreach>
|
||||||
|
</if>
|
||||||
|
<if test="typeIds != null and typeIds.size() > 0">
|
||||||
|
and a.type_id in
|
||||||
|
<foreach collection="typeIds" open="(" item="typeId" separator="," close=")">
|
||||||
|
#{typeId}
|
||||||
|
</foreach>
|
||||||
|
</if>
|
||||||
|
</where>
|
||||||
|
</select>
|
||||||
</mapper>
|
</mapper>
|
||||||
|
@ -0,0 +1,40 @@
|
|||||||
|
<?xml version="1.0" encoding="UTF-8"?>
|
||||||
|
<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
|
||||||
|
<mapper namespace="cn.iocoder.yudao.module.smartfactory.dal.mysql.screendata.ScreenDataMapper">
|
||||||
|
|
||||||
|
<!--
|
||||||
|
一般情况下,尽可能使用 Mapper 进行 CRUD 增删改查即可。
|
||||||
|
无法满足的场景,例如说多表关联查询,才使用 XML 编写 SQL。
|
||||||
|
代码生成器暂时只生成 Mapper XML 文件本身,更多推荐 MybatisX 快速开发插件来生成查询。
|
||||||
|
文档可见:https://www.iocoder.cn/MyBatis/x-plugins/
|
||||||
|
-->
|
||||||
|
|
||||||
|
<select id="getAssetsNumByFactoryIdAndTypeIds"
|
||||||
|
resultType="cn.iocoder.yudao.module.smartfactory.controller.admin.screendata.factory.vo.AssetsStockVO">
|
||||||
|
SELECT dept.factory_id AS factoryId,
|
||||||
|
ifnull(d.name,'未分配') as factoryName,
|
||||||
|
sum(b.stock) as stock
|
||||||
|
FROM zc_assets AS a
|
||||||
|
LEFT JOIN zc_dept_assets AS b ON a.id = b.assets_id
|
||||||
|
LEFT JOIN system_dept AS dept ON dept.id = b.dept_id
|
||||||
|
LEFT JOIN sf_factory_forklift AS c ON a.assets_no = c.assets_no
|
||||||
|
LEFT JOIN sf_factory_info AS d ON dept.factory_id = d.id
|
||||||
|
<where>
|
||||||
|
b.deleted = 0
|
||||||
|
and b.stock > 0
|
||||||
|
<if test="factoryIds != null and factoryIds.size() > 0">
|
||||||
|
and d.id in
|
||||||
|
<foreach collection="factoryIds" open="(" item="factoryId" separator="," close=")">
|
||||||
|
#{factoryId}
|
||||||
|
</foreach>
|
||||||
|
</if>
|
||||||
|
<if test="typeIds != null and typeIds.size() > 0">
|
||||||
|
and a.type_id in
|
||||||
|
<foreach collection="typeIds" open="(" item="typeId" separator="," close=")">
|
||||||
|
#{typeId}
|
||||||
|
</foreach>
|
||||||
|
</if>
|
||||||
|
</where>
|
||||||
|
GROUP BY dept.factory_id
|
||||||
|
</select>
|
||||||
|
</mapper>
|
Loading…
Reference in New Issue
Block a user