diff --git a/anrui-base/anrui-base-api/src/main/java/com/yxt/anrui/base/api/baseaccadjapply/BaseAccadjApplyFeign.java b/anrui-base/anrui-base-api/src/main/java/com/yxt/anrui/base/api/baseaccadjapply/BaseAccadjApplyFeign.java index aa57bdccb5..43a8c6da7c 100644 --- a/anrui-base/anrui-base-api/src/main/java/com/yxt/anrui/base/api/baseaccadjapply/BaseAccadjApplyFeign.java +++ b/anrui-base/anrui-base-api/src/main/java/com/yxt/anrui/base/api/baseaccadjapply/BaseAccadjApplyFeign.java @@ -71,12 +71,12 @@ public interface BaseAccadjApplyFeign { @PostMapping("/save") @ResponseBody public ResultBean save(@RequestBody BaseAccadjApplyDto dto); - + @ApiOperation("根据sid删除记录") @DeleteMapping("/delBySids") @ResponseBody public ResultBean delBySids(@RequestBody String[] sids); - + @ApiOperation("根据SID获取一条记录") @GetMapping("/fetchDetailsBySid/{sid}") @ResponseBody diff --git a/anrui-base/anrui-base-biz/src/main/java/com/yxt/anrui/base/biz/baseaccadjapply/BaseAccadjApplyService.java b/anrui-base/anrui-base-biz/src/main/java/com/yxt/anrui/base/biz/baseaccadjapply/BaseAccadjApplyService.java index a0e6672581..ebbad6e4f5 100644 --- a/anrui-base/anrui-base-biz/src/main/java/com/yxt/anrui/base/biz/baseaccadjapply/BaseAccadjApplyService.java +++ b/anrui-base/anrui-base-biz/src/main/java/com/yxt/anrui/base/biz/baseaccadjapply/BaseAccadjApplyService.java @@ -903,6 +903,7 @@ public class BaseAccadjApplyService extends MybatisBaseService resultBean = flowFeign.handleProsess(bv); if (!resultBean.getSuccess()) { return rb.setMsg(resultBean.getMsg()); diff --git a/anrui-flowable/anrui-flowable-biz/src/main/java/com/yxt/anrui/flowable/biz/flow3/Flow3Service.java b/anrui-flowable/anrui-flowable-biz/src/main/java/com/yxt/anrui/flowable/biz/flow3/Flow3Service.java index 9d0413f6ea..c86f378622 100644 --- a/anrui-flowable/anrui-flowable-biz/src/main/java/com/yxt/anrui/flowable/biz/flow3/Flow3Service.java +++ b/anrui-flowable/anrui-flowable-biz/src/main/java/com/yxt/anrui/flowable/biz/flow3/Flow3Service.java @@ -99,25 +99,284 @@ public class Flow3Service extends MybatisBaseService { private ProcessEngine processEngine; public ResultBean businessStartProcessInstanceById(BusinessVariables bv) { + ResultBean rb = ResultBean.fireFail(); + // 获取流程定义ID和发起人ID + String procDefId = bv.getModelId(); + String userSid = bv.getUserSid(); + // 获取传入的变量 + Map variables = bv.getFormVariables(); + Map variablesSeconds = bv.getFormVariables(); + String nextNodeUserSids = ""; + List userSidForNextNode = new ArrayList<>(); + if (StringUtils.isBlank(nextNodeUserSids)) { + userSidForNextNode = getNextNodeUser(bv).getData(); + variables.put("approvers", userSidForNextNode); + } else { + nextNodeUserSids = bv.getNextNodeUserSids(); + } + + + // 根据流程定义ID查询最新的流程定义 + ProcessDefinition processDefinition = repositoryService.createProcessDefinitionQuery() + .processDefinitionId(procDefId) + .latestVersion() + .singleResult(); + + // 如果流程被挂起,返回错误信息 + if (Objects.nonNull(processDefinition) && processDefinition.isSuspended()) { + return rb.setMsg("流程已被挂起,请先激活流程"); + } + + // 设置发起人信息 + ResultBean sysUserVoResultBean = sysUserFeign.fetchBySid(userSid); + SysUserVo sysUser = sysUserVoResultBean.getData(); + identityService.setAuthenticatedUserId(sysUser.getSid()); + variables.put(ProcessConstants.PROCESS_INITIATOR, userSid); + variables.put(ProcessConstants.USER_TYPE_ASSIGNEE, userSid); + + // 启动流程实例 + ProcessInstance processInstance = runtimeService.startProcessInstanceById(procDefId, variables); + + // 获取第一步任务并设置任务执行人和意见 + Task task = taskService.createTaskQuery().processInstanceId(processInstance.getProcessInstanceId()).singleResult(); + if (Objects.nonNull(task)) { + taskService.addComment(task.getId(), processInstance.getProcessInstanceId(), FlowComment.START.getType(), + sysUser.getName() + "发起流程申请"); + taskService.setAssignee(task.getId(), userSid); + taskService.complete(task.getId(), variables); + } + String id_ = ""; + String name_ = ""; + String task_def_key_ = ""; + //查询当前实例的最新待办任务 + List tasks = taskService.createTaskQuery().processInstanceId(processInstance.getId()).list(); + if (StringUtils.isBlank(nextNodeUserSids)) { + //遍历待办任务 + for (int i = 0; i < tasks.size(); i++) { + Task task2 = tasks.get(i); + String isMultiInstanceTask = isMultiInstanceTask(task2); + if ("会签任务".equals(isMultiInstanceTask) || "或签任务".equals(isMultiInstanceTask)) { + String approver = getApproverForTask(userSidForNextNode, i); + taskService.claim(task2.getId(), approver); + } else { + nextNodeUserSids = userSidForNextNode.get(0); + } + id_ = task2.getId(); + task_def_key_ = task2.getTaskDefinitionKey(); + name_ = task2.getName(); + } + } else { + Task task2 = tasks.get(0); + id_ = task2.getId(); + task_def_key_ = task2.getTaskDefinitionKey(); + name_ = task2.getName(); + + } + //提交前传入下一环节待办人 + if (ProcDefEnum.DEFAUL_TADMIN_SID.getProDefId().equals(nextNodeUserSids)) { + return handleAutomaticApproval(bv, task, id_, task_def_key_, variables, variablesSeconds, processDefinition); + } + // 如果申请人与下一环节审批人相同,则自动审批 + if (bv.getUserSid().equals(nextNodeUserSids)) { + return handleSelfApproval(bv, task, id_, task_def_key_, variables, variablesSeconds, processDefinition); + } + // 实例化 UpdateFlowFieldVo + UpdateFlowFieldVo updateFlowFieldVo = new UpdateFlowFieldVo(); + updateFlowFieldVo.setProcInsId(task.getProcessInstanceId()); + updateFlowFieldVo.setNodeState(name_); + updateFlowFieldVo.setTaskId(id_); + updateFlowFieldVo.setTaskDefKey(task_def_key_); + updateFlowFieldVo.setProcDefId(bv.getModelId()); + updateFlowFieldVo.setSid(bv.getBusinessSid()); + updateFlowFieldVo.setName(processDefinition.getName()); + return rb.success().setData(updateFlowFieldVo).setMsg("流程启动成功"); + } + + public ResultBean handleProsess(BusinessVariables bv, boolean b) { + ResultBean rb = ResultBean.fireFail(); + UpdateFlowFieldVo vo = new UpdateFlowFieldVo(); + //获取表单中的参数 + Map formVariables = bv.getFormVariables(); + formVariables = formVariables == null ? new HashMap<>() : formVariables; + formVariables.put("businessSid", bv.getBusinessSid()); + String nextUserSid = bv.getNextNodeUserSids(); + String taskId = bv.getTaskId(); + String userSid = bv.getUserSid(); + String instanceId = bv.getInstanceId(); + String comment = bv.getComment(); + String nodeState = ""; + String taskDefKey = ""; + String orgPath = bv.getOrgSidPath(); + String service = (String) formVariables.get("service"); + String ydfOrgPath = (String) formVariables.get("ydfOrgPath"); + List userSidForNextNode = new ArrayList<>(); + + //设置下一环节审批人是否自动审批通过,默认否 + boolean contains = false; + //设置是否是管理员自动审批,默认否 + boolean adminContains = false; + //查询任务id为taskId的任务是否存在 + Task task = taskService.createTaskQuery().taskId(taskId).singleResult(); + if (Objects.isNull(task)) { + return rb.setMsg("任务不存在"); + } + + String assignee = task.getAssignee(); + if (b && (StringUtils.isNotBlank(assignee) && assignee.indexOf(userSid) < 0)) { + return rb.setMsg("当前用户不是环节的待办人,不能进行办理操作!"); + } + if (StringUtils.isBlank(nextUserSid)) { + if ("公司间调车".equals(service) && "Activity_0695qh4".equals(bv.getTaskDefKey())) { + bv.setOrgSidPath(ydfOrgPath); + } + ResultBean> listResultBean = getNextNodeUserSidsOfSubmit(bv); + if (!listResultBean.getSuccess()) { + nextUserSid = ProcDefEnum.DEFAUL_TADMIN_SID.getProDefId(); + adminContains = true; + } else { + userSidForNextNode = listResultBean.getData(); + formVariables.put("approvers", listResultBean.getData()); + } + } else { + //若下一环节用户与系统管理员一致,则自动审批 + if (ProcDefEnum.DEFAUL_TADMIN_SID.getProDefId().equals(nextUserSid)) { + adminContains = true; + } + } + //是否是多实例任务 + String isMultiInstanceTask = isMultiInstanceTask(task); + boolean isMultiInstanceTaskNext = false; + if (DelegationState.PENDING.equals(task.getDelegationState())) { + adminContains = false; + //加签 + Authentication.setAuthenticatedUserId(userSid); + taskService.addComment(taskId, instanceId, + FlowComment.DELEGATE.getType(), comment); + taskService.resolveTask(taskId, formVariables); + nodeState = task.getName(); + taskDefKey = task.getTaskDefinitionKey(); + } else { + boolean checkTask = false;//是否要查询当前任务是否是会签环节 + List tasks = taskService.createTaskQuery().processInstanceId(instanceId).list(); + if (tasks.size() == 1 || "或签任务".equals(isMultiInstanceTask)) { + checkTask = true; + } + //当前任务办理完成 + taskService.addComment(taskId, instanceId, FlowComment.NORMAL.getType(), comment); + log.error("taskid:{},userSid:{}", taskId, userSid); + log.error("formVariables:{}", JSON.toJSONString(formVariables)); + taskService.setAssignee(taskId, userSid); + taskService.complete(taskId, formVariables); + //查询办理完后的最新待办任务 + tasks = taskService.createTaskQuery().processInstanceId(instanceId).list(); + if (checkTask) {//单一审批任务或者或签任务时或者会签的最后一个待办任务 + if (tasks.size() > 0) { + for (int i = 0; i < tasks.size(); i++) { + Task task2 = tasks.get(i); + isMultiInstanceTask = isMultiInstanceTask(task2); + if ("会签任务".equals(isMultiInstanceTask) || "或签任务".equals(isMultiInstanceTask)) { + taskService.claim(task2.getId(), userSidForNextNode.get(i)); // 由候选人认领任务 + isMultiInstanceTaskNext = true; + + } else { + //查询下一环节用户是否有转办人 + nextUserSid = change(nextUserSid, bv.getInstanceId()); + taskService.setAssignee(task2.getId(), nextUserSid);//将下一环节用户放入流程中 + } + vo.setTaskId(task2.getId()); + //在act_ru_variable表中增加环节上的业务参数的变量 + taskService.setVariablesLocal(task2.getId(), formVariables); + nodeState = task2.getName(); + taskDefKey = task2.getTaskDefinitionKey(); + } + } else { + nodeState = FlowComment.SETTLE.getRemark(); + taskDefKey = "Event_end"; + vo.setNodeState(FlowComment.SETTLE.getRemark()); + } + + + } + if (!isMultiInstanceTaskNext) { + //获取该流程所有要走的环节节点 + List flowElements = calApprovePath(bv.getModelId(), + bv.getFormVariables()); + for (int i = 0; i < flowElements.size(); i++) { + FlowElement flowElement = flowElements.get(i); + String id = flowElement.getId(); + // 如果当前环节匹配taskDefKey,并且后续环节存在 + if (taskDefKey.equals(id) && i + 1 < flowElements.size()) { + FlowElement nextFlowElement = flowElements.get(i + 1); // 获取下一个环节 + List nextUserList = getUserListFromFlowElement(nextFlowElement, orgPath); // 获取下一个环节的用户列表 + + // 获取下下一个环节的用户列表(如果存在) + List nextNextUserList = new ArrayList<>(); + if (i + 2 < flowElements.size()) { + FlowElement nextNextFlowElement = flowElements.get(i + 2); // 获取下下一个环节 + nextNextUserList = getUserListFromFlowElement(nextNextFlowElement, orgPath); // 获取下下一个环节的用户列表 + } + + // 如果下一个环节只有一个用户,并且其sid与下一级相同,则设置contains为true + if (nextUserList.size() == 1 && nextUserList.get(0).getSid().equals(nextUserSid)) { + contains = true; // 确定自动审批 + break; // 跳出循环,不再检查后续环节 + } + + // 如果下下一个环节没有用户,且下下下一个环节与下一级相同,设置contains为true + if (nextUserList.isEmpty() && nextNextUserList.size() == 1 && nextNextUserList.get(0).getSid().equals(nextUserSid)) { + contains = true; // 确定自动审批 + break; // 跳出循环 + } + } + } + } + } + + //设置管理员是否自动审批的字段是否是是。//若下一环节用户与系统管理员一致,则自动审批 + if (adminContains) { + bv.setUserSid(nextUserSid); + bv.setTaskId(vo.getTaskId()); + bv.setTaskDefKey(taskDefKey); + bv.setComment("系统自动跳过"); + bv.setNextNodeUserSids(""); + return handleProsess(bv, false); + } + + if (contains) { + bv.setUserSid(nextUserSid); + bv.setTaskId(vo.getTaskId()); + bv.setTaskDefKey(taskDefKey); + bv.setComment("因与下一级审批人相同,系统自动处理,需以下一级审批人审批意见为准!"); + return handleProsess(bv, false); + } + vo.setProcInsId(instanceId); + vo.setProcDefId(bv.getModelId()); + vo.setNodeState(nodeState); + vo.setTaskDefKey(taskDefKey); + vo.setSid(bv.getBusinessSid()); + return rb.success().setData(vo); + } + + public ResultBean businessStartProcessInstanceById222(BusinessVariables bv) { ResultBean rb = ResultBean.fireFail(); // 或签任务候选人 - List userIds = Arrays.asList( + /* List userIds = Arrays.asList( "dc6b9e36-1b31-4b94-908b-d2d7f78a0977", "657bf5a5-7665-440e-9cbd-ab87eccfbdcc", "2737e5ee-5ffd-4127-919b-e6694dfc8361"); // 会签任务候选人 - List approvers = Arrays.asList( + List approvers = Arrays.asList( "1d85d1fe-e527-4ec5-a5e4-c37a76a36518", "64e289bc-80cd-487a-9498-5ae61e260f71", - "7ffcd76a-4fa0-4c9c-87ca-a0c2116bb2ed"); + "7ffcd76a-4fa0-4c9c-87ca-a0c2116bb2ed");*/ // 获取流程定义ID和发起人ID String procDefId = bv.getModelId(); String userSid = bv.getUserSid(); // 获取传入的变量 Map variables = bv.getFormVariables(); - variables.put("userSids", userIds); - variables.put("approvers", approvers); + List userSidForNextNode = getNextNodeUser(bv).getData(); + variables.put("approvers", userSidForNextNode); Map variablesSeconds = bv.getFormVariables(); // 根据流程定义ID查询最新的流程定义 @@ -152,38 +411,34 @@ public class Flow3Service extends MybatisBaseService { boolean isMultiInstanceTaskNext = false; - // 查询当前流程实例的待办任务 - ResultBean> latestTasksNew = flowTaskService.getLatestTasksNew(processInstance.getId()); - List data = latestTasksNew.getData(); - LatestTaskVo latestTaskVo = data.get(0); - String id_ = latestTaskVo.getId_(); - String task_def_key_ = latestTaskVo.getTask_def_key_(); - // 获取下一个环节的待办人 if (StringUtils.isBlank(bv.getNextNodeUserSids())) { List tasks = taskService.createTaskQuery().processInstanceId(processInstance.getId()).list(); for (int i = 0; i < tasks.size(); i++) { Task task2 = tasks.get(i); String isMultiInstanceTask = isMultiInstanceTask(task2); - // 会签任务认领 - if ("会签任务".equals(isMultiInstanceTask)) { - String approver = getApproverForTask(approvers, i); // 动态获取会签候选人 - taskService.claim(task2.getId(), approver); // 由会签候选人认领任务 + if ("会签任务".equals(isMultiInstanceTask) || "或签任务".equals(isMultiInstanceTask)) { + String approver = getApproverForTask(userSidForNextNode, i); + taskService.claim(task2.getId(), approver); isMultiInstanceTaskNext = true; - } - // 单一审批任务 - else if ("单一审批任务".equals(isMultiInstanceTask)) { - String userSidForNextNode = getNextNodeUser(bv).getData(); - taskService.claim(task2.getId(), userSidForNextNode); - bv.setNextNodeUserSids(userSidForNextNode); + } else if ("单一审批任务".equals(isMultiInstanceTask)) { + bv.setNextNodeUserSids(userSidForNextNode.get(0)); break; } } } - + String id_ = ""; + String name_ = ""; + String task_def_key_ = ""; // 如果没有会签任务,继续处理其他节点 if (!isMultiInstanceTaskNext) { + ResultBean> latestTasksNew = flowTaskService.getLatestTasksNew(processInstance.getId()); + List data = latestTasksNew.getData(); + LatestTaskVo latestTaskVo = data.get(0); + id_ = latestTaskVo.getId_(); + task_def_key_ = latestTaskVo.getTask_def_key_(); + name_ = latestTaskVo.getName_(); String nextNodeUserSids = bv.getNextNodeUserSids(); // 查询下一环节是否有转办并添加评论 nextNodeUserSids = change(nextNodeUserSids, processInstance.getProcessInstanceId()); @@ -198,12 +453,26 @@ public class Flow3Service extends MybatisBaseService { if (bv.getUserSid().equals(nextNodeUserSids)) { return handleSelfApproval(bv, task, id_, task_def_key_, variables, variablesSeconds, processDefinition); } + } else { + List tasks = taskService.createTaskQuery().processInstanceId(processInstance.getId()).list(); + for (int i = 0; i < tasks.size(); i++) { + Task task2 = tasks.get(i); + id_ = task2.getId(); + task_def_key_ = task2.getTaskDefinitionKey(); + name_ = task2.getName(); + if (!ProcDefEnum.DEFAUL_TADMIN_SID.getProDefId().equals(task2.getAssignee())) { + continue; + } else { + return handleAutomaticApproval(bv, task, id_, task_def_key_, variables, variablesSeconds, processDefinition); + } + } + } // 实例化 UpdateFlowFieldVo UpdateFlowFieldVo updateFlowFieldVo = new UpdateFlowFieldVo(); updateFlowFieldVo.setProcInsId(task.getProcessInstanceId()); - updateFlowFieldVo.setNodeState(latestTaskVo.getName_()); + updateFlowFieldVo.setNodeState(name_); updateFlowFieldVo.setTaskId(id_); updateFlowFieldVo.setTaskDefKey(task_def_key_); updateFlowFieldVo.setProcDefId(bv.getModelId()); @@ -262,148 +531,6 @@ public class Flow3Service extends MybatisBaseService { return handleProsess(bv, false); } - /** - * 启动流程 - * - * @param bv - * @return - */ - public ResultBean businessStartProcessInstanceById2(BusinessVariables bv) { - ResultBean rb = ResultBean.fireFail(); - // 或签任务候选人 - List userIds = Arrays.asList( - "dc6b9e36-1b31-4b94-908b-d2d7f78a0977", - "657bf5a5-7665-440e-9cbd-ab87eccfbdcc", - "2737e5ee-5ffd-4127-919b-e6694dfc8361"); - - // 会签任务候选人 - List approvers = Arrays.asList( - "1d85d1fe-e527-4ec5-a5e4-c37a76a36518", - "64e289bc-80cd-487a-9498-5ae61e260f71", - "7ffcd76a-4fa0-4c9c-87ca-a0c2116bb2ed"); - - - UpdateFlowFieldVo updateFlowFieldVo = new UpdateFlowFieldVo(); - String procDefId = bv.getModelId(); - String userSid = bv.getUserSid(); - - Map variables = bv.getFormVariables(); - variables.put("userSids", userIds); - variables.put("approvers", approvers); - Map variablesSeconds = bv.getFormVariables(); - //根据流程定义id查询 - ProcessDefinition processDefinition = repositoryService.createProcessDefinitionQuery().processDefinitionId(procDefId) - .latestVersion().singleResult(); - if (Objects.nonNull(processDefinition) && processDefinition.isSuspended()) { - return rb.setMsg("流程已被挂起,请先激活流程"); - } - // 设置流程发起人Id到流程中 - ResultBean sysUserVoResultBean = sysUserFeign.fetchBySid(userSid); - SysUserVo sysUser = sysUserVoResultBean.getData(); - identityService.setAuthenticatedUserId(sysUser.getSid()); - variables.put(ProcessConstants.PROCESS_INITIATOR, userSid); - variables.put(ProcessConstants.USER_TYPE_ASSIGNEE, userSid); - ProcessInstance processInstance = runtimeService.startProcessInstanceById(procDefId, variables); - // 给第一步申请人节点设置任务执行人和意见 todo:第一个节点不设置为申请人节点有点问题? - Task task = taskService.createTaskQuery().processInstanceId(processInstance.getProcessInstanceId()).singleResult(); - if (Objects.nonNull(task)) { - taskService.addComment(task.getId(), processInstance.getProcessInstanceId(), FlowComment.START.getType(), - sysUser.getName() + "发起流程申请"); - taskService.setAssignee(task.getId(), userSid); - taskService.complete(task.getId(), variables); - } - - boolean isMultiInstanceTaskNext = false; - - //根据流程实例的id查询最新的待办环节 - ResultBean> latestTasksNew = flowTaskService.getLatestTasksNew(processInstance.getId()); - List data = latestTasksNew.getData(); - LatestTaskVo latestTaskVo = data.get(0); - String id_ = latestTaskVo.getId_(); - String task_def_key_ = latestTaskVo.getTask_def_key_(); - //获取下一环节待办人 - if (StringUtils.isBlank(bv.getNextNodeUserSids())) { - List tasks = taskService.createTaskQuery().processInstanceId(processInstance.getId()).list(); - for (int i = 0; i < tasks.size(); i++) { - Task task2 = tasks.get(i); - String isMultiInstanceTask = isMultiInstanceTask(task2); - if ("会签任务".equals(isMultiInstanceTask)) { - taskService.claim(task2.getId(), approvers.get(i)); // 由候选人认领任务 - isMultiInstanceTaskNext = true; - } else { - ResultBean userResultBean = getNextNodeUser(bv); - bv.setNextNodeUserSids(userResultBean.getData()); - break; - } - } - } - if (!isMultiInstanceTaskNext) { - String nextNodeUserSids = bv.getNextNodeUserSids(); - //查询下一环节是否有转办并添加评论 - nextNodeUserSids = change(nextNodeUserSids, processInstance.getProcessInstanceId()); - taskService.setAssignee(id_, nextNodeUserSids); - taskService.setVariablesLocal(id_, variables); - if (ProcDefEnum.DEFAUL_TADMIN_SID.getProDefId().equals(nextNodeUserSids)) { - bv.setModelId(procDefId); - bv.setInstanceId(task.getProcessInstanceId()); - bv.setTaskId(id_); - bv.setUserSid(nextNodeUserSids); - bv.setBusinessSid(bv.getBusinessSid()); - bv.setTaskDefKey(task_def_key_); - bv.setFormVariables(variables); - bv.setOrgSidPath(bv.getOrgSidPath()); - bv.setComment("系统自动跳过!"); - bv.setFormVariables(variablesSeconds); - bv.setNextNodeUserSids(""); - ResultBean updateFlowFieldVoResultBean = handleProsess(bv, false); - if (updateFlowFieldVoResultBean.getSuccess() && updateFlowFieldVoResultBean.getData() != null) { - UpdateFlowFieldVo vo = updateFlowFieldVoResultBean.getData(); - updateFlowFieldVo.setProcInsId(vo.getProcInsId()); - updateFlowFieldVo.setNodeState(vo.getNodeState()); - updateFlowFieldVo.setTaskId(vo.getTaskId()); - updateFlowFieldVo.setTaskDefKey(vo.getTaskDefKey()); - updateFlowFieldVo.setProcDefId(bv.getModelId()); - updateFlowFieldVo.setSid(bv.getBusinessSid()); - updateFlowFieldVo.setName(processDefinition.getName()); - return rb.success().setData(updateFlowFieldVo).setMsg("流程启动成功"); - } - } - if (bv.getUserSid().equals(nextNodeUserSids)) { - //如果申请人与下一环节审批人相同,则自动审批 - bv.setModelId(procDefId); - bv.setInstanceId(task.getProcessInstanceId()); - bv.setTaskId(id_); - bv.setUserSid(nextNodeUserSids); - bv.setBusinessSid(bv.getBusinessSid()); - bv.setTaskDefKey(task_def_key_); - bv.setFormVariables(variables); - bv.setOrgSidPath(bv.getOrgSidPath()); - bv.setFormVariables(variablesSeconds); - bv.setComment("因与申请人相同,系统自动处理,需以下一级审批人审批意见为准!"); - bv.setNextNodeUserSids(""); - ResultBean updateFlowFieldVoResultBean = handleProsess(bv, false); - if (updateFlowFieldVoResultBean.getSuccess() && updateFlowFieldVoResultBean.getData() != null) { - UpdateFlowFieldVo vo = updateFlowFieldVoResultBean.getData(); - updateFlowFieldVo.setProcInsId(vo.getProcInsId()); - updateFlowFieldVo.setNodeState(vo.getNodeState()); - updateFlowFieldVo.setTaskId(vo.getTaskId()); - updateFlowFieldVo.setTaskDefKey(vo.getTaskDefKey()); - updateFlowFieldVo.setProcDefId(bv.getModelId()); - updateFlowFieldVo.setSid(bv.getBusinessSid()); - updateFlowFieldVo.setName(processDefinition.getName()); - return rb.success().setData(updateFlowFieldVo).setMsg("流程启动成功"); - } - } - } - updateFlowFieldVo.setProcInsId(task.getProcessInstanceId()); - updateFlowFieldVo.setNodeState(latestTaskVo.getName_()); - updateFlowFieldVo.setTaskId(id_); - updateFlowFieldVo.setTaskDefKey(task_def_key_); - updateFlowFieldVo.setProcDefId(bv.getModelId()); - updateFlowFieldVo.setSid(bv.getBusinessSid()); - updateFlowFieldVo.setName(processDefinition.getName()); - return rb.success().setData(updateFlowFieldVo).setMsg("流程启动成功"); - } /** * 查询下一环节用户是否有转办用户,若有转办用户则添加转办评论 @@ -454,14 +581,28 @@ public class Flow3Service extends MybatisBaseService { return nextNodeUserSids; } + /** - * 办理 + * 提取获取用户角色列表的公共方法,避免重复代码 * - * @param bv - * @param b - * @return + * @param flowElement 当前流程环节 + * @param orgPath 当前用户的组织路径 + * @return 用户列表 */ - public ResultBean handleProsess(BusinessVariables bv, boolean b) { + private List getUserListFromFlowElement(FlowElement flowElement, String orgPath) { + List userList = new ArrayList<>(); // 初始化用户列表 + if (flowElement instanceof UserTask) { // 判断当前环节是否为用户任务 + UserTask userTask = (UserTask) flowElement; // 转换为用户任务类型 + List candidateGroups = userTask.getCandidateGroups(); // 获取候选组 + UserssQuery userssQuery = new UserssQuery(); // 创建查询对象 + userssQuery.setCandidateGroups(candidateGroups); // 设置候选组 + userssQuery.setOrgSidPath(orgPath); // 设置组织路径 + userList = sysUserFeign.getUsersByRoles(userssQuery).getData(); // 根据角色查询用户 + } + return userList == null ? new ArrayList<>() : userList; // 如果返回为null,则返回空列表 + } + + /* public ResultBean handleProsess222(BusinessVariables bv, boolean b) { ResultBean rb = ResultBean.fireFail(); UpdateFlowFieldVo vo = new UpdateFlowFieldVo(); // 或签任务候选人 @@ -562,7 +703,7 @@ public class Flow3Service extends MybatisBaseService { tasks = taskService.createTaskQuery().processInstanceId(instanceId).list(); for (int i = 0; i < tasks.size(); i++) { Task task2 = tasks.get(i); - isMultiInstanceTask = isMultiInstanceTask(task2); + isMultiInstanceTask = isMultiInstanceTask(task2); if ("会签任务".equals(isMultiInstanceTask)) { taskService.claim(task2.getId(), approvers.get(i)); // 由候选人认领任务 isMultiInstanceTaskNext = true; @@ -570,9 +711,15 @@ public class Flow3Service extends MybatisBaseService { taskService.claim(task2.getId(), userIds.get(i)); // 由候选人认领任务 isMultiInstanceTaskNext = true; } else { - ResultBean userResultBean = getNextNodeUser(bv); - bv.setNextNodeUserSids(userResultBean.getData()); - nextUserSid = bv.getNextNodeUserSids(); + //获取下一环节用户 + ResultBean stringResultBean = getNextNodeUserSidsOfSubmit(bv); + if (!stringResultBean.getSuccess()) { + //下一环节用户为空的情况 + nextUserSid = ProcDefEnum.DEFAUL_TADMIN_SID.getProDefId(); + adminContains = true; + } else { + nextUserSid = stringResultBean.getData(); + } break; } } @@ -681,7 +828,7 @@ public class Flow3Service extends MybatisBaseService { vo.setTaskDefKey(taskDefKey); vo.setSid(bv.getBusinessSid()); return rb.success().setData(vo); - } + }*/ /** * 获取下一环节用户 @@ -689,8 +836,9 @@ public class Flow3Service extends MybatisBaseService { * @param bv * @return */ - public ResultBean getNextNodeUserSidsOfSubmit(BusinessVariables bv) { - ResultBean rb = ResultBean.fireFail(); + public ResultBean> getNextNodeUserSidsOfSubmit(BusinessVariables bv) { + ResultBean> rb = ResultBean.fireFail(); + List nextUserList = new ArrayList<>(); String orgPath = bv.getOrgSidPath(); String taskDefKey = bv.getTaskDefKey(); //根据业务参数取流程流转的环节 信息 @@ -710,28 +858,45 @@ public class Flow3Service extends MybatisBaseService { } else { Object o = task_map.get("candidateGroups"); JSONArray jsonArray = JSONArray.parseArray(JSON.toJSONString(o)); - String roleSid = jsonArray.get(0).toString(); - //根据组织架构、角色两个参数取相关符合条件的用户信息 - UserQuery userQuery = new UserQuery(); - userQuery.setRoleSid(roleSid); - userQuery.setOrgSidPath(orgPath); - String nextNodeUserSids_ = ""; - List sysUserVos = sysUserFeign.getUserByRole(userQuery).getData(); - if (sysUserVos == null || sysUserVos.size() < 1) { - return rb; - } else { - StringBuilder nextNodeUserSids = new StringBuilder(); - for (SysUserVo su : sysUserVos) { - nextNodeUserSids.append(su.getSid()).append(","); + // 将JSONArray转换为List + List stringList = jsonArray.toJavaList(String.class); + stringList.removeAll(Collections.singleton(null)); + if (!stringList.isEmpty()) { + for (int i = 0; i < stringList.size(); i++) { + String roleSid = stringList.get(i); + //根据组织架构、角色两个参数取相关符合条件的用户信息 + UserQuery userQuery = new UserQuery(); + userQuery.setRoleSid(roleSid); + userQuery.setOrgSidPath(orgPath); + String nextNodeUserSids_ = ""; + List sysUserVos = sysUserFeign.getUserByRole(userQuery).getData(); + if (nextUserList.isEmpty() && i == stringList.size() - 1) { + if (sysUserVos == null || sysUserVos.size() < 1) { + log.error("下一环节无用户填充管理员用户"); + return rb; + } + } else { + if (sysUserVos == null || sysUserVos.size() < 1) { + continue; + } else { + StringBuilder nextNodeUserSids = new StringBuilder(); + for (SysUserVo su : sysUserVos) { + nextNodeUserSids.append(su.getSid()).append(","); + } + //符合条件的用户的sid,拼接的字符串 + nextNodeUserSids_ = nextNodeUserSids.toString(); + nextNodeUserSids_ = nextNodeUserSids_.substring(0, nextNodeUserSids_.length() - 1); + } + } + + nextUserList.add(nextNodeUserSids_); } - //符合条件的用户的sid,拼接的字符串 - nextNodeUserSids_ = nextNodeUserSids.toString(); - nextNodeUserSids_ = nextNodeUserSids_.substring(0, nextNodeUserSids_.length() - 1); } - return rb.success().setData(nextNodeUserSids_); + return rb.success().setData(nextUserList); } } + /** * 流程抄送的功能 * @@ -960,157 +1125,10 @@ public class Flow3Service extends MybatisBaseService { } - public ResultBean assignTask(FlowDelegateQuery flowDelegateQuery) { - ResultBean rb = ResultBean.fireFail(); - DelegateQuery delegateQuery = new DelegateQuery(); - BeanUtil.copyProperties(flowDelegateQuery, delegateQuery); - ResultBean assignTask = flowTaskService.assignTask(delegateQuery); - String userSid = flowDelegateQuery.getUserSid(); - String assigneeSid = flowDelegateQuery.getAssignee(); - String instanceId = flowDelegateQuery.getInstanceId(); - String views = ""; - if (StringUtils.isNotBlank(flowDelegateQuery.getViews())) { - views = flowDelegateQuery.getViews(); - } - ResultBean userVoResultBean1 = sysUserFeign.fetchBySid(userSid); - String userName = ""; - if (userVoResultBean1.getData() != null) { - userName = userVoResultBean1.getData().getName(); - } - ResultBean userVoResultBean2 = sysUserFeign.fetchBySid(assigneeSid); - ProcessCommentDto processCommentDto = new ProcessCommentDto(); - processCommentDto.setReviewerSid(userSid); - if (userVoResultBean2.getData() != null) { - String changeName = userVoResultBean2.getData().getName(); - processCommentDto.setReviewer(userName); - processCommentDto.setContent(userName + "转办给" + changeName + ":" + views); - } - processCommentDto.setTime(new Date()); - processCommentDto.setProcessId(instanceId); - processCommentService.saveOrUpdateDto(processCommentDto); - //转办内容推送至待阅 - HistoricTaskInstance historicTaskInstance = historyService.createHistoricTaskInstanceQuery() - .includeProcessVariables().taskId(delegateQuery.getTaskId()).singleResult(); - if (historicTaskInstance == null) { - return rb.setMsg("分享失败!"); - } - MessageFlowVo messageFlowVo = new MessageFlowVo(); - String procDefId = historicTaskInstance.getProcessDefinitionId(); - String procInsId = historicTaskInstance.getProcessInstanceId(); - String nodeState = historicTaskInstance.getName(); - String taskDefKey = historicTaskInstance.getTaskDefinitionKey(); - messageFlowVo.setProcDefId(procDefId); - messageFlowVo.setTaskId(delegateQuery.getTaskId()); - messageFlowVo.setNodeState(nodeState); - messageFlowVo.setProcInsId(procInsId); - messageFlowVo.setTaskDefKey(taskDefKey); - Map processVariables = historicTaskInstance.getProcessVariables(); - MessageFlowableQuery mfq = new MessageFlowableQuery(); - mfq.setUfVo(messageFlowVo); - String createrOrgPath = (String) processVariables.get("createrOrgPath"); - if (historicTaskInstance == null) { - return rb.setMsg("分享失败!"); - } - // - String assignee = (String) processVariables.get("assignee"); - ResultBean stringResultBean = sysUserFeign.fetchBySid(assignee); - String assigneeName = ""; - if (stringResultBean.getData() != null) { - assigneeName = stringResultBean.getData().getName(); - } - - Map app = new HashMap<>(); - if (processVariables.get("app") != null) { - app = (Map) processVariables.get("app"); - } - mfq.setAppMap(app); - String businessSid = (String) processVariables.get("businessSid"); - mfq.setBusinessSid(businessSid); - mfq.setMsgContent(userName + "分享的流程审批,请查看"); -// act_re_procdef - Map process = processService.getProcessDefByDefId(historicTaskInstance.getProcessDefinitionId()); - mfq.setModuleName(process.get("NAME_")); - if (processVariables.containsKey("orderNames")) { - mfq.setMsgTitle(processVariables.get("orderNames").toString()); - } else { - mfq.setMsgTitle(process.get("NAME_")); - } - mfq.setUserSids(userSid); - mfq.setOrgPath(createrOrgPath); - mfq.setUserSid(assignee); - mfq.setApplicationName(assigneeName); - ResultBean resultBean = messageFeign.pushMessageShare(mfq); - return rb.success(); - } - - - public ResultBean getApplicantInfoForUrgeCount(String taskId, String procInstId) { - ResultBean rb = ResultBean.fireFail(); - FlowableMessageVo flowableMessageVo = baseMapper.getApplicantInfoForUrgeCount(taskId, procInstId); - String procDefId = ""; - if (null != flowableMessageVo) { - procDefId = flowableMessageVo.getProDefId(); - } - List messageVos = baseMapper.getApplicantInfos(procDefId, procInstId); - messageVos.removeAll(Collections.singleton(null)); - FlowableMessageVo messageVo = new FlowableMessageVo(); - if (!messageVos.isEmpty()) { - messageVo = messageVos.get(2); - } - return rb.success().setData(messageVo); - } - - public ResultBean getTask(String taskId, String procInstId) { - ResultBean rb = ResultBean.fireFail(); - FlowableMessageVo flowableMessageVo = baseMapper.getTask(taskId, procInstId); - return rb.success().setData(flowableMessageVo); - } - - public ResultBean getTaskNameForUrgeCount(String taskId, String procInstId) { - ResultBean rb = ResultBean.fireFail(); - FlowTaskDto flowTask = new FlowTaskDto(); - flowTask.setTaskId(taskId); - HistoricTaskInstance historicTaskInstance = historyService.createHistoricTaskInstanceQuery().includeProcessVariables().taskId(flowTask.getTaskId()).singleResult(); - flowTask.setProcessVariables(historicTaskInstance.getProcessVariables()); - if (flowTask.getProcessVariables().containsKey("orderNames")) { - flowTask.setProcDefName(flowTask.getProcessVariables().get("orderNames").toString()); - } else { - FlowableMessageVo task = baseMapper.getTask(taskId, procInstId); - if (null != task) { - String proDefId = task.getProDefId(); - FlowableMessageVo flowableMessageVo = baseMapper.selTaskNameForUrgeCount(proDefId); - if (null != flowableMessageVo) { - if (StringUtils.isNotBlank(flowableMessageVo.getNodeName())) { - flowTask.setProcDefName(flowableMessageVo.getNodeName()); - } - } - } - } - return rb.success().setData(flowTask); - } - - public ResultBean getApprovalResult(String proDefId, String procInstId) { - ResultBean rb = ResultBean.fireFail(); - FlowableMessageVo vo = baseMapper.getApprovalResult(proDefId, procInstId); - if (vo != null) { - String taskId = vo.getTaskId(); - if (StringUtils.isNotBlank(vo.getEndTime())) { - String type = baseMapper.getComment(taskId, procInstId); - if (type.equals("6")) { - vo.setResult("终止"); - } else if (type.equals("1")) { - vo.setResult("通过"); - } - } else { - vo.setResult("审批中"); - } - } - return rb.success().setData(vo); - } - - public ResultBean getNextNodeUser(BusinessVariables bv) { - ResultBean rb = ResultBean.fireFail(); + public ResultBean> getNextNodeUser(BusinessVariables bv) { + ResultBean> rb = ResultBean.fireFail(); + List nextUserList = new ArrayList<>(); //根据业务参数取流程流转的环节 信息 List> list = (List>) getProcessCirculationNodesByMap(bv).getData(); if (list == null || list.size() < 2) { @@ -1122,25 +1140,34 @@ public class Flow3Service extends MybatisBaseService { return rb.setMsg("流程设计问题"); } JSONArray jsonArray = JSONArray.parseArray(JSON.toJSONString(o)); - String roleSid = jsonArray.get(0).toString(); - //根据组织架构、角色两个参数取相关符合条件的用户信息 - UserQuery userQuery = new UserQuery(); - userQuery.setRoleSid(roleSid); - userQuery.setOrgSidPath(bv.getOrgSidPath()); - String nextNodeUserSids_ = ""; - List sysUserVos = sysUserFeign.getUserByRole(userQuery).getData(); - if (sysUserVos == null || sysUserVos.size() < 1) { - nextNodeUserSids_ = ProcDefEnum.DEFAUL_TADMIN_SID.getProDefId(); - } else { - StringBuilder nextNodeUserSids = new StringBuilder(); - for (SysUserVo su : sysUserVos) { - nextNodeUserSids.append(su.getSid()).append(","); + + // 将JSONArray转换为List + List stringList = jsonArray.toJavaList(String.class); + stringList.removeAll(Collections.singleton(null)); + if (!stringList.isEmpty()) { + for (int i = 0; i < stringList.size(); i++) { + String roleSid = stringList.get(i); + //根据组织架构、角色两个参数取相关符合条件的用户信息 + UserQuery userQuery = new UserQuery(); + userQuery.setRoleSid(roleSid); + userQuery.setOrgSidPath(bv.getOrgSidPath()); + String nextNodeUserSids_ = ""; + List sysUserVos = sysUserFeign.getUserByRole(userQuery).getData(); + if (sysUserVos == null || sysUserVos.size() < 1) { + nextNodeUserSids_ = ProcDefEnum.DEFAUL_TADMIN_SID.getProDefId(); + } else { + StringBuilder nextNodeUserSids = new StringBuilder(); + for (SysUserVo su : sysUserVos) { + nextNodeUserSids.append(su.getSid()).append(","); + } + //符合条件的用户的sid,拼接的字符串 + nextNodeUserSids_ = nextNodeUserSids.toString(); + nextNodeUserSids_ = nextNodeUserSids_.substring(0, nextNodeUserSids_.length() - 1); + } + nextUserList.add(nextNodeUserSids_); } - //符合条件的用户的sid,拼接的字符串 - nextNodeUserSids_ = nextNodeUserSids.toString(); - nextNodeUserSids_ = nextNodeUserSids_.substring(0, nextNodeUserSids_.length() - 1); } - return rb.success().setData(nextNodeUserSids_); + return rb.success().setData(nextUserList); } @@ -1285,7 +1312,7 @@ public class Flow3Service extends MybatisBaseService { } - public ResultBean submit222() { + /* public ResultBean submit222() { String userSid = "7f56f6ec-4a5f-47b0-aaab-158d64cb97b1"; // 或签任务候选人 List userIds = new ArrayList<>(); @@ -1400,33 +1427,6 @@ public class Flow3Service extends MybatisBaseService { assertTrue(isEnded2); return ResultBean.fireSuccess(); - } - - - /* private boolean isMultiInstanceTask(Task task, boolean isSequential) { - // 获取任务节点的ID - String taskDefinitionKey = task.getTaskDefinitionKey(); - - // 获取流程定义对象 - ProcessDefinition processDefinition = repositoryService.createProcessDefinitionQuery() - .processDefinitionId(task.getProcessDefinitionId()) - .singleResult(); - - // 获取BPMN模型,解析任务定义 - BpmnModel bpmnModel = repositoryService.getBpmnModel(processDefinition.getId()); - FlowElement flowElement = bpmnModel.getFlowElement(taskDefinitionKey); - - // 判断flowElement是否是UserTask,并且获取其multiInstanceLoopCharacteristics - if (flowElement instanceof UserTask) { - UserTask userTask = (UserTask) flowElement; - // 获取multiInstanceLoopCharacteristics - MultiInstanceLoopCharacteristics multiInstance = userTask.getLoopCharacteristics(); - if (multiInstance != null) { - boolean sequential = multiInstance.isSequential(); - return sequential == isSequential; - } - } - return false; }*/ diff --git a/anrui-scm/anrui-scm-biz/src/main/java/com/yxt/anrui/scm/biz/scmvehrebatecheckapplydetail/ScmVehrebateCheckapplydetailMapper.xml b/anrui-scm/anrui-scm-biz/src/main/java/com/yxt/anrui/scm/biz/scmvehrebatecheckapplydetail/ScmVehrebateCheckapplydetailMapper.xml index 63749a89fe..7cebc07ce1 100644 --- a/anrui-scm/anrui-scm-biz/src/main/java/com/yxt/anrui/scm/biz/scmvehrebatecheckapplydetail/ScmVehrebateCheckapplydetailMapper.xml +++ b/anrui-scm/anrui-scm-biz/src/main/java/com/yxt/anrui/scm/biz/scmvehrebatecheckapplydetail/ScmVehrebateCheckapplydetailMapper.xml @@ -87,8 +87,7 @@ svc.secondaryUploadMoney)) uploadMoneyTotal, SUM(IF(svc.onceCheckState = 1, svc.secondTreatCost + svc.secondSuppCost, svc.onceTreatCost + svc.onceSuppCost + svc.secondTreatCost + svc.secondSuppCost)) moneyTotal, - SUM(IF(svc.onceCheckState = 1, 0, svc.stayDetermineMoney)) stayDetermineMoney, - stayDetermineMoneyTotal, + SUM(IF(svc.onceCheckState = 1, 0, svc.stayDetermineMoney)) stayDetermineMoneyTotal, SUM(svc.adjustmentMoney) adjustmentMoneyTotal, SUM(IF(svc.isAdjustment = '是', svc.onceTreatCost + svc.onceSuppCost + svc.secondTreatCost + svc.secondSuppCost - diff --git a/yxt-base-biz/src/main/java/com/yxt/base/apiadmin/base/BaseGoodsSpuRest.java b/yxt-base-biz/src/main/java/com/yxt/base/apiadmin/base/BaseGoodsSpuRest.java index 1aec4e3d90..4b0fc2e7c9 100644 --- a/yxt-base-biz/src/main/java/com/yxt/base/apiadmin/base/BaseGoodsSpuRest.java +++ b/yxt-base-biz/src/main/java/com/yxt/base/apiadmin/base/BaseGoodsSpuRest.java @@ -90,4 +90,10 @@ public class BaseGoodsSpuRest { public ResultBean selIsGoodsID(@PathVariable("sid") String sid) { return baseGoodsSpuService.selIsGoodsID(sid); } + + @ApiOperation("根据图号和部门查询商品信息是否存在") + @GetMapping("/selByCodeAndDept") + ResultBean selByCodeAndDept(@RequestParam("code") String code,@RequestParam("deptSid") String deptSid){ + return baseGoodsSpuService.selByCodeAndDept(code,deptSid); + }; } diff --git a/yxt-base-biz/src/main/java/com/yxt/base/apiadmin/base/GoodsExcelVo.java b/yxt-base-biz/src/main/java/com/yxt/base/apiadmin/base/GoodsExcelVo.java index 7a6202cbe4..299914832f 100644 --- a/yxt-base-biz/src/main/java/com/yxt/base/apiadmin/base/GoodsExcelVo.java +++ b/yxt-base-biz/src/main/java/com/yxt/base/apiadmin/base/GoodsExcelVo.java @@ -1,40 +1,55 @@ package com.yxt.base.apiadmin.base; import com.yxt.common.core.utils.ExportEntityMap; +import io.swagger.annotations.ApiModelProperty; import lombok.Data; -import java.math.BigDecimal; @Data public class GoodsExcelVo { @ExportEntityMap(CnName = "序号", EnName = "rankNo") private Integer rankNo; - @ExportEntityMap(CnName = "商品名称", EnName = "goodsSpuName") + @ExportEntityMap(CnName = "商品名称*", EnName = "goodsSpuName") private String goodsSpuName; - @ExportEntityMap(CnName = "图号", EnName = "goodsSkuCode") + @ExportEntityMap(CnName = "图号*", EnName = "goodsSkuCode") private String goodsSkuCode; - @ExportEntityMap(CnName = "规格型号", EnName = "goodsSkuOwnSpec") + @ExportEntityMap(CnName = "规格型号*", EnName = "goodsSkuOwnSpec") private String goodsSkuOwnSpec; - @ExportEntityMap(CnName = "单位", EnName = "unit") + @ExportEntityMap(CnName = "单位*", EnName = "unit") private String unit; - @ExportEntityMap(CnName = "数量", EnName = "num") - private BigDecimal num; - @ExportEntityMap(CnName = "品牌", EnName = "brandName") + @ExportEntityMap(CnName = "数量*", EnName = "num") + private String num; + @ExportEntityMap(CnName = "品牌*", EnName = "brandName") private String brandName; - @ExportEntityMap(CnName = "厂家", EnName = "manufacturerName") + @ExportEntityMap(CnName = "厂家*", EnName = "manufacturerName") private String manufacturerName; - @ExportEntityMap(CnName = "供应商", EnName = "supplierName") + @ExportEntityMap(CnName = "供应商*", EnName = "supplierName") private String supplierName; - @ExportEntityMap(CnName = "销售指导价", EnName = "saleGuidePrice") + @ExportEntityMap(CnName = "销售指导价*", EnName = "saleGuidePrice") private String saleGuidePrice; - @ExportEntityMap(CnName = "入库单价", EnName = "inCost") + @ExportEntityMap(CnName = "入库单价*", EnName = "inCost") private String inCost; - @ExportEntityMap(CnName = "税率", EnName = "taxRate") + @ExportEntityMap(CnName = "税率*", EnName = "taxRate") private String taxRate; - @ExportEntityMap(CnName = "首次入库日期", EnName = "firstInDate") + @ExportEntityMap(CnName = "首次入库日期*", EnName = "firstInDate") private String firstInDate; - @ExportEntityMap(CnName = "商品类别", EnName = "goodsTypeName") + @ExportEntityMap(CnName = "商品类别*", EnName = "goodsTypeName") private String goodsTypeName; - @ExportEntityMap(CnName = "是否为一物一码", EnName = "isYwym") + @ExportEntityMap(CnName = "是否为一物一码*", EnName = "isYwym") private String isYwym; + + @ExportEntityMap(CnName = "商品spuSid(禁止修改)", EnName = "goodsSpuSid") + private String goodsSpuSid; + @ExportEntityMap(CnName = "商品skuSid(禁止修改)", EnName = "goodsSkuSid") + private String goodsSkuSid; + @ExportEntityMap(CnName = "商品sku名称(禁止修改)", EnName = "goodsSkuTitle") + private String goodsSkuTitle; + @ExportEntityMap(CnName = "品牌sid(禁止修改)", EnName = "brandSid") + private String brandSid; + @ExportEntityMap(CnName = "厂家sid(禁止修改)", EnName = "manufacturerSid") + private String manufacturerSid; + @ExportEntityMap(CnName = "商品类别sid(禁止修改)", EnName = "goodsTypeSid") + private String goodsTypeSid; + @ExportEntityMap(CnName = "商品类别编码(禁止修改)", EnName = "goodsTypeCode") + private String goodsTypeCode; } diff --git a/yxt-base-biz/src/main/java/com/yxt/base/biz/base/basegoodssku/BaseGoodsSkuMapper.xml b/yxt-base-biz/src/main/java/com/yxt/base/biz/base/basegoodssku/BaseGoodsSkuMapper.xml index 117a386d9a..3b1d29fa97 100644 --- a/yxt-base-biz/src/main/java/com/yxt/base/biz/base/basegoodssku/BaseGoodsSkuMapper.xml +++ b/yxt-base-biz/src/main/java/com/yxt/base/biz/base/basegoodssku/BaseGoodsSkuMapper.xml @@ -114,7 +114,14 @@ brand.brandName, spu.manufacturerName, t.goodsTypeName, - IF(t.isGoodsID = 0, '否', '是') AS isYwym + IF(t.isGoodsID = 0, '否', '是') AS isYwym, + spu.sid AS goodsSpuSid, + sku.sid AS goodsSkuSid, + sku.title AS goodsSkuTitle, + spu.brandSid, + spu.manufacturerSid, + t.sid AS goodsTypeSid, + t.goodsTypeCode FROM base_goods_sku sku LEFT JOIN base_goods_spu spu ON sku.goodsSpuSid = spu.sid diff --git a/yxt-base-biz/src/main/java/com/yxt/base/biz/base/basegoodsspu/BaseGoodsSpuMapper.java b/yxt-base-biz/src/main/java/com/yxt/base/biz/base/basegoodsspu/BaseGoodsSpuMapper.java index c3141f7ab6..7e75235256 100644 --- a/yxt-base-biz/src/main/java/com/yxt/base/biz/base/basegoodsspu/BaseGoodsSpuMapper.java +++ b/yxt-base-biz/src/main/java/com/yxt/base/biz/base/basegoodsspu/BaseGoodsSpuMapper.java @@ -24,4 +24,6 @@ public interface BaseGoodsSpuMapper extends BaseMapper { BaseGoodsSpu checkForInsert(@Param("goodsCode")String goodsCode, @Param("deptSid")String deptSid); BaseGoodsSpu checkForUpdate(@Param("goodsCode")String goodsCode,@Param("useOrgSid") String useOrgSid, @Param("sid")String sid); + + int selByCodeAndDept(@Param("code") String code,@Param("deptSid") String deptSid); } diff --git a/yxt-base-biz/src/main/java/com/yxt/base/biz/base/basegoodsspu/BaseGoodsSpuMapper.xml b/yxt-base-biz/src/main/java/com/yxt/base/biz/base/basegoodsspu/BaseGoodsSpuMapper.xml index c35556b94e..96727d2451 100644 --- a/yxt-base-biz/src/main/java/com/yxt/base/biz/base/basegoodsspu/BaseGoodsSpuMapper.xml +++ b/yxt-base-biz/src/main/java/com/yxt/base/biz/base/basegoodsspu/BaseGoodsSpuMapper.xml @@ -10,7 +10,8 @@ FROM LEFT JOIN base_goods_sku AS k ON p.sid = k.goodsSpuSid LEFT JOIN base_goods_sku_extend AS e ON k.sid = e.goodsSkuSid WHERE - p.sid = #{sid} + p.sid = + #{sid} @@ -87,4 +88,11 @@ WHERE and isDelete = 0 and sid != #{sid} + + diff --git a/yxt-base-biz/src/main/java/com/yxt/base/biz/base/basegoodsspu/BaseGoodsSpuService.java b/yxt-base-biz/src/main/java/com/yxt/base/biz/base/basegoodsspu/BaseGoodsSpuService.java index d9cfff3f47..55c34d2069 100644 --- a/yxt-base-biz/src/main/java/com/yxt/base/biz/base/basegoodsspu/BaseGoodsSpuService.java +++ b/yxt-base-biz/src/main/java/com/yxt/base/biz/base/basegoodsspu/BaseGoodsSpuService.java @@ -563,4 +563,10 @@ public class BaseGoodsSpuService extends MybatisBaseService selByCodeAndDept(String code, String deptSid) { + ResultBean rb = ResultBean.fireFail(); + int i = baseMapper.selByCodeAndDept(code,deptSid); + return rb.success().setData(i); + } } diff --git a/yxt-wms-biz/src/main/java/com/yxt/wms/apiadmin/inventroy/WmsInitialRest.java b/yxt-wms-biz/src/main/java/com/yxt/wms/apiadmin/inventroy/WmsInitialRest.java index 44753d0e92..7267049ed0 100644 --- a/yxt-wms-biz/src/main/java/com/yxt/wms/apiadmin/inventroy/WmsInitialRest.java +++ b/yxt-wms-biz/src/main/java/com/yxt/wms/apiadmin/inventroy/WmsInitialRest.java @@ -25,11 +25,585 @@ *********************************************************/ package com.yxt.wms.apiadmin.inventroy; +import cn.hutool.core.bean.BeanUtil; +import cn.hutool.core.date.DateUtil; +import com.yxt.common.core.result.ResultBean; +import com.yxt.wms.biz.inventory.wmsinitial.ReturnExcelInfo; +import com.yxt.wms.biz.inventory.wmsinitial.WmsInitial; +import com.yxt.wms.biz.inventory.wmsinitial.WmsInitialExcelInfo; +import com.yxt.wms.biz.inventory.wmsinitial.WmsInitialService; +import com.yxt.wms.biz.inventory.wmsinitialdetail.WmsInitialDetail; +import com.yxt.wms.biz.inventory.wmsinitialdetail.WmsInitialDetailService; +import com.yxt.wms.feign.base.basegoodspu.BaseGoodsSpuFeign; +import com.yxt.wms.feign.base.basegoodssku.BaseGoodsSkuDetailsVo; +import com.yxt.wms.feign.base.basegoodssku.BaseGoodsSkuFeign; +import com.yxt.wms.feign.portal.sysorganization.SysOrganizationFeign; +import com.yxt.wms.feign.portal.sysorganization.SysOrganizationVo; +import com.yxt.wms.feign.portal.sysstafforg.SysStaffOrgFeign; +import com.yxt.wms.feign.portal.sysuser.SysUserFeign; +import com.yxt.wms.feign.portal.sysuser.SysUserVo; +import com.yxt.wms.utils.Rule; import io.swagger.annotations.Api; +import io.swagger.annotations.ApiOperation; +import org.apache.commons.lang3.StringUtils; +import org.apache.poi.hssf.usermodel.HSSFWorkbook; +import org.apache.poi.ss.usermodel.Cell; +import org.apache.poi.ss.usermodel.Row; +import org.apache.poi.ss.usermodel.Sheet; +import org.apache.poi.ss.usermodel.Workbook; +import org.apache.poi.xssf.usermodel.XSSFWorkbook; +import org.springframework.beans.factory.annotation.Autowired; import org.springframework.web.bind.annotation.*; +import org.springframework.web.multipart.MultipartFile; + +import javax.annotation.Resource; +import java.io.IOException; +import java.io.InputStream; +import java.math.BigDecimal; +import java.text.ParseException; +import java.util.*; +import java.util.regex.Pattern; @Api(tags = "期初上架") @RestController @RequestMapping("v1/wmsinitial") public class WmsInitialRest { + + @Autowired + private BaseGoodsSpuFeign baseGoodsSpuFeign; + @Autowired + private SysOrganizationFeign sysOrganizationFeign; + @Autowired + private SysStaffOrgFeign sysStaffOrgFeign; + @Autowired + private SysUserFeign sysUserFeign; + @Autowired + private WmsInitialService wmsInitialService; + @Autowired + private WmsInitialDetailService wmsInitialDetailService; + @Resource + private BaseGoodsSkuFeign baseGoodsSkuFeign; + + @PostMapping("/getExcelInfo") + @ResponseBody + @ApiOperation(value = "导入") + public ResultBean getExcelInfo(@RequestParam(value = "fileName") String fileName, @RequestParam(value = "file") MultipartFile file, @RequestParam("userSid") String userSid, @RequestParam("orgPath") String orgPath) throws IOException, ParseException { + String deptName = ""; + String deptSid = ""; + String useOrgSid = ""; + WmsInitial wmsInitial = new WmsInitial(); + List split = Arrays.asList(orgPath.split("/")); + if (split.size() > 1) { + //获取本级sid获取本级部门信息 + SysOrganizationVo sysOrganization = sysOrganizationFeign.fetchBySid(split.get(split.size() - 2)).getData(); + SysOrganizationVo sysOrganization1 = sysOrganizationFeign.fetchBySid(split.get(split.size() - 1)).getData(); + deptName = sysOrganization.getName() + "/" + sysOrganization1.getName(); + deptName = sysOrganization1.getName(); + deptSid = sysOrganization1.getSid(); + } else { + SysOrganizationVo sysOrganization = sysOrganizationFeign.fetchBySid(split.get(0)).getData(); + deptName = sysOrganization.getName(); + deptName = sysOrganization.getName(); + deptSid = sysOrganization.getSid(); + } + wmsInitial.setDeptSid(deptSid); + wmsInitial.setDeptName(deptName); + useOrgSid = sysStaffOrgFeign.getOrgSidByPath(orgPath).getData(); + //创建组织使用组织 + ResultBean organizationResultBean = sysOrganizationFeign.fetchBySid(useOrgSid); + if (organizationResultBean.getData() != null) { + wmsInitial.setUseOrgSid(useOrgSid); + wmsInitial.setUseOrgName(organizationResultBean.getData().getName()); + } + SysUserVo userVo = sysUserFeign.fetchBySid(userSid).getData(); + wmsInitial.setCreateBySid(userSid); + wmsInitial.setCreateByName(userVo.getName()); + if (!fileName.matches("^.+\\.(?i)(xls)$") && !fileName.matches("^.+\\.(?i)(xlsx)$")) { + return ResultBean.fireFail().setMsg("上传文件不正确"); + } + int[] resultCell = new int[]{0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21}; + List resultList = new ArrayList<>(); + boolean isExcel2003 = true; + if (fileName.matches("^.+\\.(?i)(xlsx)$")) { + isExcel2003 = false; + } + InputStream is = file.getInputStream(); + Workbook wb = null; + if (isExcel2003) { + wb = new HSSFWorkbook(is); + } else { + wb = new XSSFWorkbook(is); + } + Sheet sheet = wb.getSheetAt(0); + ReturnExcelInfo importReturn = getSheetVal(sheet, resultCell, deptSid); + if (StringUtils.isNotBlank(importReturn.getCheckInfo())) { + return ResultBean.fireFail().setMsg(importReturn.getCheckInfo()); + } + wmsInitialService.save(wmsInitial); + resultList = importReturn.getInfos(); + System.out.println("结果是--->" + resultList); + try { + for (WmsInitialExcelInfo wmsInitialExcelInfo : resultList) { + if ("是".equals(wmsInitialExcelInfo.getIsYwym())) { + int num = new BigDecimal(wmsInitialExcelInfo.getNum()).intValue(); + for (int i = 0; i < num; i++) { + WmsInitialDetail wmsInitialDetail = new WmsInitialDetail(); + wmsInitialDetail.setCreateBySid(userSid); + wmsInitialDetail.setBillSid(wmsInitial.getSid()); + wmsInitialDetail.setGoodsID(getGoodsId(wmsInitialExcelInfo.getGoodsSkuSid())); + wmsInitialDetail.setGoodsSpuSid(wmsInitialExcelInfo.getGoodsSpuSid()); + wmsInitialDetail.setGoodsSpuName(wmsInitialExcelInfo.getGoodsSpuName()); + wmsInitialDetail.setGoodsSkuSid(wmsInitialExcelInfo.getGoodsSkuSid()); + wmsInitialDetail.setGoodsSkuTitle(wmsInitialExcelInfo.getGoodsSkuTitle()); + wmsInitialDetail.setGoodsSkuCode(wmsInitialExcelInfo.getGoodsSkuCode()); + wmsInitialDetail.setGoodsSkuOwnSpec(wmsInitialExcelInfo.getGoodsSkuOwnSpec()); + wmsInitialDetail.setUnit(wmsInitialExcelInfo.getUnit()); + wmsInitialDetail.setNum(new BigDecimal("1")); + wmsInitialDetail.setBrandSid(wmsInitialExcelInfo.getBrandSid()); + wmsInitialDetail.setBrandName(wmsInitialExcelInfo.getBrandName()); + wmsInitialDetail.setManufacturerSid(wmsInitialExcelInfo.getManufacturerSid()); + wmsInitialDetail.setManufacturerName(wmsInitialExcelInfo.getManufacturerName()); + wmsInitialDetail.setSupplierName(wmsInitialExcelInfo.getSupplierName()); + wmsInitialDetail.setSaleGuidePrice(new BigDecimal(wmsInitialExcelInfo.getSaleGuidePrice())); + wmsInitialDetail.setInCost(new BigDecimal(wmsInitialExcelInfo.getInCost())); + wmsInitialDetail.setTaxRate(wmsInitialExcelInfo.getTaxRate()); + String firstInDate = ""; + if (isNumber(wmsInitialExcelInfo.getFirstInDate())) { + Date javaDate = new Date((long) ((Double.valueOf(wmsInitialExcelInfo.getFirstInDate()) - 25569) * 86400 * 1000)); + firstInDate = DateUtil.formatDate(javaDate); + } else { + firstInDate = wmsInitialExcelInfo.getFirstInDate(); + } + wmsInitialDetail.setFirstInDate(DateUtil.parseDate(firstInDate)); + wmsInitialDetail.setGoodsTypeSid(wmsInitialExcelInfo.getGoodsTypeSid()); + wmsInitialDetail.setGoodsTypeCode(wmsInitialExcelInfo.getGoodsTypeCode()); + wmsInitialDetail.setGoodsTypeName(wmsInitialExcelInfo.getGoodsTypeName()); + wmsInitialDetail.setIsYwym(1); + wmsInitialDetailService.save(wmsInitialDetail); + } + } else { + WmsInitialDetail wmsInitialDetail = new WmsInitialDetail(); + wmsInitialDetail.setCreateBySid(userSid); + wmsInitialDetail.setBillSid(wmsInitial.getSid()); + wmsInitialDetail.setGoodsID(getGoodsId(wmsInitialExcelInfo.getGoodsSkuSid())); + wmsInitialDetail.setGoodsSpuSid(wmsInitialExcelInfo.getGoodsSpuSid()); + wmsInitialDetail.setGoodsSpuName(wmsInitialExcelInfo.getGoodsSpuName()); + wmsInitialDetail.setGoodsSkuSid(wmsInitialExcelInfo.getGoodsSkuSid()); + wmsInitialDetail.setGoodsSkuTitle(wmsInitialExcelInfo.getGoodsSkuTitle()); + wmsInitialDetail.setGoodsSkuCode(wmsInitialExcelInfo.getGoodsSkuCode()); + wmsInitialDetail.setGoodsSkuOwnSpec(wmsInitialExcelInfo.getGoodsSkuOwnSpec()); + wmsInitialDetail.setUnit(wmsInitialExcelInfo.getUnit()); + wmsInitialDetail.setNum(new BigDecimal(wmsInitialExcelInfo.getNum())); + wmsInitialDetail.setBrandSid(wmsInitialExcelInfo.getBrandSid()); + wmsInitialDetail.setBrandName(wmsInitialExcelInfo.getBrandName()); + wmsInitialDetail.setManufacturerSid(wmsInitialExcelInfo.getManufacturerSid()); + wmsInitialDetail.setManufacturerName(wmsInitialExcelInfo.getManufacturerName()); + wmsInitialDetail.setSupplierName(wmsInitialExcelInfo.getSupplierName()); + wmsInitialDetail.setSaleGuidePrice(new BigDecimal(wmsInitialExcelInfo.getSaleGuidePrice())); + wmsInitialDetail.setInCost(new BigDecimal(wmsInitialExcelInfo.getInCost())); + wmsInitialDetail.setTaxRate(wmsInitialExcelInfo.getTaxRate()); + String firstInDate = ""; + if (isNumber(wmsInitialExcelInfo.getFirstInDate())) { + Date javaDate = new Date((long) ((Double.valueOf(wmsInitialExcelInfo.getFirstInDate()) - 25569) * 86400 * 1000)); + firstInDate = DateUtil.formatDate(javaDate); + } else { + firstInDate = wmsInitialExcelInfo.getFirstInDate(); + } + wmsInitialDetail.setFirstInDate(DateUtil.parseDate(firstInDate)); + wmsInitialDetail.setGoodsTypeSid(wmsInitialExcelInfo.getGoodsTypeSid()); + wmsInitialDetail.setGoodsTypeCode(wmsInitialExcelInfo.getGoodsTypeCode()); + wmsInitialDetail.setGoodsTypeName(wmsInitialExcelInfo.getGoodsTypeName()); + wmsInitialDetail.setIsYwym(0); + wmsInitialDetailService.save(wmsInitialDetail); + } + } + return ResultBean.fireSuccess().setMsg("数据导入成功"); + } catch (Exception e) { + e.printStackTrace(); + return ResultBean.fireFail().setMsg("数据导入失败"); + } + } + + @PostMapping("/generateGoodsTag") + @ResponseBody + @ApiOperation(value = "生成商品标签") + public ResultBean generateGoodsTag(@RequestBody String[] sids){ + return wmsInitialDetailService.generateGoodsTag(sids); + } + + private ReturnExcelInfo getSheetVal(Sheet sheet, int[] resultCell, String deptSid) { + ReturnExcelInfo importReturn = new ReturnExcelInfo(); + List importVoList = new ArrayList<>(); + Set checkWord = new HashSet<>(); + for (int r = 1; r <= sheet.getLastRowNum(); r++) { + Row row = sheet.getRow(r); + if (row == null) { + continue; + } + WmsInitialExcelInfo importVo = new WmsInitialExcelInfo(); + int physicalNumberOfCells = row.getPhysicalNumberOfCells(); + if (physicalNumberOfCells < 22) { + physicalNumberOfCells = 22; + } + for (int i = 0; i < physicalNumberOfCells; i++) { + String trim = new String(); + try { + trim = getCellVal(row.getCell(i)).toString().trim(); + if (StringUtils.isBlank(trim)) { + NullPointerException nullPointerException = new NullPointerException(); + } + String temp = getCellVal(row.getCell(i)).toString().trim(); + for (int j = 0; j < resultCell.length; j++) { + if (i == resultCell[j]) { + switch (i) { + case 1: + importVo.setGoodsSpuName(temp); + break; + case 2: + importVo.setGoodsSkuCode(temp); + break; + case 3: + importVo.setGoodsSkuOwnSpec(temp); + break; + case 4: + importVo.setUnit(temp); + break; + case 5: + importVo.setNum(temp); + break; + case 6: + importVo.setBrandName(temp); + break; + case 7: + importVo.setManufacturerName(temp); + break; + case 8: + importVo.setSupplierName(temp); + break; + case 9: + importVo.setSaleGuidePrice(temp); + break; + case 10: + importVo.setInCost(temp); + break; + case 11: + importVo.setTaxRate(temp); + break; + case 12: + importVo.setFirstInDate(temp); + break; + case 13: + importVo.setGoodsTypeName(temp); + break; + case 14: + importVo.setIsYwym(temp); + break; + case 15: + importVo.setGoodsSpuSid(temp); + break; + case 16: + importVo.setGoodsSkuSid(temp); + break; + case 17: + importVo.setGoodsSkuTitle(temp); + break; + case 18: + importVo.setBrandSid(temp); + break; + case 19: + importVo.setManufacturerSid(temp); + break; + case 20: + importVo.setGoodsTypeSid(temp); + break; + case 21: + importVo.setGoodsTypeCode(temp); + break; + default: + break; + } + } else { + continue; + } + } + } catch (Exception e) { + if (StringUtils.isBlank(trim)) { + String word = new String(); + switch (i) { + case 1: + word = "商品spu名称"; + break; + case 2: + word = "图号"; + break; + case 3: + word = "规格型号"; + break; + case 4: + word = "单位"; + break; + case 5: + word = "数量"; + break; + case 6: + word = "品牌"; + break; + case 7: + word = "厂家"; + break; + case 8: + word = "供应商"; + break; + case 9: + word = "销售指导价"; + break; + case 10: + word = "入库单价"; + break; + case 11: + word = "税率"; + break; + case 12: + word = "首次入库日期"; + break; + case 13: + word = "商品类别"; + break; + case 14: + word = "是否为一物一码"; + break; + case 15: + word = "商品spuSid"; + break; + case 16: + word = "商品skuSid"; + break; + case 17: + word = "商品sku名称"; + break; + case 18: + word = "品牌sid"; + break; + case 19: + word = "厂家sid"; + break; + case 20: + word = "商品类别sid"; + break; + case 21: + word = "商品类别编码"; + break; + default: + break; + } + continue; + } + } + } + importVoList.add(importVo); + } + if (!importVoList.isEmpty()) { + for (WmsInitialExcelInfo excelInfo : importVoList) { + Integer i = baseGoodsSpuFeign.selByCodeAndDept(excelInfo.getGoodsSkuCode(), deptSid).getData(); + if (i == 0) { + checkWord.add("图号" + excelInfo.getGoodsSkuCode() + "不存在"); + break; + } + if (StringUtils.isBlank(excelInfo.getGoodsSpuName())) { + checkWord.add("商品名称不能为空"); + break; + } + if (StringUtils.isBlank(excelInfo.getGoodsSkuOwnSpec())) { + checkWord.add("规格型号不能为空"); + break; + } + if (StringUtils.isBlank(excelInfo.getUnit())) { + checkWord.add("单位不能为空"); + break; + } + if (StringUtils.isBlank(excelInfo.getNum())) { + checkWord.add("数量不能为空"); + break; + } + if (StringUtils.isNotBlank(excelInfo.getNum())) { + String num = excelInfo.getNum(); + Pattern pattern = Pattern.compile("^(\\-|\\+)?\\d+(\\.\\d+)?$"); + boolean matches = pattern.matcher(num).matches(); + if (!matches) { + checkWord.add("数量必须为数字"); + break; + } + } + if (StringUtils.isBlank(excelInfo.getBrandName())) { + checkWord.add("品牌不能为空"); + break; + } + if (StringUtils.isBlank(excelInfo.getManufacturerName())) { + checkWord.add("厂家不能为空"); + break; + } + if (StringUtils.isBlank(excelInfo.getSupplierName())) { + checkWord.add("供应商不能为空"); + break; + } + if (StringUtils.isBlank(excelInfo.getSaleGuidePrice())) { + checkWord.add("销售指导价不能为空"); + break; + } + if (StringUtils.isNotBlank(excelInfo.getSaleGuidePrice())) { + String saleGuidePrice = excelInfo.getSaleGuidePrice(); + Pattern pattern = Pattern.compile("^(\\-|\\+)?\\d+(\\.\\d+)?$"); + boolean matches = pattern.matcher(saleGuidePrice).matches(); + if (!matches) { + checkWord.add("销售指导价必须为数字"); + break; + } + } + if (StringUtils.isBlank(excelInfo.getInCost())) { + checkWord.add("入库单价不能为空"); + break; + } + if (StringUtils.isNotBlank(excelInfo.getInCost())) { + String inCost = excelInfo.getInCost(); + Pattern pattern = Pattern.compile("^(\\-|\\+)?\\d+(\\.\\d+)?$"); + boolean matches = pattern.matcher(inCost).matches(); + if (!matches) { + checkWord.add("入库单价必须为数字"); + break; + } + } + if (StringUtils.isBlank(excelInfo.getTaxRate())) { + checkWord.add("税率不能为空"); + break; + } + if (StringUtils.isNotBlank(excelInfo.getFirstInDate())) { + String firstInDate = ""; + if (isNumber(excelInfo.getFirstInDate())) { + Date javaDate = new Date((long) ((Double.valueOf(excelInfo.getFirstInDate()) - 25569) * 86400 * 1000)); + firstInDate = DateUtil.formatDate(javaDate); + } else { + firstInDate = excelInfo.getFirstInDate(); + } + String[] split = firstInDate.split("-"); + if (split.length != 3) { + checkWord.add("图号" + excelInfo.getGoodsSkuCode() + "导入的首次入库日期填写不正确"); + break; + } else if (!isFourDigitNumber(split[0]) || !isTwoDigitNumber(split[1]) || !isTwoDigitNumber(split[2])) { + checkWord.add("图号" + excelInfo.getGoodsSkuCode() + "导入的首次入库日期填写不正确"); + break; + } + } + if (StringUtils.isBlank(excelInfo.getGoodsTypeName())) { + checkWord.add("商品类别不能为空"); + break; + } + if (StringUtils.isBlank(excelInfo.getIsYwym())) { + checkWord.add("是否为一物一码不能为空"); + break; + } + } + } + StringBuffer sbcheck1 = new StringBuffer(); + if (!checkWord.isEmpty()) { + for (String s : checkWord) { + if (StringUtils.isBlank(s)) { + continue; + } + sbcheck1.append(s).append(";"); + } + } + if (sbcheck1.length() > 0) { + sbcheck1.delete(sbcheck1.length() - 1, sbcheck1.length()); + importReturn.setCheckInfo(sbcheck1.toString()); + importReturn.setInfos(new ArrayList<>()); + return importReturn; + } + importReturn.setInfos(importVoList); + return importReturn; + } + + public Object getCellVal(Cell cell) { + Object obj = null; + if (cell != null) { + switch (cell.getCellTypeEnum()) { + case BOOLEAN: + obj = cell.getBooleanCellValue(); + break; + case ERROR: + obj = cell.getErrorCellValue(); + break; + case NUMERIC: + obj = cell.getNumericCellValue(); + break; + case STRING: + obj = cell.getStringCellValue(); + break; + default: + break; + } + } + return obj; + } + + public boolean isFourDigitNumber(String input) { + // 判断输入是否为数字 + try { + int number = Integer.parseInt(input); + } catch (NumberFormatException e) { + return false; + } + // 判断输入是否为四位数 + if (input.length() != 4) { + return false; + } + return true; + } + + public boolean isTwoDigitNumber(String input) { + // 判断输入是否为数字 + try { + int number = Integer.parseInt(input); + } catch (NumberFormatException e) { + return false; + } + // 判断输入是否为二位数 + if (input.length() != 2) { + return false; + } + return true; + } + + public boolean isNumber(String input) { + // 判断输入是否为数字 + try { + double v = Double.parseDouble(input); + } catch (NumberFormatException e) { + return false; + } + return true; + } + + /** + * 获取商品唯一的goodsID + * + * @param goodsSkuSid + * @return + */ + private String getGoodsId(String goodsSkuSid) { + String goodsId = ""; + ResultBean resultBean = baseGoodsSkuFeign.getDetails(goodsSkuSid); + if (resultBean.getSuccess()) { + BaseGoodsSkuDetailsVo baseGoodsSkuDetailsVo = resultBean.getData(); + goodsId = baseGoodsSkuDetailsVo.getGoodsCode(); + String date = DateUtil.format(DateUtil.date(), "yyyyMM"); + goodsId = goodsId + date; + String i = wmsInitialDetailService.selectNum(goodsId); + if (com.yxt.common.base.utils.StringUtils.isNotBlank(i)) { + goodsId = Rule.getBillNo(goodsId, Integer.valueOf(i).intValue()); + } else { + goodsId = Rule.getBillNo(goodsId, 0); + } + } + return goodsId; + } } diff --git a/yxt-wms-biz/src/main/java/com/yxt/wms/biz/inventory/wmsinitial/ReturnExcelInfo.java b/yxt-wms-biz/src/main/java/com/yxt/wms/biz/inventory/wmsinitial/ReturnExcelInfo.java new file mode 100644 index 0000000000..55de803d0c --- /dev/null +++ b/yxt-wms-biz/src/main/java/com/yxt/wms/biz/inventory/wmsinitial/ReturnExcelInfo.java @@ -0,0 +1,12 @@ +package com.yxt.wms.biz.inventory.wmsinitial; + +import lombok.Data; + +import java.util.ArrayList; +import java.util.List; + +@Data +public class ReturnExcelInfo { + private String checkInfo; + private List infos = new ArrayList<>(); +} \ No newline at end of file diff --git a/yxt-wms-biz/src/main/java/com/yxt/wms/biz/inventory/wmsinitial/WmsInitialExcelInfo.java b/yxt-wms-biz/src/main/java/com/yxt/wms/biz/inventory/wmsinitial/WmsInitialExcelInfo.java new file mode 100644 index 0000000000..4ab5877e13 --- /dev/null +++ b/yxt-wms-biz/src/main/java/com/yxt/wms/biz/inventory/wmsinitial/WmsInitialExcelInfo.java @@ -0,0 +1,53 @@ +package com.yxt.wms.biz.inventory.wmsinitial; + +import com.yxt.common.core.utils.ExportEntityMap; +import io.swagger.annotations.ApiModelProperty; +import lombok.Data; + +@Data +public class WmsInitialExcelInfo { + + @ApiModelProperty("商品spu名称") + private String goodsSpuName; + @ApiModelProperty("图号") + private String goodsSkuCode; + @ApiModelProperty("规格型号") + private String goodsSkuOwnSpec; + @ApiModelProperty("单位") + private String unit; + @ApiModelProperty("数量") + private String num; + @ApiModelProperty("品牌") + private String brandName; + @ApiModelProperty("厂家") + private String manufacturerName; + @ApiModelProperty("供应商") + private String supplierName; + @ApiModelProperty("销售指导价") + private String saleGuidePrice; + @ApiModelProperty("入库单价") + private String inCost; + @ApiModelProperty("税率") + private String taxRate; + @ApiModelProperty("首次入库日期") + private String firstInDate; + @ApiModelProperty("商品类别") + private String goodsTypeName; + @ApiModelProperty("是否为一物一码") + private String isYwym; + @ApiModelProperty("商品spuSid") + private String goodsSpuSid; + @ApiModelProperty("商品skuSid") + private String goodsSkuSid; + @ApiModelProperty("商品sku名称") + private String goodsSkuTitle; + @ApiModelProperty("品牌sid") + private String brandSid; + @ApiModelProperty("厂家sid") + private String manufacturerSid; + @ApiModelProperty("商品类别sid") + private String goodsTypeSid; + @ApiModelProperty("商品类别编码") + private String goodsTypeCode; + +} diff --git a/yxt-wms-biz/src/main/java/com/yxt/wms/biz/inventory/wmsinitialdetail/WmsInitialDetail.java b/yxt-wms-biz/src/main/java/com/yxt/wms/biz/inventory/wmsinitialdetail/WmsInitialDetail.java index 7bfa2c421f..3287d6c322 100644 --- a/yxt-wms-biz/src/main/java/com/yxt/wms/biz/inventory/wmsinitialdetail/WmsInitialDetail.java +++ b/yxt-wms-biz/src/main/java/com/yxt/wms/biz/inventory/wmsinitialdetail/WmsInitialDetail.java @@ -42,13 +42,15 @@ public class WmsInitialDetail extends BaseEntity { @ApiModelProperty("单据sid") private String billSid; // 单据sid + @ApiModelProperty("商品ID") + private String goodsID; @ApiModelProperty("商品spuSid") private String goodsSpuSid; // 商品spuSid @ApiModelProperty("商品spu名称") private String goodsSpuName; // 商品spu名称 @ApiModelProperty("商品skuSid") private String goodsSkuSid; // 商品skuSid - @ApiModelProperty("商品Sku名称") + @ApiModelProperty("商品sku名称") private String goodsSkuTitle; // 商品Sku名称 @ApiModelProperty("图号") private String goodsSkuCode; // 图号 @@ -66,8 +68,6 @@ public class WmsInitialDetail extends BaseEntity { private String manufacturerSid; // 厂家sid @ApiModelProperty("厂家名称") private String manufacturerName; // 厂家名称 - @ApiModelProperty("供应商sid") - private String supplierSid; // 供应商sid @ApiModelProperty("供应商名称") private String supplierName; // 供应商名称 @ApiModelProperty("销售指导价") @@ -76,7 +76,7 @@ public class WmsInitialDetail extends BaseEntity { private BigDecimal inCost; // 入库单价 @ApiModelProperty("税率") private String taxRate; // 税率 - @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss", timezone = "GMT+8") + @JsonFormat(pattern = "yyyy-MM-dd", timezone = "GMT+8") @ApiModelProperty("首次入库日期") private Date firstInDate; // 首次入库日期 @ApiModelProperty("商品类别sid") diff --git a/yxt-wms-biz/src/main/java/com/yxt/wms/biz/inventory/wmsinitialdetail/WmsInitialDetailDetailsVo.java b/yxt-wms-biz/src/main/java/com/yxt/wms/biz/inventory/wmsinitialdetail/WmsInitialDetailDetailsVo.java deleted file mode 100644 index 2668d5ab16..0000000000 --- a/yxt-wms-biz/src/main/java/com/yxt/wms/biz/inventory/wmsinitialdetail/WmsInitialDetailDetailsVo.java +++ /dev/null @@ -1,93 +0,0 @@ -/********************************************************* - ********************************************************* - ******************** ******************* - ************* ************ - ******* _oo0oo_ ******* - *** o8888888o *** - * 88" . "88 * - * (| -_- |) * - * 0\ = /0 * - * ___/`---'\___ * - * .' \\| |// '. * - * / \\||| : |||// \ * - * / _||||| -:- |||||- \ * - * | | \\\ - /// | | * - * | \_| ''\---/'' |_/ | * - * \ .-\__ '-' ___/-. / * - * ___'. .' /--.--\ `. .'___ * - * ."" '< `.___\_<|>_/___.' >' "". * - * | | : `- \`.;`\ _ /`;.`/ - ` : | | * - * \ \ `_. \_ __\ /__ _/ .-` / / * - * =====`-.____`.___ \_____/___.-`___.-'===== * - * `=---=' * - * ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ * - *********__佛祖保佑__永无BUG__验收通过__钞票多多__********* - *********************************************************/ -package com.yxt.wms.biz.inventory.wmsinitialdetail; - -import com.yxt.common.core.vo.Vo; -import com.fasterxml.jackson.annotation.JsonFormat; -import java.math.BigDecimal; -import java.util.Date; -import io.swagger.annotations.ApiModel; -import io.swagger.annotations.ApiModelProperty; -import lombok.Data; - -@Data -@ApiModel(value = "期初上架-明细 视图数据详情", description = "期初上架-明细 视图数据详情") -public class WmsInitialDetailDetailsVo implements Vo { - - private String sid; // sid - - @ApiModelProperty("单据sid") - private String billSid; // 单据sid - @ApiModelProperty("商品spuSid") - private String goodsSpuSid; // 商品spuSid - @ApiModelProperty("商品spu名称") - private String goodsSpuName; // 商品spu名称 - @ApiModelProperty("商品skuSid") - private String goodsSkuSid; // 商品skuSid - @ApiModelProperty("商品Sku名称") - private String goodsSkuTitle; // 商品Sku名称 - @ApiModelProperty("图号") - private String goodsSkuCode; // 图号 - @ApiModelProperty("规格型号") - private String goodsSkuOwnSpec; // 规格型号 - @ApiModelProperty("单位") - private String unit; // 单位 - @ApiModelProperty("数量") - private BigDecimal num; // 数量 - @ApiModelProperty("品牌sid") - private String brandSid; // 品牌sid - @ApiModelProperty("品牌名称") - private String brandName; // 品牌名称 - @ApiModelProperty("厂家sid") - private String manufacturerSid; // 厂家sid - @ApiModelProperty("厂家名称") - private String manufacturerName; // 厂家名称 - @ApiModelProperty("供应商sid") - private String supplierSid; // 供应商sid - @ApiModelProperty("供应商名称") - private String supplierName; // 供应商名称 - @ApiModelProperty("销售指导价") - private BigDecimal saleGuidePrice; // 销售指导价 - @ApiModelProperty("入库单价") - private BigDecimal inCost; // 入库单价 - @ApiModelProperty("税率") - private String taxRate; // 税率 - @JsonFormat(pattern = "yyyy-MM-dd", timezone = "GMT+8") - @ApiModelProperty("首次入库日期") - private Date firstInDate; - @ApiModelProperty("商品类别sid") - private String goodsTypeSid; // 商品类别sid - @ApiModelProperty("商品类别编码") - private String goodsTypeCode; // 商品类别编码 - @ApiModelProperty("商品类别名称") - private String goodsTypeName; // 商品类别名称 - @ApiModelProperty("已上架数量") - private BigDecimal listNum; // 已上架数量 - @ApiModelProperty("是否为一物一码") - private Integer isYwym; - @ApiModelProperty("是否已上传商品标签") - private Integer isScbq; -} \ No newline at end of file diff --git a/yxt-wms-biz/src/main/java/com/yxt/wms/biz/inventory/wmsinitialdetail/WmsInitialDetailDto.java b/yxt-wms-biz/src/main/java/com/yxt/wms/biz/inventory/wmsinitialdetail/WmsInitialDetailDto.java deleted file mode 100644 index e9c8900632..0000000000 --- a/yxt-wms-biz/src/main/java/com/yxt/wms/biz/inventory/wmsinitialdetail/WmsInitialDetailDto.java +++ /dev/null @@ -1,95 +0,0 @@ -/********************************************************* - ********************************************************* - ******************** ******************* - ************* ************ - ******* _oo0oo_ ******* - *** o8888888o *** - * 88" . "88 * - * (| -_- |) * - * 0\ = /0 * - * ___/`---'\___ * - * .' \\| |// '. * - * / \\||| : |||// \ * - * / _||||| -:- |||||- \ * - * | | \\\ - /// | | * - * | \_| ''\---/'' |_/ | * - * \ .-\__ '-' ___/-. / * - * ___'. .' /--.--\ `. .'___ * - * ."" '< `.___\_<|>_/___.' >' "". * - * | | : `- \`.;`\ _ /`;.`/ - ` : | | * - * \ \ `_. \_ __\ /__ _/ .-` / / * - * =====`-.____`.___ \_____/___.-`___.-'===== * - * `=---=' * - * ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ * - *********__佛祖保佑__永无BUG__验收通过__钞票多多__********* - *********************************************************/ -package com.yxt.wms.biz.inventory.wmsinitialdetail; - -import com.yxt.common.core.dto.Dto; -import com.fasterxml.jackson.annotation.JsonFormat; - -import java.math.BigDecimal; -import java.util.Date; - -import io.swagger.annotations.ApiModel; -import io.swagger.annotations.ApiModelProperty; -import lombok.Data; - -@Data -@ApiModel(value = "期初上架-明细 数据传输对象", description = "期初上架-明细 数据传输对象") -public class WmsInitialDetailDto implements Dto { - - private String sid; // sid - - @ApiModelProperty("单据sid") - private String billSid; // 单据sid - @ApiModelProperty("商品spuSid") - private String goodsSpuSid; // 商品spuSid - @ApiModelProperty("商品spu名称") - private String goodsSpuName; // 商品spu名称 - @ApiModelProperty("商品skuSid") - private String goodsSkuSid; // 商品skuSid - @ApiModelProperty("商品Sku名称") - private String goodsSkuTitle; // 商品Sku名称 - @ApiModelProperty("图号") - private String goodsSkuCode; // 图号 - @ApiModelProperty("规格型号") - private String goodsSkuOwnSpec; // 规格型号 - @ApiModelProperty("单位") - private String unit; // 单位 - @ApiModelProperty("数量") - private BigDecimal num; // 数量 - @ApiModelProperty("品牌sid") - private String brandSid; // 品牌sid - @ApiModelProperty("品牌名称") - private String brandName; // 品牌名称 - @ApiModelProperty("厂家sid") - private String manufacturerSid; // 厂家sid - @ApiModelProperty("厂家名称") - private String manufacturerName; // 厂家名称 - @ApiModelProperty("供应商sid") - private String supplierSid; // 供应商sid - @ApiModelProperty("供应商名称") - private String supplierName; // 供应商名称 - @ApiModelProperty("销售指导价") - private BigDecimal saleGuidePrice; // 销售指导价 - @ApiModelProperty("入库单价") - private BigDecimal inCost; // 入库单价 - @ApiModelProperty("税率") - private String taxRate; // 税率 - @JsonFormat(pattern = "yyyy-MM-dd", timezone = "GMT+8") - @ApiModelProperty("首次入库日期") - private Date firstInDate; - @ApiModelProperty("商品类别sid") - private String goodsTypeSid; // 商品类别sid - @ApiModelProperty("商品类别编码") - private String goodsTypeCode; // 商品类别编码 - @ApiModelProperty("商品类别名称") - private String goodsTypeName; // 商品类别名称 - @ApiModelProperty("已上架数量") - private BigDecimal listNum; // 已上架数量 - @ApiModelProperty("是否为一物一码") - private Integer isYwym; - @ApiModelProperty("是否已上传商品标签") - private Integer isScbq; -} \ No newline at end of file diff --git a/yxt-wms-biz/src/main/java/com/yxt/wms/biz/inventory/wmsinitialdetail/WmsInitialDetailMapper.java b/yxt-wms-biz/src/main/java/com/yxt/wms/biz/inventory/wmsinitialdetail/WmsInitialDetailMapper.java index b7b5fbb7a1..f8967d6dcf 100644 --- a/yxt-wms-biz/src/main/java/com/yxt/wms/biz/inventory/wmsinitialdetail/WmsInitialDetailMapper.java +++ b/yxt-wms-biz/src/main/java/com/yxt/wms/biz/inventory/wmsinitialdetail/WmsInitialDetailMapper.java @@ -36,4 +36,6 @@ import org.apache.ibatis.annotations.Param; public interface WmsInitialDetailMapper extends BaseMapper { IPage selectPageVo(IPage page, @Param(Constants.WRAPPER) Wrapper qw); + + String selectNum(String goodsId); } \ No newline at end of file diff --git a/yxt-wms-biz/src/main/java/com/yxt/wms/biz/inventory/wmsinitialdetail/WmsInitialDetailMapper.xml b/yxt-wms-biz/src/main/java/com/yxt/wms/biz/inventory/wmsinitialdetail/WmsInitialDetailMapper.xml index 3ebaaa0562..f3f3833e2a 100644 --- a/yxt-wms-biz/src/main/java/com/yxt/wms/biz/inventory/wmsinitialdetail/WmsInitialDetailMapper.xml +++ b/yxt-wms-biz/src/main/java/com/yxt/wms/biz/inventory/wmsinitialdetail/WmsInitialDetailMapper.xml @@ -16,4 +16,12 @@ ${ew.sqlSegment} + + \ No newline at end of file diff --git a/yxt-wms-biz/src/main/java/com/yxt/wms/biz/inventory/wmsinitialdetail/WmsInitialDetailService.java b/yxt-wms-biz/src/main/java/com/yxt/wms/biz/inventory/wmsinitialdetail/WmsInitialDetailService.java index ea4ac3f8d2..a591d0a0cb 100644 --- a/yxt-wms-biz/src/main/java/com/yxt/wms/biz/inventory/wmsinitialdetail/WmsInitialDetailService.java +++ b/yxt-wms-biz/src/main/java/com/yxt/wms/biz/inventory/wmsinitialdetail/WmsInitialDetailService.java @@ -25,6 +25,7 @@ *********************************************************/ package com.yxt.wms.biz.inventory.wmsinitialdetail; +import cn.hutool.core.bean.BeanUtil; import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; import com.baomidou.mybatisplus.core.metadata.IPage; import com.yxt.common.base.service.MybatisBaseService; @@ -32,18 +33,24 @@ import com.yxt.common.base.utils.PagerUtil; import com.yxt.common.core.query.PagerQuery; import com.yxt.common.core.result.ResultBean; import com.yxt.common.core.vo.PagerVo; +import com.yxt.wms.biz.inventory.wmsgoodstag.WmsGoodsTag; +import com.yxt.wms.biz.inventory.wmsgoodstag.WmsGoodsTagService; import com.yxt.wms.feign.portal.privilege.PrivilegeQuery; import com.yxt.wms.feign.portal.sysuser.SysUserFeign; import org.apache.commons.lang3.StringUtils; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Service; +import java.math.BigDecimal; + @Service public class WmsInitialDetailService extends MybatisBaseService { @Autowired private SysUserFeign sysUserFeign; - + @Autowired + private WmsGoodsTagService wmsGoodsTagService; + public PagerVo listPageVo(PagerQuery pq) { WmsInitialDetailQuery query = pq.getParams(); QueryWrapper qw = new QueryWrapper<>(); @@ -101,4 +108,32 @@ public class WmsInitialDetailService extends MybatisBaseService p = PagerUtil.pageToVo(pagging, null); return p; } + + public String selectNum(String goodsId) { + return baseMapper.selectNum(goodsId); + } + + public ResultBean generateGoodsTag(String[] sids) { + ResultBean rb = ResultBean.fireFail(); + for (String sid : sids) { + WmsInitialDetail wmsInitialDetail = fetchBySid(sid); + //新增标签 + WmsGoodsTag wmsGoodsTag = new WmsGoodsTag(); + wmsGoodsTag.setState(0); + wmsGoodsTag.setCreateBySid(wmsInitialDetail.getCreateBySid()); + wmsGoodsTag.setBillSid(wmsInitialDetail.getBillSid()); + wmsGoodsTag.setBillDetailSid(sid); + wmsGoodsTag.setGoodsID(wmsInitialDetail.getGoodsID()); + wmsGoodsTag.setGoodsSpuSid(wmsInitialDetail.getGoodsSpuSid()); + wmsGoodsTag.setGoodsSpuName(wmsInitialDetail.getGoodsSpuName()); + wmsGoodsTag.setGoodsSkuSid(wmsInitialDetail.getGoodsSkuSid()); + wmsGoodsTag.setGoodsSkuTitle(wmsInitialDetail.getGoodsSkuTitle()); + wmsGoodsTag.setGoodsSkuCode(wmsInitialDetail.getGoodsSkuCode()); + wmsGoodsTag.setGoodsSkuOwnSpec(wmsInitialDetail.getGoodsSkuOwnSpec()); + wmsGoodsTag.setUnit(wmsInitialDetail.getUnit()); + wmsGoodsTag.setGoodsCount(wmsInitialDetail.getNum()); + wmsGoodsTagService.insert(wmsGoodsTag); + } + return rb.success(); + } } \ No newline at end of file diff --git a/yxt-wms-biz/src/main/java/com/yxt/wms/feign/base/basegoodspu/BaseGoodsSpuFeign.java b/yxt-wms-biz/src/main/java/com/yxt/wms/feign/base/basegoodspu/BaseGoodsSpuFeign.java index 5ac113f4fd..49d6e3f8d2 100644 --- a/yxt-wms-biz/src/main/java/com/yxt/wms/feign/base/basegoodspu/BaseGoodsSpuFeign.java +++ b/yxt-wms-biz/src/main/java/com/yxt/wms/feign/base/basegoodspu/BaseGoodsSpuFeign.java @@ -29,4 +29,8 @@ public interface BaseGoodsSpuFeign { @ApiOperation("根据sid查询商品") @GetMapping("/fetchEntityBySid") public ResultBean fetchEntityBySid(@RequestParam("sid") String sid); + + @ApiOperation("根据图号和部门查询商品信息是否存在") + @GetMapping("/selByCodeAndDept") + ResultBean selByCodeAndDept(@RequestParam("code") String code,@RequestParam("deptSid") String deptSid); }