Browse Source

Merge remote-tracking branch 'origin/master'

zhanglei
yunuo970428 4 months ago
parent
commit
d563211aa1
  1. 4
      anrui-base/anrui-base-api/src/main/java/com/yxt/anrui/base/api/baseaccadjapply/BaseAccadjApplyFeign.java
  2. 1
      anrui-base/anrui-base-biz/src/main/java/com/yxt/anrui/base/biz/baseaccadjapply/BaseAccadjApplyService.java
  3. 780
      anrui-flowable/anrui-flowable-biz/src/main/java/com/yxt/anrui/flowable/biz/flow3/Flow3Service.java
  4. 3
      anrui-scm/anrui-scm-biz/src/main/java/com/yxt/anrui/scm/biz/scmvehrebatecheckapplydetail/ScmVehrebateCheckapplydetailMapper.xml
  5. 6
      yxt-base-biz/src/main/java/com/yxt/base/apiadmin/base/BaseGoodsSpuRest.java
  6. 47
      yxt-base-biz/src/main/java/com/yxt/base/apiadmin/base/GoodsExcelVo.java
  7. 9
      yxt-base-biz/src/main/java/com/yxt/base/biz/base/basegoodssku/BaseGoodsSkuMapper.xml
  8. 2
      yxt-base-biz/src/main/java/com/yxt/base/biz/base/basegoodsspu/BaseGoodsSpuMapper.java
  9. 10
      yxt-base-biz/src/main/java/com/yxt/base/biz/base/basegoodsspu/BaseGoodsSpuMapper.xml
  10. 6
      yxt-base-biz/src/main/java/com/yxt/base/biz/base/basegoodsspu/BaseGoodsSpuService.java
  11. 574
      yxt-wms-biz/src/main/java/com/yxt/wms/apiadmin/inventroy/WmsInitialRest.java
  12. 12
      yxt-wms-biz/src/main/java/com/yxt/wms/biz/inventory/wmsinitial/ReturnExcelInfo.java
  13. 53
      yxt-wms-biz/src/main/java/com/yxt/wms/biz/inventory/wmsinitial/WmsInitialExcelInfo.java
  14. 8
      yxt-wms-biz/src/main/java/com/yxt/wms/biz/inventory/wmsinitialdetail/WmsInitialDetail.java
  15. 93
      yxt-wms-biz/src/main/java/com/yxt/wms/biz/inventory/wmsinitialdetail/WmsInitialDetailDetailsVo.java
  16. 95
      yxt-wms-biz/src/main/java/com/yxt/wms/biz/inventory/wmsinitialdetail/WmsInitialDetailDto.java
  17. 2
      yxt-wms-biz/src/main/java/com/yxt/wms/biz/inventory/wmsinitialdetail/WmsInitialDetailMapper.java
  18. 8
      yxt-wms-biz/src/main/java/com/yxt/wms/biz/inventory/wmsinitialdetail/WmsInitialDetailMapper.xml
  19. 37
      yxt-wms-biz/src/main/java/com/yxt/wms/biz/inventory/wmsinitialdetail/WmsInitialDetailService.java
  20. 4
      yxt-wms-biz/src/main/java/com/yxt/wms/feign/base/basegoodspu/BaseGoodsSpuFeign.java

4
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

1
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<BaseAccadjApplyMa
}
}
if (bv.getTaskId().equals(baseAccadjApply.getTaskId())) {
bv.setOrgSidPath(baseAccadjApply.getOrgSidPath());
ResultBean<UpdateFlowFieldVo> resultBean = flowFeign.handleProsess(bv);
if (!resultBean.getSuccess()) {
return rb.setMsg(resultBean.getMsg());

780
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<FlowMapper, Flowable> {
private ProcessEngine processEngine;
public ResultBean<UpdateFlowFieldVo> businessStartProcessInstanceById(BusinessVariables bv) {
ResultBean<UpdateFlowFieldVo> rb = ResultBean.fireFail();
// 获取流程定义ID和发起人ID
String procDefId = bv.getModelId();
String userSid = bv.getUserSid();
// 获取传入的变量
Map<String, Object> variables = bv.getFormVariables();
Map<String, Object> variablesSeconds = bv.getFormVariables();
String nextNodeUserSids = "";
List<String> 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<SysUserVo> 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<Task> 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<UpdateFlowFieldVo> handleProsess(BusinessVariables bv, boolean b) {
ResultBean<UpdateFlowFieldVo> rb = ResultBean.fireFail();
UpdateFlowFieldVo vo = new UpdateFlowFieldVo();
//获取表单中的参数
Map<String, Object> 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<String> 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<List<String>> 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<Task> 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<FlowElement> 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<SysUserVo> nextUserList = getUserListFromFlowElement(nextFlowElement, orgPath); // 获取下一个环节的用户列表
// 获取下下一个环节的用户列表(如果存在)
List<SysUserVo> 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<UpdateFlowFieldVo> businessStartProcessInstanceById222(BusinessVariables bv) {
ResultBean<UpdateFlowFieldVo> rb = ResultBean.fireFail();
// 或签任务候选人
List<String> userIds = Arrays.asList(
/* List<String> userIds = Arrays.asList(
"dc6b9e36-1b31-4b94-908b-d2d7f78a0977",
"657bf5a5-7665-440e-9cbd-ab87eccfbdcc",
"2737e5ee-5ffd-4127-919b-e6694dfc8361");
// 会签任务候选人
List<String> approvers = Arrays.asList(
List<String> 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<String, Object> variables = bv.getFormVariables();
variables.put("userSids", userIds);
variables.put("approvers", approvers);
List<String> userSidForNextNode = getNextNodeUser(bv).getData();
variables.put("approvers", userSidForNextNode);
Map<String, Object> variablesSeconds = bv.getFormVariables();
// 根据流程定义ID查询最新的流程定义
@ -152,38 +411,34 @@ public class Flow3Service extends MybatisBaseService<FlowMapper, Flowable> {
boolean isMultiInstanceTaskNext = false;
// 查询当前流程实例的待办任务
ResultBean<List<LatestTaskVo>> latestTasksNew = flowTaskService.getLatestTasksNew(processInstance.getId());
List<LatestTaskVo> 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<Task> 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<List<LatestTaskVo>> latestTasksNew = flowTaskService.getLatestTasksNew(processInstance.getId());
List<LatestTaskVo> 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<FlowMapper, Flowable> {
if (bv.getUserSid().equals(nextNodeUserSids)) {
return handleSelfApproval(bv, task, id_, task_def_key_, variables, variablesSeconds, processDefinition);
}
} else {
List<Task> 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<FlowMapper, Flowable> {
return handleProsess(bv, false);
}
/**
* 启动流程
*
* @param bv
* @return
*/
public ResultBean<UpdateFlowFieldVo> businessStartProcessInstanceById2(BusinessVariables bv) {
ResultBean<UpdateFlowFieldVo> rb = ResultBean.fireFail();
// 或签任务候选人
List<String> userIds = Arrays.asList(
"dc6b9e36-1b31-4b94-908b-d2d7f78a0977",
"657bf5a5-7665-440e-9cbd-ab87eccfbdcc",
"2737e5ee-5ffd-4127-919b-e6694dfc8361");
// 会签任务候选人
List<String> 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<String, Object> variables = bv.getFormVariables();
variables.put("userSids", userIds);
variables.put("approvers", approvers);
Map<String, Object> variablesSeconds = bv.getFormVariables();
//根据流程定义id查询
ProcessDefinition processDefinition = repositoryService.createProcessDefinitionQuery().processDefinitionId(procDefId)
.latestVersion().singleResult();
if (Objects.nonNull(processDefinition) && processDefinition.isSuspended()) {
return rb.setMsg("流程已被挂起,请先激活流程");
}
// 设置流程发起人Id到流程中
ResultBean<SysUserVo> 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<List<LatestTaskVo>> latestTasksNew = flowTaskService.getLatestTasksNew(processInstance.getId());
List<LatestTaskVo> 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<Task> 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<String> 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<UpdateFlowFieldVo> 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<UpdateFlowFieldVo> 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<FlowMapper, Flowable> {
return nextNodeUserSids;
}
/**
* 办理
* 提取获取用户角色列表的公共方法避免重复代码
*
* @param bv
* @param b
* @return
* @param flowElement 当前流程环节
* @param orgPath 当前用户的组织路径
* @return 用户列表
*/
public ResultBean<UpdateFlowFieldVo> handleProsess(BusinessVariables bv, boolean b) {
private List<SysUserVo> getUserListFromFlowElement(FlowElement flowElement, String orgPath) {
List<SysUserVo> userList = new ArrayList<>(); // 初始化用户列表
if (flowElement instanceof UserTask) { // 判断当前环节是否为用户任务
UserTask userTask = (UserTask) flowElement; // 转换为用户任务类型
List<String> 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<UpdateFlowFieldVo> handleProsess222(BusinessVariables bv, boolean b) {
ResultBean<UpdateFlowFieldVo> rb = ResultBean.fireFail();
UpdateFlowFieldVo vo = new UpdateFlowFieldVo();
// 或签任务候选人
@ -562,7 +703,7 @@ public class Flow3Service extends MybatisBaseService<FlowMapper, Flowable> {
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<FlowMapper, Flowable> {
taskService.claim(task2.getId(), userIds.get(i)); // 由候选人认领任务
isMultiInstanceTaskNext = true;
} else {
ResultBean<String> userResultBean = getNextNodeUser(bv);
bv.setNextNodeUserSids(userResultBean.getData());
nextUserSid = bv.getNextNodeUserSids();
//获取下一环节用户
ResultBean<String> 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<FlowMapper, Flowable> {
vo.setTaskDefKey(taskDefKey);
vo.setSid(bv.getBusinessSid());
return rb.success().setData(vo);
}
}*/
/**
* 获取下一环节用户
@ -689,8 +836,9 @@ public class Flow3Service extends MybatisBaseService<FlowMapper, Flowable> {
* @param bv
* @return
*/
public ResultBean<String> getNextNodeUserSidsOfSubmit(BusinessVariables bv) {
ResultBean<String> rb = ResultBean.fireFail();
public ResultBean<List<String>> getNextNodeUserSidsOfSubmit(BusinessVariables bv) {
ResultBean<List<String>> rb = ResultBean.fireFail();
List<String> nextUserList = new ArrayList<>();
String orgPath = bv.getOrgSidPath();
String taskDefKey = bv.getTaskDefKey();
//根据业务参数取流程流转的环节 信息
@ -710,28 +858,45 @@ public class Flow3Service extends MybatisBaseService<FlowMapper, Flowable> {
} 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<SysUserVo> 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<String>
List<String> 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<SysUserVo> 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<FlowMapper, Flowable> {
}
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<SysUserVo> userVoResultBean1 = sysUserFeign.fetchBySid(userSid);
String userName = "";
if (userVoResultBean1.getData() != null) {
userName = userVoResultBean1.getData().getName();
}
ResultBean<SysUserVo> 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<String, Object> 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<SysUserVo> stringResultBean = sysUserFeign.fetchBySid(assignee);
String assigneeName = "";
if (stringResultBean.getData() != null) {
assigneeName = stringResultBean.getData().getName();
}
Map<String, Object> app = new HashMap<>();
if (processVariables.get("app") != null) {
app = (Map<String, Object>) processVariables.get("app");
}
mfq.setAppMap(app);
String businessSid = (String) processVariables.get("businessSid");
mfq.setBusinessSid(businessSid);
mfq.setMsgContent(userName + "分享的流程审批,请查看");
// act_re_procdef
Map<String, String> 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<String> resultBean = messageFeign.pushMessageShare(mfq);
return rb.success();
}
public ResultBean<FlowableMessageVo> getApplicantInfoForUrgeCount(String taskId, String procInstId) {
ResultBean<FlowableMessageVo> rb = ResultBean.fireFail();
FlowableMessageVo flowableMessageVo = baseMapper.getApplicantInfoForUrgeCount(taskId, procInstId);
String procDefId = "";
if (null != flowableMessageVo) {
procDefId = flowableMessageVo.getProDefId();
}
List<FlowableMessageVo> 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<FlowableMessageVo> getTask(String taskId, String procInstId) {
ResultBean<FlowableMessageVo> rb = ResultBean.fireFail();
FlowableMessageVo flowableMessageVo = baseMapper.getTask(taskId, procInstId);
return rb.success().setData(flowableMessageVo);
}
public ResultBean<FlowTaskDto> getTaskNameForUrgeCount(String taskId, String procInstId) {
ResultBean<FlowTaskDto> 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<FlowableMessageVo> getApprovalResult(String proDefId, String procInstId) {
ResultBean<FlowableMessageVo> 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<String> getNextNodeUser(BusinessVariables bv) {
ResultBean<String> rb = ResultBean.fireFail();
public ResultBean<List<String>> getNextNodeUser(BusinessVariables bv) {
ResultBean<List<String>> rb = ResultBean.fireFail();
List<String> nextUserList = new ArrayList<>();
//根据业务参数取流程流转的环节 信息
List<Map<String, Object>> list = (List<Map<String, Object>>) getProcessCirculationNodesByMap(bv).getData();
if (list == null || list.size() < 2) {
@ -1122,25 +1140,34 @@ public class Flow3Service extends MybatisBaseService<FlowMapper, Flowable> {
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<SysUserVo> 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<String>
List<String> 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<SysUserVo> 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<FlowMapper, Flowable> {
}
public ResultBean submit222() {
/* public ResultBean submit222() {
String userSid = "7f56f6ec-4a5f-47b0-aaab-158d64cb97b1";
// 或签任务候选人
List<String> userIds = new ArrayList<>();
@ -1400,33 +1427,6 @@ public class Flow3Service extends MybatisBaseService<FlowMapper, Flowable> {
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;
}*/

3
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 -

6
yxt-base-biz/src/main/java/com/yxt/base/apiadmin/base/BaseGoodsSpuRest.java

@ -90,4 +90,10 @@ public class BaseGoodsSpuRest {
public ResultBean<String> selIsGoodsID(@PathVariable("sid") String sid) {
return baseGoodsSpuService.selIsGoodsID(sid);
}
@ApiOperation("根据图号和部门查询商品信息是否存在")
@GetMapping("/selByCodeAndDept")
ResultBean<Integer> selByCodeAndDept(@RequestParam("code") String code,@RequestParam("deptSid") String deptSid){
return baseGoodsSpuService.selByCodeAndDept(code,deptSid);
};
}

47
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;
}

9
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

2
yxt-base-biz/src/main/java/com/yxt/base/biz/base/basegoodsspu/BaseGoodsSpuMapper.java

@ -24,4 +24,6 @@ public interface BaseGoodsSpuMapper extends BaseMapper<BaseGoodsSpu> {
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);
}

10
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}
</delete>
<!-- <where> ${ew.sqlSegment} </where>-->
<!-- ${ew.customSqlSegment} -->
@ -87,4 +88,11 @@ WHERE
and isDelete = 0
and sid != #{sid}
</select>
<select id="selByCodeAndDept" resultType="int">
SELECT COUNT(*)
FROM base_goods_spu
WHERE goodsCode = #{code}
AND useOrgSid = #{deptSid}
</select>
</mapper>

6
yxt-base-biz/src/main/java/com/yxt/base/biz/base/basegoodsspu/BaseGoodsSpuService.java

@ -563,4 +563,10 @@ public class BaseGoodsSpuService extends MybatisBaseService<BaseGoodsSpuMapper,
}
return rb;
}
public ResultBean<Integer> selByCodeAndDept(String code, String deptSid) {
ResultBean rb = ResultBean.fireFail();
int i = baseMapper.selByCodeAndDept(code,deptSid);
return rb.success().setData(i);
}
}

574
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<String> 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<SysOrganizationVo> 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<WmsInitialExcelInfo> 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<WmsInitialExcelInfo> importVoList = new ArrayList<>();
Set<String> 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<BaseGoodsSkuDetailsVo> 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;
}
}

12
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<WmsInitialExcelInfo> infos = new ArrayList<>();
}

53
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;
}

8
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")

93
yxt-wms-biz/src/main/java/com/yxt/wms/biz/inventory/wmsinitialdetail/WmsInitialDetailDetailsVo.java

@ -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;
}

95
yxt-wms-biz/src/main/java/com/yxt/wms/biz/inventory/wmsinitialdetail/WmsInitialDetailDto.java

@ -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;
}

2
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<WmsInitialDetail> {
IPage<WmsInitialDetailVo> selectPageVo(IPage<WmsInitialDetail> page, @Param(Constants.WRAPPER) Wrapper<WmsInitialDetail> qw);
String selectNum(String goodsId);
}

8
yxt-wms-biz/src/main/java/com/yxt/wms/biz/inventory/wmsinitialdetail/WmsInitialDetailMapper.xml

@ -16,4 +16,12 @@
${ew.sqlSegment}
</where>
</select>
<select id="selectNum" resultType="java.lang.String">
select RIGHT (goodsID, 4)
from wms_inventory
where goodsID LIKE concat(#{bill}, '%')
order by id desc
limit 1
</select>
</mapper>

37
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<WmsInitialDetailMapper, WmsInitialDetail> {
@Autowired
private SysUserFeign sysUserFeign;
@Autowired
private WmsGoodsTagService wmsGoodsTagService;
public PagerVo<WmsInitialDetailVo> listPageVo(PagerQuery<WmsInitialDetailQuery> pq) {
WmsInitialDetailQuery query = pq.getParams();
QueryWrapper<WmsInitialDetail> qw = new QueryWrapper<>();
@ -101,4 +108,32 @@ public class WmsInitialDetailService extends MybatisBaseService<WmsInitialDetail
PagerVo<WmsInitialDetailVo> 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();
}
}

4
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<BaseGoodsSpu> fetchEntityBySid(@RequestParam("sid") String sid);
@ApiOperation("根据图号和部门查询商品信息是否存在")
@GetMapping("/selByCodeAndDept")
ResultBean<Integer> selByCodeAndDept(@RequestParam("code") String code,@RequestParam("deptSid") String deptSid);
}

Loading…
Cancel
Save