Browse Source

Merge branch 'master' of http://114.55.67.98:8070/Natural_p1/zjugis_OA

songxy 1 năm trước cách đây
mục cha
commit
442c0b4346

+ 5 - 0
zjugis-business/src/main/java/com/zjugis/business/bean/entity/ProjectMilestone.java

@@ -53,5 +53,10 @@ public class ProjectMilestone extends BaseEntity {
      */
     private String projectId;
 
+    /**
+     * 项目进度
+     */
+    private String process;
+
 }
 

+ 9 - 1
zjugis-business/src/main/java/com/zjugis/business/service/impl/ContractMessageServiceImpl.java

@@ -10,6 +10,8 @@ import com.zjugis.business.constants.ContractMessageContants;
 import com.zjugis.business.mapper.ContractMessageMapper;
 import com.zjugis.business.service.ContractMessageService;
 import com.zjugis.business.service.ContractService;
+import com.zjugis.module.infra.api.ding.DingApi;
+import com.zjugis.module.infra.api.ding.dto.DingMessageDto;
 import org.apache.commons.lang3.StringUtils;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.stereotype.Service;
@@ -34,6 +36,9 @@ public class ContractMessageServiceImpl implements ContractMessageService {
     @Autowired
     private ContractService contractService;
 
+    @Autowired
+    private DingApi dingApi;
+
 
     @Override
     public Page<ContractMessageResponse> page(ContractMessageDto contractMessageDto) {
@@ -106,7 +111,10 @@ public class ContractMessageServiceImpl implements ContractMessageService {
         BigDecimal amount = contractReturnMoney.getReturnAmount().setScale(2, RoundingMode.HALF_UP);
         String content = "[回款]已回款:¥" + amount +  " " + StringUtils.join(Arrays.asList(contract.getName(), contract.getContractOn(),"¥" + amount,contract.getAreaManager()),"/");
         message.setMessageContent(content);
-        contractMessageMapper.insert(message);
+        int insert = contractMessageMapper.insert(message);
+        if(insert> 0){
+            dingApi.sendMessage(new DingMessageDto(contract.getAreaManagerId(),content));
+        }
     }
 }
 

+ 1 - 1
zjugis-business/src/main/resources/templates/FlowProject/apply.ftl

@@ -285,7 +285,7 @@
               <td>序号</td>
               <td>里程碑信息</td>
               <td>计划完成时间</td>
-              <td>实际完成时间</td>
+              <td>项目进度</td>
               <td>操作</td>
             </tr>
             </thead>

+ 50 - 48
zjugis-business/src/main/resources/templates/FlowProject/js/apply.js

@@ -2,7 +2,7 @@
   var lists = [];
   var projectId = $("[name='project$id']").val()
   let viewState = z.ui.comm.getUrlParam("_o");
-  let read = z.ui.comm.getUrlParam("read");
+  let isFirst = z.ui.comm.getUrlParam("isFirst");
   let flowInstanceId = "";
   let isView = "";
   window.onload = function () {
@@ -102,7 +102,7 @@
         let obj = {
           name: milestoneList[i].name || "",
           planFinishTime: milestoneList[i].planFinishTime || "",
-          actualFinishTime: milestoneList[i].actualFinishTime || "",
+          process: milestoneList[i].process || "",
           id: milestoneList[i].id || "",
           projectId: milestoneList[i].projectId || projectId,
           sortnum: milestoneList[i].sortnum || ""
@@ -211,7 +211,7 @@
     let qjsjElements = document.getElementsByName("project_milestone_seq");
     var dataObj = {
       name: "",
-      actualFinishTime: "",
+      process: "100%",
       planFinishTime: "",
       id: "",
       projectId: projectId,
@@ -257,7 +257,6 @@
       }
     })
     z.ui.date("[name='ProjectMilestone[" + (lists.length-1) + "]$planFinishTime']").init()
-    z.ui.date("[name='ProjectMilestone[" + (lists.length-1) + "]$actualFinishTime']").init()
     buildSeq();
   }
 
@@ -298,59 +297,62 @@
           + '<td>'
           + '<div class="form-flex">'
           + '<div class="form-item" style="width: 100%;margin-right: 5px;">'
-          + '<div class="z-comp-input" name="ProjectMilestone[' + i + ']$actualFinishTime">'
-          + '<input type="text" value="'+lists[i].actualFinishTime+'">'
+          + '<div class="z-comp-input" name="ProjectMilestone[' + i + ']$process">'
+          + '<input type="text" value="'+lists[i].process+'">'
           + '</div>'
           + '</div>'
           + '</div>'
           + '</td>'
-          + '<td>'
-          + '<div id="editBtn_' + (i) + '" class="table-btn editBtn_' + (i) + '" data-index="' + (i) + '">'
-          + '<span>编辑</span>'
-          + '</div>'
-          + '<div id="delBtn_' + (i) + '" class="table-btn delBtn_' + (i) + '" data-index="' + (i) + '">'
-          + '<span>删除</span>'
-          + '</div>'
-          + '</td></tr>';
+          + '<td>';
+          if(isFirst !== '0' && viewState !== 'v') {
+            html += '<div id="editBtn_' + (i) + '" class="table-btn editBtn_' + (i) + '" data-index="' + (i) + '">'
+            + '<span>编辑</span>'
+            + '</div>'
+            + '<div id="delBtn_' + (i) + '" class="table-btn delBtn_' + (i) + '" data-index="' + (i) + '">'
+            + '<span>删除</span>'
+            + '</div>'
+          }
+          html += '</td></tr>';
     }
     tbodyQjsq.innerHTML = html
     for (let i = 0; i < lists.length; i++) {
       z.ui.date("[name='ProjectMilestone[" + i + "]$planFinishTime']").init()
-      z.ui.date("[name='ProjectMilestone[" + i + "]$actualFinishTime']").init()
-      $("#delBtn_" + i).click(function () {
-        z.ui.confirm("compid").init({
-          content: "确定删除吗?",
-          onConfirm: function () {
-            var element = document.getElementById("project_milestone_" + i);
-            element.remove();
-            buildSeq();
-            lists.splice(i, 1)
-            updateView();
-          },
-          onCancel: function () {
+      if(isFirst !== '0' && viewState !== 'v') {
+        $("#delBtn_" + i).click(function () {
+          z.ui.confirm("compid").init({
+            content: "确定删除吗?",
+            onConfirm: function () {
+              var element = document.getElementById("project_milestone_" + i);
+              element.remove();
+              buildSeq();
+              lists.splice(i, 1)
+              updateView();
+            },
+            onCancel: function () {
+
+            }
+          })
 
+        })
+        $("#editBtn_" + i).click(function () {
+          const span = $(this).find("span");
+          const html = span.html();
+          if (html === '编辑') {
+            span.html('保存')
+            detailWrite(i);
+            $("#addData").attr('disabled', "true");
+            $("#project_milestone_" + i).removeClass("form-table-disable")
+            return;
+          }
+          if (html === '保存') {
+            span.html('编辑')
+            detailReadonly(i, false, "project_milestone_")
+            $("#addData").removeAttr('disabled')
+            $("#project_milestone_" + i).addClass("form-table-disable")
+            return;
           }
         })
-
-      })
-      $("#editBtn_" + i).click(function () {
-        const span = $(this).find("span");
-        const html = span.html();
-        if (html === '编辑') {
-          span.html('保存')
-          detailWrite(i);
-          $("#addData").attr('disabled', "true");
-          $("#project_milestone_" + i).removeClass("form-table-disable")
-          return;
-        }
-        if (html === '保存') {
-          span.html('编辑')
-          detailReadonly(i, false,"project_milestone_")
-          $("#addData").removeAttr('disabled')
-          $("#project_milestone_" + i).addClass("form-table-disable")
-          return;
-        }
-      })
+      }
       detailReadonly(i,false,"project_milestone_")
       $("#project_milestone_" + i).addClass("form-table-disable")
       // if(viewState === 'v' || read=== '1'){
@@ -389,8 +391,8 @@
         + '<td>'
         + '<div class="form-flex">'
         + '<div class="form-item" style="width: 100%;margin-right: 5px;">'
-        + '<div class="z-comp-input" name="ProjectMilestone[' + index + ']$actualFinishTime">'
-        + '<input type="text" value="">'
+        + '<div class="z-comp-input" name="ProjectMilestone[' + index + ']$process">'
+        + '<input type="text" value="100%">'
         + '</div>'
         + '</div>'
         + '</div>'

+ 8 - 8
zjugis-business/src/main/resources/templates/public/workFlow.ftl

@@ -77,16 +77,16 @@
                     yjnrElement.value = "同意";
                 }
             }
+        }
 
-            function getUrlParam(param) {
-                var regex = new RegExp('[?&]' + param + '(=([^&#]*)|&|#|$)');
-                var url = window.location.href;
-                var results = regex.exec(url);
+        function getUrlParam(param) {
+            var regex = new RegExp('[?&]' + param + '(=([^&#]*)|&|#|$)');
+            var url = window.location.href;
+            var results = regex.exec(url);
 
-                if (!results) return null;
-                if (!results[2]) return '';
-                return decodeURIComponent(results[2].replace(/\+/g, ' '));
-            }
+            if (!results) return null;
+            if (!results[2]) return '';
+            return decodeURIComponent(results[2].replace(/\+/g, ' '));
         }
     </script>
     </@h.html>

+ 2 - 0
zjugis-module-infra/zjugis-module-infra-api/src/main/java/com/zjugis/module/infra/api/ding/dto/DingMessageDto.java

@@ -1,5 +1,6 @@
 package com.zjugis.module.infra.api.ding.dto;
 
+import lombok.AllArgsConstructor;
 import lombok.Data;
 
 import javax.validation.constraints.NotBlank;
@@ -11,6 +12,7 @@ import java.io.Serializable;
  * @date 2024/4/10 17:35
  */
 @Data
+@AllArgsConstructor
 public class DingMessageDto implements Serializable {
 
     @NotBlank

+ 10 - 5
zjugis-workflow/src/main/java/com/zjugis/z_workflow/controller/TModalController.java

@@ -13,6 +13,7 @@ import com.zjugis.z_workflow.entity.TFlowTemplate;
 import com.zjugis.z_workflow.entityExtend.ActivityInstanceDTO;
 import com.zjugis.z_workflow.service.*;
 import com.zjugis.z_workflow.utils.*;
+import lombok.extern.slf4j.Slf4j;
 import org.apache.commons.lang3.StringUtils;
 import org.jsoup.Jsoup;
 import org.jsoup.nodes.Document;
@@ -43,6 +44,7 @@ import static com.zjugis.z_workflow.exception.enums.TransferExceptionEnum.GET_OP
  * @Version: v1.0
  */
 @RestController
+@Slf4j
 public class TModalController extends BaseController {
 
 	@Value("${serviceUrl.z_workflow}")
@@ -275,7 +277,7 @@ public class TModalController extends BaseController {
 					if (!CollectionUtils.isEmpty(util.resList) && StringUtils.isBlank(util.activityInstanceId)) {
 						util.activityInstanceId = util.resList.get(util.resList.size() - 1).getActivityInstanceId();
 					}
-					if (util.resList.size() > 0) {
+					if (!util.resList.isEmpty()) {
 						Optional<ActivityInstanceDTO> optional = util.resList.stream().filter(t -> t.getActivityInstanceId().equals(util.activityInstanceId)).findFirst();
 						if (optional.isPresent()) {
 							util.activityTemplateId = optional.get().getActivityTemplateId();
@@ -364,9 +366,12 @@ public class TModalController extends BaseController {
 				inMap.put("flowDesc", flowInstance.getDescribtion());
 				if (!StringUtils.isBlank(this.activityInstanceId)) {
 					List<ISendBackRecord> records = iSendBackRecordService.getBackToActivityList(Arrays.asList(this.activityInstanceId));
-					if (records.size() > 0) {
+					if (!records.isEmpty()) {
 						ISendBackRecord sendBackRecord = records.get(0);
-						inMap.put("backUser", callInterfaceService.getUserByUserId(sendBackRecord.getBackWorkerId()).getNickname());
+						if(StringUtils.isNotBlank(sendBackRecord.getBackWorkerId())){
+							log.error("退回用户id缺失");
+							inMap.put("backUser", callInterfaceService.getUserByUserId(sendBackRecord.getBackWorkerId()).getNickname());
+						}
 						inMap.put("backTime", sendBackRecord.getCreateTime());
 						inMap.put("backReason", sendBackRecord.getBackReason());
 					}
@@ -374,8 +379,8 @@ public class TModalController extends BaseController {
 				inMap.put("btnHTML", getBtnListByRight(flowInstance.getFlowTemplateVersionId(),
 						tFlowTemplate.getFlowTemplateType(), this.activityTemplateId, this.activityInstanceId,
 						this.userId, this.isPrint, isView, isFirst, isFocus, isSubProcess));
-			}
-			inMap.put("child", child);
+			}			inMap.put("child", child);
+
 			inMap.put("materialViewMethod", this.materialViewMethod);
 			inMap.put("iSignImgAdaptation", this.iSignImgAdaptation);
 			inMap.put("iTopCurrentOpinion", this.iTopCurrentOpinion);

+ 1 - 1
zjugis-workflow/src/main/java/com/zjugis/z_workflow/utils/BtnUtil.java

@@ -339,7 +339,7 @@ public class BtnUtil {
 			this.isSameLevelBtn = isame;
 			if (CollectionUtils.isEmpty(typeList)) {
 				List<TFunctionBtnRel> tFunctionBtnRels = tFunctionBtnRelService.findBtnRel(flowTemplateVersionId, activityTemplateId);
-				this.typeList = tFunctionBtnRels.stream().filter(t -> StringUtils.isBlank(t.getShowActivityId()) || t.getShowActivityId().contains(this.activityTemplateId)).map(TFunctionBtnRel::getBtnType).collect(Collectors.toSet());
+				this.typeList = tFunctionBtnRels.stream().filter(t -> StringUtils.isBlank(t.getShowActivityId()) || (StringUtils.isNotBlank(this.activityTemplateId) && t.getShowActivityId().contains(this.activityTemplateId))).map(TFunctionBtnRel::getBtnType).collect(Collectors.toSet());
 			}
 		}