Explorar el Código

优化结单报错问题

java110 hace 5 años
padre
commit
2ecbebd7c4

+ 3 - 3
java110-db/src/main/resources/mapper/community/RepairUserServiceDaoImplMapper.xml

@@ -176,9 +176,9 @@
         <if test="bId !=null and bId != ''">
             and t.b_id= #{bId}
         </if>
-        <if test="state !=null and state != ''">
-            and t.state= #{state}
-        </if>
+<!--        <if test="state !=null and state != ''">-->
+<!--            and t.state= #{state}-->
+<!--        </if>-->
         <if test="staffId !=null and staffId != ''">
             and t.staff_id= #{staffId}
         </if>

+ 82 - 0
java110-interface/src/main/java/com/java110/intf/common/IGoodCollectionUserInnerServiceSMO.java

@@ -0,0 +1,82 @@
+package com.java110.intf.common;
+
+import com.java110.config.feign.FeignConfiguration;
+import com.java110.dto.auditMessage.AuditMessageDto;
+import com.java110.dto.purchaseApply.PurchaseApplyDto;
+import com.java110.entity.audit.AuditUser;
+import org.springframework.cloud.openfeign.FeignClient;
+import org.springframework.web.bind.annotation.RequestBody;
+import org.springframework.web.bind.annotation.RequestMapping;
+import org.springframework.web.bind.annotation.RequestMethod;
+
+import java.util.List;
+
+@FeignClient(name = "common-service", configuration = {FeignConfiguration.class})
+@RequestMapping("/goodCollectionUser")
+public interface IGoodCollectionUserInnerServiceSMO {
+
+    /**
+     * 启动流程
+     *
+     * @return
+     */
+    @RequestMapping(value = "/startProcess", method = RequestMethod.POST)
+    public PurchaseApplyDto startProcess(@RequestBody PurchaseApplyDto purchaseApplyDto);
+
+    /**
+     * 查询用户任务数
+     *
+     * @param user
+     * @return
+     */
+    @RequestMapping(value = "/getUserTaskCount", method = RequestMethod.POST)
+    public long getUserTaskCount(@RequestBody AuditUser user);
+
+    /**
+     * 获取用户任务
+     *
+     * @param user 用户信息
+     */
+    @RequestMapping(value = "/getUserTasks", method = RequestMethod.POST)
+    public List<PurchaseApplyDto> getUserTasks(@RequestBody AuditUser user);
+
+    /**
+     * 查询用户处理任务数
+     *
+     * @param user
+     * @return
+     */
+    @RequestMapping(value = "/getUserHistoryTaskCount", method = RequestMethod.POST)
+    public long getUserHistoryTaskCount(@RequestBody AuditUser user);
+    /**
+     * 获取用户处理审批的任务
+     *
+     * @param user 用户信息
+     */
+    @RequestMapping(value = "/getUserHistoryTasks", method = RequestMethod.POST)
+    public List<PurchaseApplyDto> getUserHistoryTasks(@RequestBody AuditUser user);
+
+
+    /**
+     * 处理任务
+     * @return true 为流程结束 false 为流程没有结束
+     */
+    @RequestMapping(value = "/completeTask", method = RequestMethod.POST)
+    public boolean completeTask(@RequestBody PurchaseApplyDto purchaseApplyDto);
+
+    /**
+     * 查询批注信息
+     * @return
+     */
+    @RequestMapping(value = "/getAuditMessage", method = RequestMethod.POST)
+    public List<AuditMessageDto> getAuditMessage(@RequestBody PurchaseApplyDto purchaseApplyDto);
+
+    /**
+     * 获取任务当前处理人
+     * @param purchaseApplyDto
+     * @return
+     */
+    @RequestMapping(value = "/getTaskCurrentUser", method = RequestMethod.POST)
+    public PurchaseApplyDto getTaskCurrentUser(@RequestBody PurchaseApplyDto purchaseApplyDto);
+
+}

+ 390 - 0
service-common/src/main/java/com/java110/common/smo/impl/GoodCollectionUserInnerServiceSMOImpl.java

@@ -0,0 +1,390 @@
+package com.java110.common.smo.impl;
+
+
+import com.java110.core.base.smo.BaseServiceSMO;
+import com.java110.dto.PageDto;
+import com.java110.dto.auditMessage.AuditMessageDto;
+import com.java110.dto.purchaseApply.PurchaseApplyDto;
+import com.java110.dto.user.UserDto;
+import com.java110.dto.workflow.WorkflowDto;
+import com.java110.entity.audit.AuditUser;
+import com.java110.intf.common.IAuditUserInnerServiceSMO;
+import com.java110.intf.common.IGoodCollectionUserInnerServiceSMO;
+import com.java110.intf.common.IWorkflowInnerServiceSMO;
+import com.java110.intf.store.IComplaintInnerServiceSMO;
+import com.java110.intf.store.IPurchaseApplyInnerServiceSMO;
+import com.java110.intf.user.IUserInnerServiceSMO;
+import com.java110.utils.util.Assert;
+import com.java110.utils.util.StringUtil;
+import org.activiti.engine.*;
+import org.activiti.engine.history.HistoricProcessInstance;
+import org.activiti.engine.history.HistoricTaskInstance;
+import org.activiti.engine.history.HistoricTaskInstanceQuery;
+import org.activiti.engine.impl.identity.Authentication;
+import org.activiti.engine.query.Query;
+import org.activiti.engine.runtime.ProcessInstance;
+import org.activiti.engine.task.Comment;
+import org.activiti.engine.task.Task;
+import org.activiti.engine.task.TaskQuery;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.web.bind.annotation.RequestBody;
+import org.springframework.web.bind.annotation.RestController;
+
+import java.util.ArrayList;
+import java.util.HashMap;
+import java.util.List;
+import java.util.Map;
+
+
+@RestController
+public class GoodCollectionUserInnerServiceSMOImpl extends BaseServiceSMO implements IGoodCollectionUserInnerServiceSMO {
+
+    @Autowired
+    private ProcessEngine processEngine;
+
+    @Autowired
+    private RuntimeService runtimeService;
+
+    @Autowired
+    private TaskService taskService;
+
+    @Autowired
+    private HistoryService historyService;
+
+    @Autowired
+    private RepositoryService repositoryService;
+
+
+    @Autowired
+    private IUserInnerServiceSMO userInnerServiceSMOImpl;
+
+    @Autowired
+    private IComplaintInnerServiceSMO complaintInnerServiceSMOImpl;
+
+    @Autowired
+    private IPurchaseApplyInnerServiceSMO purchaseApplyInnerServiceSMOImpl;
+
+    @Autowired
+    private IAuditUserInnerServiceSMO auditUserInnerServiceSMOImpl;
+
+    @Autowired
+    private IWorkflowInnerServiceSMO workflowInnerServiceSMOImpl;
+
+
+    /**
+     * 启动流程
+     *
+     * @return
+     */
+    public PurchaseApplyDto startProcess(@RequestBody PurchaseApplyDto purchaseApplyDto) {
+        //将信息加入map,以便传入流程中
+        Map<String, Object> variables = new HashMap<String, Object>();
+        variables.put("purchaseApplyDto", purchaseApplyDto);
+        variables.put("nextAuditStaffId", purchaseApplyDto.getStaffId());
+        variables.put("userId", purchaseApplyDto.getCurrentUserId());
+        variables.put("startUserId", purchaseApplyDto.getCurrentUserId());
+        //开启流程
+        ProcessInstance processInstance = runtimeService.startProcessInstanceByKey(getWorkflowDto(purchaseApplyDto.getStoreId()), purchaseApplyDto.getApplyOrderId(), variables);
+//        //将得到的实例流程id值赋给之前设置的变量
+        String processInstanceId = processInstance.getId();
+//        // System.out.println("流程开启成功.......实例流程id:" + processInstanceId);
+//
+        purchaseApplyDto.setProcessInstanceId(processInstanceId);
+        //autoFinishFirstTask(purchaseApplyDto);
+        return purchaseApplyDto;
+    }
+
+
+    private String getWorkflowDto(String storeId) {
+        //开启流程
+        //WorkflowDto.DEFAULT_PROCESS + workflowDto.getFlowId()
+        WorkflowDto workflowDto = new WorkflowDto();
+        workflowDto.setFlowType(WorkflowDto.FLOW_TYPE_COLLECTION);
+        workflowDto.setStoreId(storeId);
+        List<WorkflowDto> workflowDtos = workflowInnerServiceSMOImpl.queryWorkflows(workflowDto);
+
+        Assert.listOnlyOne(workflowDtos, "未找到 采购流程或找到多条");
+
+        WorkflowDto tmpWorkflowDto = workflowDtos.get(0);
+        if (StringUtil.isEmpty(tmpWorkflowDto.getProcessDefinitionKey())) {
+            throw new IllegalArgumentException("流程还未部署");
+        }
+        return WorkflowDto.DEFAULT_PROCESS + tmpWorkflowDto.getFlowId();
+    }
+
+    /**
+     * 自动提交第一步
+     */
+    private void autoFinishFirstTask(PurchaseApplyDto purchaseApplyDto) {
+        Task task = null;
+        TaskQuery query = taskService.createTaskQuery().taskCandidateOrAssigned(purchaseApplyDto.getCurrentUserId()).active();
+        List<Task> todoList = query.list();//获取申请人的待办任务列表
+
+        for (Task tmp : todoList) {
+            if (tmp.getProcessInstanceId().equals(purchaseApplyDto.getProcessInstanceId())) {
+                task = tmp;//获取当前流程实例,当前申请人的待办任务
+                break;
+            }
+        }
+        Assert.notNull(task, "未找到当前用户任务userId = " + purchaseApplyDto.getCurrentUserId());
+        purchaseApplyDto.setTaskId(task.getId());
+        purchaseApplyDto.setAuditCode("10000");
+        purchaseApplyDto.setAuditMessage("提交");
+        completeTask(purchaseApplyDto);
+
+    }
+
+    /**
+     * 查询用户任务数
+     *
+     * @param user
+     * @return
+     */
+    public long getUserTaskCount(@RequestBody AuditUser user) {
+        TaskService taskService = processEngine.getTaskService();
+        TaskQuery query = taskService.createTaskQuery().processDefinitionKey(getWorkflowDto(user.getStoreId()));
+        query.taskAssignee(user.getUserId());
+        return query.count();
+    }
+
+    /**
+     * 获取用户任务
+     *
+     * @param user 用户信息
+     */
+    public List<PurchaseApplyDto> getUserTasks(@RequestBody AuditUser user) {
+        TaskService taskService = processEngine.getTaskService();
+        TaskQuery query = taskService.createTaskQuery().processDefinitionKey(getWorkflowDto(user.getStoreId()));
+        query.taskAssignee(user.getUserId());
+        query.orderByTaskCreateTime().desc();
+        List<Task> list = null;
+        if (user.getPage() >= 1) {
+            user.setPage(user.getPage() - 1);
+        }
+        if (user.getPage() != PageDto.DEFAULT_PAGE) {
+            list = query.listPage(user.getPage(), user.getRow());
+        } else {
+            list = query.list();
+        }
+
+//        List<PurchaseApplyDto> purchaseApplyDtos = new ArrayList<>();
+//
+//        for (Task task : list) {
+//            String id = task.getId();
+//            //System.out.println("tasks:" + JSONObject.toJSONString(task));
+//            PurchaseApplyDto purchaseApplyDto = (PurchaseApplyDto) taskService.getVariable(id, "purchaseApplyDto");
+//            purchaseApplyDto.setTaskId(id);
+//            purchaseApplyDto.setProcessInstanceId(task.getProcessInstanceId());
+//            purchaseApplyDtos.add(purchaseApplyDto);
+//        }
+//        return purchaseApplyDtos;
+
+        List<String> applyOrderIds = new ArrayList<>();
+        Map<String, String> taskBusinessKeyMap = new HashMap<>();
+        for (Task task : list) {
+            String processInstanceId = task.getProcessInstanceId();
+            //3.使用流程实例,查询
+            ProcessInstance pi = runtimeService.createProcessInstanceQuery().processInstanceId(processInstanceId).singleResult();
+            //4.使用流程实例对象获取BusinessKey
+            String business_key = pi.getBusinessKey();
+            applyOrderIds.add(business_key);
+            taskBusinessKeyMap.put(business_key, task.getId());
+        }
+
+        if (applyOrderIds == null || applyOrderIds.size() == 0) {
+            return new ArrayList<>();
+        }
+
+        //查询 投诉信息
+        PurchaseApplyDto purchaseApplyDto = new PurchaseApplyDto();
+        purchaseApplyDto.setStoreId(user.getStoreId());
+        purchaseApplyDto.setApplyOrderIds(applyOrderIds.toArray(new String[applyOrderIds.size()]));
+        List<PurchaseApplyDto> tmpPurchaseApplyDtos = purchaseApplyInnerServiceSMOImpl.queryPurchaseApplyAndDetails(purchaseApplyDto);
+
+        for (PurchaseApplyDto tmpPurchaseApplyDto : tmpPurchaseApplyDtos) {
+            tmpPurchaseApplyDto.setTaskId(taskBusinessKeyMap.get(tmpPurchaseApplyDto.getApplyOrderId()));
+        }
+        return tmpPurchaseApplyDtos;
+    }
+
+
+    /**
+     * 查询用户任务数
+     *
+     * @param user
+     * @return
+     */
+    public long getUserHistoryTaskCount(@RequestBody AuditUser user) {
+        HistoryService historyService = processEngine.getHistoryService();
+//        Query query = historyService.createHistoricTaskInstanceQuery()
+//                .processDefinitionKey("complaint")
+//                .taskAssignee(user.getUserId());
+
+        HistoricTaskInstanceQuery historicTaskInstanceQuery = historyService.createHistoricTaskInstanceQuery()
+                .processDefinitionKey(getWorkflowDto(user.getStoreId()))
+                .taskAssignee(user.getUserId());
+        if (!StringUtil.isEmpty(user.getAuditLink()) && "START".equals(user.getAuditLink())) {
+            historicTaskInstanceQuery.taskName("resourceEnter");
+        } else if (!StringUtil.isEmpty(user.getAuditLink()) && "AUDIT".equals(user.getAuditLink())) {
+            historicTaskInstanceQuery.taskName("resourceEnterDealUser");
+        }
+
+        Query query = historicTaskInstanceQuery;
+        return query.count();
+    }
+
+    /**
+     * 获取用户审批的任务
+     *
+     * @param user 用户信息
+     */
+    public List<PurchaseApplyDto> getUserHistoryTasks(@RequestBody AuditUser user) {
+        HistoryService historyService = processEngine.getHistoryService();
+
+        HistoricTaskInstanceQuery historicTaskInstanceQuery = historyService.createHistoricTaskInstanceQuery()
+                .processDefinitionKey("resourceEnter")
+                .taskAssignee(user.getUserId());
+        if (!StringUtil.isEmpty(user.getAuditLink()) && "START".equals(user.getAuditLink())) {
+            historicTaskInstanceQuery.taskName("resourceEnter");
+        } else if (!StringUtil.isEmpty(user.getAuditLink()) && "AUDIT".equals(user.getAuditLink())) {
+            historicTaskInstanceQuery.taskName("resourceEnterDealUser");
+        }
+
+        Query query = historicTaskInstanceQuery.orderByHistoricTaskInstanceStartTime().desc();
+
+        List<HistoricTaskInstance> list = null;
+        if (user.getPage() != PageDto.DEFAULT_PAGE) {
+            list = query.listPage((user.getPage() - 1) * user.getRow(), user.getRow());
+        } else {
+            list = query.list();
+        }
+
+        List<String> complaintIds = new ArrayList<>();
+        for (HistoricTaskInstance task : list) {
+            String processInstanceId = task.getProcessInstanceId();
+            //3.使用流程实例,查询
+            HistoricProcessInstance pi = historyService.createHistoricProcessInstanceQuery().processInstanceId(processInstanceId).singleResult();
+            //4.使用流程实例对象获取BusinessKey
+            String business_key = pi.getBusinessKey();
+            complaintIds.add(business_key);
+        }
+
+        //查询 投诉信息
+//        ComplaintDto complaintDto = new ComplaintDto();
+//        complaintDto.setStoreId(user.getStoreId());
+//        complaintDto.setCommunityId(user.getCommunityId());
+//        complaintDto.setComplaintIds(complaintIds.toArray(new String[complaintIds.size()]));
+//        List<ComplaintDto> tmpComplaintDtos = complaintInnerServiceSMOImpl.queryComplaints(complaintDto);
+        return null;
+    }
+
+
+    public boolean completeTask(@RequestBody PurchaseApplyDto purchaseApplyDto) {
+        TaskService taskService = processEngine.getTaskService();
+        Task task = taskService.createTaskQuery().taskId(purchaseApplyDto.getTaskId()).singleResult();
+        String processInstanceId = task.getProcessInstanceId();
+        Authentication.setAuthenticatedUserId(purchaseApplyDto.getCurrentUserId());
+        taskService.addComment(purchaseApplyDto.getTaskId(), processInstanceId, purchaseApplyDto.getAuditMessage());
+        Map<String, Object> variables = new HashMap<String, Object>();
+        variables.put("auditCode", purchaseApplyDto.getAuditCode());
+        variables.put("currentUserId", purchaseApplyDto.getCurrentUserId());
+        variables.put("flag", "1200".equals(purchaseApplyDto.getAuditCode()) ? "false" : "true");
+        variables.put("startUserId", purchaseApplyDto.getStartUserId());
+        taskService.complete(purchaseApplyDto.getTaskId(), variables);
+
+        ProcessInstance pi = runtimeService.createProcessInstanceQuery().processInstanceId(processInstanceId).singleResult();
+        if (pi == null) {
+            return true;
+        }
+        return false;
+    }
+
+    public List<AuditMessageDto> getAuditMessage(@RequestBody PurchaseApplyDto purchaseApplyDto) {
+
+        TaskService taskService = processEngine.getTaskService();
+        Task task = taskService.createTaskQuery().taskId(purchaseApplyDto.getTaskId()).singleResult();
+        String processInstanceId = task.getProcessInstanceId();
+        List<Comment> comments = taskService.getProcessInstanceComments(processInstanceId);
+        List<AuditMessageDto> auditMessageDtos = new ArrayList<>();
+        if (comments == null || comments.size() < 1) {
+            return auditMessageDtos;
+        }
+        AuditMessageDto messageDto = null;
+        for (Comment comment : comments) {
+            messageDto = new AuditMessageDto();
+            messageDto.setCreateTime(comment.getTime());
+            messageDto.setUserId(comment.getUserId());
+            messageDto.setMessage(comment.getFullMessage());
+        }
+
+        return auditMessageDtos;
+    }
+
+    /**
+     * 获取任务当前处理人
+     *
+     * @param purchaseApplyDto
+     * @return
+     */
+    public PurchaseApplyDto getTaskCurrentUser(@RequestBody PurchaseApplyDto purchaseApplyDto) {
+
+        TaskService taskService = processEngine.getTaskService();
+        Task task = taskService.createTaskQuery().processInstanceBusinessKey(purchaseApplyDto.getApplyOrderId()).singleResult();
+
+        if (task == null) {
+            purchaseApplyDto.setStaffId("");
+            purchaseApplyDto.setStaffName("");
+            purchaseApplyDto.setStaffTel("");
+            return purchaseApplyDto;
+        }
+
+        String userId = task.getAssignee();
+        List<UserDto> users = userInnerServiceSMOImpl.getUserInfo(new String[]{userId});
+
+        if (users == null || users.size() == 0) {
+            purchaseApplyDto.setStaffId("");
+            purchaseApplyDto.setStaffName("");
+            purchaseApplyDto.setStaffTel("");
+            return purchaseApplyDto;
+        }
+
+        purchaseApplyDto.setCurrentUserId(userId);
+        purchaseApplyDto.setStaffName(users.get(0).getName());
+        purchaseApplyDto.setStaffTel(users.get(0).getTel());
+        return purchaseApplyDto;
+
+    }
+
+
+    public ProcessEngine getProcessEngine() {
+        return processEngine;
+    }
+
+    public void setProcessEngine(ProcessEngine processEngine) {
+        this.processEngine = processEngine;
+    }
+
+    public RuntimeService getRuntimeService() {
+        return runtimeService;
+    }
+
+    public void setRuntimeService(RuntimeService runtimeService) {
+        this.runtimeService = runtimeService;
+    }
+
+    public TaskService getTaskService() {
+        return taskService;
+    }
+
+    public void setTaskService(TaskService taskService) {
+        this.taskService = taskService;
+    }
+
+    public IComplaintInnerServiceSMO getComplaintInnerServiceSMOImpl() {
+        return complaintInnerServiceSMOImpl;
+    }
+
+    public void setComplaintInnerServiceSMOImpl(IComplaintInnerServiceSMO complaintInnerServiceSMOImpl) {
+        this.complaintInnerServiceSMOImpl = complaintInnerServiceSMOImpl;
+    }
+}

+ 134 - 0
service-store/src/main/java/com/java110/store/api/CollectionApi.java

@@ -0,0 +1,134 @@
+package com.java110.store.api;
+
+import com.alibaba.fastjson.JSONArray;
+import com.alibaba.fastjson.JSONObject;
+import com.java110.core.factory.GenerateCodeFactory;
+import com.java110.dto.purchaseApply.PurchaseApplyDto;
+import com.java110.entity.audit.AuditUser;
+import com.java110.po.purchase.PurchaseApplyDetailPo;
+import com.java110.po.purchase.PurchaseApplyPo;
+import com.java110.store.bmo.purchase.IGetCollectionAuditOrderBMO;
+import com.java110.store.bmo.purchase.IGoodsCollectionBMO;
+import com.java110.store.bmo.purchase.IResourceOutBMO;
+import com.java110.utils.util.Assert;
+import com.java110.utils.util.BeanConvertUtil;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.http.ResponseEntity;
+import org.springframework.web.bind.annotation.*;
+
+import java.util.ArrayList;
+import java.util.List;
+
+/**
+ * 物品领用 接口类
+ */
+
+@RestController
+@RequestMapping(value = "/collection")
+public class CollectionApi {
+
+    @Autowired
+    private IGoodsCollectionBMO goodsCollectionBMOImpl;
+
+    @Autowired
+    private IGetCollectionAuditOrderBMO getCollectionAuditOrderBMOImpl;
+
+    @Autowired
+    private IResourceOutBMO resourceOutBMOImpl;
+
+    /**
+     * 物品领用 接口类
+     *
+     * @param reqJson
+     * @param userId
+     * @param userName
+     * @param storeId
+     * @return {"resourceStores":[{"resId":"852020070239060001","resName":"水性笔","resCode":"002","price":"2.00","stock":"2",
+     * "description":"黑色","quantity":"1"}],"description":"123123","endUserName":"1","endUserTel":"17797173942","file":"",
+     * "resOrderType":"20000","staffId":"","staffName":""}
+     */
+    @RequestMapping(value = "/goodsCollection", method = RequestMethod.POST)
+    public ResponseEntity<String> goodsCollection(@RequestBody JSONObject reqJson,
+                                                  @RequestHeader(value = "user-id") String userId,
+                                                  @RequestHeader(value = "user-name") String userName,
+                                                  @RequestHeader(value = "store-id") String storeId) {
+
+        Assert.hasKeyAndValue(reqJson, "resourceStores", "必填,请填写物品领用的物资");
+        Assert.hasKeyAndValue(reqJson, "description", "必填,请填写采购申请说明");
+
+        PurchaseApplyPo purchaseApplyPo = new PurchaseApplyPo();
+        purchaseApplyPo.setApplyOrderId(GenerateCodeFactory.getGeneratorId(GenerateCodeFactory.CODE_PREFIX_applyOrderId));
+        purchaseApplyPo.setDescription(reqJson.getString("description"));
+        purchaseApplyPo.setUserId(userId);
+        purchaseApplyPo.setUserName(userName);
+        purchaseApplyPo.setEndUserName(reqJson.getString("endUserName"));
+        purchaseApplyPo.setEndUserTel(reqJson.getString("endUserTel"));
+        purchaseApplyPo.setStoreId(storeId);
+        purchaseApplyPo.setResOrderType(PurchaseApplyDto.RES_ORDER_TYPE_OUT);
+        purchaseApplyPo.setState(PurchaseApplyDto.STATE_DEALING);
+
+        JSONArray resourceStores = reqJson.getJSONArray("resourceStores");
+
+        List<PurchaseApplyDetailPo> purchaseApplyDetailPos = new ArrayList<>();
+
+        for (int resourceStoreIndex = 0; resourceStoreIndex < resourceStores.size(); resourceStoreIndex++) {
+            JSONObject resourceStore = resourceStores.getJSONObject(resourceStoreIndex);
+            PurchaseApplyDetailPo purchaseApplyDetailPo = BeanConvertUtil.covertBean(resourceStore, PurchaseApplyDetailPo.class);
+            purchaseApplyDetailPo.setId(GenerateCodeFactory.getGeneratorId(GenerateCodeFactory.CODE_PREFIX_applyOrderId));
+            purchaseApplyDetailPos.add(purchaseApplyDetailPo);
+        }
+        purchaseApplyPo.setPurchaseApplyDetailPos(purchaseApplyDetailPos);
+
+        return goodsCollectionBMOImpl.collection(purchaseApplyPo);
+    }
+
+    /**
+     * 查询审核单
+     * @param page
+     * @param row
+     * @param userId
+     * @param storeId
+     * @return
+     */
+    @RequestMapping(value = "/getCollectionAuditOrder", method = RequestMethod.GET)
+    public ResponseEntity<String> getCollectionAuditOrder(@RequestParam(value = "page") int page,
+                                                          @RequestParam(value = "row") int row,
+                                                          @RequestHeader(value = "user-id") String userId,
+                                                          @RequestHeader(value = "store-id") String storeId){
+
+        AuditUser auditUser = new AuditUser();
+        auditUser.setUserId(userId);
+        auditUser.setPage(page);
+        auditUser.setRow(row);
+        auditUser.setStoreId(storeId);
+        return getCollectionAuditOrderBMOImpl.auditOrder(auditUser);
+    }
+
+    /**
+     * {"resourceOuts":[],"applyOrderId":"152020071665420001","taskId":"237506","resOrderType":"20000",
+     * "purchaseApplyDetailVo":[{"applyOrderId":"152020071665420001","id":"152020071690120002","price":"","quantity":"1",
+     * "resCode":"002","resId":"852020070239060001","resName":"水性笔","stock":"2","purchaseQuantity":"2","purchaseRemark":""}]}
+     */
+
+    @RequestMapping(value = "/resourceOut", method = RequestMethod.POST)
+    public ResponseEntity<String> resourceOut(@RequestBody JSONObject reqJson) {
+        Assert.hasKeyAndValue(reqJson, "applyOrderId", "订单ID为空");
+
+        JSONArray purchaseApplyDetails = reqJson.getJSONArray("purchaseApplyDetailVo");
+
+        List<PurchaseApplyDetailPo> purchaseApplyDetailPos = new ArrayList<>();
+        for (int detailIndex = 0; detailIndex < purchaseApplyDetails.size(); detailIndex++) {
+            JSONObject purchaseApplyDetail = purchaseApplyDetails.getJSONObject(detailIndex);
+            Assert.hasKeyAndValue(purchaseApplyDetail, "purchaseQuantity", "采购数量未填写");
+            Assert.hasKeyAndValue(purchaseApplyDetail, "id", "明细ID为空");
+            PurchaseApplyDetailPo purchaseApplyDetailPo = BeanConvertUtil.covertBean(purchaseApplyDetail, PurchaseApplyDetailPo.class);
+            purchaseApplyDetailPos.add(purchaseApplyDetailPo);
+
+        }
+
+        PurchaseApplyPo purchaseApplyPo = new PurchaseApplyPo();
+        purchaseApplyPo.setApplyOrderId(reqJson.getString("applyOrderId"));
+        purchaseApplyPo.setPurchaseApplyDetailPos(purchaseApplyDetailPos);
+        return resourceOutBMOImpl.out(purchaseApplyPo);
+    }
+}

+ 15 - 0
service-store/src/main/java/com/java110/store/bmo/purchase/IGetCollectionAuditOrderBMO.java

@@ -0,0 +1,15 @@
+package com.java110.store.bmo.purchase;
+
+import com.java110.entity.audit.AuditUser;
+import com.java110.po.purchase.PurchaseApplyPo;
+import org.springframework.http.ResponseEntity;
+
+public interface IGetCollectionAuditOrderBMO {
+
+    /**
+     * 查询待审核单
+     * @param auditUser
+     * @return
+     */
+    ResponseEntity<String> auditOrder(AuditUser auditUser);
+}

+ 14 - 0
service-store/src/main/java/com/java110/store/bmo/purchase/IGoodsCollectionBMO.java

@@ -0,0 +1,14 @@
+package com.java110.store.bmo.purchase;
+
+import com.java110.po.purchase.PurchaseApplyPo;
+import org.springframework.http.ResponseEntity;
+
+public interface IGoodsCollectionBMO {
+
+    /**
+     * 物品领用
+     * @param purchaseApplyPo
+     * @return
+     */
+    ResponseEntity<String> collection(PurchaseApplyPo purchaseApplyPo);
+}

+ 14 - 0
service-store/src/main/java/com/java110/store/bmo/purchase/IResourceOutBMO.java

@@ -0,0 +1,14 @@
+package com.java110.store.bmo.purchase;
+
+import com.java110.po.purchase.PurchaseApplyPo;
+import org.springframework.http.ResponseEntity;
+
+public interface IResourceOutBMO {
+
+    /**
+     * 采购入库
+     * @param purchaseApplyPo
+     * @return
+     */
+    ResponseEntity<String> out(PurchaseApplyPo purchaseApplyPo);
+}

+ 68 - 0
service-store/src/main/java/com/java110/store/bmo/purchase/impl/GetCollectionAuditOrderBMOImpl.java

@@ -0,0 +1,68 @@
+package com.java110.store.bmo.purchase.impl;
+
+import com.alibaba.fastjson.JSONObject;
+import com.java110.core.annotation.Java110Transactional;
+import com.java110.dto.purchaseApply.PurchaseApplyDto;
+import com.java110.entity.audit.AuditUser;
+import com.java110.intf.common.IGoodCollectionUserInnerServiceSMO;
+import com.java110.intf.store.IPurchaseApplyInnerServiceSMO;
+import com.java110.store.bmo.purchase.IGetCollectionAuditOrderBMO;
+import com.java110.utils.util.BeanConvertUtil;
+import com.java110.vo.ResultVo;
+import com.java110.vo.api.resourceOrder.ApiResourceOrderDataVo;
+import com.java110.vo.api.resourceOrder.ApiResourceOrderVo;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.http.HttpStatus;
+import org.springframework.http.ResponseEntity;
+import org.springframework.stereotype.Service;
+
+import java.util.ArrayList;
+import java.util.List;
+
+
+@Service("getCollectionAuditOrderBMOImpl")
+public class GetCollectionAuditOrderBMOImpl implements IGetCollectionAuditOrderBMO {
+
+    @Autowired
+    private IPurchaseApplyInnerServiceSMO purchaseApplyInnerServiceSMOImpl;
+
+
+    @Autowired
+    private IGoodCollectionUserInnerServiceSMO goodCollectionUserInnerServiceSMOImpl;
+
+
+    @Override
+    public ResponseEntity<String> auditOrder(AuditUser auditUser) {
+
+        long count = goodCollectionUserInnerServiceSMOImpl.getUserTaskCount(auditUser);
+
+        List<ApiResourceOrderDataVo> auditOrders = null;
+
+        if (count > 0) {
+            List<PurchaseApplyDto> purchaseApplyDtos = goodCollectionUserInnerServiceSMOImpl.getUserTasks(auditUser);
+            auditOrders = BeanConvertUtil.covertBeanList(purchaseApplyDtos, ApiResourceOrderDataVo.class);
+            for (ApiResourceOrderDataVo apiResourceOrderDataVo : auditOrders) {
+                switch (apiResourceOrderDataVo.getState()) {
+                    case "1000":
+                        apiResourceOrderDataVo.setStateName("待审核");
+                        break;
+                    case "1001":
+                        apiResourceOrderDataVo.setStateName("审核中");
+                        break;
+                    case "1002":
+                        apiResourceOrderDataVo.setStateName("已审核");
+                        break;
+                }
+                apiResourceOrderDataVo.setResOrderTypeName("出库申请");
+            }
+        } else {
+            auditOrders = new ArrayList<>();
+        }
+
+
+
+        return ResultVo.createResponseEntity((int) Math.ceil((double) count / (double) auditUser.getRow()),(int) count,auditOrders);
+
+
+    }
+}

+ 44 - 0
service-store/src/main/java/com/java110/store/bmo/purchase/impl/GoodsCollectionBMOImpl.java

@@ -0,0 +1,44 @@
+package com.java110.store.bmo.purchase.impl;
+
+import com.java110.core.annotation.Java110Transactional;
+import com.java110.dto.purchaseApply.PurchaseApplyDto;
+import com.java110.intf.common.IGoodCollectionUserInnerServiceSMO;
+import com.java110.intf.common.IPurchaseApplyUserInnerServiceSMO;
+import com.java110.intf.store.IPurchaseApplyInnerServiceSMO;
+import com.java110.po.purchase.PurchaseApplyPo;
+import com.java110.store.bmo.purchase.IGoodsCollectionBMO;
+import com.java110.utils.util.BeanConvertUtil;
+import com.java110.vo.ResultVo;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.http.ResponseEntity;
+import org.springframework.stereotype.Service;
+
+
+@Service("goodsCollectionBMOImpl")
+public class GoodsCollectionBMOImpl implements IGoodsCollectionBMO {
+
+    @Autowired
+    private IPurchaseApplyInnerServiceSMO purchaseApplyInnerServiceSMOImpl;
+
+
+    @Autowired
+    private IGoodCollectionUserInnerServiceSMO goodCollectionUserInnerServiceSMOImpl;
+
+
+    @Override
+    @Java110Transactional
+    public ResponseEntity<String> collection(PurchaseApplyPo purchaseApplyPo) {
+
+        int saveFlag = purchaseApplyInnerServiceSMOImpl.savePurchaseApply(purchaseApplyPo);
+
+        if (saveFlag < 1) {
+            return ResultVo.createResponseEntity(ResultVo.CODE_ERROR, "采购申请失败");
+        }
+
+        PurchaseApplyDto purchaseApplyDto = BeanConvertUtil.covertBean(purchaseApplyPo, PurchaseApplyDto.class);
+        purchaseApplyDto.setCurrentUserId(purchaseApplyPo.getUserId());
+        goodCollectionUserInnerServiceSMOImpl.startProcess(purchaseApplyDto);
+
+        return ResultVo.createResponseEntity(ResultVo.CODE_OK, "物品领用成功");
+    }
+}

+ 48 - 0
service-store/src/main/java/com/java110/store/bmo/purchase/impl/ResourceOutBMOImpl.java

@@ -0,0 +1,48 @@
+package com.java110.store.bmo.purchase.impl;
+
+import com.java110.core.annotation.Java110Transactional;
+import com.java110.intf.common.IPurchaseApplyUserInnerServiceSMO;
+import com.java110.intf.store.IPurchaseApplyDetailInnerServiceSMO;
+import com.java110.intf.store.IResourceStoreInnerServiceSMO;
+import com.java110.po.purchase.PurchaseApplyDetailPo;
+import com.java110.po.purchase.PurchaseApplyPo;
+import com.java110.po.purchase.ResourceStorePo;
+import com.java110.store.bmo.purchase.IResourceOutBMO;
+import com.java110.vo.ResultVo;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.http.ResponseEntity;
+import org.springframework.stereotype.Service;
+
+import java.util.List;
+
+
+@Service("resourceOutBMOImpl")
+public class ResourceOutBMOImpl implements IResourceOutBMO {
+
+    @Autowired
+    private IPurchaseApplyDetailInnerServiceSMO purchaseApplyDetailInnerServiceSMOImpl;
+
+
+    @Autowired
+    private IPurchaseApplyUserInnerServiceSMO purchaseApplyUserInnerServiceSMOImpl;
+
+    @Autowired
+    private IResourceStoreInnerServiceSMO resourceStoreInnerServiceSMOImpl;
+
+
+    @Override
+    @Java110Transactional
+    public ResponseEntity<String> out(PurchaseApplyPo purchaseApplyPo) {
+
+        List<PurchaseApplyDetailPo> purchaseApplyDetailPos = purchaseApplyPo.getPurchaseApplyDetailPos();
+        for (PurchaseApplyDetailPo purchaseApplyDetailPo : purchaseApplyDetailPos) {
+            purchaseApplyDetailInnerServiceSMOImpl.updatePurchaseApplyDetail(purchaseApplyDetailPo);
+            ResourceStorePo resourceStorePo = new ResourceStorePo();
+            resourceStorePo.setResId(purchaseApplyDetailPo.getResId());
+            resourceStorePo.setStock("-" + purchaseApplyDetailPo.getPurchaseQuantity());
+            resourceStoreInnerServiceSMOImpl.updateResourceStore(resourceStorePo);
+        }
+
+        return ResultVo.createResponseEntity(ResultVo.CODE_OK, "出库成功");
+    }
+}

+ 6 - 1
service-store/src/main/java/com/java110/store/smo/impl/ResourceStoreInnerServiceSMOImpl.java

@@ -74,7 +74,12 @@ public class ResourceStoreInnerServiceSMOImpl extends BaseServiceSMO implements
             Assert.listOnlyOne(stores, "不存在该物品");
             int stock = Integer.parseInt(stores.get(0).get("stock").toString());
             int newStock = Integer.parseInt(resourceStorePo.getStock());
-            resourceStorePo.setStock((stock + newStock) + "");
+            int totalStock = stock + newStock;
+
+            if (totalStock < 0) {
+                throw new IllegalArgumentException("库存不足,参数有误");
+            }
+            resourceStorePo.setStock(totalStock + "");
             resourceStorePo.setStatusCd("0");
             return resourceResourceStoreServiceDaoImpl.updateResourceStoreInfoInstance(BeanConvertUtil.beanCovertMap(resourceStorePo));
         } finally {