From ef7f59639b711be0e5d2a6d99dc0ca4008a0c28f Mon Sep 17 00:00:00 2001 From: songguoqiang Date: Mon, 13 Nov 2023 08:00:30 +0800 Subject: [PATCH] =?UTF-8?q?=E6=96=B0=E5=88=9B=E5=BB=BA=E6=9F=A5=E8=AF=A2?= =?UTF-8?q?=E6=89=80=E6=9C=89=E4=BB=BB=E5=8A=A1=E4=B8=89=E5=B1=82=E7=BB=93?= =?UTF-8?q?=E6=9E=84=E4=BB=A5=E5=8F=8A=E6=96=B0=E5=A2=9E=E8=8E=B7=E5=8F=96?= =?UTF-8?q?=E6=9D=83=E9=99=90API?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../system/api/permission/PermissionApi.java | 7 + .../dto/PermissionIdentificationRespVO.java | 72 ++++ .../api/permission/PermissionApiImpl.java | 47 ++ .../controller/allJob/AllJobController.java | 35 ++ .../controller/allJob/vo/AllJobRespVO.java | 17 + .../wms/service/allJob/AllJobService.java | 20 + .../wms/service/allJob/AllJobServiceImpl.java | 400 ++++++++++++++++++ 7 files changed, 598 insertions(+) create mode 100644 win-module-system/win-module-system-api/src/main/java/com/win/module/system/api/permission/dto/PermissionIdentificationRespVO.java create mode 100644 win-module-wms/win-module-wms-biz/src/main/java/com/win/module/wms/controller/allJob/AllJobController.java create mode 100644 win-module-wms/win-module-wms-biz/src/main/java/com/win/module/wms/controller/allJob/vo/AllJobRespVO.java create mode 100644 win-module-wms/win-module-wms-biz/src/main/java/com/win/module/wms/service/allJob/AllJobService.java create mode 100644 win-module-wms/win-module-wms-biz/src/main/java/com/win/module/wms/service/allJob/AllJobServiceImpl.java diff --git a/win-module-system/win-module-system-api/src/main/java/com/win/module/system/api/permission/PermissionApi.java b/win-module-system/win-module-system-api/src/main/java/com/win/module/system/api/permission/PermissionApi.java index 39331dd6..ef7f17e9 100644 --- a/win-module-system/win-module-system-api/src/main/java/com/win/module/system/api/permission/PermissionApi.java +++ b/win-module-system/win-module-system-api/src/main/java/com/win/module/system/api/permission/PermissionApi.java @@ -1,6 +1,7 @@ package com.win.module.system.api.permission; import com.win.module.system.api.permission.dto.DeptDataPermissionRespDTO; +import com.win.module.system.api.permission.dto.PermissionIdentificationRespVO; import java.util.Collection; import java.util.Set; @@ -46,4 +47,10 @@ public interface PermissionApi { */ DeptDataPermissionRespDTO getDeptDataPermission(Long userId); + /** + * 根据用户id获取按钮权限标识符用于APP根据权限访问所有任务数据 + * @return + */ + Object getPermissionIdentifications(); + } diff --git a/win-module-system/win-module-system-api/src/main/java/com/win/module/system/api/permission/dto/PermissionIdentificationRespVO.java b/win-module-system/win-module-system-api/src/main/java/com/win/module/system/api/permission/dto/PermissionIdentificationRespVO.java new file mode 100644 index 00000000..d15dd36f --- /dev/null +++ b/win-module-system/win-module-system-api/src/main/java/com/win/module/system/api/permission/dto/PermissionIdentificationRespVO.java @@ -0,0 +1,72 @@ +package com.win.module.system.api.permission.dto; + +import lombok.AllArgsConstructor; +import lombok.Builder; +import lombok.Data; +import lombok.NoArgsConstructor; + +import java.util.List; +import java.util.Set; + +@Data +@NoArgsConstructor +@AllArgsConstructor +@Builder +public class PermissionIdentificationRespVO { + + private UserVO user; + + private Set roles; + + private Set permissions; + + private List menus; + + @Data + @NoArgsConstructor + @AllArgsConstructor + @Builder + public static class UserVO { + + private Long id; + + private String nickname; + + private String avatar; + + } + + @Data + @NoArgsConstructor + @AllArgsConstructor + @Builder + public static class MenuVO { + + private Long id; + + private Long parentId; + + private String name; + + private String path; + + private String component; + + private String componentName; + + private String icon; + + private Boolean visible; + + private Boolean keepAlive; + + private Boolean alwaysShow; + + /** + * 子路由 + */ + private List children; + + } + +} diff --git a/win-module-system/win-module-system-biz/src/main/java/com/win/module/system/api/permission/PermissionApiImpl.java b/win-module-system/win-module-system-biz/src/main/java/com/win/module/system/api/permission/PermissionApiImpl.java index a7433c7c..08182f6b 100644 --- a/win-module-system/win-module-system-biz/src/main/java/com/win/module/system/api/permission/PermissionApiImpl.java +++ b/win-module-system/win-module-system-biz/src/main/java/com/win/module/system/api/permission/PermissionApiImpl.java @@ -1,13 +1,28 @@ package com.win.module.system.api.permission; +import com.win.framework.common.enums.CommonStatusEnum; import com.win.module.system.api.permission.dto.DeptDataPermissionRespDTO; +import com.win.module.system.api.permission.dto.PermissionIdentificationRespVO; +import com.win.module.system.convert.auth.AuthConvert; +import com.win.module.system.dal.dataobject.permission.MenuDO; +import com.win.module.system.dal.dataobject.permission.RoleDO; +import com.win.module.system.dal.dataobject.user.AdminUserDO; +import com.win.module.system.service.auth.AdminAuthService; +import com.win.module.system.service.permission.MenuService; import com.win.module.system.service.permission.PermissionService; +import com.win.module.system.service.permission.RoleService; +import com.win.module.system.service.user.AdminUserService; import org.springframework.stereotype.Service; import javax.annotation.Resource; import java.util.Collection; +import java.util.List; import java.util.Set; +import static com.win.framework.common.pojo.CommonResult.success; +import static com.win.framework.common.util.collection.CollectionUtils.convertSet; +import static com.win.framework.security.core.util.SecurityFrameworkUtils.getLoginUserId; + /** * 权限 API 实现类 * @@ -19,6 +34,16 @@ public class PermissionApiImpl implements PermissionApi { @Resource private PermissionService permissionService; + @Resource + private AdminAuthService authService; + @Resource + private AdminUserService userService; + @Resource + private RoleService roleService; + @Resource + private MenuService menuService; + + @Override public Set getUserRoleIdListByRoleIds(Collection roleIds) { return permissionService.getUserRoleIdListByRoleId(roleIds); @@ -39,4 +64,26 @@ public class PermissionApiImpl implements PermissionApi { return permissionService.getDeptDataPermission(userId); } + @Override + public Object getPermissionIdentifications() { + // 1.1 获得用户信息 + AdminUserDO user = userService.getUser(getLoginUserId()); + if (user == null) { + return null; + } + + // 1.2 获得角色列表 + Set roleIds = permissionService.getUserRoleIdListByUserId(getLoginUserId()); + List roles = roleService.getRoleList(roleIds); + roles.removeIf(role -> !CommonStatusEnum.ENABLE.getStatus().equals(role.getStatus())); // 移除禁用的角色 + + // 1.3 获得菜单列表 + Set menuIds = permissionService.getRoleMenuListByRoleId(convertSet(roles, RoleDO::getId)); + List menuList = menuService.getMenuList(menuIds); + menuList.removeIf(menu -> !CommonStatusEnum.ENABLE.getStatus().equals(menu.getStatus())); // 移除禁用的菜单 + + // 2. 拼接结果返回 + return AuthConvert.INSTANCE.convert(user, roles, menuList); + } + } diff --git a/win-module-wms/win-module-wms-biz/src/main/java/com/win/module/wms/controller/allJob/AllJobController.java b/win-module-wms/win-module-wms-biz/src/main/java/com/win/module/wms/controller/allJob/AllJobController.java new file mode 100644 index 00000000..e4eaff4a --- /dev/null +++ b/win-module-wms/win-module-wms-biz/src/main/java/com/win/module/wms/controller/allJob/AllJobController.java @@ -0,0 +1,35 @@ +package com.win.module.wms.controller.allJob; + +import com.win.framework.common.pojo.CommonResult; +import com.win.module.wms.controller.allJob.vo.AllJobRespVO; +import com.win.module.wms.service.allJob.AllJobService; +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 java.util.List; +import java.util.Map; +import static com.win.framework.common.pojo.CommonResult.success; + +@Tag(name = "管理后台 - PDA根据用户权限操作所有任务模块") +@RestController +@RequestMapping("/wms/all-job") +@Validated +public class AllJobController { + + @Resource + private AllJobService allJobService; + + + @PostMapping("/list") + @Operation(summary = "PDA根据用户权限操作所有任务模块数量") + @Parameter(name = "ids", description = "编号列表", required = true, example = "1024,2048") + @PreAuthorize("@ss.hasPermission('wms:inspect-job-main:query')") + public CommonResult>> getAllJobCountList(@RequestBody AllJobRespVO allJobRespVO) { + List> list = allJobService.getAllJobCountList(allJobRespVO); + return success(list); + } +} diff --git a/win-module-wms/win-module-wms-biz/src/main/java/com/win/module/wms/controller/allJob/vo/AllJobRespVO.java b/win-module-wms/win-module-wms-biz/src/main/java/com/win/module/wms/controller/allJob/vo/AllJobRespVO.java new file mode 100644 index 00000000..8cac8196 --- /dev/null +++ b/win-module-wms/win-module-wms-biz/src/main/java/com/win/module/wms/controller/allJob/vo/AllJobRespVO.java @@ -0,0 +1,17 @@ +package com.win.module.wms.controller.allJob.vo; + + +import io.swagger.v3.oas.annotations.media.Schema; +import lombok.Data; +import lombok.ToString; + +import java.util.List; + +@Schema(description = "管理后台 - 查询全部任务 Response VO") +@Data +@ToString(callSuper = true) +public class AllJobRespVO{ + @Schema(description = "任务状态数组") + private List types; + +} diff --git a/win-module-wms/win-module-wms-biz/src/main/java/com/win/module/wms/service/allJob/AllJobService.java b/win-module-wms/win-module-wms-biz/src/main/java/com/win/module/wms/service/allJob/AllJobService.java new file mode 100644 index 00000000..a82eaa7c --- /dev/null +++ b/win-module-wms/win-module-wms-biz/src/main/java/com/win/module/wms/service/allJob/AllJobService.java @@ -0,0 +1,20 @@ +package com.win.module.wms.service.allJob; + +import com.win.module.wms.controller.allJob.vo.AllJobRespVO; +import com.win.module.wms.dal.dataobject.inspectJob.InspectJobMainDO; + +import java.util.List; +import java.util.Map; + +/** + * 检验任务主 Service 接口 + * + * @author 超级管理员 + */ +public interface AllJobService { + + + List> getAllJobCountList(AllJobRespVO allJobRespVO); + + +} diff --git a/win-module-wms/win-module-wms-biz/src/main/java/com/win/module/wms/service/allJob/AllJobServiceImpl.java b/win-module-wms/win-module-wms-biz/src/main/java/com/win/module/wms/service/allJob/AllJobServiceImpl.java new file mode 100644 index 00000000..145b8068 --- /dev/null +++ b/win-module-wms/win-module-wms-biz/src/main/java/com/win/module/wms/service/allJob/AllJobServiceImpl.java @@ -0,0 +1,400 @@ +package com.win.module.wms.service.allJob; + +import cn.hutool.json.JSONArray; +import cn.hutool.json.JSONObject; +import cn.hutool.json.JSONUtil; +import com.win.module.system.api.permission.PermissionApi; +import com.win.module.system.api.user.AdminUserApi; +import com.win.module.wms.controller.allJob.vo.AllJobRespVO; +import com.win.module.wms.dal.dataobject.inspectJob.InspectJobMainDO; +import com.win.module.wms.dal.mysql.inspectJob.InspectJobMainMapper; +import com.win.module.wms.service.countJob.CountJobMainService; +import com.win.module.wms.service.customerreturnJob.CustomerreturnJobMainService; +import com.win.module.wms.service.deliverJob.DeliverJobMainService; +import com.win.module.wms.service.inspectJob.InspectJobDetailService; +import com.win.module.wms.service.inspectJob.InspectJobMainService; +import com.win.module.wms.service.inventorymoveJob.InventorymoveJobMainService; +import com.win.module.wms.service.issueJob.IssueJobMainService; +import com.win.module.wms.service.pickJob.PickJobMainService; +import com.win.module.wms.service.productdismantleJob.ProductdismantleJobMainService; +import com.win.module.wms.service.productionreceiptJob.ProductionreceiptJobMainService; +import com.win.module.wms.service.productionreturnJob.ProductionreturnJobMainService; +import com.win.module.wms.service.productputawayJob.ProductputawayJobMainService; +import com.win.module.wms.service.productreceiptJob.ProductreceiptJobMainService; +import com.win.module.wms.service.purchasereceiptJob.PurchasereceiptJobMainService; +import com.win.module.wms.service.purchasereturnJob.PurchasereturnJobMainService; +import com.win.module.wms.service.putawayJob.PutawayJobMainService; +import com.win.module.wms.service.repleinshJob.RepleinshJobMainService; +import com.win.module.wms.service.scrapJob.ScrapJobMainService; +import com.win.module.wms.service.transferissueJob.TransferissueJobMainService; +import com.win.module.wms.service.transferreceiptJob.TransferreceiptJobMainService; +import com.win.module.wms.service.unplannedissueJob.UnplannedissueJobMainService; +import com.win.module.wms.service.unplannedreceiptJob.UnplannedreceiptJobMainService; +import org.springframework.stereotype.Service; +import org.springframework.validation.annotation.Validated; + +import javax.annotation.Resource; +import java.util.ArrayList; +import java.util.HashMap; +import java.util.List; +import java.util.Map; + + +/** + * 检验任务主 Service 实现类 + * + * @author 超级管理员 + */ +@Service +@Validated +public class AllJobServiceImpl implements AllJobService { + + @Resource + private InspectJobMainMapper inspectJobMainMapper; + + @Resource + private AdminUserApi userApi; + + @Resource + private PermissionApi permissionApi; + + @Resource + private PurchasereceiptJobMainService purchasereceiptJobMainService; + + @Resource + private PurchasereturnJobMainService purchasereturnJobMainService; + + @Resource + private PutawayJobMainService putawayJobMainService; + + @Resource + private ProductputawayJobMainService productputawayJobMainService; + + @Resource + private RepleinshJobMainService repleinshJobMainService; + + @Resource + private PickJobMainService pickJobMainService; + + @Resource + private IssueJobMainService issueJobMainService; + + @Resource + private ProductionreceiptJobMainService productionreceiptJobMainService; + + @Resource + private ProductionreturnJobMainService productionreturnJobMainService; + + @Resource + private ProductreceiptJobMainService productreceiptJobMainService; + + @Resource + private ProductdismantleJobMainService productdismantleJobMainService; + + @Resource + private DeliverJobMainService deliverJobMainService; + + @Resource + private CustomerreturnJobMainService customerreturnJobMainService; + + @Resource + private InventorymoveJobMainService inventorymoveJobMainService; + + @Resource + private TransferissueJobMainService transferissueJobMainService; + + @Resource + private TransferreceiptJobMainService transferreceiptJobMainService; + + @Resource + private UnplannedissueJobMainService unplannedissueJobMainService; + + @Resource + private UnplannedreceiptJobMainService unplannedreceiptJobMainService; + + @Resource + private ScrapJobMainService scrapJobMainService; + + @Resource + private CountJobMainService countJobMainService; + + @Resource + private InspectJobMainService inspectJobMainService; + + @Override + public List> getAllJobCountList(AllJobRespVO allJobRespVO) { + List> list = new ArrayList<>(); + Object permissionIdentifications = permissionApi.getPermissionIdentifications(); + if (permissionIdentifications != null) { + JSONObject entries = JSONUtil.parseObj(permissionIdentifications); + JSONArray permissions = JSONUtil.parseArray(entries.get("permissions")); + String val = permissions.toString(); + if (val.contains("wms:purchasereceipt-job-main:query")) {//采购收货权限标识1 + Map type1 = purchasereceiptJobMainService.getCountByStatus(allJobRespVO.getTypes()); + list.add(type1); + } else { + HashMap type1 = new HashMap<>(); + type1.put("type1", 0); + list.add(type1); + + } + + if (val.contains("wms:purchasereturn-job-main:query")) {//采购退货任务权限标识2 + Map type2 = purchasereturnJobMainService.getCountByStatus(allJobRespVO.getTypes()); + list.add(type2); + } else { + HashMap type2 = new HashMap<>(); + type2.put("type2", 0); + list.add(type2); + } + + if (val.contains("wms:putaway-job-main:query")) {//原料上架任务3 + Map type3 = putawayJobMainService.getCountByStatus(allJobRespVO.getTypes()); + list.add(type3); + } else { + HashMap type3 = new HashMap<>(); + type3.put("type3", 0); + list.add(type3); + } + + + if (val.contains("wms:productputaway-job-main:query")) {//制品上架任务4 + Map type4 = productputawayJobMainService.getCountByStatus(allJobRespVO.getTypes()); + list.add(type4); + } else { + HashMap type4 = new HashMap<>(); + type4.put("type4", 0); + list.add(type4); + } + + + if (val.contains("wms:repleinsh-job-main:query")) {//补料任务5 + Map type5 = repleinshJobMainService.getCountByStatus(allJobRespVO.getTypes()); + list.add(type5); + } else { + HashMap type5 = new HashMap<>(); + type5.put("type5", 0); + list.add(type5); + } + + + if (val.contains("wms:pick-job-main:query")) {//拣料任务6 + Map type6 = pickJobMainService.getCountByStatus(allJobRespVO.getTypes()); + list.add(type6); + } else { + HashMap type6 = new HashMap<>(); + type6.put("type6", 0); + list.add(type6); + } + + if (val.contains("wms:issue-job-main:query")) {//发料任务7 + Map type7 = issueJobMainService.getCountByStatus(allJobRespVO.getTypes()); + list.add(type7); + } else { + HashMap type7 = new HashMap<>(); + type7.put("type7", 0); + list.add(type7); + } + + + if (val.contains("wms:productionreceipt-job-main:query")) {//生产收料任务8 + Map type8 = productionreceiptJobMainService.getCountByStatus(allJobRespVO.getTypes()); + list.add(type8); + } else { + HashMap type8 = new HashMap<>(); + type8.put("type8", 0); + list.add(type8); + } + + if (val.contains("wms:productionreturn-job-main:query")) {//生产退料任务9 + Map type9 = productionreturnJobMainService.getCountByStatus(allJobRespVO.getTypes()); + list.add(type9); + } else { + HashMap type9 = new HashMap<>(); + type9.put("type9", 0); + list.add(type9); + } + + if (val.contains("wms:productreceipt-job-main:query")) {//制品收货任务10 + Map type10 = productreceiptJobMainService.getCountByStatus(allJobRespVO.getTypes()); + list.add(type10); + } else { + HashMap type10 = new HashMap<>(); + type10.put("type10", 0); + list.add(type10); + } + + if (val.contains("wms:productdismantle-job-main:query")) {//制品拆解任务11 + Map type11 = productdismantleJobMainService.getCountByStatus(allJobRespVO.getTypes()); + list.add(type11); + } else { + HashMap type11 = new HashMap<>(); + type11.put("type11", 0); + list.add(type11); + } + + + if (val.contains("wms:deliver-job-main:query")) {//发货任务12 + Map type12 = deliverJobMainService.getCountByStatus(allJobRespVO.getTypes()); + list.add(type12); + } else { + HashMap type12 = new HashMap<>(); + type12.put("type12", 0); + list.add(type12); + } + + if (val.contains("wms:customerreturn-job-main:query")) {//客户退货任务13 + Map type13 = customerreturnJobMainService.getCountByStatus(allJobRespVO.getTypes()); + list.add(type13); + } else { + HashMap type13 = new HashMap<>(); + type13.put("type13", 0); + list.add(type13); + } + + + if (val.contains("wms:inventorymove-job-main:query")) {//库存转移任务14 + Map type14 = inventorymoveJobMainService.getCountByStatus(allJobRespVO.getTypes()); + list.add(type14); + } else { + HashMap type14 = new HashMap<>(); + type14.put("type14", 0); + list.add(type14); + } + + if (val.contains("wms:transferissue-job-main:query")) {//调拨出库任务15 + Map type15 = transferissueJobMainService.getCountByStatus(allJobRespVO.getTypes()); + list.add(type15); + } else { + HashMap type15 = new HashMap<>(); + type15.put("type15", 0); + list.add(type15); + + } + + + if (val.contains("wms:transferreceipt-job-main:query")) {//调拨入库任务16 + Map type16 = transferreceiptJobMainService.getCountByStatus(allJobRespVO.getTypes()); + list.add(type16); + } else { + HashMap type16 = new HashMap<>(); + type16.put("type16", 0); + list.add(type16); + } + + if (val.contains("wms:unplannedissue-job-main:query")) {//计划出库任务17 + Map type17 = unplannedissueJobMainService.getCountByStatus(allJobRespVO.getTypes()); + list.add(type17); + } else { + HashMap type17 = new HashMap<>(); + type17.put("type17", 0); + list.add(type17); + } + + + if (val.contains("wms:unplannedreceipt-job-main:query")) {//计划入库任务18 + Map type18 = unplannedreceiptJobMainService.getCountByStatus(allJobRespVO.getTypes()); + list.add(type18); + } else { + HashMap type18 = new HashMap<>(); + type18.put("type18", 0); + list.add(type18); + } + + + if (val.contains("wms:scrap-job-main:query")) {//报废出库任务19 + Map type19 = scrapJobMainService.getCountByStatus(allJobRespVO.getTypes()); + list.add(type19); + } else { + HashMap type19 = new HashMap<>(); + type19.put("type19", 0); + list.add(type19); + } + + + if (val.contains("wms:count-job-main:query")) {//盘点任务20 + Map type20 = countJobMainService.getCountByStatus(allJobRespVO.getTypes()); + list.add(type20); + } else { + HashMap type20 = new HashMap<>(); + type20.put("type20", 0); + list.add(type20); + } + + if (val.contains("wms:inspect-job-main:query")) {//检验任务21 + Map type21 = inspectJobMainService.getCountByStatus(allJobRespVO.getTypes()); + list.add(type21); + } else { + HashMap type21 = new HashMap<>(); + type21.put("type21", 0); + list.add(type21); + } + + }else { + HashMap type1 = new HashMap<>(); + type1.put("type1", 0); + list.add(type1); + HashMap type2 = new HashMap<>(); + type2.put("type2", 0); + list.add(type2); + HashMap type3 = new HashMap<>(); + type3.put("type3", 0); + list.add(type3); + HashMap type4 = new HashMap<>(); + type4.put("type4", 0); + list.add(type4); + HashMap type5 = new HashMap<>(); + type5.put("type5", 0); + list.add(type5); + HashMap type6 = new HashMap<>(); + type6.put("type6", 0); + list.add(type6); + HashMap type7 = new HashMap<>(); + type7.put("type7", 0); + list.add(type7); + HashMap type8 = new HashMap<>(); + type8.put("type8", 0); + list.add(type8); + HashMap type9 = new HashMap<>(); + type9.put("type9", 0); + list.add(type9); + HashMap type10 = new HashMap<>(); + type10.put("type10", 0); + list.add(type10); + HashMap type11 = new HashMap<>(); + type11.put("type11", 0); + list.add(type11); + HashMap type12 = new HashMap<>(); + type12.put("type12", 0); + list.add(type12); + HashMap type13 = new HashMap<>(); + type13.put("type13", 0); + list.add(type13); + HashMap type14 = new HashMap<>(); + type14.put("type14", 0); + list.add(type14); + HashMap type15 = new HashMap<>(); + type15.put("type15", 0); + list.add(type15); + HashMap type16 = new HashMap<>(); + type16.put("type16", 0); + list.add(type16); + HashMap type17 = new HashMap<>(); + type17.put("type17", 0); + list.add(type17); + HashMap type18 = new HashMap<>(); + type18.put("type18", 0); + list.add(type18); + HashMap type19 = new HashMap<>(); + type19.put("type19", 0); + list.add(type19); + HashMap type20 = new HashMap<>(); + type20.put("type20", 0); + list.add(type20); + HashMap type21 = new HashMap<>(); + type21.put("type21", 0); + list.add(type21); + } + return list; + } +}