huanglc 1 mēnesi atpakaļ
vecāks
revīzija
e40627507a

+ 19 - 0
bpm-client-http/src/main/java/com/srm/bpm/facde/ProcessFLowHttpClient.java

@@ -155,4 +155,23 @@ public class ProcessFLowHttpClient extends BaseHttpClient {
155 155
         final R<String> oneR = restTemplateUtil.getOne(this.host + processUrl + "/print/tmp", params, user, String.class);
156 156
         return oneR;
157 157
     }
158
+
159
+    /**
160
+     * 转办处理
161
+     *
162
+     * @param billId           审批单主键
163
+     * @param taskId           任务主键
164
+     * @param transferUserIds  转办目标用户ID列表
165
+     * @param remark           转办意见
166
+     * @param user             当前用户
167
+     * @return 操作结果
168
+     */
169
+    public R transfer(Long billId, Long taskId, String transferUserIds, String remark, String user) {
170
+        Map<String, Object> params = Maps.newHashMap();
171
+        params.put("billId", billId);
172
+        params.put("taskId", taskId);
173
+        params.put("transferUserIds", transferUserIds);
174
+        params.put("remark", remark);
175
+        return restTemplateUtil.postNoReturn(this.host + "/bill/flow/rest/transfer", JSON.parseObject(JSON.toJSONString(params)), user);
176
+    }
158 177
 }

+ 11 - 5
bpm-core/src/main/java/com/srm/bpm/facade/rest/BillProcessRestController.java

@@ -12,11 +12,7 @@ import com.srm.bpm.logic.vo.BillDetailVO;
12 12
 import com.srm.bpm.logic.vo.ProcessTypeVO;
13 13
 import com.srm.common.data.rest.R;
14 14
 
15
-import org.springframework.web.bind.annotation.GetMapping;
16
-import org.springframework.web.bind.annotation.PathVariable;
17
-import org.springframework.web.bind.annotation.RequestMapping;
18
-import org.springframework.web.bind.annotation.RequestParam;
19
-import org.springframework.web.bind.annotation.RestController;
15
+import org.springframework.web.bind.annotation.*;
20 16
 
21 17
 import java.util.List;
22 18
 import java.util.Set;
@@ -139,4 +135,14 @@ public class BillProcessRestController {
139 135
         boolean readState = billLogic.readBill(billId);
140 136
         return R.state(readState);
141 137
     }
138
+
139
+    @PostMapping("/transfer")
140
+    public R transfer(Long billId, Long taskId, String transferUserIds, String remark) {
141
+
142
+        // 调用流程转办接口
143
+        final String userCode = loginUserHolder.getUserCode();
144
+
145
+        billLogic.transferUser(billId, taskId.toString(), transferUserIds, userCode, remark);
146
+        return R.ok();
147
+    }
142 148
 }

+ 1 - 0
bpm-core/src/main/java/com/srm/bpm/infra/service/impl/BillTaskServiceImpl.java

@@ -109,6 +109,7 @@ public class BillTaskServiceImpl extends BaseServiceImpl<BillTaskDao, BillTaskEn
109 109
                         .eq(BillTaskEntity::getBillId, billId)
110 110
                         .eq(BillTaskEntity::getTaskId, taskId)
111 111
                         .eq(BillTaskEntity::getUserCode, userCode)
112
+                        //.eq(BillTaskEntity::getNodeStatus,BillTaskStatus.APPROVAL.getStatus())
112 113
                         .orderByDesc(BillTaskEntity::getSort);
113 114
         final java.util.Optional<BillTaskEntity> optional = unique(queryWrapper);
114 115
         if (!optional.isPresent()) {

+ 1 - 1
bpm-core/src/main/java/com/srm/bpm/logic/service/impl/BillBtnLogicImpl.java

@@ -657,7 +657,7 @@ public class BillBtnLogicImpl implements BillBtnLogic {
657 657
             split.add(BillBtnConst.BTN_CANCEL);
658 658
             split.add(BillBtnConst.BTN_TRACK);
659 659
             split.add(BillBtnConst.BTN_ENDORSE);
660
-            split.add(BillBtnConst.BTN_TRANSFER);
660
+            //split.add(BillBtnConst.BTN_TRANSFER);
661 661
             split.add(BillBtnConst.BTN_TRANSFER_NEW);
662 662
             return btns.stream().filter(a -> split.contains(a)).collect(Collectors.toList());
663 663
         } else {

+ 60 - 7
bpm-core/src/main/java/com/srm/bpm/logic/service/impl/BillLogicImpl.java

@@ -18,6 +18,7 @@ import com.baomidou.mybatisplus.core.toolkit.IdWorker;
18 18
 import com.baomidou.mybatisplus.core.toolkit.StringPool;
19 19
 import com.baomidou.mybatisplus.core.toolkit.Wrappers;
20 20
 import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
21
+import com.srm.bpm.facde.oa.OfsTodoDataWebServicePortType_OfsTodoDataWebServiceHttpPort_Client;
21 22
 import com.srm.bpm.facde.oa.ReceiveRequestInfoByJsonDto;
22 23
 import com.srm.bpm.infra.entity.BillBizDataEntity;
23 24
 import com.srm.bpm.infra.entity.BillDataJsonEntity;
@@ -1523,6 +1524,7 @@ public class BillLogicImpl implements BillLogic {
1523 1524
      */
1524 1525
     @Override
1525 1526
     public void transferUser(long billId, String taskId, String transferUser, String userCode, String opinion) {
1527
+        // 查找当前用户的任务(只查找状态为APPROVAL的任务)
1526 1528
         final Optional<BillTaskEntity> taskOpt = billBpmnLogic
1527 1529
                 .findTaskBybillAndEmployeeAndTaskId(billId, taskId, userCode);
1528 1530
 
@@ -1534,6 +1536,7 @@ public class BillLogicImpl implements BillLogic {
1534 1536
         final int taskNodeStatus = task.getNodeStatus();
1535 1537
         BillTaskStatus billTaskStatus = BillTaskStatus.valueTo(taskNodeStatus);
1536 1538
 
1539
+        // 只允许状态为APPROVAL的任务进行转办
1537 1540
         if (billTaskStatus != BillTaskStatus.APPROVAL) {
1538 1541
             throw new RbException(BillCode.BILL_TASK_HAS_APPROVED);
1539 1542
         }
@@ -1546,29 +1549,55 @@ public class BillLogicImpl implements BillLogic {
1546 1549
         List<BillTaskEntity> insertLists = Lists.newArrayList();
1547 1550
 
1548 1551
         for (String targetUser : split) {
1552
+            // 检查目标用户是否已经是当前节点的审批人(包括转办任务)
1549 1553
             List<BillTaskEntity> existingTasks = billTaskService
1550 1554
                     .findApprovingByBillAndTaskId(billId, taskId);
1551 1555
             boolean isExistingApprover = existingTasks.stream()
1552
-                    .anyMatch(t -> targetUser.equals(t.getUserCode()));
1556
+                    .anyMatch(t -> targetUser.equals(t.getUserCode()) &&
1557
+                            t.getNodeStatus() == BillTaskStatus.APPROVAL.getStatus());
1553 1558
 
1554 1559
             if (isExistingApprover) {
1555 1560
                 throw new RbException("不能转办给当前节点已有的审批人");
1556 1561
             }
1557 1562
 
1558
-            final BillTaskEntity transferTask = BeanUtil.sourceToTarget(task, BillTaskEntity.class);
1559
-            transferTask.setSourceTaskId(task.getId());
1563
+            //
1564
+            BillTaskEntity transferTask = new  BillTaskEntity();
1565
+
1566
+            transferTask.setBillId(billId);
1567
+            transferTask.setUserCode(targetUser);
1560 1568
             transferTask.setSourceUserCode(userCode);
1569
+            transferTask.setSourceTaskId(task.getId());
1570
+
1571
+            transferTask.setTransferId(null);
1572
+
1561 1573
             transferTask.setTaskType(BillTaskType.TRANSFER.getValue());
1562
-            transferTask.setUserCode(targetUser);
1563
-            transferTask.setId(null);
1564
-            transferTask.setCreationTime(LocalDateTime.now());
1574
+            transferTask.setProcessId(task.getProcessId());
1575
+
1576
+            transferTask.setNodeApproverId(task.getNodeApproverId());
1577
+
1578
+            transferTask.setNodeName(task.getNodeName());
1579
+            transferTask.setNodeStatus(BillTaskStatus.APPROVAL.getStatus());
1580
+            transferTask.setDateline(0);    // 清空原任务时间戳
1581
+
1582
+
1583
+            transferTask.setOpinion(null);  // 清空原任务意见
1584
+            transferTask.setAction(BillAction.transfer.name());   // 清空原任务操作
1585
+
1586
+            transferTask.setTaskId(taskId);
1587
+            transferTask.setLastTaskId(task.getTaskId());
1588
+            transferTask.setSort(System.currentTimeMillis());
1589
+
1590
+            transferTask.setTaskNodeKey(task.getTaskNodeKey());
1591
+            transferTask.setLastNodeKey(task.getTaskNodeKey());
1592
+
1565 1593
             insertLists.add(transferTask);
1566 1594
         }
1567 1595
 
1568 1596
         billTaskService.saveBatch(insertLists);
1569 1597
 
1598
+        // 更新原任务状态为已转办
1570 1599
         task.setNodeStatus(BillTaskStatus.TRANSFER.getStatus());
1571
-        task.setOpinion(Strings.isNullOrEmpty(opinion) ? "转办" : opinion);
1600
+        task.setOpinion(opinion);
1572 1601
         task.setDateline(DateTimeUtil.unixTime());
1573 1602
         billTaskService.upldate(task);
1574 1603
 
@@ -1576,6 +1605,30 @@ public class BillLogicImpl implements BillLogic {
1576 1605
         sends.addAll(insertLists);
1577 1606
         sends.add(task);
1578 1607
         flowMsgLogic.sendMsg(sends);
1608
+
1609
+
1610
+        //链接OA统一待办审批
1611
+        BillItemVO billItemVO = new BillItemVO();
1612
+        OfsTodoDataWebServicePortType_OfsTodoDataWebServiceHttpPort_Client o1 = new  OfsTodoDataWebServicePortType_OfsTodoDataWebServiceHttpPort_Client();
1613
+        billItemVO.setId(billId);
1614
+        //给已转发的发送已办
1615
+        billItemVO.setStatus(14);
1616
+        billItemVO.setTaskid(taskId);
1617
+        List<ReceiveRequestInfoByJsonDto> requestInfoByJsonDtos2 = this.findrequestInfo(billItemVO);
1618
+        String token =this.getToken4();
1619
+        for (ReceiveRequestInfoByJsonDto requestInfoByJsonDto:requestInfoByJsonDtos2){
1620
+            String requestdata =o1.getRequestData(requestInfoByJsonDto,"2");
1621
+            o1.ofsTodoDatabyEten(requestdata,token);
1622
+        }
1623
+
1624
+        //给审批中的发送待办
1625
+        billItemVO.setStatus(1);
1626
+        billItemVO.setTaskid(taskId);
1627
+        List<ReceiveRequestInfoByJsonDto> requestInfoByJsonDtos1 = this.findrequestInfo(billItemVO);
1628
+        for (ReceiveRequestInfoByJsonDto requestInfoByJsonDto:requestInfoByJsonDtos1){
1629
+            String requestdata =o1.getRequestData(requestInfoByJsonDto,"0");
1630
+            o1.ofsTodoDatabyEten(requestdata,token);
1631
+        }
1579 1632
     }
1580 1633
 
1581 1634
     /**

+ 2 - 1
bpm-core/src/main/java/com/srm/bpm/logic/service/impl/FlowMsgLogicImpl.java

@@ -128,7 +128,8 @@ public class FlowMsgLogicImpl implements FlowMsgLogic {
128 128
 		final BillTaskStatus billTaskStatus = BillTaskStatus.valueTo(nodeStatus);
129 129
 		Set<String> receivers = Sets.newConcurrentHashSet();
130 130
 		final String approver = taskEntity.getUserCode();
131
-		final String content = "转办" + getContent(createUser, billTaskStatus, receivers, approver);
131
+		//final String content = "转办" + getContent(createUser, billTaskStatus, receivers, approver);
132
+		final String content = getContent(createUser, billTaskStatus, receivers, approver);
132 133
 		List<FlowMsgDTO> msgDTOS = Lists.newArrayListWithExpectedSize(receivers.size());
133 134
 		receivers.forEach(a -> {
134 135
 			FlowMsgDTO flowMsgDTO = FlowMsgDTO.build(a, createUser, content, title, push, taskEntity.getNodeName(),

+ 5 - 1
bpm-core/src/main/resources/mapper/bpm/infra/ToaBillDao.xml

@@ -296,11 +296,15 @@
296 296
             AND tasknode.node_status = #{status}
297 297
         </if>
298 298
         <if test="status ==1 and  taskid != ''"  >
299
-            AND task.task_id != #{taskid} AND task.node_status = #{status} AND task.is_deleted=0
299
+            <!-- AND task.task_id != #{taskid} AND task.node_status = #{status} AND task.is_deleted=0 -->
300
+            AND task.node_status = #{status} AND task.is_deleted=0
300 301
         </if>
301 302
         <if test="status ==2 and taskid != ''">
302 303
             AND task.task_id = #{taskid}
303 304
         </if>
305
+        <if test="status ==14 and taskid != ''">
306
+            AND task.task_id = #{taskid} AND task.node_status = #{status} AND task.is_deleted=0
307
+        </if>
304 308
         ORDER BY task.id desc
305 309
     </select>
306 310